This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make sprintf %c and chr() on inf/nan return the U+FFFD.
[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 #ifndef HAS_C99
39 # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && !defined(__VMS)
40 #  define HAS_C99 1
41 # endif
42 #endif
43 #ifdef HAS_C99
44 # include <stdint.h>
45 #endif
46
47 #ifdef __Lynx__
48 /* Missing proto on LynxOS */
49   char *gconvert(double, int, int,  char *);
50 #endif
51
52 #ifdef PERL_NEW_COPY_ON_WRITE
53 #   ifndef SV_COW_THRESHOLD
54 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
55 #   endif
56 #   ifndef SV_COWBUF_THRESHOLD
57 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
58 #   endif
59 #   ifndef SV_COW_MAX_WASTE_THRESHOLD
60 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
61 #   endif
62 #   ifndef SV_COWBUF_WASTE_THRESHOLD
63 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
64 #   endif
65 #   ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
66 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
67 #   endif
68 #   ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
69 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
70 #   endif
71 #endif
72 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
73    hold is 0. */
74 #if SV_COW_THRESHOLD
75 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
76 #else
77 # define GE_COW_THRESHOLD(cur) 1
78 #endif
79 #if SV_COWBUF_THRESHOLD
80 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
81 #else
82 # define GE_COWBUF_THRESHOLD(cur) 1
83 #endif
84 #if SV_COW_MAX_WASTE_THRESHOLD
85 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
86 #else
87 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
88 #endif
89 #if SV_COWBUF_WASTE_THRESHOLD
90 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
91 #else
92 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
93 #endif
94 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
95 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
96 #else
97 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
98 #endif
99 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
100 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
101 #else
102 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
103 #endif
104
105 #define CHECK_COW_THRESHOLD(cur,len) (\
106     GE_COW_THRESHOLD((cur)) && \
107     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
108     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
109 )
110 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
111     GE_COWBUF_THRESHOLD((cur)) && \
112     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
113     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
114 )
115
116 #ifdef PERL_UTF8_CACHE_ASSERT
117 /* if adding more checks watch out for the following tests:
118  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
119  *   lib/utf8.t lib/Unicode/Collate/t/index.t
120  * --jhi
121  */
122 #   define ASSERT_UTF8_CACHE(cache) \
123     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
124                               assert((cache)[2] <= (cache)[3]); \
125                               assert((cache)[3] <= (cache)[1]);} \
126                               } STMT_END
127 #else
128 #   define ASSERT_UTF8_CACHE(cache) NOOP
129 #endif
130
131 #ifdef PERL_OLD_COPY_ON_WRITE
132 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
133 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
134 #endif
135
136 /* ============================================================================
137
138 =head1 Allocation and deallocation of SVs.
139 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
140 sv, av, hv...) contains type and reference count information, and for
141 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
142 contains fields specific to each type.  Some types store all they need
143 in the head, so don't have a body.
144
145 In all but the most memory-paranoid configurations (ex: PURIFY), heads
146 and bodies are allocated out of arenas, which by default are
147 approximately 4K chunks of memory parcelled up into N heads or bodies.
148 Sv-bodies are allocated by their sv-type, guaranteeing size
149 consistency needed to allocate safely from arrays.
150
151 For SV-heads, the first slot in each arena is reserved, and holds a
152 link to the next arena, some flags, and a note of the number of slots.
153 Snaked through each arena chain is a linked list of free items; when
154 this becomes empty, an extra arena is allocated and divided up into N
155 items which are threaded into the free list.
156
157 SV-bodies are similar, but they use arena-sets by default, which
158 separate the link and info from the arena itself, and reclaim the 1st
159 slot in the arena.  SV-bodies are further described later.
160
161 The following global variables are associated with arenas:
162
163  PL_sv_arenaroot     pointer to list of SV arenas
164  PL_sv_root          pointer to list of free SV structures
165
166  PL_body_arenas      head of linked-list of body arenas
167  PL_body_roots[]     array of pointers to list of free bodies of svtype
168                      arrays are indexed by the svtype needed
169
170 A few special SV heads are not allocated from an arena, but are
171 instead directly created in the interpreter structure, eg PL_sv_undef.
172 The size of arenas can be changed from the default by setting
173 PERL_ARENA_SIZE appropriately at compile time.
174
175 The SV arena serves the secondary purpose of allowing still-live SVs
176 to be located and destroyed during final cleanup.
177
178 At the lowest level, the macros new_SV() and del_SV() grab and free
179 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
180 to return the SV to the free list with error checking.) new_SV() calls
181 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
182 SVs in the free list have their SvTYPE field set to all ones.
183
184 At the time of very final cleanup, sv_free_arenas() is called from
185 perl_destruct() to physically free all the arenas allocated since the
186 start of the interpreter.
187
188 The function visit() scans the SV arenas list, and calls a specified
189 function for each SV it finds which is still live - ie which has an SvTYPE
190 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
191 following functions (specified as [function that calls visit()] / [function
192 called by visit() for each SV]):
193
194     sv_report_used() / do_report_used()
195                         dump all remaining SVs (debugging aid)
196
197     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
198                       do_clean_named_io_objs(),do_curse()
199                         Attempt to free all objects pointed to by RVs,
200                         try to do the same for all objects indir-
201                         ectly referenced by typeglobs too, and
202                         then do a final sweep, cursing any
203                         objects that remain.  Called once from
204                         perl_destruct(), prior to calling sv_clean_all()
205                         below.
206
207     sv_clean_all() / do_clean_all()
208                         SvREFCNT_dec(sv) each remaining SV, possibly
209                         triggering an sv_free(). It also sets the
210                         SVf_BREAK flag on the SV to indicate that the
211                         refcnt has been artificially lowered, and thus
212                         stopping sv_free() from giving spurious warnings
213                         about SVs which unexpectedly have a refcnt
214                         of zero.  called repeatedly from perl_destruct()
215                         until there are no SVs left.
216
217 =head2 Arena allocator API Summary
218
219 Private API to rest of sv.c
220
221     new_SV(),  del_SV(),
222
223     new_XPVNV(), del_XPVGV(),
224     etc
225
226 Public API:
227
228     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
229
230 =cut
231
232  * ========================================================================= */
233
234 /*
235  * "A time to plant, and a time to uproot what was planted..."
236  */
237
238 #ifdef PERL_MEM_LOG
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
240             Perl_mem_log_new_sv(sv, file, line, func)
241 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
242             Perl_mem_log_del_sv(sv, file, line, func)
243 #else
244 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
245 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
246 #endif
247
248 #ifdef DEBUG_LEAKING_SCALARS
249 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
250         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
251     } STMT_END
252 #  define DEBUG_SV_SERIAL(sv)                                               \
253     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
254             PTR2UV(sv), (long)(sv)->sv_debug_serial))
255 #else
256 #  define FREE_SV_DEBUG_FILE(sv)
257 #  define DEBUG_SV_SERIAL(sv)   NOOP
258 #endif
259
260 #ifdef PERL_POISON
261 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
262 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
263 /* Whilst I'd love to do this, it seems that things like to check on
264    unreferenced scalars
265 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
266 */
267 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
268                                 PoisonNew(&SvREFCNT(sv), 1, U32)
269 #else
270 #  define SvARENA_CHAIN(sv)     SvANY(sv)
271 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
272 #  define POSION_SV_HEAD(sv)
273 #endif
274
275 /* Mark an SV head as unused, and add to free list.
276  *
277  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
278  * its refcount artificially decremented during global destruction, so
279  * there may be dangling pointers to it. The last thing we want in that
280  * case is for it to be reused. */
281
282 #define plant_SV(p) \
283     STMT_START {                                        \
284         const U32 old_flags = SvFLAGS(p);                       \
285         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
286         DEBUG_SV_SERIAL(p);                             \
287         FREE_SV_DEBUG_FILE(p);                          \
288         POSION_SV_HEAD(p);                              \
289         SvFLAGS(p) = SVTYPEMASK;                        \
290         if (!(old_flags & SVf_BREAK)) {         \
291             SvARENA_CHAIN_SET(p, PL_sv_root);   \
292             PL_sv_root = (p);                           \
293         }                                               \
294         --PL_sv_count;                                  \
295     } STMT_END
296
297 #define uproot_SV(p) \
298     STMT_START {                                        \
299         (p) = PL_sv_root;                               \
300         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
301         ++PL_sv_count;                                  \
302     } STMT_END
303
304
305 /* make some more SVs by adding another arena */
306
307 STATIC SV*
308 S_more_sv(pTHX)
309 {
310     SV* sv;
311     char *chunk;                /* must use New here to match call to */
312     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
313     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
314     uproot_SV(sv);
315     return sv;
316 }
317
318 /* new_SV(): return a new, empty SV head */
319
320 #ifdef DEBUG_LEAKING_SCALARS
321 /* provide a real function for a debugger to play with */
322 STATIC SV*
323 S_new_SV(pTHX_ const char *file, int line, const char *func)
324 {
325     SV* sv;
326
327     if (PL_sv_root)
328         uproot_SV(sv);
329     else
330         sv = S_more_sv(aTHX);
331     SvANY(sv) = 0;
332     SvREFCNT(sv) = 1;
333     SvFLAGS(sv) = 0;
334     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
335     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
336                 ? PL_parser->copline
337                 :  PL_curcop
338                     ? CopLINE(PL_curcop)
339                     : 0
340             );
341     sv->sv_debug_inpad = 0;
342     sv->sv_debug_parent = NULL;
343     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
344
345     sv->sv_debug_serial = PL_sv_serial++;
346
347     MEM_LOG_NEW_SV(sv, file, line, func);
348     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
349             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
350
351     return sv;
352 }
353 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
354
355 #else
356 #  define new_SV(p) \
357     STMT_START {                                        \
358         if (PL_sv_root)                                 \
359             uproot_SV(p);                               \
360         else                                            \
361             (p) = S_more_sv(aTHX);                      \
362         SvANY(p) = 0;                                   \
363         SvREFCNT(p) = 1;                                \
364         SvFLAGS(p) = 0;                                 \
365         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
366     } STMT_END
367 #endif
368
369
370 /* del_SV(): return an empty SV head to the free list */
371
372 #ifdef DEBUGGING
373
374 #define del_SV(p) \
375     STMT_START {                                        \
376         if (DEBUG_D_TEST)                               \
377             del_sv(p);                                  \
378         else                                            \
379             plant_SV(p);                                \
380     } STMT_END
381
382 STATIC void
383 S_del_sv(pTHX_ SV *p)
384 {
385     PERL_ARGS_ASSERT_DEL_SV;
386
387     if (DEBUG_D_TEST) {
388         SV* sva;
389         bool ok = 0;
390         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
391             const SV * const sv = sva + 1;
392             const SV * const svend = &sva[SvREFCNT(sva)];
393             if (p >= sv && p < svend) {
394                 ok = 1;
395                 break;
396             }
397         }
398         if (!ok) {
399             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
400                              "Attempt to free non-arena SV: 0x%"UVxf
401                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
402             return;
403         }
404     }
405     plant_SV(p);
406 }
407
408 #else /* ! DEBUGGING */
409
410 #define del_SV(p)   plant_SV(p)
411
412 #endif /* DEBUGGING */
413
414
415 /*
416 =head1 SV Manipulation Functions
417
418 =for apidoc sv_add_arena
419
420 Given a chunk of memory, link it to the head of the list of arenas,
421 and split it into a list of free SVs.
422
423 =cut
424 */
425
426 static void
427 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
428 {
429     SV *const sva = MUTABLE_SV(ptr);
430     SV* sv;
431     SV* svend;
432
433     PERL_ARGS_ASSERT_SV_ADD_ARENA;
434
435     /* The first SV in an arena isn't an SV. */
436     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
437     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
438     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
439
440     PL_sv_arenaroot = sva;
441     PL_sv_root = sva + 1;
442
443     svend = &sva[SvREFCNT(sva) - 1];
444     sv = sva + 1;
445     while (sv < svend) {
446         SvARENA_CHAIN_SET(sv, (sv + 1));
447 #ifdef DEBUGGING
448         SvREFCNT(sv) = 0;
449 #endif
450         /* Must always set typemask because it's always checked in on cleanup
451            when the arenas are walked looking for objects.  */
452         SvFLAGS(sv) = SVTYPEMASK;
453         sv++;
454     }
455     SvARENA_CHAIN_SET(sv, 0);
456 #ifdef DEBUGGING
457     SvREFCNT(sv) = 0;
458 #endif
459     SvFLAGS(sv) = SVTYPEMASK;
460 }
461
462 /* visit(): call the named function for each non-free SV in the arenas
463  * whose flags field matches the flags/mask args. */
464
465 STATIC I32
466 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
467 {
468     SV* sva;
469     I32 visited = 0;
470
471     PERL_ARGS_ASSERT_VISIT;
472
473     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
474         const SV * const svend = &sva[SvREFCNT(sva)];
475         SV* sv;
476         for (sv = sva + 1; sv < svend; ++sv) {
477             if (SvTYPE(sv) != (svtype)SVTYPEMASK
478                     && (sv->sv_flags & mask) == flags
479                     && SvREFCNT(sv))
480             {
481                 (*f)(aTHX_ sv);
482                 ++visited;
483             }
484         }
485     }
486     return visited;
487 }
488
489 #ifdef DEBUGGING
490
491 /* called by sv_report_used() for each live SV */
492
493 static void
494 do_report_used(pTHX_ SV *const sv)
495 {
496     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
497         PerlIO_printf(Perl_debug_log, "****\n");
498         sv_dump(sv);
499     }
500 }
501 #endif
502
503 /*
504 =for apidoc sv_report_used
505
506 Dump the contents of all SVs not yet freed (debugging aid).
507
508 =cut
509 */
510
511 void
512 Perl_sv_report_used(pTHX)
513 {
514 #ifdef DEBUGGING
515     visit(do_report_used, 0, 0);
516 #else
517     PERL_UNUSED_CONTEXT;
518 #endif
519 }
520
521 /* called by sv_clean_objs() for each live SV */
522
523 static void
524 do_clean_objs(pTHX_ SV *const ref)
525 {
526     assert (SvROK(ref));
527     {
528         SV * const target = SvRV(ref);
529         if (SvOBJECT(target)) {
530             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
531             if (SvWEAKREF(ref)) {
532                 sv_del_backref(target, ref);
533                 SvWEAKREF_off(ref);
534                 SvRV_set(ref, NULL);
535             } else {
536                 SvROK_off(ref);
537                 SvRV_set(ref, NULL);
538                 SvREFCNT_dec_NN(target);
539             }
540         }
541     }
542 }
543
544
545 /* clear any slots in a GV which hold objects - except IO;
546  * called by sv_clean_objs() for each live GV */
547
548 static void
549 do_clean_named_objs(pTHX_ SV *const sv)
550 {
551     SV *obj;
552     assert(SvTYPE(sv) == SVt_PVGV);
553     assert(isGV_with_GP(sv));
554     if (!GvGP(sv))
555         return;
556
557     /* freeing GP entries may indirectly free the current GV;
558      * hold onto it while we mess with the GP slots */
559     SvREFCNT_inc(sv);
560
561     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
562         DEBUG_D((PerlIO_printf(Perl_debug_log,
563                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
564         GvSV(sv) = NULL;
565         SvREFCNT_dec_NN(obj);
566     }
567     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
568         DEBUG_D((PerlIO_printf(Perl_debug_log,
569                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
570         GvAV(sv) = NULL;
571         SvREFCNT_dec_NN(obj);
572     }
573     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
574         DEBUG_D((PerlIO_printf(Perl_debug_log,
575                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
576         GvHV(sv) = NULL;
577         SvREFCNT_dec_NN(obj);
578     }
579     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
580         DEBUG_D((PerlIO_printf(Perl_debug_log,
581                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
582         GvCV_set(sv, NULL);
583         SvREFCNT_dec_NN(obj);
584     }
585     SvREFCNT_dec_NN(sv); /* undo the inc above */
586 }
587
588 /* clear any IO slots in a GV which hold objects (except stderr, defout);
589  * called by sv_clean_objs() for each live GV */
590
591 static void
592 do_clean_named_io_objs(pTHX_ SV *const sv)
593 {
594     SV *obj;
595     assert(SvTYPE(sv) == SVt_PVGV);
596     assert(isGV_with_GP(sv));
597     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
598         return;
599
600     SvREFCNT_inc(sv);
601     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
602         DEBUG_D((PerlIO_printf(Perl_debug_log,
603                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
604         GvIOp(sv) = NULL;
605         SvREFCNT_dec_NN(obj);
606     }
607     SvREFCNT_dec_NN(sv); /* undo the inc above */
608 }
609
610 /* Void wrapper to pass to visit() */
611 static void
612 do_curse(pTHX_ SV * const sv) {
613     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
614      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
615         return;
616     (void)curse(sv, 0);
617 }
618
619 /*
620 =for apidoc sv_clean_objs
621
622 Attempt to destroy all objects not yet freed.
623
624 =cut
625 */
626
627 void
628 Perl_sv_clean_objs(pTHX)
629 {
630     GV *olddef, *olderr;
631     PL_in_clean_objs = TRUE;
632     visit(do_clean_objs, SVf_ROK, SVf_ROK);
633     /* Some barnacles may yet remain, clinging to typeglobs.
634      * Run the non-IO destructors first: they may want to output
635      * error messages, close files etc */
636     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
637     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
638     /* And if there are some very tenacious barnacles clinging to arrays,
639        closures, or what have you.... */
640     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
641     olddef = PL_defoutgv;
642     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
643     if (olddef && isGV_with_GP(olddef))
644         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
645     olderr = PL_stderrgv;
646     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
647     if (olderr && isGV_with_GP(olderr))
648         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
649     SvREFCNT_dec(olddef);
650     PL_in_clean_objs = FALSE;
651 }
652
653 /* called by sv_clean_all() for each live SV */
654
655 static void
656 do_clean_all(pTHX_ SV *const sv)
657 {
658     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
659         /* don't clean pid table and strtab */
660         return;
661     }
662     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
663     SvFLAGS(sv) |= SVf_BREAK;
664     SvREFCNT_dec_NN(sv);
665 }
666
667 /*
668 =for apidoc sv_clean_all
669
670 Decrement the refcnt of each remaining SV, possibly triggering a
671 cleanup.  This function may have to be called multiple times to free
672 SVs which are in complex self-referential hierarchies.
673
674 =cut
675 */
676
677 I32
678 Perl_sv_clean_all(pTHX)
679 {
680     I32 cleaned;
681     PL_in_clean_all = TRUE;
682     cleaned = visit(do_clean_all, 0,0);
683     return cleaned;
684 }
685
686 /*
687   ARENASETS: a meta-arena implementation which separates arena-info
688   into struct arena_set, which contains an array of struct
689   arena_descs, each holding info for a single arena.  By separating
690   the meta-info from the arena, we recover the 1st slot, formerly
691   borrowed for list management.  The arena_set is about the size of an
692   arena, avoiding the needless malloc overhead of a naive linked-list.
693
694   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
695   memory in the last arena-set (1/2 on average).  In trade, we get
696   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
697   smaller types).  The recovery of the wasted space allows use of
698   small arenas for large, rare body types, by changing array* fields
699   in body_details_by_type[] below.
700 */
701 struct arena_desc {
702     char       *arena;          /* the raw storage, allocated aligned */
703     size_t      size;           /* its size ~4k typ */
704     svtype      utype;          /* bodytype stored in arena */
705 };
706
707 struct arena_set;
708
709 /* Get the maximum number of elements in set[] such that struct arena_set
710    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
711    therefore likely to be 1 aligned memory page.  */
712
713 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
714                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
715
716 struct arena_set {
717     struct arena_set* next;
718     unsigned int   set_size;    /* ie ARENAS_PER_SET */
719     unsigned int   curr;        /* index of next available arena-desc */
720     struct arena_desc set[ARENAS_PER_SET];
721 };
722
723 /*
724 =for apidoc sv_free_arenas
725
726 Deallocate the memory used by all arenas.  Note that all the individual SV
727 heads and bodies within the arenas must already have been freed.
728
729 =cut
730
731 */
732 void
733 Perl_sv_free_arenas(pTHX)
734 {
735     SV* sva;
736     SV* svanext;
737     unsigned int i;
738
739     /* Free arenas here, but be careful about fake ones.  (We assume
740        contiguity of the fake ones with the corresponding real ones.) */
741
742     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
743         svanext = MUTABLE_SV(SvANY(sva));
744         while (svanext && SvFAKE(svanext))
745             svanext = MUTABLE_SV(SvANY(svanext));
746
747         if (!SvFAKE(sva))
748             Safefree(sva);
749     }
750
751     {
752         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
753
754         while (aroot) {
755             struct arena_set *current = aroot;
756             i = aroot->curr;
757             while (i--) {
758                 assert(aroot->set[i].arena);
759                 Safefree(aroot->set[i].arena);
760             }
761             aroot = aroot->next;
762             Safefree(current);
763         }
764     }
765     PL_body_arenas = 0;
766
767     i = PERL_ARENA_ROOTS_SIZE;
768     while (i--)
769         PL_body_roots[i] = 0;
770
771     PL_sv_arenaroot = 0;
772     PL_sv_root = 0;
773 }
774
775 /*
776   Here are mid-level routines that manage the allocation of bodies out
777   of the various arenas.  There are 5 kinds of arenas:
778
779   1. SV-head arenas, which are discussed and handled above
780   2. regular body arenas
781   3. arenas for reduced-size bodies
782   4. Hash-Entry arenas
783
784   Arena types 2 & 3 are chained by body-type off an array of
785   arena-root pointers, which is indexed by svtype.  Some of the
786   larger/less used body types are malloced singly, since a large
787   unused block of them is wasteful.  Also, several svtypes dont have
788   bodies; the data fits into the sv-head itself.  The arena-root
789   pointer thus has a few unused root-pointers (which may be hijacked
790   later for arena types 4,5)
791
792   3 differs from 2 as an optimization; some body types have several
793   unused fields in the front of the structure (which are kept in-place
794   for consistency).  These bodies can be allocated in smaller chunks,
795   because the leading fields arent accessed.  Pointers to such bodies
796   are decremented to point at the unused 'ghost' memory, knowing that
797   the pointers are used with offsets to the real memory.
798
799
800 =head1 SV-Body Allocation
801
802 =cut
803
804 Allocation of SV-bodies is similar to SV-heads, differing as follows;
805 the allocation mechanism is used for many body types, so is somewhat
806 more complicated, it uses arena-sets, and has no need for still-live
807 SV detection.
808
809 At the outermost level, (new|del)_X*V macros return bodies of the
810 appropriate type.  These macros call either (new|del)_body_type or
811 (new|del)_body_allocated macro pairs, depending on specifics of the
812 type.  Most body types use the former pair, the latter pair is used to
813 allocate body types with "ghost fields".
814
815 "ghost fields" are fields that are unused in certain types, and
816 consequently don't need to actually exist.  They are declared because
817 they're part of a "base type", which allows use of functions as
818 methods.  The simplest examples are AVs and HVs, 2 aggregate types
819 which don't use the fields which support SCALAR semantics.
820
821 For these types, the arenas are carved up into appropriately sized
822 chunks, we thus avoid wasted memory for those unaccessed members.
823 When bodies are allocated, we adjust the pointer back in memory by the
824 size of the part not allocated, so it's as if we allocated the full
825 structure.  (But things will all go boom if you write to the part that
826 is "not there", because you'll be overwriting the last members of the
827 preceding structure in memory.)
828
829 We calculate the correction using the STRUCT_OFFSET macro on the first
830 member present.  If the allocated structure is smaller (no initial NV
831 actually allocated) then the net effect is to subtract the size of the NV
832 from the pointer, to return a new pointer as if an initial NV were actually
833 allocated.  (We were using structures named *_allocated for this, but
834 this turned out to be a subtle bug, because a structure without an NV
835 could have a lower alignment constraint, but the compiler is allowed to
836 optimised accesses based on the alignment constraint of the actual pointer
837 to the full structure, for example, using a single 64 bit load instruction
838 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
839
840 This is the same trick as was used for NV and IV bodies.  Ironically it
841 doesn't need to be used for NV bodies any more, because NV is now at
842 the start of the structure.  IV bodies don't need it either, because
843 they are no longer allocated.
844
845 In turn, the new_body_* allocators call S_new_body(), which invokes
846 new_body_inline macro, which takes a lock, and takes a body off the
847 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
848 necessary to refresh an empty list.  Then the lock is released, and
849 the body is returned.
850
851 Perl_more_bodies allocates a new arena, and carves it up into an array of N
852 bodies, which it strings into a linked list.  It looks up arena-size
853 and body-size from the body_details table described below, thus
854 supporting the multiple body-types.
855
856 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
857 the (new|del)_X*V macros are mapped directly to malloc/free.
858
859 For each sv-type, struct body_details bodies_by_type[] carries
860 parameters which control these aspects of SV handling:
861
862 Arena_size determines whether arenas are used for this body type, and if
863 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
864 zero, forcing individual mallocs and frees.
865
866 Body_size determines how big a body is, and therefore how many fit into
867 each arena.  Offset carries the body-pointer adjustment needed for
868 "ghost fields", and is used in *_allocated macros.
869
870 But its main purpose is to parameterize info needed in
871 Perl_sv_upgrade().  The info here dramatically simplifies the function
872 vs the implementation in 5.8.8, making it table-driven.  All fields
873 are used for this, except for arena_size.
874
875 For the sv-types that have no bodies, arenas are not used, so those
876 PL_body_roots[sv_type] are unused, and can be overloaded.  In
877 something of a special case, SVt_NULL is borrowed for HE arenas;
878 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
879 bodies_by_type[SVt_NULL] slot is not used, as the table is not
880 available in hv.c.
881
882 */
883
884 struct body_details {
885     U8 body_size;       /* Size to allocate  */
886     U8 copy;            /* Size of structure to copy (may be shorter)  */
887     U8 offset;
888     unsigned int type : 4;          /* We have space for a sanity check.  */
889     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
890     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
891     unsigned int arena : 1;         /* Allocated from an arena */
892     size_t arena_size;              /* Size of arena to allocate */
893 };
894
895 #define HADNV FALSE
896 #define NONV TRUE
897
898
899 #ifdef PURIFY
900 /* With -DPURFIY we allocate everything directly, and don't use arenas.
901    This seems a rather elegant way to simplify some of the code below.  */
902 #define HASARENA FALSE
903 #else
904 #define HASARENA TRUE
905 #endif
906 #define NOARENA FALSE
907
908 /* Size the arenas to exactly fit a given number of bodies.  A count
909    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
910    simplifying the default.  If count > 0, the arena is sized to fit
911    only that many bodies, allowing arenas to be used for large, rare
912    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
913    limited by PERL_ARENA_SIZE, so we can safely oversize the
914    declarations.
915  */
916 #define FIT_ARENA0(body_size)                           \
917     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
918 #define FIT_ARENAn(count,body_size)                     \
919     ( count * body_size <= PERL_ARENA_SIZE)             \
920     ? count * body_size                                 \
921     : FIT_ARENA0 (body_size)
922 #define FIT_ARENA(count,body_size)                      \
923     count                                               \
924     ? FIT_ARENAn (count, body_size)                     \
925     : FIT_ARENA0 (body_size)
926
927 /* Calculate the length to copy. Specifically work out the length less any
928    final padding the compiler needed to add.  See the comment in sv_upgrade
929    for why copying the padding proved to be a bug.  */
930
931 #define copy_length(type, last_member) \
932         STRUCT_OFFSET(type, last_member) \
933         + sizeof (((type*)SvANY((const SV *)0))->last_member)
934
935 static const struct body_details bodies_by_type[] = {
936     /* HEs use this offset for their arena.  */
937     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
938
939     /* IVs are in the head, so the allocation size is 0.  */
940     { 0,
941       sizeof(IV), /* This is used to copy out the IV body.  */
942       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
943       NOARENA /* IVS don't need an arena  */, 0
944     },
945
946     { sizeof(NV), sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949
950     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
951       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
952       + STRUCT_OFFSET(XPV, xpv_cur),
953       SVt_PV, FALSE, NONV, HASARENA,
954       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
955
956     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
957       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
958       + STRUCT_OFFSET(XPV, xpv_cur),
959       SVt_INVLIST, TRUE, NONV, HASARENA,
960       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
961
962     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
963       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
964       + STRUCT_OFFSET(XPV, xpv_cur),
965       SVt_PVIV, FALSE, NONV, HASARENA,
966       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
967
968     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
969       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
970       + STRUCT_OFFSET(XPV, xpv_cur),
971       SVt_PVNV, FALSE, HADNV, HASARENA,
972       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
973
974     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
975       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
976
977     { sizeof(regexp),
978       sizeof(regexp),
979       0,
980       SVt_REGEXP, TRUE, NONV, HASARENA,
981       FIT_ARENA(0, sizeof(regexp))
982     },
983
984     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
985       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
986     
987     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
988       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
989
990     { sizeof(XPVAV),
991       copy_length(XPVAV, xav_alloc),
992       0,
993       SVt_PVAV, TRUE, NONV, HASARENA,
994       FIT_ARENA(0, sizeof(XPVAV)) },
995
996     { sizeof(XPVHV),
997       copy_length(XPVHV, xhv_max),
998       0,
999       SVt_PVHV, TRUE, NONV, HASARENA,
1000       FIT_ARENA(0, sizeof(XPVHV)) },
1001
1002     { sizeof(XPVCV),
1003       sizeof(XPVCV),
1004       0,
1005       SVt_PVCV, TRUE, NONV, HASARENA,
1006       FIT_ARENA(0, sizeof(XPVCV)) },
1007
1008     { sizeof(XPVFM),
1009       sizeof(XPVFM),
1010       0,
1011       SVt_PVFM, TRUE, NONV, NOARENA,
1012       FIT_ARENA(20, sizeof(XPVFM)) },
1013
1014     { sizeof(XPVIO),
1015       sizeof(XPVIO),
1016       0,
1017       SVt_PVIO, TRUE, NONV, HASARENA,
1018       FIT_ARENA(24, sizeof(XPVIO)) },
1019 };
1020
1021 #define new_body_allocated(sv_type)             \
1022     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1023              - bodies_by_type[sv_type].offset)
1024
1025 /* return a thing to the free list */
1026
1027 #define del_body(thing, root)                           \
1028     STMT_START {                                        \
1029         void ** const thing_copy = (void **)thing;      \
1030         *thing_copy = *root;                            \
1031         *root = (void*)thing_copy;                      \
1032     } STMT_END
1033
1034 #ifdef PURIFY
1035
1036 #define new_XNV()       safemalloc(sizeof(XPVNV))
1037 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1038 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1039
1040 #define del_XPVGV(p)    safefree(p)
1041
1042 #else /* !PURIFY */
1043
1044 #define new_XNV()       new_body_allocated(SVt_NV)
1045 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1046 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1047
1048 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1049                                  &PL_body_roots[SVt_PVGV])
1050
1051 #endif /* PURIFY */
1052
1053 /* no arena for you! */
1054
1055 #define new_NOARENA(details) \
1056         safemalloc((details)->body_size + (details)->offset)
1057 #define new_NOARENAZ(details) \
1058         safecalloc((details)->body_size + (details)->offset, 1)
1059
1060 void *
1061 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1062                   const size_t arena_size)
1063 {
1064     void ** const root = &PL_body_roots[sv_type];
1065     struct arena_desc *adesc;
1066     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1067     unsigned int curr;
1068     char *start;
1069     const char *end;
1070     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1071 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1072     dVAR;
1073 #endif
1074 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1075     static bool done_sanity_check;
1076
1077     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1078      * variables like done_sanity_check. */
1079     if (!done_sanity_check) {
1080         unsigned int i = SVt_LAST;
1081
1082         done_sanity_check = TRUE;
1083
1084         while (i--)
1085             assert (bodies_by_type[i].type == i);
1086     }
1087 #endif
1088
1089     assert(arena_size);
1090
1091     /* may need new arena-set to hold new arena */
1092     if (!aroot || aroot->curr >= aroot->set_size) {
1093         struct arena_set *newroot;
1094         Newxz(newroot, 1, struct arena_set);
1095         newroot->set_size = ARENAS_PER_SET;
1096         newroot->next = aroot;
1097         aroot = newroot;
1098         PL_body_arenas = (void *) newroot;
1099         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1100     }
1101
1102     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1103     curr = aroot->curr++;
1104     adesc = &(aroot->set[curr]);
1105     assert(!adesc->arena);
1106     
1107     Newx(adesc->arena, good_arena_size, char);
1108     adesc->size = good_arena_size;
1109     adesc->utype = sv_type;
1110     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1111                           curr, (void*)adesc->arena, (UV)good_arena_size));
1112
1113     start = (char *) adesc->arena;
1114
1115     /* Get the address of the byte after the end of the last body we can fit.
1116        Remember, this is integer division:  */
1117     end = start + good_arena_size / body_size * body_size;
1118
1119     /* computed count doesn't reflect the 1st slot reservation */
1120 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1121     DEBUG_m(PerlIO_printf(Perl_debug_log,
1122                           "arena %p end %p arena-size %d (from %d) type %d "
1123                           "size %d ct %d\n",
1124                           (void*)start, (void*)end, (int)good_arena_size,
1125                           (int)arena_size, sv_type, (int)body_size,
1126                           (int)good_arena_size / (int)body_size));
1127 #else
1128     DEBUG_m(PerlIO_printf(Perl_debug_log,
1129                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1130                           (void*)start, (void*)end,
1131                           (int)arena_size, sv_type, (int)body_size,
1132                           (int)good_arena_size / (int)body_size));
1133 #endif
1134     *root = (void *)start;
1135
1136     while (1) {
1137         /* Where the next body would start:  */
1138         char * const next = start + body_size;
1139
1140         if (next >= end) {
1141             /* This is the last body:  */
1142             assert(next == end);
1143
1144             *(void **)start = 0;
1145             return *root;
1146         }
1147
1148         *(void**) start = (void *)next;
1149         start = next;
1150     }
1151 }
1152
1153 /* grab a new thing from the free list, allocating more if necessary.
1154    The inline version is used for speed in hot routines, and the
1155    function using it serves the rest (unless PURIFY).
1156 */
1157 #define new_body_inline(xpv, sv_type) \
1158     STMT_START { \
1159         void ** const r3wt = &PL_body_roots[sv_type]; \
1160         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1161           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1162                                              bodies_by_type[sv_type].body_size,\
1163                                              bodies_by_type[sv_type].arena_size)); \
1164         *(r3wt) = *(void**)(xpv); \
1165     } STMT_END
1166
1167 #ifndef PURIFY
1168
1169 STATIC void *
1170 S_new_body(pTHX_ const svtype sv_type)
1171 {
1172     void *xpv;
1173     new_body_inline(xpv, sv_type);
1174     return xpv;
1175 }
1176
1177 #endif
1178
1179 static const struct body_details fake_rv =
1180     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1181
1182 /*
1183 =for apidoc sv_upgrade
1184
1185 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1186 SV, then copies across as much information as possible from the old body.
1187 It croaks if the SV is already in a more complex form than requested.  You
1188 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1189 before calling C<sv_upgrade>, and hence does not croak.  See also
1190 C<svtype>.
1191
1192 =cut
1193 */
1194
1195 void
1196 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1197 {
1198     void*       old_body;
1199     void*       new_body;
1200     const svtype old_type = SvTYPE(sv);
1201     const struct body_details *new_type_details;
1202     const struct body_details *old_type_details
1203         = bodies_by_type + old_type;
1204     SV *referant = NULL;
1205
1206     PERL_ARGS_ASSERT_SV_UPGRADE;
1207
1208     if (old_type == new_type)
1209         return;
1210
1211     /* This clause was purposefully added ahead of the early return above to
1212        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1213        inference by Nick I-S that it would fix other troublesome cases. See
1214        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1215
1216        Given that shared hash key scalars are no longer PVIV, but PV, there is
1217        no longer need to unshare so as to free up the IVX slot for its proper
1218        purpose. So it's safe to move the early return earlier.  */
1219
1220     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1221         sv_force_normal_flags(sv, 0);
1222     }
1223
1224     old_body = SvANY(sv);
1225
1226     /* Copying structures onto other structures that have been neatly zeroed
1227        has a subtle gotcha. Consider XPVMG
1228
1229        +------+------+------+------+------+-------+-------+
1230        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1231        +------+------+------+------+------+-------+-------+
1232        0      4      8     12     16     20      24      28
1233
1234        where NVs are aligned to 8 bytes, so that sizeof that structure is
1235        actually 32 bytes long, with 4 bytes of padding at the end:
1236
1237        +------+------+------+------+------+-------+-------+------+
1238        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1239        +------+------+------+------+------+-------+-------+------+
1240        0      4      8     12     16     20      24      28     32
1241
1242        so what happens if you allocate memory for this structure:
1243
1244        +------+------+------+------+------+-------+-------+------+------+...
1245        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1246        +------+------+------+------+------+-------+-------+------+------+...
1247        0      4      8     12     16     20      24      28     32     36
1248
1249        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1250        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1251        started out as zero once, but it's quite possible that it isn't. So now,
1252        rather than a nicely zeroed GP, you have it pointing somewhere random.
1253        Bugs ensue.
1254
1255        (In fact, GP ends up pointing at a previous GP structure, because the
1256        principle cause of the padding in XPVMG getting garbage is a copy of
1257        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1258        this happens to be moot because XPVGV has been re-ordered, with GP
1259        no longer after STASH)
1260
1261        So we are careful and work out the size of used parts of all the
1262        structures.  */
1263
1264     switch (old_type) {
1265     case SVt_NULL:
1266         break;
1267     case SVt_IV:
1268         if (SvROK(sv)) {
1269             referant = SvRV(sv);
1270             old_type_details = &fake_rv;
1271             if (new_type == SVt_NV)
1272                 new_type = SVt_PVNV;
1273         } else {
1274             if (new_type < SVt_PVIV) {
1275                 new_type = (new_type == SVt_NV)
1276                     ? SVt_PVNV : SVt_PVIV;
1277             }
1278         }
1279         break;
1280     case SVt_NV:
1281         if (new_type < SVt_PVNV) {
1282             new_type = SVt_PVNV;
1283         }
1284         break;
1285     case SVt_PV:
1286         assert(new_type > SVt_PV);
1287         assert(SVt_IV < SVt_PV);
1288         assert(SVt_NV < SVt_PV);
1289         break;
1290     case SVt_PVIV:
1291         break;
1292     case SVt_PVNV:
1293         break;
1294     case SVt_PVMG:
1295         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1296            there's no way that it can be safely upgraded, because perl.c
1297            expects to Safefree(SvANY(PL_mess_sv))  */
1298         assert(sv != PL_mess_sv);
1299         /* This flag bit is used to mean other things in other scalar types.
1300            Given that it only has meaning inside the pad, it shouldn't be set
1301            on anything that can get upgraded.  */
1302         assert(!SvPAD_TYPED(sv));
1303         break;
1304     default:
1305         if (UNLIKELY(old_type_details->cant_upgrade))
1306             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308     }
1309
1310     if (UNLIKELY(old_type > new_type))
1311         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312                 (int)old_type, (int)new_type);
1313
1314     new_type_details = bodies_by_type + new_type;
1315
1316     SvFLAGS(sv) &= ~SVTYPEMASK;
1317     SvFLAGS(sv) |= new_type;
1318
1319     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320        the return statements above will have triggered.  */
1321     assert (new_type != SVt_NULL);
1322     switch (new_type) {
1323     case SVt_IV:
1324         assert(old_type == SVt_NULL);
1325         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1326         SvIV_set(sv, 0);
1327         return;
1328     case SVt_NV:
1329         assert(old_type == SVt_NULL);
1330         SvANY(sv) = new_XNV();
1331         SvNV_set(sv, 0);
1332         return;
1333     case SVt_PVHV:
1334     case SVt_PVAV:
1335         assert(new_type_details->body_size);
1336
1337 #ifndef PURIFY  
1338         assert(new_type_details->arena);
1339         assert(new_type_details->arena_size);
1340         /* This points to the start of the allocated area.  */
1341         new_body_inline(new_body, new_type);
1342         Zero(new_body, new_type_details->body_size, char);
1343         new_body = ((char *)new_body) - new_type_details->offset;
1344 #else
1345         /* We always allocated the full length item with PURIFY. To do this
1346            we fake things so that arena is false for all 16 types..  */
1347         new_body = new_NOARENAZ(new_type_details);
1348 #endif
1349         SvANY(sv) = new_body;
1350         if (new_type == SVt_PVAV) {
1351             AvMAX(sv)   = -1;
1352             AvFILLp(sv) = -1;
1353             AvREAL_only(sv);
1354             if (old_type_details->body_size) {
1355                 AvALLOC(sv) = 0;
1356             } else {
1357                 /* It will have been zeroed when the new body was allocated.
1358                    Lets not write to it, in case it confuses a write-back
1359                    cache.  */
1360             }
1361         } else {
1362             assert(!SvOK(sv));
1363             SvOK_off(sv);
1364 #ifndef NODEFAULT_SHAREKEYS
1365             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1366 #endif
1367             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1368             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1369         }
1370
1371         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1372            The target created by newSVrv also is, and it can have magic.
1373            However, it never has SvPVX set.
1374         */
1375         if (old_type == SVt_IV) {
1376             assert(!SvROK(sv));
1377         } else if (old_type >= SVt_PV) {
1378             assert(SvPVX_const(sv) == 0);
1379         }
1380
1381         if (old_type >= SVt_PVMG) {
1382             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1383             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1384         } else {
1385             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1386         }
1387         break;
1388
1389     case SVt_PVIV:
1390         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1391            no route from NV to PVIV, NOK can never be true  */
1392         assert(!SvNOKp(sv));
1393         assert(!SvNOK(sv));
1394     case SVt_PVIO:
1395     case SVt_PVFM:
1396     case SVt_PVGV:
1397     case SVt_PVCV:
1398     case SVt_PVLV:
1399     case SVt_INVLIST:
1400     case SVt_REGEXP:
1401     case SVt_PVMG:
1402     case SVt_PVNV:
1403     case SVt_PV:
1404
1405         assert(new_type_details->body_size);
1406         /* We always allocated the full length item with PURIFY. To do this
1407            we fake things so that arena is false for all 16 types..  */
1408         if(new_type_details->arena) {
1409             /* This points to the start of the allocated area.  */
1410             new_body_inline(new_body, new_type);
1411             Zero(new_body, new_type_details->body_size, char);
1412             new_body = ((char *)new_body) - new_type_details->offset;
1413         } else {
1414             new_body = new_NOARENAZ(new_type_details);
1415         }
1416         SvANY(sv) = new_body;
1417
1418         if (old_type_details->copy) {
1419             /* There is now the potential for an upgrade from something without
1420                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1421             int offset = old_type_details->offset;
1422             int length = old_type_details->copy;
1423
1424             if (new_type_details->offset > old_type_details->offset) {
1425                 const int difference
1426                     = new_type_details->offset - old_type_details->offset;
1427                 offset += difference;
1428                 length -= difference;
1429             }
1430             assert (length >= 0);
1431                 
1432             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1433                  char);
1434         }
1435
1436 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1437         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1438          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1439          * NV slot, but the new one does, then we need to initialise the
1440          * freshly created NV slot with whatever the correct bit pattern is
1441          * for 0.0  */
1442         if (old_type_details->zero_nv && !new_type_details->zero_nv
1443             && !isGV_with_GP(sv))
1444             SvNV_set(sv, 0);
1445 #endif
1446
1447         if (UNLIKELY(new_type == SVt_PVIO)) {
1448             IO * const io = MUTABLE_IO(sv);
1449             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1450
1451             SvOBJECT_on(io);
1452             /* Clear the stashcache because a new IO could overrule a package
1453                name */
1454             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1455             hv_clear(PL_stashcache);
1456
1457             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1458             IoPAGE_LEN(sv) = 60;
1459         }
1460         if (UNLIKELY(new_type == SVt_REGEXP))
1461             sv->sv_u.svu_rx = (regexp *)new_body;
1462         else if (old_type < SVt_PV) {
1463             /* referant will be NULL unless the old type was SVt_IV emulating
1464                SVt_RV */
1465             sv->sv_u.svu_rv = referant;
1466         }
1467         break;
1468     default:
1469         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1470                    (unsigned long)new_type);
1471     }
1472
1473     if (old_type > SVt_IV) {
1474 #ifdef PURIFY
1475         safefree(old_body);
1476 #else
1477         /* Note that there is an assumption that all bodies of types that
1478            can be upgraded came from arenas. Only the more complex non-
1479            upgradable types are allowed to be directly malloc()ed.  */
1480         assert(old_type_details->arena);
1481         del_body((void*)((char*)old_body + old_type_details->offset),
1482                  &PL_body_roots[old_type]);
1483 #endif
1484     }
1485 }
1486
1487 /*
1488 =for apidoc sv_backoff
1489
1490 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1491 wrapper instead.
1492
1493 =cut
1494 */
1495
1496 int
1497 Perl_sv_backoff(SV *const sv)
1498 {
1499     STRLEN delta;
1500     const char * const s = SvPVX_const(sv);
1501
1502     PERL_ARGS_ASSERT_SV_BACKOFF;
1503
1504     assert(SvOOK(sv));
1505     assert(SvTYPE(sv) != SVt_PVHV);
1506     assert(SvTYPE(sv) != SVt_PVAV);
1507
1508     SvOOK_offset(sv, delta);
1509     
1510     SvLEN_set(sv, SvLEN(sv) + delta);
1511     SvPV_set(sv, SvPVX(sv) - delta);
1512     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1513     SvFLAGS(sv) &= ~SVf_OOK;
1514     return 0;
1515 }
1516
1517 /*
1518 =for apidoc sv_grow
1519
1520 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1521 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1522 Use the C<SvGROW> wrapper instead.
1523
1524 =cut
1525 */
1526
1527 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1528
1529 char *
1530 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1531 {
1532     char *s;
1533
1534     PERL_ARGS_ASSERT_SV_GROW;
1535
1536     if (SvROK(sv))
1537         sv_unref(sv);
1538     if (SvTYPE(sv) < SVt_PV) {
1539         sv_upgrade(sv, SVt_PV);
1540         s = SvPVX_mutable(sv);
1541     }
1542     else if (SvOOK(sv)) {       /* pv is offset? */
1543         sv_backoff(sv);
1544         s = SvPVX_mutable(sv);
1545         if (newlen > SvLEN(sv))
1546             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1547     }
1548     else
1549     {
1550         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1551         s = SvPVX_mutable(sv);
1552     }
1553
1554 #ifdef PERL_NEW_COPY_ON_WRITE
1555     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1556      * to store the COW count. So in general, allocate one more byte than
1557      * asked for, to make it likely this byte is always spare: and thus
1558      * make more strings COW-able.
1559      * If the new size is a big power of two, don't bother: we assume the
1560      * caller wanted a nice 2^N sized block and will be annoyed at getting
1561      * 2^N+1 */
1562     if (newlen & 0xff)
1563         newlen++;
1564 #endif
1565
1566 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1567 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1568 #endif
1569
1570     if (newlen > SvLEN(sv)) {           /* need more room? */
1571         STRLEN minlen = SvCUR(sv);
1572         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1573         if (newlen < minlen)
1574             newlen = minlen;
1575 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1576
1577         /* Don't round up on the first allocation, as odds are pretty good that
1578          * the initial request is accurate as to what is really needed */
1579         if (SvLEN(sv)) {
1580             newlen = PERL_STRLEN_ROUNDUP(newlen);
1581         }
1582 #endif
1583         if (SvLEN(sv) && s) {
1584             s = (char*)saferealloc(s, newlen);
1585         }
1586         else {
1587             s = (char*)safemalloc(newlen);
1588             if (SvPVX_const(sv) && SvCUR(sv)) {
1589                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1590             }
1591         }
1592         SvPV_set(sv, s);
1593 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1594         /* Do this here, do it once, do it right, and then we will never get
1595            called back into sv_grow() unless there really is some growing
1596            needed.  */
1597         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1598 #else
1599         SvLEN_set(sv, newlen);
1600 #endif
1601     }
1602     return s;
1603 }
1604
1605 /*
1606 =for apidoc sv_setiv
1607
1608 Copies an integer into the given SV, upgrading first if necessary.
1609 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1610
1611 =cut
1612 */
1613
1614 void
1615 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1616 {
1617     PERL_ARGS_ASSERT_SV_SETIV;
1618
1619     SV_CHECK_THINKFIRST_COW_DROP(sv);
1620     switch (SvTYPE(sv)) {
1621     case SVt_NULL:
1622     case SVt_NV:
1623         sv_upgrade(sv, SVt_IV);
1624         break;
1625     case SVt_PV:
1626         sv_upgrade(sv, SVt_PVIV);
1627         break;
1628
1629     case SVt_PVGV:
1630         if (!isGV_with_GP(sv))
1631             break;
1632     case SVt_PVAV:
1633     case SVt_PVHV:
1634     case SVt_PVCV:
1635     case SVt_PVFM:
1636     case SVt_PVIO:
1637         /* diag_listed_as: Can't coerce %s to %s in %s */
1638         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1639                    OP_DESC(PL_op));
1640     default: NOOP;
1641     }
1642     (void)SvIOK_only(sv);                       /* validate number */
1643     SvIV_set(sv, i);
1644     SvTAINT(sv);
1645 }
1646
1647 /*
1648 =for apidoc sv_setiv_mg
1649
1650 Like C<sv_setiv>, but also handles 'set' magic.
1651
1652 =cut
1653 */
1654
1655 void
1656 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1657 {
1658     PERL_ARGS_ASSERT_SV_SETIV_MG;
1659
1660     sv_setiv(sv,i);
1661     SvSETMAGIC(sv);
1662 }
1663
1664 /*
1665 =for apidoc sv_setuv
1666
1667 Copies an unsigned integer into the given SV, upgrading first if necessary.
1668 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1669
1670 =cut
1671 */
1672
1673 void
1674 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1675 {
1676     PERL_ARGS_ASSERT_SV_SETUV;
1677
1678     /* With the if statement to ensure that integers are stored as IVs whenever
1679        possible:
1680        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1681
1682        without
1683        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1684
1685        If you wish to remove the following if statement, so that this routine
1686        (and its callers) always return UVs, please benchmark to see what the
1687        effect is. Modern CPUs may be different. Or may not :-)
1688     */
1689     if (u <= (UV)IV_MAX) {
1690        sv_setiv(sv, (IV)u);
1691        return;
1692     }
1693     sv_setiv(sv, 0);
1694     SvIsUV_on(sv);
1695     SvUV_set(sv, u);
1696 }
1697
1698 /*
1699 =for apidoc sv_setuv_mg
1700
1701 Like C<sv_setuv>, but also handles 'set' magic.
1702
1703 =cut
1704 */
1705
1706 void
1707 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1708 {
1709     PERL_ARGS_ASSERT_SV_SETUV_MG;
1710
1711     sv_setuv(sv,u);
1712     SvSETMAGIC(sv);
1713 }
1714
1715 /*
1716 =for apidoc sv_setnv
1717
1718 Copies a double into the given SV, upgrading first if necessary.
1719 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1720
1721 =cut
1722 */
1723
1724 void
1725 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1726 {
1727     PERL_ARGS_ASSERT_SV_SETNV;
1728
1729     SV_CHECK_THINKFIRST_COW_DROP(sv);
1730     switch (SvTYPE(sv)) {
1731     case SVt_NULL:
1732     case SVt_IV:
1733         sv_upgrade(sv, SVt_NV);
1734         break;
1735     case SVt_PV:
1736     case SVt_PVIV:
1737         sv_upgrade(sv, SVt_PVNV);
1738         break;
1739
1740     case SVt_PVGV:
1741         if (!isGV_with_GP(sv))
1742             break;
1743     case SVt_PVAV:
1744     case SVt_PVHV:
1745     case SVt_PVCV:
1746     case SVt_PVFM:
1747     case SVt_PVIO:
1748         /* diag_listed_as: Can't coerce %s to %s in %s */
1749         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1750                    OP_DESC(PL_op));
1751     default: NOOP;
1752     }
1753     SvNV_set(sv, num);
1754     (void)SvNOK_only(sv);                       /* validate number */
1755     SvTAINT(sv);
1756 }
1757
1758 /*
1759 =for apidoc sv_setnv_mg
1760
1761 Like C<sv_setnv>, but also handles 'set' magic.
1762
1763 =cut
1764 */
1765
1766 void
1767 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1768 {
1769     PERL_ARGS_ASSERT_SV_SETNV_MG;
1770
1771     sv_setnv(sv,num);
1772     SvSETMAGIC(sv);
1773 }
1774
1775 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1776  * not incrementable warning display.
1777  * Originally part of S_not_a_number().
1778  * The return value may be != tmpbuf.
1779  */
1780
1781 STATIC const char *
1782 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1783     const char *pv;
1784
1785      PERL_ARGS_ASSERT_SV_DISPLAY;
1786
1787      if (DO_UTF8(sv)) {
1788           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1789           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1790      } else {
1791           char *d = tmpbuf;
1792           const char * const limit = tmpbuf + tmpbuf_size - 8;
1793           /* each *s can expand to 4 chars + "...\0",
1794              i.e. need room for 8 chars */
1795         
1796           const char *s = SvPVX_const(sv);
1797           const char * const end = s + SvCUR(sv);
1798           for ( ; s < end && d < limit; s++ ) {
1799                int ch = *s & 0xFF;
1800                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1801                     *d++ = 'M';
1802                     *d++ = '-';
1803
1804                     /* Map to ASCII "equivalent" of Latin1 */
1805                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1806                }
1807                if (ch == '\n') {
1808                     *d++ = '\\';
1809                     *d++ = 'n';
1810                }
1811                else if (ch == '\r') {
1812                     *d++ = '\\';
1813                     *d++ = 'r';
1814                }
1815                else if (ch == '\f') {
1816                     *d++ = '\\';
1817                     *d++ = 'f';
1818                }
1819                else if (ch == '\\') {
1820                     *d++ = '\\';
1821                     *d++ = '\\';
1822                }
1823                else if (ch == '\0') {
1824                     *d++ = '\\';
1825                     *d++ = '0';
1826                }
1827                else if (isPRINT_LC(ch))
1828                     *d++ = ch;
1829                else {
1830                     *d++ = '^';
1831                     *d++ = toCTRL(ch);
1832                }
1833           }
1834           if (s < end) {
1835                *d++ = '.';
1836                *d++ = '.';
1837                *d++ = '.';
1838           }
1839           *d = '\0';
1840           pv = tmpbuf;
1841     }
1842
1843     return pv;
1844 }
1845
1846 /* Print an "isn't numeric" warning, using a cleaned-up,
1847  * printable version of the offending string
1848  */
1849
1850 STATIC void
1851 S_not_a_number(pTHX_ SV *const sv)
1852 {
1853      char tmpbuf[64];
1854      const char *pv;
1855
1856      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1857
1858      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1859
1860     if (PL_op)
1861         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1862                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1863                     "Argument \"%s\" isn't numeric in %s", pv,
1864                     OP_DESC(PL_op));
1865     else
1866         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1867                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1868                     "Argument \"%s\" isn't numeric", pv);
1869 }
1870
1871 STATIC void
1872 S_not_incrementable(pTHX_ SV *const sv) {
1873      char tmpbuf[64];
1874      const char *pv;
1875
1876      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1877
1878      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1879
1880      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1881                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1882 }
1883
1884 /*
1885 =for apidoc looks_like_number
1886
1887 Test if the content of an SV looks like a number (or is a number).
1888 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1889 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1890 ignored.
1891
1892 =cut
1893 */
1894
1895 I32
1896 Perl_looks_like_number(pTHX_ SV *const sv)
1897 {
1898     const char *sbegin;
1899     STRLEN len;
1900
1901     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1902
1903     if (SvPOK(sv) || SvPOKp(sv)) {
1904         sbegin = SvPV_nomg_const(sv, len);
1905     }
1906     else
1907         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1908     return grok_number(sbegin, len, NULL);
1909 }
1910
1911 STATIC bool
1912 S_glob_2number(pTHX_ GV * const gv)
1913 {
1914     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1915
1916     /* We know that all GVs stringify to something that is not-a-number,
1917         so no need to test that.  */
1918     if (ckWARN(WARN_NUMERIC))
1919     {
1920         SV *const buffer = sv_newmortal();
1921         gv_efullname3(buffer, gv, "*");
1922         not_a_number(buffer);
1923     }
1924     /* We just want something true to return, so that S_sv_2iuv_common
1925         can tail call us and return true.  */
1926     return TRUE;
1927 }
1928
1929 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1930    until proven guilty, assume that things are not that bad... */
1931
1932 /*
1933    NV_PRESERVES_UV:
1934
1935    As 64 bit platforms often have an NV that doesn't preserve all bits of
1936    an IV (an assumption perl has been based on to date) it becomes necessary
1937    to remove the assumption that the NV always carries enough precision to
1938    recreate the IV whenever needed, and that the NV is the canonical form.
1939    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1940    precision as a side effect of conversion (which would lead to insanity
1941    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1942    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1943       where precision was lost, and IV/UV/NV slots that have a valid conversion
1944       which has lost no precision
1945    2) to ensure that if a numeric conversion to one form is requested that
1946       would lose precision, the precise conversion (or differently
1947       imprecise conversion) is also performed and cached, to prevent
1948       requests for different numeric formats on the same SV causing
1949       lossy conversion chains. (lossless conversion chains are perfectly
1950       acceptable (still))
1951
1952
1953    flags are used:
1954    SvIOKp is true if the IV slot contains a valid value
1955    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1956    SvNOKp is true if the NV slot contains a valid value
1957    SvNOK  is true only if the NV value is accurate
1958
1959    so
1960    while converting from PV to NV, check to see if converting that NV to an
1961    IV(or UV) would lose accuracy over a direct conversion from PV to
1962    IV(or UV). If it would, cache both conversions, return NV, but mark
1963    SV as IOK NOKp (ie not NOK).
1964
1965    While converting from PV to IV, check to see if converting that IV to an
1966    NV would lose accuracy over a direct conversion from PV to NV. If it
1967    would, cache both conversions, flag similarly.
1968
1969    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1970    correctly because if IV & NV were set NV *always* overruled.
1971    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1972    changes - now IV and NV together means that the two are interchangeable:
1973    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1974
1975    The benefit of this is that operations such as pp_add know that if
1976    SvIOK is true for both left and right operands, then integer addition
1977    can be used instead of floating point (for cases where the result won't
1978    overflow). Before, floating point was always used, which could lead to
1979    loss of precision compared with integer addition.
1980
1981    * making IV and NV equal status should make maths accurate on 64 bit
1982      platforms
1983    * may speed up maths somewhat if pp_add and friends start to use
1984      integers when possible instead of fp. (Hopefully the overhead in
1985      looking for SvIOK and checking for overflow will not outweigh the
1986      fp to integer speedup)
1987    * will slow down integer operations (callers of SvIV) on "inaccurate"
1988      values, as the change from SvIOK to SvIOKp will cause a call into
1989      sv_2iv each time rather than a macro access direct to the IV slot
1990    * should speed up number->string conversion on integers as IV is
1991      favoured when IV and NV are equally accurate
1992
1993    ####################################################################
1994    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1995    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1996    On the other hand, SvUOK is true iff UV.
1997    ####################################################################
1998
1999    Your mileage will vary depending your CPU's relative fp to integer
2000    performance ratio.
2001 */
2002
2003 #ifndef NV_PRESERVES_UV
2004 #  define IS_NUMBER_UNDERFLOW_IV 1
2005 #  define IS_NUMBER_UNDERFLOW_UV 2
2006 #  define IS_NUMBER_IV_AND_UV    2
2007 #  define IS_NUMBER_OVERFLOW_IV  4
2008 #  define IS_NUMBER_OVERFLOW_UV  5
2009
2010 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2011
2012 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2013 STATIC int
2014 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2015 #  ifdef DEBUGGING
2016                        , I32 numtype
2017 #  endif
2018                        )
2019 {
2020     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2021     PERL_UNUSED_CONTEXT;
2022
2023     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));
2024     if (SvNVX(sv) < (NV)IV_MIN) {
2025         (void)SvIOKp_on(sv);
2026         (void)SvNOK_on(sv);
2027         SvIV_set(sv, IV_MIN);
2028         return IS_NUMBER_UNDERFLOW_IV;
2029     }
2030     if (SvNVX(sv) > (NV)UV_MAX) {
2031         (void)SvIOKp_on(sv);
2032         (void)SvNOK_on(sv);
2033         SvIsUV_on(sv);
2034         SvUV_set(sv, UV_MAX);
2035         return IS_NUMBER_OVERFLOW_UV;
2036     }
2037     (void)SvIOKp_on(sv);
2038     (void)SvNOK_on(sv);
2039     /* Can't use strtol etc to convert this string.  (See truth table in
2040        sv_2iv  */
2041     if (SvNVX(sv) <= (UV)IV_MAX) {
2042         SvIV_set(sv, I_V(SvNVX(sv)));
2043         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2044             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2045         } else {
2046             /* Integer is imprecise. NOK, IOKp */
2047         }
2048         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2049     }
2050     SvIsUV_on(sv);
2051     SvUV_set(sv, U_V(SvNVX(sv)));
2052     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2053         if (SvUVX(sv) == UV_MAX) {
2054             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2055                possibly be preserved by NV. Hence, it must be overflow.
2056                NOK, IOKp */
2057             return IS_NUMBER_OVERFLOW_UV;
2058         }
2059         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2060     } else {
2061         /* Integer is imprecise. NOK, IOKp */
2062     }
2063     return IS_NUMBER_OVERFLOW_IV;
2064 }
2065 #endif /* !NV_PRESERVES_UV*/
2066
2067 STATIC bool
2068 S_sv_2iuv_common(pTHX_ SV *const sv)
2069 {
2070     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2071
2072     if (SvNOKp(sv)) {
2073         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2074          * without also getting a cached IV/UV from it at the same time
2075          * (ie PV->NV conversion should detect loss of accuracy and cache
2076          * IV or UV at same time to avoid this. */
2077         /* IV-over-UV optimisation - choose to cache IV if possible */
2078
2079         if (SvTYPE(sv) == SVt_NV)
2080             sv_upgrade(sv, SVt_PVNV);
2081
2082         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2083         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2084            certainly cast into the IV range at IV_MAX, whereas the correct
2085            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2086            cases go to UV */
2087 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2088         if (Perl_isnan(SvNVX(sv))) {
2089             SvUV_set(sv, 0);
2090             SvIsUV_on(sv);
2091             return FALSE;
2092         }
2093 #endif
2094         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2095             SvIV_set(sv, I_V(SvNVX(sv)));
2096             if (SvNVX(sv) == (NV) SvIVX(sv)
2097 #ifndef NV_PRESERVES_UV
2098                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2099                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2100                 /* Don't flag it as "accurately an integer" if the number
2101                    came from a (by definition imprecise) NV operation, and
2102                    we're outside the range of NV integer precision */
2103 #endif
2104                 ) {
2105                 if (SvNOK(sv))
2106                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2107                 else {
2108                     /* scalar has trailing garbage, eg "42a" */
2109                 }
2110                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2111                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2112                                       PTR2UV(sv),
2113                                       SvNVX(sv),
2114                                       SvIVX(sv)));
2115
2116             } else {
2117                 /* IV not precise.  No need to convert from PV, as NV
2118                    conversion would already have cached IV if it detected
2119                    that PV->IV would be better than PV->NV->IV
2120                    flags already correct - don't set public IOK.  */
2121                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2122                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2123                                       PTR2UV(sv),
2124                                       SvNVX(sv),
2125                                       SvIVX(sv)));
2126             }
2127             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2128                but the cast (NV)IV_MIN rounds to a the value less (more
2129                negative) than IV_MIN which happens to be equal to SvNVX ??
2130                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2131                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2132                (NV)UVX == NVX are both true, but the values differ. :-(
2133                Hopefully for 2s complement IV_MIN is something like
2134                0x8000000000000000 which will be exact. NWC */
2135         }
2136         else {
2137             SvUV_set(sv, U_V(SvNVX(sv)));
2138             if (
2139                 (SvNVX(sv) == (NV) SvUVX(sv))
2140 #ifndef  NV_PRESERVES_UV
2141                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2142                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2143                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2144                 /* Don't flag it as "accurately an integer" if the number
2145                    came from a (by definition imprecise) NV operation, and
2146                    we're outside the range of NV integer precision */
2147 #endif
2148                 && SvNOK(sv)
2149                 )
2150                 SvIOK_on(sv);
2151             SvIsUV_on(sv);
2152             DEBUG_c(PerlIO_printf(Perl_debug_log,
2153                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2154                                   PTR2UV(sv),
2155                                   SvUVX(sv),
2156                                   SvUVX(sv)));
2157         }
2158     }
2159     else if (SvPOKp(sv)) {
2160         UV value;
2161         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2162         /* We want to avoid a possible problem when we cache an IV/ a UV which
2163            may be later translated to an NV, and the resulting NV is not
2164            the same as the direct translation of the initial string
2165            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2166            be careful to ensure that the value with the .456 is around if the
2167            NV value is requested in the future).
2168         
2169            This means that if we cache such an IV/a UV, we need to cache the
2170            NV as well.  Moreover, we trade speed for space, and do not
2171            cache the NV if we are sure it's not needed.
2172          */
2173
2174         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2175         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2176              == IS_NUMBER_IN_UV) {
2177             /* It's definitely an integer, only upgrade to PVIV */
2178             if (SvTYPE(sv) < SVt_PVIV)
2179                 sv_upgrade(sv, SVt_PVIV);
2180             (void)SvIOK_on(sv);
2181         } else if (SvTYPE(sv) < SVt_PVNV)
2182             sv_upgrade(sv, SVt_PVNV);
2183
2184         /* If NVs preserve UVs then we only use the UV value if we know that
2185            we aren't going to call atof() below. If NVs don't preserve UVs
2186            then the value returned may have more precision than atof() will
2187            return, even though value isn't perfectly accurate.  */
2188         if ((numtype & (IS_NUMBER_IN_UV
2189 #ifdef NV_PRESERVES_UV
2190                         | IS_NUMBER_NOT_INT
2191 #endif
2192             )) == IS_NUMBER_IN_UV) {
2193             /* This won't turn off the public IOK flag if it was set above  */
2194             (void)SvIOKp_on(sv);
2195
2196             if (!(numtype & IS_NUMBER_NEG)) {
2197                 /* positive */;
2198                 if (value <= (UV)IV_MAX) {
2199                     SvIV_set(sv, (IV)value);
2200                 } else {
2201                     /* it didn't overflow, and it was positive. */
2202                     SvUV_set(sv, value);
2203                     SvIsUV_on(sv);
2204                 }
2205             } else {
2206                 /* 2s complement assumption  */
2207                 if (value <= (UV)IV_MIN) {
2208                     SvIV_set(sv, -(IV)value);
2209                 } else {
2210                     /* Too negative for an IV.  This is a double upgrade, but
2211                        I'm assuming it will be rare.  */
2212                     if (SvTYPE(sv) < SVt_PVNV)
2213                         sv_upgrade(sv, SVt_PVNV);
2214                     SvNOK_on(sv);
2215                     SvIOK_off(sv);
2216                     SvIOKp_on(sv);
2217                     SvNV_set(sv, -(NV)value);
2218                     SvIV_set(sv, IV_MIN);
2219                 }
2220             }
2221         }
2222         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2223            will be in the previous block to set the IV slot, and the next
2224            block to set the NV slot.  So no else here.  */
2225         
2226         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2227             != IS_NUMBER_IN_UV) {
2228             /* It wasn't an (integer that doesn't overflow the UV). */
2229             SvNV_set(sv, Atof(SvPVX_const(sv)));
2230
2231             if (! numtype && ckWARN(WARN_NUMERIC))
2232                 not_a_number(sv);
2233
2234             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2235                                   PTR2UV(sv), SvNVX(sv)));
2236
2237 #ifdef NV_PRESERVES_UV
2238             (void)SvIOKp_on(sv);
2239             (void)SvNOK_on(sv);
2240             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2241                 SvIV_set(sv, I_V(SvNVX(sv)));
2242                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2243                     SvIOK_on(sv);
2244                 } else {
2245                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2246                 }
2247                 /* UV will not work better than IV */
2248             } else {
2249                 if (SvNVX(sv) > (NV)UV_MAX) {
2250                     SvIsUV_on(sv);
2251                     /* Integer is inaccurate. NOK, IOKp, is UV */
2252                     SvUV_set(sv, UV_MAX);
2253                 } else {
2254                     SvUV_set(sv, U_V(SvNVX(sv)));
2255                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2256                        NV preservse UV so can do correct comparison.  */
2257                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2258                         SvIOK_on(sv);
2259                     } else {
2260                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2261                     }
2262                 }
2263                 SvIsUV_on(sv);
2264             }
2265 #else /* NV_PRESERVES_UV */
2266             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2267                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2268                 /* The IV/UV slot will have been set from value returned by
2269                    grok_number above.  The NV slot has just been set using
2270                    Atof.  */
2271                 SvNOK_on(sv);
2272                 assert (SvIOKp(sv));
2273             } else {
2274                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2275                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2276                     /* Small enough to preserve all bits. */
2277                     (void)SvIOKp_on(sv);
2278                     SvNOK_on(sv);
2279                     SvIV_set(sv, I_V(SvNVX(sv)));
2280                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2281                         SvIOK_on(sv);
2282                     /* Assumption: first non-preserved integer is < IV_MAX,
2283                        this NV is in the preserved range, therefore: */
2284                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2285                           < (UV)IV_MAX)) {
2286                         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);
2287                     }
2288                 } else {
2289                     /* IN_UV NOT_INT
2290                          0      0       already failed to read UV.
2291                          0      1       already failed to read UV.
2292                          1      0       you won't get here in this case. IV/UV
2293                                         slot set, public IOK, Atof() unneeded.
2294                          1      1       already read UV.
2295                        so there's no point in sv_2iuv_non_preserve() attempting
2296                        to use atol, strtol, strtoul etc.  */
2297 #  ifdef DEBUGGING
2298                     sv_2iuv_non_preserve (sv, numtype);
2299 #  else
2300                     sv_2iuv_non_preserve (sv);
2301 #  endif
2302                 }
2303             }
2304 #endif /* NV_PRESERVES_UV */
2305         /* It might be more code efficient to go through the entire logic above
2306            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2307            gets complex and potentially buggy, so more programmer efficient
2308            to do it this way, by turning off the public flags:  */
2309         if (!numtype)
2310             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2311         }
2312     }
2313     else  {
2314         if (isGV_with_GP(sv))
2315             return glob_2number(MUTABLE_GV(sv));
2316
2317         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2318                 report_uninit(sv);
2319         if (SvTYPE(sv) < SVt_IV)
2320             /* Typically the caller expects that sv_any is not NULL now.  */
2321             sv_upgrade(sv, SVt_IV);
2322         /* Return 0 from the caller.  */
2323         return TRUE;
2324     }
2325     return FALSE;
2326 }
2327
2328 /*
2329 =for apidoc sv_2iv_flags
2330
2331 Return the integer value of an SV, doing any necessary string
2332 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2333 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2334
2335 =cut
2336 */
2337
2338 IV
2339 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2340 {
2341     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2342
2343     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2344          && SvTYPE(sv) != SVt_PVFM);
2345
2346     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2347         mg_get(sv);
2348
2349     if (SvROK(sv)) {
2350         if (SvAMAGIC(sv)) {
2351             SV * tmpstr;
2352             if (flags & SV_SKIP_OVERLOAD)
2353                 return 0;
2354             tmpstr = AMG_CALLunary(sv, numer_amg);
2355             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2356                 return SvIV(tmpstr);
2357             }
2358         }
2359         return PTR2IV(SvRV(sv));
2360     }
2361
2362     if (SvVALID(sv) || isREGEXP(sv)) {
2363         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2364            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2365            In practice they are extremely unlikely to actually get anywhere
2366            accessible by user Perl code - the only way that I'm aware of is when
2367            a constant subroutine which is used as the second argument to index.
2368
2369            Regexps have no SvIVX and SvNVX fields.
2370         */
2371         assert(isREGEXP(sv) || SvPOKp(sv));
2372         {
2373             UV value;
2374             const char * const ptr =
2375                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2376             const int numtype
2377                 = grok_number(ptr, SvCUR(sv), &value);
2378
2379             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2380                 == IS_NUMBER_IN_UV) {
2381                 /* It's definitely an integer */
2382                 if (numtype & IS_NUMBER_NEG) {
2383                     if (value < (UV)IV_MIN)
2384                         return -(IV)value;
2385                 } else {
2386                     if (value < (UV)IV_MAX)
2387                         return (IV)value;
2388                 }
2389             }
2390             if (!numtype) {
2391                 if (ckWARN(WARN_NUMERIC))
2392                     not_a_number(sv);
2393             }
2394             return I_V(Atof(ptr));
2395         }
2396     }
2397
2398     if (SvTHINKFIRST(sv)) {
2399 #ifdef PERL_OLD_COPY_ON_WRITE
2400         if (SvIsCOW(sv)) {
2401             sv_force_normal_flags(sv, 0);
2402         }
2403 #endif
2404         if (SvREADONLY(sv) && !SvOK(sv)) {
2405             if (ckWARN(WARN_UNINITIALIZED))
2406                 report_uninit(sv);
2407             return 0;
2408         }
2409     }
2410
2411     if (!SvIOKp(sv)) {
2412         if (S_sv_2iuv_common(aTHX_ sv))
2413             return 0;
2414     }
2415
2416     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2417         PTR2UV(sv),SvIVX(sv)));
2418     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2419 }
2420
2421 /*
2422 =for apidoc sv_2uv_flags
2423
2424 Return the unsigned integer value of an SV, doing any necessary string
2425 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2426 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2427
2428 =cut
2429 */
2430
2431 UV
2432 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2433 {
2434     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2435
2436     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2437         mg_get(sv);
2438
2439     if (SvROK(sv)) {
2440         if (SvAMAGIC(sv)) {
2441             SV *tmpstr;
2442             if (flags & SV_SKIP_OVERLOAD)
2443                 return 0;
2444             tmpstr = AMG_CALLunary(sv, numer_amg);
2445             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2446                 return SvUV(tmpstr);
2447             }
2448         }
2449         return PTR2UV(SvRV(sv));
2450     }
2451
2452     if (SvVALID(sv) || isREGEXP(sv)) {
2453         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2454            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2455            Regexps have no SvIVX and SvNVX fields. */
2456         assert(isREGEXP(sv) || SvPOKp(sv));
2457         {
2458             UV value;
2459             const char * const ptr =
2460                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2461             const int numtype
2462                 = grok_number(ptr, SvCUR(sv), &value);
2463
2464             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2465                 == IS_NUMBER_IN_UV) {
2466                 /* It's definitely an integer */
2467                 if (!(numtype & IS_NUMBER_NEG))
2468                     return value;
2469             }
2470             if (!numtype) {
2471                 if (ckWARN(WARN_NUMERIC))
2472                     not_a_number(sv);
2473             }
2474             return U_V(Atof(ptr));
2475         }
2476     }
2477
2478     if (SvTHINKFIRST(sv)) {
2479 #ifdef PERL_OLD_COPY_ON_WRITE
2480         if (SvIsCOW(sv)) {
2481             sv_force_normal_flags(sv, 0);
2482         }
2483 #endif
2484         if (SvREADONLY(sv) && !SvOK(sv)) {
2485             if (ckWARN(WARN_UNINITIALIZED))
2486                 report_uninit(sv);
2487             return 0;
2488         }
2489     }
2490
2491     if (!SvIOKp(sv)) {
2492         if (S_sv_2iuv_common(aTHX_ sv))
2493             return 0;
2494     }
2495
2496     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2497                           PTR2UV(sv),SvUVX(sv)));
2498     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2499 }
2500
2501 /*
2502 =for apidoc sv_2nv_flags
2503
2504 Return the num value of an SV, doing any necessary string or integer
2505 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2506 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2507
2508 =cut
2509 */
2510
2511 NV
2512 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2513 {
2514     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2515
2516     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2517          && SvTYPE(sv) != SVt_PVFM);
2518     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2519         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2520            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2521            Regexps have no SvIVX and SvNVX fields.  */
2522         const char *ptr;
2523         if (flags & SV_GMAGIC)
2524             mg_get(sv);
2525         if (SvNOKp(sv))
2526             return SvNVX(sv);
2527         if (SvPOKp(sv) && !SvIOKp(sv)) {
2528             ptr = SvPVX_const(sv);
2529           grokpv:
2530             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2531                 !grok_number(ptr, SvCUR(sv), NULL))
2532                 not_a_number(sv);
2533             return Atof(ptr);
2534         }
2535         if (SvIOKp(sv)) {
2536             if (SvIsUV(sv))
2537                 return (NV)SvUVX(sv);
2538             else
2539                 return (NV)SvIVX(sv);
2540         }
2541         if (SvROK(sv)) {
2542             goto return_rok;
2543         }
2544         if (isREGEXP(sv)) {
2545             ptr = RX_WRAPPED((REGEXP *)sv);
2546             goto grokpv;
2547         }
2548         assert(SvTYPE(sv) >= SVt_PVMG);
2549         /* This falls through to the report_uninit near the end of the
2550            function. */
2551     } else if (SvTHINKFIRST(sv)) {
2552         if (SvROK(sv)) {
2553         return_rok:
2554             if (SvAMAGIC(sv)) {
2555                 SV *tmpstr;
2556                 if (flags & SV_SKIP_OVERLOAD)
2557                     return 0;
2558                 tmpstr = AMG_CALLunary(sv, numer_amg);
2559                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2560                     return SvNV(tmpstr);
2561                 }
2562             }
2563             return PTR2NV(SvRV(sv));
2564         }
2565 #ifdef PERL_OLD_COPY_ON_WRITE
2566         if (SvIsCOW(sv)) {
2567             sv_force_normal_flags(sv, 0);
2568         }
2569 #endif
2570         if (SvREADONLY(sv) && !SvOK(sv)) {
2571             if (ckWARN(WARN_UNINITIALIZED))
2572                 report_uninit(sv);
2573             return 0.0;
2574         }
2575     }
2576     if (SvTYPE(sv) < SVt_NV) {
2577         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2578         sv_upgrade(sv, SVt_NV);
2579         DEBUG_c({
2580             STORE_NUMERIC_LOCAL_SET_STANDARD();
2581             PerlIO_printf(Perl_debug_log,
2582                           "0x%"UVxf" num(%" NVgf ")\n",
2583                           PTR2UV(sv), SvNVX(sv));
2584             RESTORE_NUMERIC_LOCAL();
2585         });
2586     }
2587     else if (SvTYPE(sv) < SVt_PVNV)
2588         sv_upgrade(sv, SVt_PVNV);
2589     if (SvNOKp(sv)) {
2590         return SvNVX(sv);
2591     }
2592     if (SvIOKp(sv)) {
2593         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2594 #ifdef NV_PRESERVES_UV
2595         if (SvIOK(sv))
2596             SvNOK_on(sv);
2597         else
2598             SvNOKp_on(sv);
2599 #else
2600         /* Only set the public NV OK flag if this NV preserves the IV  */
2601         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2602         if (SvIOK(sv) &&
2603             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2604                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2605             SvNOK_on(sv);
2606         else
2607             SvNOKp_on(sv);
2608 #endif
2609     }
2610     else if (SvPOKp(sv)) {
2611         UV value;
2612         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2613         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2614             not_a_number(sv);
2615 #ifdef NV_PRESERVES_UV
2616         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2617             == IS_NUMBER_IN_UV) {
2618             /* It's definitely an integer */
2619             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2620         } else
2621             SvNV_set(sv, Atof(SvPVX_const(sv)));
2622         if (numtype)
2623             SvNOK_on(sv);
2624         else
2625             SvNOKp_on(sv);
2626 #else
2627         SvNV_set(sv, Atof(SvPVX_const(sv)));
2628         /* Only set the public NV OK flag if this NV preserves the value in
2629            the PV at least as well as an IV/UV would.
2630            Not sure how to do this 100% reliably. */
2631         /* if that shift count is out of range then Configure's test is
2632            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2633            UV_BITS */
2634         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2635             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2636             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2637         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2638             /* Can't use strtol etc to convert this string, so don't try.
2639                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2640             SvNOK_on(sv);
2641         } else {
2642             /* value has been set.  It may not be precise.  */
2643             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2644                 /* 2s complement assumption for (UV)IV_MIN  */
2645                 SvNOK_on(sv); /* Integer is too negative.  */
2646             } else {
2647                 SvNOKp_on(sv);
2648                 SvIOKp_on(sv);
2649
2650                 if (numtype & IS_NUMBER_NEG) {
2651                     SvIV_set(sv, -(IV)value);
2652                 } else if (value <= (UV)IV_MAX) {
2653                     SvIV_set(sv, (IV)value);
2654                 } else {
2655                     SvUV_set(sv, value);
2656                     SvIsUV_on(sv);
2657                 }
2658
2659                 if (numtype & IS_NUMBER_NOT_INT) {
2660                     /* I believe that even if the original PV had decimals,
2661                        they are lost beyond the limit of the FP precision.
2662                        However, neither is canonical, so both only get p
2663                        flags.  NWC, 2000/11/25 */
2664                     /* Both already have p flags, so do nothing */
2665                 } else {
2666                     const NV nv = SvNVX(sv);
2667                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2668                         if (SvIVX(sv) == I_V(nv)) {
2669                             SvNOK_on(sv);
2670                         } else {
2671                             /* It had no "." so it must be integer.  */
2672                         }
2673                         SvIOK_on(sv);
2674                     } else {
2675                         /* between IV_MAX and NV(UV_MAX).
2676                            Could be slightly > UV_MAX */
2677
2678                         if (numtype & IS_NUMBER_NOT_INT) {
2679                             /* UV and NV both imprecise.  */
2680                         } else {
2681                             const UV nv_as_uv = U_V(nv);
2682
2683                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2684                                 SvNOK_on(sv);
2685                             }
2686                             SvIOK_on(sv);
2687                         }
2688                     }
2689                 }
2690             }
2691         }
2692         /* It might be more code efficient to go through the entire logic above
2693            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2694            gets complex and potentially buggy, so more programmer efficient
2695            to do it this way, by turning off the public flags:  */
2696         if (!numtype)
2697             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2698 #endif /* NV_PRESERVES_UV */
2699     }
2700     else  {
2701         if (isGV_with_GP(sv)) {
2702             glob_2number(MUTABLE_GV(sv));
2703             return 0.0;
2704         }
2705
2706         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2707             report_uninit(sv);
2708         assert (SvTYPE(sv) >= SVt_NV);
2709         /* Typically the caller expects that sv_any is not NULL now.  */
2710         /* XXX Ilya implies that this is a bug in callers that assume this
2711            and ideally should be fixed.  */
2712         return 0.0;
2713     }
2714     DEBUG_c({
2715         STORE_NUMERIC_LOCAL_SET_STANDARD();
2716         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2717                       PTR2UV(sv), SvNVX(sv));
2718         RESTORE_NUMERIC_LOCAL();
2719     });
2720     return SvNVX(sv);
2721 }
2722
2723 /*
2724 =for apidoc sv_2num
2725
2726 Return an SV with the numeric value of the source SV, doing any necessary
2727 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2728 access this function.
2729
2730 =cut
2731 */
2732
2733 SV *
2734 Perl_sv_2num(pTHX_ SV *const sv)
2735 {
2736     PERL_ARGS_ASSERT_SV_2NUM;
2737
2738     if (!SvROK(sv))
2739         return sv;
2740     if (SvAMAGIC(sv)) {
2741         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2742         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2743         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2744             return sv_2num(tmpsv);
2745     }
2746     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2747 }
2748
2749 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2750  * UV as a string towards the end of buf, and return pointers to start and
2751  * end of it.
2752  *
2753  * We assume that buf is at least TYPE_CHARS(UV) long.
2754  */
2755
2756 static char *
2757 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2758 {
2759     char *ptr = buf + TYPE_CHARS(UV);
2760     char * const ebuf = ptr;
2761     int sign;
2762
2763     PERL_ARGS_ASSERT_UIV_2BUF;
2764
2765     if (is_uv)
2766         sign = 0;
2767     else if (iv >= 0) {
2768         uv = iv;
2769         sign = 0;
2770     } else {
2771         uv = -iv;
2772         sign = 1;
2773     }
2774     do {
2775         *--ptr = '0' + (char)(uv % 10);
2776     } while (uv /= 10);
2777     if (sign)
2778         *--ptr = '-';
2779     *peob = ebuf;
2780     return ptr;
2781 }
2782
2783 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2784 * infinity or a not-a-number, writes the appropriate strings to the
2785 * buffer, including a zero byte.  On success returns the written length,
2786 * excluding the zero byte, on failure returns zero. */
2787 STATIC size_t
2788 S_infnan_copy(NV nv, char* buffer, size_t maxlen) {
2789     if (maxlen < 4)
2790         return 0;
2791     else {
2792         char* s = buffer;
2793         if (Perl_isinf(nv)) {
2794             if (nv < 0) {
2795                 if (maxlen < 5)
2796                     return 0;
2797                 *s++ = '-';
2798             }
2799             *s++ = 'I';
2800             *s++ = 'n';
2801             *s++ = 'f';
2802         }
2803         else if (Perl_isnan(nv)) {
2804             *s++ = 'N';
2805             *s++ = 'a';
2806             *s++ = 'N';
2807             /* XXX output the payload mantissa bits as "(hhh...)" */
2808         }
2809         else
2810             return 0;
2811         *s++ = 0;
2812         return s - buffer - 1;
2813     }
2814 }
2815
2816 /*
2817 =for apidoc sv_2pv_flags
2818
2819 Returns a pointer to the string value of an SV, and sets *lp to its length.
2820 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2821 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2822 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2823
2824 =cut
2825 */
2826
2827 char *
2828 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2829 {
2830     char *s;
2831
2832     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2833
2834     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2835          && SvTYPE(sv) != SVt_PVFM);
2836     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2837         mg_get(sv);
2838     if (SvROK(sv)) {
2839         if (SvAMAGIC(sv)) {
2840             SV *tmpstr;
2841             if (flags & SV_SKIP_OVERLOAD)
2842                 return NULL;
2843             tmpstr = AMG_CALLunary(sv, string_amg);
2844             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2845             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2846                 /* Unwrap this:  */
2847                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2848                  */
2849
2850                 char *pv;
2851                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2852                     if (flags & SV_CONST_RETURN) {
2853                         pv = (char *) SvPVX_const(tmpstr);
2854                     } else {
2855                         pv = (flags & SV_MUTABLE_RETURN)
2856                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2857                     }
2858                     if (lp)
2859                         *lp = SvCUR(tmpstr);
2860                 } else {
2861                     pv = sv_2pv_flags(tmpstr, lp, flags);
2862                 }
2863                 if (SvUTF8(tmpstr))
2864                     SvUTF8_on(sv);
2865                 else
2866                     SvUTF8_off(sv);
2867                 return pv;
2868             }
2869         }
2870         {
2871             STRLEN len;
2872             char *retval;
2873             char *buffer;
2874             SV *const referent = SvRV(sv);
2875
2876             if (!referent) {
2877                 len = 7;
2878                 retval = buffer = savepvn("NULLREF", len);
2879             } else if (SvTYPE(referent) == SVt_REGEXP &&
2880                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2881                         amagic_is_enabled(string_amg))) {
2882                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2883
2884                 assert(re);
2885                         
2886                 /* If the regex is UTF-8 we want the containing scalar to
2887                    have an UTF-8 flag too */
2888                 if (RX_UTF8(re))
2889                     SvUTF8_on(sv);
2890                 else
2891                     SvUTF8_off(sv);     
2892
2893                 if (lp)
2894                     *lp = RX_WRAPLEN(re);
2895  
2896                 return RX_WRAPPED(re);
2897             } else {
2898                 const char *const typestr = sv_reftype(referent, 0);
2899                 const STRLEN typelen = strlen(typestr);
2900                 UV addr = PTR2UV(referent);
2901                 const char *stashname = NULL;
2902                 STRLEN stashnamelen = 0; /* hush, gcc */
2903                 const char *buffer_end;
2904
2905                 if (SvOBJECT(referent)) {
2906                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2907
2908                     if (name) {
2909                         stashname = HEK_KEY(name);
2910                         stashnamelen = HEK_LEN(name);
2911
2912                         if (HEK_UTF8(name)) {
2913                             SvUTF8_on(sv);
2914                         } else {
2915                             SvUTF8_off(sv);
2916                         }
2917                     } else {
2918                         stashname = "__ANON__";
2919                         stashnamelen = 8;
2920                     }
2921                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2922                         + 2 * sizeof(UV) + 2 /* )\0 */;
2923                 } else {
2924                     len = typelen + 3 /* (0x */
2925                         + 2 * sizeof(UV) + 2 /* )\0 */;
2926                 }
2927
2928                 Newx(buffer, len, char);
2929                 buffer_end = retval = buffer + len;
2930
2931                 /* Working backwards  */
2932                 *--retval = '\0';
2933                 *--retval = ')';
2934                 do {
2935                     *--retval = PL_hexdigit[addr & 15];
2936                 } while (addr >>= 4);
2937                 *--retval = 'x';
2938                 *--retval = '0';
2939                 *--retval = '(';
2940
2941                 retval -= typelen;
2942                 memcpy(retval, typestr, typelen);
2943
2944                 if (stashname) {
2945                     *--retval = '=';
2946                     retval -= stashnamelen;
2947                     memcpy(retval, stashname, stashnamelen);
2948                 }
2949                 /* retval may not necessarily have reached the start of the
2950                    buffer here.  */
2951                 assert (retval >= buffer);
2952
2953                 len = buffer_end - retval - 1; /* -1 for that \0  */
2954             }
2955             if (lp)
2956                 *lp = len;
2957             SAVEFREEPV(buffer);
2958             return retval;
2959         }
2960     }
2961
2962     if (SvPOKp(sv)) {
2963         if (lp)
2964             *lp = SvCUR(sv);
2965         if (flags & SV_MUTABLE_RETURN)
2966             return SvPVX_mutable(sv);
2967         if (flags & SV_CONST_RETURN)
2968             return (char *)SvPVX_const(sv);
2969         return SvPVX(sv);
2970     }
2971
2972     if (SvIOK(sv)) {
2973         /* I'm assuming that if both IV and NV are equally valid then
2974            converting the IV is going to be more efficient */
2975         const U32 isUIOK = SvIsUV(sv);
2976         char buf[TYPE_CHARS(UV)];
2977         char *ebuf, *ptr;
2978         STRLEN len;
2979
2980         if (SvTYPE(sv) < SVt_PVIV)
2981             sv_upgrade(sv, SVt_PVIV);
2982         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2983         len = ebuf - ptr;
2984         /* inlined from sv_setpvn */
2985         s = SvGROW_mutable(sv, len + 1);
2986         Move(ptr, s, len, char);
2987         s += len;
2988         *s = '\0';
2989         SvPOK_on(sv);
2990     }
2991     else if (SvNOK(sv)) {
2992         if (SvTYPE(sv) < SVt_PVNV)
2993             sv_upgrade(sv, SVt_PVNV);
2994         if (SvNVX(sv) == 0.0) {
2995             s = SvGROW_mutable(sv, 2);
2996             *s++ = '0';
2997             *s = '\0';
2998         } else {
2999             STRLEN len;
3000             /* The +20 is pure guesswork.  Configure test needed. --jhi */
3001             s = SvGROW_mutable(sv, NV_DIG + 20);
3002
3003             len = S_infnan_copy(SvNVX(sv), s, SvLEN(sv));
3004             if (len > 0)
3005                 s += len;
3006             else {
3007                 dSAVE_ERRNO;
3008                 /* some Xenix systems wipe out errno here */
3009
3010 #ifndef USE_LOCALE_NUMERIC
3011                 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3012                 SvPOK_on(sv);
3013 #else
3014                 {
3015                     DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3016                     PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3017
3018                     /* If the radix character is UTF-8, and actually is in the
3019                      * output, turn on the UTF-8 flag for the scalar */
3020                     if (PL_numeric_local
3021                         && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
3022                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3023                         {
3024                             SvUTF8_on(sv);
3025                         }
3026                     RESTORE_LC_NUMERIC();
3027                 }
3028
3029                 /* We don't call SvPOK_on(), because it may come to
3030                  * pass that the locale changes so that the
3031                  * stringification we just did is no longer correct.  We
3032                  * will have to re-stringify every time it is needed */
3033 #endif
3034                 RESTORE_ERRNO;
3035             }
3036             while (*s) s++;
3037         }
3038     }
3039     else if (isGV_with_GP(sv)) {
3040         GV *const gv = MUTABLE_GV(sv);
3041         SV *const buffer = sv_newmortal();
3042
3043         gv_efullname3(buffer, gv, "*");
3044
3045         assert(SvPOK(buffer));
3046         if (SvUTF8(buffer))
3047             SvUTF8_on(sv);
3048         if (lp)
3049             *lp = SvCUR(buffer);
3050         return SvPVX(buffer);
3051     }
3052     else if (isREGEXP(sv)) {
3053         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3054         return RX_WRAPPED((REGEXP *)sv);
3055     }
3056     else {
3057         if (lp)
3058             *lp = 0;
3059         if (flags & SV_UNDEF_RETURNS_NULL)
3060             return NULL;
3061         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3062             report_uninit(sv);
3063         /* Typically the caller expects that sv_any is not NULL now.  */
3064         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3065             sv_upgrade(sv, SVt_PV);
3066         return (char *)"";
3067     }
3068
3069     {
3070         const STRLEN len = s - SvPVX_const(sv);
3071         if (lp) 
3072             *lp = len;
3073         SvCUR_set(sv, len);
3074     }
3075     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3076                           PTR2UV(sv),SvPVX_const(sv)));
3077     if (flags & SV_CONST_RETURN)
3078         return (char *)SvPVX_const(sv);
3079     if (flags & SV_MUTABLE_RETURN)
3080         return SvPVX_mutable(sv);
3081     return SvPVX(sv);
3082 }
3083
3084 /*
3085 =for apidoc sv_copypv
3086
3087 Copies a stringified representation of the source SV into the
3088 destination SV.  Automatically performs any necessary mg_get and
3089 coercion of numeric values into strings.  Guaranteed to preserve
3090 UTF8 flag even from overloaded objects.  Similar in nature to
3091 sv_2pv[_flags] but operates directly on an SV instead of just the
3092 string.  Mostly uses sv_2pv_flags to do its work, except when that
3093 would lose the UTF-8'ness of the PV.
3094
3095 =for apidoc sv_copypv_nomg
3096
3097 Like sv_copypv, but doesn't invoke get magic first.
3098
3099 =for apidoc sv_copypv_flags
3100
3101 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3102 include SV_GMAGIC.
3103
3104 =cut
3105 */
3106
3107 void
3108 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3109 {
3110     PERL_ARGS_ASSERT_SV_COPYPV;
3111
3112     sv_copypv_flags(dsv, ssv, 0);
3113 }
3114
3115 void
3116 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3117 {
3118     STRLEN len;
3119     const char *s;
3120
3121     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3122
3123     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3124         mg_get(ssv);
3125     s = SvPV_nomg_const(ssv,len);
3126     sv_setpvn(dsv,s,len);
3127     if (SvUTF8(ssv))
3128         SvUTF8_on(dsv);
3129     else
3130         SvUTF8_off(dsv);
3131 }
3132
3133 /*
3134 =for apidoc sv_2pvbyte
3135
3136 Return a pointer to the byte-encoded representation of the SV, and set *lp
3137 to its length.  May cause the SV to be downgraded from UTF-8 as a
3138 side-effect.
3139
3140 Usually accessed via the C<SvPVbyte> macro.
3141
3142 =cut
3143 */
3144
3145 char *
3146 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3147 {
3148     PERL_ARGS_ASSERT_SV_2PVBYTE;
3149
3150     SvGETMAGIC(sv);
3151     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3152      || isGV_with_GP(sv) || SvROK(sv)) {
3153         SV *sv2 = sv_newmortal();
3154         sv_copypv_nomg(sv2,sv);
3155         sv = sv2;
3156     }
3157     sv_utf8_downgrade(sv,0);
3158     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3159 }
3160
3161 /*
3162 =for apidoc sv_2pvutf8
3163
3164 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3165 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3166
3167 Usually accessed via the C<SvPVutf8> macro.
3168
3169 =cut
3170 */
3171
3172 char *
3173 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3174 {
3175     PERL_ARGS_ASSERT_SV_2PVUTF8;
3176
3177     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3178      || isGV_with_GP(sv) || SvROK(sv))
3179         sv = sv_mortalcopy(sv);
3180     else
3181         SvGETMAGIC(sv);
3182     sv_utf8_upgrade_nomg(sv);
3183     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3184 }
3185
3186
3187 /*
3188 =for apidoc sv_2bool
3189
3190 This macro is only used by sv_true() or its macro equivalent, and only if
3191 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3192 It calls sv_2bool_flags with the SV_GMAGIC flag.
3193
3194 =for apidoc sv_2bool_flags
3195
3196 This function is only used by sv_true() and friends,  and only if
3197 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3198 contain SV_GMAGIC, then it does an mg_get() first.
3199
3200
3201 =cut
3202 */
3203
3204 bool
3205 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3206 {
3207     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3208
3209     restart:
3210     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3211
3212     if (!SvOK(sv))
3213         return 0;
3214     if (SvROK(sv)) {
3215         if (SvAMAGIC(sv)) {
3216             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3217             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3218                 bool svb;
3219                 sv = tmpsv;
3220                 if(SvGMAGICAL(sv)) {
3221                     flags = SV_GMAGIC;
3222                     goto restart; /* call sv_2bool */
3223                 }
3224                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3225                 else if(!SvOK(sv)) {
3226                     svb = 0;
3227                 }
3228                 else if(SvPOK(sv)) {
3229                     svb = SvPVXtrue(sv);
3230                 }
3231                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3232                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3233                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3234                 }
3235                 else {
3236                     flags = 0;
3237                     goto restart; /* call sv_2bool_nomg */
3238                 }
3239                 return cBOOL(svb);
3240             }
3241         }
3242         return SvRV(sv) != 0;
3243     }
3244     if (isREGEXP(sv))
3245         return
3246           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3247     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3248 }
3249
3250 /*
3251 =for apidoc sv_utf8_upgrade
3252
3253 Converts the PV of an SV to its UTF-8-encoded form.
3254 Forces the SV to string form if it is not already.
3255 Will C<mg_get> on C<sv> if appropriate.
3256 Always sets the SvUTF8 flag to avoid future validity checks even
3257 if the whole string is the same in UTF-8 as not.
3258 Returns the number of bytes in the converted string
3259
3260 This is not a general purpose byte encoding to Unicode interface:
3261 use the Encode extension for that.
3262
3263 =for apidoc sv_utf8_upgrade_nomg
3264
3265 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3266
3267 =for apidoc sv_utf8_upgrade_flags
3268
3269 Converts the PV of an SV to its UTF-8-encoded form.
3270 Forces the SV to string form if it is not already.
3271 Always sets the SvUTF8 flag to avoid future validity checks even
3272 if all the bytes are invariant in UTF-8.
3273 If C<flags> has C<SV_GMAGIC> bit set,
3274 will C<mg_get> on C<sv> if appropriate, else not.
3275
3276 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3277 will expand when converted to UTF-8, and skips the extra work of checking for
3278 that.  Typically this flag is used by a routine that has already parsed the
3279 string and found such characters, and passes this information on so that the
3280 work doesn't have to be repeated.
3281
3282 Returns the number of bytes in the converted string.
3283
3284 This is not a general purpose byte encoding to Unicode interface:
3285 use the Encode extension for that.
3286
3287 =for apidoc sv_utf8_upgrade_flags_grow
3288
3289 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3290 the number of unused bytes the string of 'sv' is guaranteed to have free after
3291 it upon return.  This allows the caller to reserve extra space that it intends
3292 to fill, to avoid extra grows.
3293
3294 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3295 are implemented in terms of this function.
3296
3297 Returns the number of bytes in the converted string (not including the spares).
3298
3299 =cut
3300
3301 (One might think that the calling routine could pass in the position of the
3302 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3303 have to be found again.  But that is not the case, because typically when the
3304 caller is likely to use this flag, it won't be calling this routine unless it
3305 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3306 and just use bytes.  But some things that do fit into a byte are variants in
3307 utf8, and the caller may not have been keeping track of these.)
3308
3309 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3310 C<NUL> isn't guaranteed due to having other routines do the work in some input
3311 cases, or if the input is already flagged as being in utf8.
3312
3313 The speed of this could perhaps be improved for many cases if someone wanted to
3314 write a fast function that counts the number of variant characters in a string,
3315 especially if it could return the position of the first one.
3316
3317 */
3318
3319 STRLEN
3320 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3321 {
3322     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3323
3324     if (sv == &PL_sv_undef)
3325         return 0;
3326     if (!SvPOK_nog(sv)) {
3327         STRLEN len = 0;
3328         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3329             (void) sv_2pv_flags(sv,&len, flags);
3330             if (SvUTF8(sv)) {
3331                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3332                 return len;
3333             }
3334         } else {
3335             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3336         }
3337     }
3338
3339     if (SvUTF8(sv)) {
3340         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3341         return SvCUR(sv);
3342     }
3343
3344     if (SvIsCOW(sv)) {
3345         S_sv_uncow(aTHX_ sv, 0);
3346     }
3347
3348     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3349         sv_recode_to_utf8(sv, PL_encoding);
3350         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3351         return SvCUR(sv);
3352     }
3353
3354     if (SvCUR(sv) == 0) {
3355         if (extra) SvGROW(sv, extra);
3356     } else { /* Assume Latin-1/EBCDIC */
3357         /* This function could be much more efficient if we
3358          * had a FLAG in SVs to signal if there are any variant
3359          * chars in the PV.  Given that there isn't such a flag
3360          * make the loop as fast as possible (although there are certainly ways
3361          * to speed this up, eg. through vectorization) */
3362         U8 * s = (U8 *) SvPVX_const(sv);
3363         U8 * e = (U8 *) SvEND(sv);
3364         U8 *t = s;
3365         STRLEN two_byte_count = 0;
3366         
3367         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3368
3369         /* See if really will need to convert to utf8.  We mustn't rely on our
3370          * incoming SV being well formed and having a trailing '\0', as certain
3371          * code in pp_formline can send us partially built SVs. */
3372
3373         while (t < e) {
3374             const U8 ch = *t++;
3375             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3376
3377             t--;    /* t already incremented; re-point to first variant */
3378             two_byte_count = 1;
3379             goto must_be_utf8;
3380         }
3381
3382         /* utf8 conversion not needed because all are invariants.  Mark as
3383          * UTF-8 even if no variant - saves scanning loop */
3384         SvUTF8_on(sv);
3385         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3386         return SvCUR(sv);
3387
3388 must_be_utf8:
3389
3390         /* Here, the string should be converted to utf8, either because of an
3391          * input flag (two_byte_count = 0), or because a character that
3392          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3393          * the beginning of the string (if we didn't examine anything), or to
3394          * the first variant.  In either case, everything from s to t - 1 will
3395          * occupy only 1 byte each on output.
3396          *
3397          * There are two main ways to convert.  One is to create a new string
3398          * and go through the input starting from the beginning, appending each
3399          * converted value onto the new string as we go along.  It's probably
3400          * best to allocate enough space in the string for the worst possible
3401          * case rather than possibly running out of space and having to
3402          * reallocate and then copy what we've done so far.  Since everything
3403          * from s to t - 1 is invariant, the destination can be initialized
3404          * with these using a fast memory copy
3405          *
3406          * The other way is to figure out exactly how big the string should be
3407          * by parsing the entire input.  Then you don't have to make it big
3408          * enough to handle the worst possible case, and more importantly, if
3409          * the string you already have is large enough, you don't have to
3410          * allocate a new string, you can copy the last character in the input
3411          * string to the final position(s) that will be occupied by the
3412          * converted string and go backwards, stopping at t, since everything
3413          * before that is invariant.
3414          *
3415          * There are advantages and disadvantages to each method.
3416          *
3417          * In the first method, we can allocate a new string, do the memory
3418          * copy from the s to t - 1, and then proceed through the rest of the
3419          * string byte-by-byte.
3420          *
3421          * In the second method, we proceed through the rest of the input
3422          * string just calculating how big the converted string will be.  Then
3423          * there are two cases:
3424          *  1)  if the string has enough extra space to handle the converted
3425          *      value.  We go backwards through the string, converting until we
3426          *      get to the position we are at now, and then stop.  If this
3427          *      position is far enough along in the string, this method is
3428          *      faster than the other method.  If the memory copy were the same
3429          *      speed as the byte-by-byte loop, that position would be about
3430          *      half-way, as at the half-way mark, parsing to the end and back
3431          *      is one complete string's parse, the same amount as starting
3432          *      over and going all the way through.  Actually, it would be
3433          *      somewhat less than half-way, as it's faster to just count bytes
3434          *      than to also copy, and we don't have the overhead of allocating
3435          *      a new string, changing the scalar to use it, and freeing the
3436          *      existing one.  But if the memory copy is fast, the break-even
3437          *      point is somewhere after half way.  The counting loop could be
3438          *      sped up by vectorization, etc, to move the break-even point
3439          *      further towards the beginning.
3440          *  2)  if the string doesn't have enough space to handle the converted
3441          *      value.  A new string will have to be allocated, and one might
3442          *      as well, given that, start from the beginning doing the first
3443          *      method.  We've spent extra time parsing the string and in
3444          *      exchange all we've gotten is that we know precisely how big to
3445          *      make the new one.  Perl is more optimized for time than space,
3446          *      so this case is a loser.
3447          * So what I've decided to do is not use the 2nd method unless it is
3448          * guaranteed that a new string won't have to be allocated, assuming
3449          * the worst case.  I also decided not to put any more conditions on it
3450          * than this, for now.  It seems likely that, since the worst case is
3451          * twice as big as the unknown portion of the string (plus 1), we won't
3452          * be guaranteed enough space, causing us to go to the first method,
3453          * unless the string is short, or the first variant character is near
3454          * the end of it.  In either of these cases, it seems best to use the
3455          * 2nd method.  The only circumstance I can think of where this would
3456          * be really slower is if the string had once had much more data in it
3457          * than it does now, but there is still a substantial amount in it  */
3458
3459         {
3460             STRLEN invariant_head = t - s;
3461             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3462             if (SvLEN(sv) < size) {
3463
3464                 /* Here, have decided to allocate a new string */
3465
3466                 U8 *dst;
3467                 U8 *d;
3468
3469                 Newx(dst, size, U8);
3470
3471                 /* If no known invariants at the beginning of the input string,
3472                  * set so starts from there.  Otherwise, can use memory copy to
3473                  * get up to where we are now, and then start from here */
3474
3475                 if (invariant_head == 0) {
3476                     d = dst;
3477                 } else {
3478                     Copy(s, dst, invariant_head, char);
3479                     d = dst + invariant_head;
3480                 }
3481
3482                 while (t < e) {
3483                     append_utf8_from_native_byte(*t, &d);
3484                     t++;
3485                 }
3486                 *d = '\0';
3487                 SvPV_free(sv); /* No longer using pre-existing string */
3488                 SvPV_set(sv, (char*)dst);
3489                 SvCUR_set(sv, d - dst);
3490                 SvLEN_set(sv, size);
3491             } else {
3492
3493                 /* Here, have decided to get the exact size of the string.
3494                  * Currently this happens only when we know that there is
3495                  * guaranteed enough space to fit the converted string, so
3496                  * don't have to worry about growing.  If two_byte_count is 0,
3497                  * then t points to the first byte of the string which hasn't
3498                  * been examined yet.  Otherwise two_byte_count is 1, and t
3499                  * points to the first byte in the string that will expand to
3500                  * two.  Depending on this, start examining at t or 1 after t.
3501                  * */
3502
3503                 U8 *d = t + two_byte_count;
3504
3505
3506                 /* Count up the remaining bytes that expand to two */
3507
3508                 while (d < e) {
3509                     const U8 chr = *d++;
3510                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3511                 }
3512
3513                 /* The string will expand by just the number of bytes that
3514                  * occupy two positions.  But we are one afterwards because of
3515                  * the increment just above.  This is the place to put the
3516                  * trailing NUL, and to set the length before we decrement */
3517
3518                 d += two_byte_count;
3519                 SvCUR_set(sv, d - s);
3520                 *d-- = '\0';
3521
3522
3523                 /* Having decremented d, it points to the position to put the
3524                  * very last byte of the expanded string.  Go backwards through
3525                  * the string, copying and expanding as we go, stopping when we
3526                  * get to the part that is invariant the rest of the way down */
3527
3528                 e--;
3529                 while (e >= t) {
3530                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3531                         *d-- = *e;
3532                     } else {
3533                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3534                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3535                     }
3536                     e--;
3537                 }
3538             }
3539
3540             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3541                 /* Update pos. We do it at the end rather than during
3542                  * the upgrade, to avoid slowing down the common case
3543                  * (upgrade without pos).
3544                  * pos can be stored as either bytes or characters.  Since
3545                  * this was previously a byte string we can just turn off
3546                  * the bytes flag. */
3547                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3548                 if (mg) {
3549                     mg->mg_flags &= ~MGf_BYTES;
3550                 }
3551                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3552                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3553             }
3554         }
3555     }
3556
3557     /* Mark as UTF-8 even if no variant - saves scanning loop */
3558     SvUTF8_on(sv);
3559     return SvCUR(sv);
3560 }
3561
3562 /*
3563 =for apidoc sv_utf8_downgrade
3564
3565 Attempts to convert the PV of an SV from characters to bytes.
3566 If the PV contains a character that cannot fit
3567 in a byte, this conversion will fail;
3568 in this case, either returns false or, if C<fail_ok> is not
3569 true, croaks.
3570
3571 This is not a general purpose Unicode to byte encoding interface:
3572 use the Encode extension for that.
3573
3574 =cut
3575 */
3576
3577 bool
3578 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3579 {
3580     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3581
3582     if (SvPOKp(sv) && SvUTF8(sv)) {
3583         if (SvCUR(sv)) {
3584             U8 *s;
3585             STRLEN len;
3586             int mg_flags = SV_GMAGIC;
3587
3588             if (SvIsCOW(sv)) {
3589                 S_sv_uncow(aTHX_ sv, 0);
3590             }
3591             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3592                 /* update pos */
3593                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3594                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3595                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3596                                                 SV_GMAGIC|SV_CONST_RETURN);
3597                         mg_flags = 0; /* sv_pos_b2u does get magic */
3598                 }
3599                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3600                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3601
3602             }
3603             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3604
3605             if (!utf8_to_bytes(s, &len)) {
3606                 if (fail_ok)
3607                     return FALSE;
3608                 else {
3609                     if (PL_op)
3610                         Perl_croak(aTHX_ "Wide character in %s",
3611                                    OP_DESC(PL_op));
3612                     else
3613                         Perl_croak(aTHX_ "Wide character");
3614                 }
3615             }
3616             SvCUR_set(sv, len);
3617         }
3618     }
3619     SvUTF8_off(sv);
3620     return TRUE;
3621 }
3622
3623 /*
3624 =for apidoc sv_utf8_encode
3625
3626 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3627 flag off so that it looks like octets again.
3628
3629 =cut
3630 */
3631
3632 void
3633 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3634 {
3635     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3636
3637     if (SvREADONLY(sv)) {
3638         sv_force_normal_flags(sv, 0);
3639     }
3640     (void) sv_utf8_upgrade(sv);
3641     SvUTF8_off(sv);
3642 }
3643
3644 /*
3645 =for apidoc sv_utf8_decode
3646
3647 If the PV of the SV is an octet sequence in UTF-8
3648 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3649 so that it looks like a character.  If the PV contains only single-byte
3650 characters, the C<SvUTF8> flag stays off.
3651 Scans PV for validity and returns false if the PV is invalid UTF-8.
3652
3653 =cut
3654 */
3655
3656 bool
3657 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3658 {
3659     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3660
3661     if (SvPOKp(sv)) {
3662         const U8 *start, *c;
3663         const U8 *e;
3664
3665         /* The octets may have got themselves encoded - get them back as
3666          * bytes
3667          */
3668         if (!sv_utf8_downgrade(sv, TRUE))
3669             return FALSE;
3670
3671         /* it is actually just a matter of turning the utf8 flag on, but
3672          * we want to make sure everything inside is valid utf8 first.
3673          */
3674         c = start = (const U8 *) SvPVX_const(sv);
3675         if (!is_utf8_string(c, SvCUR(sv)))
3676             return FALSE;
3677         e = (const U8 *) SvEND(sv);
3678         while (c < e) {
3679             const U8 ch = *c++;
3680             if (!UTF8_IS_INVARIANT(ch)) {
3681                 SvUTF8_on(sv);
3682                 break;
3683             }
3684         }
3685         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3686             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3687                    after this, clearing pos.  Does anything on CPAN
3688                    need this? */
3689             /* adjust pos to the start of a UTF8 char sequence */
3690             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3691             if (mg) {
3692                 I32 pos = mg->mg_len;
3693                 if (pos > 0) {
3694                     for (c = start + pos; c > start; c--) {
3695                         if (UTF8_IS_START(*c))
3696                             break;
3697                     }
3698                     mg->mg_len  = c - start;
3699                 }
3700             }
3701             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3702                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3703         }
3704     }
3705     return TRUE;
3706 }
3707
3708 /*
3709 =for apidoc sv_setsv
3710
3711 Copies the contents of the source SV C<ssv> into the destination SV
3712 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3713 function if the source SV needs to be reused.  Does not handle 'set' magic on
3714 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3715 performs a copy-by-value, obliterating any previous content of the
3716 destination.
3717
3718 You probably want to use one of the assortment of wrappers, such as
3719 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3720 C<SvSetMagicSV_nosteal>.
3721
3722 =for apidoc sv_setsv_flags
3723
3724 Copies the contents of the source SV C<ssv> into the destination SV
3725 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3726 function if the source SV needs to be reused.  Does not handle 'set' magic.
3727 Loosely speaking, it performs a copy-by-value, obliterating any previous
3728 content of the destination.
3729 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3730 C<ssv> if appropriate, else not.  If the C<flags>
3731 parameter has the C<SV_NOSTEAL> bit set then the
3732 buffers of temps will not be stolen.  <sv_setsv>
3733 and C<sv_setsv_nomg> are implemented in terms of this function.
3734
3735 You probably want to use one of the assortment of wrappers, such as
3736 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3737 C<SvSetMagicSV_nosteal>.
3738
3739 This is the primary function for copying scalars, and most other
3740 copy-ish functions and macros use this underneath.
3741
3742 =cut
3743 */
3744
3745 static void
3746 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3747 {
3748     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3749     HV *old_stash = NULL;
3750
3751     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3752
3753     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3754         const char * const name = GvNAME(sstr);
3755         const STRLEN len = GvNAMELEN(sstr);
3756         {
3757             if (dtype >= SVt_PV) {
3758                 SvPV_free(dstr);
3759                 SvPV_set(dstr, 0);
3760                 SvLEN_set(dstr, 0);
3761                 SvCUR_set(dstr, 0);
3762             }
3763             SvUPGRADE(dstr, SVt_PVGV);
3764             (void)SvOK_off(dstr);
3765             isGV_with_GP_on(dstr);
3766         }
3767         GvSTASH(dstr) = GvSTASH(sstr);
3768         if (GvSTASH(dstr))
3769             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3770         gv_name_set(MUTABLE_GV(dstr), name, len,
3771                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3772         SvFAKE_on(dstr);        /* can coerce to non-glob */
3773     }
3774
3775     if(GvGP(MUTABLE_GV(sstr))) {
3776         /* If source has method cache entry, clear it */
3777         if(GvCVGEN(sstr)) {
3778             SvREFCNT_dec(GvCV(sstr));
3779             GvCV_set(sstr, NULL);
3780             GvCVGEN(sstr) = 0;
3781         }
3782         /* If source has a real method, then a method is
3783            going to change */
3784         else if(
3785          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3786         ) {
3787             mro_changes = 1;
3788         }
3789     }
3790
3791     /* If dest already had a real method, that's a change as well */
3792     if(
3793         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3794      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3795     ) {
3796         mro_changes = 1;
3797     }
3798
3799     /* We don't need to check the name of the destination if it was not a
3800        glob to begin with. */
3801     if(dtype == SVt_PVGV) {
3802         const char * const name = GvNAME((const GV *)dstr);
3803         if(
3804             strEQ(name,"ISA")
3805          /* The stash may have been detached from the symbol table, so
3806             check its name. */
3807          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3808         )
3809             mro_changes = 2;
3810         else {
3811             const STRLEN len = GvNAMELEN(dstr);
3812             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3813              || (len == 1 && name[0] == ':')) {
3814                 mro_changes = 3;
3815
3816                 /* Set aside the old stash, so we can reset isa caches on
3817                    its subclasses. */
3818                 if((old_stash = GvHV(dstr)))
3819                     /* Make sure we do not lose it early. */
3820                     SvREFCNT_inc_simple_void_NN(
3821                      sv_2mortal((SV *)old_stash)
3822                     );
3823             }
3824         }
3825
3826         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3827     }
3828
3829     gp_free(MUTABLE_GV(dstr));
3830     GvINTRO_off(dstr);          /* one-shot flag */
3831     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3832     if (SvTAINTED(sstr))
3833         SvTAINT(dstr);
3834     if (GvIMPORTED(dstr) != GVf_IMPORTED
3835         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3836         {
3837             GvIMPORTED_on(dstr);
3838         }
3839     GvMULTI_on(dstr);
3840     if(mro_changes == 2) {
3841       if (GvAV((const GV *)sstr)) {
3842         MAGIC *mg;
3843         SV * const sref = (SV *)GvAV((const GV *)dstr);
3844         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3845             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3846                 AV * const ary = newAV();
3847                 av_push(ary, mg->mg_obj); /* takes the refcount */
3848                 mg->mg_obj = (SV *)ary;
3849             }
3850             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3851         }
3852         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3853       }
3854       mro_isa_changed_in(GvSTASH(dstr));
3855     }
3856     else if(mro_changes == 3) {
3857         HV * const stash = GvHV(dstr);
3858         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3859             mro_package_moved(
3860                 stash, old_stash,
3861                 (GV *)dstr, 0
3862             );
3863     }
3864     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3865     if (GvIO(dstr) && dtype == SVt_PVGV) {
3866         DEBUG_o(Perl_deb(aTHX_
3867                         "glob_assign_glob clearing PL_stashcache\n"));
3868         /* It's a cache. It will rebuild itself quite happily.
3869            It's a lot of effort to work out exactly which key (or keys)
3870            might be invalidated by the creation of the this file handle.
3871          */
3872         hv_clear(PL_stashcache);
3873     }
3874     return;
3875 }
3876
3877 static void
3878 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3879 {
3880     SV * const sref = SvRV(sstr);
3881     SV *dref;
3882     const int intro = GvINTRO(dstr);
3883     SV **location;
3884     U8 import_flag = 0;
3885     const U32 stype = SvTYPE(sref);
3886
3887     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3888
3889     if (intro) {
3890         GvINTRO_off(dstr);      /* one-shot flag */
3891         GvLINE(dstr) = CopLINE(PL_curcop);
3892         GvEGV(dstr) = MUTABLE_GV(dstr);
3893     }
3894     GvMULTI_on(dstr);
3895     switch (stype) {
3896     case SVt_PVCV:
3897         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3898         import_flag = GVf_IMPORTED_CV;
3899         goto common;
3900     case SVt_PVHV:
3901         location = (SV **) &GvHV(dstr);
3902         import_flag = GVf_IMPORTED_HV;
3903         goto common;
3904     case SVt_PVAV:
3905         location = (SV **) &GvAV(dstr);
3906         import_flag = GVf_IMPORTED_AV;
3907         goto common;
3908     case SVt_PVIO:
3909         location = (SV **) &GvIOp(dstr);
3910         goto common;
3911     case SVt_PVFM:
3912         location = (SV **) &GvFORM(dstr);
3913         goto common;
3914     default:
3915         location = &GvSV(dstr);
3916         import_flag = GVf_IMPORTED_SV;
3917     common:
3918         if (intro) {
3919             if (stype == SVt_PVCV) {
3920                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3921                 if (GvCVGEN(dstr)) {
3922                     SvREFCNT_dec(GvCV(dstr));
3923                     GvCV_set(dstr, NULL);
3924                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3925                 }
3926             }
3927             /* SAVEt_GVSLOT takes more room on the savestack and has more
3928                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3929                leave_scope needs access to the GV so it can reset method
3930                caches.  We must use SAVEt_GVSLOT whenever the type is
3931                SVt_PVCV, even if the stash is anonymous, as the stash may
3932                gain a name somehow before leave_scope. */
3933             if (stype == SVt_PVCV) {
3934                 /* There is no save_pushptrptrptr.  Creating it for this
3935                    one call site would be overkill.  So inline the ss add
3936                    routines here. */
3937                 dSS_ADD;
3938                 SS_ADD_PTR(dstr);
3939                 SS_ADD_PTR(location);
3940                 SS_ADD_PTR(SvREFCNT_inc(*location));
3941                 SS_ADD_UV(SAVEt_GVSLOT);
3942                 SS_ADD_END(4);
3943             }
3944             else SAVEGENERICSV(*location);
3945         }
3946         dref = *location;
3947         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3948             CV* const cv = MUTABLE_CV(*location);
3949             if (cv) {
3950                 if (!GvCVGEN((const GV *)dstr) &&
3951                     (CvROOT(cv) || CvXSUB(cv)) &&
3952                     /* redundant check that avoids creating the extra SV
3953                        most of the time: */
3954                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3955                     {
3956                         SV * const new_const_sv =
3957                             CvCONST((const CV *)sref)
3958                                  ? cv_const_sv((const CV *)sref)
3959                                  : NULL;
3960                         report_redefined_cv(
3961                            sv_2mortal(Perl_newSVpvf(aTHX_
3962                                 "%"HEKf"::%"HEKf,
3963                                 HEKfARG(
3964                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3965                                 ),
3966                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3967                            )),
3968                            cv,
3969                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3970                         );
3971                     }
3972                 if (!intro)
3973                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3974                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3975                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3976                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3977             }
3978             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3979             GvASSUMECV_on(dstr);
3980             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3981         }
3982         *location = SvREFCNT_inc_simple_NN(sref);
3983         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3984             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3985             GvFLAGS(dstr) |= import_flag;
3986         }
3987         if (stype == SVt_PVHV) {
3988             const char * const name = GvNAME((GV*)dstr);
3989             const STRLEN len = GvNAMELEN(dstr);
3990             if (
3991                 (
3992                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3993                 || (len == 1 && name[0] == ':')
3994                 )
3995              && (!dref || HvENAME_get(dref))
3996             ) {
3997                 mro_package_moved(
3998                     (HV *)sref, (HV *)dref,
3999                     (GV *)dstr, 0
4000                 );
4001             }
4002         }
4003         else if (
4004             stype == SVt_PVAV && sref != dref
4005          && strEQ(GvNAME((GV*)dstr), "ISA")
4006          /* The stash may have been detached from the symbol table, so
4007             check its name before doing anything. */
4008          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4009         ) {
4010             MAGIC *mg;
4011             MAGIC * const omg = dref && SvSMAGICAL(dref)
4012                                  ? mg_find(dref, PERL_MAGIC_isa)
4013                                  : NULL;
4014             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4015                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4016                     AV * const ary = newAV();
4017                     av_push(ary, mg->mg_obj); /* takes the refcount */
4018                     mg->mg_obj = (SV *)ary;
4019                 }
4020                 if (omg) {
4021                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4022                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4023                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4024                         while (items--)
4025                             av_push(
4026                              (AV *)mg->mg_obj,
4027                              SvREFCNT_inc_simple_NN(*svp++)
4028                             );
4029                     }
4030                     else
4031                         av_push(
4032                          (AV *)mg->mg_obj,
4033                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4034                         );
4035                 }
4036                 else
4037                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4038             }
4039             else
4040             {
4041                 sv_magic(
4042                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4043                 );
4044                 mg = mg_find(sref, PERL_MAGIC_isa);
4045             }
4046             /* Since the *ISA assignment could have affected more than
4047                one stash, don't call mro_isa_changed_in directly, but let
4048                magic_clearisa do it for us, as it already has the logic for
4049                dealing with globs vs arrays of globs. */
4050             assert(mg);
4051             Perl_magic_clearisa(aTHX_ NULL, mg);
4052         }
4053         else if (stype == SVt_PVIO) {
4054             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4055             /* It's a cache. It will rebuild itself quite happily.
4056                It's a lot of effort to work out exactly which key (or keys)
4057                might be invalidated by the creation of the this file handle.
4058             */
4059             hv_clear(PL_stashcache);
4060         }
4061         break;
4062     }
4063     if (!intro) SvREFCNT_dec(dref);
4064     if (SvTAINTED(sstr))
4065         SvTAINT(dstr);
4066     return;
4067 }
4068
4069
4070
4071
4072 #ifdef PERL_DEBUG_READONLY_COW
4073 # include <sys/mman.h>
4074
4075 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4076 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4077 # endif
4078
4079 void
4080 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4081 {
4082     struct perl_memory_debug_header * const header =
4083         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4084     const MEM_SIZE len = header->size;
4085     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4086 # ifdef PERL_TRACK_MEMPOOL
4087     if (!header->readonly) header->readonly = 1;
4088 # endif
4089     if (mprotect(header, len, PROT_READ))
4090         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4091                          header, len, errno);
4092 }
4093
4094 static void
4095 S_sv_buf_to_rw(pTHX_ SV *sv)
4096 {
4097     struct perl_memory_debug_header * const header =
4098         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4099     const MEM_SIZE len = header->size;
4100     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4101     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4102         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4103                          header, len, errno);
4104 # ifdef PERL_TRACK_MEMPOOL
4105     header->readonly = 0;
4106 # endif
4107 }
4108
4109 #else
4110 # define sv_buf_to_ro(sv)       NOOP
4111 # define sv_buf_to_rw(sv)       NOOP
4112 #endif
4113
4114 void
4115 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4116 {
4117     U32 sflags;
4118     int dtype;
4119     svtype stype;
4120
4121     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4122
4123     if (sstr == dstr)
4124         return;
4125
4126     if (SvIS_FREED(dstr)) {
4127         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4128                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4129     }
4130     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4131     if (!sstr)
4132         sstr = &PL_sv_undef;
4133     if (SvIS_FREED(sstr)) {
4134         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4135                    (void*)sstr, (void*)dstr);
4136     }
4137     stype = SvTYPE(sstr);
4138     dtype = SvTYPE(dstr);
4139
4140     /* There's a lot of redundancy below but we're going for speed here */
4141
4142     switch (stype) {
4143     case SVt_NULL:
4144       undef_sstr:
4145         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4146             (void)SvOK_off(dstr);
4147             return;
4148         }
4149         break;
4150     case SVt_IV:
4151         if (SvIOK(sstr)) {
4152             switch (dtype) {
4153             case SVt_NULL:
4154                 sv_upgrade(dstr, SVt_IV);
4155                 break;
4156             case SVt_NV:
4157             case SVt_PV:
4158                 sv_upgrade(dstr, SVt_PVIV);
4159                 break;
4160             case SVt_PVGV:
4161             case SVt_PVLV:
4162                 goto end_of_first_switch;
4163             }
4164             (void)SvIOK_only(dstr);
4165             SvIV_set(dstr,  SvIVX(sstr));
4166             if (SvIsUV(sstr))
4167                 SvIsUV_on(dstr);
4168             /* SvTAINTED can only be true if the SV has taint magic, which in
4169                turn means that the SV type is PVMG (or greater). This is the
4170                case statement for SVt_IV, so this cannot be true (whatever gcov
4171                may say).  */
4172             assert(!SvTAINTED(sstr));
4173             return;
4174         }
4175         if (!SvROK(sstr))
4176             goto undef_sstr;
4177         if (dtype < SVt_PV && dtype != SVt_IV)
4178             sv_upgrade(dstr, SVt_IV);
4179         break;
4180
4181     case SVt_NV:
4182         if (SvNOK(sstr)) {
4183             switch (dtype) {
4184             case SVt_NULL:
4185             case SVt_IV:
4186                 sv_upgrade(dstr, SVt_NV);
4187                 break;
4188             case SVt_PV:
4189             case SVt_PVIV:
4190                 sv_upgrade(dstr, SVt_PVNV);
4191                 break;
4192             case SVt_PVGV:
4193             case SVt_PVLV:
4194                 goto end_of_first_switch;
4195             }
4196             SvNV_set(dstr, SvNVX(sstr));
4197             (void)SvNOK_only(dstr);
4198             /* SvTAINTED can only be true if the SV has taint magic, which in
4199                turn means that the SV type is PVMG (or greater). This is the
4200                case statement for SVt_NV, so this cannot be true (whatever gcov
4201                may say).  */
4202             assert(!SvTAINTED(sstr));
4203             return;
4204         }
4205         goto undef_sstr;
4206
4207     case SVt_PV:
4208         if (dtype < SVt_PV)
4209             sv_upgrade(dstr, SVt_PV);
4210         break;
4211     case SVt_PVIV:
4212         if (dtype < SVt_PVIV)
4213             sv_upgrade(dstr, SVt_PVIV);
4214         break;
4215     case SVt_PVNV:
4216         if (dtype < SVt_PVNV)
4217             sv_upgrade(dstr, SVt_PVNV);
4218         break;
4219     default:
4220         {
4221         const char * const type = sv_reftype(sstr,0);
4222         if (PL_op)
4223             /* diag_listed_as: Bizarre copy of %s */
4224             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4225         else
4226             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4227         }
4228         NOT_REACHED; /* NOTREACHED */
4229
4230     case SVt_REGEXP:
4231       upgregexp:
4232         if (dtype < SVt_REGEXP)
4233         {
4234             if (dtype >= SVt_PV) {
4235                 SvPV_free(dstr);
4236                 SvPV_set(dstr, 0);
4237                 SvLEN_set(dstr, 0);
4238                 SvCUR_set(dstr, 0);
4239             }
4240             sv_upgrade(dstr, SVt_REGEXP);
4241         }
4242         break;
4243
4244         case SVt_INVLIST:
4245     case SVt_PVLV:
4246     case SVt_PVGV:
4247     case SVt_PVMG:
4248         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4249             mg_get(sstr);
4250             if (SvTYPE(sstr) != stype)
4251                 stype = SvTYPE(sstr);
4252         }
4253         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4254                     glob_assign_glob(dstr, sstr, dtype);
4255                     return;
4256         }
4257         if (stype == SVt_PVLV)
4258         {
4259             if (isREGEXP(sstr)) goto upgregexp;
4260             SvUPGRADE(dstr, SVt_PVNV);
4261         }
4262         else
4263             SvUPGRADE(dstr, (svtype)stype);
4264     }
4265  end_of_first_switch:
4266
4267     /* dstr may have been upgraded.  */
4268     dtype = SvTYPE(dstr);
4269     sflags = SvFLAGS(sstr);
4270
4271     if (dtype == SVt_PVCV) {
4272         /* Assigning to a subroutine sets the prototype.  */
4273         if (SvOK(sstr)) {
4274             STRLEN len;
4275             const char *const ptr = SvPV_const(sstr, len);
4276
4277             SvGROW(dstr, len + 1);
4278             Copy(ptr, SvPVX(dstr), len + 1, char);
4279             SvCUR_set(dstr, len);
4280             SvPOK_only(dstr);
4281             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4282             CvAUTOLOAD_off(dstr);
4283         } else {
4284             SvOK_off(dstr);
4285         }
4286     }
4287     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4288         const char * const type = sv_reftype(dstr,0);
4289         if (PL_op)
4290             /* diag_listed_as: Cannot copy to %s */
4291             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4292         else
4293             Perl_croak(aTHX_ "Cannot copy to %s", type);
4294     } else if (sflags & SVf_ROK) {
4295         if (isGV_with_GP(dstr)
4296             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4297             sstr = SvRV(sstr);
4298             if (sstr == dstr) {
4299                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4300                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4301                 {
4302                     GvIMPORTED_on(dstr);
4303                 }
4304                 GvMULTI_on(dstr);
4305                 return;
4306             }
4307             glob_assign_glob(dstr, sstr, dtype);
4308             return;
4309         }
4310
4311         if (dtype >= SVt_PV) {
4312             if (isGV_with_GP(dstr)) {
4313                 glob_assign_ref(dstr, sstr);
4314                 return;
4315             }
4316             if (SvPVX_const(dstr)) {
4317                 SvPV_free(dstr);
4318                 SvLEN_set(dstr, 0);
4319                 SvCUR_set(dstr, 0);
4320             }
4321         }
4322         (void)SvOK_off(dstr);
4323         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4324         SvFLAGS(dstr) |= sflags & SVf_ROK;
4325         assert(!(sflags & SVp_NOK));
4326         assert(!(sflags & SVp_IOK));
4327         assert(!(sflags & SVf_NOK));
4328         assert(!(sflags & SVf_IOK));
4329     }
4330     else if (isGV_with_GP(dstr)) {
4331         if (!(sflags & SVf_OK)) {
4332             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4333                            "Undefined value assigned to typeglob");
4334         }
4335         else {
4336             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4337             if (dstr != (const SV *)gv) {
4338                 const char * const name = GvNAME((const GV *)dstr);
4339                 const STRLEN len = GvNAMELEN(dstr);
4340                 HV *old_stash = NULL;
4341                 bool reset_isa = FALSE;
4342                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4343                  || (len == 1 && name[0] == ':')) {
4344                     /* Set aside the old stash, so we can reset isa caches
4345                        on its subclasses. */
4346                     if((old_stash = GvHV(dstr))) {
4347                         /* Make sure we do not lose it early. */
4348                         SvREFCNT_inc_simple_void_NN(
4349                          sv_2mortal((SV *)old_stash)
4350                         );
4351                     }
4352                     reset_isa = TRUE;
4353                 }
4354
4355                 if (GvGP(dstr)) {
4356                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4357                     gp_free(MUTABLE_GV(dstr));
4358                 }
4359                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4360
4361                 if (reset_isa) {
4362                     HV * const stash = GvHV(dstr);
4363                     if(
4364                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4365                     )
4366                         mro_package_moved(
4367                          stash, old_stash,
4368                          (GV *)dstr, 0
4369                         );
4370                 }
4371             }
4372         }
4373     }
4374     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4375           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4376         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4377     }
4378     else if (sflags & SVp_POK) {
4379         const STRLEN cur = SvCUR(sstr);
4380         const STRLEN len = SvLEN(sstr);
4381
4382         /*
4383          * We have three basic ways to copy the string:
4384          *
4385          *  1. Swipe
4386          *  2. Copy-on-write
4387          *  3. Actual copy
4388          * 
4389          * Which we choose is based on various factors.  The following
4390          * things are listed in order of speed, fastest to slowest:
4391          *  - Swipe
4392          *  - Copying a short string
4393          *  - Copy-on-write bookkeeping
4394          *  - malloc
4395          *  - Copying a long string
4396          * 
4397          * We swipe the string (steal the string buffer) if the SV on the
4398          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4399          * big win on long strings.  It should be a win on short strings if
4400          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4401          * slow things down, as SvPVX_const(sstr) would have been freed
4402          * soon anyway.
4403          * 
4404          * We also steal the buffer from a PADTMP (operator target) if it
4405          * is â€˜long enough’.  For short strings, a swipe does not help
4406          * here, as it causes more malloc calls the next time the target
4407          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4408          * be allocated it is still not worth swiping PADTMPs for short
4409          * strings, as the savings here are small.
4410          * 
4411          * If the rhs is already flagged as a copy-on-write string and COW
4412          * is possible here, we use copy-on-write and make both SVs share
4413          * the string buffer.
4414          * 
4415          * If the rhs is not flagged as copy-on-write, then we see whether
4416          * it is worth upgrading it to such.  If the lhs already has a buf-
4417          * fer big enough and the string is short, we skip it and fall back
4418          * to method 3, since memcpy is faster for short strings than the
4419          * later bookkeeping overhead that copy-on-write entails.
4420          * 
4421          * If there is no buffer on the left, or the buffer is too small,
4422          * then we use copy-on-write.
4423          */
4424
4425         /* Whichever path we take through the next code, we want this true,
4426            and doing it now facilitates the COW check.  */
4427         (void)SvPOK_only(dstr);
4428
4429         if (
4430                  (              /* Either ... */
4431                                 /* slated for free anyway (and not COW)? */
4432                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4433                                 /* or a swipable TARG */
4434                  || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
4435                        == SVs_PADTMP
4436                                 /* whose buffer is worth stealing */
4437                      && CHECK_COWBUF_THRESHOLD(cur,len)
4438                     )
4439                  ) &&
4440                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4441                  (!(flags & SV_NOSTEAL)) &&
4442                                         /* and we're allowed to steal temps */
4443                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4444                  len)             /* and really is a string */
4445         {       /* Passes the swipe test.  */
4446             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4447                 SvPV_free(dstr);
4448             SvPV_set(dstr, SvPVX_mutable(sstr));
4449             SvLEN_set(dstr, SvLEN(sstr));
4450             SvCUR_set(dstr, SvCUR(sstr));
4451
4452             SvTEMP_off(dstr);
4453             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4454             SvPV_set(sstr, NULL);
4455             SvLEN_set(sstr, 0);
4456             SvCUR_set(sstr, 0);
4457             SvTEMP_off(sstr);
4458         }
4459         else if (flags & SV_COW_SHARED_HASH_KEYS
4460               &&
4461 #ifdef PERL_OLD_COPY_ON_WRITE
4462                  (  sflags & SVf_IsCOW
4463                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4464                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4465                      && SvTYPE(sstr) >= SVt_PVIV && len
4466                     )
4467                  )
4468 #elif defined(PERL_NEW_COPY_ON_WRITE)
4469                  (sflags & SVf_IsCOW
4470                    ? (!len ||
4471                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4472                           /* If this is a regular (non-hek) COW, only so
4473                              many COW "copies" are possible. */
4474                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4475                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4476                      && !(SvFLAGS(dstr) & SVf_BREAK)
4477                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4478                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4479                     ))
4480 #else
4481                  sflags & SVf_IsCOW
4482               && !(SvFLAGS(dstr) & SVf_BREAK)
4483 #endif
4484             ) {
4485             /* Either it's a shared hash key, or it's suitable for
4486                copy-on-write.  */
4487             if (DEBUG_C_TEST) {
4488                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4489                 sv_dump(sstr);
4490                 sv_dump(dstr);
4491             }
4492 #ifdef PERL_ANY_COW
4493             if (!(sflags & SVf_IsCOW)) {
4494                     SvIsCOW_on(sstr);
4495 # ifdef PERL_OLD_COPY_ON_WRITE
4496                     /* Make the source SV into a loop of 1.
4497                        (about to become 2) */
4498                     SV_COW_NEXT_SV_SET(sstr, sstr);
4499 # else
4500                     CowREFCNT(sstr) = 0;
4501 # endif
4502             }
4503 #endif
4504             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4505                 SvPV_free(dstr);
4506             }
4507
4508 #ifdef PERL_ANY_COW
4509             if (len) {
4510 # ifdef PERL_OLD_COPY_ON_WRITE
4511                     assert (SvTYPE(dstr) >= SVt_PVIV);
4512                     /* SvIsCOW_normal */
4513                     /* splice us in between source and next-after-source.  */
4514                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4515                     SV_COW_NEXT_SV_SET(sstr, dstr);
4516 # else
4517                     if (sflags & SVf_IsCOW) {
4518                         sv_buf_to_rw(sstr);
4519                     }
4520                     CowREFCNT(sstr)++;
4521 # endif
4522                     SvPV_set(dstr, SvPVX_mutable(sstr));
4523                     sv_buf_to_ro(sstr);
4524             } else
4525 #endif
4526             {
4527                     /* SvIsCOW_shared_hash */
4528                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4529                                           "Copy on write: Sharing hash\n"));
4530
4531                     assert (SvTYPE(dstr) >= SVt_PV);
4532                     SvPV_set(dstr,
4533                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4534             }
4535             SvLEN_set(dstr, len);
4536             SvCUR_set(dstr, cur);
4537             SvIsCOW_on(dstr);
4538         } else {
4539             /* Failed the swipe test, and we cannot do copy-on-write either.
4540                Have to copy the string.  */
4541             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4542             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4543             SvCUR_set(dstr, cur);
4544             *SvEND(dstr) = '\0';
4545         }
4546         if (sflags & SVp_NOK) {
4547             SvNV_set(dstr, SvNVX(sstr));
4548         }
4549         if (sflags & SVp_IOK) {
4550             SvIV_set(dstr, SvIVX(sstr));
4551             /* Must do this otherwise some other overloaded use of 0x80000000
4552                gets confused. I guess SVpbm_VALID */
4553             if (sflags & SVf_IVisUV)
4554                 SvIsUV_on(dstr);
4555         }
4556         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4557         {
4558             const MAGIC * const smg = SvVSTRING_mg(sstr);
4559             if (smg) {
4560                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4561                          smg->mg_ptr, smg->mg_len);
4562                 SvRMAGICAL_on(dstr);
4563             }
4564         }
4565     }
4566     else if (sflags & (SVp_IOK|SVp_NOK)) {
4567         (void)SvOK_off(dstr);
4568         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4569         if (sflags & SVp_IOK) {
4570             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4571             SvIV_set(dstr, SvIVX(sstr));
4572         }
4573         if (sflags & SVp_NOK) {
4574             SvNV_set(dstr, SvNVX(sstr));
4575         }
4576     }
4577     else {
4578         if (isGV_with_GP(sstr)) {
4579             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4580         }
4581         else
4582             (void)SvOK_off(dstr);
4583     }
4584     if (SvTAINTED(sstr))
4585         SvTAINT(dstr);
4586 }
4587
4588 /*
4589 =for apidoc sv_setsv_mg
4590
4591 Like C<sv_setsv>, but also handles 'set' magic.
4592
4593 =cut
4594 */
4595
4596 void
4597 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4598 {
4599     PERL_ARGS_ASSERT_SV_SETSV_MG;
4600
4601     sv_setsv(dstr,sstr);
4602     SvSETMAGIC(dstr);
4603 }
4604
4605 #ifdef PERL_ANY_COW
4606 # ifdef PERL_OLD_COPY_ON_WRITE
4607 #  define SVt_COW SVt_PVIV
4608 # else
4609 #  define SVt_COW SVt_PV
4610 # endif
4611 SV *
4612 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4613 {
4614     STRLEN cur = SvCUR(sstr);
4615     STRLEN len = SvLEN(sstr);
4616     char *new_pv;
4617 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4618     const bool already = cBOOL(SvIsCOW(sstr));
4619 #endif
4620
4621     PERL_ARGS_ASSERT_SV_SETSV_COW;
4622
4623     if (DEBUG_C_TEST) {
4624         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4625                       (void*)sstr, (void*)dstr);
4626         sv_dump(sstr);
4627         if (dstr)
4628                     sv_dump(dstr);
4629     }
4630
4631     if (dstr) {
4632         if (SvTHINKFIRST(dstr))
4633             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4634         else if (SvPVX_const(dstr))
4635             Safefree(SvPVX_mutable(dstr));
4636     }
4637     else
4638         new_SV(dstr);
4639     SvUPGRADE(dstr, SVt_COW);
4640
4641     assert (SvPOK(sstr));
4642     assert (SvPOKp(sstr));
4643 # ifdef PERL_OLD_COPY_ON_WRITE
4644     assert (!SvIOK(sstr));
4645     assert (!SvIOKp(sstr));
4646     assert (!SvNOK(sstr));
4647     assert (!SvNOKp(sstr));
4648 # endif
4649
4650     if (SvIsCOW(sstr)) {
4651
4652         if (SvLEN(sstr) == 0) {
4653             /* source is a COW shared hash key.  */
4654             DEBUG_C(PerlIO_printf(Perl_debug_log,
4655                                   "Fast copy on write: Sharing hash\n"));
4656             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4657             goto common_exit;
4658         }
4659 # ifdef PERL_OLD_COPY_ON_WRITE
4660         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4661 # else
4662         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4663         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4664 # endif
4665     } else {
4666         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4667         SvUPGRADE(sstr, SVt_COW);
4668         SvIsCOW_on(sstr);
4669         DEBUG_C(PerlIO_printf(Perl_debug_log,
4670                               "Fast copy on write: Converting sstr to COW\n"));
4671 # ifdef PERL_OLD_COPY_ON_WRITE
4672         SV_COW_NEXT_SV_SET(dstr, sstr);
4673 # else
4674         CowREFCNT(sstr) = 0;    
4675 # endif
4676     }
4677 # ifdef PERL_OLD_COPY_ON_WRITE
4678     SV_COW_NEXT_SV_SET(sstr, dstr);
4679 # else
4680 #  ifdef PERL_DEBUG_READONLY_COW
4681     if (already) sv_buf_to_rw(sstr);
4682 #  endif
4683     CowREFCNT(sstr)++;  
4684 # endif
4685     new_pv = SvPVX_mutable(sstr);
4686     sv_buf_to_ro(sstr);
4687
4688   common_exit:
4689     SvPV_set(dstr, new_pv);
4690     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4691     if (SvUTF8(sstr))
4692         SvUTF8_on(dstr);
4693     SvLEN_set(dstr, len);
4694     SvCUR_set(dstr, cur);
4695     if (DEBUG_C_TEST) {
4696         sv_dump(dstr);
4697     }
4698     return dstr;
4699 }
4700 #endif
4701
4702 /*
4703 =for apidoc sv_setpvn
4704
4705 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4706 The C<len> parameter indicates the number of
4707 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4708 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4709
4710 =cut
4711 */
4712
4713 void
4714 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4715 {
4716     char *dptr;
4717
4718     PERL_ARGS_ASSERT_SV_SETPVN;
4719
4720     SV_CHECK_THINKFIRST_COW_DROP(sv);
4721     if (!ptr) {
4722         (void)SvOK_off(sv);
4723         return;
4724     }
4725     else {
4726         /* len is STRLEN which is unsigned, need to copy to signed */
4727         const IV iv = len;
4728         if (iv < 0)
4729             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4730                        IVdf, iv);
4731     }
4732     SvUPGRADE(sv, SVt_PV);
4733
4734     dptr = SvGROW(sv, len + 1);
4735     Move(ptr,dptr,len,char);
4736     dptr[len] = '\0';
4737     SvCUR_set(sv, len);
4738     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4739     SvTAINT(sv);
4740     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4741 }
4742
4743 /*
4744 =for apidoc sv_setpvn_mg
4745
4746 Like C<sv_setpvn>, but also handles 'set' magic.
4747
4748 =cut
4749 */
4750
4751 void
4752 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4753 {
4754     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4755
4756     sv_setpvn(sv,ptr,len);
4757     SvSETMAGIC(sv);
4758 }
4759
4760 /*
4761 =for apidoc sv_setpv
4762
4763 Copies a string into an SV.  The string must be terminated with a C<NUL>
4764 character.
4765 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4766
4767 =cut
4768 */
4769
4770 void
4771 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4772 {
4773     STRLEN len;
4774
4775     PERL_ARGS_ASSERT_SV_SETPV;
4776
4777     SV_CHECK_THINKFIRST_COW_DROP(sv);
4778     if (!ptr) {
4779         (void)SvOK_off(sv);
4780         return;
4781     }
4782     len = strlen(ptr);
4783     SvUPGRADE(sv, SVt_PV);
4784
4785     SvGROW(sv, len + 1);
4786     Move(ptr,SvPVX(sv),len+1,char);
4787     SvCUR_set(sv, len);
4788     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4789     SvTAINT(sv);
4790     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4791 }
4792
4793 /*
4794 =for apidoc sv_setpv_mg
4795
4796 Like C<sv_setpv>, but also handles 'set' magic.
4797
4798 =cut
4799 */
4800
4801 void
4802 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4803 {
4804     PERL_ARGS_ASSERT_SV_SETPV_MG;
4805
4806     sv_setpv(sv,ptr);
4807     SvSETMAGIC(sv);
4808 }
4809
4810 void
4811 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4812 {
4813     PERL_ARGS_ASSERT_SV_SETHEK;
4814
4815     if (!hek) {
4816         return;
4817     }
4818
4819     if (HEK_LEN(hek) == HEf_SVKEY) {
4820         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4821         return;
4822     } else {
4823         const int flags = HEK_FLAGS(hek);
4824         if (flags & HVhek_WASUTF8) {
4825             STRLEN utf8_len = HEK_LEN(hek);
4826             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4827             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4828             SvUTF8_on(sv);
4829             return;
4830         } else if (flags & HVhek_UNSHARED) {
4831             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4832             if (HEK_UTF8(hek))
4833                 SvUTF8_on(sv);
4834             else SvUTF8_off(sv);
4835             return;
4836         }
4837         {
4838             SV_CHECK_THINKFIRST_COW_DROP(sv);
4839             SvUPGRADE(sv, SVt_PV);
4840             SvPV_free(sv);
4841             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4842             SvCUR_set(sv, HEK_LEN(hek));
4843             SvLEN_set(sv, 0);
4844             SvIsCOW_on(sv);
4845             SvPOK_on(sv);
4846             if (HEK_UTF8(hek))
4847                 SvUTF8_on(sv);
4848             else SvUTF8_off(sv);
4849             return;
4850         }
4851     }
4852 }
4853
4854
4855 /*
4856 =for apidoc sv_usepvn_flags
4857
4858 Tells an SV to use C<ptr> to find its string value.  Normally the
4859 string is stored inside the SV, but sv_usepvn allows the SV to use an
4860 outside string.  The C<ptr> should point to memory that was allocated
4861 by L<Newx|perlclib/Memory Management and String Handling>. It must be
4862 the start of a Newx-ed block of memory, and not a pointer to the
4863 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4864 and not be from a non-Newx memory allocator like C<malloc>. The
4865 string length, C<len>, must be supplied.  By default this function
4866 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4867 so that pointer should not be freed or used by the programmer after
4868 giving it to sv_usepvn, and neither should any pointers from "behind"
4869 that pointer (e.g. ptr + 1) be used.
4870
4871 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4872 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4873 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4874 C<len>, and already meets the requirements for storing in C<SvPVX>).
4875
4876 =cut
4877 */
4878
4879 void
4880 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4881 {
4882     STRLEN allocate;
4883
4884     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4885
4886     SV_CHECK_THINKFIRST_COW_DROP(sv);
4887     SvUPGRADE(sv, SVt_PV);
4888     if (!ptr) {
4889         (void)SvOK_off(sv);
4890         if (flags & SV_SMAGIC)
4891             SvSETMAGIC(sv);
4892         return;
4893     }
4894     if (SvPVX_const(sv))
4895         SvPV_free(sv);
4896
4897 #ifdef DEBUGGING
4898     if (flags & SV_HAS_TRAILING_NUL)
4899         assert(ptr[len] == '\0');
4900 #endif
4901
4902     allocate = (flags & SV_HAS_TRAILING_NUL)
4903         ? len + 1 :
4904 #ifdef Perl_safesysmalloc_size
4905         len + 1;
4906 #else 
4907         PERL_STRLEN_ROUNDUP(len + 1);
4908 #endif
4909     if (flags & SV_HAS_TRAILING_NUL) {
4910         /* It's long enough - do nothing.
4911            Specifically Perl_newCONSTSUB is relying on this.  */
4912     } else {
4913 #ifdef DEBUGGING
4914         /* Force a move to shake out bugs in callers.  */
4915         char *new_ptr = (char*)safemalloc(allocate);
4916         Copy(ptr, new_ptr, len, char);
4917         PoisonFree(ptr,len,char);
4918         Safefree(ptr);
4919         ptr = new_ptr;
4920 #else
4921         ptr = (char*) saferealloc (ptr, allocate);
4922 #endif
4923     }
4924 #ifdef Perl_safesysmalloc_size
4925     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4926 #else
4927     SvLEN_set(sv, allocate);
4928 #endif
4929     SvCUR_set(sv, len);
4930     SvPV_set(sv, ptr);
4931     if (!(flags & SV_HAS_TRAILING_NUL)) {
4932         ptr[len] = '\0';
4933     }
4934     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4935     SvTAINT(sv);
4936     if (flags & SV_SMAGIC)
4937         SvSETMAGIC(sv);
4938 }
4939
4940 #ifdef PERL_OLD_COPY_ON_WRITE
4941 /* Need to do this *after* making the SV normal, as we need the buffer
4942    pointer to remain valid until after we've copied it.  If we let go too early,
4943    another thread could invalidate it by unsharing last of the same hash key
4944    (which it can do by means other than releasing copy-on-write Svs)
4945    or by changing the other copy-on-write SVs in the loop.  */
4946 STATIC void
4947 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4948 {
4949     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4950
4951     { /* this SV was SvIsCOW_normal(sv) */
4952          /* we need to find the SV pointing to us.  */
4953         SV *current = SV_COW_NEXT_SV(after);
4954
4955         if (current == sv) {
4956             /* The SV we point to points back to us (there were only two of us
4957                in the loop.)
4958                Hence other SV is no longer copy on write either.  */
4959             SvIsCOW_off(after);
4960             sv_buf_to_rw(after);
4961         } else {
4962             /* We need to follow the pointers around the loop.  */
4963             SV *next;
4964             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4965                 assert (next);
4966                 current = next;
4967                  /* don't loop forever if the structure is bust, and we have
4968                     a pointer into a closed loop.  */
4969                 assert (current != after);
4970                 assert (SvPVX_const(current) == pvx);
4971             }
4972             /* Make the SV before us point to the SV after us.  */
4973             SV_COW_NEXT_SV_SET(current, after);
4974         }
4975     }
4976 }
4977 #endif
4978 /*
4979 =for apidoc sv_force_normal_flags
4980
4981 Undo various types of fakery on an SV, where fakery means
4982 "more than" a string: if the PV is a shared string, make
4983 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4984 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4985 we do the copy, and is also used locally; if this is a
4986 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4987 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4988 SvPOK_off rather than making a copy.  (Used where this
4989 scalar is about to be set to some other value.)  In addition,
4990 the C<flags> parameter gets passed to C<sv_unref_flags()>
4991 when unreffing.  C<sv_force_normal> calls this function
4992 with flags set to 0.
4993
4994 This function is expected to be used to signal to perl that this SV is
4995 about to be written to, and any extra book-keeping needs to be taken care
4996 of.  Hence, it croaks on read-only values.
4997
4998 =cut
4999 */
5000
5001 static void
5002 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5003 {
5004     assert(SvIsCOW(sv));
5005     {
5006 #ifdef PERL_ANY_COW
5007         const char * const pvx = SvPVX_const(sv);
5008         const STRLEN len = SvLEN(sv);
5009         const STRLEN cur = SvCUR(sv);
5010 # ifdef PERL_OLD_COPY_ON_WRITE
5011         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5012            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5013            we'll fail an assertion.  */
5014         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5015 # endif
5016
5017         if (DEBUG_C_TEST) {
5018                 PerlIO_printf(Perl_debug_log,
5019                               "Copy on write: Force normal %ld\n",
5020                               (long) flags);
5021                 sv_dump(sv);
5022         }
5023         SvIsCOW_off(sv);
5024 # ifdef PERL_NEW_COPY_ON_WRITE
5025         if (len && CowREFCNT(sv) == 0)
5026             /* We own the buffer ourselves. */
5027             sv_buf_to_rw(sv);
5028         else
5029 # endif
5030         {
5031                 
5032             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5033 # ifdef PERL_NEW_COPY_ON_WRITE
5034             /* Must do this first, since the macro uses SvPVX. */
5035             if (len) {
5036                 sv_buf_to_rw(sv);
5037                 CowREFCNT(sv)--;
5038                 sv_buf_to_ro(sv);
5039             }
5040 # endif
5041             SvPV_set(sv, NULL);
5042             SvCUR_set(sv, 0);
5043             SvLEN_set(sv, 0);
5044             if (flags & SV_COW_DROP_PV) {
5045                 /* OK, so we don't need to copy our buffer.  */
5046                 SvPOK_off(sv);
5047             } else {
5048                 SvGROW(sv, cur + 1);
5049                 Move(pvx,SvPVX(sv),cur,char);
5050                 SvCUR_set(sv, cur);
5051                 *SvEND(sv) = '\0';
5052             }
5053             if (len) {
5054 # ifdef PERL_OLD_COPY_ON_WRITE
5055                 sv_release_COW(sv, pvx, next);
5056 # endif
5057             } else {
5058                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5059             }
5060             if (DEBUG_C_TEST) {
5061                 sv_dump(sv);
5062             }
5063         }
5064 #else
5065             const char * const pvx = SvPVX_const(sv);
5066             const STRLEN len = SvCUR(sv);
5067             SvIsCOW_off(sv);
5068             SvPV_set(sv, NULL);
5069             SvLEN_set(sv, 0);
5070             if (flags & SV_COW_DROP_PV) {
5071                 /* OK, so we don't need to copy our buffer.  */
5072                 SvPOK_off(sv);
5073             } else {
5074                 SvGROW(sv, len + 1);
5075                 Move(pvx,SvPVX(sv),len,char);
5076                 *SvEND(sv) = '\0';
5077             }
5078             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5079 #endif
5080     }
5081 }
5082
5083 void
5084 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5085 {
5086     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5087
5088     if (SvREADONLY(sv))
5089         Perl_croak_no_modify();
5090     else if (SvIsCOW(sv))
5091         S_sv_uncow(aTHX_ sv, flags);
5092     if (SvROK(sv))
5093         sv_unref_flags(sv, flags);
5094     else if (SvFAKE(sv) && isGV_with_GP(sv))
5095         sv_unglob(sv, flags);
5096     else if (SvFAKE(sv) && isREGEXP(sv)) {
5097         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5098            to sv_unglob. We only need it here, so inline it.  */
5099         const bool islv = SvTYPE(sv) == SVt_PVLV;
5100         const svtype new_type =
5101           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5102         SV *const temp = newSV_type(new_type);
5103         regexp *const temp_p = ReANY((REGEXP *)sv);
5104
5105         if (new_type == SVt_PVMG) {
5106             SvMAGIC_set(temp, SvMAGIC(sv));
5107             SvMAGIC_set(sv, NULL);
5108             SvSTASH_set(temp, SvSTASH(sv));
5109             SvSTASH_set(sv, NULL);
5110         }
5111         if (!islv) SvCUR_set(temp, SvCUR(sv));
5112         /* Remember that SvPVX is in the head, not the body.  But
5113            RX_WRAPPED is in the body. */
5114         assert(ReANY((REGEXP *)sv)->mother_re);
5115         /* Their buffer is already owned by someone else. */
5116         if (flags & SV_COW_DROP_PV) {
5117             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5118                zeroed body.  For SVt_PVLV, it should have been set to 0
5119                before turning into a regexp. */
5120             assert(!SvLEN(islv ? sv : temp));
5121             sv->sv_u.svu_pv = 0;
5122         }
5123         else {
5124             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5125             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5126             SvPOK_on(sv);
5127         }
5128
5129         /* Now swap the rest of the bodies. */
5130
5131         SvFAKE_off(sv);
5132         if (!islv) {
5133             SvFLAGS(sv) &= ~SVTYPEMASK;
5134             SvFLAGS(sv) |= new_type;
5135             SvANY(sv) = SvANY(temp);
5136         }
5137
5138         SvFLAGS(temp) &= ~(SVTYPEMASK);
5139         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5140         SvANY(temp) = temp_p;
5141         temp->sv_u.svu_rx = (regexp *)temp_p;
5142
5143         SvREFCNT_dec_NN(temp);
5144     }
5145     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5146 }
5147
5148 /*
5149 =for apidoc sv_chop
5150
5151 Efficient removal of characters from the beginning of the string buffer.
5152 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5153 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5154 character of the adjusted string.  Uses the "OOK hack".  On return, only
5155 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5156
5157 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5158 refer to the same chunk of data.
5159
5160 The unfortunate similarity of this function's name to that of Perl's C<chop>
5161 operator is strictly coincidental.  This function works from the left;
5162 C<chop> works from the right.
5163
5164 =cut
5165 */
5166
5167 void
5168 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5169 {
5170     STRLEN delta;
5171     STRLEN old_delta;
5172     U8 *p;
5173 #ifdef DEBUGGING
5174     const U8 *evacp;
5175     STRLEN evacn;
5176 #endif
5177     STRLEN max_delta;
5178
5179     PERL_ARGS_ASSERT_SV_CHOP;
5180
5181     if (!ptr || !SvPOKp(sv))
5182         return;
5183     delta = ptr - SvPVX_const(sv);
5184     if (!delta) {
5185         /* Nothing to do.  */
5186         return;
5187     }
5188     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5189     if (delta > max_delta)
5190         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5191                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5192     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5193     SV_CHECK_THINKFIRST(sv);
5194     SvPOK_only_UTF8(sv);
5195
5196     if (!SvOOK(sv)) {
5197         if (!SvLEN(sv)) { /* make copy of shared string */
5198             const char *pvx = SvPVX_const(sv);
5199             const STRLEN len = SvCUR(sv);
5200             SvGROW(sv, len + 1);
5201             Move(pvx,SvPVX(sv),len,char);
5202             *SvEND(sv) = '\0';
5203         }
5204         SvOOK_on(sv);
5205         old_delta = 0;
5206     } else {
5207         SvOOK_offset(sv, old_delta);
5208     }
5209     SvLEN_set(sv, SvLEN(sv) - delta);
5210     SvCUR_set(sv, SvCUR(sv) - delta);
5211     SvPV_set(sv, SvPVX(sv) + delta);
5212
5213     p = (U8 *)SvPVX_const(sv);
5214
5215 #ifdef DEBUGGING
5216     /* how many bytes were evacuated?  we will fill them with sentinel
5217        bytes, except for the part holding the new offset of course. */
5218     evacn = delta;
5219     if (old_delta)
5220         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5221     assert(evacn);
5222     assert(evacn <= delta + old_delta);
5223     evacp = p - evacn;
5224 #endif
5225
5226     /* This sets 'delta' to the accumulated value of all deltas so far */
5227     delta += old_delta;
5228     assert(delta);
5229
5230     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5231      * the string; otherwise store a 0 byte there and store 'delta' just prior
5232      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5233      * portion of the chopped part of the string */
5234     if (delta < 0x100) {
5235         *--p = (U8) delta;
5236     } else {
5237         *--p = 0;
5238         p -= sizeof(STRLEN);
5239         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5240     }
5241
5242 #ifdef DEBUGGING
5243     /* Fill the preceding buffer with sentinals to verify that no-one is
5244        using it.  */
5245     while (p > evacp) {
5246         --p;
5247         *p = (U8)PTR2UV(p);
5248     }
5249 #endif
5250 }
5251
5252 /*
5253 =for apidoc sv_catpvn
5254
5255 Concatenates the string onto the end of the string which is in the SV.  The
5256 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5257 status set, then the bytes appended should be valid UTF-8.
5258 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5259
5260 =for apidoc sv_catpvn_flags
5261
5262 Concatenates the string onto the end of the string which is in the SV.  The
5263 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5264 status set, then the bytes appended should be valid UTF-8.
5265 If C<flags> has the C<SV_SMAGIC> bit set, will
5266 C<mg_set> on C<dsv> afterwards if appropriate.
5267 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5268 in terms of this function.
5269
5270 =cut
5271 */
5272
5273 void
5274 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5275 {
5276     STRLEN dlen;
5277     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5278
5279     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5280     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5281
5282     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5283       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5284          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5285          dlen = SvCUR(dsv);
5286       }
5287       else SvGROW(dsv, dlen + slen + 1);
5288       if (sstr == dstr)
5289         sstr = SvPVX_const(dsv);
5290       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5291       SvCUR_set(dsv, SvCUR(dsv) + slen);
5292     }
5293     else {
5294         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5295         const char * const send = sstr + slen;
5296         U8 *d;
5297
5298         /* Something this code does not account for, which I think is
5299            impossible; it would require the same pv to be treated as
5300            bytes *and* utf8, which would indicate a bug elsewhere. */
5301         assert(sstr != dstr);
5302
5303         SvGROW(dsv, dlen + slen * 2 + 1);
5304         d = (U8 *)SvPVX(dsv) + dlen;
5305
5306         while (sstr < send) {
5307             append_utf8_from_native_byte(*sstr, &d);
5308             sstr++;
5309         }
5310         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5311     }
5312     *SvEND(dsv) = '\0';
5313     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5314     SvTAINT(dsv);
5315     if (flags & SV_SMAGIC)
5316         SvSETMAGIC(dsv);
5317 }
5318
5319 /*
5320 =for apidoc sv_catsv
5321
5322 Concatenates the string from SV C<ssv> onto the end of the string in SV
5323 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5324 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5325 C<sv_catsv_nomg>.
5326
5327 =for apidoc sv_catsv_flags
5328
5329 Concatenates the string from SV C<ssv> onto the end of the string in SV
5330 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5331 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5332 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5333 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5334 and C<sv_catsv_mg> are implemented in terms of this function.
5335
5336 =cut */
5337
5338 void
5339 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5340 {
5341     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5342
5343     if (ssv) {
5344         STRLEN slen;
5345         const char *spv = SvPV_flags_const(ssv, slen, flags);
5346         if (spv) {
5347             if (flags & SV_GMAGIC)
5348                 SvGETMAGIC(dsv);
5349             sv_catpvn_flags(dsv, spv, slen,
5350                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5351             if (flags & SV_SMAGIC)
5352                 SvSETMAGIC(dsv);
5353         }
5354     }
5355 }
5356
5357 /*
5358 =for apidoc sv_catpv
5359
5360 Concatenates the C<NUL>-terminated string onto the end of the string which is
5361 in the SV.
5362 If the SV has the UTF-8 status set, then the bytes appended should be
5363 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5364
5365 =cut */
5366
5367 void
5368 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5369 {
5370     STRLEN len;
5371     STRLEN tlen;
5372     char *junk;
5373
5374     PERL_ARGS_ASSERT_SV_CATPV;
5375
5376     if (!ptr)
5377         return;
5378     junk = SvPV_force(sv, tlen);
5379     len = strlen(ptr);
5380     SvGROW(sv, tlen + len + 1);
5381     if (ptr == junk)
5382         ptr = SvPVX_const(sv);
5383     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5384     SvCUR_set(sv, SvCUR(sv) + len);
5385     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5386     SvTAINT(sv);
5387 }
5388
5389 /*
5390 =for apidoc sv_catpv_flags
5391
5392 Concatenates the C<NUL>-terminated string onto the end of the string which is
5393 in the SV.
5394 If the SV has the UTF-8 status set, then the bytes appended should
5395 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5396 on the modified SV if appropriate.
5397
5398 =cut
5399 */
5400
5401 void
5402 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5403 {
5404     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5405     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5406 }
5407
5408 /*
5409 =for apidoc sv_catpv_mg
5410
5411 Like C<sv_catpv>, but also handles 'set' magic.
5412
5413 =cut
5414 */
5415
5416 void
5417 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5418 {
5419     PERL_ARGS_ASSERT_SV_CATPV_MG;
5420
5421     sv_catpv(sv,ptr);
5422     SvSETMAGIC(sv);
5423 }
5424
5425 /*
5426 =for apidoc newSV
5427
5428 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5429 bytes of preallocated string space the SV should have.  An extra byte for a
5430 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5431 space is allocated.)  The reference count for the new SV is set to 1.
5432
5433 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5434 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5435 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5436 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5437 modules supporting older perls.
5438
5439 =cut
5440 */
5441
5442 SV *
5443 Perl_newSV(pTHX_ const STRLEN len)
5444 {
5445     SV *sv;
5446
5447     new_SV(sv);
5448     if (len) {
5449         sv_upgrade(sv, SVt_PV);
5450         SvGROW(sv, len + 1);
5451     }
5452     return sv;
5453 }
5454 /*
5455 =for apidoc sv_magicext
5456
5457 Adds magic to an SV, upgrading it if necessary.  Applies the
5458 supplied vtable and returns a pointer to the magic added.
5459
5460 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5461 In particular, you can add magic to SvREADONLY SVs, and add more than
5462 one instance of the same 'how'.
5463
5464 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5465 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5466 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5467 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5468
5469 (This is now used as a subroutine by C<sv_magic>.)
5470
5471 =cut
5472 */
5473 MAGIC * 
5474 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5475                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5476 {
5477     MAGIC* mg;
5478
5479     PERL_ARGS_ASSERT_SV_MAGICEXT;
5480
5481     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5482
5483     SvUPGRADE(sv, SVt_PVMG);
5484     Newxz(mg, 1, MAGIC);
5485     mg->mg_moremagic = SvMAGIC(sv);
5486     SvMAGIC_set(sv, mg);
5487
5488     /* Sometimes a magic contains a reference loop, where the sv and
5489        object refer to each other.  To prevent a reference loop that
5490        would prevent such objects being freed, we look for such loops
5491        and if we find one we avoid incrementing the object refcount.
5492
5493        Note we cannot do this to avoid self-tie loops as intervening RV must
5494        have its REFCNT incremented to keep it in existence.
5495
5496     */
5497     if (!obj || obj == sv ||
5498         how == PERL_MAGIC_arylen ||
5499         how == PERL_MAGIC_symtab ||
5500         (SvTYPE(obj) == SVt_PVGV &&
5501             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5502              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5503              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5504     {
5505         mg->mg_obj = obj;
5506     }
5507     else {
5508         mg->mg_obj = SvREFCNT_inc_simple(obj);
5509         mg->mg_flags |= MGf_REFCOUNTED;
5510     }
5511
5512     /* Normal self-ties simply pass a null object, and instead of
5513        using mg_obj directly, use the SvTIED_obj macro to produce a
5514        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5515        with an RV obj pointing to the glob containing the PVIO.  In
5516        this case, to avoid a reference loop, we need to weaken the
5517        reference.
5518     */
5519
5520     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5521         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5522     {
5523       sv_rvweaken(obj);
5524     }
5525
5526     mg->mg_type = how;
5527     mg->mg_len = namlen;
5528     if (name) {
5529         if (namlen > 0)
5530             mg->mg_ptr = savepvn(name, namlen);
5531         else if (namlen == HEf_SVKEY) {
5532             /* Yes, this is casting away const. This is only for the case of
5533                HEf_SVKEY. I think we need to document this aberation of the
5534                constness of the API, rather than making name non-const, as
5535                that change propagating outwards a long way.  */
5536             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5537         } else
5538             mg->mg_ptr = (char *) name;
5539     }
5540     mg->mg_virtual = (MGVTBL *) vtable;
5541
5542     mg_magical(sv);
5543     return mg;
5544 }
5545
5546 MAGIC *
5547 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5548 {
5549     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5550     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5551         /* This sv is only a delegate.  //g magic must be attached to
5552            its target. */
5553         vivify_defelem(sv);
5554         sv = LvTARG(sv);
5555     }
5556 #ifdef PERL_OLD_COPY_ON_WRITE
5557     if (SvIsCOW(sv))
5558         sv_force_normal_flags(sv, 0);
5559 #endif
5560     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5561                        &PL_vtbl_mglob, 0, 0);
5562 }
5563
5564 /*
5565 =for apidoc sv_magic
5566
5567 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5568 necessary, then adds a new magic item of type C<how> to the head of the
5569 magic list.
5570
5571 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5572 handling of the C<name> and C<namlen> arguments.
5573
5574 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5575 to add more than one instance of the same 'how'.
5576
5577 =cut
5578 */
5579
5580 void
5581 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5582              const char *const name, const I32 namlen)
5583 {
5584     const MGVTBL *vtable;
5585     MAGIC* mg;
5586     unsigned int flags;
5587     unsigned int vtable_index;
5588
5589     PERL_ARGS_ASSERT_SV_MAGIC;
5590
5591     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5592         || ((flags = PL_magic_data[how]),
5593             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5594             > magic_vtable_max))
5595         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5596
5597     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5598        Useful for attaching extension internal data to perl vars.
5599        Note that multiple extensions may clash if magical scalars
5600        etc holding private data from one are passed to another. */
5601
5602     vtable = (vtable_index == magic_vtable_max)
5603         ? NULL : PL_magic_vtables + vtable_index;
5604
5605 #ifdef PERL_OLD_COPY_ON_WRITE
5606     if (SvIsCOW(sv))
5607         sv_force_normal_flags(sv, 0);
5608 #endif
5609     if (SvREADONLY(sv)) {
5610         if (
5611             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5612            )
5613         {
5614             Perl_croak_no_modify();
5615         }
5616     }
5617     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5618         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5619             /* sv_magic() refuses to add a magic of the same 'how' as an
5620                existing one
5621              */
5622             if (how == PERL_MAGIC_taint)
5623                 mg->mg_len |= 1;
5624             return;
5625         }
5626     }
5627
5628     /* Force pos to be stored as characters, not bytes. */
5629     if (SvMAGICAL(sv) && DO_UTF8(sv)
5630       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5631       && mg->mg_len != -1
5632       && mg->mg_flags & MGf_BYTES) {
5633         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5634                                                SV_CONST_RETURN);
5635         mg->mg_flags &= ~MGf_BYTES;
5636     }
5637
5638     /* Rest of work is done else where */
5639     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5640
5641     switch (how) {
5642     case PERL_MAGIC_taint:
5643         mg->mg_len = 1;
5644         break;
5645     case PERL_MAGIC_ext:
5646     case PERL_MAGIC_dbfile:
5647         SvRMAGICAL_on(sv);
5648         break;
5649     }
5650 }
5651
5652 static int
5653 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5654 {
5655     MAGIC* mg;
5656     MAGIC** mgp;
5657
5658     assert(flags <= 1);
5659
5660     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5661         return 0;
5662     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5663     for (mg = *mgp; mg; mg = *mgp) {
5664         const MGVTBL* const virt = mg->mg_virtual;
5665         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5666             *mgp = mg->mg_moremagic;
5667             if (virt && virt->svt_free)
5668                 virt->svt_free(aTHX_ sv, mg);
5669             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5670                 if (mg->mg_len > 0)
5671                     Safefree(mg->mg_ptr);
5672                 else if (mg->mg_len == HEf_SVKEY)
5673                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5674                 else if (mg->mg_type == PERL_MAGIC_utf8)
5675                     Safefree(mg->mg_ptr);
5676             }
5677             if (mg->mg_flags & MGf_REFCOUNTED)
5678                 SvREFCNT_dec(mg->mg_obj);
5679             Safefree(mg);
5680         }
5681         else
5682             mgp = &mg->mg_moremagic;
5683     }
5684     if (SvMAGIC(sv)) {
5685         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5686             mg_magical(sv);     /*    else fix the flags now */
5687     }
5688     else {
5689         SvMAGICAL_off(sv);
5690         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5691     }
5692     return 0;
5693 }
5694
5695 /*
5696 =for apidoc sv_unmagic
5697
5698 Removes all magic of type C<type> from an SV.
5699
5700 =cut
5701 */
5702
5703 int
5704 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5705 {
5706     PERL_ARGS_ASSERT_SV_UNMAGIC;
5707     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5708 }
5709
5710 /*
5711 =for apidoc sv_unmagicext
5712
5713 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5714
5715 =cut
5716 */
5717
5718 int
5719 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5720 {
5721     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5722     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5723 }
5724
5725 /*
5726 =for apidoc sv_rvweaken
5727
5728 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5729 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5730 push a back-reference to this RV onto the array of backreferences
5731 associated with that magic.  If the RV is magical, set magic will be
5732 called after the RV is cleared.
5733
5734 =cut
5735 */
5736
5737 SV *
5738 Perl_sv_rvweaken(pTHX_ SV *const sv)
5739 {
5740     SV *tsv;
5741
5742     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5743
5744     if (!SvOK(sv))  /* let undefs pass */
5745         return sv;
5746     if (!SvROK(sv))
5747         Perl_croak(aTHX_ "Can't weaken a nonreference");
5748     else if (SvWEAKREF(sv)) {
5749         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5750         return sv;
5751     }
5752     else if (SvREADONLY(sv)) croak_no_modify();
5753     tsv = SvRV(sv);
5754     Perl_sv_add_backref(aTHX_ tsv, sv);
5755     SvWEAKREF_on(sv);
5756     SvREFCNT_dec_NN(tsv);
5757     return sv;
5758 }
5759
5760 /* Give tsv backref magic if it hasn't already got it, then push a
5761  * back-reference to sv onto the array associated with the backref magic.
5762  *
5763  * As an optimisation, if there's only one backref and it's not an AV,
5764  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5765  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5766  * active.)
5767  */
5768
5769 /* A discussion about the backreferences array and its refcount:
5770  *
5771  * The AV holding the backreferences is pointed to either as the mg_obj of
5772  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5773  * xhv_backreferences field. The array is created with a refcount
5774  * of 2. This means that if during global destruction the array gets
5775  * picked on before its parent to have its refcount decremented by the
5776  * random zapper, it won't actually be freed, meaning it's still there for
5777  * when its parent gets freed.
5778  *
5779  * When the parent SV is freed, the extra ref is killed by
5780  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5781  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5782  *
5783  * When a single backref SV is stored directly, it is not reference
5784  * counted.
5785  */
5786
5787 void
5788 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5789 {
5790     SV **svp;
5791     AV *av = NULL;
5792     MAGIC *mg = NULL;
5793
5794     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5795
5796     /* find slot to store array or singleton backref */
5797
5798     if (SvTYPE(tsv) == SVt_PVHV) {
5799         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5800     } else {
5801         if (SvMAGICAL(tsv))
5802             mg = mg_find(tsv, PERL_MAGIC_backref);
5803         if (!mg)
5804             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5805         svp = &(mg->mg_obj);
5806     }
5807
5808     /* create or retrieve the array */
5809
5810     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5811         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5812     ) {
5813         /* create array */
5814         if (mg)
5815             mg->mg_flags |= MGf_REFCOUNTED;
5816         av = newAV();
5817         AvREAL_off(av);
5818         SvREFCNT_inc_simple_void_NN(av);
5819         /* av now has a refcnt of 2; see discussion above */
5820         av_extend(av, *svp ? 2 : 1);
5821         if (*svp) {
5822             /* move single existing backref to the array */
5823             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5824         }
5825         *svp = (SV*)av;
5826     }
5827     else {
5828         av = MUTABLE_AV(*svp);
5829         if (!av) {
5830             /* optimisation: store single backref directly in HvAUX or mg_obj */
5831             *svp = sv;
5832             return;
5833         }
5834         assert(SvTYPE(av) == SVt_PVAV);
5835         if (AvFILLp(av) >= AvMAX(av)) {
5836             av_extend(av, AvFILLp(av)+1);
5837         }
5838     }
5839     /* push new backref */
5840     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5841 }
5842
5843 /* delete a back-reference to ourselves from the backref magic associated
5844  * with the SV we point to.
5845  */
5846
5847 void
5848 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5849 {
5850     SV **svp = NULL;
5851
5852     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5853
5854     if (SvTYPE(tsv) == SVt_PVHV) {
5855         if (SvOOK(tsv))
5856             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5857     }
5858     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5859         /* It's possible for the the last (strong) reference to tsv to have
5860            become freed *before* the last thing holding a weak reference.
5861            If both survive longer than the backreferences array, then when
5862            the referent's reference count drops to 0 and it is freed, it's
5863            not able to chase the backreferences, so they aren't NULLed.
5864
5865            For example, a CV holds a weak reference to its stash. If both the
5866            CV and the stash survive longer than the backreferences array,
5867            and the CV gets picked for the SvBREAK() treatment first,
5868            *and* it turns out that the stash is only being kept alive because
5869            of an our variable in the pad of the CV, then midway during CV
5870            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5871            It ends up pointing to the freed HV. Hence it's chased in here, and
5872            if this block wasn't here, it would hit the !svp panic just below.
5873
5874            I don't believe that "better" destruction ordering is going to help
5875            here - during global destruction there's always going to be the
5876            chance that something goes out of order. We've tried to make it
5877            foolproof before, and it only resulted in evolutionary pressure on
5878            fools. Which made us look foolish for our hubris. :-(
5879         */
5880         return;
5881     }
5882     else {
5883         MAGIC *const mg
5884             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5885         svp =  mg ? &(mg->mg_obj) : NULL;
5886     }
5887
5888     if (!svp)
5889         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5890     if (!*svp) {
5891         /* It's possible that sv is being freed recursively part way through the
5892            freeing of tsv. If this happens, the backreferences array of tsv has
5893            already been freed, and so svp will be NULL. If this is the case,
5894            we should not panic. Instead, nothing needs doing, so return.  */
5895         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5896             return;
5897         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5898                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5899     }
5900
5901     if (SvTYPE(*svp) == SVt_PVAV) {
5902 #ifdef DEBUGGING
5903         int count = 1;
5904 #endif
5905         AV * const av = (AV*)*svp;
5906         SSize_t fill;
5907         assert(!SvIS_FREED(av));
5908         fill = AvFILLp(av);
5909         assert(fill > -1);
5910         svp = AvARRAY(av);
5911         /* for an SV with N weak references to it, if all those
5912          * weak refs are deleted, then sv_del_backref will be called
5913          * N times and O(N^2) compares will be done within the backref
5914          * array. To ameliorate this potential slowness, we:
5915          * 1) make sure this code is as tight as possible;
5916          * 2) when looking for SV, look for it at both the head and tail of the
5917          *    array first before searching the rest, since some create/destroy
5918          *    patterns will cause the backrefs to be freed in order.
5919          */
5920         if (*svp == sv) {
5921             AvARRAY(av)++;
5922             AvMAX(av)--;
5923         }
5924         else {
5925             SV **p = &svp[fill];
5926             SV *const topsv = *p;
5927             if (topsv != sv) {
5928 #ifdef DEBUGGING
5929                 count = 0;
5930 #endif
5931                 while (--p > svp) {
5932                     if (*p == sv) {
5933                         /* We weren't the last entry.
5934                            An unordered list has this property that you
5935                            can take the last element off the end to fill
5936                            the hole, and it's still an unordered list :-)
5937                         */
5938                         *p = topsv;
5939 #ifdef DEBUGGING
5940                         count++;
5941 #else
5942                         break; /* should only be one */
5943 #endif
5944                     }
5945                 }
5946             }
5947         }
5948         assert(count ==1);
5949         AvFILLp(av) = fill-1;
5950     }
5951     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5952         /* freed AV; skip */
5953     }
5954     else {
5955         /* optimisation: only a single backref, stored directly */
5956         if (*svp != sv)
5957             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
5958                        (void*)*svp, (void*)sv);
5959         *svp = NULL;
5960     }
5961
5962 }
5963
5964 void
5965 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5966 {
5967     SV **svp;
5968     SV **last;
5969     bool is_array;
5970
5971     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5972
5973     if (!av)
5974         return;
5975
5976     /* after multiple passes through Perl_sv_clean_all() for a thingy
5977      * that has badly leaked, the backref array may have gotten freed,
5978      * since we only protect it against 1 round of cleanup */
5979     if (SvIS_FREED(av)) {
5980         if (PL_in_clean_all) /* All is fair */
5981             return;
5982         Perl_croak(aTHX_
5983                    "panic: magic_killbackrefs (freed backref AV/SV)");
5984     }
5985
5986
5987     is_array = (SvTYPE(av) == SVt_PVAV);
5988     if (is_array) {
5989         assert(!SvIS_FREED(av));
5990         svp = AvARRAY(av);
5991         if (svp)
5992             last = svp + AvFILLp(av);
5993     }
5994     else {
5995         /* optimisation: only a single backref, stored directly */
5996         svp = (SV**)&av;
5997         last = svp;
5998     }
5999
6000     if (svp) {
6001         while (svp <= last) {
6002             if (*svp) {
6003                 SV *const referrer = *svp;
6004                 if (SvWEAKREF(referrer)) {
6005                     /* XXX Should we check that it hasn't changed? */
6006                     assert(SvROK(referrer));
6007                     SvRV_set(referrer, 0);
6008                     SvOK_off(referrer);
6009                     SvWEAKREF_off(referrer);
6010                     SvSETMAGIC(referrer);
6011                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6012                            SvTYPE(referrer) == SVt_PVLV) {
6013                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6014                     /* You lookin' at me?  */
6015                     assert(GvSTASH(referrer));
6016                     assert(GvSTASH(referrer) == (const HV *)sv);
6017                     GvSTASH(referrer) = 0;
6018                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6019                            SvTYPE(referrer) == SVt_PVFM) {
6020                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6021                         /* You lookin' at me?  */
6022                         assert(CvSTASH(referrer));
6023                         assert(CvSTASH(referrer) == (const HV *)sv);
6024                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6025                     }
6026                     else {
6027                         assert(SvTYPE(sv) == SVt_PVGV);
6028                         /* You lookin' at me?  */
6029                         assert(CvGV(referrer));
6030                         assert(CvGV(referrer) == (const GV *)sv);
6031                         anonymise_cv_maybe(MUTABLE_GV(sv),
6032                                                 MUTABLE_CV(referrer));
6033                     }
6034
6035                 } else {
6036                     Perl_croak(aTHX_
6037                                "panic: magic_killbackrefs (flags=%"UVxf")",
6038                                (UV)SvFLAGS(referrer));
6039                 }
6040
6041                 if (is_array)
6042                     *svp = NULL;
6043             }
6044             svp++;
6045         }
6046     }
6047     if (is_array) {
6048         AvFILLp(av) = -1;
6049         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6050     }
6051     return;
6052 }
6053
6054 /*
6055 =for apidoc sv_insert
6056
6057 Inserts a string at the specified offset/length within the SV.  Similar to
6058 the Perl substr() function.  Handles get magic.
6059
6060 =for apidoc sv_insert_flags
6061
6062 Same as C<sv_insert>, but the extra C<flags> are passed to the
6063 C<SvPV_force_flags> that applies to C<bigstr>.
6064
6065 =cut
6066 */
6067
6068 void
6069 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6070 {
6071     char *big;
6072     char *mid;
6073     char *midend;
6074     char *bigend;
6075     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6076     STRLEN curlen;
6077
6078     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6079
6080     if (!bigstr)
6081         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6082     SvPV_force_flags(bigstr, curlen, flags);
6083     (void)SvPOK_only_UTF8(bigstr);
6084     if (offset + len > curlen) {
6085         SvGROW(bigstr, offset+len+1);
6086         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6087         SvCUR_set(bigstr, offset+len);
6088     }
6089
6090     SvTAINT(bigstr);
6091     i = littlelen - len;
6092     if (i > 0) {                        /* string might grow */
6093         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6094         mid = big + offset + len;
6095         midend = bigend = big + SvCUR(bigstr);
6096         bigend += i;
6097         *bigend = '\0';
6098         while (midend > mid)            /* shove everything down */
6099             *--bigend = *--midend;
6100         Move(little,big+offset,littlelen,char);
6101         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6102         SvSETMAGIC(bigstr);
6103         return;
6104     }
6105     else if (i == 0) {
6106         Move(little,SvPVX(bigstr)+offset,len,char);
6107         SvSETMAGIC(bigstr);
6108         return;
6109     }
6110
6111     big = SvPVX(bigstr);
6112     mid = big + offset;
6113     midend = mid + len;
6114     bigend = big + SvCUR(bigstr);
6115
6116     if (midend > bigend)
6117         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6118                    midend, bigend);
6119
6120     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6121         if (littlelen) {
6122             Move(little, mid, littlelen,char);
6123             mid += littlelen;
6124         }
6125         i = bigend - midend;
6126         if (i > 0) {
6127             Move(midend, mid, i,char);
6128             mid += i;
6129         }
6130         *mid = '\0';
6131         SvCUR_set(bigstr, mid - big);
6132     }
6133     else if ((i = mid - big)) { /* faster from front */
6134         midend -= littlelen;
6135         mid = midend;
6136         Move(big, midend - i, i, char);
6137         sv_chop(bigstr,midend-i);
6138         if (littlelen)
6139             Move(little, mid, littlelen,char);
6140     }
6141     else if (littlelen) {
6142         midend -= littlelen;
6143         sv_chop(bigstr,midend);
6144         Move(little,midend,littlelen,char);
6145     }
6146     else {
6147         sv_chop(bigstr,midend);
6148     }
6149     SvSETMAGIC(bigstr);
6150 }
6151
6152 /*
6153 =for apidoc sv_replace
6154
6155 Make the first argument a copy of the second, then delete the original.
6156 The target SV physically takes over ownership of the body of the source SV
6157 and inherits its flags; however, the target keeps any magic it owns,
6158 and any magic in the source is discarded.
6159 Note that this is a rather specialist SV copying operation; most of the
6160 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6161
6162 =cut
6163 */
6164
6165 void
6166 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6167 {
6168     const U32 refcnt = SvREFCNT(sv);
6169
6170     PERL_ARGS_ASSERT_SV_REPLACE;
6171
6172     SV_CHECK_THINKFIRST_COW_DROP(sv);
6173     if (SvREFCNT(nsv) != 1) {
6174         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6175                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6176     }
6177     if (SvMAGICAL(sv)) {
6178         if (SvMAGICAL(nsv))
6179             mg_free(nsv);
6180         else
6181             sv_upgrade(nsv, SVt_PVMG);
6182         SvMAGIC_set(nsv, SvMAGIC(sv));
6183         SvFLAGS(nsv) |= SvMAGICAL(sv);
6184         SvMAGICAL_off(sv);
6185         SvMAGIC_set(sv, NULL);
6186     }
6187     SvREFCNT(sv) = 0;
6188     sv_clear(sv);
6189     assert(!SvREFCNT(sv));
6190 #ifdef DEBUG_LEAKING_SCALARS
6191     sv->sv_flags  = nsv->sv_flags;
6192     sv->sv_any    = nsv->sv_any;
6193     sv->sv_refcnt = nsv->sv_refcnt;
6194     sv->sv_u      = nsv->sv_u;
6195 #else
6196     StructCopy(nsv,sv,SV);
6197 #endif
6198     if(SvTYPE(sv) == SVt_IV) {
6199         SvANY(sv)
6200             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6201     }
6202         
6203
6204 #ifdef PERL_OLD_COPY_ON_WRITE
6205     if (SvIsCOW_normal(nsv)) {
6206         /* We need to follow the pointers around the loop to make the
6207            previous SV point to sv, rather than nsv.  */
6208         SV *next;
6209         SV *current = nsv;
6210         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6211             assert(next);
6212             current = next;
6213             assert(SvPVX_const(current) == SvPVX_const(nsv));
6214         }
6215         /* Make the SV before us point to the SV after us.  */
6216         if (DEBUG_C_TEST) {
6217             PerlIO_printf(Perl_debug_log, "previous is\n");
6218             sv_dump(current);
6219             PerlIO_printf(Perl_debug_log,
6220                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6221                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6222         }
6223         SV_COW_NEXT_SV_SET(current, sv);
6224     }
6225 #endif
6226     SvREFCNT(sv) = refcnt;
6227     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6228     SvREFCNT(nsv) = 0;
6229     del_SV(nsv);
6230 }
6231
6232 /* We're about to free a GV which has a CV that refers back to us.
6233  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6234  * field) */
6235
6236 STATIC void
6237 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6238 {
6239     SV *gvname;
6240     GV *anongv;
6241
6242     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6243
6244     /* be assertive! */
6245     assert(SvREFCNT(gv) == 0);
6246     assert(isGV(gv) && isGV_with_GP(gv));
6247     assert(GvGP(gv));
6248     assert(!CvANON(cv));
6249     assert(CvGV(cv) == gv);
6250     assert(!CvNAMED(cv));
6251
6252     /* will the CV shortly be freed by gp_free() ? */
6253     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6254         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6255         return;
6256     }
6257
6258     /* if not, anonymise: */
6259     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6260                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6261                     : newSVpvn_flags( "__ANON__", 8, 0 );
6262     sv_catpvs(gvname, "::__ANON__");
6263     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6264     SvREFCNT_dec_NN(gvname);
6265
6266     CvANON_on(cv);
6267     CvCVGV_RC_on(cv);
6268     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6269 }
6270
6271
6272 /*
6273 =for apidoc sv_clear
6274
6275 Clear an SV: call any destructors, free up any memory used by the body,
6276 and free the body itself.  The SV's head is I<not> freed, although
6277 its type is set to all 1's so that it won't inadvertently be assumed
6278 to be live during global destruction etc.
6279 This function should only be called when REFCNT is zero.  Most of the time
6280 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6281 instead.
6282
6283 =cut
6284 */
6285
6286 void
6287 Perl_sv_clear(pTHX_ SV *const orig_sv)
6288 {
6289     dVAR;
6290     HV *stash;
6291     U32 type;
6292     const struct body_details *sv_type_details;
6293     SV* iter_sv = NULL;
6294     SV* next_sv = NULL;
6295     SV *sv = orig_sv;
6296     STRLEN hash_index;
6297
6298     PERL_ARGS_ASSERT_SV_CLEAR;
6299
6300     /* within this loop, sv is the SV currently being freed, and
6301      * iter_sv is the most recent AV or whatever that's being iterated
6302      * over to provide more SVs */
6303
6304     while (sv) {
6305
6306         type = SvTYPE(sv);
6307
6308         assert(SvREFCNT(sv) == 0);
6309         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6310
6311         if (type <= SVt_IV) {
6312             /* See the comment in sv.h about the collusion between this
6313              * early return and the overloading of the NULL slots in the
6314              * size table.  */
6315             if (SvROK(sv))
6316                 goto free_rv;
6317             SvFLAGS(sv) &= SVf_BREAK;
6318             SvFLAGS(sv) |= SVTYPEMASK;
6319             goto free_head;
6320         }
6321
6322         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6323
6324         if (type >= SVt_PVMG) {
6325             if (SvOBJECT(sv)) {
6326                 if (!curse(sv, 1)) goto get_next_sv;
6327                 type = SvTYPE(sv); /* destructor may have changed it */
6328             }
6329             /* Free back-references before magic, in case the magic calls
6330              * Perl code that has weak references to sv. */
6331             if (type == SVt_PVHV) {
6332                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6333                 if (SvMAGIC(sv))
6334                     mg_free(sv);
6335             }
6336             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6337                 SvREFCNT_dec(SvOURSTASH(sv));
6338             }
6339             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6340                 assert(!SvMAGICAL(sv));
6341             } else if (SvMAGIC(sv)) {
6342                 /* Free back-references before other types of magic. */
6343                 sv_unmagic(sv, PERL_MAGIC_backref);
6344                 mg_free(sv);
6345             }
6346             SvMAGICAL_off(sv);
6347             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6348                 SvREFCNT_dec(SvSTASH(sv));
6349         }
6350         switch (type) {
6351             /* case SVt_INVLIST: */
6352         case SVt_PVIO:
6353             if (IoIFP(sv) &&
6354                 IoIFP(sv) != PerlIO_stdin() &&
6355                 IoIFP(sv) != PerlIO_stdout() &&
6356                 IoIFP(sv) != PerlIO_stderr() &&
6357                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6358             {
6359                 io_close(MUTABLE_IO(sv), FALSE);
6360             }
6361             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6362                 PerlDir_close(IoDIRP(sv));
6363             IoDIRP(sv) = (DIR*)NULL;
6364             Safefree(IoTOP_NAME(sv));
6365             Safefree(IoFMT_NAME(sv));
6366             Safefree(IoBOTTOM_NAME(sv));
6367             if ((const GV *)sv == PL_statgv)
6368                 PL_statgv = NULL;
6369             goto freescalar;
6370         case SVt_REGEXP:
6371             /* FIXME for plugins */
6372           freeregexp:
6373             pregfree2((REGEXP*) sv);
6374             goto freescalar;
6375         case SVt_PVCV:
6376         case SVt_PVFM:
6377             cv_undef(MUTABLE_CV(sv));
6378             /* If we're in a stash, we don't own a reference to it.
6379              * However it does have a back reference to us, which needs to
6380              * be cleared.  */
6381             if ((stash = CvSTASH(sv)))
6382                 sv_del_backref(MUTABLE_SV(stash), sv);
6383             goto freescalar;
6384         case SVt_PVHV:
6385             if (PL_last_swash_hv == (const HV *)sv) {
6386                 PL_last_swash_hv = NULL;
6387             }
6388             if (HvTOTALKEYS((HV*)sv) > 0) {
6389                 const char *name;
6390                 /* this statement should match the one at the beginning of
6391                  * hv_undef_flags() */
6392                 if (   PL_phase != PERL_PHASE_DESTRUCT
6393                     && (name = HvNAME((HV*)sv)))
6394                 {
6395                     if (PL_stashcache) {
6396                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6397                                      SVfARG(sv)));
6398                         (void)hv_deletehek(PL_stashcache,
6399                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6400                     }
6401                     hv_name_set((HV*)sv, NULL, 0, 0);
6402                 }
6403
6404                 /* save old iter_sv in unused SvSTASH field */
6405                 assert(!SvOBJECT(sv));
6406                 SvSTASH(sv) = (HV*)iter_sv;
6407                 iter_sv = sv;
6408
6409                 /* save old hash_index in unused SvMAGIC field */
6410                 assert(!SvMAGICAL(sv));
6411                 assert(!SvMAGIC(sv));
6412                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6413                 hash_index = 0;
6414
6415                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6416                 goto get_next_sv; /* process this new sv */
6417             }
6418             /* free empty hash */
6419             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6420             assert(!HvARRAY((HV*)sv));
6421             break;
6422         case SVt_PVAV:
6423             {
6424                 AV* av = MUTABLE_AV(sv);
6425                 if (PL_comppad == av) {
6426                     PL_comppad = NULL;
6427                     PL_curpad = NULL;
6428                 }
6429                 if (AvREAL(av) && AvFILLp(av) > -1) {
6430                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6431                     /* save old iter_sv in top-most slot of AV,
6432                      * and pray that it doesn't get wiped in the meantime */
6433                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6434                     iter_sv = sv;
6435                     goto get_next_sv; /* process this new sv */
6436                 }
6437                 Safefree(AvALLOC(av));
6438             }
6439
6440             break;
6441         case SVt_PVLV:
6442             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6443                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6444                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6445                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6446             }
6447             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6448                 SvREFCNT_dec(LvTARG(sv));
6449             if (isREGEXP(sv)) goto freeregexp;
6450         case SVt_PVGV:
6451             if (isGV_with_GP(sv)) {
6452                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6453                    && HvENAME_get(stash))
6454                     mro_method_changed_in(stash);
6455                 gp_free(MUTABLE_GV(sv));
6456                 if (GvNAME_HEK(sv))
6457                     unshare_hek(GvNAME_HEK(sv));
6458                 /* If we're in a stash, we don't own a reference to it.
6459                  * However it does have a back reference to us, which
6460                  * needs to be cleared.  */
6461                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6462                         sv_del_backref(MUTABLE_SV(stash), sv);
6463             }
6464             /* FIXME. There are probably more unreferenced pointers to SVs
6465              * in the interpreter struct that we should check and tidy in
6466              * a similar fashion to this:  */
6467             /* See also S_sv_unglob, which does the same thing. */
6468             if ((const GV *)sv == PL_last_in_gv)
6469                 PL_last_in_gv = NULL;
6470             else if ((const GV *)sv == PL_statgv)
6471                 PL_statgv = NULL;
6472             else if ((const GV *)sv == PL_stderrgv)
6473                 PL_stderrgv = NULL;
6474         case SVt_PVMG:
6475         case SVt_PVNV:
6476         case SVt_PVIV:
6477         case SVt_INVLIST:
6478         case SVt_PV:
6479           freescalar:
6480             /* Don't bother with SvOOK_off(sv); as we're only going to
6481              * free it.  */
6482             if (SvOOK(sv)) {
6483                 STRLEN offset;
6484                 SvOOK_offset(sv, offset);
6485                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6486                 /* Don't even bother with turning off the OOK flag.  */
6487             }
6488             if (SvROK(sv)) {
6489             free_rv:
6490                 {
6491                     SV * const target = SvRV(sv);
6492                     if (SvWEAKREF(sv))
6493                         sv_del_backref(target, sv);
6494                     else
6495                         next_sv = target;
6496                 }
6497             }
6498 #ifdef PERL_ANY_COW
6499             else if (SvPVX_const(sv)
6500                      && !(SvTYPE(sv) == SVt_PVIO
6501                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6502             {
6503                 if (SvIsCOW(sv)) {
6504                     if (DEBUG_C_TEST) {
6505                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6506                         sv_dump(sv);
6507                     }
6508                     if (SvLEN(sv)) {
6509 # ifdef PERL_OLD_COPY_ON_WRITE
6510                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6511 # else
6512                         if (CowREFCNT(sv)) {
6513                             sv_buf_to_rw(sv);
6514                             CowREFCNT(sv)--;
6515                             sv_buf_to_ro(sv);
6516                             SvLEN_set(sv, 0);
6517                         }
6518 # endif
6519                     } else {
6520                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6521                     }
6522
6523                 }
6524 # ifdef PERL_OLD_COPY_ON_WRITE
6525                 else
6526 # endif
6527                 if (SvLEN(sv)) {
6528                     Safefree(SvPVX_mutable(sv));
6529                 }
6530             }
6531 #else
6532             else if (SvPVX_const(sv) && SvLEN(sv)
6533                      && !(SvTYPE(sv) == SVt_PVIO
6534                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6535                 Safefree(SvPVX_mutable(sv));
6536             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6537                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6538             }
6539 #endif
6540             break;
6541         case SVt_NV:
6542             break;
6543         }
6544
6545       free_body:
6546
6547         SvFLAGS(sv) &= SVf_BREAK;
6548         SvFLAGS(sv) |= SVTYPEMASK;
6549
6550         sv_type_details = bodies_by_type + type;
6551         if (sv_type_details->arena) {
6552             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6553                      &PL_body_roots[type]);
6554         }
6555         else if (sv_type_details->body_size) {
6556             safefree(SvANY(sv));
6557         }
6558
6559       free_head:
6560         /* caller is responsible for freeing the head of the original sv */
6561         if (sv != orig_sv && !SvREFCNT(sv))
6562             del_SV(sv);
6563
6564         /* grab and free next sv, if any */
6565       get_next_sv:
6566         while (1) {
6567             sv = NULL;
6568             if (next_sv) {
6569                 sv = next_sv;
6570                 next_sv = NULL;
6571             }
6572             else if (!iter_sv) {
6573                 break;
6574             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6575                 AV *const av = (AV*)iter_sv;
6576                 if (AvFILLp(av) > -1) {
6577                     sv = AvARRAY(av)[AvFILLp(av)--];
6578                 }
6579                 else { /* no more elements of current AV to free */
6580                     sv = iter_sv;
6581                     type = SvTYPE(sv);
6582                     /* restore previous value, squirrelled away */
6583                     iter_sv = AvARRAY(av)[AvMAX(av)];
6584                     Safefree(AvALLOC(av));
6585                     goto free_body;
6586                 }
6587             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6588                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6589                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6590                     /* no more elements of current HV to free */
6591                     sv = iter_sv;
6592                     type = SvTYPE(sv);
6593                     /* Restore previous values of iter_sv and hash_index,
6594                      * squirrelled away */
6595                     assert(!SvOBJECT(sv));
6596                     iter_sv = (SV*)SvSTASH(sv);
6597                     assert(!SvMAGICAL(sv));
6598                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6599 #ifdef DEBUGGING
6600                     /* perl -DA does not like rubbish in SvMAGIC. */
6601                     SvMAGIC_set(sv, 0);
6602 #endif
6603
6604                     /* free any remaining detritus from the hash struct */
6605                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6606                     assert(!HvARRAY((HV*)sv));
6607                     goto free_body;
6608                 }
6609             }
6610
6611             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6612
6613             if (!sv)
6614                 continue;
6615             if (!SvREFCNT(sv)) {
6616                 sv_free(sv);
6617                 continue;
6618             }
6619             if (--(SvREFCNT(sv)))
6620                 continue;
6621 #ifdef DEBUGGING
6622             if (SvTEMP(sv)) {
6623                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6624                          "Attempt to free temp prematurely: SV 0x%"UVxf
6625                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6626                 continue;
6627             }
6628 #endif
6629             if (SvIMMORTAL(sv)) {
6630                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6631                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6632                 continue;
6633             }
6634             break;
6635         } /* while 1 */
6636
6637     } /* while sv */
6638 }
6639
6640 /* This routine curses the sv itself, not the object referenced by sv. So
6641    sv does not have to be ROK. */
6642
6643 static bool
6644 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6645     PERL_ARGS_ASSERT_CURSE;
6646     assert(SvOBJECT(sv));
6647
6648     if (PL_defstash &&  /* Still have a symbol table? */
6649         SvDESTROYABLE(sv))
6650     {
6651         dSP;
6652         HV* stash;
6653         do {
6654           stash = SvSTASH(sv);
6655           assert(SvTYPE(stash) == SVt_PVHV);
6656           if (HvNAME(stash)) {
6657             CV* destructor = NULL;
6658             assert (SvOOK(stash));
6659             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6660             if (!destructor || HvMROMETA(stash)->destroy_gen
6661                                 != PL_sub_generation)
6662             {
6663                 GV * const gv =
6664                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6665                 if (gv) destructor = GvCV(gv);
6666                 if (!SvOBJECT(stash))
6667                 {
6668                     SvSTASH(stash) =
6669                         destructor ? (HV *)destructor : ((HV *)0)+1;
6670                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6671                         PL_sub_generation;
6672                 }
6673             }
6674             assert(!destructor || destructor == ((CV *)0)+1
6675                 || SvTYPE(destructor) == SVt_PVCV);
6676             if (destructor && destructor != ((CV *)0)+1
6677                 /* A constant subroutine can have no side effects, so
6678                    don't bother calling it.  */
6679                 && !CvCONST(destructor)
6680                 /* Don't bother calling an empty destructor or one that
6681                    returns immediately. */
6682                 && (CvISXSUB(destructor)
6683                 || (CvSTART(destructor)
6684                     && (CvSTART(destructor)->op_next->op_type
6685                                         != OP_LEAVESUB)
6686                     && (CvSTART(destructor)->op_next->op_type
6687                                         != OP_PUSHMARK
6688                         || CvSTART(destructor)->op_next->op_next->op_type
6689                                         != OP_RETURN
6690                        )
6691                    ))
6692                )
6693             {
6694                 SV* const tmpref = newRV(sv);
6695                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6696                 ENTER;
6697                 PUSHSTACKi(PERLSI_DESTROY);
6698                 EXTEND(SP, 2);
6699                 PUSHMARK(SP);
6700                 PUSHs(tmpref);
6701                 PUTBACK;
6702                 call_sv(MUTABLE_SV(destructor),
6703                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6704                 POPSTACK;
6705                 SPAGAIN;
6706                 LEAVE;
6707                 if(SvREFCNT(tmpref) < 2) {
6708                     /* tmpref is not kept alive! */
6709                     SvREFCNT(sv)--;
6710                     SvRV_set(tmpref, NULL);
6711                     SvROK_off(tmpref);
6712                 }
6713                 SvREFCNT_dec_NN(tmpref);
6714             }
6715           }
6716         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6717
6718
6719         if (check_refcnt && SvREFCNT(sv)) {
6720             if (PL_in_clean_objs)
6721                 Perl_croak(aTHX_
6722                   "DESTROY created new reference to dead object '%"HEKf"'",
6723                    HEKfARG(HvNAME_HEK(stash)));
6724             /* DESTROY gave object new lease on life */
6725             return FALSE;
6726         }
6727     }
6728
6729     if (SvOBJECT(sv)) {
6730         HV * const stash = SvSTASH(sv);
6731         /* Curse before freeing the stash, as freeing the stash could cause
6732            a recursive call into S_curse. */
6733         SvOBJECT_off(sv);       /* Curse the object. */
6734         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6735         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6736     }
6737     return TRUE;
6738 }
6739
6740 /*
6741 =for apidoc sv_newref
6742
6743 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6744 instead.
6745
6746 =cut
6747 */
6748
6749 SV *
6750 Perl_sv_newref(pTHX_ SV *const sv)
6751 {
6752     PERL_UNUSED_CONTEXT;
6753     if (sv)
6754         (SvREFCNT(sv))++;
6755     return sv;
6756 }
6757
6758 /*
6759 =for apidoc sv_free
6760
6761 Decrement an SV's reference count, and if it drops to zero, call
6762 C<sv_clear> to invoke destructors and free up any memory used by
6763 the body; finally, deallocate the SV's head itself.
6764 Normally called via a wrapper macro C<SvREFCNT_dec>.
6765
6766 =cut
6767 */
6768
6769 void
6770 Perl_sv_free(pTHX_ SV *const sv)
6771 {
6772     SvREFCNT_dec(sv);
6773 }
6774
6775
6776 /* Private helper function for SvREFCNT_dec().
6777  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6778
6779 void
6780 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6781 {
6782     dVAR;
6783
6784     PERL_ARGS_ASSERT_SV_FREE2;
6785
6786     if (LIKELY( rc == 1 )) {
6787         /* normal case */
6788         SvREFCNT(sv) = 0;
6789
6790 #ifdef DEBUGGING
6791         if (SvTEMP(sv)) {
6792             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6793                              "Attempt to free temp prematurely: SV 0x%"UVxf
6794                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6795             return;
6796         }
6797 #endif
6798         if (SvIMMORTAL(sv)) {
6799             /* make sure SvREFCNT(sv)==0 happens very seldom */
6800             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6801             return;
6802         }
6803         sv_clear(sv);
6804         if (! SvREFCNT(sv)) /* may have have been resurrected */
6805             del_SV(sv);
6806         return;
6807     }
6808
6809     /* handle exceptional cases */
6810
6811     assert(rc == 0);
6812
6813     if (SvFLAGS(sv) & SVf_BREAK)
6814         /* this SV's refcnt has been artificially decremented to
6815          * trigger cleanup */
6816         return;
6817     if (PL_in_clean_all) /* All is fair */
6818         return;
6819     if (SvIMMORTAL(sv)) {
6820         /* make sure SvREFCNT(sv)==0 happens very seldom */
6821         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6822         return;
6823     }
6824     if (ckWARN_d(WARN_INTERNAL)) {
6825 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6826         Perl_dump_sv_child(aTHX_ sv);
6827 #else
6828     #ifdef DEBUG_LEAKING_SCALARS
6829         sv_dump(sv);
6830     #endif
6831 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6832         if (PL_warnhook == PERL_WARNHOOK_FATAL
6833             || ckDEAD(packWARN(WARN_INTERNAL))) {
6834             /* Don't let Perl_warner cause us to escape our fate:  */
6835             abort();
6836         }
6837 #endif
6838         /* This may not return:  */
6839         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6840                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6841                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6842 #endif
6843     }
6844 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6845     abort();
6846 #endif
6847
6848 }
6849
6850
6851 /*
6852 =for apidoc sv_len
6853
6854 Returns the length of the string in the SV.  Handles magic and type
6855 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6856 gives raw access to the xpv_cur slot.
6857
6858 =cut
6859 */
6860
6861 STRLEN
6862 Perl_sv_len(pTHX_ SV *const sv)
6863 {
6864     STRLEN len;
6865
6866     if (!sv)
6867         return 0;
6868
6869     (void)SvPV_const(sv, len);
6870     return len;
6871 }
6872
6873 /*
6874 =for apidoc sv_len_utf8
6875
6876 Returns the number of characters in the string in an SV, counting wide
6877 UTF-8 bytes as a single character.  Handles magic and type coercion.
6878
6879 =cut
6880 */
6881
6882 /*
6883  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6884  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6885  * (Note that the mg_len is not the length of the mg_ptr field.
6886  * This allows the cache to store the character length of the string without
6887  * needing to malloc() extra storage to attach to the mg_ptr.)
6888  *
6889  */
6890
6891 STRLEN
6892 Perl_sv_len_utf8(pTHX_ SV *const sv)
6893 {
6894     if (!sv)
6895         return 0;
6896
6897     SvGETMAGIC(sv);
6898     return sv_len_utf8_nomg(sv);
6899 }
6900
6901 STRLEN
6902 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6903 {
6904     STRLEN len;
6905     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6906
6907     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6908
6909     if (PL_utf8cache && SvUTF8(sv)) {
6910             STRLEN ulen;
6911             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6912
6913             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6914                 if (mg->mg_len != -1)
6915                     ulen = mg->mg_len;
6916                 else {
6917                     /* We can use the offset cache for a headstart.
6918                        The longer value is stored in the first pair.  */
6919                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6920
6921                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6922                                                        s + len);
6923                 }
6924                 
6925                 if (PL_utf8cache < 0) {
6926                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6927                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6928                 }
6929             }
6930             else {
6931                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6932                 utf8_mg_len_cache_update(sv, &mg, ulen);
6933             }
6934             return ulen;
6935     }
6936     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6937 }
6938
6939 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6940    offset.  */
6941 static STRLEN
6942 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6943                       STRLEN *const uoffset_p, bool *const at_end)
6944 {
6945     const U8 *s = start;
6946     STRLEN uoffset = *uoffset_p;
6947
6948     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6949
6950     while (s < send && uoffset) {
6951         --uoffset;
6952         s += UTF8SKIP(s);
6953     }
6954     if (s == send) {
6955         *at_end = TRUE;
6956     }
6957     else if (s > send) {
6958         *at_end = TRUE;
6959         /* This is the existing behaviour. Possibly it should be a croak, as
6960            it's actually a bounds error  */
6961         s = send;
6962     }
6963     *uoffset_p -= uoffset;
6964     return s - start;
6965 }
6966
6967 /* Given the length of the string in both bytes and UTF-8 characters, decide
6968    whether to walk forwards or backwards to find the byte corresponding to
6969    the passed in UTF-8 offset.  */
6970 static STRLEN
6971 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6972                     STRLEN uoffset, const STRLEN uend)
6973 {
6974     STRLEN backw = uend - uoffset;
6975
6976     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6977
6978     if (uoffset < 2 * backw) {
6979         /* The assumption is that going forwards is twice the speed of going
6980            forward (that's where the 2 * backw comes from).
6981            (The real figure of course depends on the UTF-8 data.)  */
6982         const U8 *s = start;
6983
6984         while (s < send && uoffset--)
6985             s += UTF8SKIP(s);
6986         assert (s <= send);
6987         if (s > send)
6988             s = send;
6989         return s - start;
6990     }
6991
6992     while (backw--) {
6993         send--;
6994         while (UTF8_IS_CONTINUATION(*send))
6995             send--;
6996     }
6997     return send - start;
6998 }
6999
7000 /* For the string representation of the given scalar, find the byte
7001    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7002    give another position in the string, *before* the sought offset, which
7003    (which is always true, as 0, 0 is a valid pair of positions), which should
7004    help reduce the amount of linear searching.
7005    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7006    will be used to reduce the amount of linear searching. The cache will be
7007    created if necessary, and the found value offered to it for update.  */
7008 static STRLEN
7009 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7010                     const U8 *const send, STRLEN uoffset,
7011                     STRLEN uoffset0, STRLEN boffset0)
7012 {
7013     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7014     bool found = FALSE;
7015     bool at_end = FALSE;
7016
7017     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7018
7019     assert (uoffset >= uoffset0);
7020
7021     if (!uoffset)
7022         return 0;
7023
7024     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7025         && PL_utf8cache
7026         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7027                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7028         if ((*mgp)->mg_ptr) {
7029             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7030             if (cache[0] == uoffset) {
7031                 /* An exact match. */
7032                 return cache[1];
7033             }
7034             if (cache[2] == uoffset) {
7035                 /* An exact match. */
7036                 return cache[3];
7037             }
7038
7039             if (cache[0] < uoffset) {
7040                 /* The cache already knows part of the way.   */
7041                 if (cache[0] > uoffset0) {
7042                     /* The cache knows more than the passed in pair  */
7043                     uoffset0 = cache[0];
7044                     boffset0 = cache[1];
7045                 }
7046                 if ((*mgp)->mg_len != -1) {
7047                     /* And we know the end too.  */
7048                     boffset = boffset0
7049                         + sv_pos_u2b_midway(start + boffset0, send,
7050                                               uoffset - uoffset0,
7051                                               (*mgp)->mg_len - uoffset0);
7052                 } else {
7053                     uoffset -= uoffset0;
7054                     boffset = boffset0
7055                         + sv_pos_u2b_forwards(start + boffset0,
7056                                               send, &uoffset, &at_end);
7057                     uoffset += uoffset0;
7058                 }
7059             }
7060             else if (cache[2] < uoffset) {
7061                 /* We're between the two cache entries.  */
7062                 if (cache[2] > uoffset0) {
7063                     /* and the cache knows more than the passed in pair  */
7064                     uoffset0 = cache[2];
7065                     boffset0 = cache[3];
7066                 }
7067
7068                 boffset = boffset0
7069                     + sv_pos_u2b_midway(start + boffset0,
7070                                           start + cache[1],
7071                                           uoffset - uoffset0,
7072                                           cache[0] - uoffset0);
7073             } else {
7074                 boffset = boffset0
7075                     + sv_pos_u2b_midway(start + boffset0,
7076                                           start + cache[3],
7077                                           uoffset - uoffset0,
7078                                           cache[2] - uoffset0);
7079             }
7080             found = TRUE;
7081         }
7082         else if ((*mgp)->mg_len != -1) {
7083             /* If we can take advantage of a passed in offset, do so.  */
7084             /* In fact, offset0 is either 0, or less than offset, so don't
7085                need to worry about the other possibility.  */
7086             boffset = boffset0
7087                 + sv_pos_u2b_midway(start + boffset0, send,
7088                                       uoffset - uoffset0,
7089                                       (*mgp)->mg_len - uoffset0);
7090             found = TRUE;
7091         }
7092     }
7093
7094     if (!found || PL_utf8cache < 0) {
7095         STRLEN real_boffset;
7096         uoffset -= uoffset0;
7097         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7098                                                       send, &uoffset, &at_end);
7099         uoffset += uoffset0;
7100
7101         if (found && PL_utf8cache < 0)
7102             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7103                                        real_boffset, sv);
7104         boffset = real_boffset;
7105     }
7106
7107     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7108         if (at_end)
7109             utf8_mg_len_cache_update(sv, mgp, uoffset);
7110         else
7111             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7112     }
7113     return boffset;
7114 }
7115
7116
7117 /*
7118 =for apidoc sv_pos_u2b_flags
7119
7120 Converts the offset from a count of UTF-8 chars from
7121 the start of the string, to a count of the equivalent number of bytes; if
7122 lenp is non-zero, it does the same to lenp, but this time starting from
7123 the offset, rather than from the start
7124 of the string.  Handles type coercion.
7125 I<flags> is passed to C<SvPV_flags>, and usually should be
7126 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7127
7128 =cut
7129 */
7130
7131 /*
7132  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7133  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7134  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7135  *
7136  */
7137
7138 STRLEN
7139 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7140                       U32 flags)
7141 {
7142     const U8 *start;
7143     STRLEN len;
7144     STRLEN boffset;
7145
7146     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7147
7148     start = (U8*)SvPV_flags(sv, len, flags);
7149     if (len) {
7150         const U8 * const send = start + len;
7151         MAGIC *mg = NULL;
7152         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7153
7154         if (lenp
7155             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7156                         is 0, and *lenp is already set to that.  */) {
7157             /* Convert the relative offset to absolute.  */
7158             const STRLEN uoffset2 = uoffset + *lenp;
7159             const STRLEN boffset2
7160                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7161                                       uoffset, boffset) - boffset;
7162
7163             *lenp = boffset2;
7164         }
7165     } else {
7166         if (lenp)
7167             *lenp = 0;
7168         boffset = 0;
7169     }
7170
7171     return boffset;
7172 }
7173
7174 /*
7175 =for apidoc sv_pos_u2b
7176
7177 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7178 the start of the string, to a count of the equivalent number of bytes; if
7179 lenp is non-zero, it does the same to lenp, but this time starting from
7180 the offset, rather than from the start of the string.  Handles magic and
7181 type coercion.
7182
7183 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7184 than 2Gb.
7185
7186 =cut
7187 */
7188
7189 /*
7190  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7191  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7192  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7193  *
7194  */
7195
7196 /* This function is subject to size and sign problems */
7197
7198 void
7199 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7200 {
7201     PERL_ARGS_ASSERT_SV_POS_U2B;
7202
7203     if (lenp) {
7204         STRLEN ulen = (STRLEN)*lenp;
7205         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7206                                          SV_GMAGIC|SV_CONST_RETURN);
7207         *lenp = (I32)ulen;
7208     } else {
7209         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7210                                          SV_GMAGIC|SV_CONST_RETURN);
7211     }
7212 }
7213
7214 static void
7215 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7216                            const STRLEN ulen)
7217 {
7218     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7219     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7220         return;
7221
7222     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7223                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7224         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7225     }
7226     assert(*mgp);
7227
7228     (*mgp)->mg_len = ulen;
7229 }
7230
7231 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7232    byte length pairing. The (byte) length of the total SV is passed in too,
7233    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7234    may not have updated SvCUR, so we can't rely on reading it directly.
7235
7236    The proffered utf8/byte length pairing isn't used if the cache already has
7237    two pairs, and swapping either for the proffered pair would increase the
7238    RMS of the intervals between known byte offsets.
7239
7240    The cache itself consists of 4 STRLEN values
7241    0: larger UTF-8 offset
7242    1: corresponding byte offset
7243    2: smaller UTF-8 offset
7244    3: corresponding byte offset
7245
7246    Unused cache pairs have the value 0, 0.
7247    Keeping the cache "backwards" means that the invariant of
7248    cache[0] >= cache[2] is maintained even with empty slots, which means that
7249    the code that uses it doesn't need to worry if only 1 entry has actually
7250    been set to non-zero.  It also makes the "position beyond the end of the
7251    cache" logic much simpler, as the first slot is always the one to start
7252    from.   
7253 */
7254 static void
7255 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7256                            const STRLEN utf8, const STRLEN blen)
7257 {
7258     STRLEN *cache;
7259
7260     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7261
7262     if (SvREADONLY(sv))
7263         return;
7264
7265     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7266                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7267         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7268                            0);
7269         (*mgp)->mg_len = -1;
7270     }
7271     assert(*mgp);
7272
7273     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7274         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7275         (*mgp)->mg_ptr = (char *) cache;
7276     }
7277     assert(cache);
7278
7279     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7280         /* SvPOKp() because it's possible that sv has string overloading, and
7281            therefore is a reference, hence SvPVX() is actually a pointer.
7282            This cures the (very real) symptoms of RT 69422, but I'm not actually
7283            sure whether we should even be caching the results of UTF-8
7284            operations on overloading, given that nothing stops overloading
7285            returning a different value every time it's called.  */
7286         const U8 *start = (const U8 *) SvPVX_const(sv);
7287         const STRLEN realutf8 = utf8_length(start, start + byte);
7288
7289         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7290                                    sv);
7291     }
7292
7293     /* Cache is held with the later position first, to simplify the code
7294        that deals with unbounded ends.  */
7295        
7296     ASSERT_UTF8_CACHE(cache);
7297     if (cache[1] == 0) {
7298         /* Cache is totally empty  */
7299         cache[0] = utf8;
7300         cache[1] = byte;
7301     } else if (cache[3] == 0) {
7302         if (byte > cache[1]) {
7303             /* New one is larger, so goes first.  */
7304             cache[2] = cache[0];
7305             cache[3] = cache[1];
7306             cache[0] = utf8;
7307             cache[1] = byte;
7308         } else {
7309             cache[2] = utf8;
7310             cache[3] = byte;
7311         }
7312     } else {
7313 #define THREEWAY_SQUARE(a,b,c,d) \
7314             ((float)((d) - (c))) * ((float)((d) - (c))) \
7315             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7316                + ((float)((b) - (a))) * ((float)((b) - (a)))
7317
7318         /* Cache has 2 slots in use, and we know three potential pairs.
7319            Keep the two that give the lowest RMS distance. Do the
7320            calculation in bytes simply because we always know the byte
7321            length.  squareroot has the same ordering as the positive value,
7322            so don't bother with the actual square root.  */
7323         if (byte > cache[1]) {
7324             /* New position is after the existing pair of pairs.  */
7325             const float keep_earlier
7326                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7327             const float keep_later
7328                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7329
7330             if (keep_later < keep_earlier) {
7331                 cache[2] = cache[0];
7332                 cache[3] = cache[1];
7333                 cache[0] = utf8;
7334                 cache[1] = byte;
7335             }
7336             else {
7337                 cache[0] = utf8;
7338                 cache[1] = byte;
7339             }
7340         }
7341         else if (byte > cache[3]) {
7342             /* New position is between the existing pair of pairs.  */
7343             const float keep_earlier
7344                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7345             const float keep_later
7346                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7347
7348             if (keep_later < keep_earlier) {
7349                 cache[2] = utf8;
7350                 cache[3] = byte;
7351             }
7352             else {
7353                 cache[0] = utf8;
7354                 cache[1] = byte;
7355             }
7356         }
7357         else {
7358             /* New position is before the existing pair of pairs.  */
7359             const float keep_earlier
7360                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7361             const float keep_later
7362                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7363
7364             if (keep_later < keep_earlier) {
7365                 cache[2] = utf8;
7366                 cache[3] = byte;
7367             }
7368             else {
7369                 cache[0] = cache[2];
7370                 cache[1] = cache[3];
7371                 cache[2] = utf8;
7372                 cache[3] = byte;
7373             }
7374         }
7375     }
7376     ASSERT_UTF8_CACHE(cache);
7377 }
7378
7379 /* We already know all of the way, now we may be able to walk back.  The same
7380    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7381    backward is half the speed of walking forward. */
7382 static STRLEN
7383 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7384                     const U8 *end, STRLEN endu)
7385 {
7386     const STRLEN forw = target - s;
7387     STRLEN backw = end - target;
7388
7389     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7390
7391     if (forw < 2 * backw) {
7392         return utf8_length(s, target);
7393     }
7394
7395     while (end > target) {
7396         end--;
7397         while (UTF8_IS_CONTINUATION(*end)) {
7398             end--;
7399         }
7400         endu--;
7401     }
7402     return endu;
7403 }
7404
7405 /*
7406 =for apidoc sv_pos_b2u_flags
7407
7408 Converts the offset from a count of bytes from the start of the string, to
7409 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7410 I<flags> is passed to C<SvPV_flags>, and usually should be
7411 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7412
7413 =cut
7414 */
7415
7416 /*
7417  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7418  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7419  * and byte offsets.
7420  *
7421  */
7422 STRLEN
7423 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7424 {
7425     const U8* s;
7426     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7427     STRLEN blen;
7428     MAGIC* mg = NULL;
7429     const U8* send;
7430     bool found = FALSE;
7431
7432     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7433
7434     s = (const U8*)SvPV_flags(sv, blen, flags);
7435
7436     if (blen < offset)
7437         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7438                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7439
7440     send = s + offset;
7441
7442     if (!SvREADONLY(sv)
7443         && PL_utf8cache
7444         && SvTYPE(sv) >= SVt_PVMG
7445         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7446     {
7447         if (mg->mg_ptr) {
7448             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7449             if (cache[1] == offset) {
7450                 /* An exact match. */
7451                 return cache[0];
7452             }
7453             if (cache[3] == offset) {
7454                 /* An exact match. */
7455                 return cache[2];
7456             }
7457
7458             if (cache[1] < offset) {
7459                 /* We already know part of the way. */
7460                 if (mg->mg_len != -1) {
7461                     /* Actually, we know the end too.  */
7462                     len = cache[0]
7463                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7464                                               s + blen, mg->mg_len - cache[0]);
7465                 } else {
7466                     len = cache[0] + utf8_length(s + cache[1], send);
7467                 }
7468             }
7469             else if (cache[3] < offset) {
7470                 /* We're between the two cached pairs, so we do the calculation
7471                    offset by the byte/utf-8 positions for the earlier pair,
7472                    then add the utf-8 characters from the string start to
7473                    there.  */
7474                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7475                                           s + cache[1], cache[0] - cache[2])
7476                     + cache[2];
7477
7478             }
7479             else { /* cache[3] > offset */
7480                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7481                                           cache[2]);
7482
7483             }
7484             ASSERT_UTF8_CACHE(cache);
7485             found = TRUE;
7486         } else if (mg->mg_len != -1) {
7487             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7488             found = TRUE;
7489         }
7490     }
7491     if (!found || PL_utf8cache < 0) {
7492         const STRLEN real_len = utf8_length(s, send);
7493
7494         if (found && PL_utf8cache < 0)
7495             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7496         len = real_len;
7497     }
7498
7499     if (PL_utf8cache) {
7500         if (blen == offset)
7501             utf8_mg_len_cache_update(sv, &mg, len);
7502         else
7503             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7504     }
7505
7506     return len;
7507 }
7508
7509 /*
7510 =for apidoc sv_pos_b2u
7511
7512 Converts the value pointed to by offsetp from a count of bytes from the
7513 start of the string, to a count of the equivalent number of UTF-8 chars.
7514 Handles magic and type coercion.
7515
7516 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7517 longer than 2Gb.
7518
7519 =cut
7520 */
7521
7522 /*
7523  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7524  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7525  * byte offsets.
7526  *
7527  */
7528 void
7529 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7530 {
7531     PERL_ARGS_ASSERT_SV_POS_B2U;
7532
7533     if (!sv)
7534         return;
7535
7536     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7537                                      SV_GMAGIC|SV_CONST_RETURN);
7538 }
7539
7540 static void
7541 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7542                              STRLEN real, SV *const sv)
7543 {
7544     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7545
7546     /* As this is debugging only code, save space by keeping this test here,
7547        rather than inlining it in all the callers.  */
7548     if (from_cache == real)
7549         return;
7550
7551     /* Need to turn the assertions off otherwise we may recurse infinitely
7552        while printing error messages.  */
7553     SAVEI8(PL_utf8cache);
7554     PL_utf8cache = 0;
7555     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7556                func, (UV) from_cache, (UV) real, SVfARG(sv));
7557 }
7558
7559 /*
7560 =for apidoc sv_eq
7561
7562 Returns a boolean indicating whether the strings in the two SVs are
7563 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7564 coerce its args to strings if necessary.
7565
7566 =for apidoc sv_eq_flags
7567
7568 Returns a boolean indicating whether the strings in the two SVs are
7569 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7570 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7571
7572 =cut
7573 */
7574
7575 I32
7576 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7577 {
7578     const char *pv1;
7579     STRLEN cur1;
7580     const char *pv2;
7581     STRLEN cur2;
7582     I32  eq     = 0;
7583     SV* svrecode = NULL;
7584
7585     if (!sv1) {
7586         pv1 = "";
7587         cur1 = 0;
7588     }
7589     else {
7590         /* if pv1 and pv2 are the same, second SvPV_const call may
7591          * invalidate pv1 (if we are handling magic), so we may need to
7592          * make a copy */
7593         if (sv1 == sv2 && flags & SV_GMAGIC
7594          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7595             pv1 = SvPV_const(sv1, cur1);
7596             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7597         }
7598         pv1 = SvPV_flags_const(sv1, cur1, flags);
7599     }
7600
7601     if (!sv2){
7602         pv2 = "";
7603         cur2 = 0;
7604     }
7605     else
7606         pv2 = SvPV_flags_const(sv2, cur2, flags);
7607
7608     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7609         /* Differing utf8ness.
7610          * Do not UTF8size the comparands as a side-effect. */
7611          if (PL_encoding) {
7612               if (SvUTF8(sv1)) {
7613                    svrecode = newSVpvn(pv2, cur2);
7614                    sv_recode_to_utf8(svrecode, PL_encoding);
7615                    pv2 = SvPV_const(svrecode, cur2);
7616               }
7617               else {
7618                    svrecode = newSVpvn(pv1, cur1);
7619                    sv_recode_to_utf8(svrecode, PL_encoding);
7620                    pv1 = SvPV_const(svrecode, cur1);
7621               }
7622               /* Now both are in UTF-8. */
7623               if (cur1 != cur2) {
7624                    SvREFCNT_dec_NN(svrecode);
7625                    return FALSE;
7626               }
7627          }
7628          else {
7629               if (SvUTF8(sv1)) {
7630                   /* sv1 is the UTF-8 one  */
7631                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7632                                         (const U8*)pv1, cur1) == 0;
7633               }
7634               else {
7635                   /* sv2 is the UTF-8 one  */
7636                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7637                                         (const U8*)pv2, cur2) == 0;
7638               }
7639          }
7640     }
7641
7642     if (cur1 == cur2)
7643         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7644         
7645     SvREFCNT_dec(svrecode);
7646
7647     return eq;
7648 }
7649
7650 /*
7651 =for apidoc sv_cmp
7652
7653 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7654 string in C<sv1> is less than, equal to, or greater than the string in
7655 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7656 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7657
7658 =for apidoc sv_cmp_flags
7659
7660 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7661 string in C<sv1> is less than, equal to, or greater than the string in
7662 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7663 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7664 also C<sv_cmp_locale_flags>.
7665
7666 =cut
7667 */
7668
7669 I32
7670 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7671 {
7672     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7673 }
7674
7675 I32
7676 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7677                   const U32 flags)
7678 {
7679     STRLEN cur1, cur2;
7680     const char *pv1, *pv2;
7681     I32  cmp;
7682     SV *svrecode = NULL;
7683
7684     if (!sv1) {
7685         pv1 = "";
7686         cur1 = 0;
7687     }
7688     else
7689         pv1 = SvPV_flags_const(sv1, cur1, flags);
7690
7691     if (!sv2) {
7692         pv2 = "";
7693         cur2 = 0;
7694     }
7695     else
7696         pv2 = SvPV_flags_const(sv2, cur2, flags);
7697
7698     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7699         /* Differing utf8ness.
7700          * Do not UTF8size the comparands as a side-effect. */
7701         if (SvUTF8(sv1)) {
7702             if (PL_encoding) {
7703                  svrecode = newSVpvn(pv2, cur2);
7704                  sv_recode_to_utf8(svrecode, PL_encoding);
7705                  pv2 = SvPV_const(svrecode, cur2);
7706             }
7707             else {
7708                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7709                                                    (const U8*)pv1, cur1);
7710                 return retval ? retval < 0 ? -1 : +1 : 0;
7711             }
7712         }
7713         else {
7714             if (PL_encoding) {
7715                  svrecode = newSVpvn(pv1, cur1);
7716                  sv_recode_to_utf8(svrecode, PL_encoding);
7717                  pv1 = SvPV_const(svrecode, cur1);
7718             }
7719             else {
7720                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7721                                                   (const U8*)pv2, cur2);
7722                 return retval ? retval < 0 ? -1 : +1 : 0;
7723             }
7724         }
7725     }
7726
7727     if (!cur1) {
7728         cmp = cur2 ? -1 : 0;
7729     } else if (!cur2) {
7730         cmp = 1;
7731     } else {
7732         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7733
7734         if (retval) {
7735             cmp = retval < 0 ? -1 : 1;
7736         } else if (cur1 == cur2) {
7737             cmp = 0;
7738         } else {
7739             cmp = cur1 < cur2 ? -1 : 1;
7740         }
7741     }
7742
7743     SvREFCNT_dec(svrecode);
7744
7745     return cmp;
7746 }
7747
7748 /*
7749 =for apidoc sv_cmp_locale
7750
7751 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7752 'use bytes' aware, handles get magic, and will coerce its args to strings
7753 if necessary.  See also C<sv_cmp>.
7754
7755 =for apidoc sv_cmp_locale_flags
7756
7757 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7758 'use bytes' aware and will coerce its args to strings if necessary.  If the
7759 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7760
7761 =cut
7762 */
7763
7764 I32
7765 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7766 {
7767     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7768 }
7769
7770 I32
7771 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7772                          const U32 flags)
7773 {
7774 #ifdef USE_LOCALE_COLLATE
7775
7776     char *pv1, *pv2;
7777     STRLEN len1, len2;
7778     I32 retval;
7779
7780     if (PL_collation_standard)
7781         goto raw_compare;
7782
7783     len1 = 0;
7784     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7785     len2 = 0;
7786     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7787
7788     if (!pv1 || !len1) {
7789         if (pv2 && len2)
7790             return -1;
7791         else
7792             goto raw_compare;
7793     }
7794     else {
7795         if (!pv2 || !len2)
7796             return 1;
7797     }
7798
7799     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7800
7801     if (retval)
7802         return retval < 0 ? -1 : 1;
7803
7804     /*
7805      * When the result of collation is equality, that doesn't mean
7806      * that there are no differences -- some locales exclude some
7807      * characters from consideration.  So to avoid false equalities,
7808      * we use the raw string as a tiebreaker.
7809      */
7810
7811   raw_compare:
7812     /* FALLTHROUGH */
7813
7814 #else
7815     PERL_UNUSED_ARG(flags);
7816 #endif /* USE_LOCALE_COLLATE */
7817
7818     return sv_cmp(sv1, sv2);
7819 }
7820
7821
7822 #ifdef USE_LOCALE_COLLATE
7823
7824 /*
7825 =for apidoc sv_collxfrm
7826
7827 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7828 C<sv_collxfrm_flags>.
7829
7830 =for apidoc sv_collxfrm_flags
7831
7832 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7833 flags contain SV_GMAGIC, it handles get-magic.
7834
7835 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7836 scalar data of the variable, but transformed to such a format that a normal
7837 memory comparison can be used to compare the data according to the locale
7838 settings.
7839
7840 =cut
7841 */
7842
7843 char *
7844 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7845 {
7846     MAGIC *mg;
7847
7848     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7849
7850     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7851     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7852         const char *s;
7853         char *xf;
7854         STRLEN len, xlen;
7855
7856         if (mg)
7857             Safefree(mg->mg_ptr);
7858         s = SvPV_flags_const(sv, len, flags);
7859         if ((xf = mem_collxfrm(s, len, &xlen))) {
7860             if (! mg) {
7861 #ifdef PERL_OLD_COPY_ON_WRITE
7862                 if (SvIsCOW(sv))
7863                     sv_force_normal_flags(sv, 0);
7864 #endif
7865                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7866                                  0, 0);
7867                 assert(mg);
7868             }
7869             mg->mg_ptr = xf;
7870             mg->mg_len = xlen;
7871         }
7872         else {
7873             if (mg) {
7874                 mg->mg_ptr = NULL;
7875                 mg->mg_len = -1;
7876             }
7877         }
7878     }
7879     if (mg && mg->mg_ptr) {
7880         *nxp = mg->mg_len;
7881         return mg->mg_ptr + sizeof(PL_collation_ix);
7882     }
7883     else {
7884         *nxp = 0;
7885         return NULL;
7886     }
7887 }
7888
7889 #endif /* USE_LOCALE_COLLATE */
7890
7891 static char *
7892 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7893 {
7894     SV * const tsv = newSV(0);
7895     ENTER;
7896     SAVEFREESV(tsv);
7897     sv_gets(tsv, fp, 0);
7898     sv_utf8_upgrade_nomg(tsv);
7899     SvCUR_set(sv,append);
7900     sv_catsv(sv,tsv);
7901     LEAVE;
7902     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7903 }
7904
7905 static char *
7906 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7907 {
7908     SSize_t bytesread;
7909     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7910       /* Grab the size of the record we're getting */
7911     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7912     
7913     /* Go yank in */
7914 #ifdef __VMS
7915     int fd;
7916     Stat_t st;
7917
7918     /* With a true, record-oriented file on VMS, we need to use read directly
7919      * to ensure that we respect RMS record boundaries.  The user is responsible
7920      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7921      * record size) field.  N.B. This is likely to produce invalid results on
7922      * varying-width character data when a record ends mid-character.
7923      */
7924     fd = PerlIO_fileno(fp);
7925     if (fd != -1
7926         && PerlLIO_fstat(fd, &st) == 0
7927         && (st.st_fab_rfm == FAB$C_VAR
7928             || st.st_fab_rfm == FAB$C_VFC
7929             || st.st_fab_rfm == FAB$C_FIX)) {
7930
7931         bytesread = PerlLIO_read(fd, buffer, recsize);
7932     }
7933     else /* in-memory file from PerlIO::Scalar
7934           * or not a record-oriented file
7935           */
7936 #endif
7937     {
7938         bytesread = PerlIO_read(fp, buffer, recsize);
7939
7940         /* At this point, the logic in sv_get() means that sv will
7941            be treated as utf-8 if the handle is utf8.
7942         */
7943         if (PerlIO_isutf8(fp) && bytesread > 0) {
7944             char *bend = buffer + bytesread;
7945             char *bufp = buffer;
7946             size_t charcount = 0;
7947             bool charstart = TRUE;
7948             STRLEN skip = 0;
7949
7950             while (charcount < recsize) {
7951                 /* count accumulated characters */
7952                 while (bufp < bend) {
7953                     if (charstart) {
7954                         skip = UTF8SKIP(bufp);
7955                     }
7956                     if (bufp + skip > bend) {
7957                         /* partial at the end */
7958                         charstart = FALSE;
7959                         break;
7960                     }
7961                     else {
7962                         ++charcount;
7963                         bufp += skip;
7964                         charstart = TRUE;
7965                     }
7966                 }
7967
7968                 if (charcount < recsize) {
7969                     STRLEN readsize;
7970                     STRLEN bufp_offset = bufp - buffer;
7971                     SSize_t morebytesread;
7972
7973                     /* originally I read enough to fill any incomplete
7974                        character and the first byte of the next
7975                        character if needed, but if there's many
7976                        multi-byte encoded characters we're going to be
7977                        making a read call for every character beyond
7978                        the original read size.
7979
7980                        So instead, read the rest of the character if
7981                        any, and enough bytes to match at least the
7982                        start bytes for each character we're going to
7983                        read.
7984                     */
7985                     if (charstart)
7986                         readsize = recsize - charcount;
7987                     else 
7988                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7989                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7990                     bend = buffer + bytesread;
7991                     morebytesread = PerlIO_read(fp, bend, readsize);
7992                     if (morebytesread <= 0) {
7993                         /* we're done, if we still have incomplete
7994                            characters the check code in sv_gets() will
7995                            warn about them.
7996
7997                            I'd originally considered doing
7998                            PerlIO_ungetc() on all but the lead
7999                            character of the incomplete character, but
8000                            read() doesn't do that, so I don't.
8001                         */
8002                         break;
8003                     }
8004
8005                     /* prepare to scan some more */
8006                     bytesread += morebytesread;
8007                     bend = buffer + bytesread;
8008                     bufp = buffer + bufp_offset;
8009                 }
8010             }
8011         }
8012     }
8013
8014     if (bytesread < 0)
8015         bytesread = 0;
8016     SvCUR_set(sv, bytesread + append);
8017     buffer[bytesread] = '\0';
8018     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8019 }
8020
8021 /*
8022 =for apidoc sv_gets
8023
8024 Get a line from the filehandle and store it into the SV, optionally
8025 appending to the currently-stored string.  If C<append> is not 0, the
8026 line is appended to the SV instead of overwriting it.  C<append> should
8027 be set to the byte offset that the appended string should start at
8028 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8029
8030 =cut
8031 */
8032
8033 char *
8034 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8035 {
8036     const char *rsptr;
8037     STRLEN rslen;
8038     STDCHAR rslast;
8039     STDCHAR *bp;
8040     SSize_t cnt;
8041     int i = 0;
8042     int rspara = 0;
8043
8044     PERL_ARGS_ASSERT_SV_GETS;
8045
8046     if (SvTHINKFIRST(sv))
8047         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8048     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8049        from <>.
8050        However, perlbench says it's slower, because the existing swipe code
8051        is faster than copy on write.
8052        Swings and roundabouts.  */
8053     SvUPGRADE(sv, SVt_PV);
8054
8055     if (append) {
8056         /* line is going to be appended to the existing buffer in the sv */
8057         if (PerlIO_isutf8(fp)) {
8058             if (!SvUTF8(sv)) {
8059                 sv_utf8_upgrade_nomg(sv);
8060                 sv_pos_u2b(sv,&append,0);
8061             }
8062         } else if (SvUTF8(sv)) {
8063             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8064         }
8065     }
8066
8067     SvPOK_only(sv);
8068     if (!append) {
8069         /* not appending - "clear" the string by setting SvCUR to 0,
8070          * the pv is still avaiable. */
8071         SvCUR_set(sv,0);
8072     }
8073     if (PerlIO_isutf8(fp))
8074         SvUTF8_on(sv);
8075
8076     if (IN_PERL_COMPILETIME) {
8077         /* we always read code in line mode */
8078         rsptr = "\n";
8079         rslen = 1;
8080     }
8081     else if (RsSNARF(PL_rs)) {
8082         /* If it is a regular disk file use size from stat() as estimate
8083            of amount we are going to read -- may result in mallocing
8084            more memory than we really need if the layers below reduce
8085            the size we read (e.g. CRLF or a gzip layer).
8086          */
8087         Stat_t st;
8088         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8089             const Off_t offset = PerlIO_tell(fp);
8090             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8091 #ifdef PERL_NEW_COPY_ON_WRITE
8092                 /* Add an extra byte for the sake of copy-on-write's
8093                  * buffer reference count. */
8094                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8095 #else
8096                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8097 #endif
8098             }
8099         }
8100         rsptr = NULL;
8101         rslen = 0;
8102     }
8103     else if (RsRECORD(PL_rs)) {
8104         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8105     }
8106     else if (RsPARA(PL_rs)) {
8107         rsptr = "\n\n";
8108         rslen = 2;
8109         rspara = 1;
8110     }
8111     else {
8112         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8113         if (PerlIO_isutf8(fp)) {
8114             rsptr = SvPVutf8(PL_rs, rslen);
8115         }
8116         else {
8117             if (SvUTF8(PL_rs)) {
8118                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8119                     Perl_croak(aTHX_ "Wide character in $/");
8120                 }
8121             }
8122             /* extract the raw pointer to the record separator */
8123             rsptr = SvPV_const(PL_rs, rslen);
8124         }
8125     }
8126
8127     /* rslast is the last character in the record separator
8128      * note we don't use rslast except when rslen is true, so the
8129      * null assign is a placeholder. */
8130     rslast = rslen ? rsptr[rslen - 1] : '\0';
8131
8132     if (rspara) {               /* have to do this both before and after */
8133         do {                    /* to make sure file boundaries work right */
8134             if (PerlIO_eof(fp))
8135                 return 0;
8136             i = PerlIO_getc(fp);
8137             if (i != '\n') {
8138                 if (i == -1)
8139                     return 0;
8140                 PerlIO_ungetc(fp,i);
8141                 break;
8142             }
8143         } while (i != EOF);
8144     }
8145
8146     /* See if we know enough about I/O mechanism to cheat it ! */
8147
8148     /* This used to be #ifdef test - it is made run-time test for ease
8149        of abstracting out stdio interface. One call should be cheap
8150        enough here - and may even be a macro allowing compile
8151        time optimization.
8152      */
8153
8154     if (PerlIO_fast_gets(fp)) {
8155     /*
8156      * We can do buffer based IO operations on this filehandle.
8157      *
8158      * This means we can bypass a lot of subcalls and process
8159      * the buffer directly, it also means we know the upper bound
8160      * on the amount of data we might read of the current buffer
8161      * into our sv. Knowing this allows us to preallocate the pv
8162      * to be able to hold that maximum, which allows us to simplify
8163      * a lot of logic. */
8164
8165     /*
8166      * We're going to steal some values from the stdio struct
8167      * and put EVERYTHING in the innermost loop into registers.
8168      */
8169     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8170     STRLEN bpx;         /* length of the data in the target sv
8171                            used to fix pointers after a SvGROW */
8172     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8173                            of data left in the read-ahead buffer.
8174                            If 0 then the pv buffer can hold the full
8175                            amount left, otherwise this is the amount it
8176                            can hold. */
8177
8178 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8179     /* An ungetc()d char is handled separately from the regular
8180      * buffer, so we getc() it back out and stuff it in the buffer.
8181      */
8182     i = PerlIO_getc(fp);
8183     if (i == EOF) return 0;
8184     *(--((*fp)->_ptr)) = (unsigned char) i;
8185     (*fp)->_cnt++;
8186 #endif
8187
8188     /* Here is some breathtakingly efficient cheating */
8189
8190     /* When you read the following logic resist the urge to think
8191      * of record separators that are 1 byte long. They are an
8192      * uninteresting special (simple) case.
8193      *
8194      * Instead think of record separators which are at least 2 bytes
8195      * long, and keep in mind that we need to deal with such
8196      * separators when they cross a read-ahead buffer boundary.
8197      *
8198      * Also consider that we need to gracefully deal with separators
8199      * that may be longer than a single read ahead buffer.
8200      *
8201      * Lastly do not forget we want to copy the delimiter as well. We
8202      * are copying all data in the file _up_to_and_including_ the separator
8203      * itself.
8204      *
8205      * Now that you have all that in mind here is what is happening below:
8206      *
8207      * 1. When we first enter the loop we do some memory book keeping to see
8208      * how much free space there is in the target SV. (This sub assumes that
8209      * it is operating on the same SV most of the time via $_ and that it is
8210      * going to be able to reuse the same pv buffer each call.) If there is
8211      * "enough" room then we set "shortbuffered" to how much space there is
8212      * and start reading forward.
8213      *
8214      * 2. When we scan forward we copy from the read-ahead buffer to the target
8215      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8216      * and the end of the of pv, as well as for the "rslast", which is the last
8217      * char of the separator.
8218      *
8219      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8220      * (which has a "complete" record up to the point we saw rslast) and check
8221      * it to see if it matches the separator. If it does we are done. If it doesn't
8222      * we continue on with the scan/copy.
8223      *
8224      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8225      * the IO system to read the next buffer. We do this by doing a getc(), which
8226      * returns a single char read (or EOF), and prefills the buffer, and also
8227      * allows us to find out how full the buffer is.  We use this information to
8228      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8229      * the returned single char into the target sv, and then go back into scan
8230      * forward mode.
8231      *
8232      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8233      * remaining space in the read-buffer.
8234      *
8235      * Note that this code despite its twisty-turny nature is pretty darn slick.
8236      * It manages single byte separators, multi-byte cross boundary separators,
8237      * and cross-read-buffer separators cleanly and efficiently at the cost
8238      * of potentially greatly overallocating the target SV.
8239      *
8240      * Yves
8241      */
8242
8243
8244     /* get the number of bytes remaining in the read-ahead buffer
8245      * on first call on a given fp this will return 0.*/
8246     cnt = PerlIO_get_cnt(fp);
8247
8248     /* make sure we have the room */
8249     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8250         /* Not room for all of it
8251            if we are looking for a separator and room for some
8252          */
8253         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8254             /* just process what we have room for */
8255             shortbuffered = cnt - SvLEN(sv) + append + 1;
8256             cnt -= shortbuffered;
8257         }
8258         else {
8259             /* ensure that the target sv has enough room to hold
8260              * the rest of the read-ahead buffer */
8261             shortbuffered = 0;
8262             /* remember that cnt can be negative */
8263             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8264         }
8265     }
8266     else {
8267         /* we have enough room to hold the full buffer, lets scream */
8268         shortbuffered = 0;
8269     }
8270
8271     /* extract the pointer to sv's string buffer, offset by append as necessary */
8272     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8273     /* extract the point to the read-ahead buffer */
8274     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8275
8276     /* some trace debug output */
8277     DEBUG_P(PerlIO_printf(Perl_debug_log,
8278         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8279     DEBUG_P(PerlIO_printf(Perl_debug_log,
8280         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8281          UVuf"\n",
8282                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8283                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8284
8285     for (;;) {
8286       screamer:
8287         /* if there is stuff left in the read-ahead buffer */
8288         if (cnt > 0) {
8289             /* if there is a separator */
8290             if (rslen) {
8291                 /* loop until we hit the end of the read-ahead buffer */
8292                 while (cnt > 0) {                    /* this     |  eat */
8293                     /* scan forward copying and searching for rslast as we go */
8294                     cnt--;
8295                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8296                         goto thats_all_folks;        /* screams  |  sed :-) */
8297                 }
8298             }
8299             else {
8300                 /* no separator, slurp the full buffer */
8301                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8302                 bp += cnt;                           /* screams  |  dust */
8303                 ptr += cnt;                          /* louder   |  sed :-) */
8304                 cnt = 0;
8305                 assert (!shortbuffered);
8306                 goto cannot_be_shortbuffered;
8307             }
8308         }
8309         
8310         if (shortbuffered) {            /* oh well, must extend */
8311             /* we didnt have enough room to fit the line into the target buffer
8312              * so we must extend the target buffer and keep going */
8313             cnt = shortbuffered;
8314             shortbuffered = 0;
8315             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8316             SvCUR_set(sv, bpx);
8317             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8318             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8319             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8320             continue;
8321         }
8322
8323     cannot_be_shortbuffered:
8324         /* we need to refill the read-ahead buffer if possible */
8325
8326         DEBUG_P(PerlIO_printf(Perl_debug_log,
8327                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8328                               PTR2UV(ptr),(IV)cnt));
8329         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8330
8331         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8332            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8333             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8334             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8335
8336         /*
8337             call PerlIO_getc() to let it prefill the lookahead buffer
8338
8339             This used to call 'filbuf' in stdio form, but as that behaves like
8340             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8341             another abstraction.
8342
8343             Note we have to deal with the char in 'i' if we are not at EOF
8344         */
8345         i   = PerlIO_getc(fp);          /* get more characters */
8346
8347         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8348            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8349             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8350             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8351
8352         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8353         cnt = PerlIO_get_cnt(fp);
8354         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8355         DEBUG_P(PerlIO_printf(Perl_debug_log,
8356             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8357             PTR2UV(ptr),(IV)cnt));
8358
8359         if (i == EOF)                   /* all done for ever? */
8360             goto thats_really_all_folks;
8361
8362         /* make sure we have enough space in the target sv */
8363         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8364         SvCUR_set(sv, bpx);
8365         SvGROW(sv, bpx + cnt + 2);
8366         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8367
8368         /* copy of the char we got from getc() */
8369         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8370
8371         /* make sure we deal with the i being the last character of a separator */
8372         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8373             goto thats_all_folks;
8374     }
8375
8376 thats_all_folks:
8377     /* check if we have actually found the separator - only really applies
8378      * when rslen > 1 */
8379     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8380           memNE((char*)bp - rslen, rsptr, rslen))
8381         goto screamer;                          /* go back to the fray */
8382 thats_really_all_folks:
8383     if (shortbuffered)
8384         cnt += shortbuffered;
8385         DEBUG_P(PerlIO_printf(Perl_debug_log,
8386              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8387     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8388     DEBUG_P(PerlIO_printf(Perl_debug_log,
8389         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8390         "\n",
8391         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8392         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8393     *bp = '\0';
8394     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8395     DEBUG_P(PerlIO_printf(Perl_debug_log,
8396         "Screamer: done, len=%ld, string=|%.*s|\n",
8397         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8398     }
8399    else
8400     {
8401        /*The big, slow, and stupid way. */
8402 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8403         STDCHAR *buf = NULL;
8404         Newx(buf, 8192, STDCHAR);
8405         assert(buf);
8406 #else
8407         STDCHAR buf[8192];
8408 #endif
8409
8410 screamer2:
8411         if (rslen) {
8412             const STDCHAR * const bpe = buf + sizeof(buf);
8413             bp = buf;
8414             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8415                 ; /* keep reading */
8416             cnt = bp - buf;
8417         }
8418         else {
8419             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8420             /* Accommodate broken VAXC compiler, which applies U8 cast to
8421              * both args of ?: operator, causing EOF to change into 255
8422              */
8423             if (cnt > 0)
8424                  i = (U8)buf[cnt - 1];
8425             else
8426                  i = EOF;
8427         }
8428
8429         if (cnt < 0)
8430             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8431         if (append)
8432             sv_catpvn_nomg(sv, (char *) buf, cnt);
8433         else
8434             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8435
8436         if (i != EOF &&                 /* joy */
8437             (!rslen ||
8438              SvCUR(sv) < rslen ||
8439              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8440         {
8441             append = -1;
8442             /*
8443              * If we're reading from a TTY and we get a short read,
8444              * indicating that the user hit his EOF character, we need
8445              * to notice it now, because if we try to read from the TTY
8446              * again, the EOF condition will disappear.
8447              *
8448              * The comparison of cnt to sizeof(buf) is an optimization
8449              * that prevents unnecessary calls to feof().
8450              *
8451              * - jik 9/25/96
8452              */
8453             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8454                 goto screamer2;
8455         }
8456
8457 #ifdef USE_HEAP_INSTEAD_OF_STACK
8458         Safefree(buf);
8459 #endif
8460     }
8461
8462     if (rspara) {               /* have to do this both before and after */
8463         while (i != EOF) {      /* to make sure file boundaries work right */
8464             i = PerlIO_getc(fp);
8465             if (i != '\n') {
8466                 PerlIO_ungetc(fp,i);
8467                 break;
8468             }
8469         }
8470     }
8471
8472     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8473 }
8474
8475 /*
8476 =for apidoc sv_inc
8477
8478 Auto-increment of the value in the SV, doing string to numeric conversion
8479 if necessary.  Handles 'get' magic and operator overloading.
8480
8481 =cut
8482 */
8483
8484 void
8485 Perl_sv_inc(pTHX_ SV *const sv)
8486 {
8487     if (!sv)
8488         return;
8489     SvGETMAGIC(sv);
8490     sv_inc_nomg(sv);
8491 }
8492
8493 /*
8494 =for apidoc sv_inc_nomg
8495
8496 Auto-increment of the value in the SV, doing string to numeric conversion
8497 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8498
8499 =cut
8500 */
8501
8502 void
8503 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8504 {
8505     char *d;
8506     int flags;
8507
8508     if (!sv)
8509         return;
8510     if (SvTHINKFIRST(sv)) {
8511         if (SvREADONLY(sv)) {
8512                 Perl_croak_no_modify();
8513         }
8514         if (SvROK(sv)) {
8515             IV i;
8516             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8517                 return;
8518             i = PTR2IV(SvRV(sv));
8519             sv_unref(sv);
8520             sv_setiv(sv, i);
8521         }
8522         else sv_force_normal_flags(sv, 0);
8523     }
8524     flags = SvFLAGS(sv);
8525     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8526         /* It's (privately or publicly) a float, but not tested as an
8527            integer, so test it to see. */
8528         (void) SvIV(sv);
8529         flags = SvFLAGS(sv);
8530     }
8531     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8532         /* It's publicly an integer, or privately an integer-not-float */
8533 #ifdef PERL_PRESERVE_IVUV
8534       oops_its_int:
8535 #endif
8536         if (SvIsUV(sv)) {
8537             if (SvUVX(sv) == UV_MAX)
8538                 sv_setnv(sv, UV_MAX_P1);
8539             else
8540                 (void)SvIOK_only_UV(sv);
8541                 SvUV_set(sv, SvUVX(sv) + 1);
8542         } else {
8543             if (SvIVX(sv) == IV_MAX)
8544                 sv_setuv(sv, (UV)IV_MAX + 1);
8545             else {
8546                 (void)SvIOK_only(sv);
8547                 SvIV_set(sv, SvIVX(sv) + 1);
8548             }   
8549         }
8550         return;
8551     }
8552     if (flags & SVp_NOK) {
8553         const NV was = SvNVX(sv);
8554         if (NV_OVERFLOWS_INTEGERS_AT &&
8555             was >= NV_OVERFLOWS_INTEGERS_AT) {
8556             /* diag_listed_as: Lost precision when %s %f by 1 */
8557             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8558                            "Lost precision when incrementing %" NVff " by 1",
8559                            was);
8560         }
8561         (void)SvNOK_only(sv);
8562         SvNV_set(sv, was + 1.0);
8563         return;
8564     }
8565
8566     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8567         if ((flags & SVTYPEMASK) < SVt_PVIV)
8568             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8569         (void)SvIOK_only(sv);
8570         SvIV_set(sv, 1);
8571         return;
8572     }
8573     d = SvPVX(sv);
8574     while (isALPHA(*d)) d++;
8575     while (isDIGIT(*d)) d++;
8576     if (d < SvEND(sv)) {
8577         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8578 #ifdef PERL_PRESERVE_IVUV
8579         /* Got to punt this as an integer if needs be, but we don't issue
8580            warnings. Probably ought to make the sv_iv_please() that does
8581            the conversion if possible, and silently.  */
8582         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8583             /* Need to try really hard to see if it's an integer.
8584                9.22337203685478e+18 is an integer.
8585                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8586                so $a="9.22337203685478e+18"; $a+0; $a++
8587                needs to be the same as $a="9.22337203685478e+18"; $a++
8588                or we go insane. */
8589         
8590             (void) sv_2iv(sv);
8591             if (SvIOK(sv))
8592                 goto oops_its_int;
8593
8594             /* sv_2iv *should* have made this an NV */
8595             if (flags & SVp_NOK) {
8596                 (void)SvNOK_only(sv);
8597                 SvNV_set(sv, SvNVX(sv) + 1.0);
8598                 return;
8599             }
8600             /* I don't think we can get here. Maybe I should assert this
8601                And if we do get here I suspect that sv_setnv will croak. NWC
8602                Fall through. */
8603             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8604                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8605         }
8606 #endif /* PERL_PRESERVE_IVUV */
8607         if (!numtype && ckWARN(WARN_NUMERIC))
8608             not_incrementable(sv);
8609         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8610         return;
8611     }
8612     d--;
8613     while (d >= SvPVX_const(sv)) {
8614         if (isDIGIT(*d)) {
8615             if (++*d <= '9')
8616                 return;
8617             *(d--) = '0';
8618         }
8619         else {
8620 #ifdef EBCDIC
8621             /* MKS: The original code here died if letters weren't consecutive.
8622              * at least it didn't have to worry about non-C locales.  The
8623              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8624              * arranged in order (although not consecutively) and that only
8625              * [A-Za-z] are accepted by isALPHA in the C locale.
8626              */
8627             if (isALPHA_FOLD_NE(*d, 'z')) {
8628                 do { ++*d; } while (!isALPHA(*d));
8629                 return;
8630             }
8631             *(d--) -= 'z' - 'a';
8632 #else
8633             ++*d;
8634             if (isALPHA(*d))
8635                 return;
8636             *(d--) -= 'z' - 'a' + 1;
8637 #endif
8638         }
8639     }
8640     /* oh,oh, the number grew */
8641     SvGROW(sv, SvCUR(sv) + 2);
8642     SvCUR_set(sv, SvCUR(sv) + 1);
8643     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8644         *d = d[-1];
8645     if (isDIGIT(d[1]))
8646         *d = '1';
8647     else
8648         *d = d[1];
8649 }
8650
8651 /*
8652 =for apidoc sv_dec
8653
8654 Auto-decrement of the value in the SV, doing string to numeric conversion
8655 if necessary.  Handles 'get' magic and operator overloading.
8656
8657 =cut
8658 */
8659
8660 void
8661 Perl_sv_dec(pTHX_ SV *const sv)
8662 {
8663     if (!sv)
8664         return;
8665     SvGETMAGIC(sv);
8666     sv_dec_nomg(sv);
8667 }
8668
8669 /*
8670 =for apidoc sv_dec_nomg
8671
8672 Auto-decrement of the value in the SV, doing string to numeric conversion
8673 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8674
8675 =cut
8676 */
8677
8678 void
8679 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8680 {
8681     int flags;
8682
8683     if (!sv)
8684         return;
8685     if (SvTHINKFIRST(sv)) {
8686         if (SvREADONLY(sv)) {
8687                 Perl_croak_no_modify();
8688         }
8689         if (SvROK(sv)) {
8690             IV i;
8691             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8692                 return;
8693             i = PTR2IV(SvRV(sv));
8694             sv_unref(sv);
8695             sv_setiv(sv, i);
8696         }
8697         else sv_force_normal_flags(sv, 0);
8698     }
8699     /* Unlike sv_inc we don't have to worry about string-never-numbers
8700        and keeping them magic. But we mustn't warn on punting */
8701     flags = SvFLAGS(sv);
8702     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8703         /* It's publicly an integer, or privately an integer-not-float */
8704 #ifdef PERL_PRESERVE_IVUV
8705       oops_its_int:
8706 #endif
8707         if (SvIsUV(sv)) {
8708             if (SvUVX(sv) == 0) {
8709                 (void)SvIOK_only(sv);
8710                 SvIV_set(sv, -1);
8711             }
8712             else {
8713                 (void)SvIOK_only_UV(sv);
8714                 SvUV_set(sv, SvUVX(sv) - 1);
8715             }   
8716         } else {
8717             if (SvIVX(sv) == IV_MIN) {
8718                 sv_setnv(sv, (NV)IV_MIN);
8719                 goto oops_its_num;
8720             }
8721             else {
8722                 (void)SvIOK_only(sv);
8723                 SvIV_set(sv, SvIVX(sv) - 1);
8724             }   
8725         }
8726         return;
8727     }
8728     if (flags & SVp_NOK) {
8729     oops_its_num:
8730         {
8731             const NV was = SvNVX(sv);
8732             if (NV_OVERFLOWS_INTEGERS_AT &&
8733                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8734                 /* diag_listed_as: Lost precision when %s %f by 1 */
8735                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8736                                "Lost precision when decrementing %" NVff " by 1",
8737                                was);
8738             }
8739             (void)SvNOK_only(sv);
8740             SvNV_set(sv, was - 1.0);
8741             return;
8742         }
8743     }
8744     if (!(flags & SVp_POK)) {
8745         if ((flags & SVTYPEMASK) < SVt_PVIV)
8746             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8747         SvIV_set(sv, -1);
8748         (void)SvIOK_only(sv);
8749         return;
8750     }
8751 #ifdef PERL_PRESERVE_IVUV
8752     {
8753         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8754         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8755             /* Need to try really hard to see if it's an integer.
8756                9.22337203685478e+18 is an integer.
8757                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8758                so $a="9.22337203685478e+18"; $a+0; $a--
8759                needs to be the same as $a="9.22337203685478e+18"; $a--
8760                or we go insane. */
8761         
8762             (void) sv_2iv(sv);
8763             if (SvIOK(sv))
8764                 goto oops_its_int;
8765
8766             /* sv_2iv *should* have made this an NV */
8767             if (flags & SVp_NOK) {
8768                 (void)SvNOK_only(sv);
8769                 SvNV_set(sv, SvNVX(sv) - 1.0);
8770                 return;
8771             }
8772             /* I don't think we can get here. Maybe I should assert this
8773                And if we do get here I suspect that sv_setnv will croak. NWC
8774                Fall through. */
8775             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8776                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8777         }
8778     }
8779 #endif /* PERL_PRESERVE_IVUV */
8780     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8781 }
8782
8783 /* this define is used to eliminate a chunk of duplicated but shared logic
8784  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8785  * used anywhere but here - yves
8786  */
8787 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8788     STMT_START {      \
8789         EXTEND_MORTAL(1); \
8790         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8791     } STMT_END
8792
8793 /*
8794 =for apidoc sv_mortalcopy
8795
8796 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8797 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8798 explicit call to FREETMPS, or by an implicit call at places such as
8799 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8800
8801 =cut
8802 */
8803
8804 /* Make a string that will exist for the duration of the expression
8805  * evaluation.  Actually, it may have to last longer than that, but
8806  * hopefully we won't free it until it has been assigned to a
8807  * permanent location. */
8808
8809 SV *
8810 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8811 {
8812     SV *sv;
8813
8814     if (flags & SV_GMAGIC)
8815         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8816     new_SV(sv);
8817     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8818     PUSH_EXTEND_MORTAL__SV_C(sv);
8819     SvTEMP_on(sv);
8820     return sv;
8821 }
8822
8823 /*
8824 =for apidoc sv_newmortal
8825
8826 Creates a new null SV which is mortal.  The reference count of the SV is
8827 set to 1.  It will be destroyed "soon", either by an explicit call to
8828 FREETMPS, or by an implicit call at places such as statement boundaries.
8829 See also C<sv_mortalcopy> and C<sv_2mortal>.
8830
8831 =cut
8832 */
8833
8834 SV *
8835 Perl_sv_newmortal(pTHX)
8836 {
8837     SV *sv;
8838
8839     new_SV(sv);
8840     SvFLAGS(sv) = SVs_TEMP;
8841     PUSH_EXTEND_MORTAL__SV_C(sv);
8842     return sv;
8843 }
8844
8845
8846 /*
8847 =for apidoc newSVpvn_flags
8848
8849 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8850 characters) into it.  The reference count for the
8851 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8852 string.  You are responsible for ensuring that the source string is at least
8853 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8854 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8855 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8856 returning.  If C<SVf_UTF8> is set, C<s>
8857 is considered to be in UTF-8 and the
8858 C<SVf_UTF8> flag will be set on the new SV.
8859 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8860
8861     #define newSVpvn_utf8(s, len, u)                    \
8862         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8863
8864 =cut
8865 */
8866
8867 SV *
8868 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8869 {
8870     SV *sv;
8871
8872     /* All the flags we don't support must be zero.
8873        And we're new code so I'm going to assert this from the start.  */
8874     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8875     new_SV(sv);
8876     sv_setpvn(sv,s,len);
8877
8878     /* This code used to do a sv_2mortal(), however we now unroll the call to
8879      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8880      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8881      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8882      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8883      * means that we eliminate quite a few steps than it looks - Yves
8884      * (explaining patch by gfx) */
8885
8886     SvFLAGS(sv) |= flags;
8887
8888     if(flags & SVs_TEMP){
8889         PUSH_EXTEND_MORTAL__SV_C(sv);
8890     }
8891
8892     return sv;
8893 }
8894
8895 /*
8896 =for apidoc sv_2mortal
8897
8898 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8899 by an explicit call to FREETMPS, or by an implicit call at places such as
8900 statement boundaries.  SvTEMP() is turned on which means that the SV's
8901 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8902 and C<sv_mortalcopy>.
8903
8904 =cut
8905 */
8906
8907 SV *
8908 Perl_sv_2mortal(pTHX_ SV *const sv)
8909 {
8910     dVAR;
8911     if (!sv)
8912         return NULL;
8913     if (SvIMMORTAL(sv))
8914         return sv;
8915     PUSH_EXTEND_MORTAL__SV_C(sv);
8916     SvTEMP_on(sv);
8917     return sv;
8918 }
8919
8920 /*
8921 =for apidoc newSVpv
8922
8923 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8924 characters) into it.  The reference count for the
8925 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8926 strlen(), (which means if you use this option, that C<s> can't have embedded
8927 C<NUL> characters and has to have a terminating C<NUL> byte).
8928
8929 For efficiency, consider using C<newSVpvn> instead.
8930
8931 =cut
8932 */
8933
8934 SV *
8935 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8936 {
8937     SV *sv;
8938
8939     new_SV(sv);
8940     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8941     return sv;
8942 }
8943
8944 /*
8945 =for apidoc newSVpvn
8946
8947 Creates a new SV and copies a string into it, which may contain C<NUL> characters
8948 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8949 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8950 are responsible for ensuring that the source buffer is at least
8951 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8952 undefined.
8953
8954 =cut
8955 */
8956
8957 SV *
8958 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8959 {
8960     SV *sv;
8961     new_SV(sv);
8962     sv_setpvn(sv,buffer,len);
8963     return sv;
8964 }
8965
8966 /*
8967 =for apidoc newSVhek
8968
8969 Creates a new SV from the hash key structure.  It will generate scalars that
8970 point to the shared string table where possible.  Returns a new (undefined)
8971 SV if the hek is NULL.
8972
8973 =cut
8974 */
8975
8976 SV *
8977 Perl_newSVhek(pTHX_ const HEK *const hek)
8978 {
8979     if (!hek) {
8980         SV *sv;
8981
8982         new_SV(sv);
8983         return sv;
8984     }
8985
8986     if (HEK_LEN(hek) == HEf_SVKEY) {
8987         return newSVsv(*(SV**)HEK_KEY(hek));
8988     } else {
8989         const int flags = HEK_FLAGS(hek);
8990         if (flags & HVhek_WASUTF8) {
8991             /* Trouble :-)
8992                Andreas would like keys he put in as utf8 to come back as utf8
8993             */
8994             STRLEN utf8_len = HEK_LEN(hek);
8995             SV * const sv = newSV_type(SVt_PV);
8996             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8997             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8998             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8999             SvUTF8_on (sv);
9000             return sv;
9001         } else if (flags & HVhek_UNSHARED) {
9002             /* A hash that isn't using shared hash keys has to have
9003                the flag in every key so that we know not to try to call
9004                share_hek_hek on it.  */
9005
9006             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9007             if (HEK_UTF8(hek))
9008                 SvUTF8_on (sv);
9009             return sv;
9010         }
9011         /* This will be overwhelminly the most common case.  */
9012         {
9013             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9014                more efficient than sharepvn().  */
9015             SV *sv;
9016
9017             new_SV(sv);
9018             sv_upgrade(sv, SVt_PV);
9019             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9020             SvCUR_set(sv, HEK_LEN(hek));
9021             SvLEN_set(sv, 0);
9022             SvIsCOW_on(sv);
9023             SvPOK_on(sv);
9024             if (HEK_UTF8(hek))
9025                 SvUTF8_on(sv);
9026             return sv;
9027         }
9028     }
9029 }
9030
9031 /*
9032 =for apidoc newSVpvn_share
9033
9034 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9035 table.  If the string does not already exist in the table, it is
9036 created first.  Turns on the SvIsCOW flag (or READONLY
9037 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9038 is non-zero, that value is used; otherwise the hash is computed.
9039 The string's hash can later be retrieved from the SV
9040 with the C<SvSHARED_HASH()> macro.  The idea here is
9041 that as the string table is used for shared hash keys these strings will have
9042 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9043
9044 =cut
9045 */
9046
9047 SV *
9048 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9049 {
9050     dVAR;
9051     SV *sv;
9052     bool is_utf8 = FALSE;
9053     const char *const orig_src = src;
9054
9055     if (len < 0) {
9056         STRLEN tmplen = -len;
9057         is_utf8 = TRUE;
9058         /* See the note in hv.c:hv_fetch() --jhi */
9059         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9060         len = tmplen;
9061     }
9062     if (!hash)
9063         PERL_HASH(hash, src, len);
9064     new_SV(sv);
9065     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9066        changes here, update it there too.  */
9067     sv_upgrade(sv, SVt_PV);
9068     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9069     SvCUR_set(sv, len);
9070     SvLEN_set(sv, 0);
9071     SvIsCOW_on(sv);
9072     SvPOK_on(sv);
9073     if (is_utf8)
9074         SvUTF8_on(sv);
9075     if (src != orig_src)
9076         Safefree(src);
9077     return sv;
9078 }
9079
9080 /*
9081 =for apidoc newSVpv_share
9082
9083 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9084 string/length pair.
9085
9086 =cut
9087 */
9088
9089 SV *
9090 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9091 {
9092     return newSVpvn_share(src, strlen(src), hash);
9093 }
9094
9095 #if defined(PERL_IMPLICIT_CONTEXT)
9096
9097 /* pTHX_ magic can't cope with varargs, so this is a no-context
9098  * version of the main function, (which may itself be aliased to us).
9099  * Don't access this version directly.
9100  */
9101
9102 SV *
9103 Perl_newSVpvf_nocontext(const char *const pat, ...)
9104 {
9105     dTHX;
9106     SV *sv;
9107     va_list args;
9108
9109     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9110
9111     va_start(args, pat);
9112     sv = vnewSVpvf(pat, &args);
9113     va_end(args);
9114     return sv;
9115 }
9116 #endif
9117
9118 /*
9119 =for apidoc newSVpvf
9120
9121 Creates a new SV and initializes it with the string formatted like
9122 C<sprintf>.
9123
9124 =cut
9125 */
9126
9127 SV *
9128 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9129 {
9130     SV *sv;
9131     va_list args;
9132
9133     PERL_ARGS_ASSERT_NEWSVPVF;
9134
9135     va_start(args, pat);
9136     sv = vnewSVpvf(pat, &args);
9137     va_end(args);
9138     return sv;
9139 }
9140
9141 /* backend for newSVpvf() and newSVpvf_nocontext() */
9142
9143 SV *
9144 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9145 {
9146     SV *sv;
9147
9148     PERL_ARGS_ASSERT_VNEWSVPVF;
9149
9150     new_SV(sv);
9151     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9152     return sv;
9153 }
9154
9155 /*
9156 =for apidoc newSVnv
9157
9158 Creates a new SV and copies a floating point value into it.
9159 The reference count for the SV is set to 1.
9160
9161 =cut
9162 */
9163
9164 SV *
9165 Perl_newSVnv(pTHX_ const NV n)
9166 {
9167     SV *sv;
9168
9169     new_SV(sv);
9170     sv_setnv(sv,n);
9171     return sv;
9172 }
9173
9174 /*
9175 =for apidoc newSViv
9176
9177 Creates a new SV and copies an integer into it.  The reference count for the
9178 SV is set to 1.
9179
9180 =cut
9181 */
9182
9183 SV *
9184 Perl_newSViv(pTHX_ const IV i)
9185 {
9186     SV *sv;
9187
9188     new_SV(sv);
9189     sv_setiv(sv,i);
9190     return sv;
9191 }
9192
9193 /*
9194 =for apidoc newSVuv
9195
9196 Creates a new SV and copies an unsigned integer into it.
9197 The reference count for the SV is set to 1.
9198
9199 =cut
9200 */
9201
9202 SV *
9203 Perl_newSVuv(pTHX_ const UV u)
9204 {
9205     SV *sv;
9206
9207     new_SV(sv);
9208     sv_setuv(sv,u);
9209     return sv;
9210 }
9211
9212 /*
9213 =for apidoc newSV_type
9214
9215 Creates a new SV, of the type specified.  The reference count for the new SV
9216 is set to 1.
9217
9218 =cut
9219 */
9220
9221 SV *
9222 Perl_newSV_type(pTHX_ const svtype type)
9223 {
9224     SV *sv;
9225
9226     new_SV(sv);
9227     sv_upgrade(sv, type);
9228     return sv;
9229 }
9230
9231 /*
9232 =for apidoc newRV_noinc
9233
9234 Creates an RV wrapper for an SV.  The reference count for the original
9235 SV is B<not> incremented.
9236
9237 =cut
9238 */
9239
9240 SV *
9241 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9242 {
9243     SV *sv = newSV_type(SVt_IV);
9244
9245     PERL_ARGS_ASSERT_NEWRV_NOINC;
9246
9247     SvTEMP_off(tmpRef);
9248     SvRV_set(sv, tmpRef);
9249     SvROK_on(sv);
9250     return sv;
9251 }
9252
9253 /* newRV_inc is the official function name to use now.
9254  * newRV_inc is in fact #defined to newRV in sv.h
9255  */
9256
9257 SV *
9258 Perl_newRV(pTHX_ SV *const sv)
9259 {
9260     PERL_ARGS_ASSERT_NEWRV;
9261
9262     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9263 }
9264
9265 /*
9266 =for apidoc newSVsv
9267
9268 Creates a new SV which is an exact duplicate of the original SV.
9269 (Uses C<sv_setsv>.)
9270
9271 =cut
9272 */
9273
9274 SV *
9275 Perl_newSVsv(pTHX_ SV *const old)
9276 {
9277     SV *sv;
9278
9279     if (!old)
9280         return NULL;
9281     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9282         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9283         return NULL;
9284     }
9285     /* Do this here, otherwise we leak the new SV if this croaks. */
9286     SvGETMAGIC(old);
9287     new_SV(sv);
9288     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9289        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9290     sv_setsv_flags(sv, old, SV_NOSTEAL);
9291     return sv;
9292 }
9293
9294 /*
9295 =for apidoc sv_reset
9296
9297 Underlying implementation for the C<reset> Perl function.
9298 Note that the perl-level function is vaguely deprecated.
9299
9300 =cut
9301 */
9302
9303 void
9304 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9305 {
9306     PERL_ARGS_ASSERT_SV_RESET;
9307
9308     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9309 }
9310
9311 void
9312 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9313 {
9314     char todo[PERL_UCHAR_MAX+1];
9315     const char *send;
9316
9317     if (!stash || SvTYPE(stash) != SVt_PVHV)
9318         return;
9319
9320     if (!s) {           /* reset ?? searches */
9321         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9322         if (mg) {
9323             const U32 count = mg->mg_len / sizeof(PMOP**);
9324             PMOP **pmp = (PMOP**) mg->mg_ptr;
9325             PMOP *const *const end = pmp + count;
9326
9327             while (pmp < end) {
9328 #ifdef USE_ITHREADS
9329                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9330 #else
9331                 (*pmp)->op_pmflags &= ~PMf_USED;
9332 #endif
9333                 ++pmp;
9334             }
9335         }
9336         return;
9337     }
9338
9339     /* reset variables */
9340
9341     if (!HvARRAY(stash))
9342         return;
9343
9344     Zero(todo, 256, char);
9345     send = s + len;
9346     while (s < send) {
9347         I32 max;
9348         I32 i = (unsigned char)*s;
9349         if (s[1] == '-') {
9350             s += 2;
9351         }
9352         max = (unsigned char)*s++;
9353         for ( ; i <= max; i++) {
9354             todo[i] = 1;
9355         }
9356         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9357             HE *entry;
9358             for (entry = HvARRAY(stash)[i];
9359                  entry;
9360                  entry = HeNEXT(entry))
9361             {
9362                 GV *gv;
9363                 SV *sv;
9364
9365                 if (!todo[(U8)*HeKEY(entry)])
9366                     continue;
9367                 gv = MUTABLE_GV(HeVAL(entry));
9368                 sv = GvSV(gv);
9369                 if (sv && !SvREADONLY(sv)) {
9370                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9371                     if (!isGV(sv)) SvOK_off(sv);
9372                 }
9373                 if (GvAV(gv)) {
9374                     av_clear(GvAV(gv));
9375                 }
9376                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9377                     hv_clear(GvHV(gv));
9378                 }
9379             }
9380         }
9381     }
9382 }
9383
9384 /*
9385 =for apidoc sv_2io
9386
9387 Using various gambits, try to get an IO from an SV: the IO slot if its a
9388 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9389 named after the PV if we're a string.
9390
9391 'Get' magic is ignored on the sv passed in, but will be called on
9392 C<SvRV(sv)> if sv is an RV.
9393
9394 =cut
9395 */
9396
9397 IO*
9398 Perl_sv_2io(pTHX_ SV *const sv)
9399 {
9400     IO* io;
9401     GV* gv;
9402
9403     PERL_ARGS_ASSERT_SV_2IO;
9404
9405     switch (SvTYPE(sv)) {
9406     case SVt_PVIO:
9407         io = MUTABLE_IO(sv);
9408         break;
9409     case SVt_PVGV:
9410     case SVt_PVLV:
9411         if (isGV_with_GP(sv)) {
9412             gv = MUTABLE_GV(sv);
9413             io = GvIO(gv);
9414             if (!io)
9415                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9416                                     HEKfARG(GvNAME_HEK(gv)));
9417             break;
9418         }
9419         /* FALLTHROUGH */
9420     default:
9421         if (!SvOK(sv))
9422             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9423         if (SvROK(sv)) {
9424             SvGETMAGIC(SvRV(sv));
9425             return sv_2io(SvRV(sv));
9426         }
9427         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9428         if (gv)
9429             io = GvIO(gv);
9430         else
9431             io = 0;
9432         if (!io) {
9433             SV *newsv = sv;
9434             if (SvGMAGICAL(sv)) {
9435                 newsv = sv_newmortal();
9436                 sv_setsv_nomg(newsv, sv);
9437             }
9438             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9439         }
9440         break;
9441     }
9442     return io;
9443 }
9444
9445 /*
9446 =for apidoc sv_2cv
9447
9448 Using various gambits, try to get a CV from an SV; in addition, try if
9449 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9450 The flags in C<lref> are passed to gv_fetchsv.
9451
9452 =cut
9453 */
9454
9455 CV *
9456 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9457 {
9458     GV *gv = NULL;
9459     CV *cv = NULL;
9460
9461     PERL_ARGS_ASSERT_SV_2CV;
9462
9463     if (!sv) {
9464         *st = NULL;
9465         *gvp = NULL;
9466         return NULL;
9467     }
9468     switch (SvTYPE(sv)) {
9469     case SVt_PVCV:
9470         *st = CvSTASH(sv);
9471         *gvp = NULL;
9472         return MUTABLE_CV(sv);
9473     case SVt_PVHV:
9474     case SVt_PVAV:
9475         *st = NULL;
9476         *gvp = NULL;
9477         return NULL;
9478     default:
9479         SvGETMAGIC(sv);
9480         if (SvROK(sv)) {
9481             if (SvAMAGIC(sv))
9482                 sv = amagic_deref_call(sv, to_cv_amg);
9483
9484             sv = SvRV(sv);
9485             if (SvTYPE(sv) == SVt_PVCV) {
9486                 cv = MUTABLE_CV(sv);
9487                 *gvp = NULL;
9488                 *st = CvSTASH(cv);
9489                 return cv;
9490             }
9491             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9492                 gv = MUTABLE_GV(sv);
9493             else
9494                 Perl_croak(aTHX_ "Not a subroutine reference");
9495         }
9496         else if (isGV_with_GP(sv)) {
9497             gv = MUTABLE_GV(sv);
9498         }
9499         else {
9500             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9501         }
9502         *gvp = gv;
9503         if (!gv) {
9504             *st = NULL;
9505             return NULL;
9506         }
9507         /* Some flags to gv_fetchsv mean don't really create the GV  */
9508         if (!isGV_with_GP(gv)) {
9509             *st = NULL;
9510             return NULL;
9511         }
9512         *st = GvESTASH(gv);
9513         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9514             /* XXX this is probably not what they think they're getting.
9515              * It has the same effect as "sub name;", i.e. just a forward
9516              * declaration! */
9517             newSTUB(gv,0);
9518         }
9519         return GvCVu(gv);
9520     }
9521 }
9522
9523 /*
9524 =for apidoc sv_true
9525
9526 Returns true if the SV has a true value by Perl's rules.
9527 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9528 instead use an in-line version.
9529
9530 =cut
9531 */
9532
9533 I32
9534 Perl_sv_true(pTHX_ SV *const sv)
9535 {
9536     if (!sv)
9537         return 0;
9538     if (SvPOK(sv)) {
9539         const XPV* const tXpv = (XPV*)SvANY(sv);
9540         if (tXpv &&
9541                 (tXpv->xpv_cur > 1 ||
9542                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9543             return 1;
9544         else
9545             return 0;
9546     }
9547     else {
9548         if (SvIOK(sv))
9549             return SvIVX(sv) != 0;
9550         else {
9551             if (SvNOK(sv))
9552                 return SvNVX(sv) != 0.0;
9553             else
9554                 return sv_2bool(sv);
9555         }
9556     }
9557 }
9558
9559 /*
9560 =for apidoc sv_pvn_force
9561
9562 Get a sensible string out of the SV somehow.
9563 A private implementation of the C<SvPV_force> macro for compilers which
9564 can't cope with complex macro expressions.  Always use the macro instead.
9565
9566 =for apidoc sv_pvn_force_flags
9567
9568 Get a sensible string out of the SV somehow.
9569 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9570 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9571 implemented in terms of this function.
9572 You normally want to use the various wrapper macros instead: see
9573 C<SvPV_force> and C<SvPV_force_nomg>
9574
9575 =cut
9576 */
9577
9578 char *
9579 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9580 {
9581     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9582
9583     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9584     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9585         sv_force_normal_flags(sv, 0);
9586
9587     if (SvPOK(sv)) {
9588         if (lp)
9589             *lp = SvCUR(sv);
9590     }
9591     else {
9592         char *s;
9593         STRLEN len;
9594  
9595         if (SvTYPE(sv) > SVt_PVLV
9596             || isGV_with_GP(sv))
9597             /* diag_listed_as: Can't coerce %s to %s in %s */
9598             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9599                 OP_DESC(PL_op));
9600         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9601         if (!s) {
9602           s = (char *)"";
9603         }
9604         if (lp)
9605             *lp = len;
9606
9607         if (SvTYPE(sv) < SVt_PV ||
9608             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9609             if (SvROK(sv))
9610                 sv_unref(sv);
9611             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9612             SvGROW(sv, len + 1);
9613             Move(s,SvPVX(sv),len,char);
9614             SvCUR_set(sv, len);
9615             SvPVX(sv)[len] = '\0';
9616         }
9617         if (!SvPOK(sv)) {
9618             SvPOK_on(sv);               /* validate pointer */
9619             SvTAINT(sv);
9620             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9621                                   PTR2UV(sv),SvPVX_const(sv)));
9622         }
9623     }
9624     (void)SvPOK_only_UTF8(sv);
9625     return SvPVX_mutable(sv);
9626 }
9627
9628 /*
9629 =for apidoc sv_pvbyten_force
9630
9631 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9632 instead.
9633
9634 =cut
9635 */
9636
9637 char *
9638 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9639 {
9640     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9641
9642     sv_pvn_force(sv,lp);
9643     sv_utf8_downgrade(sv,0);
9644     *lp = SvCUR(sv);
9645     return SvPVX(sv);
9646 }
9647
9648 /*
9649 =for apidoc sv_pvutf8n_force
9650
9651 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9652 instead.
9653
9654 =cut
9655 */
9656
9657 char *
9658 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9659 {
9660     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9661
9662     sv_pvn_force(sv,0);
9663     sv_utf8_upgrade_nomg(sv);
9664     *lp = SvCUR(sv);
9665     return SvPVX(sv);
9666 }
9667
9668 /*
9669 =for apidoc sv_reftype
9670
9671 Returns a string describing what the SV is a reference to.
9672
9673 =cut
9674 */
9675
9676 const char *
9677 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9678 {
9679     PERL_ARGS_ASSERT_SV_REFTYPE;
9680     if (ob && SvOBJECT(sv)) {
9681         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9682     }
9683     else {
9684         /* WARNING - There is code, for instance in mg.c, that assumes that
9685          * the only reason that sv_reftype(sv,0) would return a string starting
9686          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9687          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9688          * this routine inside other subs, and it saves time.
9689          * Do not change this assumption without searching for "dodgy type check" in
9690          * the code.
9691          * - Yves */
9692         switch (SvTYPE(sv)) {
9693         case SVt_NULL:
9694         case SVt_IV:
9695         case SVt_NV:
9696         case SVt_PV:
9697         case SVt_PVIV:
9698         case SVt_PVNV:
9699         case SVt_PVMG:
9700                                 if (SvVOK(sv))
9701                                     return "VSTRING";
9702                                 if (SvROK(sv))
9703                                     return "REF";
9704                                 else
9705                                     return "SCALAR";
9706
9707         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9708                                 /* tied lvalues should appear to be
9709                                  * scalars for backwards compatibility */
9710                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9711                                     ? "SCALAR" : "LVALUE");
9712         case SVt_PVAV:          return "ARRAY";
9713         case SVt_PVHV:          return "HASH";
9714         case SVt_PVCV:          return "CODE";
9715         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9716                                     ? "GLOB" : "SCALAR");
9717         case SVt_PVFM:          return "FORMAT";
9718         case SVt_PVIO:          return "IO";
9719         case SVt_INVLIST:       return "INVLIST";
9720         case SVt_REGEXP:        return "REGEXP";
9721         default:                return "UNKNOWN";
9722         }
9723     }
9724 }
9725
9726 /*
9727 =for apidoc sv_ref
9728
9729 Returns a SV describing what the SV passed in is a reference to.
9730
9731 =cut
9732 */
9733
9734 SV *
9735 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9736 {
9737     PERL_ARGS_ASSERT_SV_REF;
9738
9739     if (!dst)
9740         dst = sv_newmortal();
9741
9742     if (ob && SvOBJECT(sv)) {
9743         HvNAME_get(SvSTASH(sv))
9744                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9745                     : sv_setpvn(dst, "__ANON__", 8);
9746     }
9747     else {
9748         const char * reftype = sv_reftype(sv, 0);
9749         sv_setpv(dst, reftype);
9750     }
9751     return dst;
9752 }
9753
9754 /*
9755 =for apidoc sv_isobject
9756
9757 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9758 object.  If the SV is not an RV, or if the object is not blessed, then this
9759 will return false.
9760
9761 =cut
9762 */
9763
9764 int
9765 Perl_sv_isobject(pTHX_ SV *sv)
9766 {
9767     if (!sv)
9768         return 0;
9769     SvGETMAGIC(sv);
9770     if (!SvROK(sv))
9771         return 0;
9772     sv = SvRV(sv);
9773     if (!SvOBJECT(sv))
9774         return 0;
9775     return 1;
9776 }
9777
9778 /*
9779 =for apidoc sv_isa
9780
9781 Returns a boolean indicating whether the SV is blessed into the specified
9782 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9783 an inheritance relationship.
9784
9785 =cut
9786 */
9787
9788 int
9789 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9790 {
9791     const char *hvname;
9792
9793     PERL_ARGS_ASSERT_SV_ISA;
9794
9795     if (!sv)
9796         return 0;
9797     SvGETMAGIC(sv);
9798     if (!SvROK(sv))
9799         return 0;
9800     sv = SvRV(sv);
9801     if (!SvOBJECT(sv))
9802         return 0;
9803     hvname = HvNAME_get(SvSTASH(sv));
9804     if (!hvname)
9805         return 0;
9806
9807     return strEQ(hvname, name);
9808 }
9809
9810 /*
9811 =for apidoc newSVrv
9812
9813 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9814 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9815 SV will be blessed in the specified package.  The new SV is returned and its
9816 reference count is 1.  The reference count 1 is owned by C<rv>.
9817
9818 =cut
9819 */
9820
9821 SV*
9822 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9823 {
9824     SV *sv;
9825
9826     PERL_ARGS_ASSERT_NEWSVRV;
9827
9828     new_SV(sv);
9829
9830     SV_CHECK_THINKFIRST_COW_DROP(rv);
9831
9832     if (SvTYPE(rv) >= SVt_PVMG) {
9833         const U32 refcnt = SvREFCNT(rv);
9834         SvREFCNT(rv) = 0;
9835         sv_clear(rv);
9836         SvFLAGS(rv) = 0;
9837         SvREFCNT(rv) = refcnt;
9838
9839         sv_upgrade(rv, SVt_IV);
9840     } else if (SvROK(rv)) {
9841         SvREFCNT_dec(SvRV(rv));
9842     } else {
9843         prepare_SV_for_RV(rv);
9844     }
9845
9846     SvOK_off(rv);
9847     SvRV_set(rv, sv);
9848     SvROK_on(rv);
9849
9850     if (classname) {
9851         HV* const stash = gv_stashpv(classname, GV_ADD);
9852         (void)sv_bless(rv, stash);
9853     }
9854     return sv;
9855 }
9856
9857 SV *
9858 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9859 {
9860     SV * const lv = newSV_type(SVt_PVLV);
9861     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9862     LvTYPE(lv) = 'y';
9863     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9864     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9865     LvSTARGOFF(lv) = ix;
9866     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9867     return lv;
9868 }
9869
9870 /*
9871 =for apidoc sv_setref_pv
9872
9873 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9874 argument will be upgraded to an RV.  That RV will be modified to point to
9875 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9876 into the SV.  The C<classname> argument indicates the package for the
9877 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9878 will have a reference count of 1, and the RV will be returned.
9879
9880 Do not use with other Perl types such as HV, AV, SV, CV, because those
9881 objects will become corrupted by the pointer copy process.
9882
9883 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9884
9885 =cut
9886 */
9887
9888 SV*
9889 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9890 {
9891     PERL_ARGS_ASSERT_SV_SETREF_PV;
9892
9893     if (!pv) {
9894         sv_setsv(rv, &PL_sv_undef);
9895         SvSETMAGIC(rv);
9896     }
9897     else
9898         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9899     return rv;
9900 }
9901
9902 /*
9903 =for apidoc sv_setref_iv
9904
9905 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9906 argument will be upgraded to an RV.  That RV will be modified to point to
9907 the new SV.  The C<classname> argument indicates the package for the
9908 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9909 will have a reference count of 1, and the RV will be returned.
9910
9911 =cut
9912 */
9913
9914 SV*
9915 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9916 {
9917     PERL_ARGS_ASSERT_SV_SETREF_IV;
9918
9919     sv_setiv(newSVrv(rv,classname), iv);
9920     return rv;
9921 }
9922
9923 /*
9924 =for apidoc sv_setref_uv
9925
9926 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9927 argument will be upgraded to an RV.  That RV will be modified to point to
9928 the new SV.  The C<classname> argument indicates the package for the
9929 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9930 will have a reference count of 1, and the RV will be returned.
9931
9932 =cut
9933 */
9934
9935 SV*
9936 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9937 {
9938     PERL_ARGS_ASSERT_SV_SETREF_UV;
9939
9940     sv_setuv(newSVrv(rv,classname), uv);
9941     return rv;
9942 }
9943
9944 /*
9945 =for apidoc sv_setref_nv
9946
9947 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9948 argument will be upgraded to an RV.  That RV will be modified to point to
9949 the new SV.  The C<classname> argument indicates the package for the
9950 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9951 will have a reference count of 1, and the RV will be returned.
9952
9953 =cut
9954 */
9955
9956 SV*
9957 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9958 {
9959     PERL_ARGS_ASSERT_SV_SETREF_NV;
9960
9961     sv_setnv(newSVrv(rv,classname), nv);
9962     return rv;
9963 }
9964
9965 /*
9966 =for apidoc sv_setref_pvn
9967
9968 Copies a string into a new SV, optionally blessing the SV.  The length of the
9969 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9970 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9971 argument indicates the package for the blessing.  Set C<classname> to
9972 C<NULL> to avoid the blessing.  The new SV will have a reference count
9973 of 1, and the RV will be returned.
9974
9975 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9976
9977 =cut
9978 */
9979
9980 SV*
9981 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9982                    const char *const pv, const STRLEN n)
9983 {
9984     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9985
9986     sv_setpvn(newSVrv(rv,classname), pv, n);
9987     return rv;
9988 }
9989
9990 /*
9991 =for apidoc sv_bless
9992
9993 Blesses an SV into a specified package.  The SV must be an RV.  The package
9994 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9995 of the SV is unaffected.
9996
9997 =cut
9998 */
9999
10000 SV*
10001 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10002 {
10003     SV *tmpRef;
10004     HV *oldstash = NULL;
10005
10006     PERL_ARGS_ASSERT_SV_BLESS;
10007
10008     SvGETMAGIC(sv);
10009     if (!SvROK(sv))
10010         Perl_croak(aTHX_ "Can't bless non-reference value");
10011     tmpRef = SvRV(sv);
10012     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
10013         if (SvREADONLY(tmpRef))
10014             Perl_croak_no_modify();
10015         if (SvOBJECT(tmpRef)) {
10016             oldstash = SvSTASH(tmpRef);
10017         }
10018     }
10019     SvOBJECT_on(tmpRef);
10020     SvUPGRADE(tmpRef, SVt_PVMG);
10021     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10022     SvREFCNT_dec(oldstash);
10023
10024     if(SvSMAGICAL(tmpRef))
10025         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10026             mg_set(tmpRef);
10027
10028
10029
10030     return sv;
10031 }
10032
10033 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10034  * as it is after unglobbing it.
10035  */
10036
10037 PERL_STATIC_INLINE void
10038 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10039 {
10040     void *xpvmg;
10041     HV *stash;
10042     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10043
10044     PERL_ARGS_ASSERT_SV_UNGLOB;
10045
10046     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10047     SvFAKE_off(sv);
10048     if (!(flags & SV_COW_DROP_PV))
10049         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10050
10051     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10052     if (GvGP(sv)) {
10053         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10054            && HvNAME_get(stash))
10055             mro_method_changed_in(stash);
10056         gp_free(MUTABLE_GV(sv));
10057     }
10058     if (GvSTASH(sv)) {
10059         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10060         GvSTASH(sv) = NULL;
10061     }
10062     GvMULTI_off(sv);
10063     if (GvNAME_HEK(sv)) {
10064         unshare_hek(GvNAME_HEK(sv));
10065     }
10066     isGV_with_GP_off(sv);
10067
10068     if(SvTYPE(sv) == SVt_PVGV) {
10069         /* need to keep SvANY(sv) in the right arena */
10070         xpvmg = new_XPVMG();
10071         StructCopy(SvANY(sv), xpvmg, XPVMG);
10072         del_XPVGV(SvANY(sv));
10073         SvANY(sv) = xpvmg;
10074
10075         SvFLAGS(sv) &= ~SVTYPEMASK;
10076         SvFLAGS(sv) |= SVt_PVMG;
10077     }
10078
10079     /* Intentionally not calling any local SET magic, as this isn't so much a
10080        set operation as merely an internal storage change.  */
10081     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10082     else sv_setsv_flags(sv, temp, 0);
10083
10084     if ((const GV *)sv == PL_last_in_gv)
10085         PL_last_in_gv = NULL;
10086     else if ((const GV *)sv == PL_statgv)
10087         PL_statgv = NULL;
10088 }
10089
10090 /*
10091 =for apidoc sv_unref_flags
10092
10093 Unsets the RV status of the SV, and decrements the reference count of
10094 whatever was being referenced by the RV.  This can almost be thought of
10095 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10096 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10097 (otherwise the decrementing is conditional on the reference count being
10098 different from one or the reference being a readonly SV).
10099 See C<SvROK_off>.
10100
10101 =cut
10102 */
10103
10104 void
10105 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10106 {
10107     SV* const target = SvRV(ref);
10108
10109     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10110
10111     if (SvWEAKREF(ref)) {
10112         sv_del_backref(target, ref);
10113         SvWEAKREF_off(ref);
10114         SvRV_set(ref, NULL);
10115         return;
10116     }
10117     SvRV_set(ref, NULL);
10118     SvROK_off(ref);
10119     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10120        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10121     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10122         SvREFCNT_dec_NN(target);
10123     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10124         sv_2mortal(target);     /* Schedule for freeing later */
10125 }
10126
10127 /*
10128 =for apidoc sv_untaint
10129
10130 Untaint an SV.  Use C<SvTAINTED_off> instead.
10131
10132 =cut
10133 */
10134
10135 void
10136 Perl_sv_untaint(pTHX_ SV *const sv)
10137 {
10138     PERL_ARGS_ASSERT_SV_UNTAINT;
10139     PERL_UNUSED_CONTEXT;
10140
10141     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10142         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10143         if (mg)
10144             mg->mg_len &= ~1;
10145     }
10146 }
10147
10148 /*
10149 =for apidoc sv_tainted
10150
10151 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10152
10153 =cut
10154 */
10155
10156 bool
10157 Perl_sv_tainted(pTHX_ SV *const sv)
10158 {
10159     PERL_ARGS_ASSERT_SV_TAINTED;
10160     PERL_UNUSED_CONTEXT;
10161
10162     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10163         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10164         if (mg && (mg->mg_len & 1) )
10165             return TRUE;
10166     }
10167     return FALSE;
10168 }
10169
10170 /*
10171 =for apidoc sv_setpviv
10172
10173 Copies an integer into the given SV, also updating its string value.
10174 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10175
10176 =cut
10177 */
10178
10179 void
10180 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10181 {
10182     char buf[TYPE_CHARS(UV)];
10183     char *ebuf;
10184     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10185
10186     PERL_ARGS_ASSERT_SV_SETPVIV;
10187
10188     sv_setpvn(sv, ptr, ebuf - ptr);
10189 }
10190
10191 /*
10192 =for apidoc sv_setpviv_mg
10193
10194 Like C<sv_setpviv>, but also handles 'set' magic.
10195
10196 =cut
10197 */
10198
10199 void
10200 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10201 {
10202     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10203
10204     sv_setpviv(sv, iv);
10205     SvSETMAGIC(sv);
10206 }
10207
10208 #if defined(PERL_IMPLICIT_CONTEXT)
10209
10210 /* pTHX_ magic can't cope with varargs, so this is a no-context
10211  * version of the main function, (which may itself be aliased to us).
10212  * Don't access this version directly.
10213  */
10214
10215 void
10216 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10217 {
10218     dTHX;
10219     va_list args;
10220
10221     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10222
10223     va_start(args, pat);
10224     sv_vsetpvf(sv, pat, &args);
10225     va_end(args);
10226 }
10227
10228 /* pTHX_ magic can't cope with varargs, so this is a no-context
10229  * version of the main function, (which may itself be aliased to us).
10230  * Don't access this version directly.
10231  */
10232
10233 void
10234 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10235 {
10236     dTHX;
10237     va_list args;
10238
10239     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10240
10241     va_start(args, pat);
10242     sv_vsetpvf_mg(sv, pat, &args);
10243     va_end(args);
10244 }
10245 #endif
10246
10247 /*
10248 =for apidoc sv_setpvf
10249
10250 Works like C<sv_catpvf> but copies the text into the SV instead of
10251 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10252
10253 =cut
10254 */
10255
10256 void
10257 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10258 {
10259     va_list args;
10260
10261     PERL_ARGS_ASSERT_SV_SETPVF;
10262
10263     va_start(args, pat);
10264     sv_vsetpvf(sv, pat, &args);
10265     va_end(args);
10266 }
10267
10268 /*
10269 =for apidoc sv_vsetpvf
10270
10271 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10272 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10273
10274 Usually used via its frontend C<sv_setpvf>.
10275
10276 =cut
10277 */
10278
10279 void
10280 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10281 {
10282     PERL_ARGS_ASSERT_SV_VSETPVF;
10283
10284     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10285 }
10286
10287 /*
10288 =for apidoc sv_setpvf_mg
10289
10290 Like C<sv_setpvf>, but also handles 'set' magic.
10291
10292 =cut
10293 */
10294
10295 void
10296 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10297 {
10298     va_list args;
10299
10300     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10301
10302     va_start(args, pat);
10303     sv_vsetpvf_mg(sv, pat, &args);
10304     va_end(args);
10305 }
10306
10307 /*
10308 =for apidoc sv_vsetpvf_mg
10309
10310 Like C<sv_vsetpvf>, but also handles 'set' magic.
10311
10312 Usually used via its frontend C<sv_setpvf_mg>.
10313
10314 =cut
10315 */
10316
10317 void
10318 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10319 {
10320     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10321
10322     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10323     SvSETMAGIC(sv);
10324 }
10325
10326 #if defined(PERL_IMPLICIT_CONTEXT)
10327
10328 /* pTHX_ magic can't cope with varargs, so this is a no-context
10329  * version of the main function, (which may itself be aliased to us).
10330  * Don't access this version directly.
10331  */
10332
10333 void
10334 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10335 {
10336     dTHX;
10337     va_list args;
10338
10339     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10340
10341     va_start(args, pat);
10342     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10343     va_end(args);
10344 }
10345
10346 /* pTHX_ magic can't cope with varargs, so this is a no-context
10347  * version of the main function, (which may itself be aliased to us).
10348  * Don't access this version directly.
10349  */
10350
10351 void
10352 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10353 {
10354     dTHX;
10355     va_list args;
10356
10357     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10358
10359     va_start(args, pat);
10360     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10361     SvSETMAGIC(sv);
10362     va_end(args);
10363 }
10364 #endif
10365
10366 /*
10367 =for apidoc sv_catpvf
10368
10369 Processes its arguments like C<sprintf> and appends the formatted
10370 output to an SV.  If the appended data contains "wide" characters
10371 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10372 and characters >255 formatted with %c), the original SV might get
10373 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10374 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10375 valid UTF-8; if the original SV was bytes, the pattern should be too.
10376
10377 =cut */
10378
10379 void
10380 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10381 {
10382     va_list args;
10383
10384     PERL_ARGS_ASSERT_SV_CATPVF;
10385
10386     va_start(args, pat);
10387     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10388     va_end(args);
10389 }
10390
10391 /*
10392 =for apidoc sv_vcatpvf
10393
10394 Processes its arguments like C<vsprintf> and appends the formatted output
10395 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10396
10397 Usually used via its frontend C<sv_catpvf>.
10398
10399 =cut
10400 */
10401
10402 void
10403 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10404 {
10405     PERL_ARGS_ASSERT_SV_VCATPVF;
10406
10407     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10408 }
10409
10410 /*
10411 =for apidoc sv_catpvf_mg
10412
10413 Like C<sv_catpvf>, but also handles 'set' magic.
10414
10415 =cut
10416 */
10417
10418 void
10419 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10420 {
10421     va_list args;
10422
10423     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10424
10425     va_start(args, pat);
10426     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10427     SvSETMAGIC(sv);
10428     va_end(args);
10429 }
10430
10431 /*
10432 =for apidoc sv_vcatpvf_mg
10433
10434 Like C<sv_vcatpvf>, but also handles 'set' magic.
10435
10436 Usually used via its frontend C<sv_catpvf_mg>.
10437
10438 =cut
10439 */
10440
10441 void
10442 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10443 {
10444     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10445
10446     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10447     SvSETMAGIC(sv);
10448 }
10449
10450 /*
10451 =for apidoc sv_vsetpvfn
10452
10453 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10454 appending it.
10455
10456 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10457
10458 =cut
10459 */
10460
10461 void
10462 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10463                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10464 {
10465     PERL_ARGS_ASSERT_SV_VSETPVFN;
10466
10467     sv_setpvs(sv, "");
10468     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10469 }
10470
10471
10472 /*
10473  * Warn of missing argument to sprintf, and then return a defined value
10474  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10475  */
10476 STATIC SV*
10477 S_vcatpvfn_missing_argument(pTHX) {
10478     if (ckWARN(WARN_MISSING)) {
10479         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10480                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10481     }
10482     return &PL_sv_no;
10483 }
10484
10485
10486 STATIC I32
10487 S_expect_number(pTHX_ char **const pattern)
10488 {
10489     I32 var = 0;
10490
10491     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10492
10493     switch (**pattern) {
10494     case '1': case '2': case '3':
10495     case '4': case '5': case '6':
10496     case '7': case '8': case '9':
10497         var = *(*pattern)++ - '0';
10498         while (isDIGIT(**pattern)) {
10499             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10500             if (tmp < var)
10501                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10502             var = tmp;
10503         }
10504     }
10505     return var;
10506 }
10507
10508 STATIC char *
10509 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10510 {
10511     const int neg = nv < 0;
10512     UV uv;
10513
10514     PERL_ARGS_ASSERT_F0CONVERT;
10515
10516     if (neg)
10517         nv = -nv;
10518     if (nv < UV_MAX) {
10519         char *p = endbuf;
10520         nv += 0.5;
10521         uv = (UV)nv;
10522         if (uv & 1 && uv == nv)
10523             uv--;                       /* Round to even */
10524         do {
10525             const unsigned dig = uv % 10;
10526             *--p = '0' + dig;
10527         } while (uv /= 10);
10528         if (neg)
10529             *--p = '-';
10530         *len = endbuf - p;
10531         return p;
10532     }
10533     return NULL;
10534 }
10535
10536
10537 /*
10538 =for apidoc sv_vcatpvfn
10539
10540 =for apidoc sv_vcatpvfn_flags
10541
10542 Processes its arguments like C<vsprintf> and appends the formatted output
10543 to an SV.  Uses an array of SVs if the C style variable argument list is
10544 missing (NULL).  When running with taint checks enabled, indicates via
10545 C<maybe_tainted> if results are untrustworthy (often due to the use of
10546 locales).
10547
10548 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10549
10550 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10551
10552 =cut
10553 */
10554
10555 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10556                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10557                         vec_utf8 = DO_UTF8(vecsv);
10558
10559 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10560
10561 void
10562 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10563                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10564 {
10565     PERL_ARGS_ASSERT_SV_VCATPVFN;
10566
10567     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10568 }
10569
10570 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10571  * of 4 bits); 1 for the implicit 1, and at most 128 bits of mantissa,
10572  * four bits per xdigit. */
10573 #define VHEX_SIZE (1+128/4)
10574
10575 /* If we do not have a known long double format, (including not using
10576  * long doubles, or long doubles being equal to doubles) then we will
10577  * fall back to the ldexp/frexp route, with which we can retrieve at
10578  * most as many bits as our widest unsigned integer type is.  We try
10579  * to get a 64-bit unsigned integer even if we are not having 64-bit
10580  * UV. */
10581 #if defined(HAS_QUAD) && defined(Uquad_t)
10582 #  define MANTISSATYPE Uquad_t
10583 #  define MANTISSASIZE 8
10584 #else
10585 #  define MANTISSATYPE UV /* May lose precision if UVSIZE is not 8. */
10586 #  define MANTISSASIZE UVSIZE
10587 #endif
10588
10589 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10590  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10591  * are being extracted from (either directly from the long double in-memory
10592  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10593  * is used to update the exponent.  vhex is the pointer to the beginning
10594  * of the output buffer (of VHEX_SIZE).
10595  *
10596  * The tricky part is that S_hextract() needs to be called twice:
10597  * the first time with vend as NULL, and the second time with vend as
10598  * the pointer returned by the first call.  What happens is that on
10599  * the first round the output size is computed, and the intended
10600  * extraction sanity checked.  On the second round the actual output
10601  * (the extraction of the hexadecimal values) takes place.
10602  * Sanity failures cause fatal failures during both rounds. */
10603 STATIC U8*
10604 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10605 {
10606     U8* v = vhex;
10607     int ix;
10608     int ixmin = 0, ixmax = 0;
10609
10610     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10611      * and elsewhere. */
10612
10613     /* These macros are just to reduce typos, they have multiple
10614      * repetitions below, but usually only one (or sometimes two)
10615      * of them is really being used. */
10616     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10617 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10618 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10619 #define HEXTRACT_OUTPUT(ix) \
10620     STMT_START { \
10621         HEXTRACT_OUTPUT_HI(ix); \
10622         HEXTRACT_OUTPUT_LO(ix); \
10623     } STMT_END
10624 #define HEXTRACT_COUNT(ix, c) \
10625     STMT_START { \
10626       v += c; \
10627       if (ix < ixmin) \
10628         ixmin = ix; \
10629       else if (ix > ixmax) \
10630         ixmax = ix; \
10631     } STMT_END
10632 #define HEXTRACT_IMPLICIT_BIT() \
10633     if (exponent) { \
10634         if (vend) \
10635             *v++ = 1; \
10636         else \
10637             v++; \
10638     }
10639
10640     /* First see if we are using long doubles. */
10641 #if NVSIZE > DOUBLESIZE && LONG_DOUBLEKIND != LONG_DOUBLE_IS_DOUBLE
10642     const U8* nvp = (const U8*)(&nv);
10643 #  define HEXTRACTSIZE NVSIZE
10644     (void)Perl_frexp(PERL_ABS(nv), exponent);
10645 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10646     /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10647      * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10648     /* The bytes 13..0 are the mantissa/fraction,
10649      * the 15,14 are the sign+exponent. */
10650     HEXTRACT_IMPLICIT_BIT();
10651     for (ix = 13; ix >= 0; ix--) {
10652         if (vend)
10653             HEXTRACT_OUTPUT(ix);
10654         else
10655             HEXTRACT_COUNT(ix, 2);
10656     }
10657 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10658     /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10659      * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10660     /* The bytes 2..15 are the mantissa/fraction,
10661      * the 0,1 are the sign+exponent. */
10662     HEXTRACT_IMPLICIT_BIT();
10663     for (ix = 2; ix <= 15; ix++) {
10664         if (vend)
10665             HEXTRACT_OUTPUT(ix);
10666         else
10667             HEXTRACT_COUNT(ix, 2);
10668     }
10669 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10670     /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10671      * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10672      * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10673      * meaning that 2 or 6 bytes are empty padding. */
10674     /* The bytes 7..0 are the mantissa/fraction */
10675     /* There explicitly is *no* implicit bit in this case. */
10676     for (ix = 7; ix >= 0; ix--) {
10677         if (vend)
10678             HEXTRACT_OUTPUT(ix);
10679         else
10680             HEXTRACT_COUNT(ix, 2);
10681     }
10682 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10683     /* (does this format ever happen?) */
10684     /* There explicitly is *no* implicit bit in this case. */
10685     for (ix = 0; ix < 8; ix++) {
10686         if (vend)
10687             HEXTRACT_OUTPUT(ix);
10688         else
10689             HEXTRACT_COUNT(ix, 2);
10690     }
10691 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
10692     /* Where is this used?
10693      * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f */
10694     HEXTRACT_IMPLICIT_BIT();
10695     if (vend)
10696         HEXTRACT_OUTPUT_LO(14);
10697     else
10698         HEXTRACT_COUNT(14, 1);
10699     for (ix = 13; ix >= 8; ix--) {
10700         if (vend)
10701             HEXTRACT_OUTPUT(ix);
10702         else
10703             HEXTRACT_COUNT(ix, 2);
10704     }
10705     /* XXX not extracting from the second double -- see the discussion
10706      * below for the big endian double double. */
10707 #    if 0
10708     if (vend)
10709         HEXTRACT_OUTPUT_LO(6);
10710     else
10711         HEXTRACT_COUNT(6, 1);
10712     for (ix = 5; ix >= 0; ix--) {
10713         if (vend)
10714             HEXTRACT_OUTPUT(ix);
10715         else
10716             HEXTRACT_COUNT(ix, 2);
10717     }
10718 #    endif
10719 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10720     /* Used in e.g. PPC/Power (AIX) and MIPS.
10721      *
10722      * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10723      * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a
10724      */
10725     HEXTRACT_IMPLICIT_BIT();
10726     if (vend)
10727         HEXTRACT_OUTPUT_LO(1);
10728     else
10729         HEXTRACT_COUNT(1, 1);
10730     for (ix = 2; ix < 8; ix++) {
10731         if (vend)
10732             HEXTRACT_OUTPUT(ix);
10733         else
10734             HEXTRACT_COUNT(ix, 2);
10735     }
10736     /* XXX not extracting the second double mantissa bits- this is not
10737      * right nor ideal (we effectively reduce the output format to
10738      * that of a "single double", only 53 bits), but we do not know
10739      * exactly how to do the extraction correctly so that it matches
10740      * the semantics of, say, the IEEE quadruple float. */
10741 #    if 0
10742     if (vend)
10743         HEXTRACT_OUTPUT_LO(9);
10744     else
10745         HEXTRACT_COUNT(9, 1);
10746     for (ix = 10; ix < 16; ix++) {
10747         if (vend)
10748             HEXTRACT_OUTPUT(ix);
10749         else
10750             HEXTRACT_COUNT(ix, 2);
10751     }
10752 #   endif
10753 #  else
10754     Perl_croak(aTHX_
10755                "Hexadecimal float: unsupported long double format");
10756 #  endif
10757 #else
10758     /* If not using long doubles (or if the long double format is
10759      * known but not yet supported), try to retrieve the mantissa bits
10760      * via frexp+ldexp. */
10761
10762     NV norm = Perl_frexp(PERL_ABS(nv), exponent);
10763     /* Theoretically we have all the bytes [0, MANTISSASIZE-1] to
10764      * inspect; but in practice we don't want the leading nybbles that
10765      * are zero.  With the common IEEE 754 value for NV_MANT_DIG being
10766      * 53, we want the limit byte to be (int)((53-1)/8) == 6.
10767      *
10768      * Note that this is _not_ inspecting the in-memory format of the
10769      * nv (as opposed to the long double method), but instead the UV
10770      * retrieved with the frexp+ldexp invocation. */
10771 #  if MANTISSASIZE * 8 > NV_MANT_DIG
10772     MANTISSATYPE mantissa = (MANTISSATYPE)Perl_ldexp(norm, NV_MANT_DIG);
10773     int limit_byte = (NV_MANT_DIG - 1) / 8;
10774 #  else
10775     /* There will be low-order precision loss.  Try to salvage as many
10776      * bits as possible.  Will truncate, not round. */
10777     MANTISSATYPE mantissa =
10778     Perl_ldexp(norm,
10779                /* The highest possible shift by two that fits in the
10780                 * mantissa and is aligned (by four) the same was as
10781                 * NV_MANT_DIG. */
10782                MANTISSASIZE * 8 - (4 - NV_MANT_DIG % 4));
10783     int limit_byte = MANTISSASIZE - 1;
10784 #  endif
10785     const U8* nvp = (const U8*)(&mantissa);
10786 #  define HEXTRACTSIZE MANTISSASIZE
10787     /* We make here the wild assumption that the endianness of doubles
10788      * is similar to the endianness of integers, and that there is no
10789      * middle-endianness.  This may come back to haunt us (the rumor
10790      * has it that ARM can be quite haunted).
10791      *
10792      * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10793      * bytes, since we might need to handle printf precision, and also
10794      * insert the radix.
10795      */
10796 #  if BYTEORDER == 0x12345678 || BYTEORDER == 0x1234 || \
10797      LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \
10798      LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10799      LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
10800     /* Little endian. */
10801     for (ix = limit_byte; ix >= 0; ix--) {
10802         if (vend)
10803             HEXTRACT_OUTPUT(ix);
10804         else
10805             HEXTRACT_COUNT(ix, 2);
10806     }
10807 #  else
10808     /* Big endian. */
10809     for (ix = MANTISSASIZE - 1 - limit_byte; ix < MANTISSASIZE; ix++) {
10810         if (vend)
10811             HEXTRACT_OUTPUT(ix);
10812         else
10813             HEXTRACT_COUNT(ix, 2);
10814     }
10815 #  endif
10816     /* If there are not enough bits in MANTISSATYPE, we couldn't get
10817      * all of them, issue a warning.
10818      *
10819      * Note that NV_PRESERVES_UV_BITS would not help here, it is the
10820      * wrong way around. */
10821 #  if NV_MANT_DIG > MANTISSASIZE * 8
10822     Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
10823                    "Hexadecimal float: precision loss");
10824 #  endif
10825 #endif
10826     /* Croak for various reasons: if the output pointer escaped the
10827      * output buffer, if the extraction index escaped the extraction
10828      * buffer, or if the ending output pointer didn't match the
10829      * previously computed value. */
10830     if (v <= vhex || v - vhex >= VHEX_SIZE ||
10831         ixmin < 0 || ixmax >= HEXTRACTSIZE ||
10832         (vend && v != vend))
10833         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10834     return v;
10835 }
10836
10837 void
10838 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10839                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10840                        const U32 flags)
10841 {
10842     char *p;
10843     char *q;
10844     const char *patend;
10845     STRLEN origlen;
10846     I32 svix = 0;
10847     static const char nullstr[] = "(null)";
10848     SV *argsv = NULL;
10849     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10850     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10851     SV *nsv = NULL;
10852     /* Times 4: a decimal digit takes more than 3 binary digits.
10853      * NV_DIG: mantissa takes than many decimal digits.
10854      * Plus 32: Playing safe. */
10855     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10856     /* large enough for "%#.#f" --chip */
10857     /* what about long double NVs? --jhi */
10858     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
10859     bool hexfp = FALSE;
10860
10861     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
10862
10863     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10864     PERL_UNUSED_ARG(maybe_tainted);
10865
10866     if (flags & SV_GMAGIC)
10867         SvGETMAGIC(sv);
10868
10869     /* no matter what, this is a string now */
10870     (void)SvPV_force_nomg(sv, origlen);
10871
10872     /* special-case "", "%s", and "%-p" (SVf - see below) */
10873     if (patlen == 0) {
10874         if (svmax && ckWARN(WARN_REDUNDANT))
10875             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10876                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10877         return;
10878     }
10879     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10880         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10881             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10882                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10883
10884         if (args) {
10885             const char * const s = va_arg(*args, char*);
10886             sv_catpv_nomg(sv, s ? s : nullstr);
10887         }
10888         else if (svix < svmax) {
10889             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10890             SvGETMAGIC(*svargs);
10891             sv_catsv_nomg(sv, *svargs);
10892         }
10893         else
10894             S_vcatpvfn_missing_argument(aTHX);
10895         return;
10896     }
10897     if (args && patlen == 3 && pat[0] == '%' &&
10898                 pat[1] == '-' && pat[2] == 'p') {
10899         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10900             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10901                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10902         argsv = MUTABLE_SV(va_arg(*args, void*));
10903         sv_catsv_nomg(sv, argsv);
10904         return;
10905     }
10906
10907 #ifndef USE_LONG_DOUBLE
10908     /* special-case "%.<number>[gf]" */
10909     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10910          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10911         unsigned digits = 0;
10912         const char *pp;
10913
10914         pp = pat + 2;
10915         while (*pp >= '0' && *pp <= '9')
10916             digits = 10 * digits + (*pp++ - '0');
10917
10918         /* XXX: Why do this `svix < svmax` test? Couldn't we just
10919            format the first argument and WARN_REDUNDANT if svmax > 1?
10920            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
10921         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10922             const NV nv = SvNV(*svargs);
10923             if (*pp == 'g') {
10924                 /* Add check for digits != 0 because it seems that some
10925                    gconverts are buggy in this case, and we don't yet have
10926                    a Configure test for this.  */
10927                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10928                      /* 0, point, slack */
10929                     STORE_LC_NUMERIC_SET_TO_NEEDED();
10930                     PERL_UNUSED_RESULT(Gconvert(nv, (int)digits, 0, ebuf));
10931                     sv_catpv_nomg(sv, ebuf);
10932                     if (*ebuf)  /* May return an empty string for digits==0 */
10933                         return;
10934                 }
10935             } else if (!digits) {
10936                 STRLEN l;
10937
10938                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10939                     sv_catpvn_nomg(sv, p, l);
10940                     return;
10941                 }
10942             }
10943         }
10944     }
10945 #endif /* !USE_LONG_DOUBLE */
10946
10947     if (!args && svix < svmax && DO_UTF8(*svargs))
10948         has_utf8 = TRUE;
10949
10950     patend = (char*)pat + patlen;
10951     for (p = (char*)pat; p < patend; p = q) {
10952         bool alt = FALSE;
10953         bool left = FALSE;
10954         bool vectorize = FALSE;
10955         bool vectorarg = FALSE;
10956         bool vec_utf8 = FALSE;
10957         char fill = ' ';
10958         char plus = 0;
10959         char intsize = 0;
10960         STRLEN width = 0;
10961         STRLEN zeros = 0;
10962         bool has_precis = FALSE;
10963         STRLEN precis = 0;
10964         const I32 osvix = svix;
10965         bool is_utf8 = FALSE;  /* is this item utf8?   */
10966 #ifdef HAS_LDBL_SPRINTF_BUG
10967         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10968            with sfio - Allen <allens@cpan.org> */
10969         bool fix_ldbl_sprintf_bug = FALSE;
10970 #endif
10971
10972         char esignbuf[4];
10973         U8 utf8buf[UTF8_MAXBYTES+1];
10974         STRLEN esignlen = 0;
10975
10976         const char *eptr = NULL;
10977         const char *fmtstart;
10978         STRLEN elen = 0;
10979         SV *vecsv = NULL;
10980         const U8 *vecstr = NULL;
10981         STRLEN veclen = 0;
10982         char c = 0;
10983         int i;
10984         unsigned base = 0;
10985         IV iv = 0;
10986         UV uv = 0;
10987         /* we need a long double target in case HAS_LONG_DOUBLE but
10988            not USE_LONG_DOUBLE
10989         */
10990 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10991         long double nv;
10992 #else
10993         NV nv;
10994 #endif
10995         STRLEN have;
10996         STRLEN need;
10997         STRLEN gap;
10998         const char *dotstr = ".";
10999         STRLEN dotstrlen = 1;
11000         I32 efix = 0; /* explicit format parameter index */
11001         I32 ewix = 0; /* explicit width index */
11002         I32 epix = 0; /* explicit precision index */
11003         I32 evix = 0; /* explicit vector index */
11004         bool asterisk = FALSE;
11005         bool infnan = FALSE;
11006
11007         /* echo everything up to the next format specification */
11008         for (q = p; q < patend && *q != '%'; ++q) ;
11009         if (q > p) {
11010             if (has_utf8 && !pat_utf8)
11011                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11012             else
11013                 sv_catpvn_nomg(sv, p, q - p);
11014             p = q;
11015         }
11016         if (q++ >= patend)
11017             break;
11018
11019         fmtstart = q;
11020
11021 /*
11022     We allow format specification elements in this order:
11023         \d+\$              explicit format parameter index
11024         [-+ 0#]+           flags
11025         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11026         0                  flag (as above): repeated to allow "v02"     
11027         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11028         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11029         [hlqLV]            size
11030     [%bcdefginopsuxDFOUX] format (mandatory)
11031 */
11032
11033         if (args) {
11034 /*  
11035         As of perl5.9.3, printf format checking is on by default.
11036         Internally, perl uses %p formats to provide an escape to
11037         some extended formatting.  This block deals with those
11038         extensions: if it does not match, (char*)q is reset and
11039         the normal format processing code is used.
11040
11041         Currently defined extensions are:
11042                 %p              include pointer address (standard)      
11043                 %-p     (SVf)   include an SV (previously %_)
11044                 %-<num>p        include an SV with precision <num>      
11045                 %2p             include a HEK
11046                 %3p             include a HEK with precision of 256
11047                 %4p             char* preceded by utf8 flag and length
11048                 %<num>p         (where num is 1 or > 4) reserved for future
11049                                 extensions
11050
11051         Robin Barker 2005-07-14 (but modified since)
11052
11053                 %1p     (VDf)   removed.  RMB 2007-10-19
11054 */
11055             char* r = q; 
11056             bool sv = FALSE;    
11057             STRLEN n = 0;
11058             if (*q == '-')
11059                 sv = *q++;
11060             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11061                 /* The argument has already gone through cBOOL, so the cast
11062                    is safe. */
11063                 is_utf8 = (bool)va_arg(*args, int);
11064                 elen = va_arg(*args, UV);
11065                 eptr = va_arg(*args, char *);
11066                 q += sizeof(UTF8f)-1;
11067                 goto string;
11068             }
11069             n = expect_number(&q);
11070             if (*q++ == 'p') {
11071                 if (sv) {                       /* SVf */
11072                     if (n) {
11073                         precis = n;
11074                         has_precis = TRUE;
11075                     }
11076                     argsv = MUTABLE_SV(va_arg(*args, void*));
11077                     eptr = SvPV_const(argsv, elen);
11078                     if (DO_UTF8(argsv))
11079                         is_utf8 = TRUE;
11080                     goto string;
11081                 }
11082                 else if (n==2 || n==3) {        /* HEKf */
11083                     HEK * const hek = va_arg(*args, HEK *);
11084                     eptr = HEK_KEY(hek);
11085                     elen = HEK_LEN(hek);
11086                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11087                     if (n==3) precis = 256, has_precis = TRUE;
11088                     goto string;
11089                 }
11090                 else if (n) {
11091                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11092                                      "internal %%<num>p might conflict with future printf extensions");
11093                 }
11094             }
11095             q = r; 
11096         }
11097
11098         if ( (width = expect_number(&q)) ) {
11099             if (*q == '$') {
11100                 ++q;
11101                 efix = width;
11102                 if (!no_redundant_warning)
11103                     /* I've forgotten if it's a better
11104                        micro-optimization to always set this or to
11105                        only set it if it's unset */
11106                     no_redundant_warning = TRUE;
11107             } else {
11108                 goto gotwidth;
11109             }
11110         }
11111
11112         /* FLAGS */
11113
11114         while (*q) {
11115             switch (*q) {
11116             case ' ':
11117             case '+':
11118                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11119                     q++;
11120                 else
11121                     plus = *q++;
11122                 continue;
11123
11124             case '-':
11125                 left = TRUE;
11126                 q++;
11127                 continue;
11128
11129             case '0':
11130                 fill = *q++;
11131                 continue;
11132
11133             case '#':
11134                 alt = TRUE;
11135                 q++;
11136                 continue;
11137
11138             default:
11139                 break;
11140             }
11141             break;
11142         }
11143
11144       tryasterisk:
11145         if (*q == '*') {
11146             q++;
11147             if ( (ewix = expect_number(&q)) )
11148                 if (*q++ != '$')
11149                     goto unknown;
11150             asterisk = TRUE;
11151         }
11152         if (*q == 'v') {
11153             q++;
11154             if (vectorize)
11155                 goto unknown;
11156             if ((vectorarg = asterisk)) {
11157                 evix = ewix;
11158                 ewix = 0;
11159                 asterisk = FALSE;
11160             }
11161             vectorize = TRUE;
11162             goto tryasterisk;
11163         }
11164
11165         if (!asterisk)
11166         {
11167             if( *q == '0' )
11168                 fill = *q++;
11169             width = expect_number(&q);
11170         }
11171
11172         if (vectorize && vectorarg) {
11173             /* vectorizing, but not with the default "." */
11174             if (args)
11175                 vecsv = va_arg(*args, SV*);
11176             else if (evix) {
11177                 vecsv = (evix > 0 && evix <= svmax)
11178                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11179             } else {
11180                 vecsv = svix < svmax
11181                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11182             }
11183             dotstr = SvPV_const(vecsv, dotstrlen);
11184             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11185                bad with tied or overloaded values that return UTF8.  */
11186             if (DO_UTF8(vecsv))
11187                 is_utf8 = TRUE;
11188             else if (has_utf8) {
11189                 vecsv = sv_mortalcopy(vecsv);
11190                 sv_utf8_upgrade(vecsv);
11191                 dotstr = SvPV_const(vecsv, dotstrlen);
11192                 is_utf8 = TRUE;
11193             }               
11194         }
11195
11196         if (asterisk) {
11197             if (args)
11198                 i = va_arg(*args, int);
11199             else
11200                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11201                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11202             left |= (i < 0);
11203             width = (i < 0) ? -i : i;
11204         }
11205       gotwidth:
11206
11207         /* PRECISION */
11208
11209         if (*q == '.') {
11210             q++;
11211             if (*q == '*') {
11212                 q++;
11213                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11214                     goto unknown;
11215                 /* XXX: todo, support specified precision parameter */
11216                 if (epix)
11217                     goto unknown;
11218                 if (args)
11219                     i = va_arg(*args, int);
11220                 else
11221                     i = (ewix ? ewix <= svmax : svix < svmax)
11222                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11223                 precis = i;
11224                 has_precis = !(i < 0);
11225             }
11226             else {
11227                 precis = 0;
11228                 while (isDIGIT(*q))
11229                     precis = precis * 10 + (*q++ - '0');
11230                 has_precis = TRUE;
11231             }
11232         }
11233
11234         if (vectorize) {
11235             if (args) {
11236                 VECTORIZE_ARGS
11237             }
11238             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11239                 vecsv = svargs[efix ? efix-1 : svix++];
11240                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11241                 vec_utf8 = DO_UTF8(vecsv);
11242
11243                 /* if this is a version object, we need to convert
11244                  * back into v-string notation and then let the
11245                  * vectorize happen normally
11246                  */
11247                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11248                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11249                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11250                         "vector argument not supported with alpha versions");
11251                         goto vdblank;
11252                     }
11253                     vecsv = sv_newmortal();
11254                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11255                                  vecsv);
11256                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11257                     vec_utf8 = DO_UTF8(vecsv);
11258                 }
11259             }
11260             else {
11261               vdblank:
11262                 vecstr = (U8*)"";
11263                 veclen = 0;
11264             }
11265         }
11266
11267         /* SIZE */
11268
11269         switch (*q) {
11270 #ifdef WIN32
11271         case 'I':                       /* Ix, I32x, and I64x */
11272 #  ifdef USE_64_BIT_INT
11273             if (q[1] == '6' && q[2] == '4') {
11274                 q += 3;
11275                 intsize = 'q';
11276                 break;
11277             }
11278 #  endif
11279             if (q[1] == '3' && q[2] == '2') {
11280                 q += 3;
11281                 break;
11282             }
11283 #  ifdef USE_64_BIT_INT
11284             intsize = 'q';
11285 #  endif
11286             q++;
11287             break;
11288 #endif
11289 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11290         case 'L':                       /* Ld */
11291             /* FALLTHROUGH */
11292 #if IVSIZE >= 8
11293         case 'q':                       /* qd */
11294 #endif
11295             intsize = 'q';
11296             q++;
11297             break;
11298 #endif
11299         case 'l':
11300             ++q;
11301 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11302             if (*q == 'l') {    /* lld, llf */
11303                 intsize = 'q';
11304                 ++q;
11305             }
11306             else
11307 #endif
11308                 intsize = 'l';
11309             break;
11310         case 'h':
11311             if (*++q == 'h') {  /* hhd, hhu */
11312                 intsize = 'c';
11313                 ++q;
11314             }
11315             else
11316                 intsize = 'h';
11317             break;
11318         case 'V':
11319         case 'z':
11320         case 't':
11321 #ifdef HAS_C99
11322         case 'j':
11323 #endif
11324             intsize = *q++;
11325             break;
11326         }
11327
11328         /* CONVERSION */
11329
11330         if (*q == '%') {
11331             eptr = q++;
11332             elen = 1;
11333             if (vectorize) {
11334                 c = '%';
11335                 goto unknown;
11336             }
11337             goto string;
11338         }
11339
11340         if (!vectorize && !args) {
11341             if (efix) {
11342                 const I32 i = efix-1;
11343                 argsv = (i >= 0 && i < svmax)
11344                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11345             } else {
11346                 argsv = (svix >= 0 && svix < svmax)
11347                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11348             }
11349         }
11350
11351         if (argsv && SvNOK(argsv)) {
11352             /* XXX va_arg(*args) case? */
11353             infnan = Perl_isinfnan(SvNV(argsv));
11354         }
11355
11356         switch (c = *q++) {
11357
11358             /* STRINGS */
11359
11360         case 'c':
11361             if (vectorize)
11362                 goto unknown;
11363             uv = (args) ? va_arg(*args, int) :
11364                 infnan ? UNICODE_REPLACEMENT : SvIV(argsv);
11365             if ((uv > 255 ||
11366                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11367                 && !IN_BYTES) {
11368                 eptr = (char*)utf8buf;
11369                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11370                 is_utf8 = TRUE;
11371             }
11372             else {
11373                 c = (char)uv;
11374                 eptr = &c;
11375                 elen = 1;
11376             }
11377             goto string;
11378
11379         case 's':
11380             if (vectorize)
11381                 goto unknown;
11382             if (args) {
11383                 eptr = va_arg(*args, char*);
11384                 if (eptr)
11385                     elen = strlen(eptr);
11386                 else {
11387                     eptr = (char *)nullstr;
11388                     elen = sizeof nullstr - 1;
11389                 }
11390             }
11391             else {
11392                 eptr = SvPV_const(argsv, elen);
11393                 if (DO_UTF8(argsv)) {
11394                     STRLEN old_precis = precis;
11395                     if (has_precis && precis < elen) {
11396                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11397                         STRLEN p = precis > ulen ? ulen : precis;
11398                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11399                                                         /* sticks at end */
11400                     }
11401                     if (width) { /* fudge width (can't fudge elen) */
11402                         if (has_precis && precis < elen)
11403                             width += precis - old_precis;
11404                         else
11405                             width +=
11406                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11407                     }
11408                     is_utf8 = TRUE;
11409                 }
11410             }
11411
11412         string:
11413             if (has_precis && precis < elen)
11414                 elen = precis;
11415             break;
11416
11417             /* INTEGERS */
11418
11419         case 'p':
11420             if (infnan) {
11421                 c = 'g';
11422                 goto floating_point;
11423             }
11424             if (alt || vectorize)
11425                 goto unknown;
11426             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11427             base = 16;
11428             goto integer;
11429
11430         case 'D':
11431 #ifdef IV_IS_QUAD
11432             intsize = 'q';
11433 #else
11434             intsize = 'l';
11435 #endif
11436             /* FALLTHROUGH */
11437         case 'd':
11438         case 'i':
11439             if (infnan) {
11440                 c = 'g';
11441                 goto floating_point;
11442             }
11443             if (vectorize) {
11444                 STRLEN ulen;
11445                 if (!veclen)
11446                     continue;
11447                 if (vec_utf8)
11448                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11449                                         UTF8_ALLOW_ANYUV);
11450                 else {
11451                     uv = *vecstr;
11452                     ulen = 1;
11453                 }
11454                 vecstr += ulen;
11455                 veclen -= ulen;
11456                 if (plus)
11457                      esignbuf[esignlen++] = plus;
11458             }
11459             else if (args) {
11460                 switch (intsize) {
11461                 case 'c':       iv = (char)va_arg(*args, int); break;
11462                 case 'h':       iv = (short)va_arg(*args, int); break;
11463                 case 'l':       iv = va_arg(*args, long); break;
11464                 case 'V':       iv = va_arg(*args, IV); break;
11465                 case 'z':       iv = va_arg(*args, SSize_t); break;
11466 #ifdef HAS_PTRDIFF_T
11467                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11468 #endif
11469                 default:        iv = va_arg(*args, int); break;
11470 #ifdef HAS_C99
11471                 case 'j':       iv = va_arg(*args, intmax_t); break;
11472 #endif
11473                 case 'q':
11474 #if IVSIZE >= 8
11475                                 iv = va_arg(*args, Quad_t); break;
11476 #else
11477                                 goto unknown;
11478 #endif
11479                 }
11480             }
11481             else {
11482                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
11483                 switch (intsize) {
11484                 case 'c':       iv = (char)tiv; break;
11485                 case 'h':       iv = (short)tiv; break;
11486                 case 'l':       iv = (long)tiv; break;
11487                 case 'V':
11488                 default:        iv = tiv; break;
11489                 case 'q':
11490 #if IVSIZE >= 8
11491                                 iv = (Quad_t)tiv; break;
11492 #else
11493                                 goto unknown;
11494 #endif
11495                 }
11496             }
11497             if ( !vectorize )   /* we already set uv above */
11498             {
11499                 if (iv >= 0) {
11500                     uv = iv;
11501                     if (plus)
11502                         esignbuf[esignlen++] = plus;
11503                 }
11504                 else {
11505                     uv = -iv;
11506                     esignbuf[esignlen++] = '-';
11507                 }
11508             }
11509             base = 10;
11510             goto integer;
11511
11512         case 'U':
11513 #ifdef IV_IS_QUAD
11514             intsize = 'q';
11515 #else
11516             intsize = 'l';
11517 #endif
11518             /* FALLTHROUGH */
11519         case 'u':
11520             base = 10;
11521             goto uns_integer;
11522
11523         case 'B':
11524         case 'b':
11525             base = 2;
11526             goto uns_integer;
11527
11528         case 'O':
11529 #ifdef IV_IS_QUAD
11530             intsize = 'q';
11531 #else
11532             intsize = 'l';
11533 #endif
11534             /* FALLTHROUGH */
11535         case 'o':
11536             base = 8;
11537             goto uns_integer;
11538
11539         case 'X':
11540         case 'x':
11541             base = 16;
11542
11543         uns_integer:
11544             if (infnan) {
11545                 c = 'g';
11546                 goto floating_point;
11547             }
11548             if (vectorize) {
11549                 STRLEN ulen;
11550         vector:
11551                 if (!veclen)
11552                     continue;
11553                 if (vec_utf8)
11554                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11555                                         UTF8_ALLOW_ANYUV);
11556                 else {
11557                     uv = *vecstr;
11558                     ulen = 1;
11559                 }
11560                 vecstr += ulen;
11561                 veclen -= ulen;
11562             }
11563             else if (args) {
11564                 switch (intsize) {
11565                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11566                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11567                 case 'l':  uv = va_arg(*args, unsigned long); break;
11568                 case 'V':  uv = va_arg(*args, UV); break;
11569                 case 'z':  uv = va_arg(*args, Size_t); break;
11570 #ifdef HAS_PTRDIFF_T
11571                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11572 #endif
11573 #ifdef HAS_C99
11574                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11575 #endif
11576                 default:   uv = va_arg(*args, unsigned); break;
11577                 case 'q':
11578 #if IVSIZE >= 8
11579                            uv = va_arg(*args, Uquad_t); break;
11580 #else
11581                            goto unknown;
11582 #endif
11583                 }
11584             }
11585             else {
11586                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11587                 switch (intsize) {
11588                 case 'c':       uv = (unsigned char)tuv; break;
11589                 case 'h':       uv = (unsigned short)tuv; break;
11590                 case 'l':       uv = (unsigned long)tuv; break;
11591                 case 'V':
11592                 default:        uv = tuv; break;
11593                 case 'q':
11594 #if IVSIZE >= 8
11595                                 uv = (Uquad_t)tuv; break;
11596 #else
11597                                 goto unknown;
11598 #endif
11599                 }
11600             }
11601
11602         integer:
11603             {
11604                 char *ptr = ebuf + sizeof ebuf;
11605                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11606                 unsigned dig;
11607                 zeros = 0;
11608
11609                 switch (base) {
11610                 case 16:
11611                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11612                     do {
11613                         dig = uv & 15;
11614                         *--ptr = p[dig];
11615                     } while (uv >>= 4);
11616                     if (tempalt) {
11617                         esignbuf[esignlen++] = '0';
11618                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11619                     }
11620                     break;
11621                 case 8:
11622                     do {
11623                         dig = uv & 7;
11624                         *--ptr = '0' + dig;
11625                     } while (uv >>= 3);
11626                     if (alt && *ptr != '0')
11627                         *--ptr = '0';
11628                     break;
11629                 case 2:
11630                     do {
11631                         dig = uv & 1;
11632                         *--ptr = '0' + dig;
11633                     } while (uv >>= 1);
11634                     if (tempalt) {
11635                         esignbuf[esignlen++] = '0';
11636                         esignbuf[esignlen++] = c;
11637                     }
11638                     break;
11639                 default:                /* it had better be ten or less */
11640                     do {
11641                         dig = uv % base;
11642                         *--ptr = '0' + dig;
11643                     } while (uv /= base);
11644                     break;
11645                 }
11646                 elen = (ebuf + sizeof ebuf) - ptr;
11647                 eptr = ptr;
11648                 if (has_precis) {
11649                     if (precis > elen)
11650                         zeros = precis - elen;
11651                     else if (precis == 0 && elen == 1 && *eptr == '0'
11652                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11653                         elen = 0;
11654
11655                 /* a precision nullifies the 0 flag. */
11656                     if (fill == '0')
11657                         fill = ' ';
11658                 }
11659             }
11660             break;
11661
11662             /* FLOATING POINT */
11663
11664         floating_point:
11665
11666         case 'F':
11667             c = 'f';            /* maybe %F isn't supported here */
11668             /* FALLTHROUGH */
11669         case 'e': case 'E':
11670         case 'f':
11671         case 'g': case 'G':
11672         case 'a': case 'A':
11673             if (vectorize)
11674                 goto unknown;
11675
11676             /* This is evil, but floating point is even more evil */
11677
11678             /* for SV-style calling, we can only get NV
11679                for C-style calling, we assume %f is double;
11680                for simplicity we allow any of %Lf, %llf, %qf for long double
11681             */
11682             switch (intsize) {
11683             case 'V':
11684 #if defined(USE_LONG_DOUBLE)
11685                 intsize = 'q';
11686 #endif
11687                 break;
11688 /* [perl #20339] - we should accept and ignore %lf rather than die */
11689             case 'l':
11690                 /* FALLTHROUGH */
11691             default:
11692 #if defined(USE_LONG_DOUBLE)
11693                 intsize = args ? 0 : 'q';
11694 #endif
11695                 break;
11696             case 'q':
11697 #if defined(HAS_LONG_DOUBLE)
11698                 break;
11699 #else
11700                 /* FALLTHROUGH */
11701 #endif
11702             case 'c':
11703             case 'h':
11704             case 'z':
11705             case 't':
11706             case 'j':
11707                 goto unknown;
11708             }
11709
11710             /* now we need (long double) if intsize == 'q', else (double) */
11711             nv = (args) ?
11712 #if LONG_DOUBLESIZE > DOUBLESIZE
11713                 intsize == 'q' ?
11714                     va_arg(*args, long double) :
11715                     va_arg(*args, double)
11716 #else
11717                     va_arg(*args, double)
11718 #endif
11719                 : SvNV(argsv);
11720
11721             need = 0;
11722             /* frexp() (or frexpl) has some unspecified behaviour for
11723              * nan/inf/-inf, so let's avoid calling that on those
11724              * three values. nv * 0 will be NaN for NaN, +Inf and -Inf,
11725              * and 0 for anything else. */
11726             if (isALPHA_FOLD_NE(c, 'e') && (nv * 0) == 0) {
11727                 i = PERL_INT_MIN;
11728                 (void)Perl_frexp(nv, &i);
11729                 if (i == PERL_INT_MIN)
11730                     Perl_die(aTHX_ "panic: frexp");
11731                 /* Do not set hexfp earlier since we want to printf
11732                  * Inf/NaN for Inf/NAN, not their hexfp. */
11733                 hexfp = isALPHA_FOLD_EQ(c, 'a');
11734                 if (UNLIKELY(hexfp)) {
11735                     /* This seriously overshoots in most cases, but
11736                      * better the undershooting.  Firstly, all bytes
11737                      * of the NV are not mantissa, some of them are
11738                      * exponent.  Secondly, for the reasonably common
11739                      * long doubles case, the "80-bit extended", two
11740                      * or six bytes of the NV are unused. */
11741                     need +=
11742                         (nv < 0) ? 1 : 0 + /* possible unary minus */
11743                         2 + /* "0x" */
11744                         1 + /* the very unlikely carry */
11745                         1 + /* "1" */
11746                         1 + /* "." */
11747                         2 * NVSIZE + /* 2 hexdigits for each byte */
11748                         2 + /* "p+" */
11749                         BIT_DIGITS(NV_MAX_EXP) + /* exponent */
11750                         1;   /* \0 */
11751 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \
11752     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
11753                     /* However, for the "double double", we need more.
11754                      * Since each double has their own exponent, the
11755                      * doubles may float (haha) rather far from each
11756                      * other, and the number of required bits is much
11757                      * larger, up to total of 1028 bits.  (NOTE: this
11758                      * is not actually implemented properly yet,
11759                      * we are using just the first double, see
11760                      * S_hextract() for details.  But let's prepare
11761                      * for the future.) */
11762
11763                     /* 2 hexdigits for each byte. */ 
11764                     need += (1028/8 - DOUBLESIZE + 1) * 2;
11765 #endif
11766 #ifdef USE_LOCALE_NUMERIC
11767                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11768                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
11769                             need += SvLEN(PL_numeric_radix_sv);
11770                         RESTORE_LC_NUMERIC();
11771 #endif
11772                 }
11773                 else if (i > 0) {
11774                     need = BIT_DIGITS(i);
11775                 } /* if i < 0, the number of digits is hard to predict. */
11776             }
11777             need += has_precis ? precis : 6; /* known default */
11778
11779             if (need < width)
11780                 need = width;
11781
11782 #ifdef HAS_LDBL_SPRINTF_BUG
11783             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11784                with sfio - Allen <allens@cpan.org> */
11785
11786 #  ifdef DBL_MAX
11787 #    define MY_DBL_MAX DBL_MAX
11788 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11789 #    if DOUBLESIZE >= 8
11790 #      define MY_DBL_MAX 1.7976931348623157E+308L
11791 #    else
11792 #      define MY_DBL_MAX 3.40282347E+38L
11793 #    endif
11794 #  endif
11795
11796 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11797 #    define MY_DBL_MAX_BUG 1L
11798 #  else
11799 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11800 #  endif
11801
11802 #  ifdef DBL_MIN
11803 #    define MY_DBL_MIN DBL_MIN
11804 #  else  /* XXX guessing! -Allen */
11805 #    if DOUBLESIZE >= 8
11806 #      define MY_DBL_MIN 2.2250738585072014E-308L
11807 #    else
11808 #      define MY_DBL_MIN 1.17549435E-38L
11809 #    endif
11810 #  endif
11811
11812             if ((intsize == 'q') && (c == 'f') &&
11813                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11814                 (need < DBL_DIG)) {
11815                 /* it's going to be short enough that
11816                  * long double precision is not needed */
11817
11818                 if ((nv <= 0L) && (nv >= -0L))
11819                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11820                 else {
11821                     /* would use Perl_fp_class as a double-check but not
11822                      * functional on IRIX - see perl.h comments */
11823
11824                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11825                         /* It's within the range that a double can represent */
11826 #if defined(DBL_MAX) && !defined(DBL_MIN)
11827                         if ((nv >= ((long double)1/DBL_MAX)) ||
11828                             (nv <= (-(long double)1/DBL_MAX)))
11829 #endif
11830                         fix_ldbl_sprintf_bug = TRUE;
11831                     }
11832                 }
11833                 if (fix_ldbl_sprintf_bug == TRUE) {
11834                     double temp;
11835
11836                     intsize = 0;
11837                     temp = (double)nv;
11838                     nv = (NV)temp;
11839                 }
11840             }
11841
11842 #  undef MY_DBL_MAX
11843 #  undef MY_DBL_MAX_BUG
11844 #  undef MY_DBL_MIN
11845
11846 #endif /* HAS_LDBL_SPRINTF_BUG */
11847
11848             need += 20; /* fudge factor */
11849             if (PL_efloatsize < need) {
11850                 Safefree(PL_efloatbuf);
11851                 PL_efloatsize = need + 20; /* more fudge */
11852                 Newx(PL_efloatbuf, PL_efloatsize, char);
11853                 PL_efloatbuf[0] = '\0';
11854             }
11855
11856             if ( !(width || left || plus || alt) && fill != '0'
11857                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11858                 /* See earlier comment about buggy Gconvert when digits,
11859                    aka precis is 0  */
11860                 if ( c == 'g' && precis) {
11861                     STORE_LC_NUMERIC_SET_TO_NEEDED();
11862                     PERL_UNUSED_RESULT(Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf));
11863                     /* May return an empty string for digits==0 */
11864                     if (*PL_efloatbuf) {
11865                         elen = strlen(PL_efloatbuf);
11866                         goto float_converted;
11867                     }
11868                 } else if ( c == 'f' && !precis) {
11869                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11870                         break;
11871                 }
11872             }
11873
11874             if (UNLIKELY(hexfp)) {
11875                 /* Hexadecimal floating point. */
11876                 char* p = PL_efloatbuf;
11877                 U8 vhex[VHEX_SIZE];
11878                 U8* v = vhex; /* working pointer to vhex */
11879                 U8* vend; /* pointer to one beyond last digit of vhex */
11880                 U8* vfnz = NULL; /* first non-zero */
11881                 const bool lower = (c == 'a');
11882                 /* At output the values of vhex (up to vend) will
11883                  * be mapped through the xdig to get the actual
11884                  * human-readable xdigits. */
11885                 const char* xdig = PL_hexdigit;
11886                 int zerotail = 0; /* how many extra zeros to append */
11887                 int exponent = 0; /* exponent of the floating point input */
11888
11889                 /* XXX: denormals, NaN, Inf.
11890                  *
11891                  * For example with denormals, (assuming the vanilla
11892                  * 64-bit double): the exponent is zero. 1xp-1074 is
11893                  * the smallest denormal and the smallest double, it
11894                  * should be output as 0x0.0000000000001p-1022 to
11895                  * match its internal structure. */
11896
11897                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
11898                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
11899
11900 #if NVSIZE > DOUBLESIZE && defined(LONG_DOUBLEKIND)
11901 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
11902       LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11903                 exponent -= 4;
11904 #  else
11905                 exponent--;
11906 #  endif
11907 #endif
11908
11909                 if (nv < 0)
11910                     *p++ = '-';
11911                 else if (plus)
11912                     *p++ = plus;
11913                 *p++ = '0';
11914                 if (lower) {
11915                     *p++ = 'x';
11916                 }
11917                 else {
11918                     *p++ = 'X';
11919                     xdig += 16; /* Use uppercase hex. */
11920                 }
11921
11922                 /* Find the first non-zero xdigit. */
11923                 for (v = vhex; v < vend; v++) {
11924                     if (*v) {
11925                         vfnz = v;
11926                         break;
11927                     }
11928                 }
11929
11930                 if (vfnz) {
11931                     U8* vlnz = NULL; /* The last non-zero. */
11932
11933                     /* Find the last non-zero xdigit. */
11934                     for (v = vend - 1; v >= vhex; v--) {
11935                         if (*v) {
11936                             vlnz = v;
11937                             break;
11938                         }
11939                     }
11940
11941 #if NVSIZE == DOUBLESIZE
11942                     exponent--;
11943 #endif
11944
11945                     if (precis > 0) {
11946                         v = vhex + precis + 1;
11947                         if (v < vend) {
11948                             /* Round away from zero: if the tail
11949                              * beyond the precis xdigits is equal to
11950                              * or greater than 0x8000... */
11951                             bool round = *v > 0x8;
11952                             if (!round && *v == 0x8) {
11953                                 for (v++; v < vend; v++) {
11954                                     if (*v) {
11955                                         round = TRUE;
11956                                         break;
11957                                     }
11958                                 }
11959                             }
11960                             if (round) {
11961                                 for (v = vhex + precis; v >= vhex; v--) {
11962                                     if (*v < 0xF) {
11963                                         (*v)++;
11964                                         break;
11965                                     }
11966                                     *v = 0;
11967                                     if (v == vhex) {
11968                                         /* If the carry goes all the way to
11969                                          * the front, we need to output
11970                                          * a single '1'. This goes against
11971                                          * the "xdigit and then radix"
11972                                          * but since this is "cannot happen"
11973                                          * category, that is probably good. */
11974                                         *p++ = xdig[1];
11975                                     }
11976                                 }
11977                             }
11978                             /* The new effective "last non zero". */
11979                             vlnz = vhex + precis;
11980                         }
11981                         else {
11982                             zerotail = precis - (vlnz - vhex);
11983                         }
11984                     }
11985
11986                     v = vhex;
11987                     *p++ = xdig[*v++];
11988
11989                     /* The radix is always output after the first
11990                      * non-zero xdigit, or if alt.  */
11991                     if (vfnz < vlnz || alt) {
11992 #ifndef USE_LOCALE_NUMERIC
11993                         *p++ = '.';
11994 #else
11995                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11996                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
11997                             STRLEN n;
11998                             const char* r = SvPV(PL_numeric_radix_sv, n);
11999                             Copy(r, p, n, char);
12000                             p += n;
12001                         }
12002                         else {
12003                             *p++ = '.';
12004                         }
12005                         RESTORE_LC_NUMERIC();
12006 #endif
12007                     }
12008
12009                     while (v <= vlnz)
12010                         *p++ = xdig[*v++];
12011
12012                     while (zerotail--)
12013                         *p++ = '0';
12014                 }
12015                 else {
12016                     *p++ = '0';
12017                     exponent = 0;
12018                 }
12019
12020                 elen = p - PL_efloatbuf;
12021                 elen += my_snprintf(p, PL_efloatsize - elen,
12022                                     "%c%+d", lower ? 'p' : 'P',
12023                                     exponent);
12024
12025                 if (elen < width) {
12026                     if (left) {
12027                         /* Pad the back with spaces. */
12028                         memset(PL_efloatbuf + elen, ' ', width - elen);
12029                     }
12030                     else if (fill == '0') {
12031                         /* Insert the zeros between the "0x" and
12032                          * the digits, otherwise we end up with
12033                          * "0000xHHH..." */
12034                         STRLEN nzero = width - elen;
12035                         char* zerox = PL_efloatbuf + 2;
12036                         Move(zerox, zerox + nzero,  elen - 2, char);
12037                         memset(zerox, fill, nzero);
12038                     }
12039                     else {
12040                         /* Move it to the right. */
12041                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12042                              elen, char);
12043                         /* Pad the front with spaces. */
12044                         memset(PL_efloatbuf, ' ', width - elen);
12045                     }
12046                     elen = width;
12047                 }
12048             }
12049             else
12050                 elen = S_infnan_copy(nv, PL_efloatbuf, PL_efloatsize);
12051             if (elen == 0) {
12052                 char *ptr = ebuf + sizeof ebuf;
12053                 *--ptr = '\0';
12054                 *--ptr = c;
12055                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12056 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12057                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12058                  * not USE_LONG_DOUBLE and NVff.  In other words,
12059                  * this needs to work without USE_LONG_DOUBLE. */
12060                 if (intsize == 'q') {
12061                     /* Copy the one or more characters in a long double
12062                      * format before the 'base' ([efgEFG]) character to
12063                      * the format string. */
12064                     static char const ldblf[] = PERL_PRIfldbl;
12065                     char const *p = ldblf + sizeof(ldblf) - 3;
12066                     while (p >= ldblf) { *--ptr = *p--; }
12067                 }
12068 #endif
12069                 if (has_precis) {
12070                     base = precis;
12071                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12072                     *--ptr = '.';
12073                 }
12074                 if (width) {
12075                     base = width;
12076                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12077                 }
12078                 if (fill == '0')
12079                     *--ptr = fill;
12080                 if (left)
12081                     *--ptr = '-';
12082                 if (plus)
12083                     *--ptr = plus;
12084                 if (alt)
12085                     *--ptr = '#';
12086                 *--ptr = '%';
12087
12088                 /* No taint.  Otherwise we are in the strange situation
12089                  * where printf() taints but print($float) doesn't.
12090                  * --jhi */
12091
12092                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12093
12094                 /* hopefully the above makes ptr a very constrained format
12095                  * that is safe to use, even though it's not literal */
12096                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12097 #if defined(HAS_LONG_DOUBLE)
12098                 elen = ((intsize == 'q')
12099                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
12100                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
12101 #else
12102                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
12103 #endif
12104                 GCC_DIAG_RESTORE;
12105             }
12106
12107         float_converted:
12108             eptr = PL_efloatbuf;
12109
12110 #ifdef USE_LOCALE_NUMERIC
12111             /* If the decimal point character in the string is UTF-8, make the
12112              * output utf8 */
12113             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12114                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12115             {
12116                 is_utf8 = TRUE;
12117             }
12118 #endif
12119
12120             break;
12121
12122             /* SPECIAL */
12123
12124         case 'n':
12125             if (vectorize)
12126                 goto unknown;
12127             i = SvCUR(sv) - origlen;
12128             if (args) {
12129                 switch (intsize) {
12130                 case 'c':       *(va_arg(*args, char*)) = i; break;
12131                 case 'h':       *(va_arg(*args, short*)) = i; break;
12132                 default:        *(va_arg(*args, int*)) = i; break;
12133                 case 'l':       *(va_arg(*args, long*)) = i; break;
12134                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12135                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12136 #ifdef HAS_PTRDIFF_T
12137                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12138 #endif
12139 #ifdef HAS_C99
12140                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12141 #endif
12142                 case 'q':
12143 #if IVSIZE >= 8
12144                                 *(va_arg(*args, Quad_t*)) = i; break;
12145 #else
12146                                 goto unknown;
12147 #endif
12148                 }
12149             }
12150             else
12151                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12152             continue;   /* not "break" */
12153
12154             /* UNKNOWN */
12155
12156         default:
12157       unknown:
12158             if (!args
12159                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12160                 && ckWARN(WARN_PRINTF))
12161             {
12162                 SV * const msg = sv_newmortal();
12163                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12164                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12165                 if (fmtstart < patend) {
12166                     const char * const fmtend = q < patend ? q : patend;
12167                     const char * f;
12168                     sv_catpvs(msg, "\"%");
12169                     for (f = fmtstart; f < fmtend; f++) {
12170                         if (isPRINT(*f)) {
12171                             sv_catpvn_nomg(msg, f, 1);
12172                         } else {
12173                             Perl_sv_catpvf(aTHX_ msg,
12174                                            "\\%03"UVof, (UV)*f & 0xFF);
12175                         }
12176                     }
12177                     sv_catpvs(msg, "\"");
12178                 } else {
12179                     sv_catpvs(msg, "end of string");
12180                 }
12181                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12182             }
12183
12184             /* output mangled stuff ... */
12185             if (c == '\0')
12186                 --q;
12187             eptr = p;
12188             elen = q - p;
12189
12190             /* ... right here, because formatting flags should not apply */
12191             SvGROW(sv, SvCUR(sv) + elen + 1);
12192             p = SvEND(sv);
12193             Copy(eptr, p, elen, char);
12194             p += elen;
12195             *p = '\0';
12196             SvCUR_set(sv, p - SvPVX_const(sv));
12197             svix = osvix;
12198             continue;   /* not "break" */
12199         }
12200
12201         if (is_utf8 != has_utf8) {
12202             if (is_utf8) {
12203                 if (SvCUR(sv))
12204                     sv_utf8_upgrade(sv);
12205             }
12206             else {
12207                 const STRLEN old_elen = elen;
12208                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12209                 sv_utf8_upgrade(nsv);
12210                 eptr = SvPVX_const(nsv);
12211                 elen = SvCUR(nsv);
12212
12213                 if (width) { /* fudge width (can't fudge elen) */
12214                     width += elen - old_elen;
12215                 }
12216                 is_utf8 = TRUE;
12217             }
12218         }
12219
12220         have = esignlen + zeros + elen;
12221         if (have < zeros)
12222             croak_memory_wrap();
12223
12224         need = (have > width ? have : width);
12225         gap = need - have;
12226
12227         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12228             croak_memory_wrap();
12229         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12230         p = SvEND(sv);
12231         if (esignlen && fill == '0') {
12232             int i;
12233             for (i = 0; i < (int)esignlen; i++)
12234                 *p++ = esignbuf[i];
12235         }
12236         if (gap && !left) {
12237             memset(p, fill, gap);
12238             p += gap;
12239         }
12240         if (esignlen && fill != '0') {
12241             int i;
12242             for (i = 0; i < (int)esignlen; i++)
12243                 *p++ = esignbuf[i];
12244         }
12245         if (zeros) {
12246             int i;
12247             for (i = zeros; i; i--)
12248                 *p++ = '0';
12249         }
12250         if (elen) {
12251             Copy(eptr, p, elen, char);
12252             p += elen;
12253         }
12254         if (gap && left) {
12255             memset(p, ' ', gap);
12256             p += gap;
12257         }
12258         if (vectorize) {
12259             if (veclen) {
12260                 Copy(dotstr, p, dotstrlen, char);
12261                 p += dotstrlen;
12262             }
12263             else
12264                 vectorize = FALSE;              /* done iterating over vecstr */
12265         }
12266         if (is_utf8)
12267             has_utf8 = TRUE;
12268         if (has_utf8)
12269             SvUTF8_on(sv);
12270         *p = '\0';
12271         SvCUR_set(sv, p - SvPVX_const(sv));
12272         if (vectorize) {
12273             esignlen = 0;
12274             goto vector;
12275         }
12276     }
12277
12278     /* Now that we've consumed all our printf format arguments (svix)
12279      * do we have things left on the stack that we didn't use?
12280      */
12281     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12282         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12283                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12284     }
12285
12286     SvTAINT(sv);
12287
12288     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12289                                each iteration. */
12290 }
12291
12292 /* =========================================================================
12293
12294 =head1 Cloning an interpreter
12295
12296 =cut
12297
12298 All the macros and functions in this section are for the private use of
12299 the main function, perl_clone().
12300
12301 The foo_dup() functions make an exact copy of an existing foo thingy.
12302 During the course of a cloning, a hash table is used to map old addresses
12303 to new addresses.  The table is created and manipulated with the
12304 ptr_table_* functions.
12305
12306  * =========================================================================*/
12307
12308
12309 #if defined(USE_ITHREADS)
12310
12311 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12312 #ifndef GpREFCNT_inc
12313 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12314 #endif
12315
12316
12317 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12318    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12319    If this changes, please unmerge ss_dup.
12320    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12321 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12322 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12323 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12324 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12325 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12326 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12327 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12328 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12329 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12330 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12331 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12332 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12333 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12334
12335 /* clone a parser */
12336
12337 yy_parser *
12338 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12339 {
12340     yy_parser *parser;
12341
12342     PERL_ARGS_ASSERT_PARSER_DUP;
12343
12344     if (!proto)
12345         return NULL;
12346
12347     /* look for it in the table first */
12348     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12349     if (parser)
12350         return parser;
12351
12352     /* create anew and remember what it is */
12353     Newxz(parser, 1, yy_parser);
12354     ptr_table_store(PL_ptr_table, proto, parser);
12355
12356     /* XXX these not yet duped */
12357     parser->old_parser = NULL;
12358     parser->stack = NULL;
12359     parser->ps = NULL;
12360     parser->stack_size = 0;
12361     /* XXX parser->stack->state = 0; */
12362
12363     /* XXX eventually, just Copy() most of the parser struct ? */
12364
12365     parser->lex_brackets = proto->lex_brackets;
12366     parser->lex_casemods = proto->lex_casemods;
12367     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12368                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12369     parser->lex_casestack = savepvn(proto->lex_casestack,
12370                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12371     parser->lex_defer   = proto->lex_defer;
12372     parser->lex_dojoin  = proto->lex_dojoin;
12373     parser->lex_formbrack = proto->lex_formbrack;
12374     parser->lex_inpat   = proto->lex_inpat;
12375     parser->lex_inwhat  = proto->lex_inwhat;
12376     parser->lex_op      = proto->lex_op;
12377     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12378     parser->lex_starts  = proto->lex_starts;
12379     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12380     parser->multi_close = proto->multi_close;
12381     parser->multi_open  = proto->multi_open;
12382     parser->multi_start = proto->multi_start;
12383     parser->multi_end   = proto->multi_end;
12384     parser->preambled   = proto->preambled;
12385     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12386     parser->linestr     = sv_dup_inc(proto->linestr, param);
12387     parser->expect      = proto->expect;
12388     parser->copline     = proto->copline;
12389     parser->last_lop_op = proto->last_lop_op;
12390     parser->lex_state   = proto->lex_state;
12391     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12392     /* rsfp_filters entries have fake IoDIRP() */
12393     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12394     parser->in_my       = proto->in_my;
12395     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12396     parser->error_count = proto->error_count;
12397
12398
12399     parser->linestr     = sv_dup_inc(proto->linestr, param);
12400
12401     {
12402         char * const ols = SvPVX(proto->linestr);
12403         char * const ls  = SvPVX(parser->linestr);
12404
12405         parser->bufptr      = ls + (proto->bufptr >= ols ?
12406                                     proto->bufptr -  ols : 0);
12407         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12408                                     proto->oldbufptr -  ols : 0);
12409         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12410                                     proto->oldoldbufptr -  ols : 0);
12411         parser->linestart   = ls + (proto->linestart >= ols ?
12412                                     proto->linestart -  ols : 0);
12413         parser->last_uni    = ls + (proto->last_uni >= ols ?
12414                                     proto->last_uni -  ols : 0);
12415         parser->last_lop    = ls + (proto->last_lop >= ols ?
12416                                     proto->last_lop -  ols : 0);
12417
12418         parser->bufend      = ls + SvCUR(parser->linestr);
12419     }
12420
12421     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12422
12423
12424     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12425     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12426     parser->nexttoke    = proto->nexttoke;
12427
12428     /* XXX should clone saved_curcop here, but we aren't passed
12429      * proto_perl; so do it in perl_clone_using instead */
12430
12431     return parser;
12432 }
12433
12434
12435 /* duplicate a file handle */
12436
12437 PerlIO *
12438 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12439 {
12440     PerlIO *ret;
12441
12442     PERL_ARGS_ASSERT_FP_DUP;
12443     PERL_UNUSED_ARG(type);
12444
12445     if (!fp)
12446         return (PerlIO*)NULL;
12447
12448     /* look for it in the table first */
12449     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12450     if (ret)
12451         return ret;
12452
12453     /* create anew and remember what it is */
12454     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12455     ptr_table_store(PL_ptr_table, fp, ret);
12456     return ret;
12457 }
12458
12459 /* duplicate a directory handle */
12460
12461 DIR *
12462 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12463 {
12464     DIR *ret;
12465
12466 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12467     DIR *pwd;
12468     const Direntry_t *dirent;
12469     char smallbuf[256];
12470     char *name = NULL;
12471     STRLEN len = 0;
12472     long pos;
12473 #endif
12474
12475     PERL_UNUSED_CONTEXT;
12476     PERL_ARGS_ASSERT_DIRP_DUP;
12477
12478     if (!dp)
12479         return (DIR*)NULL;
12480
12481     /* look for it in the table first */
12482     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12483     if (ret)
12484         return ret;
12485
12486 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12487
12488     PERL_UNUSED_ARG(param);
12489
12490     /* create anew */
12491
12492     /* open the current directory (so we can switch back) */
12493     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12494
12495     /* chdir to our dir handle and open the present working directory */
12496     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12497         PerlDir_close(pwd);
12498         return (DIR *)NULL;
12499     }
12500     /* Now we should have two dir handles pointing to the same dir. */
12501
12502     /* Be nice to the calling code and chdir back to where we were. */
12503     /* XXX If this fails, then what? */
12504     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12505
12506     /* We have no need of the pwd handle any more. */
12507     PerlDir_close(pwd);
12508
12509 #ifdef DIRNAMLEN
12510 # define d_namlen(d) (d)->d_namlen
12511 #else
12512 # define d_namlen(d) strlen((d)->d_name)
12513 #endif
12514     /* Iterate once through dp, to get the file name at the current posi-
12515        tion. Then step back. */
12516     pos = PerlDir_tell(dp);
12517     if ((dirent = PerlDir_read(dp))) {
12518         len = d_namlen(dirent);
12519         if (len <= sizeof smallbuf) name = smallbuf;
12520         else Newx(name, len, char);
12521         Move(dirent->d_name, name, len, char);
12522     }
12523     PerlDir_seek(dp, pos);
12524
12525     /* Iterate through the new dir handle, till we find a file with the
12526        right name. */
12527     if (!dirent) /* just before the end */
12528         for(;;) {
12529             pos = PerlDir_tell(ret);
12530             if (PerlDir_read(ret)) continue; /* not there yet */
12531             PerlDir_seek(ret, pos); /* step back */
12532             break;
12533         }
12534     else {
12535         const long pos0 = PerlDir_tell(ret);
12536         for(;;) {
12537             pos = PerlDir_tell(ret);
12538             if ((dirent = PerlDir_read(ret))) {
12539                 if (len == (STRLEN)d_namlen(dirent)
12540                     && memEQ(name, dirent->d_name, len)) {
12541                     /* found it */
12542                     PerlDir_seek(ret, pos); /* step back */
12543                     break;
12544                 }
12545                 /* else we are not there yet; keep iterating */
12546             }
12547             else { /* This is not meant to happen. The best we can do is
12548                       reset the iterator to the beginning. */
12549                 PerlDir_seek(ret, pos0);
12550                 break;
12551             }
12552         }
12553     }
12554 #undef d_namlen
12555
12556     if (name && name != smallbuf)
12557         Safefree(name);
12558 #endif
12559
12560 #ifdef WIN32
12561     ret = win32_dirp_dup(dp, param);
12562 #endif
12563
12564     /* pop it in the pointer table */
12565     if (ret)
12566         ptr_table_store(PL_ptr_table, dp, ret);
12567
12568     return ret;
12569 }
12570
12571 /* duplicate a typeglob */
12572
12573 GP *
12574 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12575 {
12576     GP *ret;
12577
12578     PERL_ARGS_ASSERT_GP_DUP;
12579
12580     if (!gp)
12581         return (GP*)NULL;
12582     /* look for it in the table first */
12583     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12584     if (ret)
12585         return ret;
12586
12587     /* create anew and remember what it is */
12588     Newxz(ret, 1, GP);
12589     ptr_table_store(PL_ptr_table, gp, ret);
12590
12591     /* clone */
12592     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12593        on Newxz() to do this for us.  */
12594     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12595     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12596     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12597     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12598     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12599     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12600     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12601     ret->gp_cvgen       = gp->gp_cvgen;
12602     ret->gp_line        = gp->gp_line;
12603     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12604     return ret;
12605 }
12606
12607 /* duplicate a chain of magic */
12608
12609 MAGIC *
12610 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12611 {
12612     MAGIC *mgret = NULL;
12613     MAGIC **mgprev_p = &mgret;
12614
12615     PERL_ARGS_ASSERT_MG_DUP;
12616
12617     for (; mg; mg = mg->mg_moremagic) {
12618         MAGIC *nmg;
12619
12620         if ((param->flags & CLONEf_JOIN_IN)
12621                 && mg->mg_type == PERL_MAGIC_backref)
12622             /* when joining, we let the individual SVs add themselves to
12623              * backref as needed. */
12624             continue;
12625
12626         Newx(nmg, 1, MAGIC);
12627         *mgprev_p = nmg;
12628         mgprev_p = &(nmg->mg_moremagic);
12629
12630         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12631            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12632            from the original commit adding Perl_mg_dup() - revision 4538.
12633            Similarly there is the annotation "XXX random ptr?" next to the
12634            assignment to nmg->mg_ptr.  */
12635         *nmg = *mg;
12636
12637         /* FIXME for plugins
12638         if (nmg->mg_type == PERL_MAGIC_qr) {
12639             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12640         }
12641         else
12642         */
12643         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12644                           ? nmg->mg_type == PERL_MAGIC_backref
12645                                 /* The backref AV has its reference
12646                                  * count deliberately bumped by 1 */
12647                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12648                                                     nmg->mg_obj, param))
12649                                 : sv_dup_inc(nmg->mg_obj, param)
12650                           : sv_dup(nmg->mg_obj, param);
12651
12652         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12653             if (nmg->mg_len > 0) {
12654                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12655                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12656                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12657                 {
12658                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12659                     sv_dup_inc_multiple((SV**)(namtp->table),
12660                                         (SV**)(namtp->table), NofAMmeth, param);
12661                 }
12662             }
12663             else if (nmg->mg_len == HEf_SVKEY)
12664                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12665         }
12666         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12667             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12668         }
12669     }
12670     return mgret;
12671 }
12672
12673 #endif /* USE_ITHREADS */
12674
12675 struct ptr_tbl_arena {
12676     struct ptr_tbl_arena *next;
12677     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
12678 };
12679
12680 /* create a new pointer-mapping table */
12681
12682 PTR_TBL_t *
12683 Perl_ptr_table_new(pTHX)
12684 {
12685     PTR_TBL_t *tbl;
12686     PERL_UNUSED_CONTEXT;
12687
12688     Newx(tbl, 1, PTR_TBL_t);
12689     tbl->tbl_max        = 511;
12690     tbl->tbl_items      = 0;
12691     tbl->tbl_arena      = NULL;
12692     tbl->tbl_arena_next = NULL;
12693     tbl->tbl_arena_end  = NULL;
12694     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
12695     return tbl;
12696 }
12697
12698 #define PTR_TABLE_HASH(ptr) \
12699   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
12700
12701 /* map an existing pointer using a table */
12702
12703 STATIC PTR_TBL_ENT_t *
12704 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
12705 {
12706     PTR_TBL_ENT_t *tblent;
12707     const UV hash = PTR_TABLE_HASH(sv);
12708
12709     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
12710
12711     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
12712     for (; tblent; tblent = tblent->next) {
12713         if (tblent->oldval == sv)
12714             return tblent;
12715     }
12716     return NULL;
12717 }
12718
12719 void *
12720 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
12721 {
12722     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
12723
12724     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
12725     PERL_UNUSED_CONTEXT;
12726
12727     return tblent ? tblent->newval : NULL;
12728 }
12729
12730 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
12731  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
12732  * the core's typical use of ptr_tables in thread cloning. */
12733
12734 void
12735 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
12736 {
12737     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
12738
12739     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
12740     PERL_UNUSED_CONTEXT;
12741
12742     if (tblent) {
12743         tblent->newval = newsv;
12744     } else {
12745         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
12746
12747         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12748             struct ptr_tbl_arena *new_arena;
12749
12750             Newx(new_arena, 1, struct ptr_tbl_arena);
12751             new_arena->next = tbl->tbl_arena;
12752             tbl->tbl_arena = new_arena;
12753             tbl->tbl_arena_next = new_arena->array;
12754             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
12755         }
12756
12757         tblent = tbl->tbl_arena_next++;
12758
12759         tblent->oldval = oldsv;
12760         tblent->newval = newsv;
12761         tblent->next = tbl->tbl_ary[entry];
12762         tbl->tbl_ary[entry] = tblent;
12763         tbl->tbl_items++;
12764         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12765             ptr_table_split(tbl);
12766     }
12767 }
12768
12769 /* double the hash bucket size of an existing ptr table */
12770
12771 void
12772 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12773 {
12774     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12775     const UV oldsize = tbl->tbl_max + 1;
12776     UV newsize = oldsize * 2;
12777     UV i;
12778
12779     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12780     PERL_UNUSED_CONTEXT;
12781
12782     Renew(ary, newsize, PTR_TBL_ENT_t*);
12783     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12784     tbl->tbl_max = --newsize;
12785     tbl->tbl_ary = ary;
12786     for (i=0; i < oldsize; i++, ary++) {
12787         PTR_TBL_ENT_t **entp = ary;
12788         PTR_TBL_ENT_t *ent = *ary;
12789         PTR_TBL_ENT_t **curentp;
12790         if (!ent)
12791             continue;
12792         curentp = ary + oldsize;
12793         do {
12794             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12795                 *entp = ent->next;
12796                 ent->next = *curentp;
12797                 *curentp = ent;
12798             }
12799             else
12800                 entp = &ent->next;
12801             ent = *entp;
12802         } while (ent);
12803     }
12804 }
12805
12806 /* remove all the entries from a ptr table */
12807 /* Deprecated - will be removed post 5.14 */
12808
12809 void
12810 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12811 {
12812     PERL_UNUSED_CONTEXT;
12813     if (tbl && tbl->tbl_items) {
12814         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12815
12816         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12817
12818         while (arena) {
12819             struct ptr_tbl_arena *next = arena->next;
12820
12821             Safefree(arena);
12822             arena = next;
12823         };
12824
12825         tbl->tbl_items = 0;
12826         tbl->tbl_arena = NULL;
12827         tbl->tbl_arena_next = NULL;
12828         tbl->tbl_arena_end = NULL;
12829     }
12830 }
12831
12832 /* clear and free a ptr table */
12833
12834 void
12835 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12836 {
12837     struct ptr_tbl_arena *arena;
12838
12839     PERL_UNUSED_CONTEXT;
12840
12841     if (!tbl) {
12842         return;
12843     }
12844
12845     arena = tbl->tbl_arena;
12846
12847     while (arena) {
12848         struct ptr_tbl_arena *next = arena->next;
12849
12850         Safefree(arena);
12851         arena = next;
12852     }
12853
12854     Safefree(tbl->tbl_ary);
12855     Safefree(tbl);
12856 }
12857
12858 #if defined(USE_ITHREADS)
12859
12860 void
12861 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12862 {
12863     PERL_ARGS_ASSERT_RVPV_DUP;
12864
12865     assert(!isREGEXP(sstr));
12866     if (SvROK(sstr)) {
12867         if (SvWEAKREF(sstr)) {
12868             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12869             if (param->flags & CLONEf_JOIN_IN) {
12870                 /* if joining, we add any back references individually rather
12871                  * than copying the whole backref array */
12872                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12873             }
12874         }
12875         else
12876             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12877     }
12878     else if (SvPVX_const(sstr)) {
12879         /* Has something there */
12880         if (SvLEN(sstr)) {
12881             /* Normal PV - clone whole allocated space */
12882             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12883             /* sstr may not be that normal, but actually copy on write.
12884                But we are a true, independent SV, so:  */
12885             SvIsCOW_off(dstr);
12886         }
12887         else {
12888             /* Special case - not normally malloced for some reason */
12889             if (isGV_with_GP(sstr)) {
12890                 /* Don't need to do anything here.  */
12891             }
12892             else if ((SvIsCOW(sstr))) {
12893                 /* A "shared" PV - clone it as "shared" PV */
12894                 SvPV_set(dstr,
12895                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12896                                          param)));
12897             }
12898             else {
12899                 /* Some other special case - random pointer */
12900                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12901             }
12902         }
12903     }
12904     else {
12905         /* Copy the NULL */
12906         SvPV_set(dstr, NULL);
12907     }
12908 }
12909
12910 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12911 static SV **
12912 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12913                       SSize_t items, CLONE_PARAMS *const param)
12914 {
12915     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12916
12917     while (items-- > 0) {
12918         *dest++ = sv_dup_inc(*source++, param);
12919     }
12920
12921     return dest;
12922 }
12923
12924 /* duplicate an SV of any type (including AV, HV etc) */
12925
12926 static SV *
12927 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12928 {
12929     dVAR;
12930     SV *dstr;
12931
12932     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12933
12934     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12935 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12936         abort();
12937 #endif
12938         return NULL;
12939     }
12940     /* look for it in the table first */
12941     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12942     if (dstr)
12943         return dstr;
12944
12945     if(param->flags & CLONEf_JOIN_IN) {
12946         /** We are joining here so we don't want do clone
12947             something that is bad **/
12948         if (SvTYPE(sstr) == SVt_PVHV) {
12949             const HEK * const hvname = HvNAME_HEK(sstr);
12950             if (hvname) {
12951                 /** don't clone stashes if they already exist **/
12952                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12953                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12954                 ptr_table_store(PL_ptr_table, sstr, dstr);
12955                 return dstr;
12956             }
12957         }
12958         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12959             HV *stash = GvSTASH(sstr);
12960             const HEK * hvname;
12961             if (stash && (hvname = HvNAME_HEK(stash))) {
12962                 /** don't clone GVs if they already exist **/
12963                 SV **svp;
12964                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12965                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12966                 svp = hv_fetch(
12967                         stash, GvNAME(sstr),
12968                         GvNAMEUTF8(sstr)
12969                             ? -GvNAMELEN(sstr)
12970                             :  GvNAMELEN(sstr),
12971                         0
12972                       );
12973                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12974                     ptr_table_store(PL_ptr_table, sstr, *svp);
12975                     return *svp;
12976                 }
12977             }
12978         }
12979     }
12980
12981     /* create anew and remember what it is */
12982     new_SV(dstr);
12983
12984 #ifdef DEBUG_LEAKING_SCALARS
12985     dstr->sv_debug_optype = sstr->sv_debug_optype;
12986     dstr->sv_debug_line = sstr->sv_debug_line;
12987     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12988     dstr->sv_debug_parent = (SV*)sstr;
12989     FREE_SV_DEBUG_FILE(dstr);
12990     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12991 #endif
12992
12993     ptr_table_store(PL_ptr_table, sstr, dstr);
12994
12995     /* clone */
12996     SvFLAGS(dstr)       = SvFLAGS(sstr);
12997     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12998     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12999
13000 #ifdef DEBUGGING
13001     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13002         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13003                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13004 #endif
13005
13006     /* don't clone objects whose class has asked us not to */
13007     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
13008         SvFLAGS(dstr) = 0;
13009         return dstr;
13010     }
13011
13012     switch (SvTYPE(sstr)) {
13013     case SVt_NULL:
13014         SvANY(dstr)     = NULL;
13015         break;
13016     case SVt_IV:
13017         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
13018         if(SvROK(sstr)) {
13019             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13020         } else {
13021             SvIV_set(dstr, SvIVX(sstr));
13022         }
13023         break;
13024     case SVt_NV:
13025         SvANY(dstr)     = new_XNV();
13026         SvNV_set(dstr, SvNVX(sstr));
13027         break;
13028     default:
13029         {
13030             /* These are all the types that need complex bodies allocating.  */
13031             void *new_body;
13032             const svtype sv_type = SvTYPE(sstr);
13033             const struct body_details *const sv_type_details
13034                 = bodies_by_type + sv_type;
13035
13036             switch (sv_type) {
13037             default:
13038                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13039                 break;
13040
13041             case SVt_PVGV:
13042             case SVt_PVIO:
13043             case SVt_PVFM:
13044             case SVt_PVHV:
13045             case SVt_PVAV:
13046             case SVt_PVCV:
13047             case SVt_PVLV:
13048             case SVt_REGEXP:
13049             case SVt_PVMG:
13050             case SVt_PVNV:
13051             case SVt_PVIV:
13052             case SVt_INVLIST:
13053             case SVt_PV:
13054                 assert(sv_type_details->body_size);
13055                 if (sv_type_details->arena) {
13056                     new_body_inline(new_body, sv_type);
13057                     new_body
13058                         = (void*)((char*)new_body - sv_type_details->offset);
13059                 } else {
13060                     new_body = new_NOARENA(sv_type_details);
13061                 }
13062             }
13063             assert(new_body);
13064             SvANY(dstr) = new_body;
13065
13066 #ifndef PURIFY
13067             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13068                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13069                  sv_type_details->copy, char);
13070 #else
13071             Copy(((char*)SvANY(sstr)),
13072                  ((char*)SvANY(dstr)),
13073                  sv_type_details->body_size + sv_type_details->offset, char);
13074 #endif
13075
13076             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13077                 && !isGV_with_GP(dstr)
13078                 && !isREGEXP(dstr)
13079                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13080                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13081
13082             /* The Copy above means that all the source (unduplicated) pointers
13083                are now in the destination.  We can check the flags and the
13084                pointers in either, but it's possible that there's less cache
13085                missing by always going for the destination.
13086                FIXME - instrument and check that assumption  */
13087             if (sv_type >= SVt_PVMG) {
13088                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
13089                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
13090                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
13091                     NOOP;
13092                 } else if (SvMAGIC(dstr))
13093                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13094                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13095                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13096                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13097             }
13098
13099             /* The cast silences a GCC warning about unhandled types.  */
13100             switch ((int)sv_type) {
13101             case SVt_PV:
13102                 break;
13103             case SVt_PVIV:
13104                 break;
13105             case SVt_PVNV:
13106                 break;
13107             case SVt_PVMG:
13108                 break;
13109             case SVt_REGEXP:
13110               duprex:
13111                 /* FIXME for plugins */
13112                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13113                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13114                 break;
13115             case SVt_PVLV:
13116                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13117                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13118                     LvTARG(dstr) = dstr;
13119                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13120                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13121                 else
13122                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13123                 if (isREGEXP(sstr)) goto duprex;
13124             case SVt_PVGV:
13125                 /* non-GP case already handled above */
13126                 if(isGV_with_GP(sstr)) {
13127                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13128                     /* Don't call sv_add_backref here as it's going to be
13129                        created as part of the magic cloning of the symbol
13130                        table--unless this is during a join and the stash
13131                        is not actually being cloned.  */
13132                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13133                        at the point of this comment.  */
13134                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13135                     if (param->flags & CLONEf_JOIN_IN)
13136                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13137                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13138                     (void)GpREFCNT_inc(GvGP(dstr));
13139                 }
13140                 break;
13141             case SVt_PVIO:
13142                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13143                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13144                     /* I have no idea why fake dirp (rsfps)
13145                        should be treated differently but otherwise
13146                        we end up with leaks -- sky*/
13147                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13148                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13149                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13150                 } else {
13151                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13152                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13153                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13154                     if (IoDIRP(dstr)) {
13155                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13156                     } else {
13157                         NOOP;
13158                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13159                     }
13160                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13161                 }
13162                 if (IoOFP(dstr) == IoIFP(sstr))
13163                     IoOFP(dstr) = IoIFP(dstr);
13164                 else
13165                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13166                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13167                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13168                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13169                 break;
13170             case SVt_PVAV:
13171                 /* avoid cloning an empty array */
13172                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13173                     SV **dst_ary, **src_ary;
13174                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13175
13176                     src_ary = AvARRAY((const AV *)sstr);
13177                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13178                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13179                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13180                     AvALLOC((const AV *)dstr) = dst_ary;
13181                     if (AvREAL((const AV *)sstr)) {
13182                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13183                                                       param);
13184                     }
13185                     else {
13186                         while (items-- > 0)
13187                             *dst_ary++ = sv_dup(*src_ary++, param);
13188                     }
13189                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13190                     while (items-- > 0) {
13191                         *dst_ary++ = &PL_sv_undef;
13192                     }
13193                 }
13194                 else {
13195                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13196                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13197                     AvMAX(  (const AV *)dstr)   = -1;
13198                     AvFILLp((const AV *)dstr)   = -1;
13199                 }
13200                 break;
13201             case SVt_PVHV:
13202                 if (HvARRAY((const HV *)sstr)) {
13203                     STRLEN i = 0;
13204                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13205                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13206                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13207                     char *darray;
13208                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13209                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13210                         char);
13211                     HvARRAY(dstr) = (HE**)darray;
13212                     while (i <= sxhv->xhv_max) {
13213                         const HE * const source = HvARRAY(sstr)[i];
13214                         HvARRAY(dstr)[i] = source
13215                             ? he_dup(source, sharekeys, param) : 0;
13216                         ++i;
13217                     }
13218                     if (SvOOK(sstr)) {
13219                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13220                         struct xpvhv_aux * const daux = HvAUX(dstr);
13221                         /* This flag isn't copied.  */
13222                         SvOOK_on(dstr);
13223
13224                         if (saux->xhv_name_count) {
13225                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13226                             const I32 count
13227                              = saux->xhv_name_count < 0
13228                                 ? -saux->xhv_name_count
13229                                 :  saux->xhv_name_count;
13230                             HEK **shekp = sname + count;
13231                             HEK **dhekp;
13232                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13233                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13234                             while (shekp-- > sname) {
13235                                 dhekp--;
13236                                 *dhekp = hek_dup(*shekp, param);
13237                             }
13238                         }
13239                         else {
13240                             daux->xhv_name_u.xhvnameu_name
13241                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13242                                           param);
13243                         }
13244                         daux->xhv_name_count = saux->xhv_name_count;
13245
13246                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13247                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13248 #ifdef PERL_HASH_RANDOMIZE_KEYS
13249                         daux->xhv_rand = saux->xhv_rand;
13250                         daux->xhv_last_rand = saux->xhv_last_rand;
13251 #endif
13252                         daux->xhv_riter = saux->xhv_riter;
13253                         daux->xhv_eiter = saux->xhv_eiter
13254                             ? he_dup(saux->xhv_eiter,
13255                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13256                         /* backref array needs refcnt=2; see sv_add_backref */
13257                         daux->xhv_backreferences =
13258                             (param->flags & CLONEf_JOIN_IN)
13259                                 /* when joining, we let the individual GVs and
13260                                  * CVs add themselves to backref as
13261                                  * needed. This avoids pulling in stuff
13262                                  * that isn't required, and simplifies the
13263                                  * case where stashes aren't cloned back
13264                                  * if they already exist in the parent
13265                                  * thread */
13266                             ? NULL
13267                             : saux->xhv_backreferences
13268                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13269                                     ? MUTABLE_AV(SvREFCNT_inc(
13270                                           sv_dup_inc((const SV *)
13271                                             saux->xhv_backreferences, param)))
13272                                     : MUTABLE_AV(sv_dup((const SV *)
13273                                             saux->xhv_backreferences, param))
13274                                 : 0;
13275
13276                         daux->xhv_mro_meta = saux->xhv_mro_meta
13277                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13278                             : 0;
13279
13280                         /* Record stashes for possible cloning in Perl_clone(). */
13281                         if (HvNAME(sstr))
13282                             av_push(param->stashes, dstr);
13283                     }
13284                 }
13285                 else
13286                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13287                 break;
13288             case SVt_PVCV:
13289                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13290                     CvDEPTH(dstr) = 0;
13291                 }
13292                 /* FALLTHROUGH */
13293             case SVt_PVFM:
13294                 /* NOTE: not refcounted */
13295                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13296                     hv_dup(CvSTASH(dstr), param);
13297                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13298                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13299                 if (!CvISXSUB(dstr)) {
13300                     OP_REFCNT_LOCK;
13301                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13302                     OP_REFCNT_UNLOCK;
13303                     CvSLABBED_off(dstr);
13304                 } else if (CvCONST(dstr)) {
13305                     CvXSUBANY(dstr).any_ptr =
13306                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13307                 }
13308                 assert(!CvSLABBED(dstr));
13309                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13310                 if (CvNAMED(dstr))
13311                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13312                         share_hek_hek(CvNAME_HEK((CV *)sstr));
13313                 /* don't dup if copying back - CvGV isn't refcounted, so the
13314                  * duped GV may never be freed. A bit of a hack! DAPM */
13315                 else
13316                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13317                     CvCVGV_RC(dstr)
13318                     ? gv_dup_inc(CvGV(sstr), param)
13319                     : (param->flags & CLONEf_JOIN_IN)
13320                         ? NULL
13321                         : gv_dup(CvGV(sstr), param);
13322
13323                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
13324                 CvOUTSIDE(dstr) =
13325                     CvWEAKOUTSIDE(sstr)
13326                     ? cv_dup(    CvOUTSIDE(dstr), param)
13327                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13328                 break;
13329             }
13330         }
13331     }
13332
13333     return dstr;
13334  }
13335
13336 SV *
13337 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13338 {
13339     PERL_ARGS_ASSERT_SV_DUP_INC;
13340     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13341 }
13342
13343 SV *
13344 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13345 {
13346     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13347     PERL_ARGS_ASSERT_SV_DUP;
13348
13349     /* Track every SV that (at least initially) had a reference count of 0.
13350        We need to do this by holding an actual reference to it in this array.
13351        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13352        (akin to the stashes hash, and the perl stack), we come unstuck if
13353        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13354        thread) is manipulated in a CLONE method, because CLONE runs before the
13355        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13356        (and fix things up by giving each a reference via the temps stack).
13357        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13358        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13359        before the walk of unreferenced happens and a reference to that is SV
13360        added to the temps stack. At which point we have the same SV considered
13361        to be in use, and free to be re-used. Not good.
13362     */
13363     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13364         assert(param->unreferenced);
13365         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13366     }
13367
13368     return dstr;
13369 }
13370
13371 /* duplicate a context */
13372
13373 PERL_CONTEXT *
13374 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13375 {
13376     PERL_CONTEXT *ncxs;
13377
13378     PERL_ARGS_ASSERT_CX_DUP;
13379
13380     if (!cxs)
13381         return (PERL_CONTEXT*)NULL;
13382
13383     /* look for it in the table first */
13384     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13385     if (ncxs)
13386         return ncxs;
13387
13388     /* create anew and remember what it is */
13389     Newx(ncxs, max + 1, PERL_CONTEXT);
13390     ptr_table_store(PL_ptr_table, cxs, ncxs);
13391     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13392
13393     while (ix >= 0) {
13394         PERL_CONTEXT * const ncx = &ncxs[ix];
13395         if (CxTYPE(ncx) == CXt_SUBST) {
13396             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13397         }
13398         else {
13399             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13400             switch (CxTYPE(ncx)) {
13401             case CXt_SUB:
13402                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13403                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13404                                            : cv_dup(ncx->blk_sub.cv,param));
13405                 if(CxHASARGS(ncx)){
13406                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13407                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13408                 } else {
13409                     ncx->blk_sub.argarray = NULL;
13410                     ncx->blk_sub.savearray = NULL;
13411                 }
13412                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13413                                            ncx->blk_sub.oldcomppad);
13414                 break;
13415             case CXt_EVAL:
13416                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13417                                                       param);
13418                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13419                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13420                 break;
13421             case CXt_LOOP_LAZYSV:
13422                 ncx->blk_loop.state_u.lazysv.end
13423                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13424                 /* We are taking advantage of av_dup_inc and sv_dup_inc
13425                    actually being the same function, and order equivalence of
13426                    the two unions.
13427                    We can assert the later [but only at run time :-(]  */
13428                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13429                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13430             case CXt_LOOP_FOR:
13431                 ncx->blk_loop.state_u.ary.ary
13432                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13433             case CXt_LOOP_LAZYIV:
13434             case CXt_LOOP_PLAIN:
13435                 if (CxPADLOOP(ncx)) {
13436                     ncx->blk_loop.itervar_u.oldcomppad
13437                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13438                                         ncx->blk_loop.itervar_u.oldcomppad);
13439                 } else {
13440                     ncx->blk_loop.itervar_u.gv
13441                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13442                                     param);
13443                 }
13444                 break;
13445             case CXt_FORMAT:
13446                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13447                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13448                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13449                                                      param);
13450                 break;
13451             case CXt_BLOCK:
13452             case CXt_NULL:
13453             case CXt_WHEN:
13454             case CXt_GIVEN:
13455                 break;
13456             }
13457         }
13458         --ix;
13459     }
13460     return ncxs;
13461 }
13462
13463 /* duplicate a stack info structure */
13464
13465 PERL_SI *
13466 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13467 {
13468     PERL_SI *nsi;
13469
13470     PERL_ARGS_ASSERT_SI_DUP;
13471
13472     if (!si)
13473         return (PERL_SI*)NULL;
13474
13475     /* look for it in the table first */
13476     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13477     if (nsi)
13478         return nsi;
13479
13480     /* create anew and remember what it is */
13481     Newxz(nsi, 1, PERL_SI);
13482     ptr_table_store(PL_ptr_table, si, nsi);
13483
13484     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13485     nsi->si_cxix        = si->si_cxix;
13486     nsi->si_cxmax       = si->si_cxmax;
13487     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13488     nsi->si_type        = si->si_type;
13489     nsi->si_prev        = si_dup(si->si_prev, param);
13490     nsi->si_next        = si_dup(si->si_next, param);
13491     nsi->si_markoff     = si->si_markoff;
13492
13493     return nsi;
13494 }
13495
13496 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13497 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13498 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13499 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13500 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13501 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13502 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13503 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13504 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13505 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13506 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13507 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13508 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13509 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13510 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13511 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13512
13513 /* XXXXX todo */
13514 #define pv_dup_inc(p)   SAVEPV(p)
13515 #define pv_dup(p)       SAVEPV(p)
13516 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13517
13518 /* map any object to the new equivent - either something in the
13519  * ptr table, or something in the interpreter structure
13520  */
13521
13522 void *
13523 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13524 {
13525     void *ret;
13526
13527     PERL_ARGS_ASSERT_ANY_DUP;
13528
13529     if (!v)
13530         return (void*)NULL;
13531
13532     /* look for it in the table first */
13533     ret = ptr_table_fetch(PL_ptr_table, v);
13534     if (ret)
13535         return ret;
13536
13537     /* see if it is part of the interpreter structure */
13538     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13539         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13540     else {
13541         ret = v;
13542     }
13543
13544     return ret;
13545 }
13546
13547 /* duplicate the save stack */
13548
13549 ANY *
13550 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13551 {
13552     dVAR;
13553     ANY * const ss      = proto_perl->Isavestack;
13554     const I32 max       = proto_perl->Isavestack_max;
13555     I32 ix              = proto_perl->Isavestack_ix;
13556     ANY *nss;
13557     const SV *sv;
13558     const GV *gv;
13559     const AV *av;
13560     const HV *hv;
13561     void* ptr;
13562     int intval;
13563     long longval;
13564     GP *gp;
13565     IV iv;
13566     I32 i;
13567     char *c = NULL;
13568     void (*dptr) (void*);
13569     void (*dxptr) (pTHX_ void*);
13570
13571     PERL_ARGS_ASSERT_SS_DUP;
13572
13573     Newxz(nss, max, ANY);
13574
13575     while (ix > 0) {
13576         const UV uv = POPUV(ss,ix);
13577         const U8 type = (U8)uv & SAVE_MASK;
13578
13579         TOPUV(nss,ix) = uv;
13580         switch (type) {
13581         case SAVEt_CLEARSV:
13582         case SAVEt_CLEARPADRANGE:
13583             break;
13584         case SAVEt_HELEM:               /* hash element */
13585             sv = (const SV *)POPPTR(ss,ix);
13586             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13587             /* FALLTHROUGH */
13588         case SAVEt_ITEM:                        /* normal string */
13589         case SAVEt_GVSV:                        /* scalar slot in GV */
13590         case SAVEt_SV:                          /* scalar reference */
13591             sv = (const SV *)POPPTR(ss,ix);
13592             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13593             /* FALLTHROUGH */
13594         case SAVEt_FREESV:
13595         case SAVEt_MORTALIZESV:
13596         case SAVEt_READONLY_OFF:
13597             sv = (const SV *)POPPTR(ss,ix);
13598             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13599             break;
13600         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13601             c = (char*)POPPTR(ss,ix);
13602             TOPPTR(nss,ix) = savesharedpv(c);
13603             ptr = POPPTR(ss,ix);
13604             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13605             break;
13606         case SAVEt_GENERIC_SVREF:               /* generic sv */
13607         case SAVEt_SVREF:                       /* scalar reference */
13608             sv = (const SV *)POPPTR(ss,ix);
13609             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13610             ptr = POPPTR(ss,ix);
13611             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13612             break;
13613         case SAVEt_GVSLOT:              /* any slot in GV */
13614             sv = (const SV *)POPPTR(ss,ix);
13615             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13616             ptr = POPPTR(ss,ix);
13617             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13618             sv = (const SV *)POPPTR(ss,ix);
13619             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13620             break;
13621         case SAVEt_HV:                          /* hash reference */
13622         case SAVEt_AV:                          /* array reference */
13623             sv = (const SV *) POPPTR(ss,ix);
13624             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13625             /* FALLTHROUGH */
13626         case SAVEt_COMPPAD:
13627         case SAVEt_NSTAB:
13628             sv = (const SV *) POPPTR(ss,ix);
13629             TOPPTR(nss,ix) = sv_dup(sv, param);
13630             break;
13631         case SAVEt_INT:                         /* int reference */
13632             ptr = POPPTR(ss,ix);
13633             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13634             intval = (int)POPINT(ss,ix);
13635             TOPINT(nss,ix) = intval;
13636             break;
13637         case SAVEt_LONG:                        /* long reference */
13638             ptr = POPPTR(ss,ix);
13639             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13640             longval = (long)POPLONG(ss,ix);
13641             TOPLONG(nss,ix) = longval;
13642             break;
13643         case SAVEt_I32:                         /* I32 reference */
13644             ptr = POPPTR(ss,ix);
13645             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13646             i = POPINT(ss,ix);
13647             TOPINT(nss,ix) = i;
13648             break;
13649         case SAVEt_IV:                          /* IV reference */
13650         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
13651             ptr = POPPTR(ss,ix);
13652             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13653             iv = POPIV(ss,ix);
13654             TOPIV(nss,ix) = iv;
13655             break;
13656         case SAVEt_HPTR:                        /* HV* reference */
13657         case SAVEt_APTR:                        /* AV* reference */
13658         case SAVEt_SPTR:                        /* SV* reference */
13659             ptr = POPPTR(ss,ix);
13660             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13661             sv = (const SV *)POPPTR(ss,ix);
13662             TOPPTR(nss,ix) = sv_dup(sv, param);
13663             break;
13664         case SAVEt_VPTR:                        /* random* reference */
13665             ptr = POPPTR(ss,ix);
13666             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13667             /* FALLTHROUGH */
13668         case SAVEt_INT_SMALL:
13669         case SAVEt_I32_SMALL:
13670         case SAVEt_I16:                         /* I16 reference */
13671         case SAVEt_I8:                          /* I8 reference */
13672         case SAVEt_BOOL:
13673             ptr = POPPTR(ss,ix);
13674             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13675             break;
13676         case SAVEt_GENERIC_PVREF:               /* generic char* */
13677         case SAVEt_PPTR:                        /* char* reference */
13678             ptr = POPPTR(ss,ix);
13679             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13680             c = (char*)POPPTR(ss,ix);
13681             TOPPTR(nss,ix) = pv_dup(c);
13682             break;
13683         case SAVEt_GP:                          /* scalar reference */
13684             gp = (GP*)POPPTR(ss,ix);
13685             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
13686             (void)GpREFCNT_inc(gp);
13687             gv = (const GV *)POPPTR(ss,ix);
13688             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
13689             break;
13690         case SAVEt_FREEOP:
13691             ptr = POPPTR(ss,ix);
13692             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
13693                 /* these are assumed to be refcounted properly */
13694                 OP *o;
13695                 switch (((OP*)ptr)->op_type) {
13696                 case OP_LEAVESUB:
13697                 case OP_LEAVESUBLV:
13698                 case OP_LEAVEEVAL:
13699                 case OP_LEAVE:
13700                 case OP_SCOPE:
13701                 case OP_LEAVEWRITE:
13702                     TOPPTR(nss,ix) = ptr;
13703                     o = (OP*)ptr;
13704                     OP_REFCNT_LOCK;
13705                     (void) OpREFCNT_inc(o);
13706                     OP_REFCNT_UNLOCK;
13707                     break;
13708                 default:
13709                     TOPPTR(nss,ix) = NULL;
13710                     break;
13711                 }
13712             }
13713             else
13714                 TOPPTR(nss,ix) = NULL;
13715             break;
13716         case SAVEt_FREECOPHH:
13717             ptr = POPPTR(ss,ix);
13718             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
13719             break;
13720         case SAVEt_ADELETE:
13721             av = (const AV *)POPPTR(ss,ix);
13722             TOPPTR(nss,ix) = av_dup_inc(av, param);
13723             i = POPINT(ss,ix);
13724             TOPINT(nss,ix) = i;
13725             break;
13726         case SAVEt_DELETE:
13727             hv = (const HV *)POPPTR(ss,ix);
13728             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13729             i = POPINT(ss,ix);
13730             TOPINT(nss,ix) = i;
13731             /* FALLTHROUGH */
13732         case SAVEt_FREEPV:
13733             c = (char*)POPPTR(ss,ix);
13734             TOPPTR(nss,ix) = pv_dup_inc(c);
13735             break;
13736         case SAVEt_STACK_POS:           /* Position on Perl stack */
13737             i = POPINT(ss,ix);
13738             TOPINT(nss,ix) = i;
13739             break;
13740         case SAVEt_DESTRUCTOR:
13741             ptr = POPPTR(ss,ix);
13742             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13743             dptr = POPDPTR(ss,ix);
13744             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
13745                                         any_dup(FPTR2DPTR(void *, dptr),
13746                                                 proto_perl));
13747             break;
13748         case SAVEt_DESTRUCTOR_X:
13749             ptr = POPPTR(ss,ix);
13750             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13751             dxptr = POPDXPTR(ss,ix);
13752             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
13753                                          any_dup(FPTR2DPTR(void *, dxptr),
13754                                                  proto_perl));
13755             break;
13756         case SAVEt_REGCONTEXT:
13757         case SAVEt_ALLOC:
13758             ix -= uv >> SAVE_TIGHT_SHIFT;
13759             break;
13760         case SAVEt_AELEM:               /* array element */
13761             sv = (const SV *)POPPTR(ss,ix);
13762             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13763             i = POPINT(ss,ix);
13764             TOPINT(nss,ix) = i;
13765             av = (const AV *)POPPTR(ss,ix);
13766             TOPPTR(nss,ix) = av_dup_inc(av, param);
13767             break;
13768         case SAVEt_OP:
13769             ptr = POPPTR(ss,ix);
13770             TOPPTR(nss,ix) = ptr;
13771             break;
13772         case SAVEt_HINTS:
13773             ptr = POPPTR(ss,ix);
13774             ptr = cophh_copy((COPHH*)ptr);
13775             TOPPTR(nss,ix) = ptr;
13776             i = POPINT(ss,ix);
13777             TOPINT(nss,ix) = i;
13778             if (i & HINT_LOCALIZE_HH) {
13779                 hv = (const HV *)POPPTR(ss,ix);
13780                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13781             }
13782             break;
13783         case SAVEt_PADSV_AND_MORTALIZE:
13784             longval = (long)POPLONG(ss,ix);
13785             TOPLONG(nss,ix) = longval;
13786             ptr = POPPTR(ss,ix);
13787             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13788             sv = (const SV *)POPPTR(ss,ix);
13789             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13790             break;
13791         case SAVEt_SET_SVFLAGS:
13792             i = POPINT(ss,ix);
13793             TOPINT(nss,ix) = i;
13794             i = POPINT(ss,ix);
13795             TOPINT(nss,ix) = i;
13796             sv = (const SV *)POPPTR(ss,ix);
13797             TOPPTR(nss,ix) = sv_dup(sv, param);
13798             break;
13799         case SAVEt_COMPILE_WARNINGS:
13800             ptr = POPPTR(ss,ix);
13801             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13802             break;
13803         case SAVEt_PARSER:
13804             ptr = POPPTR(ss,ix);
13805             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13806             break;
13807         default:
13808             Perl_croak(aTHX_
13809                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13810         }
13811     }
13812
13813     return nss;
13814 }
13815
13816
13817 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13818  * flag to the result. This is done for each stash before cloning starts,
13819  * so we know which stashes want their objects cloned */
13820
13821 static void
13822 do_mark_cloneable_stash(pTHX_ SV *const sv)
13823 {
13824     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13825     if (hvname) {
13826         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13827         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13828         if (cloner && GvCV(cloner)) {
13829             dSP;
13830             UV status;
13831
13832             ENTER;
13833             SAVETMPS;
13834             PUSHMARK(SP);
13835             mXPUSHs(newSVhek(hvname));
13836             PUTBACK;
13837             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13838             SPAGAIN;
13839             status = POPu;
13840             PUTBACK;
13841             FREETMPS;
13842             LEAVE;
13843             if (status)
13844                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13845         }
13846     }
13847 }
13848
13849
13850
13851 /*
13852 =for apidoc perl_clone
13853
13854 Create and return a new interpreter by cloning the current one.
13855
13856 perl_clone takes these flags as parameters:
13857
13858 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13859 without it we only clone the data and zero the stacks,
13860 with it we copy the stacks and the new perl interpreter is
13861 ready to run at the exact same point as the previous one.
13862 The pseudo-fork code uses COPY_STACKS while the
13863 threads->create doesn't.
13864
13865 CLONEf_KEEP_PTR_TABLE -
13866 perl_clone keeps a ptr_table with the pointer of the old
13867 variable as a key and the new variable as a value,
13868 this allows it to check if something has been cloned and not
13869 clone it again but rather just use the value and increase the
13870 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13871 the ptr_table using the function
13872 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13873 reason to keep it around is if you want to dup some of your own
13874 variable who are outside the graph perl scans, example of this
13875 code is in threads.xs create.
13876
13877 CLONEf_CLONE_HOST -
13878 This is a win32 thing, it is ignored on unix, it tells perls
13879 win32host code (which is c++) to clone itself, this is needed on
13880 win32 if you want to run two threads at the same time,
13881 if you just want to do some stuff in a separate perl interpreter
13882 and then throw it away and return to the original one,
13883 you don't need to do anything.
13884
13885 =cut
13886 */
13887
13888 /* XXX the above needs expanding by someone who actually understands it ! */
13889 EXTERN_C PerlInterpreter *
13890 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13891
13892 PerlInterpreter *
13893 perl_clone(PerlInterpreter *proto_perl, UV flags)
13894 {
13895    dVAR;
13896 #ifdef PERL_IMPLICIT_SYS
13897
13898     PERL_ARGS_ASSERT_PERL_CLONE;
13899
13900    /* perlhost.h so we need to call into it
13901    to clone the host, CPerlHost should have a c interface, sky */
13902
13903    if (flags & CLONEf_CLONE_HOST) {
13904        return perl_clone_host(proto_perl,flags);
13905    }
13906    return perl_clone_using(proto_perl, flags,
13907                             proto_perl->IMem,
13908                             proto_perl->IMemShared,
13909                             proto_perl->IMemParse,
13910                             proto_perl->IEnv,
13911                             proto_perl->IStdIO,
13912                             proto_perl->ILIO,
13913                             proto_perl->IDir,
13914                             proto_perl->ISock,
13915                             proto_perl->IProc);
13916 }
13917
13918 PerlInterpreter *
13919 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13920                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13921                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13922                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13923                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13924                  struct IPerlProc* ipP)
13925 {
13926     /* XXX many of the string copies here can be optimized if they're
13927      * constants; they need to be allocated as common memory and just
13928      * their pointers copied. */
13929
13930     IV i;
13931     CLONE_PARAMS clone_params;
13932     CLONE_PARAMS* const param = &clone_params;
13933
13934     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13935
13936     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13937 #else           /* !PERL_IMPLICIT_SYS */
13938     IV i;
13939     CLONE_PARAMS clone_params;
13940     CLONE_PARAMS* param = &clone_params;
13941     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13942
13943     PERL_ARGS_ASSERT_PERL_CLONE;
13944 #endif          /* PERL_IMPLICIT_SYS */
13945
13946     /* for each stash, determine whether its objects should be cloned */
13947     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13948     PERL_SET_THX(my_perl);
13949
13950 #ifdef DEBUGGING
13951     PoisonNew(my_perl, 1, PerlInterpreter);
13952     PL_op = NULL;
13953     PL_curcop = NULL;
13954     PL_defstash = NULL; /* may be used by perl malloc() */
13955     PL_markstack = 0;
13956     PL_scopestack = 0;
13957     PL_scopestack_name = 0;
13958     PL_savestack = 0;
13959     PL_savestack_ix = 0;
13960     PL_savestack_max = -1;
13961     PL_sig_pending = 0;
13962     PL_parser = NULL;
13963     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13964 #  ifdef DEBUG_LEAKING_SCALARS
13965     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13966 #  endif
13967 #else   /* !DEBUGGING */
13968     Zero(my_perl, 1, PerlInterpreter);
13969 #endif  /* DEBUGGING */
13970
13971 #ifdef PERL_IMPLICIT_SYS
13972     /* host pointers */
13973     PL_Mem              = ipM;
13974     PL_MemShared        = ipMS;
13975     PL_MemParse         = ipMP;
13976     PL_Env              = ipE;
13977     PL_StdIO            = ipStd;
13978     PL_LIO              = ipLIO;
13979     PL_Dir              = ipD;
13980     PL_Sock             = ipS;
13981     PL_Proc             = ipP;
13982 #endif          /* PERL_IMPLICIT_SYS */
13983
13984
13985     param->flags = flags;
13986     /* Nothing in the core code uses this, but we make it available to
13987        extensions (using mg_dup).  */
13988     param->proto_perl = proto_perl;
13989     /* Likely nothing will use this, but it is initialised to be consistent
13990        with Perl_clone_params_new().  */
13991     param->new_perl = my_perl;
13992     param->unreferenced = NULL;
13993
13994
13995     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13996
13997     PL_body_arenas = NULL;
13998     Zero(&PL_body_roots, 1, PL_body_roots);
13999     
14000     PL_sv_count         = 0;
14001     PL_sv_root          = NULL;
14002     PL_sv_arenaroot     = NULL;
14003
14004     PL_debug            = proto_perl->Idebug;
14005
14006     /* dbargs array probably holds garbage */
14007     PL_dbargs           = NULL;
14008
14009     PL_compiling = proto_perl->Icompiling;
14010
14011     /* pseudo environmental stuff */
14012     PL_origargc         = proto_perl->Iorigargc;
14013     PL_origargv         = proto_perl->Iorigargv;
14014
14015 #ifndef NO_TAINT_SUPPORT
14016     /* Set tainting stuff before PerlIO_debug can possibly get called */
14017     PL_tainting         = proto_perl->Itainting;
14018     PL_taint_warn       = proto_perl->Itaint_warn;
14019 #else
14020     PL_tainting         = FALSE;
14021     PL_taint_warn       = FALSE;
14022 #endif
14023
14024     PL_minus_c          = proto_perl->Iminus_c;
14025
14026     PL_localpatches     = proto_perl->Ilocalpatches;
14027     PL_splitstr         = proto_perl->Isplitstr;
14028     PL_minus_n          = proto_perl->Iminus_n;
14029     PL_minus_p          = proto_perl->Iminus_p;
14030     PL_minus_l          = proto_perl->Iminus_l;
14031     PL_minus_a          = proto_perl->Iminus_a;
14032     PL_minus_E          = proto_perl->Iminus_E;
14033     PL_minus_F          = proto_perl->Iminus_F;
14034     PL_doswitches       = proto_perl->Idoswitches;
14035     PL_dowarn           = proto_perl->Idowarn;
14036 #ifdef PERL_SAWAMPERSAND
14037     PL_sawampersand     = proto_perl->Isawampersand;
14038 #endif
14039     PL_unsafe           = proto_perl->Iunsafe;
14040     PL_perldb           = proto_perl->Iperldb;
14041     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14042     PL_exit_flags       = proto_perl->Iexit_flags;
14043
14044     /* XXX time(&PL_basetime) when asked for? */
14045     PL_basetime         = proto_perl->Ibasetime;
14046
14047     PL_maxsysfd         = proto_perl->Imaxsysfd;
14048     PL_statusvalue      = proto_perl->Istatusvalue;
14049 #ifdef __VMS
14050     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14051 #else
14052     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14053 #endif
14054
14055     /* RE engine related */
14056     PL_regmatch_slab    = NULL;
14057     PL_reg_curpm        = NULL;
14058
14059     PL_sub_generation   = proto_perl->Isub_generation;
14060
14061     /* funky return mechanisms */
14062     PL_forkprocess      = proto_perl->Iforkprocess;
14063
14064     /* internal state */
14065     PL_maxo             = proto_perl->Imaxo;
14066
14067     PL_main_start       = proto_perl->Imain_start;
14068     PL_eval_root        = proto_perl->Ieval_root;
14069     PL_eval_start       = proto_perl->Ieval_start;
14070
14071     PL_filemode         = proto_perl->Ifilemode;
14072     PL_lastfd           = proto_perl->Ilastfd;
14073     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14074     PL_Argv             = NULL;
14075     PL_Cmd              = NULL;
14076     PL_gensym           = proto_perl->Igensym;
14077
14078     PL_laststatval      = proto_perl->Ilaststatval;
14079     PL_laststype        = proto_perl->Ilaststype;
14080     PL_mess_sv          = NULL;
14081
14082     PL_profiledata      = NULL;
14083
14084     PL_generation       = proto_perl->Igeneration;
14085
14086     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14087     PL_in_clean_all     = proto_perl->Iin_clean_all;
14088
14089     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14090     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14091     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14092     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14093     PL_nomemok          = proto_perl->Inomemok;
14094     PL_an               = proto_perl->Ian;
14095     PL_evalseq          = proto_perl->Ievalseq;
14096     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14097     PL_origalen         = proto_perl->Iorigalen;
14098
14099     PL_sighandlerp      = proto_perl->Isighandlerp;
14100
14101     PL_runops           = proto_perl->Irunops;
14102
14103     PL_subline          = proto_perl->Isubline;
14104
14105 #ifdef FCRYPT
14106     PL_cryptseen        = proto_perl->Icryptseen;
14107 #endif
14108
14109 #ifdef USE_LOCALE_COLLATE
14110     PL_collation_ix     = proto_perl->Icollation_ix;
14111     PL_collation_standard       = proto_perl->Icollation_standard;
14112     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14113     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14114 #endif /* USE_LOCALE_COLLATE */
14115
14116 #ifdef USE_LOCALE_NUMERIC
14117     PL_numeric_standard = proto_perl->Inumeric_standard;
14118     PL_numeric_local    = proto_perl->Inumeric_local;
14119 #endif /* !USE_LOCALE_NUMERIC */
14120
14121     /* Did the locale setup indicate UTF-8? */
14122     PL_utf8locale       = proto_perl->Iutf8locale;
14123     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14124     /* Unicode features (see perlrun/-C) */
14125     PL_unicode          = proto_perl->Iunicode;
14126
14127     /* Pre-5.8 signals control */
14128     PL_signals          = proto_perl->Isignals;
14129
14130     /* times() ticks per second */
14131     PL_clocktick        = proto_perl->Iclocktick;
14132
14133     /* Recursion stopper for PerlIO_find_layer */
14134     PL_in_load_module   = proto_perl->Iin_load_module;
14135
14136     /* sort() routine */
14137     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14138
14139     /* Not really needed/useful since the reenrant_retint is "volatile",
14140      * but do it for consistency's sake. */
14141     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14142
14143     /* Hooks to shared SVs and locks. */
14144     PL_sharehook        = proto_perl->Isharehook;
14145     PL_lockhook         = proto_perl->Ilockhook;
14146     PL_unlockhook       = proto_perl->Iunlockhook;
14147     PL_threadhook       = proto_perl->Ithreadhook;
14148     PL_destroyhook      = proto_perl->Idestroyhook;
14149     PL_signalhook       = proto_perl->Isignalhook;
14150
14151     PL_globhook         = proto_perl->Iglobhook;
14152
14153     /* swatch cache */
14154     PL_last_swash_hv    = NULL; /* reinits on demand */
14155     PL_last_swash_klen  = 0;
14156     PL_last_swash_key[0]= '\0';
14157     PL_last_swash_tmps  = (U8*)NULL;
14158     PL_last_swash_slen  = 0;
14159
14160     PL_srand_called     = proto_perl->Isrand_called;
14161     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14162
14163     if (flags & CLONEf_COPY_STACKS) {
14164         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14165         PL_tmps_ix              = proto_perl->Itmps_ix;
14166         PL_tmps_max             = proto_perl->Itmps_max;
14167         PL_tmps_floor           = proto_perl->Itmps_floor;
14168
14169         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14170          * NOTE: unlike the others! */
14171         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14172         PL_scopestack_max       = proto_perl->Iscopestack_max;
14173
14174         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14175          * NOTE: unlike the others! */
14176         PL_savestack_ix         = proto_perl->Isavestack_ix;
14177         PL_savestack_max        = proto_perl->Isavestack_max;
14178     }
14179
14180     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14181     PL_top_env          = &PL_start_env;
14182
14183     PL_op               = proto_perl->Iop;
14184
14185     PL_Sv               = NULL;
14186     PL_Xpv              = (XPV*)NULL;
14187     my_perl->Ina        = proto_perl->Ina;
14188
14189     PL_statbuf          = proto_perl->Istatbuf;
14190     PL_statcache        = proto_perl->Istatcache;
14191
14192 #ifndef NO_TAINT_SUPPORT
14193     PL_tainted          = proto_perl->Itainted;
14194 #else
14195     PL_tainted          = FALSE;
14196 #endif
14197     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14198
14199     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14200
14201     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14202     PL_restartop        = proto_perl->Irestartop;
14203     PL_in_eval          = proto_perl->Iin_eval;
14204     PL_delaymagic       = proto_perl->Idelaymagic;
14205     PL_phase            = proto_perl->Iphase;
14206     PL_localizing       = proto_perl->Ilocalizing;
14207
14208     PL_hv_fetch_ent_mh  = NULL;
14209     PL_modcount         = proto_perl->Imodcount;
14210     PL_lastgotoprobe    = NULL;
14211     PL_dumpindent       = proto_perl->Idumpindent;
14212
14213     PL_efloatbuf        = NULL;         /* reinits on demand */
14214     PL_efloatsize       = 0;                    /* reinits on demand */
14215
14216     /* regex stuff */
14217
14218     PL_colorset         = 0;            /* reinits PL_colors[] */
14219     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14220
14221     /* Pluggable optimizer */
14222     PL_peepp            = proto_perl->Ipeepp;
14223     PL_rpeepp           = proto_perl->Irpeepp;
14224     /* op_free() hook */
14225     PL_opfreehook       = proto_perl->Iopfreehook;
14226
14227 #ifdef USE_REENTRANT_API
14228     /* XXX: things like -Dm will segfault here in perlio, but doing
14229      *  PERL_SET_CONTEXT(proto_perl);
14230      * breaks too many other things
14231      */
14232     Perl_reentrant_init(aTHX);
14233 #endif
14234
14235     /* create SV map for pointer relocation */
14236     PL_ptr_table = ptr_table_new();
14237
14238     /* initialize these special pointers as early as possible */
14239     init_constants();
14240     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14241     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14242     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14243
14244     /* create (a non-shared!) shared string table */
14245     PL_strtab           = newHV();
14246     HvSHAREKEYS_off(PL_strtab);
14247     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14248     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14249
14250     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14251
14252     /* This PV will be free'd special way so must set it same way op.c does */
14253     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14254     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14255
14256     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14257     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14258     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14259     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14260
14261     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14262     /* This makes no difference to the implementation, as it always pushes
14263        and shifts pointers to other SVs without changing their reference
14264        count, with the array becoming empty before it is freed. However, it
14265        makes it conceptually clear what is going on, and will avoid some
14266        work inside av.c, filling slots between AvFILL() and AvMAX() with
14267        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14268     AvREAL_off(param->stashes);
14269
14270     if (!(flags & CLONEf_COPY_STACKS)) {
14271         param->unreferenced = newAV();
14272     }
14273
14274 #ifdef PERLIO_LAYERS
14275     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14276     PerlIO_clone(aTHX_ proto_perl, param);
14277 #endif
14278
14279     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14280     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14281     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14282     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14283     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14284     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14285
14286     /* switches */
14287     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14288     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
14289     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14290     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14291
14292     /* magical thingies */
14293
14294     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14295
14296     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14297     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14298     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14299
14300    
14301     /* Clone the regex array */
14302     /* ORANGE FIXME for plugins, probably in the SV dup code.
14303        newSViv(PTR2IV(CALLREGDUPE(
14304        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14305     */
14306     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14307     PL_regex_pad = AvARRAY(PL_regex_padav);
14308
14309     PL_stashpadmax      = proto_perl->Istashpadmax;
14310     PL_stashpadix       = proto_perl->Istashpadix ;
14311     Newx(PL_stashpad, PL_stashpadmax, HV *);
14312     {
14313         PADOFFSET o = 0;
14314         for (; o < PL_stashpadmax; ++o)
14315             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14316     }
14317
14318     /* shortcuts to various I/O objects */
14319     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14320     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14321     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14322     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14323     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14324     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14325     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14326
14327     /* shortcuts to regexp stuff */
14328     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14329
14330     /* shortcuts to misc objects */
14331     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14332
14333     /* shortcuts to debugging objects */
14334     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14335     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14336     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14337     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14338     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14339     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14340
14341     /* symbol tables */
14342     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14343     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14344     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14345     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14346     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14347
14348     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14349     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14350     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14351     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14352     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14353     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14354     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14355     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14356
14357     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14358
14359     /* subprocess state */
14360     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14361
14362     if (proto_perl->Iop_mask)
14363         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14364     else
14365         PL_op_mask      = NULL;
14366     /* PL_asserting        = proto_perl->Iasserting; */
14367
14368     /* current interpreter roots */
14369     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14370     OP_REFCNT_LOCK;
14371     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14372     OP_REFCNT_UNLOCK;
14373
14374     /* runtime control stuff */
14375     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14376
14377     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14378
14379     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14380
14381     /* interpreter atexit processing */
14382     PL_exitlistlen      = proto_perl->Iexitlistlen;
14383     if (PL_exitlistlen) {
14384         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14385         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14386     }
14387     else
14388         PL_exitlist     = (PerlExitListEntry*)NULL;
14389
14390     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14391     if (PL_my_cxt_size) {
14392         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14393         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14394 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14395         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14396         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14397 #endif
14398     }
14399     else {
14400         PL_my_cxt_list  = (void**)NULL;
14401 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14402         PL_my_cxt_keys  = (const char**)NULL;
14403 #endif
14404     }
14405     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14406     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14407     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14408     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14409
14410     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14411
14412     PAD_CLONE_VARS(proto_perl, param);
14413
14414 #ifdef HAVE_INTERP_INTERN
14415     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14416 #endif
14417
14418     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14419
14420 #ifdef PERL_USES_PL_PIDSTATUS
14421     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14422 #endif
14423     PL_osname           = SAVEPV(proto_perl->Iosname);
14424     PL_parser           = parser_dup(proto_perl->Iparser, param);
14425
14426     /* XXX this only works if the saved cop has already been cloned */
14427     if (proto_perl->Iparser) {
14428         PL_parser->saved_curcop = (COP*)any_dup(
14429                                     proto_perl->Iparser->saved_curcop,
14430                                     proto_perl);
14431     }
14432
14433     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14434
14435 #ifdef USE_LOCALE_COLLATE
14436     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14437 #endif /* USE_LOCALE_COLLATE */
14438
14439 #ifdef USE_LOCALE_NUMERIC
14440     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14441     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14442 #endif /* !USE_LOCALE_NUMERIC */
14443
14444     /* Unicode inversion lists */
14445     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14446     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14447     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14448
14449     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14450     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14451
14452     /* utf8 character class swashes */
14453     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14454         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14455     }
14456     for (i = 0; i < POSIX_CC_COUNT; i++) {
14457         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14458     }
14459     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14460     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
14461     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
14462     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14463     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14464     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14465     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14466     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14467     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14468     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14469     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14470     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14471     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14472     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14473     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14474     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14475
14476     if (proto_perl->Ipsig_pend) {
14477         Newxz(PL_psig_pend, SIG_SIZE, int);
14478     }
14479     else {
14480         PL_psig_pend    = (int*)NULL;
14481     }
14482
14483     if (proto_perl->Ipsig_name) {
14484         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14485         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14486                             param);
14487         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14488     }
14489     else {
14490         PL_psig_ptr     = (SV**)NULL;
14491         PL_psig_name    = (SV**)NULL;
14492     }
14493
14494     if (flags & CLONEf_COPY_STACKS) {
14495         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14496         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14497                             PL_tmps_ix+1, param);
14498
14499         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14500         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14501         Newxz(PL_markstack, i, I32);
14502         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14503                                                   - proto_perl->Imarkstack);
14504         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14505                                                   - proto_perl->Imarkstack);
14506         Copy(proto_perl->Imarkstack, PL_markstack,
14507              PL_markstack_ptr - PL_markstack + 1, I32);
14508
14509         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14510          * NOTE: unlike the others! */
14511         Newxz(PL_scopestack, PL_scopestack_max, I32);
14512         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14513
14514 #ifdef DEBUGGING
14515         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14516         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14517 #endif
14518         /* reset stack AV to correct length before its duped via
14519          * PL_curstackinfo */
14520         AvFILLp(proto_perl->Icurstack) =
14521                             proto_perl->Istack_sp - proto_perl->Istack_base;
14522
14523         /* NOTE: si_dup() looks at PL_markstack */
14524         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14525
14526         /* PL_curstack          = PL_curstackinfo->si_stack; */
14527         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14528         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14529
14530         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14531         PL_stack_base           = AvARRAY(PL_curstack);
14532         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14533                                                    - proto_perl->Istack_base);
14534         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14535
14536         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14537         PL_savestack            = ss_dup(proto_perl, param);
14538     }
14539     else {
14540         init_stacks();
14541         ENTER;                  /* perl_destruct() wants to LEAVE; */
14542     }
14543
14544     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14545     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14546
14547     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14548     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14549     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14550     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14551     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14552     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14553
14554     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14555
14556     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14557     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14558     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14559
14560     PL_stashcache       = newHV();
14561
14562     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14563                                             proto_perl->Iwatchaddr);
14564     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14565     if (PL_debug && PL_watchaddr) {
14566         PerlIO_printf(Perl_debug_log,
14567           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14568           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14569           PTR2UV(PL_watchok));
14570     }
14571
14572     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14573     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14574     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14575
14576     /* Call the ->CLONE method, if it exists, for each of the stashes
14577        identified by sv_dup() above.
14578     */
14579     while(av_tindex(param->stashes) != -1) {
14580         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14581         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14582         if (cloner && GvCV(cloner)) {
14583             dSP;
14584             ENTER;
14585             SAVETMPS;
14586             PUSHMARK(SP);
14587             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14588             PUTBACK;
14589             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14590             FREETMPS;
14591             LEAVE;
14592         }
14593     }
14594
14595     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14596         ptr_table_free(PL_ptr_table);
14597         PL_ptr_table = NULL;
14598     }
14599
14600     if (!(flags & CLONEf_COPY_STACKS)) {
14601         unreferenced_to_tmp_stack(param->unreferenced);
14602     }
14603
14604     SvREFCNT_dec(param->stashes);
14605
14606     /* orphaned? eg threads->new inside BEGIN or use */
14607     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14608         SvREFCNT_inc_simple_void(PL_compcv);
14609         SAVEFREESV(PL_compcv);
14610     }
14611
14612     return my_perl;
14613 }
14614
14615 static void
14616 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14617 {
14618     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14619     
14620     if (AvFILLp(unreferenced) > -1) {
14621         SV **svp = AvARRAY(unreferenced);
14622         SV **const last = svp + AvFILLp(unreferenced);
14623         SSize_t count = 0;
14624
14625         do {
14626             if (SvREFCNT(*svp) == 1)
14627                 ++count;
14628         } while (++svp <= last);
14629
14630         EXTEND_MORTAL(count);
14631         svp = AvARRAY(unreferenced);
14632
14633         do {
14634             if (SvREFCNT(*svp) == 1) {
14635                 /* Our reference is the only one to this SV. This means that
14636                    in this thread, the scalar effectively has a 0 reference.
14637                    That doesn't work (cleanup never happens), so donate our
14638                    reference to it onto the save stack. */
14639                 PL_tmps_stack[++PL_tmps_ix] = *svp;
14640             } else {
14641                 /* As an optimisation, because we are already walking the
14642                    entire array, instead of above doing either
14643                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
14644                    release our reference to the scalar, so that at the end of
14645                    the array owns zero references to the scalars it happens to
14646                    point to. We are effectively converting the array from
14647                    AvREAL() on to AvREAL() off. This saves the av_clear()
14648                    (triggered by the SvREFCNT_dec(unreferenced) below) from
14649                    walking the array a second time.  */
14650                 SvREFCNT_dec(*svp);
14651             }
14652
14653         } while (++svp <= last);
14654         AvREAL_off(unreferenced);
14655     }
14656     SvREFCNT_dec_NN(unreferenced);
14657 }
14658
14659 void
14660 Perl_clone_params_del(CLONE_PARAMS *param)
14661 {
14662     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
14663        happy: */
14664     PerlInterpreter *const to = param->new_perl;
14665     dTHXa(to);
14666     PerlInterpreter *const was = PERL_GET_THX;
14667
14668     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
14669
14670     if (was != to) {
14671         PERL_SET_THX(to);
14672     }
14673
14674     SvREFCNT_dec(param->stashes);
14675     if (param->unreferenced)
14676         unreferenced_to_tmp_stack(param->unreferenced);
14677
14678     Safefree(param);
14679
14680     if (was != to) {
14681         PERL_SET_THX(was);
14682     }
14683 }
14684
14685 CLONE_PARAMS *
14686 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
14687 {
14688     dVAR;
14689     /* Need to play this game, as newAV() can call safesysmalloc(), and that
14690        does a dTHX; to get the context from thread local storage.
14691        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
14692        a version that passes in my_perl.  */
14693     PerlInterpreter *const was = PERL_GET_THX;
14694     CLONE_PARAMS *param;
14695
14696     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
14697
14698     if (was != to) {
14699         PERL_SET_THX(to);
14700     }
14701
14702     /* Given that we've set the context, we can do this unshared.  */
14703     Newx(param, 1, CLONE_PARAMS);
14704
14705     param->flags = 0;
14706     param->proto_perl = from;
14707     param->new_perl = to;
14708     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
14709     AvREAL_off(param->stashes);
14710     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
14711
14712     if (was != to) {
14713         PERL_SET_THX(was);
14714     }
14715     return param;
14716 }
14717
14718 #endif /* USE_ITHREADS */
14719
14720 void
14721 Perl_init_constants(pTHX)
14722 {
14723     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
14724     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
14725     SvANY(&PL_sv_undef)         = NULL;
14726
14727     SvANY(&PL_sv_no)            = new_XPVNV();
14728     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
14729     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
14730                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14731                                   |SVp_POK|SVf_POK;
14732
14733     SvANY(&PL_sv_yes)           = new_XPVNV();
14734     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
14735     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
14736                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14737                                   |SVp_POK|SVf_POK;
14738
14739     SvPV_set(&PL_sv_no, (char*)PL_No);
14740     SvCUR_set(&PL_sv_no, 0);
14741     SvLEN_set(&PL_sv_no, 0);
14742     SvIV_set(&PL_sv_no, 0);
14743     SvNV_set(&PL_sv_no, 0);
14744
14745     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
14746     SvCUR_set(&PL_sv_yes, 1);
14747     SvLEN_set(&PL_sv_yes, 0);
14748     SvIV_set(&PL_sv_yes, 1);
14749     SvNV_set(&PL_sv_yes, 1);
14750 }
14751
14752 /*
14753 =head1 Unicode Support
14754
14755 =for apidoc sv_recode_to_utf8
14756
14757 The encoding is assumed to be an Encode object, on entry the PV
14758 of the sv is assumed to be octets in that encoding, and the sv
14759 will be converted into Unicode (and UTF-8).
14760
14761 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14762 is not a reference, nothing is done to the sv.  If the encoding is not
14763 an C<Encode::XS> Encoding object, bad things will happen.
14764 (See F<lib/encoding.pm> and L<Encode>.)
14765
14766 The PV of the sv is returned.
14767
14768 =cut */
14769
14770 char *
14771 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14772 {
14773     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14774
14775     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14776         SV *uni;
14777         STRLEN len;
14778         const char *s;
14779         dSP;
14780         SV *nsv = sv;
14781         ENTER;
14782         PUSHSTACK;
14783         SAVETMPS;
14784         if (SvPADTMP(nsv)) {
14785             nsv = sv_newmortal();
14786             SvSetSV_nosteal(nsv, sv);
14787         }
14788         save_re_context();
14789         PUSHMARK(sp);
14790         EXTEND(SP, 3);
14791         PUSHs(encoding);
14792         PUSHs(nsv);
14793 /*
14794   NI-S 2002/07/09
14795   Passing sv_yes is wrong - it needs to be or'ed set of constants
14796   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14797   remove converted chars from source.
14798
14799   Both will default the value - let them.
14800
14801         XPUSHs(&PL_sv_yes);
14802 */
14803         PUTBACK;
14804         call_method("decode", G_SCALAR);
14805         SPAGAIN;
14806         uni = POPs;
14807         PUTBACK;
14808         s = SvPV_const(uni, len);
14809         if (s != SvPVX_const(sv)) {
14810             SvGROW(sv, len + 1);
14811             Move(s, SvPVX(sv), len + 1, char);
14812             SvCUR_set(sv, len);
14813         }
14814         FREETMPS;
14815         POPSTACK;
14816         LEAVE;
14817         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14818             /* clear pos and any utf8 cache */
14819             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14820             if (mg)
14821                 mg->mg_len = -1;
14822             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14823                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14824         }
14825         SvUTF8_on(sv);
14826         return SvPVX(sv);
14827     }
14828     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14829 }
14830
14831 /*
14832 =for apidoc sv_cat_decode
14833
14834 The encoding is assumed to be an Encode object, the PV of the ssv is
14835 assumed to be octets in that encoding and decoding the input starts
14836 from the position which (PV + *offset) pointed to.  The dsv will be
14837 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14838 when the string tstr appears in decoding output or the input ends on
14839 the PV of the ssv.  The value which the offset points will be modified
14840 to the last input position on the ssv.
14841
14842 Returns TRUE if the terminator was found, else returns FALSE.
14843
14844 =cut */
14845
14846 bool
14847 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14848                    SV *ssv, int *offset, char *tstr, int tlen)
14849 {
14850     bool ret = FALSE;
14851
14852     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14853
14854     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14855         SV *offsv;
14856         dSP;
14857         ENTER;
14858         SAVETMPS;
14859         save_re_context();
14860         PUSHMARK(sp);
14861         EXTEND(SP, 6);
14862         PUSHs(encoding);
14863         PUSHs(dsv);
14864         PUSHs(ssv);
14865         offsv = newSViv(*offset);
14866         mPUSHs(offsv);
14867         mPUSHp(tstr, tlen);
14868         PUTBACK;
14869         call_method("cat_decode", G_SCALAR);
14870         SPAGAIN;
14871         ret = SvTRUE(TOPs);
14872         *offset = SvIV(offsv);
14873         PUTBACK;
14874         FREETMPS;
14875         LEAVE;
14876     }
14877     else
14878         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14879     return ret;
14880
14881 }
14882
14883 /* ---------------------------------------------------------------------
14884  *
14885  * support functions for report_uninit()
14886  */
14887
14888 /* the maxiumum size of array or hash where we will scan looking
14889  * for the undefined element that triggered the warning */
14890
14891 #define FUV_MAX_SEARCH_SIZE 1000
14892
14893 /* Look for an entry in the hash whose value has the same SV as val;
14894  * If so, return a mortal copy of the key. */
14895
14896 STATIC SV*
14897 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14898 {
14899     dVAR;
14900     HE **array;
14901     I32 i;
14902
14903     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14904
14905     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14906                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14907         return NULL;
14908
14909     array = HvARRAY(hv);
14910
14911     for (i=HvMAX(hv); i>=0; i--) {
14912         HE *entry;
14913         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14914             if (HeVAL(entry) != val)
14915                 continue;
14916             if (    HeVAL(entry) == &PL_sv_undef ||
14917                     HeVAL(entry) == &PL_sv_placeholder)
14918                 continue;
14919             if (!HeKEY(entry))
14920                 return NULL;
14921             if (HeKLEN(entry) == HEf_SVKEY)
14922                 return sv_mortalcopy(HeKEY_sv(entry));
14923             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14924         }
14925     }
14926     return NULL;
14927 }
14928
14929 /* Look for an entry in the array whose value has the same SV as val;
14930  * If so, return the index, otherwise return -1. */
14931
14932 STATIC I32
14933 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14934 {
14935     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14936
14937     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14938                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14939         return -1;
14940
14941     if (val != &PL_sv_undef) {
14942         SV ** const svp = AvARRAY(av);
14943         I32 i;
14944
14945         for (i=AvFILLp(av); i>=0; i--)
14946             if (svp[i] == val)
14947                 return i;
14948     }
14949     return -1;
14950 }
14951
14952 /* varname(): return the name of a variable, optionally with a subscript.
14953  * If gv is non-zero, use the name of that global, along with gvtype (one
14954  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14955  * targ.  Depending on the value of the subscript_type flag, return:
14956  */
14957
14958 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14959 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14960 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14961 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14962
14963 SV*
14964 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14965         const SV *const keyname, I32 aindex, int subscript_type)
14966 {
14967
14968     SV * const name = sv_newmortal();
14969     if (gv && isGV(gv)) {
14970         char buffer[2];
14971         buffer[0] = gvtype;
14972         buffer[1] = 0;
14973
14974         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14975
14976         gv_fullname4(name, gv, buffer, 0);
14977
14978         if ((unsigned int)SvPVX(name)[1] <= 26) {
14979             buffer[0] = '^';
14980             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14981
14982             /* Swap the 1 unprintable control character for the 2 byte pretty
14983                version - ie substr($name, 1, 1) = $buffer; */
14984             sv_insert(name, 1, 1, buffer, 2);
14985         }
14986     }
14987     else {
14988         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14989         SV *sv;
14990         AV *av;
14991
14992         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14993
14994         if (!cv || !CvPADLIST(cv))
14995             return NULL;
14996         av = *PadlistARRAY(CvPADLIST(cv));
14997         sv = *av_fetch(av, targ, FALSE);
14998         sv_setsv_flags(name, sv, 0);
14999     }
15000
15001     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15002         SV * const sv = newSV(0);
15003         *SvPVX(name) = '$';
15004         Perl_sv_catpvf(aTHX_ name, "{%s}",
15005             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15006                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15007         SvREFCNT_dec_NN(sv);
15008     }
15009     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15010         *SvPVX(name) = '$';
15011         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15012     }
15013     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15014         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15015         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15016     }
15017
15018     return name;
15019 }
15020
15021
15022 /*
15023 =for apidoc find_uninit_var
15024
15025 Find the name of the undefined variable (if any) that caused the operator
15026 to issue a "Use of uninitialized value" warning.
15027 If match is true, only return a name if its value matches uninit_sv.
15028 So roughly speaking, if a unary operator (such as OP_COS) generates a
15029 warning, then following the direct child of the op may yield an
15030 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15031 other hand, with OP_ADD there are two branches to follow, so we only print
15032 the variable name if we get an exact match.
15033
15034 The name is returned as a mortal SV.
15035
15036 Assumes that PL_op is the op that originally triggered the error, and that
15037 PL_comppad/PL_curpad points to the currently executing pad.
15038
15039 =cut
15040 */
15041
15042 STATIC SV *
15043 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15044                   bool match)
15045 {
15046     dVAR;
15047     SV *sv;
15048     const GV *gv;
15049     const OP *o, *o2, *kid;
15050
15051     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15052                             uninit_sv == &PL_sv_placeholder)))
15053         return NULL;
15054
15055     switch (obase->op_type) {
15056
15057     case OP_RV2AV:
15058     case OP_RV2HV:
15059     case OP_PADAV:
15060     case OP_PADHV:
15061       {
15062         const bool pad  = (    obase->op_type == OP_PADAV
15063                             || obase->op_type == OP_PADHV
15064                             || obase->op_type == OP_PADRANGE
15065                           );
15066
15067         const bool hash = (    obase->op_type == OP_PADHV
15068                             || obase->op_type == OP_RV2HV
15069                             || (obase->op_type == OP_PADRANGE
15070                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15071                           );
15072         I32 index = 0;
15073         SV *keysv = NULL;
15074         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15075
15076         if (pad) { /* @lex, %lex */
15077             sv = PAD_SVl(obase->op_targ);
15078             gv = NULL;
15079         }
15080         else {
15081             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15082             /* @global, %global */
15083                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15084                 if (!gv)
15085                     break;
15086                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15087             }
15088             else if (obase == PL_op) /* @{expr}, %{expr} */
15089                 return find_uninit_var(cUNOPx(obase)->op_first,
15090                                                     uninit_sv, match);
15091             else /* @{expr}, %{expr} as a sub-expression */
15092                 return NULL;
15093         }
15094
15095         /* attempt to find a match within the aggregate */
15096         if (hash) {
15097             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15098             if (keysv)
15099                 subscript_type = FUV_SUBSCRIPT_HASH;
15100         }
15101         else {
15102             index = find_array_subscript((const AV *)sv, uninit_sv);
15103             if (index >= 0)
15104                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15105         }
15106
15107         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15108             break;
15109
15110         return varname(gv, hash ? '%' : '@', obase->op_targ,
15111                                     keysv, index, subscript_type);
15112       }
15113
15114     case OP_RV2SV:
15115         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15116             /* $global */
15117             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15118             if (!gv || !GvSTASH(gv))
15119                 break;
15120             if (match && (GvSV(gv) != uninit_sv))
15121                 break;
15122             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15123         }
15124         /* ${expr} */
15125         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
15126
15127     case OP_PADSV:
15128         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15129             break;
15130         return varname(NULL, '$', obase->op_targ,
15131                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15132
15133     case OP_GVSV:
15134         gv = cGVOPx_gv(obase);
15135         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15136             break;
15137         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15138
15139     case OP_AELEMFAST_LEX:
15140         if (match) {
15141             SV **svp;
15142             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15143             if (!av || SvRMAGICAL(av))
15144                 break;
15145             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15146             if (!svp || *svp != uninit_sv)
15147                 break;
15148         }
15149         return varname(NULL, '$', obase->op_targ,
15150                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15151     case OP_AELEMFAST:
15152         {
15153             gv = cGVOPx_gv(obase);
15154             if (!gv)
15155                 break;
15156             if (match) {
15157                 SV **svp;
15158                 AV *const av = GvAV(gv);
15159                 if (!av || SvRMAGICAL(av))
15160                     break;
15161                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15162                 if (!svp || *svp != uninit_sv)
15163                     break;
15164             }
15165             return varname(gv, '$', 0,
15166                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15167         }
15168         NOT_REACHED; /* NOTREACHED */
15169
15170     case OP_EXISTS:
15171         o = cUNOPx(obase)->op_first;
15172         if (!o || o->op_type != OP_NULL ||
15173                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15174             break;
15175         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
15176
15177     case OP_AELEM:
15178     case OP_HELEM:
15179     {
15180         bool negate = FALSE;
15181
15182         if (PL_op == obase)
15183             /* $a[uninit_expr] or $h{uninit_expr} */
15184             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
15185
15186         gv = NULL;
15187         o = cBINOPx(obase)->op_first;
15188         kid = cBINOPx(obase)->op_last;
15189
15190         /* get the av or hv, and optionally the gv */
15191         sv = NULL;
15192         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15193             sv = PAD_SV(o->op_targ);
15194         }
15195         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15196                 && cUNOPo->op_first->op_type == OP_GV)
15197         {
15198             gv = cGVOPx_gv(cUNOPo->op_first);
15199             if (!gv)
15200                 break;
15201             sv = o->op_type
15202                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15203         }
15204         if (!sv)
15205             break;
15206
15207         if (kid && kid->op_type == OP_NEGATE) {
15208             negate = TRUE;
15209             kid = cUNOPx(kid)->op_first;
15210         }
15211
15212         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15213             /* index is constant */
15214             SV* kidsv;
15215             if (negate) {
15216                 kidsv = sv_2mortal(newSVpvs("-"));
15217                 sv_catsv(kidsv, cSVOPx_sv(kid));
15218             }
15219             else
15220                 kidsv = cSVOPx_sv(kid);
15221             if (match) {
15222                 if (SvMAGICAL(sv))
15223                     break;
15224                 if (obase->op_type == OP_HELEM) {
15225                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15226                     if (!he || HeVAL(he) != uninit_sv)
15227                         break;
15228                 }
15229                 else {
15230                     SV * const  opsv = cSVOPx_sv(kid);
15231                     const IV  opsviv = SvIV(opsv);
15232                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15233                         negate ? - opsviv : opsviv,
15234                         FALSE);
15235                     if (!svp || *svp != uninit_sv)
15236                         break;
15237                 }
15238             }
15239             if (obase->op_type == OP_HELEM)
15240                 return varname(gv, '%', o->op_targ,
15241                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15242             else
15243                 return varname(gv, '@', o->op_targ, NULL,
15244                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15245                     FUV_SUBSCRIPT_ARRAY);
15246         }
15247         else  {
15248             /* index is an expression;
15249              * attempt to find a match within the aggregate */
15250             if (obase->op_type == OP_HELEM) {
15251                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15252                 if (keysv)
15253                     return varname(gv, '%', o->op_targ,
15254                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15255             }
15256             else {
15257                 const I32 index
15258                     = find_array_subscript((const AV *)sv, uninit_sv);
15259                 if (index >= 0)
15260                     return varname(gv, '@', o->op_targ,
15261                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15262             }
15263             if (match)
15264                 break;
15265             return varname(gv,
15266                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15267                 ? '@' : '%',
15268                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15269         }
15270         NOT_REACHED; /* NOTREACHED */
15271     }
15272
15273     case OP_AASSIGN:
15274         /* only examine RHS */
15275         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
15276
15277     case OP_OPEN:
15278         o = cUNOPx(obase)->op_first;
15279         if (   o->op_type == OP_PUSHMARK
15280            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15281         )
15282             o = OP_SIBLING(o);
15283
15284         if (!OP_HAS_SIBLING(o)) {
15285             /* one-arg version of open is highly magical */
15286
15287             if (o->op_type == OP_GV) { /* open FOO; */
15288                 gv = cGVOPx_gv(o);
15289                 if (match && GvSV(gv) != uninit_sv)
15290                     break;
15291                 return varname(gv, '$', 0,
15292                             NULL, 0, FUV_SUBSCRIPT_NONE);
15293             }
15294             /* other possibilities not handled are:
15295              * open $x; or open my $x;  should return '${*$x}'
15296              * open expr;               should return '$'.expr ideally
15297              */
15298              break;
15299         }
15300         goto do_op;
15301
15302     /* ops where $_ may be an implicit arg */
15303     case OP_TRANS:
15304     case OP_TRANSR:
15305     case OP_SUBST:
15306     case OP_MATCH:
15307         if ( !(obase->op_flags & OPf_STACKED)) {
15308             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
15309                                  ? PAD_SVl(obase->op_targ)
15310                                  : DEFSV))
15311             {
15312                 sv = sv_newmortal();
15313                 sv_setpvs(sv, "$_");
15314                 return sv;
15315             }
15316         }
15317         goto do_op;
15318
15319     case OP_PRTF:
15320     case OP_PRINT:
15321     case OP_SAY:
15322         match = 1; /* print etc can return undef on defined args */
15323         /* skip filehandle as it can't produce 'undef' warning  */
15324         o = cUNOPx(obase)->op_first;
15325         if ((obase->op_flags & OPf_STACKED)
15326             &&
15327                (   o->op_type == OP_PUSHMARK
15328                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15329             o = OP_SIBLING(OP_SIBLING(o));
15330         goto do_op2;
15331
15332
15333     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15334     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15335
15336         /* the following ops are capable of returning PL_sv_undef even for
15337          * defined arg(s) */
15338
15339     case OP_BACKTICK:
15340     case OP_PIPE_OP:
15341     case OP_FILENO:
15342     case OP_BINMODE:
15343     case OP_TIED:
15344     case OP_GETC:
15345     case OP_SYSREAD:
15346     case OP_SEND:
15347     case OP_IOCTL:
15348     case OP_SOCKET:
15349     case OP_SOCKPAIR:
15350     case OP_BIND:
15351     case OP_CONNECT:
15352     case OP_LISTEN:
15353     case OP_ACCEPT:
15354     case OP_SHUTDOWN:
15355     case OP_SSOCKOPT:
15356     case OP_GETPEERNAME:
15357     case OP_FTRREAD:
15358     case OP_FTRWRITE:
15359     case OP_FTREXEC:
15360     case OP_FTROWNED:
15361     case OP_FTEREAD:
15362     case OP_FTEWRITE:
15363     case OP_FTEEXEC:
15364     case OP_FTEOWNED:
15365     case OP_FTIS:
15366     case OP_FTZERO:
15367     case OP_FTSIZE:
15368     case OP_FTFILE:
15369     case OP_FTDIR:
15370     case OP_FTLINK:
15371     case OP_FTPIPE:
15372     case OP_FTSOCK:
15373     case OP_FTBLK:
15374     case OP_FTCHR:
15375     case OP_FTTTY:
15376     case OP_FTSUID:
15377     case OP_FTSGID:
15378     case OP_FTSVTX:
15379     case OP_FTTEXT:
15380     case OP_FTBINARY:
15381     case OP_FTMTIME:
15382     case OP_FTATIME:
15383     case OP_FTCTIME:
15384     case OP_READLINK:
15385     case OP_OPEN_DIR:
15386     case OP_READDIR:
15387     case OP_TELLDIR:
15388     case OP_SEEKDIR:
15389     case OP_REWINDDIR:
15390     case OP_CLOSEDIR:
15391     case OP_GMTIME:
15392     case OP_ALARM:
15393     case OP_SEMGET:
15394     case OP_GETLOGIN:
15395     case OP_UNDEF:
15396     case OP_SUBSTR:
15397     case OP_AEACH:
15398     case OP_EACH:
15399     case OP_SORT:
15400     case OP_CALLER:
15401     case OP_DOFILE:
15402     case OP_PROTOTYPE:
15403     case OP_NCMP:
15404     case OP_SMARTMATCH:
15405     case OP_UNPACK:
15406     case OP_SYSOPEN:
15407     case OP_SYSSEEK:
15408         match = 1;
15409         goto do_op;
15410
15411     case OP_ENTERSUB:
15412     case OP_GOTO:
15413         /* XXX tmp hack: these two may call an XS sub, and currently
15414           XS subs don't have a SUB entry on the context stack, so CV and
15415           pad determination goes wrong, and BAD things happen. So, just
15416           don't try to determine the value under those circumstances.
15417           Need a better fix at dome point. DAPM 11/2007 */
15418         break;
15419
15420     case OP_FLIP:
15421     case OP_FLOP:
15422     {
15423         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
15424         if (gv && GvSV(gv) == uninit_sv)
15425             return newSVpvs_flags("$.", SVs_TEMP);
15426         goto do_op;
15427     }
15428
15429     case OP_POS:
15430         /* def-ness of rval pos() is independent of the def-ness of its arg */
15431         if ( !(obase->op_flags & OPf_MOD))
15432             break;
15433
15434     case OP_SCHOMP:
15435     case OP_CHOMP:
15436         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
15437             return newSVpvs_flags("${$/}", SVs_TEMP);
15438         /* FALLTHROUGH */
15439
15440     default:
15441     do_op:
15442         if (!(obase->op_flags & OPf_KIDS))
15443             break;
15444         o = cUNOPx(obase)->op_first;
15445         
15446     do_op2:
15447         if (!o)
15448             break;
15449
15450         /* This loop checks all the kid ops, skipping any that cannot pos-
15451          * sibly be responsible for the uninitialized value; i.e., defined
15452          * constants and ops that return nothing.  If there is only one op
15453          * left that is not skipped, then we *know* it is responsible for
15454          * the uninitialized value.  If there is more than one op left, we
15455          * have to look for an exact match in the while() loop below.
15456          * Note that we skip padrange, because the individual pad ops that
15457          * it replaced are still in the tree, so we work on them instead.
15458          */
15459         o2 = NULL;
15460         for (kid=o; kid; kid = OP_SIBLING(kid)) {
15461             const OPCODE type = kid->op_type;
15462             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
15463               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
15464               || (type == OP_PUSHMARK)
15465               || (type == OP_PADRANGE)
15466             )
15467             continue;
15468
15469             if (o2) { /* more than one found */
15470                 o2 = NULL;
15471                 break;
15472             }
15473             o2 = kid;
15474         }
15475         if (o2)
15476             return find_uninit_var(o2, uninit_sv, match);
15477
15478         /* scan all args */
15479         while (o) {
15480             sv = find_uninit_var(o, uninit_sv, 1);
15481             if (sv)
15482                 return sv;
15483             o = OP_SIBLING(o);
15484         }
15485         break;
15486     }
15487     return NULL;
15488 }
15489
15490
15491 /*
15492 =for apidoc report_uninit
15493
15494 Print appropriate "Use of uninitialized variable" warning.
15495
15496 =cut
15497 */
15498
15499 void
15500 Perl_report_uninit(pTHX_ const SV *uninit_sv)
15501 {
15502     if (PL_op) {
15503         SV* varname = NULL;
15504         if (uninit_sv && PL_curpad) {
15505             varname = find_uninit_var(PL_op, uninit_sv,0);
15506             if (varname)
15507                 sv_insert(varname, 0, 0, " ", 1);
15508         }
15509         /* PL_warn_uninit_sv is constant */
15510         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15511         /* diag_listed_as: Use of uninitialized value%s */
15512         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
15513                 SVfARG(varname ? varname : &PL_sv_no),
15514                 " in ", OP_DESC(PL_op));
15515         GCC_DIAG_RESTORE;
15516     }
15517     else {
15518         /* PL_warn_uninit is constant */
15519         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15520         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
15521                     "", "", "");
15522         GCC_DIAG_RESTORE;
15523     }
15524 }
15525
15526 /*
15527  * Local variables:
15528  * c-indentation-style: bsd
15529  * c-basic-offset: 4
15530  * indent-tabs-mode: nil
15531  * End:
15532  *
15533  * ex: set ts=8 sts=4 sw=4 et:
15534  */