This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Finalize perldelta
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =head1 Allocation and deallocation of SVs.
134 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135 sv, av, hv...) contains type and reference count information, and for
136 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137 contains fields specific to each type.  Some types store all they need
138 in the head, so don't have a body.
139
140 In all but the most memory-paranoid configurations (ex: PURIFY), heads
141 and bodies are allocated out of arenas, which by default are
142 approximately 4K chunks of memory parcelled up into N heads or bodies.
143 Sv-bodies are allocated by their sv-type, guaranteeing size
144 consistency needed to allocate safely from arrays.
145
146 For SV-heads, the first slot in each arena is reserved, and holds a
147 link to the next arena, some flags, and a note of the number of slots.
148 Snaked through each arena chain is a linked list of free items; when
149 this becomes empty, an extra arena is allocated and divided up into N
150 items which are threaded into the free list.
151
152 SV-bodies are similar, but they use arena-sets by default, which
153 separate the link and info from the arena itself, and reclaim the 1st
154 slot in the arena.  SV-bodies are further described later.
155
156 The following global variables are associated with arenas:
157
158  PL_sv_arenaroot     pointer to list of SV arenas
159  PL_sv_root          pointer to list of free SV structures
160
161  PL_body_arenas      head of linked-list of body arenas
162  PL_body_roots[]     array of pointers to list of free bodies of svtype
163                      arrays are indexed by the svtype needed
164
165 A few special SV heads are not allocated from an arena, but are
166 instead directly created in the interpreter structure, eg PL_sv_undef.
167 The size of arenas can be changed from the default by setting
168 PERL_ARENA_SIZE appropriately at compile time.
169
170 The SV arena serves the secondary purpose of allowing still-live SVs
171 to be located and destroyed during final cleanup.
172
173 At the lowest level, the macros new_SV() and del_SV() grab and free
174 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
175 to return the SV to the free list with error checking.) new_SV() calls
176 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177 SVs in the free list have their SvTYPE field set to all ones.
178
179 At the time of very final cleanup, sv_free_arenas() is called from
180 perl_destruct() to physically free all the arenas allocated since the
181 start of the interpreter.
182
183 The function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live - ie which has an SvTYPE
185 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186 following functions (specified as [function that calls visit()] / [function
187 called by visit() for each SV]):
188
189     sv_report_used() / do_report_used()
190                         dump all remaining SVs (debugging aid)
191
192     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193                       do_clean_named_io_objs(),do_curse()
194                         Attempt to free all objects pointed to by RVs,
195                         try to do the same for all objects indir-
196                         ectly referenced by typeglobs too, and
197                         then do a final sweep, cursing any
198                         objects that remain.  Called once from
199                         perl_destruct(), prior to calling sv_clean_all()
200                         below.
201
202     sv_clean_all() / do_clean_all()
203                         SvREFCNT_dec(sv) each remaining SV, possibly
204                         triggering an sv_free(). It also sets the
205                         SVf_BREAK flag on the SV to indicate that the
206                         refcnt has been artificially lowered, and thus
207                         stopping sv_free() from giving spurious warnings
208                         about SVs which unexpectedly have a refcnt
209                         of zero.  called repeatedly from perl_destruct()
210                         until there are no SVs left.
211
212 =head2 Arena allocator API Summary
213
214 Private API to rest of sv.c
215
216     new_SV(),  del_SV(),
217
218     new_XPVNV(), del_XPVGV(),
219     etc
220
221 Public API:
222
223     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225 =cut
226
227  * ========================================================================= */
228
229 /*
230  * "A time to plant, and a time to uproot what was planted..."
231  */
232
233 #ifdef PERL_MEM_LOG
234 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
235             Perl_mem_log_new_sv(sv, file, line, func)
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
237             Perl_mem_log_del_sv(sv, file, line, func)
238 #else
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
240 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
241 #endif
242
243 #ifdef DEBUG_LEAKING_SCALARS
244 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246     } STMT_END
247 #  define DEBUG_SV_SERIAL(sv)                                               \
248     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
249             PTR2UV(sv), (long)(sv)->sv_debug_serial))
250 #else
251 #  define FREE_SV_DEBUG_FILE(sv)
252 #  define DEBUG_SV_SERIAL(sv)   NOOP
253 #endif
254
255 #ifdef PERL_POISON
256 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
257 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258 /* Whilst I'd love to do this, it seems that things like to check on
259    unreferenced scalars
260 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
261 */
262 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
263                                 PoisonNew(&SvREFCNT(sv), 1, U32)
264 #else
265 #  define SvARENA_CHAIN(sv)     SvANY(sv)
266 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
267 #  define POISON_SV_HEAD(sv)
268 #endif
269
270 /* Mark an SV head as unused, and add to free list.
271  *
272  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273  * its refcount artificially decremented during global destruction, so
274  * there may be dangling pointers to it. The last thing we want in that
275  * case is for it to be reused. */
276
277 #define plant_SV(p) \
278     STMT_START {                                        \
279         const U32 old_flags = SvFLAGS(p);                       \
280         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
281         DEBUG_SV_SERIAL(p);                             \
282         FREE_SV_DEBUG_FILE(p);                          \
283         POISON_SV_HEAD(p);                              \
284         SvFLAGS(p) = SVTYPEMASK;                        \
285         if (!(old_flags & SVf_BREAK)) {         \
286             SvARENA_CHAIN_SET(p, PL_sv_root);   \
287             PL_sv_root = (p);                           \
288         }                                               \
289         --PL_sv_count;                                  \
290     } STMT_END
291
292 #define uproot_SV(p) \
293     STMT_START {                                        \
294         (p) = PL_sv_root;                               \
295         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
296         ++PL_sv_count;                                  \
297     } STMT_END
298
299
300 /* make some more SVs by adding another arena */
301
302 STATIC SV*
303 S_more_sv(pTHX)
304 {
305     SV* sv;
306     char *chunk;                /* must use New here to match call to */
307     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
308     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309     uproot_SV(sv);
310     return sv;
311 }
312
313 /* new_SV(): return a new, empty SV head */
314
315 #ifdef DEBUG_LEAKING_SCALARS
316 /* provide a real function for a debugger to play with */
317 STATIC SV*
318 S_new_SV(pTHX_ const char *file, int line, const char *func)
319 {
320     SV* sv;
321
322     if (PL_sv_root)
323         uproot_SV(sv);
324     else
325         sv = S_more_sv(aTHX);
326     SvANY(sv) = 0;
327     SvREFCNT(sv) = 1;
328     SvFLAGS(sv) = 0;
329     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331                 ? PL_parser->copline
332                 :  PL_curcop
333                     ? CopLINE(PL_curcop)
334                     : 0
335             );
336     sv->sv_debug_inpad = 0;
337     sv->sv_debug_parent = NULL;
338     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340     sv->sv_debug_serial = PL_sv_serial++;
341
342     MEM_LOG_NEW_SV(sv, file, line, func);
343     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
344             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346     return sv;
347 }
348 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350 #else
351 #  define new_SV(p) \
352     STMT_START {                                        \
353         if (PL_sv_root)                                 \
354             uproot_SV(p);                               \
355         else                                            \
356             (p) = S_more_sv(aTHX);                      \
357         SvANY(p) = 0;                                   \
358         SvREFCNT(p) = 1;                                \
359         SvFLAGS(p) = 0;                                 \
360         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
361     } STMT_END
362 #endif
363
364
365 /* del_SV(): return an empty SV head to the free list */
366
367 #ifdef DEBUGGING
368
369 #define del_SV(p) \
370     STMT_START {                                        \
371         if (DEBUG_D_TEST)                               \
372             del_sv(p);                                  \
373         else                                            \
374             plant_SV(p);                                \
375     } STMT_END
376
377 STATIC void
378 S_del_sv(pTHX_ SV *p)
379 {
380     PERL_ARGS_ASSERT_DEL_SV;
381
382     if (DEBUG_D_TEST) {
383         SV* sva;
384         bool ok = 0;
385         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386             const SV * const sv = sva + 1;
387             const SV * const svend = &sva[SvREFCNT(sva)];
388             if (p >= sv && p < svend) {
389                 ok = 1;
390                 break;
391             }
392         }
393         if (!ok) {
394             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395                              "Attempt to free non-arena SV: 0x%"UVxf
396                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397             return;
398         }
399     }
400     plant_SV(p);
401 }
402
403 #else /* ! DEBUGGING */
404
405 #define del_SV(p)   plant_SV(p)
406
407 #endif /* DEBUGGING */
408
409
410 /*
411 =head1 SV Manipulation Functions
412
413 =for apidoc sv_add_arena
414
415 Given a chunk of memory, link it to the head of the list of arenas,
416 and split it into a list of free SVs.
417
418 =cut
419 */
420
421 static void
422 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423 {
424     SV *const sva = MUTABLE_SV(ptr);
425     SV* sv;
426     SV* svend;
427
428     PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430     /* The first SV in an arena isn't an SV. */
431     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
432     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
433     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
434
435     PL_sv_arenaroot = sva;
436     PL_sv_root = sva + 1;
437
438     svend = &sva[SvREFCNT(sva) - 1];
439     sv = sva + 1;
440     while (sv < svend) {
441         SvARENA_CHAIN_SET(sv, (sv + 1));
442 #ifdef DEBUGGING
443         SvREFCNT(sv) = 0;
444 #endif
445         /* Must always set typemask because it's always checked in on cleanup
446            when the arenas are walked looking for objects.  */
447         SvFLAGS(sv) = SVTYPEMASK;
448         sv++;
449     }
450     SvARENA_CHAIN_SET(sv, 0);
451 #ifdef DEBUGGING
452     SvREFCNT(sv) = 0;
453 #endif
454     SvFLAGS(sv) = SVTYPEMASK;
455 }
456
457 /* visit(): call the named function for each non-free SV in the arenas
458  * whose flags field matches the flags/mask args. */
459
460 STATIC I32
461 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462 {
463     SV* sva;
464     I32 visited = 0;
465
466     PERL_ARGS_ASSERT_VISIT;
467
468     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469         const SV * const svend = &sva[SvREFCNT(sva)];
470         SV* sv;
471         for (sv = sva + 1; sv < svend; ++sv) {
472             if (SvTYPE(sv) != (svtype)SVTYPEMASK
473                     && (sv->sv_flags & mask) == flags
474                     && SvREFCNT(sv))
475             {
476                 (*f)(aTHX_ sv);
477                 ++visited;
478             }
479         }
480     }
481     return visited;
482 }
483
484 #ifdef DEBUGGING
485
486 /* called by sv_report_used() for each live SV */
487
488 static void
489 do_report_used(pTHX_ SV *const sv)
490 {
491     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492         PerlIO_printf(Perl_debug_log, "****\n");
493         sv_dump(sv);
494     }
495 }
496 #endif
497
498 /*
499 =for apidoc sv_report_used
500
501 Dump the contents of all SVs not yet freed (debugging aid).
502
503 =cut
504 */
505
506 void
507 Perl_sv_report_used(pTHX)
508 {
509 #ifdef DEBUGGING
510     visit(do_report_used, 0, 0);
511 #else
512     PERL_UNUSED_CONTEXT;
513 #endif
514 }
515
516 /* called by sv_clean_objs() for each live SV */
517
518 static void
519 do_clean_objs(pTHX_ SV *const ref)
520 {
521     assert (SvROK(ref));
522     {
523         SV * const target = SvRV(ref);
524         if (SvOBJECT(target)) {
525             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526             if (SvWEAKREF(ref)) {
527                 sv_del_backref(target, ref);
528                 SvWEAKREF_off(ref);
529                 SvRV_set(ref, NULL);
530             } else {
531                 SvROK_off(ref);
532                 SvRV_set(ref, NULL);
533                 SvREFCNT_dec_NN(target);
534             }
535         }
536     }
537 }
538
539
540 /* clear any slots in a GV which hold objects - except IO;
541  * called by sv_clean_objs() for each live GV */
542
543 static void
544 do_clean_named_objs(pTHX_ SV *const sv)
545 {
546     SV *obj;
547     assert(SvTYPE(sv) == SVt_PVGV);
548     assert(isGV_with_GP(sv));
549     if (!GvGP(sv))
550         return;
551
552     /* freeing GP entries may indirectly free the current GV;
553      * hold onto it while we mess with the GP slots */
554     SvREFCNT_inc(sv);
555
556     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557         DEBUG_D((PerlIO_printf(Perl_debug_log,
558                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559         GvSV(sv) = NULL;
560         SvREFCNT_dec_NN(obj);
561     }
562     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563         DEBUG_D((PerlIO_printf(Perl_debug_log,
564                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565         GvAV(sv) = NULL;
566         SvREFCNT_dec_NN(obj);
567     }
568     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569         DEBUG_D((PerlIO_printf(Perl_debug_log,
570                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571         GvHV(sv) = NULL;
572         SvREFCNT_dec_NN(obj);
573     }
574     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575         DEBUG_D((PerlIO_printf(Perl_debug_log,
576                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577         GvCV_set(sv, NULL);
578         SvREFCNT_dec_NN(obj);
579     }
580     SvREFCNT_dec_NN(sv); /* undo the inc above */
581 }
582
583 /* clear any IO slots in a GV which hold objects (except stderr, defout);
584  * called by sv_clean_objs() for each live GV */
585
586 static void
587 do_clean_named_io_objs(pTHX_ SV *const sv)
588 {
589     SV *obj;
590     assert(SvTYPE(sv) == SVt_PVGV);
591     assert(isGV_with_GP(sv));
592     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593         return;
594
595     SvREFCNT_inc(sv);
596     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597         DEBUG_D((PerlIO_printf(Perl_debug_log,
598                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599         GvIOp(sv) = NULL;
600         SvREFCNT_dec_NN(obj);
601     }
602     SvREFCNT_dec_NN(sv); /* undo the inc above */
603 }
604
605 /* Void wrapper to pass to visit() */
606 static void
607 do_curse(pTHX_ SV * const sv) {
608     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610         return;
611     (void)curse(sv, 0);
612 }
613
614 /*
615 =for apidoc sv_clean_objs
616
617 Attempt to destroy all objects not yet freed.
618
619 =cut
620 */
621
622 void
623 Perl_sv_clean_objs(pTHX)
624 {
625     GV *olddef, *olderr;
626     PL_in_clean_objs = TRUE;
627     visit(do_clean_objs, SVf_ROK, SVf_ROK);
628     /* Some barnacles may yet remain, clinging to typeglobs.
629      * Run the non-IO destructors first: they may want to output
630      * error messages, close files etc */
631     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     /* And if there are some very tenacious barnacles clinging to arrays,
634        closures, or what have you.... */
635     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636     olddef = PL_defoutgv;
637     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638     if (olddef && isGV_with_GP(olddef))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640     olderr = PL_stderrgv;
641     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642     if (olderr && isGV_with_GP(olderr))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644     SvREFCNT_dec(olddef);
645     PL_in_clean_objs = FALSE;
646 }
647
648 /* called by sv_clean_all() for each live SV */
649
650 static void
651 do_clean_all(pTHX_ SV *const sv)
652 {
653     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654         /* don't clean pid table and strtab */
655         return;
656     }
657     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
658     SvFLAGS(sv) |= SVf_BREAK;
659     SvREFCNT_dec_NN(sv);
660 }
661
662 /*
663 =for apidoc sv_clean_all
664
665 Decrement the refcnt of each remaining SV, possibly triggering a
666 cleanup.  This function may have to be called multiple times to free
667 SVs which are in complex self-referential hierarchies.
668
669 =cut
670 */
671
672 I32
673 Perl_sv_clean_all(pTHX)
674 {
675     I32 cleaned;
676     PL_in_clean_all = TRUE;
677     cleaned = visit(do_clean_all, 0,0);
678     return cleaned;
679 }
680
681 /*
682   ARENASETS: a meta-arena implementation which separates arena-info
683   into struct arena_set, which contains an array of struct
684   arena_descs, each holding info for a single arena.  By separating
685   the meta-info from the arena, we recover the 1st slot, formerly
686   borrowed for list management.  The arena_set is about the size of an
687   arena, avoiding the needless malloc overhead of a naive linked-list.
688
689   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690   memory in the last arena-set (1/2 on average).  In trade, we get
691   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692   smaller types).  The recovery of the wasted space allows use of
693   small arenas for large, rare body types, by changing array* fields
694   in body_details_by_type[] below.
695 */
696 struct arena_desc {
697     char       *arena;          /* the raw storage, allocated aligned */
698     size_t      size;           /* its size ~4k typ */
699     svtype      utype;          /* bodytype stored in arena */
700 };
701
702 struct arena_set;
703
704 /* Get the maximum number of elements in set[] such that struct arena_set
705    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706    therefore likely to be 1 aligned memory page.  */
707
708 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711 struct arena_set {
712     struct arena_set* next;
713     unsigned int   set_size;    /* ie ARENAS_PER_SET */
714     unsigned int   curr;        /* index of next available arena-desc */
715     struct arena_desc set[ARENAS_PER_SET];
716 };
717
718 /*
719 =for apidoc sv_free_arenas
720
721 Deallocate the memory used by all arenas.  Note that all the individual SV
722 heads and bodies within the arenas must already have been freed.
723
724 =cut
725
726 */
727 void
728 Perl_sv_free_arenas(pTHX)
729 {
730     SV* sva;
731     SV* svanext;
732     unsigned int i;
733
734     /* Free arenas here, but be careful about fake ones.  (We assume
735        contiguity of the fake ones with the corresponding real ones.) */
736
737     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738         svanext = MUTABLE_SV(SvANY(sva));
739         while (svanext && SvFAKE(svanext))
740             svanext = MUTABLE_SV(SvANY(svanext));
741
742         if (!SvFAKE(sva))
743             Safefree(sva);
744     }
745
746     {
747         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749         while (aroot) {
750             struct arena_set *current = aroot;
751             i = aroot->curr;
752             while (i--) {
753                 assert(aroot->set[i].arena);
754                 Safefree(aroot->set[i].arena);
755             }
756             aroot = aroot->next;
757             Safefree(current);
758         }
759     }
760     PL_body_arenas = 0;
761
762     i = PERL_ARENA_ROOTS_SIZE;
763     while (i--)
764         PL_body_roots[i] = 0;
765
766     PL_sv_arenaroot = 0;
767     PL_sv_root = 0;
768 }
769
770 /*
771   Here are mid-level routines that manage the allocation of bodies out
772   of the various arenas.  There are 5 kinds of arenas:
773
774   1. SV-head arenas, which are discussed and handled above
775   2. regular body arenas
776   3. arenas for reduced-size bodies
777   4. Hash-Entry arenas
778
779   Arena types 2 & 3 are chained by body-type off an array of
780   arena-root pointers, which is indexed by svtype.  Some of the
781   larger/less used body types are malloced singly, since a large
782   unused block of them is wasteful.  Also, several svtypes dont have
783   bodies; the data fits into the sv-head itself.  The arena-root
784   pointer thus has a few unused root-pointers (which may be hijacked
785   later for arena types 4,5)
786
787   3 differs from 2 as an optimization; some body types have several
788   unused fields in the front of the structure (which are kept in-place
789   for consistency).  These bodies can be allocated in smaller chunks,
790   because the leading fields arent accessed.  Pointers to such bodies
791   are decremented to point at the unused 'ghost' memory, knowing that
792   the pointers are used with offsets to the real memory.
793
794
795 =head1 SV-Body Allocation
796
797 =cut
798
799 Allocation of SV-bodies is similar to SV-heads, differing as follows;
800 the allocation mechanism is used for many body types, so is somewhat
801 more complicated, it uses arena-sets, and has no need for still-live
802 SV detection.
803
804 At the outermost level, (new|del)_X*V macros return bodies of the
805 appropriate type.  These macros call either (new|del)_body_type or
806 (new|del)_body_allocated macro pairs, depending on specifics of the
807 type.  Most body types use the former pair, the latter pair is used to
808 allocate body types with "ghost fields".
809
810 "ghost fields" are fields that are unused in certain types, and
811 consequently don't need to actually exist.  They are declared because
812 they're part of a "base type", which allows use of functions as
813 methods.  The simplest examples are AVs and HVs, 2 aggregate types
814 which don't use the fields which support SCALAR semantics.
815
816 For these types, the arenas are carved up into appropriately sized
817 chunks, we thus avoid wasted memory for those unaccessed members.
818 When bodies are allocated, we adjust the pointer back in memory by the
819 size of the part not allocated, so it's as if we allocated the full
820 structure.  (But things will all go boom if you write to the part that
821 is "not there", because you'll be overwriting the last members of the
822 preceding structure in memory.)
823
824 We calculate the correction using the STRUCT_OFFSET macro on the first
825 member present.  If the allocated structure is smaller (no initial NV
826 actually allocated) then the net effect is to subtract the size of the NV
827 from the pointer, to return a new pointer as if an initial NV were actually
828 allocated.  (We were using structures named *_allocated for this, but
829 this turned out to be a subtle bug, because a structure without an NV
830 could have a lower alignment constraint, but the compiler is allowed to
831 optimised accesses based on the alignment constraint of the actual pointer
832 to the full structure, for example, using a single 64 bit load instruction
833 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
834
835 This is the same trick as was used for NV and IV bodies.  Ironically it
836 doesn't need to be used for NV bodies any more, because NV is now at
837 the start of the structure.  IV bodies, and also in some builds NV bodies,
838 don't need it either, because they are no longer allocated.
839
840 In turn, the new_body_* allocators call S_new_body(), which invokes
841 new_body_inline macro, which takes a lock, and takes a body off the
842 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
843 necessary to refresh an empty list.  Then the lock is released, and
844 the body is returned.
845
846 Perl_more_bodies allocates a new arena, and carves it up into an array of N
847 bodies, which it strings into a linked list.  It looks up arena-size
848 and body-size from the body_details table described below, thus
849 supporting the multiple body-types.
850
851 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
852 the (new|del)_X*V macros are mapped directly to malloc/free.
853
854 For each sv-type, struct body_details bodies_by_type[] carries
855 parameters which control these aspects of SV handling:
856
857 Arena_size determines whether arenas are used for this body type, and if
858 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
859 zero, forcing individual mallocs and frees.
860
861 Body_size determines how big a body is, and therefore how many fit into
862 each arena.  Offset carries the body-pointer adjustment needed for
863 "ghost fields", and is used in *_allocated macros.
864
865 But its main purpose is to parameterize info needed in
866 Perl_sv_upgrade().  The info here dramatically simplifies the function
867 vs the implementation in 5.8.8, making it table-driven.  All fields
868 are used for this, except for arena_size.
869
870 For the sv-types that have no bodies, arenas are not used, so those
871 PL_body_roots[sv_type] are unused, and can be overloaded.  In
872 something of a special case, SVt_NULL is borrowed for HE arenas;
873 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
874 bodies_by_type[SVt_NULL] slot is not used, as the table is not
875 available in hv.c.
876
877 */
878
879 struct body_details {
880     U8 body_size;       /* Size to allocate  */
881     U8 copy;            /* Size of structure to copy (may be shorter)  */
882     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
883     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
884     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
885     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
886     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
887     U32 arena_size;                 /* Size of arena to allocate */
888 };
889
890 #define HADNV FALSE
891 #define NONV TRUE
892
893
894 #ifdef PURIFY
895 /* With -DPURFIY we allocate everything directly, and don't use arenas.
896    This seems a rather elegant way to simplify some of the code below.  */
897 #define HASARENA FALSE
898 #else
899 #define HASARENA TRUE
900 #endif
901 #define NOARENA FALSE
902
903 /* Size the arenas to exactly fit a given number of bodies.  A count
904    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
905    simplifying the default.  If count > 0, the arena is sized to fit
906    only that many bodies, allowing arenas to be used for large, rare
907    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
908    limited by PERL_ARENA_SIZE, so we can safely oversize the
909    declarations.
910  */
911 #define FIT_ARENA0(body_size)                           \
912     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
913 #define FIT_ARENAn(count,body_size)                     \
914     ( count * body_size <= PERL_ARENA_SIZE)             \
915     ? count * body_size                                 \
916     : FIT_ARENA0 (body_size)
917 #define FIT_ARENA(count,body_size)                      \
918    (U32)(count                                          \
919     ? FIT_ARENAn (count, body_size)                     \
920     : FIT_ARENA0 (body_size))
921
922 /* Calculate the length to copy. Specifically work out the length less any
923    final padding the compiler needed to add.  See the comment in sv_upgrade
924    for why copying the padding proved to be a bug.  */
925
926 #define copy_length(type, last_member) \
927         STRUCT_OFFSET(type, last_member) \
928         + sizeof (((type*)SvANY((const SV *)0))->last_member)
929
930 static const struct body_details bodies_by_type[] = {
931     /* HEs use this offset for their arena.  */
932     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
933
934     /* IVs are in the head, so the allocation size is 0.  */
935     { 0,
936       sizeof(IV), /* This is used to copy out the IV body.  */
937       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
938       NOARENA /* IVS don't need an arena  */, 0
939     },
940
941 #if NVSIZE <= IVSIZE
942     { 0, sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, NOARENA, 0 },
945 #else
946     { sizeof(NV), sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949 #endif
950
951     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
952       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
953       + STRUCT_OFFSET(XPV, xpv_cur),
954       SVt_PV, FALSE, NONV, HASARENA,
955       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
956
957     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
958       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
959       + STRUCT_OFFSET(XPV, xpv_cur),
960       SVt_INVLIST, TRUE, NONV, HASARENA,
961       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
962
963     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PVIV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_PVNV, FALSE, HADNV, HASARENA,
973       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
976       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
977
978     { sizeof(regexp),
979       sizeof(regexp),
980       0,
981       SVt_REGEXP, TRUE, NONV, HASARENA,
982       FIT_ARENA(0, sizeof(regexp))
983     },
984
985     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
986       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
987     
988     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
989       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
990
991     { sizeof(XPVAV),
992       copy_length(XPVAV, xav_alloc),
993       0,
994       SVt_PVAV, TRUE, NONV, HASARENA,
995       FIT_ARENA(0, sizeof(XPVAV)) },
996
997     { sizeof(XPVHV),
998       copy_length(XPVHV, xhv_max),
999       0,
1000       SVt_PVHV, TRUE, NONV, HASARENA,
1001       FIT_ARENA(0, sizeof(XPVHV)) },
1002
1003     { sizeof(XPVCV),
1004       sizeof(XPVCV),
1005       0,
1006       SVt_PVCV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(XPVCV)) },
1008
1009     { sizeof(XPVFM),
1010       sizeof(XPVFM),
1011       0,
1012       SVt_PVFM, TRUE, NONV, NOARENA,
1013       FIT_ARENA(20, sizeof(XPVFM)) },
1014
1015     { sizeof(XPVIO),
1016       sizeof(XPVIO),
1017       0,
1018       SVt_PVIO, TRUE, NONV, HASARENA,
1019       FIT_ARENA(24, sizeof(XPVIO)) },
1020 };
1021
1022 #define new_body_allocated(sv_type)             \
1023     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1024              - bodies_by_type[sv_type].offset)
1025
1026 /* return a thing to the free list */
1027
1028 #define del_body(thing, root)                           \
1029     STMT_START {                                        \
1030         void ** const thing_copy = (void **)thing;      \
1031         *thing_copy = *root;                            \
1032         *root = (void*)thing_copy;                      \
1033     } STMT_END
1034
1035 #ifdef PURIFY
1036 #if !(NVSIZE <= IVSIZE)
1037 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1038 #endif
1039 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1040 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1041
1042 #define del_XPVGV(p)    safefree(p)
1043
1044 #else /* !PURIFY */
1045
1046 #if !(NVSIZE <= IVSIZE)
1047 #  define new_XNV()     new_body_allocated(SVt_NV)
1048 #endif
1049 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1050 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1051
1052 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1053                                  &PL_body_roots[SVt_PVGV])
1054
1055 #endif /* PURIFY */
1056
1057 /* no arena for you! */
1058
1059 #define new_NOARENA(details) \
1060         safemalloc((details)->body_size + (details)->offset)
1061 #define new_NOARENAZ(details) \
1062         safecalloc((details)->body_size + (details)->offset, 1)
1063
1064 void *
1065 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1066                   const size_t arena_size)
1067 {
1068     void ** const root = &PL_body_roots[sv_type];
1069     struct arena_desc *adesc;
1070     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1071     unsigned int curr;
1072     char *start;
1073     const char *end;
1074     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1075 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1076     dVAR;
1077 #endif
1078 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1079     static bool done_sanity_check;
1080
1081     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1082      * variables like done_sanity_check. */
1083     if (!done_sanity_check) {
1084         unsigned int i = SVt_LAST;
1085
1086         done_sanity_check = TRUE;
1087
1088         while (i--)
1089             assert (bodies_by_type[i].type == i);
1090     }
1091 #endif
1092
1093     assert(arena_size);
1094
1095     /* may need new arena-set to hold new arena */
1096     if (!aroot || aroot->curr >= aroot->set_size) {
1097         struct arena_set *newroot;
1098         Newxz(newroot, 1, struct arena_set);
1099         newroot->set_size = ARENAS_PER_SET;
1100         newroot->next = aroot;
1101         aroot = newroot;
1102         PL_body_arenas = (void *) newroot;
1103         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1104     }
1105
1106     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1107     curr = aroot->curr++;
1108     adesc = &(aroot->set[curr]);
1109     assert(!adesc->arena);
1110     
1111     Newx(adesc->arena, good_arena_size, char);
1112     adesc->size = good_arena_size;
1113     adesc->utype = sv_type;
1114     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1115                           curr, (void*)adesc->arena, (UV)good_arena_size));
1116
1117     start = (char *) adesc->arena;
1118
1119     /* Get the address of the byte after the end of the last body we can fit.
1120        Remember, this is integer division:  */
1121     end = start + good_arena_size / body_size * body_size;
1122
1123     /* computed count doesn't reflect the 1st slot reservation */
1124 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1125     DEBUG_m(PerlIO_printf(Perl_debug_log,
1126                           "arena %p end %p arena-size %d (from %d) type %d "
1127                           "size %d ct %d\n",
1128                           (void*)start, (void*)end, (int)good_arena_size,
1129                           (int)arena_size, sv_type, (int)body_size,
1130                           (int)good_arena_size / (int)body_size));
1131 #else
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1134                           (void*)start, (void*)end,
1135                           (int)arena_size, sv_type, (int)body_size,
1136                           (int)good_arena_size / (int)body_size));
1137 #endif
1138     *root = (void *)start;
1139
1140     while (1) {
1141         /* Where the next body would start:  */
1142         char * const next = start + body_size;
1143
1144         if (next >= end) {
1145             /* This is the last body:  */
1146             assert(next == end);
1147
1148             *(void **)start = 0;
1149             return *root;
1150         }
1151
1152         *(void**) start = (void *)next;
1153         start = next;
1154     }
1155 }
1156
1157 /* grab a new thing from the free list, allocating more if necessary.
1158    The inline version is used for speed in hot routines, and the
1159    function using it serves the rest (unless PURIFY).
1160 */
1161 #define new_body_inline(xpv, sv_type) \
1162     STMT_START { \
1163         void ** const r3wt = &PL_body_roots[sv_type]; \
1164         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1165           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1166                                              bodies_by_type[sv_type].body_size,\
1167                                              bodies_by_type[sv_type].arena_size)); \
1168         *(r3wt) = *(void**)(xpv); \
1169     } STMT_END
1170
1171 #ifndef PURIFY
1172
1173 STATIC void *
1174 S_new_body(pTHX_ const svtype sv_type)
1175 {
1176     void *xpv;
1177     new_body_inline(xpv, sv_type);
1178     return xpv;
1179 }
1180
1181 #endif
1182
1183 static const struct body_details fake_rv =
1184     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1185
1186 /*
1187 =for apidoc sv_upgrade
1188
1189 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1190 SV, then copies across as much information as possible from the old body.
1191 It croaks if the SV is already in a more complex form than requested.  You
1192 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1193 before calling C<sv_upgrade>, and hence does not croak.  See also
1194 C<L</svtype>>.
1195
1196 =cut
1197 */
1198
1199 void
1200 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1201 {
1202     void*       old_body;
1203     void*       new_body;
1204     const svtype old_type = SvTYPE(sv);
1205     const struct body_details *new_type_details;
1206     const struct body_details *old_type_details
1207         = bodies_by_type + old_type;
1208     SV *referant = NULL;
1209
1210     PERL_ARGS_ASSERT_SV_UPGRADE;
1211
1212     if (old_type == new_type)
1213         return;
1214
1215     /* This clause was purposefully added ahead of the early return above to
1216        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1217        inference by Nick I-S that it would fix other troublesome cases. See
1218        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1219
1220        Given that shared hash key scalars are no longer PVIV, but PV, there is
1221        no longer need to unshare so as to free up the IVX slot for its proper
1222        purpose. So it's safe to move the early return earlier.  */
1223
1224     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1225         sv_force_normal_flags(sv, 0);
1226     }
1227
1228     old_body = SvANY(sv);
1229
1230     /* Copying structures onto other structures that have been neatly zeroed
1231        has a subtle gotcha. Consider XPVMG
1232
1233        +------+------+------+------+------+-------+-------+
1234        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1235        +------+------+------+------+------+-------+-------+
1236        0      4      8     12     16     20      24      28
1237
1238        where NVs are aligned to 8 bytes, so that sizeof that structure is
1239        actually 32 bytes long, with 4 bytes of padding at the end:
1240
1241        +------+------+------+------+------+-------+-------+------+
1242        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1243        +------+------+------+------+------+-------+-------+------+
1244        0      4      8     12     16     20      24      28     32
1245
1246        so what happens if you allocate memory for this structure:
1247
1248        +------+------+------+------+------+-------+-------+------+------+...
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1250        +------+------+------+------+------+-------+-------+------+------+...
1251        0      4      8     12     16     20      24      28     32     36
1252
1253        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1254        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1255        started out as zero once, but it's quite possible that it isn't. So now,
1256        rather than a nicely zeroed GP, you have it pointing somewhere random.
1257        Bugs ensue.
1258
1259        (In fact, GP ends up pointing at a previous GP structure, because the
1260        principle cause of the padding in XPVMG getting garbage is a copy of
1261        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1262        this happens to be moot because XPVGV has been re-ordered, with GP
1263        no longer after STASH)
1264
1265        So we are careful and work out the size of used parts of all the
1266        structures.  */
1267
1268     switch (old_type) {
1269     case SVt_NULL:
1270         break;
1271     case SVt_IV:
1272         if (SvROK(sv)) {
1273             referant = SvRV(sv);
1274             old_type_details = &fake_rv;
1275             if (new_type == SVt_NV)
1276                 new_type = SVt_PVNV;
1277         } else {
1278             if (new_type < SVt_PVIV) {
1279                 new_type = (new_type == SVt_NV)
1280                     ? SVt_PVNV : SVt_PVIV;
1281             }
1282         }
1283         break;
1284     case SVt_NV:
1285         if (new_type < SVt_PVNV) {
1286             new_type = SVt_PVNV;
1287         }
1288         break;
1289     case SVt_PV:
1290         assert(new_type > SVt_PV);
1291         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1292         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1293         break;
1294     case SVt_PVIV:
1295         break;
1296     case SVt_PVNV:
1297         break;
1298     case SVt_PVMG:
1299         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1300            there's no way that it can be safely upgraded, because perl.c
1301            expects to Safefree(SvANY(PL_mess_sv))  */
1302         assert(sv != PL_mess_sv);
1303         break;
1304     default:
1305         if (UNLIKELY(old_type_details->cant_upgrade))
1306             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308     }
1309
1310     if (UNLIKELY(old_type > new_type))
1311         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312                 (int)old_type, (int)new_type);
1313
1314     new_type_details = bodies_by_type + new_type;
1315
1316     SvFLAGS(sv) &= ~SVTYPEMASK;
1317     SvFLAGS(sv) |= new_type;
1318
1319     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320        the return statements above will have triggered.  */
1321     assert (new_type != SVt_NULL);
1322     switch (new_type) {
1323     case SVt_IV:
1324         assert(old_type == SVt_NULL);
1325         SET_SVANY_FOR_BODYLESS_IV(sv);
1326         SvIV_set(sv, 0);
1327         return;
1328     case SVt_NV:
1329         assert(old_type == SVt_NULL);
1330 #if NVSIZE <= IVSIZE
1331         SET_SVANY_FOR_BODYLESS_NV(sv);
1332 #else
1333         SvANY(sv) = new_XNV();
1334 #endif
1335         SvNV_set(sv, 0);
1336         return;
1337     case SVt_PVHV:
1338     case SVt_PVAV:
1339         assert(new_type_details->body_size);
1340
1341 #ifndef PURIFY  
1342         assert(new_type_details->arena);
1343         assert(new_type_details->arena_size);
1344         /* This points to the start of the allocated area.  */
1345         new_body_inline(new_body, new_type);
1346         Zero(new_body, new_type_details->body_size, char);
1347         new_body = ((char *)new_body) - new_type_details->offset;
1348 #else
1349         /* We always allocated the full length item with PURIFY. To do this
1350            we fake things so that arena is false for all 16 types..  */
1351         new_body = new_NOARENAZ(new_type_details);
1352 #endif
1353         SvANY(sv) = new_body;
1354         if (new_type == SVt_PVAV) {
1355             AvMAX(sv)   = -1;
1356             AvFILLp(sv) = -1;
1357             AvREAL_only(sv);
1358             if (old_type_details->body_size) {
1359                 AvALLOC(sv) = 0;
1360             } else {
1361                 /* It will have been zeroed when the new body was allocated.
1362                    Lets not write to it, in case it confuses a write-back
1363                    cache.  */
1364             }
1365         } else {
1366             assert(!SvOK(sv));
1367             SvOK_off(sv);
1368 #ifndef NODEFAULT_SHAREKEYS
1369             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1370 #endif
1371             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1372             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1373         }
1374
1375         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1376            The target created by newSVrv also is, and it can have magic.
1377            However, it never has SvPVX set.
1378         */
1379         if (old_type == SVt_IV) {
1380             assert(!SvROK(sv));
1381         } else if (old_type >= SVt_PV) {
1382             assert(SvPVX_const(sv) == 0);
1383         }
1384
1385         if (old_type >= SVt_PVMG) {
1386             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1387             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1388         } else {
1389             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1390         }
1391         break;
1392
1393     case SVt_PVIV:
1394         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1395            no route from NV to PVIV, NOK can never be true  */
1396         assert(!SvNOKp(sv));
1397         assert(!SvNOK(sv));
1398         /* FALLTHROUGH */
1399     case SVt_PVIO:
1400     case SVt_PVFM:
1401     case SVt_PVGV:
1402     case SVt_PVCV:
1403     case SVt_PVLV:
1404     case SVt_INVLIST:
1405     case SVt_REGEXP:
1406     case SVt_PVMG:
1407     case SVt_PVNV:
1408     case SVt_PV:
1409
1410         assert(new_type_details->body_size);
1411         /* We always allocated the full length item with PURIFY. To do this
1412            we fake things so that arena is false for all 16 types..  */
1413         if(new_type_details->arena) {
1414             /* This points to the start of the allocated area.  */
1415             new_body_inline(new_body, new_type);
1416             Zero(new_body, new_type_details->body_size, char);
1417             new_body = ((char *)new_body) - new_type_details->offset;
1418         } else {
1419             new_body = new_NOARENAZ(new_type_details);
1420         }
1421         SvANY(sv) = new_body;
1422
1423         if (old_type_details->copy) {
1424             /* There is now the potential for an upgrade from something without
1425                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1426             int offset = old_type_details->offset;
1427             int length = old_type_details->copy;
1428
1429             if (new_type_details->offset > old_type_details->offset) {
1430                 const int difference
1431                     = new_type_details->offset - old_type_details->offset;
1432                 offset += difference;
1433                 length -= difference;
1434             }
1435             assert (length >= 0);
1436                 
1437             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438                  char);
1439         }
1440
1441 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1442         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1444          * NV slot, but the new one does, then we need to initialise the
1445          * freshly created NV slot with whatever the correct bit pattern is
1446          * for 0.0  */
1447         if (old_type_details->zero_nv && !new_type_details->zero_nv
1448             && !isGV_with_GP(sv))
1449             SvNV_set(sv, 0);
1450 #endif
1451
1452         if (UNLIKELY(new_type == SVt_PVIO)) {
1453             IO * const io = MUTABLE_IO(sv);
1454             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456             SvOBJECT_on(io);
1457             /* Clear the stashcache because a new IO could overrule a package
1458                name */
1459             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460             hv_clear(PL_stashcache);
1461
1462             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463             IoPAGE_LEN(sv) = 60;
1464         }
1465         if (UNLIKELY(new_type == SVt_REGEXP))
1466             sv->sv_u.svu_rx = (regexp *)new_body;
1467         else if (old_type < SVt_PV) {
1468             /* referant will be NULL unless the old type was SVt_IV emulating
1469                SVt_RV */
1470             sv->sv_u.svu_rv = referant;
1471         }
1472         break;
1473     default:
1474         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1475                    (unsigned long)new_type);
1476     }
1477
1478     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1479        and sometimes SVt_NV */
1480     if (old_type_details->body_size) {
1481 #ifdef PURIFY
1482         safefree(old_body);
1483 #else
1484         /* Note that there is an assumption that all bodies of types that
1485            can be upgraded came from arenas. Only the more complex non-
1486            upgradable types are allowed to be directly malloc()ed.  */
1487         assert(old_type_details->arena);
1488         del_body((void*)((char*)old_body + old_type_details->offset),
1489                  &PL_body_roots[old_type]);
1490 #endif
1491     }
1492 }
1493
1494 /*
1495 =for apidoc sv_backoff
1496
1497 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1498 wrapper instead.
1499
1500 =cut
1501 */
1502
1503 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1504    prior to 5.23.4 this function always returned 0
1505 */
1506
1507 void
1508 Perl_sv_backoff(SV *const sv)
1509 {
1510     STRLEN delta;
1511     const char * const s = SvPVX_const(sv);
1512
1513     PERL_ARGS_ASSERT_SV_BACKOFF;
1514
1515     assert(SvOOK(sv));
1516     assert(SvTYPE(sv) != SVt_PVHV);
1517     assert(SvTYPE(sv) != SVt_PVAV);
1518
1519     SvOOK_offset(sv, delta);
1520     
1521     SvLEN_set(sv, SvLEN(sv) + delta);
1522     SvPV_set(sv, SvPVX(sv) - delta);
1523     SvFLAGS(sv) &= ~SVf_OOK;
1524     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1525     return;
1526 }
1527
1528 /*
1529 =for apidoc sv_grow
1530
1531 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1532 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1533 Use the C<SvGROW> wrapper instead.
1534
1535 =cut
1536 */
1537
1538 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1539
1540 char *
1541 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1542 {
1543     char *s;
1544
1545     PERL_ARGS_ASSERT_SV_GROW;
1546
1547     if (SvROK(sv))
1548         sv_unref(sv);
1549     if (SvTYPE(sv) < SVt_PV) {
1550         sv_upgrade(sv, SVt_PV);
1551         s = SvPVX_mutable(sv);
1552     }
1553     else if (SvOOK(sv)) {       /* pv is offset? */
1554         sv_backoff(sv);
1555         s = SvPVX_mutable(sv);
1556         if (newlen > SvLEN(sv))
1557             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1558     }
1559     else
1560     {
1561         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1562         s = SvPVX_mutable(sv);
1563     }
1564
1565 #ifdef PERL_COPY_ON_WRITE
1566     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1567      * to store the COW count. So in general, allocate one more byte than
1568      * asked for, to make it likely this byte is always spare: and thus
1569      * make more strings COW-able.
1570      * If the new size is a big power of two, don't bother: we assume the
1571      * caller wanted a nice 2^N sized block and will be annoyed at getting
1572      * 2^N+1.
1573      * Only increment if the allocation isn't MEM_SIZE_MAX,
1574      * otherwise it will wrap to 0.
1575      */
1576     if (   (newlen < 0x1000 || (newlen & (newlen - 1)))
1577         && newlen != MEM_SIZE_MAX
1578     )
1579         newlen++;
1580 #endif
1581
1582 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1583 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1584 #endif
1585
1586     if (newlen > SvLEN(sv)) {           /* need more room? */
1587         STRLEN minlen = SvCUR(sv);
1588         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1589         if (newlen < minlen)
1590             newlen = minlen;
1591 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1592
1593         /* Don't round up on the first allocation, as odds are pretty good that
1594          * the initial request is accurate as to what is really needed */
1595         if (SvLEN(sv)) {
1596             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1597             if (rounded > newlen)
1598                 newlen = rounded;
1599         }
1600 #endif
1601         if (SvLEN(sv) && s) {
1602             s = (char*)saferealloc(s, newlen);
1603         }
1604         else {
1605             s = (char*)safemalloc(newlen);
1606             if (SvPVX_const(sv) && SvCUR(sv)) {
1607                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1608             }
1609         }
1610         SvPV_set(sv, s);
1611 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1612         /* Do this here, do it once, do it right, and then we will never get
1613            called back into sv_grow() unless there really is some growing
1614            needed.  */
1615         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1616 #else
1617         SvLEN_set(sv, newlen);
1618 #endif
1619     }
1620     return s;
1621 }
1622
1623 /*
1624 =for apidoc sv_setiv
1625
1626 Copies an integer into the given SV, upgrading first if necessary.
1627 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1628
1629 =cut
1630 */
1631
1632 void
1633 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1634 {
1635     PERL_ARGS_ASSERT_SV_SETIV;
1636
1637     SV_CHECK_THINKFIRST_COW_DROP(sv);
1638     switch (SvTYPE(sv)) {
1639     case SVt_NULL:
1640     case SVt_NV:
1641         sv_upgrade(sv, SVt_IV);
1642         break;
1643     case SVt_PV:
1644         sv_upgrade(sv, SVt_PVIV);
1645         break;
1646
1647     case SVt_PVGV:
1648         if (!isGV_with_GP(sv))
1649             break;
1650     case SVt_PVAV:
1651     case SVt_PVHV:
1652     case SVt_PVCV:
1653     case SVt_PVFM:
1654     case SVt_PVIO:
1655         /* diag_listed_as: Can't coerce %s to %s in %s */
1656         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1657                    OP_DESC(PL_op));
1658         break;
1659     default: NOOP;
1660     }
1661     (void)SvIOK_only(sv);                       /* validate number */
1662     SvIV_set(sv, i);
1663     SvTAINT(sv);
1664 }
1665
1666 /*
1667 =for apidoc sv_setiv_mg
1668
1669 Like C<sv_setiv>, but also handles 'set' magic.
1670
1671 =cut
1672 */
1673
1674 void
1675 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1676 {
1677     PERL_ARGS_ASSERT_SV_SETIV_MG;
1678
1679     sv_setiv(sv,i);
1680     SvSETMAGIC(sv);
1681 }
1682
1683 /*
1684 =for apidoc sv_setuv
1685
1686 Copies an unsigned integer into the given SV, upgrading first if necessary.
1687 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1688
1689 =cut
1690 */
1691
1692 void
1693 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1694 {
1695     PERL_ARGS_ASSERT_SV_SETUV;
1696
1697     /* With the if statement to ensure that integers are stored as IVs whenever
1698        possible:
1699        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1700
1701        without
1702        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1703
1704        If you wish to remove the following if statement, so that this routine
1705        (and its callers) always return UVs, please benchmark to see what the
1706        effect is. Modern CPUs may be different. Or may not :-)
1707     */
1708     if (u <= (UV)IV_MAX) {
1709        sv_setiv(sv, (IV)u);
1710        return;
1711     }
1712     sv_setiv(sv, 0);
1713     SvIsUV_on(sv);
1714     SvUV_set(sv, u);
1715 }
1716
1717 /*
1718 =for apidoc sv_setuv_mg
1719
1720 Like C<sv_setuv>, but also handles 'set' magic.
1721
1722 =cut
1723 */
1724
1725 void
1726 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1727 {
1728     PERL_ARGS_ASSERT_SV_SETUV_MG;
1729
1730     sv_setuv(sv,u);
1731     SvSETMAGIC(sv);
1732 }
1733
1734 /*
1735 =for apidoc sv_setnv
1736
1737 Copies a double into the given SV, upgrading first if necessary.
1738 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1739
1740 =cut
1741 */
1742
1743 void
1744 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1745 {
1746     PERL_ARGS_ASSERT_SV_SETNV;
1747
1748     SV_CHECK_THINKFIRST_COW_DROP(sv);
1749     switch (SvTYPE(sv)) {
1750     case SVt_NULL:
1751     case SVt_IV:
1752         sv_upgrade(sv, SVt_NV);
1753         break;
1754     case SVt_PV:
1755     case SVt_PVIV:
1756         sv_upgrade(sv, SVt_PVNV);
1757         break;
1758
1759     case SVt_PVGV:
1760         if (!isGV_with_GP(sv))
1761             break;
1762     case SVt_PVAV:
1763     case SVt_PVHV:
1764     case SVt_PVCV:
1765     case SVt_PVFM:
1766     case SVt_PVIO:
1767         /* diag_listed_as: Can't coerce %s to %s in %s */
1768         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1769                    OP_DESC(PL_op));
1770         break;
1771     default: NOOP;
1772     }
1773     SvNV_set(sv, num);
1774     (void)SvNOK_only(sv);                       /* validate number */
1775     SvTAINT(sv);
1776 }
1777
1778 /*
1779 =for apidoc sv_setnv_mg
1780
1781 Like C<sv_setnv>, but also handles 'set' magic.
1782
1783 =cut
1784 */
1785
1786 void
1787 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1788 {
1789     PERL_ARGS_ASSERT_SV_SETNV_MG;
1790
1791     sv_setnv(sv,num);
1792     SvSETMAGIC(sv);
1793 }
1794
1795 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1796  * not incrementable warning display.
1797  * Originally part of S_not_a_number().
1798  * The return value may be != tmpbuf.
1799  */
1800
1801 STATIC const char *
1802 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1803     const char *pv;
1804
1805      PERL_ARGS_ASSERT_SV_DISPLAY;
1806
1807      if (DO_UTF8(sv)) {
1808           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1809           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1810      } else {
1811           char *d = tmpbuf;
1812           const char * const limit = tmpbuf + tmpbuf_size - 8;
1813           /* each *s can expand to 4 chars + "...\0",
1814              i.e. need room for 8 chars */
1815         
1816           const char *s = SvPVX_const(sv);
1817           const char * const end = s + SvCUR(sv);
1818           for ( ; s < end && d < limit; s++ ) {
1819                int ch = *s & 0xFF;
1820                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1821                     *d++ = 'M';
1822                     *d++ = '-';
1823
1824                     /* Map to ASCII "equivalent" of Latin1 */
1825                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1826                }
1827                if (ch == '\n') {
1828                     *d++ = '\\';
1829                     *d++ = 'n';
1830                }
1831                else if (ch == '\r') {
1832                     *d++ = '\\';
1833                     *d++ = 'r';
1834                }
1835                else if (ch == '\f') {
1836                     *d++ = '\\';
1837                     *d++ = 'f';
1838                }
1839                else if (ch == '\\') {
1840                     *d++ = '\\';
1841                     *d++ = '\\';
1842                }
1843                else if (ch == '\0') {
1844                     *d++ = '\\';
1845                     *d++ = '0';
1846                }
1847                else if (isPRINT_LC(ch))
1848                     *d++ = ch;
1849                else {
1850                     *d++ = '^';
1851                     *d++ = toCTRL(ch);
1852                }
1853           }
1854           if (s < end) {
1855                *d++ = '.';
1856                *d++ = '.';
1857                *d++ = '.';
1858           }
1859           *d = '\0';
1860           pv = tmpbuf;
1861     }
1862
1863     return pv;
1864 }
1865
1866 /* Print an "isn't numeric" warning, using a cleaned-up,
1867  * printable version of the offending string
1868  */
1869
1870 STATIC void
1871 S_not_a_number(pTHX_ SV *const sv)
1872 {
1873      char tmpbuf[64];
1874      const char *pv;
1875
1876      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1877
1878      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1879
1880     if (PL_op)
1881         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1882                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1883                     "Argument \"%s\" isn't numeric in %s", pv,
1884                     OP_DESC(PL_op));
1885     else
1886         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1887                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1888                     "Argument \"%s\" isn't numeric", pv);
1889 }
1890
1891 STATIC void
1892 S_not_incrementable(pTHX_ SV *const sv) {
1893      char tmpbuf[64];
1894      const char *pv;
1895
1896      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1897
1898      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1899
1900      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1901                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1902 }
1903
1904 /*
1905 =for apidoc looks_like_number
1906
1907 Test if the content of an SV looks like a number (or is a number).
1908 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1909 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1910 ignored.
1911
1912 =cut
1913 */
1914
1915 I32
1916 Perl_looks_like_number(pTHX_ SV *const sv)
1917 {
1918     const char *sbegin;
1919     STRLEN len;
1920     int numtype;
1921
1922     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1923
1924     if (SvPOK(sv) || SvPOKp(sv)) {
1925         sbegin = SvPV_nomg_const(sv, len);
1926     }
1927     else
1928         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1929     numtype = grok_number(sbegin, len, NULL);
1930     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1931 }
1932
1933 STATIC bool
1934 S_glob_2number(pTHX_ GV * const gv)
1935 {
1936     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1937
1938     /* We know that all GVs stringify to something that is not-a-number,
1939         so no need to test that.  */
1940     if (ckWARN(WARN_NUMERIC))
1941     {
1942         SV *const buffer = sv_newmortal();
1943         gv_efullname3(buffer, gv, "*");
1944         not_a_number(buffer);
1945     }
1946     /* We just want something true to return, so that S_sv_2iuv_common
1947         can tail call us and return true.  */
1948     return TRUE;
1949 }
1950
1951 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1952    until proven guilty, assume that things are not that bad... */
1953
1954 /*
1955    NV_PRESERVES_UV:
1956
1957    As 64 bit platforms often have an NV that doesn't preserve all bits of
1958    an IV (an assumption perl has been based on to date) it becomes necessary
1959    to remove the assumption that the NV always carries enough precision to
1960    recreate the IV whenever needed, and that the NV is the canonical form.
1961    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1962    precision as a side effect of conversion (which would lead to insanity
1963    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1964    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1965       where precision was lost, and IV/UV/NV slots that have a valid conversion
1966       which has lost no precision
1967    2) to ensure that if a numeric conversion to one form is requested that
1968       would lose precision, the precise conversion (or differently
1969       imprecise conversion) is also performed and cached, to prevent
1970       requests for different numeric formats on the same SV causing
1971       lossy conversion chains. (lossless conversion chains are perfectly
1972       acceptable (still))
1973
1974
1975    flags are used:
1976    SvIOKp is true if the IV slot contains a valid value
1977    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1978    SvNOKp is true if the NV slot contains a valid value
1979    SvNOK  is true only if the NV value is accurate
1980
1981    so
1982    while converting from PV to NV, check to see if converting that NV to an
1983    IV(or UV) would lose accuracy over a direct conversion from PV to
1984    IV(or UV). If it would, cache both conversions, return NV, but mark
1985    SV as IOK NOKp (ie not NOK).
1986
1987    While converting from PV to IV, check to see if converting that IV to an
1988    NV would lose accuracy over a direct conversion from PV to NV. If it
1989    would, cache both conversions, flag similarly.
1990
1991    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1992    correctly because if IV & NV were set NV *always* overruled.
1993    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1994    changes - now IV and NV together means that the two are interchangeable:
1995    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1996
1997    The benefit of this is that operations such as pp_add know that if
1998    SvIOK is true for both left and right operands, then integer addition
1999    can be used instead of floating point (for cases where the result won't
2000    overflow). Before, floating point was always used, which could lead to
2001    loss of precision compared with integer addition.
2002
2003    * making IV and NV equal status should make maths accurate on 64 bit
2004      platforms
2005    * may speed up maths somewhat if pp_add and friends start to use
2006      integers when possible instead of fp. (Hopefully the overhead in
2007      looking for SvIOK and checking for overflow will not outweigh the
2008      fp to integer speedup)
2009    * will slow down integer operations (callers of SvIV) on "inaccurate"
2010      values, as the change from SvIOK to SvIOKp will cause a call into
2011      sv_2iv each time rather than a macro access direct to the IV slot
2012    * should speed up number->string conversion on integers as IV is
2013      favoured when IV and NV are equally accurate
2014
2015    ####################################################################
2016    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2017    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2018    On the other hand, SvUOK is true iff UV.
2019    ####################################################################
2020
2021    Your mileage will vary depending your CPU's relative fp to integer
2022    performance ratio.
2023 */
2024
2025 #ifndef NV_PRESERVES_UV
2026 #  define IS_NUMBER_UNDERFLOW_IV 1
2027 #  define IS_NUMBER_UNDERFLOW_UV 2
2028 #  define IS_NUMBER_IV_AND_UV    2
2029 #  define IS_NUMBER_OVERFLOW_IV  4
2030 #  define IS_NUMBER_OVERFLOW_UV  5
2031
2032 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2033
2034 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2035 STATIC int
2036 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2037 #  ifdef DEBUGGING
2038                        , I32 numtype
2039 #  endif
2040                        )
2041 {
2042     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2043     PERL_UNUSED_CONTEXT;
2044
2045     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2046     if (SvNVX(sv) < (NV)IV_MIN) {
2047         (void)SvIOKp_on(sv);
2048         (void)SvNOK_on(sv);
2049         SvIV_set(sv, IV_MIN);
2050         return IS_NUMBER_UNDERFLOW_IV;
2051     }
2052     if (SvNVX(sv) > (NV)UV_MAX) {
2053         (void)SvIOKp_on(sv);
2054         (void)SvNOK_on(sv);
2055         SvIsUV_on(sv);
2056         SvUV_set(sv, UV_MAX);
2057         return IS_NUMBER_OVERFLOW_UV;
2058     }
2059     (void)SvIOKp_on(sv);
2060     (void)SvNOK_on(sv);
2061     /* Can't use strtol etc to convert this string.  (See truth table in
2062        sv_2iv  */
2063     if (SvNVX(sv) <= (UV)IV_MAX) {
2064         SvIV_set(sv, I_V(SvNVX(sv)));
2065         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2066             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2067         } else {
2068             /* Integer is imprecise. NOK, IOKp */
2069         }
2070         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2071     }
2072     SvIsUV_on(sv);
2073     SvUV_set(sv, U_V(SvNVX(sv)));
2074     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2075         if (SvUVX(sv) == UV_MAX) {
2076             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2077                possibly be preserved by NV. Hence, it must be overflow.
2078                NOK, IOKp */
2079             return IS_NUMBER_OVERFLOW_UV;
2080         }
2081         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2082     } else {
2083         /* Integer is imprecise. NOK, IOKp */
2084     }
2085     return IS_NUMBER_OVERFLOW_IV;
2086 }
2087 #endif /* !NV_PRESERVES_UV*/
2088
2089 /* If numtype is infnan, set the NV of the sv accordingly.
2090  * If numtype is anything else, try setting the NV using Atof(PV). */
2091 #ifdef USING_MSVC6
2092 #  pragma warning(push)
2093 #  pragma warning(disable:4756;disable:4056)
2094 #endif
2095 static void
2096 S_sv_setnv(pTHX_ SV* sv, int numtype)
2097 {
2098     bool pok = cBOOL(SvPOK(sv));
2099     bool nok = FALSE;
2100     if ((numtype & IS_NUMBER_INFINITY)) {
2101         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2102         nok = TRUE;
2103     }
2104     else if ((numtype & IS_NUMBER_NAN)) {
2105         SvNV_set(sv, NV_NAN);
2106         nok = TRUE;
2107     }
2108     else if (pok) {
2109         SvNV_set(sv, Atof(SvPVX_const(sv)));
2110         /* Purposefully no true nok here, since we don't want to blow
2111          * away the possible IOK/UV of an existing sv. */
2112     }
2113     if (nok) {
2114         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2115         if (pok)
2116             SvPOK_on(sv); /* PV is okay, though. */
2117     }
2118 }
2119 #ifdef USING_MSVC6
2120 #  pragma warning(pop)
2121 #endif
2122
2123 STATIC bool
2124 S_sv_2iuv_common(pTHX_ SV *const sv)
2125 {
2126     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2127
2128     if (SvNOKp(sv)) {
2129         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2130          * without also getting a cached IV/UV from it at the same time
2131          * (ie PV->NV conversion should detect loss of accuracy and cache
2132          * IV or UV at same time to avoid this. */
2133         /* IV-over-UV optimisation - choose to cache IV if possible */
2134
2135         if (SvTYPE(sv) == SVt_NV)
2136             sv_upgrade(sv, SVt_PVNV);
2137
2138         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2139         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2140            certainly cast into the IV range at IV_MAX, whereas the correct
2141            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2142            cases go to UV */
2143 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2144         if (Perl_isnan(SvNVX(sv))) {
2145             SvUV_set(sv, 0);
2146             SvIsUV_on(sv);
2147             return FALSE;
2148         }
2149 #endif
2150         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151             SvIV_set(sv, I_V(SvNVX(sv)));
2152             if (SvNVX(sv) == (NV) SvIVX(sv)
2153 #ifndef NV_PRESERVES_UV
2154                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2155                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2156                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2157                 /* Don't flag it as "accurately an integer" if the number
2158                    came from a (by definition imprecise) NV operation, and
2159                    we're outside the range of NV integer precision */
2160 #endif
2161                 ) {
2162                 if (SvNOK(sv))
2163                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2164                 else {
2165                     /* scalar has trailing garbage, eg "42a" */
2166                 }
2167                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2168                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2169                                       PTR2UV(sv),
2170                                       SvNVX(sv),
2171                                       SvIVX(sv)));
2172
2173             } else {
2174                 /* IV not precise.  No need to convert from PV, as NV
2175                    conversion would already have cached IV if it detected
2176                    that PV->IV would be better than PV->NV->IV
2177                    flags already correct - don't set public IOK.  */
2178                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2179                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2180                                       PTR2UV(sv),
2181                                       SvNVX(sv),
2182                                       SvIVX(sv)));
2183             }
2184             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2185                but the cast (NV)IV_MIN rounds to a the value less (more
2186                negative) than IV_MIN which happens to be equal to SvNVX ??
2187                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2188                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2189                (NV)UVX == NVX are both true, but the values differ. :-(
2190                Hopefully for 2s complement IV_MIN is something like
2191                0x8000000000000000 which will be exact. NWC */
2192         }
2193         else {
2194             SvUV_set(sv, U_V(SvNVX(sv)));
2195             if (
2196                 (SvNVX(sv) == (NV) SvUVX(sv))
2197 #ifndef  NV_PRESERVES_UV
2198                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2199                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2200                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2201                 /* Don't flag it as "accurately an integer" if the number
2202                    came from a (by definition imprecise) NV operation, and
2203                    we're outside the range of NV integer precision */
2204 #endif
2205                 && SvNOK(sv)
2206                 )
2207                 SvIOK_on(sv);
2208             SvIsUV_on(sv);
2209             DEBUG_c(PerlIO_printf(Perl_debug_log,
2210                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2211                                   PTR2UV(sv),
2212                                   SvUVX(sv),
2213                                   SvUVX(sv)));
2214         }
2215     }
2216     else if (SvPOKp(sv)) {
2217         UV value;
2218         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2219         /* We want to avoid a possible problem when we cache an IV/ a UV which
2220            may be later translated to an NV, and the resulting NV is not
2221            the same as the direct translation of the initial string
2222            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2223            be careful to ensure that the value with the .456 is around if the
2224            NV value is requested in the future).
2225         
2226            This means that if we cache such an IV/a UV, we need to cache the
2227            NV as well.  Moreover, we trade speed for space, and do not
2228            cache the NV if we are sure it's not needed.
2229          */
2230
2231         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2232         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2233              == IS_NUMBER_IN_UV) {
2234             /* It's definitely an integer, only upgrade to PVIV */
2235             if (SvTYPE(sv) < SVt_PVIV)
2236                 sv_upgrade(sv, SVt_PVIV);
2237             (void)SvIOK_on(sv);
2238         } else if (SvTYPE(sv) < SVt_PVNV)
2239             sv_upgrade(sv, SVt_PVNV);
2240
2241         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2242             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2243                 not_a_number(sv);
2244             S_sv_setnv(aTHX_ sv, numtype);
2245             return FALSE;
2246         }
2247
2248         /* If NVs preserve UVs then we only use the UV value if we know that
2249            we aren't going to call atof() below. If NVs don't preserve UVs
2250            then the value returned may have more precision than atof() will
2251            return, even though value isn't perfectly accurate.  */
2252         if ((numtype & (IS_NUMBER_IN_UV
2253 #ifdef NV_PRESERVES_UV
2254                         | IS_NUMBER_NOT_INT
2255 #endif
2256             )) == IS_NUMBER_IN_UV) {
2257             /* This won't turn off the public IOK flag if it was set above  */
2258             (void)SvIOKp_on(sv);
2259
2260             if (!(numtype & IS_NUMBER_NEG)) {
2261                 /* positive */;
2262                 if (value <= (UV)IV_MAX) {
2263                     SvIV_set(sv, (IV)value);
2264                 } else {
2265                     /* it didn't overflow, and it was positive. */
2266                     SvUV_set(sv, value);
2267                     SvIsUV_on(sv);
2268                 }
2269             } else {
2270                 /* 2s complement assumption  */
2271                 if (value <= (UV)IV_MIN) {
2272                     SvIV_set(sv, value == (UV)IV_MIN
2273                                     ? IV_MIN : -(IV)value);
2274                 } else {
2275                     /* Too negative for an IV.  This is a double upgrade, but
2276                        I'm assuming it will be rare.  */
2277                     if (SvTYPE(sv) < SVt_PVNV)
2278                         sv_upgrade(sv, SVt_PVNV);
2279                     SvNOK_on(sv);
2280                     SvIOK_off(sv);
2281                     SvIOKp_on(sv);
2282                     SvNV_set(sv, -(NV)value);
2283                     SvIV_set(sv, IV_MIN);
2284                 }
2285             }
2286         }
2287         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2288            will be in the previous block to set the IV slot, and the next
2289            block to set the NV slot.  So no else here.  */
2290         
2291         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2292             != IS_NUMBER_IN_UV) {
2293             /* It wasn't an (integer that doesn't overflow the UV). */
2294             S_sv_setnv(aTHX_ sv, numtype);
2295
2296             if (! numtype && ckWARN(WARN_NUMERIC))
2297                 not_a_number(sv);
2298
2299             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2300                                   PTR2UV(sv), SvNVX(sv)));
2301
2302 #ifdef NV_PRESERVES_UV
2303             (void)SvIOKp_on(sv);
2304             (void)SvNOK_on(sv);
2305 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2306             if (Perl_isnan(SvNVX(sv))) {
2307                 SvUV_set(sv, 0);
2308                 SvIsUV_on(sv);
2309                 return FALSE;
2310             }
2311 #endif
2312             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2313                 SvIV_set(sv, I_V(SvNVX(sv)));
2314                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2315                     SvIOK_on(sv);
2316                 } else {
2317                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2318                 }
2319                 /* UV will not work better than IV */
2320             } else {
2321                 if (SvNVX(sv) > (NV)UV_MAX) {
2322                     SvIsUV_on(sv);
2323                     /* Integer is inaccurate. NOK, IOKp, is UV */
2324                     SvUV_set(sv, UV_MAX);
2325                 } else {
2326                     SvUV_set(sv, U_V(SvNVX(sv)));
2327                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2328                        NV preservse UV so can do correct comparison.  */
2329                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2330                         SvIOK_on(sv);
2331                     } else {
2332                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2333                     }
2334                 }
2335                 SvIsUV_on(sv);
2336             }
2337 #else /* NV_PRESERVES_UV */
2338             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2339                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2340                 /* The IV/UV slot will have been set from value returned by
2341                    grok_number above.  The NV slot has just been set using
2342                    Atof.  */
2343                 SvNOK_on(sv);
2344                 assert (SvIOKp(sv));
2345             } else {
2346                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2347                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2348                     /* Small enough to preserve all bits. */
2349                     (void)SvIOKp_on(sv);
2350                     SvNOK_on(sv);
2351                     SvIV_set(sv, I_V(SvNVX(sv)));
2352                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2353                         SvIOK_on(sv);
2354                     /* Assumption: first non-preserved integer is < IV_MAX,
2355                        this NV is in the preserved range, therefore: */
2356                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2357                           < (UV)IV_MAX)) {
2358                         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);
2359                     }
2360                 } else {
2361                     /* IN_UV NOT_INT
2362                          0      0       already failed to read UV.
2363                          0      1       already failed to read UV.
2364                          1      0       you won't get here in this case. IV/UV
2365                                         slot set, public IOK, Atof() unneeded.
2366                          1      1       already read UV.
2367                        so there's no point in sv_2iuv_non_preserve() attempting
2368                        to use atol, strtol, strtoul etc.  */
2369 #  ifdef DEBUGGING
2370                     sv_2iuv_non_preserve (sv, numtype);
2371 #  else
2372                     sv_2iuv_non_preserve (sv);
2373 #  endif
2374                 }
2375             }
2376 #endif /* NV_PRESERVES_UV */
2377         /* It might be more code efficient to go through the entire logic above
2378            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2379            gets complex and potentially buggy, so more programmer efficient
2380            to do it this way, by turning off the public flags:  */
2381         if (!numtype)
2382             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2383         }
2384     }
2385     else  {
2386         if (isGV_with_GP(sv))
2387             return glob_2number(MUTABLE_GV(sv));
2388
2389         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2390                 report_uninit(sv);
2391         if (SvTYPE(sv) < SVt_IV)
2392             /* Typically the caller expects that sv_any is not NULL now.  */
2393             sv_upgrade(sv, SVt_IV);
2394         /* Return 0 from the caller.  */
2395         return TRUE;
2396     }
2397     return FALSE;
2398 }
2399
2400 /*
2401 =for apidoc sv_2iv_flags
2402
2403 Return the integer value of an SV, doing any necessary string
2404 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2405 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2406
2407 =cut
2408 */
2409
2410 IV
2411 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2412 {
2413     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2414
2415     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2416          && SvTYPE(sv) != SVt_PVFM);
2417
2418     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2419         mg_get(sv);
2420
2421     if (SvROK(sv)) {
2422         if (SvAMAGIC(sv)) {
2423             SV * tmpstr;
2424             if (flags & SV_SKIP_OVERLOAD)
2425                 return 0;
2426             tmpstr = AMG_CALLunary(sv, numer_amg);
2427             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2428                 return SvIV(tmpstr);
2429             }
2430         }
2431         return PTR2IV(SvRV(sv));
2432     }
2433
2434     if (SvVALID(sv) || isREGEXP(sv)) {
2435         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2436            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2437            In practice they are extremely unlikely to actually get anywhere
2438            accessible by user Perl code - the only way that I'm aware of is when
2439            a constant subroutine which is used as the second argument to index.
2440
2441            Regexps have no SvIVX and SvNVX fields.
2442         */
2443         assert(isREGEXP(sv) || SvPOKp(sv));
2444         {
2445             UV value;
2446             const char * const ptr =
2447                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2448             const int numtype
2449                 = grok_number(ptr, SvCUR(sv), &value);
2450
2451             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2452                 == IS_NUMBER_IN_UV) {
2453                 /* It's definitely an integer */
2454                 if (numtype & IS_NUMBER_NEG) {
2455                     if (value < (UV)IV_MIN)
2456                         return -(IV)value;
2457                 } else {
2458                     if (value < (UV)IV_MAX)
2459                         return (IV)value;
2460                 }
2461             }
2462
2463             /* Quite wrong but no good choices. */
2464             if ((numtype & IS_NUMBER_INFINITY)) {
2465                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2466             } else if ((numtype & IS_NUMBER_NAN)) {
2467                 return 0; /* So wrong. */
2468             }
2469
2470             if (!numtype) {
2471                 if (ckWARN(WARN_NUMERIC))
2472                     not_a_number(sv);
2473             }
2474             return I_V(Atof(ptr));
2475         }
2476     }
2477
2478     if (SvTHINKFIRST(sv)) {
2479         if (SvREADONLY(sv) && !SvOK(sv)) {
2480             if (ckWARN(WARN_UNINITIALIZED))
2481                 report_uninit(sv);
2482             return 0;
2483         }
2484     }
2485
2486     if (!SvIOKp(sv)) {
2487         if (S_sv_2iuv_common(aTHX_ sv))
2488             return 0;
2489     }
2490
2491     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2492         PTR2UV(sv),SvIVX(sv)));
2493     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2494 }
2495
2496 /*
2497 =for apidoc sv_2uv_flags
2498
2499 Return the unsigned integer value of an SV, doing any necessary string
2500 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2501 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2502
2503 =cut
2504 */
2505
2506 UV
2507 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2508 {
2509     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2510
2511     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2512         mg_get(sv);
2513
2514     if (SvROK(sv)) {
2515         if (SvAMAGIC(sv)) {
2516             SV *tmpstr;
2517             if (flags & SV_SKIP_OVERLOAD)
2518                 return 0;
2519             tmpstr = AMG_CALLunary(sv, numer_amg);
2520             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2521                 return SvUV(tmpstr);
2522             }
2523         }
2524         return PTR2UV(SvRV(sv));
2525     }
2526
2527     if (SvVALID(sv) || isREGEXP(sv)) {
2528         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2529            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2530            Regexps have no SvIVX and SvNVX fields. */
2531         assert(isREGEXP(sv) || SvPOKp(sv));
2532         {
2533             UV value;
2534             const char * const ptr =
2535                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2536             const int numtype
2537                 = grok_number(ptr, SvCUR(sv), &value);
2538
2539             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2540                 == IS_NUMBER_IN_UV) {
2541                 /* It's definitely an integer */
2542                 if (!(numtype & IS_NUMBER_NEG))
2543                     return value;
2544             }
2545
2546             /* Quite wrong but no good choices. */
2547             if ((numtype & IS_NUMBER_INFINITY)) {
2548                 return UV_MAX; /* So wrong. */
2549             } else if ((numtype & IS_NUMBER_NAN)) {
2550                 return 0; /* So wrong. */
2551             }
2552
2553             if (!numtype) {
2554                 if (ckWARN(WARN_NUMERIC))
2555                     not_a_number(sv);
2556             }
2557             return U_V(Atof(ptr));
2558         }
2559     }
2560
2561     if (SvTHINKFIRST(sv)) {
2562         if (SvREADONLY(sv) && !SvOK(sv)) {
2563             if (ckWARN(WARN_UNINITIALIZED))
2564                 report_uninit(sv);
2565             return 0;
2566         }
2567     }
2568
2569     if (!SvIOKp(sv)) {
2570         if (S_sv_2iuv_common(aTHX_ sv))
2571             return 0;
2572     }
2573
2574     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2575                           PTR2UV(sv),SvUVX(sv)));
2576     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2577 }
2578
2579 /*
2580 =for apidoc sv_2nv_flags
2581
2582 Return the num value of an SV, doing any necessary string or integer
2583 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2584 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2585
2586 =cut
2587 */
2588
2589 NV
2590 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2591 {
2592     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2593
2594     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2595          && SvTYPE(sv) != SVt_PVFM);
2596     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2597         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2598            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2599            Regexps have no SvIVX and SvNVX fields.  */
2600         const char *ptr;
2601         if (flags & SV_GMAGIC)
2602             mg_get(sv);
2603         if (SvNOKp(sv))
2604             return SvNVX(sv);
2605         if (SvPOKp(sv) && !SvIOKp(sv)) {
2606             ptr = SvPVX_const(sv);
2607           grokpv:
2608             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2609                 !grok_number(ptr, SvCUR(sv), NULL))
2610                 not_a_number(sv);
2611             return Atof(ptr);
2612         }
2613         if (SvIOKp(sv)) {
2614             if (SvIsUV(sv))
2615                 return (NV)SvUVX(sv);
2616             else
2617                 return (NV)SvIVX(sv);
2618         }
2619         if (SvROK(sv)) {
2620             goto return_rok;
2621         }
2622         if (isREGEXP(sv)) {
2623             ptr = RX_WRAPPED((REGEXP *)sv);
2624             goto grokpv;
2625         }
2626         assert(SvTYPE(sv) >= SVt_PVMG);
2627         /* This falls through to the report_uninit near the end of the
2628            function. */
2629     } else if (SvTHINKFIRST(sv)) {
2630         if (SvROK(sv)) {
2631         return_rok:
2632             if (SvAMAGIC(sv)) {
2633                 SV *tmpstr;
2634                 if (flags & SV_SKIP_OVERLOAD)
2635                     return 0;
2636                 tmpstr = AMG_CALLunary(sv, numer_amg);
2637                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2638                     return SvNV(tmpstr);
2639                 }
2640             }
2641             return PTR2NV(SvRV(sv));
2642         }
2643         if (SvREADONLY(sv) && !SvOK(sv)) {
2644             if (ckWARN(WARN_UNINITIALIZED))
2645                 report_uninit(sv);
2646             return 0.0;
2647         }
2648     }
2649     if (SvTYPE(sv) < SVt_NV) {
2650         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2651         sv_upgrade(sv, SVt_NV);
2652         DEBUG_c({
2653             STORE_NUMERIC_LOCAL_SET_STANDARD();
2654             PerlIO_printf(Perl_debug_log,
2655                           "0x%"UVxf" num(%" NVgf ")\n",
2656                           PTR2UV(sv), SvNVX(sv));
2657             RESTORE_NUMERIC_LOCAL();
2658         });
2659     }
2660     else if (SvTYPE(sv) < SVt_PVNV)
2661         sv_upgrade(sv, SVt_PVNV);
2662     if (SvNOKp(sv)) {
2663         return SvNVX(sv);
2664     }
2665     if (SvIOKp(sv)) {
2666         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2667 #ifdef NV_PRESERVES_UV
2668         if (SvIOK(sv))
2669             SvNOK_on(sv);
2670         else
2671             SvNOKp_on(sv);
2672 #else
2673         /* Only set the public NV OK flag if this NV preserves the IV  */
2674         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2675         if (SvIOK(sv) &&
2676             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2677                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2678             SvNOK_on(sv);
2679         else
2680             SvNOKp_on(sv);
2681 #endif
2682     }
2683     else if (SvPOKp(sv)) {
2684         UV value;
2685         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2686         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2687             not_a_number(sv);
2688 #ifdef NV_PRESERVES_UV
2689         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2690             == IS_NUMBER_IN_UV) {
2691             /* It's definitely an integer */
2692             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2693         } else {
2694             S_sv_setnv(aTHX_ sv, numtype);
2695         }
2696         if (numtype)
2697             SvNOK_on(sv);
2698         else
2699             SvNOKp_on(sv);
2700 #else
2701         SvNV_set(sv, Atof(SvPVX_const(sv)));
2702         /* Only set the public NV OK flag if this NV preserves the value in
2703            the PV at least as well as an IV/UV would.
2704            Not sure how to do this 100% reliably. */
2705         /* if that shift count is out of range then Configure's test is
2706            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2707            UV_BITS */
2708         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2709             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2710             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2711         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2712             /* Can't use strtol etc to convert this string, so don't try.
2713                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2714             SvNOK_on(sv);
2715         } else {
2716             /* value has been set.  It may not be precise.  */
2717             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2718                 /* 2s complement assumption for (UV)IV_MIN  */
2719                 SvNOK_on(sv); /* Integer is too negative.  */
2720             } else {
2721                 SvNOKp_on(sv);
2722                 SvIOKp_on(sv);
2723
2724                 if (numtype & IS_NUMBER_NEG) {
2725                     /* -IV_MIN is undefined, but we should never reach
2726                      * this point with both IS_NUMBER_NEG and value ==
2727                      * (UV)IV_MIN */
2728                     assert(value != (UV)IV_MIN);
2729                     SvIV_set(sv, -(IV)value);
2730                 } else if (value <= (UV)IV_MAX) {
2731                     SvIV_set(sv, (IV)value);
2732                 } else {
2733                     SvUV_set(sv, value);
2734                     SvIsUV_on(sv);
2735                 }
2736
2737                 if (numtype & IS_NUMBER_NOT_INT) {
2738                     /* I believe that even if the original PV had decimals,
2739                        they are lost beyond the limit of the FP precision.
2740                        However, neither is canonical, so both only get p
2741                        flags.  NWC, 2000/11/25 */
2742                     /* Both already have p flags, so do nothing */
2743                 } else {
2744                     const NV nv = SvNVX(sv);
2745                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2746                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2747                         if (SvIVX(sv) == I_V(nv)) {
2748                             SvNOK_on(sv);
2749                         } else {
2750                             /* It had no "." so it must be integer.  */
2751                         }
2752                         SvIOK_on(sv);
2753                     } else {
2754                         /* between IV_MAX and NV(UV_MAX).
2755                            Could be slightly > UV_MAX */
2756
2757                         if (numtype & IS_NUMBER_NOT_INT) {
2758                             /* UV and NV both imprecise.  */
2759                         } else {
2760                             const UV nv_as_uv = U_V(nv);
2761
2762                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2763                                 SvNOK_on(sv);
2764                             }
2765                             SvIOK_on(sv);
2766                         }
2767                     }
2768                 }
2769             }
2770         }
2771         /* It might be more code efficient to go through the entire logic above
2772            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2773            gets complex and potentially buggy, so more programmer efficient
2774            to do it this way, by turning off the public flags:  */
2775         if (!numtype)
2776             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2777 #endif /* NV_PRESERVES_UV */
2778     }
2779     else  {
2780         if (isGV_with_GP(sv)) {
2781             glob_2number(MUTABLE_GV(sv));
2782             return 0.0;
2783         }
2784
2785         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2786             report_uninit(sv);
2787         assert (SvTYPE(sv) >= SVt_NV);
2788         /* Typically the caller expects that sv_any is not NULL now.  */
2789         /* XXX Ilya implies that this is a bug in callers that assume this
2790            and ideally should be fixed.  */
2791         return 0.0;
2792     }
2793     DEBUG_c({
2794         STORE_NUMERIC_LOCAL_SET_STANDARD();
2795         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2796                       PTR2UV(sv), SvNVX(sv));
2797         RESTORE_NUMERIC_LOCAL();
2798     });
2799     return SvNVX(sv);
2800 }
2801
2802 /*
2803 =for apidoc sv_2num
2804
2805 Return an SV with the numeric value of the source SV, doing any necessary
2806 reference or overload conversion.  The caller is expected to have handled
2807 get-magic already.
2808
2809 =cut
2810 */
2811
2812 SV *
2813 Perl_sv_2num(pTHX_ SV *const sv)
2814 {
2815     PERL_ARGS_ASSERT_SV_2NUM;
2816
2817     if (!SvROK(sv))
2818         return sv;
2819     if (SvAMAGIC(sv)) {
2820         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2821         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2822         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2823             return sv_2num(tmpsv);
2824     }
2825     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2826 }
2827
2828 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2829  * UV as a string towards the end of buf, and return pointers to start and
2830  * end of it.
2831  *
2832  * We assume that buf is at least TYPE_CHARS(UV) long.
2833  */
2834
2835 static char *
2836 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2837 {
2838     char *ptr = buf + TYPE_CHARS(UV);
2839     char * const ebuf = ptr;
2840     int sign;
2841
2842     PERL_ARGS_ASSERT_UIV_2BUF;
2843
2844     if (is_uv)
2845         sign = 0;
2846     else if (iv >= 0) {
2847         uv = iv;
2848         sign = 0;
2849     } else {
2850         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2851         sign = 1;
2852     }
2853     do {
2854         *--ptr = '0' + (char)(uv % 10);
2855     } while (uv /= 10);
2856     if (sign)
2857         *--ptr = '-';
2858     *peob = ebuf;
2859     return ptr;
2860 }
2861
2862 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2863  * infinity or a not-a-number, writes the appropriate strings to the
2864  * buffer, including a zero byte.  On success returns the written length,
2865  * excluding the zero byte, on failure (not an infinity, not a nan)
2866  * returns zero, assert-fails on maxlen being too short.
2867  *
2868  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2869  * shared string constants we point to, instead of generating a new
2870  * string for each instance. */
2871 STATIC size_t
2872 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2873     char* s = buffer;
2874     assert(maxlen >= 4);
2875     if (Perl_isinf(nv)) {
2876         if (nv < 0) {
2877             if (maxlen < 5) /* "-Inf\0"  */
2878                 return 0;
2879             *s++ = '-';
2880         } else if (plus) {
2881             *s++ = '+';
2882         }
2883         *s++ = 'I';
2884         *s++ = 'n';
2885         *s++ = 'f';
2886     }
2887     else if (Perl_isnan(nv)) {
2888         *s++ = 'N';
2889         *s++ = 'a';
2890         *s++ = 'N';
2891         /* XXX optionally output the payload mantissa bits as
2892          * "(unsigned)" (to match the nan("...") C99 function,
2893          * or maybe as "(0xhhh...)"  would make more sense...
2894          * provide a format string so that the user can decide?
2895          * NOTE: would affect the maxlen and assert() logic.*/
2896     }
2897     else {
2898       return 0;
2899     }
2900     assert((s == buffer + 3) || (s == buffer + 4));
2901     *s++ = 0;
2902     return s - buffer - 1; /* -1: excluding the zero byte */
2903 }
2904
2905 /*
2906 =for apidoc sv_2pv_flags
2907
2908 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2909 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2910 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2911 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2912
2913 =cut
2914 */
2915
2916 char *
2917 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2918 {
2919     char *s;
2920
2921     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2922
2923     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2924          && SvTYPE(sv) != SVt_PVFM);
2925     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2926         mg_get(sv);
2927     if (SvROK(sv)) {
2928         if (SvAMAGIC(sv)) {
2929             SV *tmpstr;
2930             if (flags & SV_SKIP_OVERLOAD)
2931                 return NULL;
2932             tmpstr = AMG_CALLunary(sv, string_amg);
2933             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2934             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2935                 /* Unwrap this:  */
2936                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2937                  */
2938
2939                 char *pv;
2940                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2941                     if (flags & SV_CONST_RETURN) {
2942                         pv = (char *) SvPVX_const(tmpstr);
2943                     } else {
2944                         pv = (flags & SV_MUTABLE_RETURN)
2945                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2946                     }
2947                     if (lp)
2948                         *lp = SvCUR(tmpstr);
2949                 } else {
2950                     pv = sv_2pv_flags(tmpstr, lp, flags);
2951                 }
2952                 if (SvUTF8(tmpstr))
2953                     SvUTF8_on(sv);
2954                 else
2955                     SvUTF8_off(sv);
2956                 return pv;
2957             }
2958         }
2959         {
2960             STRLEN len;
2961             char *retval;
2962             char *buffer;
2963             SV *const referent = SvRV(sv);
2964
2965             if (!referent) {
2966                 len = 7;
2967                 retval = buffer = savepvn("NULLREF", len);
2968             } else if (SvTYPE(referent) == SVt_REGEXP &&
2969                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2970                         amagic_is_enabled(string_amg))) {
2971                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2972
2973                 assert(re);
2974                         
2975                 /* If the regex is UTF-8 we want the containing scalar to
2976                    have an UTF-8 flag too */
2977                 if (RX_UTF8(re))
2978                     SvUTF8_on(sv);
2979                 else
2980                     SvUTF8_off(sv);     
2981
2982                 if (lp)
2983                     *lp = RX_WRAPLEN(re);
2984  
2985                 return RX_WRAPPED(re);
2986             } else {
2987                 const char *const typestr = sv_reftype(referent, 0);
2988                 const STRLEN typelen = strlen(typestr);
2989                 UV addr = PTR2UV(referent);
2990                 const char *stashname = NULL;
2991                 STRLEN stashnamelen = 0; /* hush, gcc */
2992                 const char *buffer_end;
2993
2994                 if (SvOBJECT(referent)) {
2995                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2996
2997                     if (name) {
2998                         stashname = HEK_KEY(name);
2999                         stashnamelen = HEK_LEN(name);
3000
3001                         if (HEK_UTF8(name)) {
3002                             SvUTF8_on(sv);
3003                         } else {
3004                             SvUTF8_off(sv);
3005                         }
3006                     } else {
3007                         stashname = "__ANON__";
3008                         stashnamelen = 8;
3009                     }
3010                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3011                         + 2 * sizeof(UV) + 2 /* )\0 */;
3012                 } else {
3013                     len = typelen + 3 /* (0x */
3014                         + 2 * sizeof(UV) + 2 /* )\0 */;
3015                 }
3016
3017                 Newx(buffer, len, char);
3018                 buffer_end = retval = buffer + len;
3019
3020                 /* Working backwards  */
3021                 *--retval = '\0';
3022                 *--retval = ')';
3023                 do {
3024                     *--retval = PL_hexdigit[addr & 15];
3025                 } while (addr >>= 4);
3026                 *--retval = 'x';
3027                 *--retval = '0';
3028                 *--retval = '(';
3029
3030                 retval -= typelen;
3031                 memcpy(retval, typestr, typelen);
3032
3033                 if (stashname) {
3034                     *--retval = '=';
3035                     retval -= stashnamelen;
3036                     memcpy(retval, stashname, stashnamelen);
3037                 }
3038                 /* retval may not necessarily have reached the start of the
3039                    buffer here.  */
3040                 assert (retval >= buffer);
3041
3042                 len = buffer_end - retval - 1; /* -1 for that \0  */
3043             }
3044             if (lp)
3045                 *lp = len;
3046             SAVEFREEPV(buffer);
3047             return retval;
3048         }
3049     }
3050
3051     if (SvPOKp(sv)) {
3052         if (lp)
3053             *lp = SvCUR(sv);
3054         if (flags & SV_MUTABLE_RETURN)
3055             return SvPVX_mutable(sv);
3056         if (flags & SV_CONST_RETURN)
3057             return (char *)SvPVX_const(sv);
3058         return SvPVX(sv);
3059     }
3060
3061     if (SvIOK(sv)) {
3062         /* I'm assuming that if both IV and NV are equally valid then
3063            converting the IV is going to be more efficient */
3064         const U32 isUIOK = SvIsUV(sv);
3065         char buf[TYPE_CHARS(UV)];
3066         char *ebuf, *ptr;
3067         STRLEN len;
3068
3069         if (SvTYPE(sv) < SVt_PVIV)
3070             sv_upgrade(sv, SVt_PVIV);
3071         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3072         len = ebuf - ptr;
3073         /* inlined from sv_setpvn */
3074         s = SvGROW_mutable(sv, len + 1);
3075         Move(ptr, s, len, char);
3076         s += len;
3077         *s = '\0';
3078         SvPOK_on(sv);
3079     }
3080     else if (SvNOK(sv)) {
3081         if (SvTYPE(sv) < SVt_PVNV)
3082             sv_upgrade(sv, SVt_PVNV);
3083         if (SvNVX(sv) == 0.0
3084 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3085             && !Perl_isnan(SvNVX(sv))
3086 #endif
3087         ) {
3088             s = SvGROW_mutable(sv, 2);
3089             *s++ = '0';
3090             *s = '\0';
3091         } else {
3092             STRLEN len;
3093             STRLEN size = 5; /* "-Inf\0" */
3094
3095             s = SvGROW_mutable(sv, size);
3096             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3097             if (len > 0) {
3098                 s += len;
3099                 SvPOK_on(sv);
3100             }
3101             else {
3102                 /* some Xenix systems wipe out errno here */
3103                 dSAVE_ERRNO;
3104
3105                 size =
3106                     1 + /* sign */
3107                     1 + /* "." */
3108                     NV_DIG +
3109                     1 + /* "e" */
3110                     1 + /* sign */
3111                     5 + /* exponent digits */
3112                     1 + /* \0 */
3113                     2; /* paranoia */
3114
3115                 s = SvGROW_mutable(sv, size);
3116 #ifndef USE_LOCALE_NUMERIC
3117                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3118
3119                 SvPOK_on(sv);
3120 #else
3121                 {
3122                     bool local_radix;
3123                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3124                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3125
3126                     local_radix = PL_numeric_local && PL_numeric_radix_sv;
3127                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3128                         size += SvLEN(PL_numeric_radix_sv) - 1;
3129                         s = SvGROW_mutable(sv, size);
3130                     }
3131
3132                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3133
3134                     /* If the radix character is UTF-8, and actually is in the
3135                      * output, turn on the UTF-8 flag for the scalar */
3136                     if (   local_radix
3137                         && SvUTF8(PL_numeric_radix_sv)
3138                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3139                     {
3140                         SvUTF8_on(sv);
3141                     }
3142
3143                     RESTORE_LC_NUMERIC();
3144                 }
3145
3146                 /* We don't call SvPOK_on(), because it may come to
3147                  * pass that the locale changes so that the
3148                  * stringification we just did is no longer correct.  We
3149                  * will have to re-stringify every time it is needed */
3150 #endif
3151                 RESTORE_ERRNO;
3152             }
3153             while (*s) s++;
3154         }
3155     }
3156     else if (isGV_with_GP(sv)) {
3157         GV *const gv = MUTABLE_GV(sv);
3158         SV *const buffer = sv_newmortal();
3159
3160         gv_efullname3(buffer, gv, "*");
3161
3162         assert(SvPOK(buffer));
3163         if (SvUTF8(buffer))
3164             SvUTF8_on(sv);
3165         if (lp)
3166             *lp = SvCUR(buffer);
3167         return SvPVX(buffer);
3168     }
3169     else if (isREGEXP(sv)) {
3170         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3171         return RX_WRAPPED((REGEXP *)sv);
3172     }
3173     else {
3174         if (lp)
3175             *lp = 0;
3176         if (flags & SV_UNDEF_RETURNS_NULL)
3177             return NULL;
3178         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3179             report_uninit(sv);
3180         /* Typically the caller expects that sv_any is not NULL now.  */
3181         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3182             sv_upgrade(sv, SVt_PV);
3183         return (char *)"";
3184     }
3185
3186     {
3187         const STRLEN len = s - SvPVX_const(sv);
3188         if (lp) 
3189             *lp = len;
3190         SvCUR_set(sv, len);
3191     }
3192     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3193                           PTR2UV(sv),SvPVX_const(sv)));
3194     if (flags & SV_CONST_RETURN)
3195         return (char *)SvPVX_const(sv);
3196     if (flags & SV_MUTABLE_RETURN)
3197         return SvPVX_mutable(sv);
3198     return SvPVX(sv);
3199 }
3200
3201 /*
3202 =for apidoc sv_copypv
3203
3204 Copies a stringified representation of the source SV into the
3205 destination SV.  Automatically performs any necessary C<mg_get> and
3206 coercion of numeric values into strings.  Guaranteed to preserve
3207 C<UTF8> flag even from overloaded objects.  Similar in nature to
3208 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3209 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3210 would lose the UTF-8'ness of the PV.
3211
3212 =for apidoc sv_copypv_nomg
3213
3214 Like C<sv_copypv>, but doesn't invoke get magic first.
3215
3216 =for apidoc sv_copypv_flags
3217
3218 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3219 has the C<SV_GMAGIC> bit set.
3220
3221 =cut
3222 */
3223
3224 void
3225 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3226 {
3227     STRLEN len;
3228     const char *s;
3229
3230     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3231
3232     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3233     sv_setpvn(dsv,s,len);
3234     if (SvUTF8(ssv))
3235         SvUTF8_on(dsv);
3236     else
3237         SvUTF8_off(dsv);
3238 }
3239
3240 /*
3241 =for apidoc sv_2pvbyte
3242
3243 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3244 to its length.  May cause the SV to be downgraded from UTF-8 as a
3245 side-effect.
3246
3247 Usually accessed via the C<SvPVbyte> macro.
3248
3249 =cut
3250 */
3251
3252 char *
3253 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3254 {
3255     PERL_ARGS_ASSERT_SV_2PVBYTE;
3256
3257     SvGETMAGIC(sv);
3258     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3259      || isGV_with_GP(sv) || SvROK(sv)) {
3260         SV *sv2 = sv_newmortal();
3261         sv_copypv_nomg(sv2,sv);
3262         sv = sv2;
3263     }
3264     sv_utf8_downgrade(sv,0);
3265     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3266 }
3267
3268 /*
3269 =for apidoc sv_2pvutf8
3270
3271 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3272 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3273
3274 Usually accessed via the C<SvPVutf8> macro.
3275
3276 =cut
3277 */
3278
3279 char *
3280 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3281 {
3282     PERL_ARGS_ASSERT_SV_2PVUTF8;
3283
3284     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3285      || isGV_with_GP(sv) || SvROK(sv))
3286         sv = sv_mortalcopy(sv);
3287     else
3288         SvGETMAGIC(sv);
3289     sv_utf8_upgrade_nomg(sv);
3290     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3291 }
3292
3293
3294 /*
3295 =for apidoc sv_2bool
3296
3297 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3298 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3299 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3300
3301 =for apidoc sv_2bool_flags
3302
3303 This function is only used by C<sv_true()> and friends,  and only if
3304 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3305 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3306
3307
3308 =cut
3309 */
3310
3311 bool
3312 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3313 {
3314     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3315
3316     restart:
3317     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3318
3319     if (!SvOK(sv))
3320         return 0;
3321     if (SvROK(sv)) {
3322         if (SvAMAGIC(sv)) {
3323             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3324             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3325                 bool svb;
3326                 sv = tmpsv;
3327                 if(SvGMAGICAL(sv)) {
3328                     flags = SV_GMAGIC;
3329                     goto restart; /* call sv_2bool */
3330                 }
3331                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3332                 else if(!SvOK(sv)) {
3333                     svb = 0;
3334                 }
3335                 else if(SvPOK(sv)) {
3336                     svb = SvPVXtrue(sv);
3337                 }
3338                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3339                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3340                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3341                 }
3342                 else {
3343                     flags = 0;
3344                     goto restart; /* call sv_2bool_nomg */
3345                 }
3346                 return cBOOL(svb);
3347             }
3348         }
3349         return SvRV(sv) != 0;
3350     }
3351     if (isREGEXP(sv))
3352         return
3353           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3354     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3355 }
3356
3357 /*
3358 =for apidoc sv_utf8_upgrade
3359
3360 Converts the PV of an SV to its UTF-8-encoded form.
3361 Forces the SV to string form if it is not already.
3362 Will C<mg_get> on C<sv> if appropriate.
3363 Always sets the C<SvUTF8> flag to avoid future validity checks even
3364 if the whole string is the same in UTF-8 as not.
3365 Returns the number of bytes in the converted string
3366
3367 This is not a general purpose byte encoding to Unicode interface:
3368 use the Encode extension for that.
3369
3370 =for apidoc sv_utf8_upgrade_nomg
3371
3372 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3373
3374 =for apidoc sv_utf8_upgrade_flags
3375
3376 Converts the PV of an SV to its UTF-8-encoded form.
3377 Forces the SV to string form if it is not already.
3378 Always sets the SvUTF8 flag to avoid future validity checks even
3379 if all the bytes are invariant in UTF-8.
3380 If C<flags> has C<SV_GMAGIC> bit set,
3381 will C<mg_get> on C<sv> if appropriate, else not.
3382
3383 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3384 will expand when converted to UTF-8, and skips the extra work of checking for
3385 that.  Typically this flag is used by a routine that has already parsed the
3386 string and found such characters, and passes this information on so that the
3387 work doesn't have to be repeated.
3388
3389 Returns the number of bytes in the converted string.
3390
3391 This is not a general purpose byte encoding to Unicode interface:
3392 use the Encode extension for that.
3393
3394 =for apidoc sv_utf8_upgrade_flags_grow
3395
3396 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3397 the number of unused bytes the string of C<sv> is guaranteed to have free after
3398 it upon return.  This allows the caller to reserve extra space that it intends
3399 to fill, to avoid extra grows.
3400
3401 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3402 are implemented in terms of this function.
3403
3404 Returns the number of bytes in the converted string (not including the spares).
3405
3406 =cut
3407
3408 (One might think that the calling routine could pass in the position of the
3409 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3410 have to be found again.  But that is not the case, because typically when the
3411 caller is likely to use this flag, it won't be calling this routine unless it
3412 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3413 and just use bytes.  But some things that do fit into a byte are variants in
3414 utf8, and the caller may not have been keeping track of these.)
3415
3416 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3417 C<NUL> isn't guaranteed due to having other routines do the work in some input
3418 cases, or if the input is already flagged as being in utf8.
3419
3420 The speed of this could perhaps be improved for many cases if someone wanted to
3421 write a fast function that counts the number of variant characters in a string,
3422 especially if it could return the position of the first one.
3423
3424 */
3425
3426 STRLEN
3427 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3428 {
3429     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3430
3431     if (sv == &PL_sv_undef)
3432         return 0;
3433     if (!SvPOK_nog(sv)) {
3434         STRLEN len = 0;
3435         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3436             (void) sv_2pv_flags(sv,&len, flags);
3437             if (SvUTF8(sv)) {
3438                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3439                 return len;
3440             }
3441         } else {
3442             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3443         }
3444     }
3445
3446     if (SvUTF8(sv)) {
3447         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3448         return SvCUR(sv);
3449     }
3450
3451     if (SvIsCOW(sv)) {
3452         S_sv_uncow(aTHX_ sv, 0);
3453     }
3454
3455     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3456         sv_recode_to_utf8(sv, _get_encoding());
3457         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3458         return SvCUR(sv);
3459     }
3460
3461     if (SvCUR(sv) == 0) {
3462         if (extra) SvGROW(sv, extra);
3463     } else { /* Assume Latin-1/EBCDIC */
3464         /* This function could be much more efficient if we
3465          * had a FLAG in SVs to signal if there are any variant
3466          * chars in the PV.  Given that there isn't such a flag
3467          * make the loop as fast as possible (although there are certainly ways
3468          * to speed this up, eg. through vectorization) */
3469         U8 * s = (U8 *) SvPVX_const(sv);
3470         U8 * e = (U8 *) SvEND(sv);
3471         U8 *t = s;
3472         STRLEN two_byte_count = 0;
3473         
3474         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3475
3476         /* See if really will need to convert to utf8.  We mustn't rely on our
3477          * incoming SV being well formed and having a trailing '\0', as certain
3478          * code in pp_formline can send us partially built SVs. */
3479
3480         while (t < e) {
3481             const U8 ch = *t++;
3482             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3483
3484             t--;    /* t already incremented; re-point to first variant */
3485             two_byte_count = 1;
3486             goto must_be_utf8;
3487         }
3488
3489         /* utf8 conversion not needed because all are invariants.  Mark as
3490          * UTF-8 even if no variant - saves scanning loop */
3491         SvUTF8_on(sv);
3492         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3493         return SvCUR(sv);
3494
3495       must_be_utf8:
3496
3497         /* Here, the string should be converted to utf8, either because of an
3498          * input flag (two_byte_count = 0), or because a character that
3499          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3500          * the beginning of the string (if we didn't examine anything), or to
3501          * the first variant.  In either case, everything from s to t - 1 will
3502          * occupy only 1 byte each on output.
3503          *
3504          * There are two main ways to convert.  One is to create a new string
3505          * and go through the input starting from the beginning, appending each
3506          * converted value onto the new string as we go along.  It's probably
3507          * best to allocate enough space in the string for the worst possible
3508          * case rather than possibly running out of space and having to
3509          * reallocate and then copy what we've done so far.  Since everything
3510          * from s to t - 1 is invariant, the destination can be initialized
3511          * with these using a fast memory copy
3512          *
3513          * The other way is to figure out exactly how big the string should be
3514          * by parsing the entire input.  Then you don't have to make it big
3515          * enough to handle the worst possible case, and more importantly, if
3516          * the string you already have is large enough, you don't have to
3517          * allocate a new string, you can copy the last character in the input
3518          * string to the final position(s) that will be occupied by the
3519          * converted string and go backwards, stopping at t, since everything
3520          * before that is invariant.
3521          *
3522          * There are advantages and disadvantages to each method.
3523          *
3524          * In the first method, we can allocate a new string, do the memory
3525          * copy from the s to t - 1, and then proceed through the rest of the
3526          * string byte-by-byte.
3527          *
3528          * In the second method, we proceed through the rest of the input
3529          * string just calculating how big the converted string will be.  Then
3530          * there are two cases:
3531          *  1)  if the string has enough extra space to handle the converted
3532          *      value.  We go backwards through the string, converting until we
3533          *      get to the position we are at now, and then stop.  If this
3534          *      position is far enough along in the string, this method is
3535          *      faster than the other method.  If the memory copy were the same
3536          *      speed as the byte-by-byte loop, that position would be about
3537          *      half-way, as at the half-way mark, parsing to the end and back
3538          *      is one complete string's parse, the same amount as starting
3539          *      over and going all the way through.  Actually, it would be
3540          *      somewhat less than half-way, as it's faster to just count bytes
3541          *      than to also copy, and we don't have the overhead of allocating
3542          *      a new string, changing the scalar to use it, and freeing the
3543          *      existing one.  But if the memory copy is fast, the break-even
3544          *      point is somewhere after half way.  The counting loop could be
3545          *      sped up by vectorization, etc, to move the break-even point
3546          *      further towards the beginning.
3547          *  2)  if the string doesn't have enough space to handle the converted
3548          *      value.  A new string will have to be allocated, and one might
3549          *      as well, given that, start from the beginning doing the first
3550          *      method.  We've spent extra time parsing the string and in
3551          *      exchange all we've gotten is that we know precisely how big to
3552          *      make the new one.  Perl is more optimized for time than space,
3553          *      so this case is a loser.
3554          * So what I've decided to do is not use the 2nd method unless it is
3555          * guaranteed that a new string won't have to be allocated, assuming
3556          * the worst case.  I also decided not to put any more conditions on it
3557          * than this, for now.  It seems likely that, since the worst case is
3558          * twice as big as the unknown portion of the string (plus 1), we won't
3559          * be guaranteed enough space, causing us to go to the first method,
3560          * unless the string is short, or the first variant character is near
3561          * the end of it.  In either of these cases, it seems best to use the
3562          * 2nd method.  The only circumstance I can think of where this would
3563          * be really slower is if the string had once had much more data in it
3564          * than it does now, but there is still a substantial amount in it  */
3565
3566         {
3567             STRLEN invariant_head = t - s;
3568             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3569             if (SvLEN(sv) < size) {
3570
3571                 /* Here, have decided to allocate a new string */
3572
3573                 U8 *dst;
3574                 U8 *d;
3575
3576                 Newx(dst, size, U8);
3577
3578                 /* If no known invariants at the beginning of the input string,
3579                  * set so starts from there.  Otherwise, can use memory copy to
3580                  * get up to where we are now, and then start from here */
3581
3582                 if (invariant_head == 0) {
3583                     d = dst;
3584                 } else {
3585                     Copy(s, dst, invariant_head, char);
3586                     d = dst + invariant_head;
3587                 }
3588
3589                 while (t < e) {
3590                     append_utf8_from_native_byte(*t, &d);
3591                     t++;
3592                 }
3593                 *d = '\0';
3594                 SvPV_free(sv); /* No longer using pre-existing string */
3595                 SvPV_set(sv, (char*)dst);
3596                 SvCUR_set(sv, d - dst);
3597                 SvLEN_set(sv, size);
3598             } else {
3599
3600                 /* Here, have decided to get the exact size of the string.
3601                  * Currently this happens only when we know that there is
3602                  * guaranteed enough space to fit the converted string, so
3603                  * don't have to worry about growing.  If two_byte_count is 0,
3604                  * then t points to the first byte of the string which hasn't
3605                  * been examined yet.  Otherwise two_byte_count is 1, and t
3606                  * points to the first byte in the string that will expand to
3607                  * two.  Depending on this, start examining at t or 1 after t.
3608                  * */
3609
3610                 U8 *d = t + two_byte_count;
3611
3612
3613                 /* Count up the remaining bytes that expand to two */
3614
3615                 while (d < e) {
3616                     const U8 chr = *d++;
3617                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3618                 }
3619
3620                 /* The string will expand by just the number of bytes that
3621                  * occupy two positions.  But we are one afterwards because of
3622                  * the increment just above.  This is the place to put the
3623                  * trailing NUL, and to set the length before we decrement */
3624
3625                 d += two_byte_count;
3626                 SvCUR_set(sv, d - s);
3627                 *d-- = '\0';
3628
3629
3630                 /* Having decremented d, it points to the position to put the
3631                  * very last byte of the expanded string.  Go backwards through
3632                  * the string, copying and expanding as we go, stopping when we
3633                  * get to the part that is invariant the rest of the way down */
3634
3635                 e--;
3636                 while (e >= t) {
3637                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3638                         *d-- = *e;
3639                     } else {
3640                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3641                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3642                     }
3643                     e--;
3644                 }
3645             }
3646
3647             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3648                 /* Update pos. We do it at the end rather than during
3649                  * the upgrade, to avoid slowing down the common case
3650                  * (upgrade without pos).
3651                  * pos can be stored as either bytes or characters.  Since
3652                  * this was previously a byte string we can just turn off
3653                  * the bytes flag. */
3654                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3655                 if (mg) {
3656                     mg->mg_flags &= ~MGf_BYTES;
3657                 }
3658                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3659                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3660             }
3661         }
3662     }
3663
3664     /* Mark as UTF-8 even if no variant - saves scanning loop */
3665     SvUTF8_on(sv);
3666     return SvCUR(sv);
3667 }
3668
3669 /*
3670 =for apidoc sv_utf8_downgrade
3671
3672 Attempts to convert the PV of an SV from characters to bytes.
3673 If the PV contains a character that cannot fit
3674 in a byte, this conversion will fail;
3675 in this case, either returns false or, if C<fail_ok> is not
3676 true, croaks.
3677
3678 This is not a general purpose Unicode to byte encoding interface:
3679 use the C<Encode> extension for that.
3680
3681 =cut
3682 */
3683
3684 bool
3685 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3686 {
3687     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3688
3689     if (SvPOKp(sv) && SvUTF8(sv)) {
3690         if (SvCUR(sv)) {
3691             U8 *s;
3692             STRLEN len;
3693             int mg_flags = SV_GMAGIC;
3694
3695             if (SvIsCOW(sv)) {
3696                 S_sv_uncow(aTHX_ sv, 0);
3697             }
3698             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3699                 /* update pos */
3700                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3701                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3702                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3703                                                 SV_GMAGIC|SV_CONST_RETURN);
3704                         mg_flags = 0; /* sv_pos_b2u does get magic */
3705                 }
3706                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3707                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3708
3709             }
3710             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3711
3712             if (!utf8_to_bytes(s, &len)) {
3713                 if (fail_ok)
3714                     return FALSE;
3715                 else {
3716                     if (PL_op)
3717                         Perl_croak(aTHX_ "Wide character in %s",
3718                                    OP_DESC(PL_op));
3719                     else
3720                         Perl_croak(aTHX_ "Wide character");
3721                 }
3722             }
3723             SvCUR_set(sv, len);
3724         }
3725     }
3726     SvUTF8_off(sv);
3727     return TRUE;
3728 }
3729
3730 /*
3731 =for apidoc sv_utf8_encode
3732
3733 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3734 flag off so that it looks like octets again.
3735
3736 =cut
3737 */
3738
3739 void
3740 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3741 {
3742     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3743
3744     if (SvREADONLY(sv)) {
3745         sv_force_normal_flags(sv, 0);
3746     }
3747     (void) sv_utf8_upgrade(sv);
3748     SvUTF8_off(sv);
3749 }
3750
3751 /*
3752 =for apidoc sv_utf8_decode
3753
3754 If the PV of the SV is an octet sequence in UTF-8
3755 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3756 so that it looks like a character.  If the PV contains only single-byte
3757 characters, the C<SvUTF8> flag stays off.
3758 Scans PV for validity and returns false if the PV is invalid UTF-8.
3759
3760 =cut
3761 */
3762
3763 bool
3764 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3765 {
3766     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3767
3768     if (SvPOKp(sv)) {
3769         const U8 *start, *c;
3770         const U8 *e;
3771
3772         /* The octets may have got themselves encoded - get them back as
3773          * bytes
3774          */
3775         if (!sv_utf8_downgrade(sv, TRUE))
3776             return FALSE;
3777
3778         /* it is actually just a matter of turning the utf8 flag on, but
3779          * we want to make sure everything inside is valid utf8 first.
3780          */
3781         c = start = (const U8 *) SvPVX_const(sv);
3782         if (!is_utf8_string(c, SvCUR(sv)))
3783             return FALSE;
3784         e = (const U8 *) SvEND(sv);
3785         while (c < e) {
3786             const U8 ch = *c++;
3787             if (!UTF8_IS_INVARIANT(ch)) {
3788                 SvUTF8_on(sv);
3789                 break;
3790             }
3791         }
3792         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3793             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3794                    after this, clearing pos.  Does anything on CPAN
3795                    need this? */
3796             /* adjust pos to the start of a UTF8 char sequence */
3797             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3798             if (mg) {
3799                 I32 pos = mg->mg_len;
3800                 if (pos > 0) {
3801                     for (c = start + pos; c > start; c--) {
3802                         if (UTF8_IS_START(*c))
3803                             break;
3804                     }
3805                     mg->mg_len  = c - start;
3806                 }
3807             }
3808             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3809                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3810         }
3811     }
3812     return TRUE;
3813 }
3814
3815 /*
3816 =for apidoc sv_setsv
3817
3818 Copies the contents of the source SV C<ssv> into the destination SV
3819 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3820 function if the source SV needs to be reused.  Does not handle 'set' magic on
3821 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3822 performs a copy-by-value, obliterating any previous content of the
3823 destination.
3824
3825 You probably want to use one of the assortment of wrappers, such as
3826 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3827 C<SvSetMagicSV_nosteal>.
3828
3829 =for apidoc sv_setsv_flags
3830
3831 Copies the contents of the source SV C<ssv> into the destination SV
3832 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3833 function if the source SV needs to be reused.  Does not handle 'set' magic.
3834 Loosely speaking, it performs a copy-by-value, obliterating any previous
3835 content of the destination.
3836 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3837 C<ssv> if appropriate, else not.  If the C<flags>
3838 parameter has the C<SV_NOSTEAL> bit set then the
3839 buffers of temps will not be stolen.  C<sv_setsv>
3840 and C<sv_setsv_nomg> are implemented in terms of this function.
3841
3842 You probably want to use one of the assortment of wrappers, such as
3843 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3844 C<SvSetMagicSV_nosteal>.
3845
3846 This is the primary function for copying scalars, and most other
3847 copy-ish functions and macros use this underneath.
3848
3849 =cut
3850 */
3851
3852 static void
3853 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3854 {
3855     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3856     HV *old_stash = NULL;
3857
3858     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3859
3860     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3861         const char * const name = GvNAME(sstr);
3862         const STRLEN len = GvNAMELEN(sstr);
3863         {
3864             if (dtype >= SVt_PV) {
3865                 SvPV_free(dstr);
3866                 SvPV_set(dstr, 0);
3867                 SvLEN_set(dstr, 0);
3868                 SvCUR_set(dstr, 0);
3869             }
3870             SvUPGRADE(dstr, SVt_PVGV);
3871             (void)SvOK_off(dstr);
3872             isGV_with_GP_on(dstr);
3873         }
3874         GvSTASH(dstr) = GvSTASH(sstr);
3875         if (GvSTASH(dstr))
3876             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3877         gv_name_set(MUTABLE_GV(dstr), name, len,
3878                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3879         SvFAKE_on(dstr);        /* can coerce to non-glob */
3880     }
3881
3882     if(GvGP(MUTABLE_GV(sstr))) {
3883         /* If source has method cache entry, clear it */
3884         if(GvCVGEN(sstr)) {
3885             SvREFCNT_dec(GvCV(sstr));
3886             GvCV_set(sstr, NULL);
3887             GvCVGEN(sstr) = 0;
3888         }
3889         /* If source has a real method, then a method is
3890            going to change */
3891         else if(
3892          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3893         ) {
3894             mro_changes = 1;
3895         }
3896     }
3897
3898     /* If dest already had a real method, that's a change as well */
3899     if(
3900         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3901      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3902     ) {
3903         mro_changes = 1;
3904     }
3905
3906     /* We don't need to check the name of the destination if it was not a
3907        glob to begin with. */
3908     if(dtype == SVt_PVGV) {
3909         const char * const name = GvNAME((const GV *)dstr);
3910         if(
3911             strEQ(name,"ISA")
3912          /* The stash may have been detached from the symbol table, so
3913             check its name. */
3914          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3915         )
3916             mro_changes = 2;
3917         else {
3918             const STRLEN len = GvNAMELEN(dstr);
3919             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3920              || (len == 1 && name[0] == ':')) {
3921                 mro_changes = 3;
3922
3923                 /* Set aside the old stash, so we can reset isa caches on
3924                    its subclasses. */
3925                 if((old_stash = GvHV(dstr)))
3926                     /* Make sure we do not lose it early. */
3927                     SvREFCNT_inc_simple_void_NN(
3928                      sv_2mortal((SV *)old_stash)
3929                     );
3930             }
3931         }
3932
3933         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3934     }
3935
3936     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3937      * so temporarily protect it */
3938     ENTER;
3939     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3940     gp_free(MUTABLE_GV(dstr));
3941     GvINTRO_off(dstr);          /* one-shot flag */
3942     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3943     LEAVE;
3944
3945     if (SvTAINTED(sstr))
3946         SvTAINT(dstr);
3947     if (GvIMPORTED(dstr) != GVf_IMPORTED
3948         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3949         {
3950             GvIMPORTED_on(dstr);
3951         }
3952     GvMULTI_on(dstr);
3953     if(mro_changes == 2) {
3954       if (GvAV((const GV *)sstr)) {
3955         MAGIC *mg;
3956         SV * const sref = (SV *)GvAV((const GV *)dstr);
3957         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3958             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3959                 AV * const ary = newAV();
3960                 av_push(ary, mg->mg_obj); /* takes the refcount */
3961                 mg->mg_obj = (SV *)ary;
3962             }
3963             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3964         }
3965         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3966       }
3967       mro_isa_changed_in(GvSTASH(dstr));
3968     }
3969     else if(mro_changes == 3) {
3970         HV * const stash = GvHV(dstr);
3971         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3972             mro_package_moved(
3973                 stash, old_stash,
3974                 (GV *)dstr, 0
3975             );
3976     }
3977     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3978     if (GvIO(dstr) && dtype == SVt_PVGV) {
3979         DEBUG_o(Perl_deb(aTHX_
3980                         "glob_assign_glob clearing PL_stashcache\n"));
3981         /* It's a cache. It will rebuild itself quite happily.
3982            It's a lot of effort to work out exactly which key (or keys)
3983            might be invalidated by the creation of the this file handle.
3984          */
3985         hv_clear(PL_stashcache);
3986     }
3987     return;
3988 }
3989
3990 void
3991 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3992 {
3993     SV * const sref = SvRV(sstr);
3994     SV *dref;
3995     const int intro = GvINTRO(dstr);
3996     SV **location;
3997     U8 import_flag = 0;
3998     const U32 stype = SvTYPE(sref);
3999
4000     PERL_ARGS_ASSERT_GV_SETREF;
4001
4002     if (intro) {
4003         GvINTRO_off(dstr);      /* one-shot flag */
4004         GvLINE(dstr) = CopLINE(PL_curcop);
4005         GvEGV(dstr) = MUTABLE_GV(dstr);
4006     }
4007     GvMULTI_on(dstr);
4008     switch (stype) {
4009     case SVt_PVCV:
4010         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4011         import_flag = GVf_IMPORTED_CV;
4012         goto common;
4013     case SVt_PVHV:
4014         location = (SV **) &GvHV(dstr);
4015         import_flag = GVf_IMPORTED_HV;
4016         goto common;
4017     case SVt_PVAV:
4018         location = (SV **) &GvAV(dstr);
4019         import_flag = GVf_IMPORTED_AV;
4020         goto common;
4021     case SVt_PVIO:
4022         location = (SV **) &GvIOp(dstr);
4023         goto common;
4024     case SVt_PVFM:
4025         location = (SV **) &GvFORM(dstr);
4026         goto common;
4027     default:
4028         location = &GvSV(dstr);
4029         import_flag = GVf_IMPORTED_SV;
4030     common:
4031         if (intro) {
4032             if (stype == SVt_PVCV) {
4033                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4034                 if (GvCVGEN(dstr)) {
4035                     SvREFCNT_dec(GvCV(dstr));
4036                     GvCV_set(dstr, NULL);
4037                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4038                 }
4039             }
4040             /* SAVEt_GVSLOT takes more room on the savestack and has more
4041                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4042                leave_scope needs access to the GV so it can reset method
4043                caches.  We must use SAVEt_GVSLOT whenever the type is
4044                SVt_PVCV, even if the stash is anonymous, as the stash may
4045                gain a name somehow before leave_scope. */
4046             if (stype == SVt_PVCV) {
4047                 /* There is no save_pushptrptrptr.  Creating it for this
4048                    one call site would be overkill.  So inline the ss add
4049                    routines here. */
4050                 dSS_ADD;
4051                 SS_ADD_PTR(dstr);
4052                 SS_ADD_PTR(location);
4053                 SS_ADD_PTR(SvREFCNT_inc(*location));
4054                 SS_ADD_UV(SAVEt_GVSLOT);
4055                 SS_ADD_END(4);
4056             }
4057             else SAVEGENERICSV(*location);
4058         }
4059         dref = *location;
4060         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4061             CV* const cv = MUTABLE_CV(*location);
4062             if (cv) {
4063                 if (!GvCVGEN((const GV *)dstr) &&
4064                     (CvROOT(cv) || CvXSUB(cv)) &&
4065                     /* redundant check that avoids creating the extra SV
4066                        most of the time: */
4067                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4068                     {
4069                         SV * const new_const_sv =
4070                             CvCONST((const CV *)sref)
4071                                  ? cv_const_sv((const CV *)sref)
4072                                  : NULL;
4073                         report_redefined_cv(
4074                            sv_2mortal(Perl_newSVpvf(aTHX_
4075                                 "%"HEKf"::%"HEKf,
4076                                 HEKfARG(
4077                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4078                                 ),
4079                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4080                            )),
4081                            cv,
4082                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4083                         );
4084                     }
4085                 if (!intro)
4086                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4087                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4088                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4089                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4090             }
4091             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4092             GvASSUMECV_on(dstr);
4093             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4094                 if (intro && GvREFCNT(dstr) > 1) {
4095                     /* temporary remove extra savestack's ref */
4096                     --GvREFCNT(dstr);
4097                     gv_method_changed(dstr);
4098                     ++GvREFCNT(dstr);
4099                 }
4100                 else gv_method_changed(dstr);
4101             }
4102         }
4103         *location = SvREFCNT_inc_simple_NN(sref);
4104         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4105             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4106             GvFLAGS(dstr) |= import_flag;
4107         }
4108
4109         if (stype == SVt_PVHV) {
4110             const char * const name = GvNAME((GV*)dstr);
4111             const STRLEN len = GvNAMELEN(dstr);
4112             if (
4113                 (
4114                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4115                 || (len == 1 && name[0] == ':')
4116                 )
4117              && (!dref || HvENAME_get(dref))
4118             ) {
4119                 mro_package_moved(
4120                     (HV *)sref, (HV *)dref,
4121                     (GV *)dstr, 0
4122                 );
4123             }
4124         }
4125         else if (
4126             stype == SVt_PVAV && sref != dref
4127          && strEQ(GvNAME((GV*)dstr), "ISA")
4128          /* The stash may have been detached from the symbol table, so
4129             check its name before doing anything. */
4130          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4131         ) {
4132             MAGIC *mg;
4133             MAGIC * const omg = dref && SvSMAGICAL(dref)
4134                                  ? mg_find(dref, PERL_MAGIC_isa)
4135                                  : NULL;
4136             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4137                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4138                     AV * const ary = newAV();
4139                     av_push(ary, mg->mg_obj); /* takes the refcount */
4140                     mg->mg_obj = (SV *)ary;
4141                 }
4142                 if (omg) {
4143                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4144                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4145                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4146                         while (items--)
4147                             av_push(
4148                              (AV *)mg->mg_obj,
4149                              SvREFCNT_inc_simple_NN(*svp++)
4150                             );
4151                     }
4152                     else
4153                         av_push(
4154                          (AV *)mg->mg_obj,
4155                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4156                         );
4157                 }
4158                 else
4159                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4160             }
4161             else
4162             {
4163                 SSize_t i;
4164                 sv_magic(
4165                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4166                 );
4167                 for (i = 0; i <= AvFILL(sref); ++i) {
4168                     SV **elem = av_fetch ((AV*)sref, i, 0);
4169                     if (elem) {
4170                         sv_magic(
4171                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4172                         );
4173                     }
4174                 }
4175                 mg = mg_find(sref, PERL_MAGIC_isa);
4176             }
4177             /* Since the *ISA assignment could have affected more than
4178                one stash, don't call mro_isa_changed_in directly, but let
4179                magic_clearisa do it for us, as it already has the logic for
4180                dealing with globs vs arrays of globs. */
4181             assert(mg);
4182             Perl_magic_clearisa(aTHX_ NULL, mg);
4183         }
4184         else if (stype == SVt_PVIO) {
4185             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4186             /* It's a cache. It will rebuild itself quite happily.
4187                It's a lot of effort to work out exactly which key (or keys)
4188                might be invalidated by the creation of the this file handle.
4189             */
4190             hv_clear(PL_stashcache);
4191         }
4192         break;
4193     }
4194     if (!intro) SvREFCNT_dec(dref);
4195     if (SvTAINTED(sstr))
4196         SvTAINT(dstr);
4197     return;
4198 }
4199
4200
4201
4202
4203 #ifdef PERL_DEBUG_READONLY_COW
4204 # include <sys/mman.h>
4205
4206 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4207 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4208 # endif
4209
4210 void
4211 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4212 {
4213     struct perl_memory_debug_header * const header =
4214         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4215     const MEM_SIZE len = header->size;
4216     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4217 # ifdef PERL_TRACK_MEMPOOL
4218     if (!header->readonly) header->readonly = 1;
4219 # endif
4220     if (mprotect(header, len, PROT_READ))
4221         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4222                          header, len, errno);
4223 }
4224
4225 static void
4226 S_sv_buf_to_rw(pTHX_ SV *sv)
4227 {
4228     struct perl_memory_debug_header * const header =
4229         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4230     const MEM_SIZE len = header->size;
4231     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4232     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4233         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4234                          header, len, errno);
4235 # ifdef PERL_TRACK_MEMPOOL
4236     header->readonly = 0;
4237 # endif
4238 }
4239
4240 #else
4241 # define sv_buf_to_ro(sv)       NOOP
4242 # define sv_buf_to_rw(sv)       NOOP
4243 #endif
4244
4245 void
4246 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4247 {
4248     U32 sflags;
4249     int dtype;
4250     svtype stype;
4251     unsigned int both_type;
4252
4253     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4254
4255     if (UNLIKELY( sstr == dstr ))
4256         return;
4257
4258     if (UNLIKELY( !sstr ))
4259         sstr = &PL_sv_undef;
4260
4261     stype = SvTYPE(sstr);
4262     dtype = SvTYPE(dstr);
4263     both_type = (stype | dtype);
4264
4265     /* with these values, we can check that both SVs are NULL/IV (and not
4266      * freed) just by testing the or'ed types */
4267     STATIC_ASSERT_STMT(SVt_NULL == 0);
4268     STATIC_ASSERT_STMT(SVt_IV   == 1);
4269     if (both_type <= 1) {
4270         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4271          * special-casing */
4272         U32 sflags;
4273         U32 new_dflags;
4274
4275         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4276         if (SvREADONLY(dstr))
4277             Perl_croak_no_modify();
4278         if (SvROK(dstr))
4279             sv_unref_flags(dstr, 0);
4280
4281         assert(!SvGMAGICAL(sstr));
4282         assert(!SvGMAGICAL(dstr));
4283
4284         sflags = SvFLAGS(sstr);
4285         if (sflags & (SVf_IOK|SVf_ROK)) {
4286             SET_SVANY_FOR_BODYLESS_IV(dstr);
4287             new_dflags = SVt_IV;
4288
4289             if (sflags & SVf_ROK) {
4290                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4291                 new_dflags |= SVf_ROK;
4292             }
4293             else {
4294                 /* both src and dst are <= SVt_IV, so sv_any points to the
4295                  * head; so access the head directly
4296                  */
4297                 assert(    &(sstr->sv_u.svu_iv)
4298                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4299                 assert(    &(dstr->sv_u.svu_iv)
4300                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4301                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4302                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4303             }
4304         }
4305         else {
4306             new_dflags = dtype; /* turn off everything except the type */
4307         }
4308         SvFLAGS(dstr) = new_dflags;
4309
4310         return;
4311     }
4312
4313     if (UNLIKELY(both_type == SVTYPEMASK)) {
4314         if (SvIS_FREED(dstr)) {
4315             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4316                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4317         }
4318         if (SvIS_FREED(sstr)) {
4319             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4320                        (void*)sstr, (void*)dstr);
4321         }
4322     }
4323
4324
4325
4326     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4327     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4328
4329     /* There's a lot of redundancy below but we're going for speed here */
4330
4331     switch (stype) {
4332     case SVt_NULL:
4333       undef_sstr:
4334         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4335             (void)SvOK_off(dstr);
4336             return;
4337         }
4338         break;
4339     case SVt_IV:
4340         if (SvIOK(sstr)) {
4341             switch (dtype) {
4342             case SVt_NULL:
4343                 /* For performance, we inline promoting to type SVt_IV. */
4344                 /* We're starting from SVt_NULL, so provided that define is
4345                  * actual 0, we don't have to unset any SV type flags
4346                  * to promote to SVt_IV. */
4347                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4348                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4349                 SvFLAGS(dstr) |= SVt_IV;
4350                 break;
4351             case SVt_NV:
4352             case SVt_PV:
4353                 sv_upgrade(dstr, SVt_PVIV);
4354                 break;
4355             case SVt_PVGV:
4356             case SVt_PVLV:
4357                 goto end_of_first_switch;
4358             }
4359             (void)SvIOK_only(dstr);
4360             SvIV_set(dstr,  SvIVX(sstr));
4361             if (SvIsUV(sstr))
4362                 SvIsUV_on(dstr);
4363             /* SvTAINTED can only be true if the SV has taint magic, which in
4364                turn means that the SV type is PVMG (or greater). This is the
4365                case statement for SVt_IV, so this cannot be true (whatever gcov
4366                may say).  */
4367             assert(!SvTAINTED(sstr));
4368             return;
4369         }
4370         if (!SvROK(sstr))
4371             goto undef_sstr;
4372         if (dtype < SVt_PV && dtype != SVt_IV)
4373             sv_upgrade(dstr, SVt_IV);
4374         break;
4375
4376     case SVt_NV:
4377         if (LIKELY( SvNOK(sstr) )) {
4378             switch (dtype) {
4379             case SVt_NULL:
4380             case SVt_IV:
4381                 sv_upgrade(dstr, SVt_NV);
4382                 break;
4383             case SVt_PV:
4384             case SVt_PVIV:
4385                 sv_upgrade(dstr, SVt_PVNV);
4386                 break;
4387             case SVt_PVGV:
4388             case SVt_PVLV:
4389                 goto end_of_first_switch;
4390             }
4391             SvNV_set(dstr, SvNVX(sstr));
4392             (void)SvNOK_only(dstr);
4393             /* SvTAINTED can only be true if the SV has taint magic, which in
4394                turn means that the SV type is PVMG (or greater). This is the
4395                case statement for SVt_NV, so this cannot be true (whatever gcov
4396                may say).  */
4397             assert(!SvTAINTED(sstr));
4398             return;
4399         }
4400         goto undef_sstr;
4401
4402     case SVt_PV:
4403         if (dtype < SVt_PV)
4404             sv_upgrade(dstr, SVt_PV);
4405         break;
4406     case SVt_PVIV:
4407         if (dtype < SVt_PVIV)
4408             sv_upgrade(dstr, SVt_PVIV);
4409         break;
4410     case SVt_PVNV:
4411         if (dtype < SVt_PVNV)
4412             sv_upgrade(dstr, SVt_PVNV);
4413         break;
4414     default:
4415         {
4416         const char * const type = sv_reftype(sstr,0);
4417         if (PL_op)
4418             /* diag_listed_as: Bizarre copy of %s */
4419             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4420         else
4421             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4422         }
4423         NOT_REACHED; /* NOTREACHED */
4424
4425     case SVt_REGEXP:
4426       upgregexp:
4427         if (dtype < SVt_REGEXP)
4428         {
4429             if (dtype >= SVt_PV) {
4430                 SvPV_free(dstr);
4431                 SvPV_set(dstr, 0);
4432                 SvLEN_set(dstr, 0);
4433                 SvCUR_set(dstr, 0);
4434             }
4435             sv_upgrade(dstr, SVt_REGEXP);
4436         }
4437         break;
4438
4439         case SVt_INVLIST:
4440     case SVt_PVLV:
4441     case SVt_PVGV:
4442     case SVt_PVMG:
4443         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4444             mg_get(sstr);
4445             if (SvTYPE(sstr) != stype)
4446                 stype = SvTYPE(sstr);
4447         }
4448         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4449                     glob_assign_glob(dstr, sstr, dtype);
4450                     return;
4451         }
4452         if (stype == SVt_PVLV)
4453         {
4454             if (isREGEXP(sstr)) goto upgregexp;
4455             SvUPGRADE(dstr, SVt_PVNV);
4456         }
4457         else
4458             SvUPGRADE(dstr, (svtype)stype);
4459     }
4460  end_of_first_switch:
4461
4462     /* dstr may have been upgraded.  */
4463     dtype = SvTYPE(dstr);
4464     sflags = SvFLAGS(sstr);
4465
4466     if (UNLIKELY( dtype == SVt_PVCV )) {
4467         /* Assigning to a subroutine sets the prototype.  */
4468         if (SvOK(sstr)) {
4469             STRLEN len;
4470             const char *const ptr = SvPV_const(sstr, len);
4471
4472             SvGROW(dstr, len + 1);
4473             Copy(ptr, SvPVX(dstr), len + 1, char);
4474             SvCUR_set(dstr, len);
4475             SvPOK_only(dstr);
4476             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4477             CvAUTOLOAD_off(dstr);
4478         } else {
4479             SvOK_off(dstr);
4480         }
4481     }
4482     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4483              || dtype == SVt_PVFM))
4484     {
4485         const char * const type = sv_reftype(dstr,0);
4486         if (PL_op)
4487             /* diag_listed_as: Cannot copy to %s */
4488             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4489         else
4490             Perl_croak(aTHX_ "Cannot copy to %s", type);
4491     } else if (sflags & SVf_ROK) {
4492         if (isGV_with_GP(dstr)
4493             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4494             sstr = SvRV(sstr);
4495             if (sstr == dstr) {
4496                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4497                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4498                 {
4499                     GvIMPORTED_on(dstr);
4500                 }
4501                 GvMULTI_on(dstr);
4502                 return;
4503             }
4504             glob_assign_glob(dstr, sstr, dtype);
4505             return;
4506         }
4507
4508         if (dtype >= SVt_PV) {
4509             if (isGV_with_GP(dstr)) {
4510                 gv_setref(dstr, sstr);
4511                 return;
4512             }
4513             if (SvPVX_const(dstr)) {
4514                 SvPV_free(dstr);
4515                 SvLEN_set(dstr, 0);
4516                 SvCUR_set(dstr, 0);
4517             }
4518         }
4519         (void)SvOK_off(dstr);
4520         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4521         SvFLAGS(dstr) |= sflags & SVf_ROK;
4522         assert(!(sflags & SVp_NOK));
4523         assert(!(sflags & SVp_IOK));
4524         assert(!(sflags & SVf_NOK));
4525         assert(!(sflags & SVf_IOK));
4526     }
4527     else if (isGV_with_GP(dstr)) {
4528         if (!(sflags & SVf_OK)) {
4529             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4530                            "Undefined value assigned to typeglob");
4531         }
4532         else {
4533             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4534             if (dstr != (const SV *)gv) {
4535                 const char * const name = GvNAME((const GV *)dstr);
4536                 const STRLEN len = GvNAMELEN(dstr);
4537                 HV *old_stash = NULL;
4538                 bool reset_isa = FALSE;
4539                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4540                  || (len == 1 && name[0] == ':')) {
4541                     /* Set aside the old stash, so we can reset isa caches
4542                        on its subclasses. */
4543                     if((old_stash = GvHV(dstr))) {
4544                         /* Make sure we do not lose it early. */
4545                         SvREFCNT_inc_simple_void_NN(
4546                          sv_2mortal((SV *)old_stash)
4547                         );
4548                     }
4549                     reset_isa = TRUE;
4550                 }
4551
4552                 if (GvGP(dstr)) {
4553                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4554                     gp_free(MUTABLE_GV(dstr));
4555                 }
4556                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4557
4558                 if (reset_isa) {
4559                     HV * const stash = GvHV(dstr);
4560                     if(
4561                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4562                     )
4563                         mro_package_moved(
4564                          stash, old_stash,
4565                          (GV *)dstr, 0
4566                         );
4567                 }
4568             }
4569         }
4570     }
4571     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4572           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4573         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4574     }
4575     else if (sflags & SVp_POK) {
4576         const STRLEN cur = SvCUR(sstr);
4577         const STRLEN len = SvLEN(sstr);
4578
4579         /*
4580          * We have three basic ways to copy the string:
4581          *
4582          *  1. Swipe
4583          *  2. Copy-on-write
4584          *  3. Actual copy
4585          * 
4586          * Which we choose is based on various factors.  The following
4587          * things are listed in order of speed, fastest to slowest:
4588          *  - Swipe
4589          *  - Copying a short string
4590          *  - Copy-on-write bookkeeping
4591          *  - malloc
4592          *  - Copying a long string
4593          * 
4594          * We swipe the string (steal the string buffer) if the SV on the
4595          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4596          * big win on long strings.  It should be a win on short strings if
4597          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4598          * slow things down, as SvPVX_const(sstr) would have been freed
4599          * soon anyway.
4600          * 
4601          * We also steal the buffer from a PADTMP (operator target) if it
4602          * is â€˜long enough’.  For short strings, a swipe does not help
4603          * here, as it causes more malloc calls the next time the target
4604          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4605          * be allocated it is still not worth swiping PADTMPs for short
4606          * strings, as the savings here are small.
4607          * 
4608          * If swiping is not an option, then we see whether it is
4609          * worth using copy-on-write.  If the lhs already has a buf-
4610          * fer big enough and the string is short, we skip it and fall back
4611          * to method 3, since memcpy is faster for short strings than the
4612          * later bookkeeping overhead that copy-on-write entails.
4613
4614          * If the rhs is not a copy-on-write string yet, then we also
4615          * consider whether the buffer is too large relative to the string
4616          * it holds.  Some operations such as readline allocate a large
4617          * buffer in the expectation of reusing it.  But turning such into
4618          * a COW buffer is counter-productive because it increases memory
4619          * usage by making readline allocate a new large buffer the sec-
4620          * ond time round.  So, if the buffer is too large, again, we use
4621          * method 3 (copy).
4622          * 
4623          * Finally, if there is no buffer on the left, or the buffer is too 
4624          * small, then we use copy-on-write and make both SVs share the
4625          * string buffer.
4626          *
4627          */
4628
4629         /* Whichever path we take through the next code, we want this true,
4630            and doing it now facilitates the COW check.  */
4631         (void)SvPOK_only(dstr);
4632
4633         if (
4634                  (              /* Either ... */
4635                                 /* slated for free anyway (and not COW)? */
4636                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4637                                 /* or a swipable TARG */
4638                  || ((sflags &
4639                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4640                        == SVs_PADTMP
4641                                 /* whose buffer is worth stealing */
4642                      && CHECK_COWBUF_THRESHOLD(cur,len)
4643                     )
4644                  ) &&
4645                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4646                  (!(flags & SV_NOSTEAL)) &&
4647                                         /* and we're allowed to steal temps */
4648                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4649                  len)             /* and really is a string */
4650         {       /* Passes the swipe test.  */
4651             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4652                 SvPV_free(dstr);
4653             SvPV_set(dstr, SvPVX_mutable(sstr));
4654             SvLEN_set(dstr, SvLEN(sstr));
4655             SvCUR_set(dstr, SvCUR(sstr));
4656
4657             SvTEMP_off(dstr);
4658             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4659             SvPV_set(sstr, NULL);
4660             SvLEN_set(sstr, 0);
4661             SvCUR_set(sstr, 0);
4662             SvTEMP_off(sstr);
4663         }
4664         else if (flags & SV_COW_SHARED_HASH_KEYS
4665               &&
4666 #ifdef PERL_COPY_ON_WRITE
4667                  (sflags & SVf_IsCOW
4668                    ? (!len ||
4669                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4670                           /* If this is a regular (non-hek) COW, only so
4671                              many COW "copies" are possible. */
4672                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4673                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4674                      && !(SvFLAGS(dstr) & SVf_BREAK)
4675                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4676                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4677                     ))
4678 #else
4679                  sflags & SVf_IsCOW
4680               && !(SvFLAGS(dstr) & SVf_BREAK)
4681 #endif
4682             ) {
4683             /* Either it's a shared hash key, or it's suitable for
4684                copy-on-write.  */
4685             if (DEBUG_C_TEST) {
4686                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4687                 sv_dump(sstr);
4688                 sv_dump(dstr);
4689             }
4690 #ifdef PERL_ANY_COW
4691             if (!(sflags & SVf_IsCOW)) {
4692                     SvIsCOW_on(sstr);
4693                     CowREFCNT(sstr) = 0;
4694             }
4695 #endif
4696             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4697                 SvPV_free(dstr);
4698             }
4699
4700 #ifdef PERL_ANY_COW
4701             if (len) {
4702                     if (sflags & SVf_IsCOW) {
4703                         sv_buf_to_rw(sstr);
4704                     }
4705                     CowREFCNT(sstr)++;
4706                     SvPV_set(dstr, SvPVX_mutable(sstr));
4707                     sv_buf_to_ro(sstr);
4708             } else
4709 #endif
4710             {
4711                     /* SvIsCOW_shared_hash */
4712                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4713                                           "Copy on write: Sharing hash\n"));
4714
4715                     assert (SvTYPE(dstr) >= SVt_PV);
4716                     SvPV_set(dstr,
4717                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4718             }
4719             SvLEN_set(dstr, len);
4720             SvCUR_set(dstr, cur);
4721             SvIsCOW_on(dstr);
4722         } else {
4723             /* Failed the swipe test, and we cannot do copy-on-write either.
4724                Have to copy the string.  */
4725             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4726             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4727             SvCUR_set(dstr, cur);
4728             *SvEND(dstr) = '\0';
4729         }
4730         if (sflags & SVp_NOK) {
4731             SvNV_set(dstr, SvNVX(sstr));
4732         }
4733         if (sflags & SVp_IOK) {
4734             SvIV_set(dstr, SvIVX(sstr));
4735             /* Must do this otherwise some other overloaded use of 0x80000000
4736                gets confused. I guess SVpbm_VALID */
4737             if (sflags & SVf_IVisUV)
4738                 SvIsUV_on(dstr);
4739         }
4740         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4741         {
4742             const MAGIC * const smg = SvVSTRING_mg(sstr);
4743             if (smg) {
4744                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4745                          smg->mg_ptr, smg->mg_len);
4746                 SvRMAGICAL_on(dstr);
4747             }
4748         }
4749     }
4750     else if (sflags & (SVp_IOK|SVp_NOK)) {
4751         (void)SvOK_off(dstr);
4752         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4753         if (sflags & SVp_IOK) {
4754             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4755             SvIV_set(dstr, SvIVX(sstr));
4756         }
4757         if (sflags & SVp_NOK) {
4758             SvNV_set(dstr, SvNVX(sstr));
4759         }
4760     }
4761     else {
4762         if (isGV_with_GP(sstr)) {
4763             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4764         }
4765         else
4766             (void)SvOK_off(dstr);
4767     }
4768     if (SvTAINTED(sstr))
4769         SvTAINT(dstr);
4770 }
4771
4772 /*
4773 =for apidoc sv_setsv_mg
4774
4775 Like C<sv_setsv>, but also handles 'set' magic.
4776
4777 =cut
4778 */
4779
4780 void
4781 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4782 {
4783     PERL_ARGS_ASSERT_SV_SETSV_MG;
4784
4785     sv_setsv(dstr,sstr);
4786     SvSETMAGIC(dstr);
4787 }
4788
4789 #ifdef PERL_ANY_COW
4790 #  define SVt_COW SVt_PV
4791 SV *
4792 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4793 {
4794     STRLEN cur = SvCUR(sstr);
4795     STRLEN len = SvLEN(sstr);
4796     char *new_pv;
4797 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4798     const bool already = cBOOL(SvIsCOW(sstr));
4799 #endif
4800
4801     PERL_ARGS_ASSERT_SV_SETSV_COW;
4802
4803     if (DEBUG_C_TEST) {
4804         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4805                       (void*)sstr, (void*)dstr);
4806         sv_dump(sstr);
4807         if (dstr)
4808                     sv_dump(dstr);
4809     }
4810
4811     if (dstr) {
4812         if (SvTHINKFIRST(dstr))
4813             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4814         else if (SvPVX_const(dstr))
4815             Safefree(SvPVX_mutable(dstr));
4816     }
4817     else
4818         new_SV(dstr);
4819     SvUPGRADE(dstr, SVt_COW);
4820
4821     assert (SvPOK(sstr));
4822     assert (SvPOKp(sstr));
4823
4824     if (SvIsCOW(sstr)) {
4825
4826         if (SvLEN(sstr) == 0) {
4827             /* source is a COW shared hash key.  */
4828             DEBUG_C(PerlIO_printf(Perl_debug_log,
4829                                   "Fast copy on write: Sharing hash\n"));
4830             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4831             goto common_exit;
4832         }
4833         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4834         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4835     } else {
4836         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4837         SvUPGRADE(sstr, SVt_COW);
4838         SvIsCOW_on(sstr);
4839         DEBUG_C(PerlIO_printf(Perl_debug_log,
4840                               "Fast copy on write: Converting sstr to COW\n"));
4841         CowREFCNT(sstr) = 0;    
4842     }
4843 #  ifdef PERL_DEBUG_READONLY_COW
4844     if (already) sv_buf_to_rw(sstr);
4845 #  endif
4846     CowREFCNT(sstr)++;  
4847     new_pv = SvPVX_mutable(sstr);
4848     sv_buf_to_ro(sstr);
4849
4850   common_exit:
4851     SvPV_set(dstr, new_pv);
4852     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4853     if (SvUTF8(sstr))
4854         SvUTF8_on(dstr);
4855     SvLEN_set(dstr, len);
4856     SvCUR_set(dstr, cur);
4857     if (DEBUG_C_TEST) {
4858         sv_dump(dstr);
4859     }
4860     return dstr;
4861 }
4862 #endif
4863
4864 /*
4865 =for apidoc sv_setpvn
4866
4867 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4868 The C<len> parameter indicates the number of
4869 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4870 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4871
4872 =cut
4873 */
4874
4875 void
4876 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4877 {
4878     char *dptr;
4879
4880     PERL_ARGS_ASSERT_SV_SETPVN;
4881
4882     SV_CHECK_THINKFIRST_COW_DROP(sv);
4883     if (!ptr) {
4884         (void)SvOK_off(sv);
4885         return;
4886     }
4887     else {
4888         /* len is STRLEN which is unsigned, need to copy to signed */
4889         const IV iv = len;
4890         if (iv < 0)
4891             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4892                        IVdf, iv);
4893     }
4894     SvUPGRADE(sv, SVt_PV);
4895
4896     dptr = SvGROW(sv, len + 1);
4897     Move(ptr,dptr,len,char);
4898     dptr[len] = '\0';
4899     SvCUR_set(sv, len);
4900     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4901     SvTAINT(sv);
4902     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4903 }
4904
4905 /*
4906 =for apidoc sv_setpvn_mg
4907
4908 Like C<sv_setpvn>, but also handles 'set' magic.
4909
4910 =cut
4911 */
4912
4913 void
4914 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4915 {
4916     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4917
4918     sv_setpvn(sv,ptr,len);
4919     SvSETMAGIC(sv);
4920 }
4921
4922 /*
4923 =for apidoc sv_setpv
4924
4925 Copies a string into an SV.  The string must be terminated with a C<NUL>
4926 character.
4927 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4928
4929 =cut
4930 */
4931
4932 void
4933 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4934 {
4935     STRLEN len;
4936
4937     PERL_ARGS_ASSERT_SV_SETPV;
4938
4939     SV_CHECK_THINKFIRST_COW_DROP(sv);
4940     if (!ptr) {
4941         (void)SvOK_off(sv);
4942         return;
4943     }
4944     len = strlen(ptr);
4945     SvUPGRADE(sv, SVt_PV);
4946
4947     SvGROW(sv, len + 1);
4948     Move(ptr,SvPVX(sv),len+1,char);
4949     SvCUR_set(sv, len);
4950     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4951     SvTAINT(sv);
4952     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4953 }
4954
4955 /*
4956 =for apidoc sv_setpv_mg
4957
4958 Like C<sv_setpv>, but also handles 'set' magic.
4959
4960 =cut
4961 */
4962
4963 void
4964 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4965 {
4966     PERL_ARGS_ASSERT_SV_SETPV_MG;
4967
4968     sv_setpv(sv,ptr);
4969     SvSETMAGIC(sv);
4970 }
4971
4972 void
4973 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4974 {
4975     PERL_ARGS_ASSERT_SV_SETHEK;
4976
4977     if (!hek) {
4978         return;
4979     }
4980
4981     if (HEK_LEN(hek) == HEf_SVKEY) {
4982         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4983         return;
4984     } else {
4985         const int flags = HEK_FLAGS(hek);
4986         if (flags & HVhek_WASUTF8) {
4987             STRLEN utf8_len = HEK_LEN(hek);
4988             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4989             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4990             SvUTF8_on(sv);
4991             return;
4992         } else if (flags & HVhek_UNSHARED) {
4993             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4994             if (HEK_UTF8(hek))
4995                 SvUTF8_on(sv);
4996             else SvUTF8_off(sv);
4997             return;
4998         }
4999         {
5000             SV_CHECK_THINKFIRST_COW_DROP(sv);
5001             SvUPGRADE(sv, SVt_PV);
5002             SvPV_free(sv);
5003             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5004             SvCUR_set(sv, HEK_LEN(hek));
5005             SvLEN_set(sv, 0);
5006             SvIsCOW_on(sv);
5007             SvPOK_on(sv);
5008             if (HEK_UTF8(hek))
5009                 SvUTF8_on(sv);
5010             else SvUTF8_off(sv);
5011             return;
5012         }
5013     }
5014 }
5015
5016
5017 /*
5018 =for apidoc sv_usepvn_flags
5019
5020 Tells an SV to use C<ptr> to find its string value.  Normally the
5021 string is stored inside the SV, but sv_usepvn allows the SV to use an
5022 outside string.  C<ptr> should point to memory that was allocated
5023 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5024 the start of a C<Newx>-ed block of memory, and not a pointer to the
5025 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5026 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5027 string length, C<len>, must be supplied.  By default this function
5028 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5029 so that pointer should not be freed or used by the programmer after
5030 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5031 that pointer (e.g. ptr + 1) be used.
5032
5033 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5034 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5035 and the realloc
5036 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5037 C<len>, and already meets the requirements for storing in C<SvPVX>).
5038
5039 =cut
5040 */
5041
5042 void
5043 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5044 {
5045     STRLEN allocate;
5046
5047     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5048
5049     SV_CHECK_THINKFIRST_COW_DROP(sv);
5050     SvUPGRADE(sv, SVt_PV);
5051     if (!ptr) {
5052         (void)SvOK_off(sv);
5053         if (flags & SV_SMAGIC)
5054             SvSETMAGIC(sv);
5055         return;
5056     }
5057     if (SvPVX_const(sv))
5058         SvPV_free(sv);
5059
5060 #ifdef DEBUGGING
5061     if (flags & SV_HAS_TRAILING_NUL)
5062         assert(ptr[len] == '\0');
5063 #endif
5064
5065     allocate = (flags & SV_HAS_TRAILING_NUL)
5066         ? len + 1 :
5067 #ifdef Perl_safesysmalloc_size
5068         len + 1;
5069 #else 
5070         PERL_STRLEN_ROUNDUP(len + 1);
5071 #endif
5072     if (flags & SV_HAS_TRAILING_NUL) {
5073         /* It's long enough - do nothing.
5074            Specifically Perl_newCONSTSUB is relying on this.  */
5075     } else {
5076 #ifdef DEBUGGING
5077         /* Force a move to shake out bugs in callers.  */
5078         char *new_ptr = (char*)safemalloc(allocate);
5079         Copy(ptr, new_ptr, len, char);
5080         PoisonFree(ptr,len,char);
5081         Safefree(ptr);
5082         ptr = new_ptr;
5083 #else
5084         ptr = (char*) saferealloc (ptr, allocate);
5085 #endif
5086     }
5087 #ifdef Perl_safesysmalloc_size
5088     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5089 #else
5090     SvLEN_set(sv, allocate);
5091 #endif
5092     SvCUR_set(sv, len);
5093     SvPV_set(sv, ptr);
5094     if (!(flags & SV_HAS_TRAILING_NUL)) {
5095         ptr[len] = '\0';
5096     }
5097     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5098     SvTAINT(sv);
5099     if (flags & SV_SMAGIC)
5100         SvSETMAGIC(sv);
5101 }
5102
5103 /*
5104 =for apidoc sv_force_normal_flags
5105
5106 Undo various types of fakery on an SV, where fakery means
5107 "more than" a string: if the PV is a shared string, make
5108 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5109 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5110 we do the copy, and is also used locally; if this is a
5111 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5112 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5113 C<SvPOK_off> rather than making a copy.  (Used where this
5114 scalar is about to be set to some other value.)  In addition,
5115 the C<flags> parameter gets passed to C<sv_unref_flags()>
5116 when unreffing.  C<sv_force_normal> calls this function
5117 with flags set to 0.
5118
5119 This function is expected to be used to signal to perl that this SV is
5120 about to be written to, and any extra book-keeping needs to be taken care
5121 of.  Hence, it croaks on read-only values.
5122
5123 =cut
5124 */
5125
5126 static void
5127 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5128 {
5129     assert(SvIsCOW(sv));
5130     {
5131 #ifdef PERL_ANY_COW
5132         const char * const pvx = SvPVX_const(sv);
5133         const STRLEN len = SvLEN(sv);
5134         const STRLEN cur = SvCUR(sv);
5135
5136         if (DEBUG_C_TEST) {
5137                 PerlIO_printf(Perl_debug_log,
5138                               "Copy on write: Force normal %ld\n",
5139                               (long) flags);
5140                 sv_dump(sv);
5141         }
5142         SvIsCOW_off(sv);
5143 # ifdef PERL_COPY_ON_WRITE
5144         if (len) {
5145             /* Must do this first, since the CowREFCNT uses SvPVX and
5146             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5147             the only owner left of the buffer. */
5148             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5149             {
5150                 U8 cowrefcnt = CowREFCNT(sv);
5151                 if(cowrefcnt != 0) {
5152                     cowrefcnt--;
5153                     CowREFCNT(sv) = cowrefcnt;
5154                     sv_buf_to_ro(sv);
5155                     goto copy_over;
5156                 }
5157             }
5158             /* Else we are the only owner of the buffer. */
5159         }
5160         else
5161 # endif
5162         {
5163             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5164             copy_over:
5165             SvPV_set(sv, NULL);
5166             SvCUR_set(sv, 0);
5167             SvLEN_set(sv, 0);
5168             if (flags & SV_COW_DROP_PV) {
5169                 /* OK, so we don't need to copy our buffer.  */
5170                 SvPOK_off(sv);
5171             } else {
5172                 SvGROW(sv, cur + 1);
5173                 Move(pvx,SvPVX(sv),cur,char);
5174                 SvCUR_set(sv, cur);
5175                 *SvEND(sv) = '\0';
5176             }
5177             if (len) {
5178             } else {
5179                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5180             }
5181             if (DEBUG_C_TEST) {
5182                 sv_dump(sv);
5183             }
5184         }
5185 #else
5186             const char * const pvx = SvPVX_const(sv);
5187             const STRLEN len = SvCUR(sv);
5188             SvIsCOW_off(sv);
5189             SvPV_set(sv, NULL);
5190             SvLEN_set(sv, 0);
5191             if (flags & SV_COW_DROP_PV) {
5192                 /* OK, so we don't need to copy our buffer.  */
5193                 SvPOK_off(sv);
5194             } else {
5195                 SvGROW(sv, len + 1);
5196                 Move(pvx,SvPVX(sv),len,char);
5197                 *SvEND(sv) = '\0';
5198             }
5199             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5200 #endif
5201     }
5202 }
5203
5204 void
5205 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5206 {
5207     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5208
5209     if (SvREADONLY(sv))
5210         Perl_croak_no_modify();
5211     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5212         S_sv_uncow(aTHX_ sv, flags);
5213     if (SvROK(sv))
5214         sv_unref_flags(sv, flags);
5215     else if (SvFAKE(sv) && isGV_with_GP(sv))
5216         sv_unglob(sv, flags);
5217     else if (SvFAKE(sv) && isREGEXP(sv)) {
5218         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5219            to sv_unglob. We only need it here, so inline it.  */
5220         const bool islv = SvTYPE(sv) == SVt_PVLV;
5221         const svtype new_type =
5222           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5223         SV *const temp = newSV_type(new_type);
5224         regexp *const temp_p = ReANY((REGEXP *)sv);
5225
5226         if (new_type == SVt_PVMG) {
5227             SvMAGIC_set(temp, SvMAGIC(sv));
5228             SvMAGIC_set(sv, NULL);
5229             SvSTASH_set(temp, SvSTASH(sv));
5230             SvSTASH_set(sv, NULL);
5231         }
5232         if (!islv) SvCUR_set(temp, SvCUR(sv));
5233         /* Remember that SvPVX is in the head, not the body.  But
5234            RX_WRAPPED is in the body. */
5235         assert(ReANY((REGEXP *)sv)->mother_re);
5236         /* Their buffer is already owned by someone else. */
5237         if (flags & SV_COW_DROP_PV) {
5238             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5239                zeroed body.  For SVt_PVLV, it should have been set to 0
5240                before turning into a regexp. */
5241             assert(!SvLEN(islv ? sv : temp));
5242             sv->sv_u.svu_pv = 0;
5243         }
5244         else {
5245             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5246             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5247             SvPOK_on(sv);
5248         }
5249
5250         /* Now swap the rest of the bodies. */
5251
5252         SvFAKE_off(sv);
5253         if (!islv) {
5254             SvFLAGS(sv) &= ~SVTYPEMASK;
5255             SvFLAGS(sv) |= new_type;
5256             SvANY(sv) = SvANY(temp);
5257         }
5258
5259         SvFLAGS(temp) &= ~(SVTYPEMASK);
5260         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5261         SvANY(temp) = temp_p;
5262         temp->sv_u.svu_rx = (regexp *)temp_p;
5263
5264         SvREFCNT_dec_NN(temp);
5265     }
5266     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5267 }
5268
5269 /*
5270 =for apidoc sv_chop
5271
5272 Efficient removal of characters from the beginning of the string buffer.
5273 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5274 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5275 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5276 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5277
5278 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5279 refer to the same chunk of data.
5280
5281 The unfortunate similarity of this function's name to that of Perl's C<chop>
5282 operator is strictly coincidental.  This function works from the left;
5283 C<chop> works from the right.
5284
5285 =cut
5286 */
5287
5288 void
5289 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5290 {
5291     STRLEN delta;
5292     STRLEN old_delta;
5293     U8 *p;
5294 #ifdef DEBUGGING
5295     const U8 *evacp;
5296     STRLEN evacn;
5297 #endif
5298     STRLEN max_delta;
5299
5300     PERL_ARGS_ASSERT_SV_CHOP;
5301
5302     if (!ptr || !SvPOKp(sv))
5303         return;
5304     delta = ptr - SvPVX_const(sv);
5305     if (!delta) {
5306         /* Nothing to do.  */
5307         return;
5308     }
5309     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5310     if (delta > max_delta)
5311         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5312                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5313     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5314     SV_CHECK_THINKFIRST(sv);
5315     SvPOK_only_UTF8(sv);
5316
5317     if (!SvOOK(sv)) {
5318         if (!SvLEN(sv)) { /* make copy of shared string */
5319             const char *pvx = SvPVX_const(sv);
5320             const STRLEN len = SvCUR(sv);
5321             SvGROW(sv, len + 1);
5322             Move(pvx,SvPVX(sv),len,char);
5323             *SvEND(sv) = '\0';
5324         }
5325         SvOOK_on(sv);
5326         old_delta = 0;
5327     } else {
5328         SvOOK_offset(sv, old_delta);
5329     }
5330     SvLEN_set(sv, SvLEN(sv) - delta);
5331     SvCUR_set(sv, SvCUR(sv) - delta);
5332     SvPV_set(sv, SvPVX(sv) + delta);
5333
5334     p = (U8 *)SvPVX_const(sv);
5335
5336 #ifdef DEBUGGING
5337     /* how many bytes were evacuated?  we will fill them with sentinel
5338        bytes, except for the part holding the new offset of course. */
5339     evacn = delta;
5340     if (old_delta)
5341         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5342     assert(evacn);
5343     assert(evacn <= delta + old_delta);
5344     evacp = p - evacn;
5345 #endif
5346
5347     /* This sets 'delta' to the accumulated value of all deltas so far */
5348     delta += old_delta;
5349     assert(delta);
5350
5351     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5352      * the string; otherwise store a 0 byte there and store 'delta' just prior
5353      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5354      * portion of the chopped part of the string */
5355     if (delta < 0x100) {
5356         *--p = (U8) delta;
5357     } else {
5358         *--p = 0;
5359         p -= sizeof(STRLEN);
5360         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5361     }
5362
5363 #ifdef DEBUGGING
5364     /* Fill the preceding buffer with sentinals to verify that no-one is
5365        using it.  */
5366     while (p > evacp) {
5367         --p;
5368         *p = (U8)PTR2UV(p);
5369     }
5370 #endif
5371 }
5372
5373 /*
5374 =for apidoc sv_catpvn
5375
5376 Concatenates the string onto the end of the string which is in the SV.
5377 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5378 status set, then the bytes appended should be valid UTF-8.
5379 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5380
5381 =for apidoc sv_catpvn_flags
5382
5383 Concatenates the string onto the end of the string which is in the SV.  The
5384 C<len> indicates number of bytes to copy.
5385
5386 By default, the string appended is assumed to be valid UTF-8 if the SV has
5387 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5388 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5389 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5390 string appended will be upgraded to UTF-8 if necessary.
5391
5392 If C<flags> has the C<SV_SMAGIC> bit set, will
5393 C<mg_set> on C<dsv> afterwards if appropriate.
5394 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5395 in terms of this function.
5396
5397 =cut
5398 */
5399
5400 void
5401 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5402 {
5403     STRLEN dlen;
5404     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5405
5406     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5407     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5408
5409     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5410       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5411          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5412          dlen = SvCUR(dsv);
5413       }
5414       else SvGROW(dsv, dlen + slen + 1);
5415       if (sstr == dstr)
5416         sstr = SvPVX_const(dsv);
5417       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5418       SvCUR_set(dsv, SvCUR(dsv) + slen);
5419     }
5420     else {
5421         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5422         const char * const send = sstr + slen;
5423         U8 *d;
5424
5425         /* Something this code does not account for, which I think is
5426            impossible; it would require the same pv to be treated as
5427            bytes *and* utf8, which would indicate a bug elsewhere. */
5428         assert(sstr != dstr);
5429
5430         SvGROW(dsv, dlen + slen * 2 + 1);
5431         d = (U8 *)SvPVX(dsv) + dlen;
5432
5433         while (sstr < send) {
5434             append_utf8_from_native_byte(*sstr, &d);
5435             sstr++;
5436         }
5437         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5438     }
5439     *SvEND(dsv) = '\0';
5440     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5441     SvTAINT(dsv);
5442     if (flags & SV_SMAGIC)
5443         SvSETMAGIC(dsv);
5444 }
5445
5446 /*
5447 =for apidoc sv_catsv
5448
5449 Concatenates the string from SV C<ssv> onto the end of the string in SV
5450 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5451 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5452 and C<L</sv_catsv_nomg>>.
5453
5454 =for apidoc sv_catsv_flags
5455
5456 Concatenates the string from SV C<ssv> onto the end of the string in SV
5457 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5458 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5459 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5460 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5461 and C<sv_catsv_mg> are implemented in terms of this function.
5462
5463 =cut */
5464
5465 void
5466 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5467 {
5468     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5469
5470     if (ssv) {
5471         STRLEN slen;
5472         const char *spv = SvPV_flags_const(ssv, slen, flags);
5473         if (flags & SV_GMAGIC)
5474                 SvGETMAGIC(dsv);
5475         sv_catpvn_flags(dsv, spv, slen,
5476                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5477         if (flags & SV_SMAGIC)
5478                 SvSETMAGIC(dsv);
5479     }
5480 }
5481
5482 /*
5483 =for apidoc sv_catpv
5484
5485 Concatenates the C<NUL>-terminated string onto the end of the string which is
5486 in the SV.
5487 If the SV has the UTF-8 status set, then the bytes appended should be
5488 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5489 C<L</sv_catpv_mg>>.
5490
5491 =cut */
5492
5493 void
5494 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5495 {
5496     STRLEN len;
5497     STRLEN tlen;
5498     char *junk;
5499
5500     PERL_ARGS_ASSERT_SV_CATPV;
5501
5502     if (!ptr)
5503         return;
5504     junk = SvPV_force(sv, tlen);
5505     len = strlen(ptr);
5506     SvGROW(sv, tlen + len + 1);
5507     if (ptr == junk)
5508         ptr = SvPVX_const(sv);
5509     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5510     SvCUR_set(sv, SvCUR(sv) + len);
5511     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5512     SvTAINT(sv);
5513 }
5514
5515 /*
5516 =for apidoc sv_catpv_flags
5517
5518 Concatenates the C<NUL>-terminated string onto the end of the string which is
5519 in the SV.
5520 If the SV has the UTF-8 status set, then the bytes appended should
5521 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5522 on the modified SV if appropriate.
5523
5524 =cut
5525 */
5526
5527 void
5528 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5529 {
5530     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5531     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5532 }
5533
5534 /*
5535 =for apidoc sv_catpv_mg
5536
5537 Like C<sv_catpv>, but also handles 'set' magic.
5538
5539 =cut
5540 */
5541
5542 void
5543 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5544 {
5545     PERL_ARGS_ASSERT_SV_CATPV_MG;
5546
5547     sv_catpv(sv,ptr);
5548     SvSETMAGIC(sv);
5549 }
5550
5551 /*
5552 =for apidoc newSV
5553
5554 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5555 bytes of preallocated string space the SV should have.  An extra byte for a
5556 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5557 space is allocated.)  The reference count for the new SV is set to 1.
5558
5559 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5560 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5561 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5562 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5563 modules supporting older perls.
5564
5565 =cut
5566 */
5567
5568 SV *
5569 Perl_newSV(pTHX_ const STRLEN len)
5570 {
5571     SV *sv;
5572
5573     new_SV(sv);
5574     if (len) {
5575         sv_grow(sv, len + 1);
5576     }
5577     return sv;
5578 }
5579 /*
5580 =for apidoc sv_magicext
5581
5582 Adds magic to an SV, upgrading it if necessary.  Applies the
5583 supplied C<vtable> and returns a pointer to the magic added.
5584
5585 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5586 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5587 one instance of the same C<how>.
5588
5589 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5590 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5591 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5592 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5593
5594 (This is now used as a subroutine by C<sv_magic>.)
5595
5596 =cut
5597 */
5598 MAGIC * 
5599 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5600                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5601 {
5602     MAGIC* mg;
5603
5604     PERL_ARGS_ASSERT_SV_MAGICEXT;
5605
5606     SvUPGRADE(sv, SVt_PVMG);
5607     Newxz(mg, 1, MAGIC);
5608     mg->mg_moremagic = SvMAGIC(sv);
5609     SvMAGIC_set(sv, mg);
5610
5611     /* Sometimes a magic contains a reference loop, where the sv and
5612        object refer to each other.  To prevent a reference loop that
5613        would prevent such objects being freed, we look for such loops
5614        and if we find one we avoid incrementing the object refcount.
5615
5616        Note we cannot do this to avoid self-tie loops as intervening RV must
5617        have its REFCNT incremented to keep it in existence.
5618
5619     */
5620     if (!obj || obj == sv ||
5621         how == PERL_MAGIC_arylen ||
5622         how == PERL_MAGIC_symtab ||
5623         (SvTYPE(obj) == SVt_PVGV &&
5624             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5625              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5626              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5627     {
5628         mg->mg_obj = obj;
5629     }
5630     else {
5631         mg->mg_obj = SvREFCNT_inc_simple(obj);
5632         mg->mg_flags |= MGf_REFCOUNTED;
5633     }
5634
5635     /* Normal self-ties simply pass a null object, and instead of
5636        using mg_obj directly, use the SvTIED_obj macro to produce a
5637        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5638        with an RV obj pointing to the glob containing the PVIO.  In
5639        this case, to avoid a reference loop, we need to weaken the
5640        reference.
5641     */
5642
5643     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5644         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5645     {
5646       sv_rvweaken(obj);
5647     }
5648
5649     mg->mg_type = how;
5650     mg->mg_len = namlen;
5651     if (name) {
5652         if (namlen > 0)
5653             mg->mg_ptr = savepvn(name, namlen);
5654         else if (namlen == HEf_SVKEY) {
5655             /* Yes, this is casting away const. This is only for the case of
5656                HEf_SVKEY. I think we need to document this aberation of the
5657                constness of the API, rather than making name non-const, as
5658                that change propagating outwards a long way.  */
5659             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5660         } else
5661             mg->mg_ptr = (char *) name;
5662     }
5663     mg->mg_virtual = (MGVTBL *) vtable;
5664
5665     mg_magical(sv);
5666     return mg;
5667 }
5668
5669 MAGIC *
5670 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5671 {
5672     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5673     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5674         /* This sv is only a delegate.  //g magic must be attached to
5675            its target. */
5676         vivify_defelem(sv);
5677         sv = LvTARG(sv);
5678     }
5679     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5680                        &PL_vtbl_mglob, 0, 0);
5681 }
5682
5683 /*
5684 =for apidoc sv_magic
5685
5686 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5687 necessary, then adds a new magic item of type C<how> to the head of the
5688 magic list.
5689
5690 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5691 handling of the C<name> and C<namlen> arguments.
5692
5693 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5694 to add more than one instance of the same C<how>.
5695
5696 =cut
5697 */
5698
5699 void
5700 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5701              const char *const name, const I32 namlen)
5702 {
5703     const MGVTBL *vtable;
5704     MAGIC* mg;
5705     unsigned int flags;
5706     unsigned int vtable_index;
5707
5708     PERL_ARGS_ASSERT_SV_MAGIC;
5709
5710     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5711         || ((flags = PL_magic_data[how]),
5712             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5713             > magic_vtable_max))
5714         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5715
5716     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5717        Useful for attaching extension internal data to perl vars.
5718        Note that multiple extensions may clash if magical scalars
5719        etc holding private data from one are passed to another. */
5720
5721     vtable = (vtable_index == magic_vtable_max)
5722         ? NULL : PL_magic_vtables + vtable_index;
5723
5724     if (SvREADONLY(sv)) {
5725         if (
5726             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5727            )
5728         {
5729             Perl_croak_no_modify();
5730         }
5731     }
5732     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5733         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5734             /* sv_magic() refuses to add a magic of the same 'how' as an
5735                existing one
5736              */
5737             if (how == PERL_MAGIC_taint)
5738                 mg->mg_len |= 1;
5739             return;
5740         }
5741     }
5742
5743     /* Force pos to be stored as characters, not bytes. */
5744     if (SvMAGICAL(sv) && DO_UTF8(sv)
5745       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5746       && mg->mg_len != -1
5747       && mg->mg_flags & MGf_BYTES) {
5748         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5749                                                SV_CONST_RETURN);
5750         mg->mg_flags &= ~MGf_BYTES;
5751     }
5752
5753     /* Rest of work is done else where */
5754     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5755
5756     switch (how) {
5757     case PERL_MAGIC_taint:
5758         mg->mg_len = 1;
5759         break;
5760     case PERL_MAGIC_ext:
5761     case PERL_MAGIC_dbfile:
5762         SvRMAGICAL_on(sv);
5763         break;
5764     }
5765 }
5766
5767 static int
5768 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5769 {
5770     MAGIC* mg;
5771     MAGIC** mgp;
5772
5773     assert(flags <= 1);
5774
5775     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5776         return 0;
5777     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5778     for (mg = *mgp; mg; mg = *mgp) {
5779         const MGVTBL* const virt = mg->mg_virtual;
5780         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5781             *mgp = mg->mg_moremagic;
5782             if (virt && virt->svt_free)
5783                 virt->svt_free(aTHX_ sv, mg);
5784             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5785                 if (mg->mg_len > 0)
5786                     Safefree(mg->mg_ptr);
5787                 else if (mg->mg_len == HEf_SVKEY)
5788                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5789                 else if (mg->mg_type == PERL_MAGIC_utf8)
5790                     Safefree(mg->mg_ptr);
5791             }
5792             if (mg->mg_flags & MGf_REFCOUNTED)
5793                 SvREFCNT_dec(mg->mg_obj);
5794             Safefree(mg);
5795         }
5796         else
5797             mgp = &mg->mg_moremagic;
5798     }
5799     if (SvMAGIC(sv)) {
5800         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5801             mg_magical(sv);     /*    else fix the flags now */
5802     }
5803     else
5804         SvMAGICAL_off(sv);
5805
5806     return 0;
5807 }
5808
5809 /*
5810 =for apidoc sv_unmagic
5811
5812 Removes all magic of type C<type> from an SV.
5813
5814 =cut
5815 */
5816
5817 int
5818 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5819 {
5820     PERL_ARGS_ASSERT_SV_UNMAGIC;
5821     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5822 }
5823
5824 /*
5825 =for apidoc sv_unmagicext
5826
5827 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5828
5829 =cut
5830 */
5831
5832 int
5833 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5834 {
5835     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5836     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5837 }
5838
5839 /*
5840 =for apidoc sv_rvweaken
5841
5842 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5843 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5844 push a back-reference to this RV onto the array of backreferences
5845 associated with that magic.  If the RV is magical, set magic will be
5846 called after the RV is cleared.
5847
5848 =cut
5849 */
5850
5851 SV *
5852 Perl_sv_rvweaken(pTHX_ SV *const sv)
5853 {
5854     SV *tsv;
5855
5856     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5857
5858     if (!SvOK(sv))  /* let undefs pass */
5859         return sv;
5860     if (!SvROK(sv))
5861         Perl_croak(aTHX_ "Can't weaken a nonreference");
5862     else if (SvWEAKREF(sv)) {
5863         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5864         return sv;
5865     }
5866     else if (SvREADONLY(sv)) croak_no_modify();
5867     tsv = SvRV(sv);
5868     Perl_sv_add_backref(aTHX_ tsv, sv);
5869     SvWEAKREF_on(sv);
5870     SvREFCNT_dec_NN(tsv);
5871     return sv;
5872 }
5873
5874 /*
5875 =for apidoc sv_get_backrefs
5876
5877 If C<sv> is the target of a weak reference then it returns the back
5878 references structure associated with the sv; otherwise return C<NULL>.
5879
5880 When returning a non-null result the type of the return is relevant. If it
5881 is an AV then the elements of the AV are the weak reference RVs which
5882 point at this item. If it is any other type then the item itself is the
5883 weak reference.
5884
5885 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5886 C<Perl_sv_kill_backrefs()>
5887
5888 =cut
5889 */
5890
5891 SV *
5892 Perl_sv_get_backrefs(SV *const sv)
5893 {
5894     SV *backrefs= NULL;
5895
5896     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5897
5898     /* find slot to store array or singleton backref */
5899
5900     if (SvTYPE(sv) == SVt_PVHV) {
5901         if (SvOOK(sv)) {
5902             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5903             backrefs = (SV *)iter->xhv_backreferences;
5904         }
5905     } else if (SvMAGICAL(sv)) {
5906         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5907         if (mg)
5908             backrefs = mg->mg_obj;
5909     }
5910     return backrefs;
5911 }
5912
5913 /* Give tsv backref magic if it hasn't already got it, then push a
5914  * back-reference to sv onto the array associated with the backref magic.
5915  *
5916  * As an optimisation, if there's only one backref and it's not an AV,
5917  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5918  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5919  * active.)
5920  */
5921
5922 /* A discussion about the backreferences array and its refcount:
5923  *
5924  * The AV holding the backreferences is pointed to either as the mg_obj of
5925  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5926  * xhv_backreferences field. The array is created with a refcount
5927  * of 2. This means that if during global destruction the array gets
5928  * picked on before its parent to have its refcount decremented by the
5929  * random zapper, it won't actually be freed, meaning it's still there for
5930  * when its parent gets freed.
5931  *
5932  * When the parent SV is freed, the extra ref is killed by
5933  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5934  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5935  *
5936  * When a single backref SV is stored directly, it is not reference
5937  * counted.
5938  */
5939
5940 void
5941 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5942 {
5943     SV **svp;
5944     AV *av = NULL;
5945     MAGIC *mg = NULL;
5946
5947     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5948
5949     /* find slot to store array or singleton backref */
5950
5951     if (SvTYPE(tsv) == SVt_PVHV) {
5952         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5953     } else {
5954         if (SvMAGICAL(tsv))
5955             mg = mg_find(tsv, PERL_MAGIC_backref);
5956         if (!mg)
5957             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5958         svp = &(mg->mg_obj);
5959     }
5960
5961     /* create or retrieve the array */
5962
5963     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5964         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5965     ) {
5966         /* create array */
5967         if (mg)
5968             mg->mg_flags |= MGf_REFCOUNTED;
5969         av = newAV();
5970         AvREAL_off(av);
5971         SvREFCNT_inc_simple_void_NN(av);
5972         /* av now has a refcnt of 2; see discussion above */
5973         av_extend(av, *svp ? 2 : 1);
5974         if (*svp) {
5975             /* move single existing backref to the array */
5976             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5977         }
5978         *svp = (SV*)av;
5979     }
5980     else {
5981         av = MUTABLE_AV(*svp);
5982         if (!av) {
5983             /* optimisation: store single backref directly in HvAUX or mg_obj */
5984             *svp = sv;
5985             return;
5986         }
5987         assert(SvTYPE(av) == SVt_PVAV);
5988         if (AvFILLp(av) >= AvMAX(av)) {
5989             av_extend(av, AvFILLp(av)+1);
5990         }
5991     }
5992     /* push new backref */
5993     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5994 }
5995
5996 /* delete a back-reference to ourselves from the backref magic associated
5997  * with the SV we point to.
5998  */
5999
6000 void
6001 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6002 {
6003     SV **svp = NULL;
6004
6005     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6006
6007     if (SvTYPE(tsv) == SVt_PVHV) {
6008         if (SvOOK(tsv))
6009             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6010     }
6011     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6012         /* It's possible for the the last (strong) reference to tsv to have
6013            become freed *before* the last thing holding a weak reference.
6014            If both survive longer than the backreferences array, then when
6015            the referent's reference count drops to 0 and it is freed, it's
6016            not able to chase the backreferences, so they aren't NULLed.
6017
6018            For example, a CV holds a weak reference to its stash. If both the
6019            CV and the stash survive longer than the backreferences array,
6020            and the CV gets picked for the SvBREAK() treatment first,
6021            *and* it turns out that the stash is only being kept alive because
6022            of an our variable in the pad of the CV, then midway during CV
6023            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6024            It ends up pointing to the freed HV. Hence it's chased in here, and
6025            if this block wasn't here, it would hit the !svp panic just below.
6026
6027            I don't believe that "better" destruction ordering is going to help
6028            here - during global destruction there's always going to be the
6029            chance that something goes out of order. We've tried to make it
6030            foolproof before, and it only resulted in evolutionary pressure on
6031            fools. Which made us look foolish for our hubris. :-(
6032         */
6033         return;
6034     }
6035     else {
6036         MAGIC *const mg
6037             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6038         svp =  mg ? &(mg->mg_obj) : NULL;
6039     }
6040
6041     if (!svp)
6042         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6043     if (!*svp) {
6044         /* It's possible that sv is being freed recursively part way through the
6045            freeing of tsv. If this happens, the backreferences array of tsv has
6046            already been freed, and so svp will be NULL. If this is the case,
6047            we should not panic. Instead, nothing needs doing, so return.  */
6048         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6049             return;
6050         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6051                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6052     }
6053
6054     if (SvTYPE(*svp) == SVt_PVAV) {
6055 #ifdef DEBUGGING
6056         int count = 1;
6057 #endif
6058         AV * const av = (AV*)*svp;
6059         SSize_t fill;
6060         assert(!SvIS_FREED(av));
6061         fill = AvFILLp(av);
6062         assert(fill > -1);
6063         svp = AvARRAY(av);
6064         /* for an SV with N weak references to it, if all those
6065          * weak refs are deleted, then sv_del_backref will be called
6066          * N times and O(N^2) compares will be done within the backref
6067          * array. To ameliorate this potential slowness, we:
6068          * 1) make sure this code is as tight as possible;
6069          * 2) when looking for SV, look for it at both the head and tail of the
6070          *    array first before searching the rest, since some create/destroy
6071          *    patterns will cause the backrefs to be freed in order.
6072          */
6073         if (*svp == sv) {
6074             AvARRAY(av)++;
6075             AvMAX(av)--;
6076         }
6077         else {
6078             SV **p = &svp[fill];
6079             SV *const topsv = *p;
6080             if (topsv != sv) {
6081 #ifdef DEBUGGING
6082                 count = 0;
6083 #endif
6084                 while (--p > svp) {
6085                     if (*p == sv) {
6086                         /* We weren't the last entry.
6087                            An unordered list has this property that you
6088                            can take the last element off the end to fill
6089                            the hole, and it's still an unordered list :-)
6090                         */
6091                         *p = topsv;
6092 #ifdef DEBUGGING
6093                         count++;
6094 #else
6095                         break; /* should only be one */
6096 #endif
6097                     }
6098                 }
6099             }
6100         }
6101         assert(count ==1);
6102         AvFILLp(av) = fill-1;
6103     }
6104     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6105         /* freed AV; skip */
6106     }
6107     else {
6108         /* optimisation: only a single backref, stored directly */
6109         if (*svp != sv)
6110             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6111                        (void*)*svp, (void*)sv);
6112         *svp = NULL;
6113     }
6114
6115 }
6116
6117 void
6118 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6119 {
6120     SV **svp;
6121     SV **last;
6122     bool is_array;
6123
6124     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6125
6126     if (!av)
6127         return;
6128
6129     /* after multiple passes through Perl_sv_clean_all() for a thingy
6130      * that has badly leaked, the backref array may have gotten freed,
6131      * since we only protect it against 1 round of cleanup */
6132     if (SvIS_FREED(av)) {
6133         if (PL_in_clean_all) /* All is fair */
6134             return;
6135         Perl_croak(aTHX_
6136                    "panic: magic_killbackrefs (freed backref AV/SV)");
6137     }
6138
6139
6140     is_array = (SvTYPE(av) == SVt_PVAV);
6141     if (is_array) {
6142         assert(!SvIS_FREED(av));
6143         svp = AvARRAY(av);
6144         if (svp)
6145             last = svp + AvFILLp(av);
6146     }
6147     else {
6148         /* optimisation: only a single backref, stored directly */
6149         svp = (SV**)&av;
6150         last = svp;
6151     }
6152
6153     if (svp) {
6154         while (svp <= last) {
6155             if (*svp) {
6156                 SV *const referrer = *svp;
6157                 if (SvWEAKREF(referrer)) {
6158                     /* XXX Should we check that it hasn't changed? */
6159                     assert(SvROK(referrer));
6160                     SvRV_set(referrer, 0);
6161                     SvOK_off(referrer);
6162                     SvWEAKREF_off(referrer);
6163                     SvSETMAGIC(referrer);
6164                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6165                            SvTYPE(referrer) == SVt_PVLV) {
6166                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6167                     /* You lookin' at me?  */
6168                     assert(GvSTASH(referrer));
6169                     assert(GvSTASH(referrer) == (const HV *)sv);
6170                     GvSTASH(referrer) = 0;
6171                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6172                            SvTYPE(referrer) == SVt_PVFM) {
6173                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6174                         /* You lookin' at me?  */
6175                         assert(CvSTASH(referrer));
6176                         assert(CvSTASH(referrer) == (const HV *)sv);
6177                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6178                     }
6179                     else {
6180                         assert(SvTYPE(sv) == SVt_PVGV);
6181                         /* You lookin' at me?  */
6182                         assert(CvGV(referrer));
6183                         assert(CvGV(referrer) == (const GV *)sv);
6184                         anonymise_cv_maybe(MUTABLE_GV(sv),
6185                                                 MUTABLE_CV(referrer));
6186                     }
6187
6188                 } else {
6189                     Perl_croak(aTHX_
6190                                "panic: magic_killbackrefs (flags=%"UVxf")",
6191                                (UV)SvFLAGS(referrer));
6192                 }
6193
6194                 if (is_array)
6195                     *svp = NULL;
6196             }
6197             svp++;
6198         }
6199     }
6200     if (is_array) {
6201         AvFILLp(av) = -1;
6202         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6203     }
6204     return;
6205 }
6206
6207 /*
6208 =for apidoc sv_insert
6209
6210 Inserts a string at the specified offset/length within the SV.  Similar to
6211 the Perl C<substr()> function.  Handles get magic.
6212
6213 =for apidoc sv_insert_flags
6214
6215 Same as C<sv_insert>, but the extra C<flags> are passed to the
6216 C<SvPV_force_flags> that applies to C<bigstr>.
6217
6218 =cut
6219 */
6220
6221 void
6222 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6223 {
6224     char *big;
6225     char *mid;
6226     char *midend;
6227     char *bigend;
6228     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6229     STRLEN curlen;
6230
6231     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6232
6233     SvPV_force_flags(bigstr, curlen, flags);
6234     (void)SvPOK_only_UTF8(bigstr);
6235     if (offset + len > curlen) {
6236         SvGROW(bigstr, offset+len+1);
6237         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6238         SvCUR_set(bigstr, offset+len);
6239     }
6240
6241     SvTAINT(bigstr);
6242     i = littlelen - len;
6243     if (i > 0) {                        /* string might grow */
6244         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6245         mid = big + offset + len;
6246         midend = bigend = big + SvCUR(bigstr);
6247         bigend += i;
6248         *bigend = '\0';
6249         while (midend > mid)            /* shove everything down */
6250             *--bigend = *--midend;
6251         Move(little,big+offset,littlelen,char);
6252         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6253         SvSETMAGIC(bigstr);
6254         return;
6255     }
6256     else if (i == 0) {
6257         Move(little,SvPVX(bigstr)+offset,len,char);
6258         SvSETMAGIC(bigstr);
6259         return;
6260     }
6261
6262     big = SvPVX(bigstr);
6263     mid = big + offset;
6264     midend = mid + len;
6265     bigend = big + SvCUR(bigstr);
6266
6267     if (midend > bigend)
6268         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6269                    midend, bigend);
6270
6271     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6272         if (littlelen) {
6273             Move(little, mid, littlelen,char);
6274             mid += littlelen;
6275         }
6276         i = bigend - midend;
6277         if (i > 0) {
6278             Move(midend, mid, i,char);
6279             mid += i;
6280         }
6281         *mid = '\0';
6282         SvCUR_set(bigstr, mid - big);
6283     }
6284     else if ((i = mid - big)) { /* faster from front */
6285         midend -= littlelen;
6286         mid = midend;
6287         Move(big, midend - i, i, char);
6288         sv_chop(bigstr,midend-i);
6289         if (littlelen)
6290             Move(little, mid, littlelen,char);
6291     }
6292     else if (littlelen) {
6293         midend -= littlelen;
6294         sv_chop(bigstr,midend);
6295         Move(little,midend,littlelen,char);
6296     }
6297     else {
6298         sv_chop(bigstr,midend);
6299     }
6300     SvSETMAGIC(bigstr);
6301 }
6302
6303 /*
6304 =for apidoc sv_replace
6305
6306 Make the first argument a copy of the second, then delete the original.
6307 The target SV physically takes over ownership of the body of the source SV
6308 and inherits its flags; however, the target keeps any magic it owns,
6309 and any magic in the source is discarded.
6310 Note that this is a rather specialist SV copying operation; most of the
6311 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6312
6313 =cut
6314 */
6315
6316 void
6317 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6318 {
6319     const U32 refcnt = SvREFCNT(sv);
6320
6321     PERL_ARGS_ASSERT_SV_REPLACE;
6322
6323     SV_CHECK_THINKFIRST_COW_DROP(sv);
6324     if (SvREFCNT(nsv) != 1) {
6325         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6326                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6327     }
6328     if (SvMAGICAL(sv)) {
6329         if (SvMAGICAL(nsv))
6330             mg_free(nsv);
6331         else
6332             sv_upgrade(nsv, SVt_PVMG);
6333         SvMAGIC_set(nsv, SvMAGIC(sv));
6334         SvFLAGS(nsv) |= SvMAGICAL(sv);
6335         SvMAGICAL_off(sv);
6336         SvMAGIC_set(sv, NULL);
6337     }
6338     SvREFCNT(sv) = 0;
6339     sv_clear(sv);
6340     assert(!SvREFCNT(sv));
6341 #ifdef DEBUG_LEAKING_SCALARS
6342     sv->sv_flags  = nsv->sv_flags;
6343     sv->sv_any    = nsv->sv_any;
6344     sv->sv_refcnt = nsv->sv_refcnt;
6345     sv->sv_u      = nsv->sv_u;
6346 #else
6347     StructCopy(nsv,sv,SV);
6348 #endif
6349     if(SvTYPE(sv) == SVt_IV) {
6350         SET_SVANY_FOR_BODYLESS_IV(sv);
6351     }
6352         
6353
6354     SvREFCNT(sv) = refcnt;
6355     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6356     SvREFCNT(nsv) = 0;
6357     del_SV(nsv);
6358 }
6359
6360 /* We're about to free a GV which has a CV that refers back to us.
6361  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6362  * field) */
6363
6364 STATIC void
6365 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6366 {
6367     SV *gvname;
6368     GV *anongv;
6369
6370     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6371
6372     /* be assertive! */
6373     assert(SvREFCNT(gv) == 0);
6374     assert(isGV(gv) && isGV_with_GP(gv));
6375     assert(GvGP(gv));
6376     assert(!CvANON(cv));
6377     assert(CvGV(cv) == gv);
6378     assert(!CvNAMED(cv));
6379
6380     /* will the CV shortly be freed by gp_free() ? */
6381     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6382         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6383         return;
6384     }
6385
6386     /* if not, anonymise: */
6387     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6388                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6389                     : newSVpvn_flags( "__ANON__", 8, 0 );
6390     sv_catpvs(gvname, "::__ANON__");
6391     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6392     SvREFCNT_dec_NN(gvname);
6393
6394     CvANON_on(cv);
6395     CvCVGV_RC_on(cv);
6396     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6397 }
6398
6399
6400 /*
6401 =for apidoc sv_clear
6402
6403 Clear an SV: call any destructors, free up any memory used by the body,
6404 and free the body itself.  The SV's head is I<not> freed, although
6405 its type is set to all 1's so that it won't inadvertently be assumed
6406 to be live during global destruction etc.
6407 This function should only be called when C<REFCNT> is zero.  Most of the time
6408 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6409 instead.
6410
6411 =cut
6412 */
6413
6414 void
6415 Perl_sv_clear(pTHX_ SV *const orig_sv)
6416 {
6417     dVAR;
6418     HV *stash;
6419     U32 type;
6420     const struct body_details *sv_type_details;
6421     SV* iter_sv = NULL;
6422     SV* next_sv = NULL;
6423     SV *sv = orig_sv;
6424     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6425                               Not strictly necessary */
6426
6427     PERL_ARGS_ASSERT_SV_CLEAR;
6428
6429     /* within this loop, sv is the SV currently being freed, and
6430      * iter_sv is the most recent AV or whatever that's being iterated
6431      * over to provide more SVs */
6432
6433     while (sv) {
6434
6435         type = SvTYPE(sv);
6436
6437         assert(SvREFCNT(sv) == 0);
6438         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6439
6440         if (type <= SVt_IV) {
6441             /* See the comment in sv.h about the collusion between this
6442              * early return and the overloading of the NULL slots in the
6443              * size table.  */
6444             if (SvROK(sv))
6445                 goto free_rv;
6446             SvFLAGS(sv) &= SVf_BREAK;
6447             SvFLAGS(sv) |= SVTYPEMASK;
6448             goto free_head;
6449         }
6450
6451         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6452            for another purpose  */
6453         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6454
6455         if (type >= SVt_PVMG) {
6456             if (SvOBJECT(sv)) {
6457                 if (!curse(sv, 1)) goto get_next_sv;
6458                 type = SvTYPE(sv); /* destructor may have changed it */
6459             }
6460             /* Free back-references before magic, in case the magic calls
6461              * Perl code that has weak references to sv. */
6462             if (type == SVt_PVHV) {
6463                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6464                 if (SvMAGIC(sv))
6465                     mg_free(sv);
6466             }
6467             else if (SvMAGIC(sv)) {
6468                 /* Free back-references before other types of magic. */
6469                 sv_unmagic(sv, PERL_MAGIC_backref);
6470                 mg_free(sv);
6471             }
6472             SvMAGICAL_off(sv);
6473         }
6474         switch (type) {
6475             /* case SVt_INVLIST: */
6476         case SVt_PVIO:
6477             if (IoIFP(sv) &&
6478                 IoIFP(sv) != PerlIO_stdin() &&
6479                 IoIFP(sv) != PerlIO_stdout() &&
6480                 IoIFP(sv) != PerlIO_stderr() &&
6481                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6482             {
6483                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6484                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6485                           IoTYPE(sv) == IoTYPE_RDWR   ||
6486                           IoTYPE(sv) == IoTYPE_APPEND));
6487             }
6488             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6489                 PerlDir_close(IoDIRP(sv));
6490             IoDIRP(sv) = (DIR*)NULL;
6491             Safefree(IoTOP_NAME(sv));
6492             Safefree(IoFMT_NAME(sv));
6493             Safefree(IoBOTTOM_NAME(sv));
6494             if ((const GV *)sv == PL_statgv)
6495                 PL_statgv = NULL;
6496             goto freescalar;
6497         case SVt_REGEXP:
6498             /* FIXME for plugins */
6499           freeregexp:
6500             pregfree2((REGEXP*) sv);
6501             goto freescalar;
6502         case SVt_PVCV:
6503         case SVt_PVFM:
6504             cv_undef(MUTABLE_CV(sv));
6505             /* If we're in a stash, we don't own a reference to it.
6506              * However it does have a back reference to us, which needs to
6507              * be cleared.  */
6508             if ((stash = CvSTASH(sv)))
6509                 sv_del_backref(MUTABLE_SV(stash), sv);
6510             goto freescalar;
6511         case SVt_PVHV:
6512             if (PL_last_swash_hv == (const HV *)sv) {
6513                 PL_last_swash_hv = NULL;
6514             }
6515             if (HvTOTALKEYS((HV*)sv) > 0) {
6516                 const HEK *hek;
6517                 /* this statement should match the one at the beginning of
6518                  * hv_undef_flags() */
6519                 if (   PL_phase != PERL_PHASE_DESTRUCT
6520                     && (hek = HvNAME_HEK((HV*)sv)))
6521                 {
6522                     if (PL_stashcache) {
6523                         DEBUG_o(Perl_deb(aTHX_
6524                             "sv_clear clearing PL_stashcache for '%"HEKf
6525                             "'\n",
6526                              HEKfARG(hek)));
6527                         (void)hv_deletehek(PL_stashcache,
6528                                            hek, G_DISCARD);
6529                     }
6530                     hv_name_set((HV*)sv, NULL, 0, 0);
6531                 }
6532
6533                 /* save old iter_sv in unused SvSTASH field */
6534                 assert(!SvOBJECT(sv));
6535                 SvSTASH(sv) = (HV*)iter_sv;
6536                 iter_sv = sv;
6537
6538                 /* save old hash_index in unused SvMAGIC field */
6539                 assert(!SvMAGICAL(sv));
6540                 assert(!SvMAGIC(sv));
6541                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6542                 hash_index = 0;
6543
6544                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6545                 goto get_next_sv; /* process this new sv */
6546             }
6547             /* free empty hash */
6548             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6549             assert(!HvARRAY((HV*)sv));
6550             break;
6551         case SVt_PVAV:
6552             {
6553                 AV* av = MUTABLE_AV(sv);
6554                 if (PL_comppad == av) {
6555                     PL_comppad = NULL;
6556                     PL_curpad = NULL;
6557                 }
6558                 if (AvREAL(av) && AvFILLp(av) > -1) {
6559                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6560                     /* save old iter_sv in top-most slot of AV,
6561                      * and pray that it doesn't get wiped in the meantime */
6562                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6563                     iter_sv = sv;
6564                     goto get_next_sv; /* process this new sv */
6565                 }
6566                 Safefree(AvALLOC(av));
6567             }
6568
6569             break;
6570         case SVt_PVLV:
6571             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6572                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6573                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6574                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6575             }
6576             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6577                 SvREFCNT_dec(LvTARG(sv));
6578             if (isREGEXP(sv)) goto freeregexp;
6579             /* FALLTHROUGH */
6580         case SVt_PVGV:
6581             if (isGV_with_GP(sv)) {
6582                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6583                    && HvENAME_get(stash))
6584                     mro_method_changed_in(stash);
6585                 gp_free(MUTABLE_GV(sv));
6586                 if (GvNAME_HEK(sv))
6587                     unshare_hek(GvNAME_HEK(sv));
6588                 /* If we're in a stash, we don't own a reference to it.
6589                  * However it does have a back reference to us, which
6590                  * needs to be cleared.  */
6591                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6592                         sv_del_backref(MUTABLE_SV(stash), sv);
6593             }
6594             /* FIXME. There are probably more unreferenced pointers to SVs
6595              * in the interpreter struct that we should check and tidy in
6596              * a similar fashion to this:  */
6597             /* See also S_sv_unglob, which does the same thing. */
6598             if ((const GV *)sv == PL_last_in_gv)
6599                 PL_last_in_gv = NULL;
6600             else if ((const GV *)sv == PL_statgv)
6601                 PL_statgv = NULL;
6602             else if ((const GV *)sv == PL_stderrgv)
6603                 PL_stderrgv = NULL;
6604             /* FALLTHROUGH */
6605         case SVt_PVMG:
6606         case SVt_PVNV:
6607         case SVt_PVIV:
6608         case SVt_INVLIST:
6609         case SVt_PV:
6610           freescalar:
6611             /* Don't bother with SvOOK_off(sv); as we're only going to
6612              * free it.  */
6613             if (SvOOK(sv)) {
6614                 STRLEN offset;
6615                 SvOOK_offset(sv, offset);
6616                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6617                 /* Don't even bother with turning off the OOK flag.  */
6618             }
6619             if (SvROK(sv)) {
6620             free_rv:
6621                 {
6622                     SV * const target = SvRV(sv);
6623                     if (SvWEAKREF(sv))
6624                         sv_del_backref(target, sv);
6625                     else
6626                         next_sv = target;
6627                 }
6628             }
6629 #ifdef PERL_ANY_COW
6630             else if (SvPVX_const(sv)
6631                      && !(SvTYPE(sv) == SVt_PVIO
6632                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6633             {
6634                 if (SvIsCOW(sv)) {
6635                     if (DEBUG_C_TEST) {
6636                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6637                         sv_dump(sv);
6638                     }
6639                     if (SvLEN(sv)) {
6640                         if (CowREFCNT(sv)) {
6641                             sv_buf_to_rw(sv);
6642                             CowREFCNT(sv)--;
6643                             sv_buf_to_ro(sv);
6644                             SvLEN_set(sv, 0);
6645                         }
6646                     } else {
6647                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6648                     }
6649
6650                 }
6651                 if (SvLEN(sv)) {
6652                     Safefree(SvPVX_mutable(sv));
6653                 }
6654             }
6655 #else
6656             else if (SvPVX_const(sv) && SvLEN(sv)
6657                      && !(SvTYPE(sv) == SVt_PVIO
6658                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6659                 Safefree(SvPVX_mutable(sv));
6660             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6661                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6662             }
6663 #endif
6664             break;
6665         case SVt_NV:
6666             break;
6667         }
6668
6669       free_body:
6670
6671         SvFLAGS(sv) &= SVf_BREAK;
6672         SvFLAGS(sv) |= SVTYPEMASK;
6673
6674         sv_type_details = bodies_by_type + type;
6675         if (sv_type_details->arena) {
6676             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6677                      &PL_body_roots[type]);
6678         }
6679         else if (sv_type_details->body_size) {
6680             safefree(SvANY(sv));
6681         }
6682
6683       free_head:
6684         /* caller is responsible for freeing the head of the original sv */
6685         if (sv != orig_sv && !SvREFCNT(sv))
6686             del_SV(sv);
6687
6688         /* grab and free next sv, if any */
6689       get_next_sv:
6690         while (1) {
6691             sv = NULL;
6692             if (next_sv) {
6693                 sv = next_sv;
6694                 next_sv = NULL;
6695             }
6696             else if (!iter_sv) {
6697                 break;
6698             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6699                 AV *const av = (AV*)iter_sv;
6700                 if (AvFILLp(av) > -1) {
6701                     sv = AvARRAY(av)[AvFILLp(av)--];
6702                 }
6703                 else { /* no more elements of current AV to free */
6704                     sv = iter_sv;
6705                     type = SvTYPE(sv);
6706                     /* restore previous value, squirrelled away */
6707                     iter_sv = AvARRAY(av)[AvMAX(av)];
6708                     Safefree(AvALLOC(av));
6709                     goto free_body;
6710                 }
6711             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6712                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6713                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6714                     /* no more elements of current HV to free */
6715                     sv = iter_sv;
6716                     type = SvTYPE(sv);
6717                     /* Restore previous values of iter_sv and hash_index,
6718                      * squirrelled away */
6719                     assert(!SvOBJECT(sv));
6720                     iter_sv = (SV*)SvSTASH(sv);
6721                     assert(!SvMAGICAL(sv));
6722                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6723 #ifdef DEBUGGING
6724                     /* perl -DA does not like rubbish in SvMAGIC. */
6725                     SvMAGIC_set(sv, 0);
6726 #endif
6727
6728                     /* free any remaining detritus from the hash struct */
6729                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6730                     assert(!HvARRAY((HV*)sv));
6731                     goto free_body;
6732                 }
6733             }
6734
6735             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6736
6737             if (!sv)
6738                 continue;
6739             if (!SvREFCNT(sv)) {
6740                 sv_free(sv);
6741                 continue;
6742             }
6743             if (--(SvREFCNT(sv)))
6744                 continue;
6745 #ifdef DEBUGGING
6746             if (SvTEMP(sv)) {
6747                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6748                          "Attempt to free temp prematurely: SV 0x%"UVxf
6749                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6750                 continue;
6751             }
6752 #endif
6753             if (SvIMMORTAL(sv)) {
6754                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6755                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6756                 continue;
6757             }
6758             break;
6759         } /* while 1 */
6760
6761     } /* while sv */
6762 }
6763
6764 /* This routine curses the sv itself, not the object referenced by sv. So
6765    sv does not have to be ROK. */
6766
6767 static bool
6768 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6769     PERL_ARGS_ASSERT_CURSE;
6770     assert(SvOBJECT(sv));
6771
6772     if (PL_defstash &&  /* Still have a symbol table? */
6773         SvDESTROYABLE(sv))
6774     {
6775         dSP;
6776         HV* stash;
6777         do {
6778           stash = SvSTASH(sv);
6779           assert(SvTYPE(stash) == SVt_PVHV);
6780           if (HvNAME(stash)) {
6781             CV* destructor = NULL;
6782             struct mro_meta *meta;
6783
6784             assert (SvOOK(stash));
6785
6786             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6787                          HvNAME(stash)) );
6788
6789             /* don't make this an initialization above the assert, since it needs
6790                an AUX structure */
6791             meta = HvMROMETA(stash);
6792             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6793                 destructor = meta->destroy;
6794                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6795                              (void *)destructor, HvNAME(stash)) );
6796             }
6797             else {
6798                 bool autoload = FALSE;
6799                 GV *gv =
6800                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6801                 if (gv)
6802                     destructor = GvCV(gv);
6803                 if (!destructor) {
6804                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6805                                          GV_AUTOLOAD_ISMETHOD);
6806                     if (gv)
6807                         destructor = GvCV(gv);
6808                     if (destructor)
6809                         autoload = TRUE;
6810                 }
6811                 /* we don't cache AUTOLOAD for DESTROY, since this code
6812                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6813                    equivalent for XS AUTOLOADs */
6814                 if (!autoload) {
6815                     meta->destroy_gen = PL_sub_generation;
6816                     meta->destroy = destructor;
6817
6818                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6819                                       (void *)destructor, HvNAME(stash)) );
6820                 }
6821                 else {
6822                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6823                                       HvNAME(stash)) );
6824                 }
6825             }
6826             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6827             if (destructor
6828                 /* A constant subroutine can have no side effects, so
6829                    don't bother calling it.  */
6830                 && !CvCONST(destructor)
6831                 /* Don't bother calling an empty destructor or one that
6832                    returns immediately. */
6833                 && (CvISXSUB(destructor)
6834                 || (CvSTART(destructor)
6835                     && (CvSTART(destructor)->op_next->op_type
6836                                         != OP_LEAVESUB)
6837                     && (CvSTART(destructor)->op_next->op_type
6838                                         != OP_PUSHMARK
6839                         || CvSTART(destructor)->op_next->op_next->op_type
6840                                         != OP_RETURN
6841                        )
6842                    ))
6843                )
6844             {
6845                 SV* const tmpref = newRV(sv);
6846                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6847                 ENTER;
6848                 PUSHSTACKi(PERLSI_DESTROY);
6849                 EXTEND(SP, 2);
6850                 PUSHMARK(SP);
6851                 PUSHs(tmpref);
6852                 PUTBACK;
6853                 call_sv(MUTABLE_SV(destructor),
6854                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6855                 POPSTACK;
6856                 SPAGAIN;
6857                 LEAVE;
6858                 if(SvREFCNT(tmpref) < 2) {
6859                     /* tmpref is not kept alive! */
6860                     SvREFCNT(sv)--;
6861                     SvRV_set(tmpref, NULL);
6862                     SvROK_off(tmpref);
6863                 }
6864                 SvREFCNT_dec_NN(tmpref);
6865             }
6866           }
6867         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6868
6869
6870         if (check_refcnt && SvREFCNT(sv)) {
6871             if (PL_in_clean_objs)
6872                 Perl_croak(aTHX_
6873                   "DESTROY created new reference to dead object '%"HEKf"'",
6874                    HEKfARG(HvNAME_HEK(stash)));
6875             /* DESTROY gave object new lease on life */
6876             return FALSE;
6877         }
6878     }
6879
6880     if (SvOBJECT(sv)) {
6881         HV * const stash = SvSTASH(sv);
6882         /* Curse before freeing the stash, as freeing the stash could cause
6883            a recursive call into S_curse. */
6884         SvOBJECT_off(sv);       /* Curse the object. */
6885         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6886         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6887     }
6888     return TRUE;
6889 }
6890
6891 /*
6892 =for apidoc sv_newref
6893
6894 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6895 instead.
6896
6897 =cut
6898 */
6899
6900 SV *
6901 Perl_sv_newref(pTHX_ SV *const sv)
6902 {
6903     PERL_UNUSED_CONTEXT;
6904     if (sv)
6905         (SvREFCNT(sv))++;
6906     return sv;
6907 }
6908
6909 /*
6910 =for apidoc sv_free
6911
6912 Decrement an SV's reference count, and if it drops to zero, call
6913 C<sv_clear> to invoke destructors and free up any memory used by
6914 the body; finally, deallocating the SV's head itself.
6915 Normally called via a wrapper macro C<SvREFCNT_dec>.
6916
6917 =cut
6918 */
6919
6920 void
6921 Perl_sv_free(pTHX_ SV *const sv)
6922 {
6923     SvREFCNT_dec(sv);
6924 }
6925
6926
6927 /* Private helper function for SvREFCNT_dec().
6928  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6929
6930 void
6931 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6932 {
6933     dVAR;
6934
6935     PERL_ARGS_ASSERT_SV_FREE2;
6936
6937     if (LIKELY( rc == 1 )) {
6938         /* normal case */
6939         SvREFCNT(sv) = 0;
6940
6941 #ifdef DEBUGGING
6942         if (SvTEMP(sv)) {
6943             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6944                              "Attempt to free temp prematurely: SV 0x%"UVxf
6945                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6946             return;
6947         }
6948 #endif
6949         if (SvIMMORTAL(sv)) {
6950             /* make sure SvREFCNT(sv)==0 happens very seldom */
6951             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6952             return;
6953         }
6954         sv_clear(sv);
6955         if (! SvREFCNT(sv)) /* may have have been resurrected */
6956             del_SV(sv);
6957         return;
6958     }
6959
6960     /* handle exceptional cases */
6961
6962     assert(rc == 0);
6963
6964     if (SvFLAGS(sv) & SVf_BREAK)
6965         /* this SV's refcnt has been artificially decremented to
6966          * trigger cleanup */
6967         return;
6968     if (PL_in_clean_all) /* All is fair */
6969         return;
6970     if (SvIMMORTAL(sv)) {
6971         /* make sure SvREFCNT(sv)==0 happens very seldom */
6972         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6973         return;
6974     }
6975     if (ckWARN_d(WARN_INTERNAL)) {
6976 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6977         Perl_dump_sv_child(aTHX_ sv);
6978 #else
6979     #ifdef DEBUG_LEAKING_SCALARS
6980         sv_dump(sv);
6981     #endif
6982 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6983         if (PL_warnhook == PERL_WARNHOOK_FATAL
6984             || ckDEAD(packWARN(WARN_INTERNAL))) {
6985             /* Don't let Perl_warner cause us to escape our fate:  */
6986             abort();
6987         }
6988 #endif
6989         /* This may not return:  */
6990         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6991                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6992                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6993 #endif
6994     }
6995 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6996     abort();
6997 #endif
6998
6999 }
7000
7001
7002 /*
7003 =for apidoc sv_len
7004
7005 Returns the length of the string in the SV.  Handles magic and type
7006 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7007 gives raw access to the C<xpv_cur> slot.
7008
7009 =cut
7010 */
7011
7012 STRLEN
7013 Perl_sv_len(pTHX_ SV *const sv)
7014 {
7015     STRLEN len;
7016
7017     if (!sv)
7018         return 0;
7019
7020     (void)SvPV_const(sv, len);
7021     return len;
7022 }
7023
7024 /*
7025 =for apidoc sv_len_utf8
7026
7027 Returns the number of characters in the string in an SV, counting wide
7028 UTF-8 bytes as a single character.  Handles magic and type coercion.
7029
7030 =cut
7031 */
7032
7033 /*
7034  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7035  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7036  * (Note that the mg_len is not the length of the mg_ptr field.
7037  * This allows the cache to store the character length of the string without
7038  * needing to malloc() extra storage to attach to the mg_ptr.)
7039  *
7040  */
7041
7042 STRLEN
7043 Perl_sv_len_utf8(pTHX_ SV *const sv)
7044 {
7045     if (!sv)
7046         return 0;
7047
7048     SvGETMAGIC(sv);
7049     return sv_len_utf8_nomg(sv);
7050 }
7051
7052 STRLEN
7053 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7054 {
7055     STRLEN len;
7056     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7057
7058     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7059
7060     if (PL_utf8cache && SvUTF8(sv)) {
7061             STRLEN ulen;
7062             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7063
7064             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7065                 if (mg->mg_len != -1)
7066                     ulen = mg->mg_len;
7067                 else {
7068                     /* We can use the offset cache for a headstart.
7069                        The longer value is stored in the first pair.  */
7070                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7071
7072                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7073                                                        s + len);
7074                 }
7075                 
7076                 if (PL_utf8cache < 0) {
7077                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7078                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7079                 }
7080             }
7081             else {
7082                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7083                 utf8_mg_len_cache_update(sv, &mg, ulen);
7084             }
7085             return ulen;
7086     }
7087     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7088 }
7089
7090 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7091    offset.  */
7092 static STRLEN
7093 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7094                       STRLEN *const uoffset_p, bool *const at_end)
7095 {
7096     const U8 *s = start;
7097     STRLEN uoffset = *uoffset_p;
7098
7099     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7100
7101     while (s < send && uoffset) {
7102         --uoffset;
7103         s += UTF8SKIP(s);
7104     }
7105     if (s == send) {
7106         *at_end = TRUE;
7107     }
7108     else if (s > send) {
7109         *at_end = TRUE;
7110         /* This is the existing behaviour. Possibly it should be a croak, as
7111            it's actually a bounds error  */
7112         s = send;
7113     }
7114     *uoffset_p -= uoffset;
7115     return s - start;
7116 }
7117
7118 /* Given the length of the string in both bytes and UTF-8 characters, decide
7119    whether to walk forwards or backwards to find the byte corresponding to
7120    the passed in UTF-8 offset.  */
7121 static STRLEN
7122 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7123                     STRLEN uoffset, const STRLEN uend)
7124 {
7125     STRLEN backw = uend - uoffset;
7126
7127     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7128
7129     if (uoffset < 2 * backw) {
7130         /* The assumption is that going forwards is twice the speed of going
7131            forward (that's where the 2 * backw comes from).
7132            (The real figure of course depends on the UTF-8 data.)  */
7133         const U8 *s = start;
7134
7135         while (s < send && uoffset--)
7136             s += UTF8SKIP(s);
7137         assert (s <= send);
7138         if (s > send)
7139             s = send;
7140         return s - start;
7141     }
7142
7143     while (backw--) {
7144         send--;
7145         while (UTF8_IS_CONTINUATION(*send))
7146             send--;
7147     }
7148     return send - start;
7149 }
7150
7151 /* For the string representation of the given scalar, find the byte
7152    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7153    give another position in the string, *before* the sought offset, which
7154    (which is always true, as 0, 0 is a valid pair of positions), which should
7155    help reduce the amount of linear searching.
7156    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7157    will be used to reduce the amount of linear searching. The cache will be
7158    created if necessary, and the found value offered to it for update.  */
7159 static STRLEN
7160 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7161                     const U8 *const send, STRLEN uoffset,
7162                     STRLEN uoffset0, STRLEN boffset0)
7163 {
7164     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7165     bool found = FALSE;
7166     bool at_end = FALSE;
7167
7168     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7169
7170     assert (uoffset >= uoffset0);
7171
7172     if (!uoffset)
7173         return 0;
7174
7175     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7176         && PL_utf8cache
7177         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7178                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7179         if ((*mgp)->mg_ptr) {
7180             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7181             if (cache[0] == uoffset) {
7182                 /* An exact match. */
7183                 return cache[1];
7184             }
7185             if (cache[2] == uoffset) {
7186                 /* An exact match. */
7187                 return cache[3];
7188             }
7189
7190             if (cache[0] < uoffset) {
7191                 /* The cache already knows part of the way.   */
7192                 if (cache[0] > uoffset0) {
7193                     /* The cache knows more than the passed in pair  */
7194                     uoffset0 = cache[0];
7195                     boffset0 = cache[1];
7196                 }
7197                 if ((*mgp)->mg_len != -1) {
7198                     /* And we know the end too.  */
7199                     boffset = boffset0
7200                         + sv_pos_u2b_midway(start + boffset0, send,
7201                                               uoffset - uoffset0,
7202                                               (*mgp)->mg_len - uoffset0);
7203                 } else {
7204                     uoffset -= uoffset0;
7205                     boffset = boffset0
7206                         + sv_pos_u2b_forwards(start + boffset0,
7207                                               send, &uoffset, &at_end);
7208                     uoffset += uoffset0;
7209                 }
7210             }
7211             else if (cache[2] < uoffset) {
7212                 /* We're between the two cache entries.  */
7213                 if (cache[2] > uoffset0) {
7214                     /* and the cache knows more than the passed in pair  */
7215                     uoffset0 = cache[2];
7216                     boffset0 = cache[3];
7217                 }
7218
7219                 boffset = boffset0
7220                     + sv_pos_u2b_midway(start + boffset0,
7221                                           start + cache[1],
7222                                           uoffset - uoffset0,
7223                                           cache[0] - uoffset0);
7224             } else {
7225                 boffset = boffset0
7226                     + sv_pos_u2b_midway(start + boffset0,
7227                                           start + cache[3],
7228                                           uoffset - uoffset0,
7229                                           cache[2] - uoffset0);
7230             }
7231             found = TRUE;
7232         }
7233         else if ((*mgp)->mg_len != -1) {
7234             /* If we can take advantage of a passed in offset, do so.  */
7235             /* In fact, offset0 is either 0, or less than offset, so don't
7236                need to worry about the other possibility.  */
7237             boffset = boffset0
7238                 + sv_pos_u2b_midway(start + boffset0, send,
7239                                       uoffset - uoffset0,
7240                                       (*mgp)->mg_len - uoffset0);
7241             found = TRUE;
7242         }
7243     }
7244
7245     if (!found || PL_utf8cache < 0) {
7246         STRLEN real_boffset;
7247         uoffset -= uoffset0;
7248         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7249                                                       send, &uoffset, &at_end);
7250         uoffset += uoffset0;
7251
7252         if (found && PL_utf8cache < 0)
7253             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7254                                        real_boffset, sv);
7255         boffset = real_boffset;
7256     }
7257
7258     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7259         if (at_end)
7260             utf8_mg_len_cache_update(sv, mgp, uoffset);
7261         else
7262             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7263     }
7264     return boffset;
7265 }
7266
7267
7268 /*
7269 =for apidoc sv_pos_u2b_flags
7270
7271 Converts the offset from a count of UTF-8 chars from
7272 the start of the string, to a count of the equivalent number of bytes; if
7273 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7274 C<offset>, rather than from the start
7275 of the string.  Handles type coercion.
7276 C<flags> is passed to C<SvPV_flags>, and usually should be
7277 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7278
7279 =cut
7280 */
7281
7282 /*
7283  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7284  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7285  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7286  *
7287  */
7288
7289 STRLEN
7290 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7291                       U32 flags)
7292 {
7293     const U8 *start;
7294     STRLEN len;
7295     STRLEN boffset;
7296
7297     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7298
7299     start = (U8*)SvPV_flags(sv, len, flags);
7300     if (len) {
7301         const U8 * const send = start + len;
7302         MAGIC *mg = NULL;
7303         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7304
7305         if (lenp
7306             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7307                         is 0, and *lenp is already set to that.  */) {
7308             /* Convert the relative offset to absolute.  */
7309             const STRLEN uoffset2 = uoffset + *lenp;
7310             const STRLEN boffset2
7311                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7312                                       uoffset, boffset) - boffset;
7313
7314             *lenp = boffset2;
7315         }
7316     } else {
7317         if (lenp)
7318             *lenp = 0;
7319         boffset = 0;
7320     }
7321
7322     return boffset;
7323 }
7324
7325 /*
7326 =for apidoc sv_pos_u2b
7327
7328 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7329 the start of the string, to a count of the equivalent number of bytes; if
7330 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7331 the offset, rather than from the start of the string.  Handles magic and
7332 type coercion.
7333
7334 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7335 than 2Gb.
7336
7337 =cut
7338 */
7339
7340 /*
7341  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7342  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7343  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7344  *
7345  */
7346
7347 /* This function is subject to size and sign problems */
7348
7349 void
7350 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7351 {
7352     PERL_ARGS_ASSERT_SV_POS_U2B;
7353
7354     if (lenp) {
7355         STRLEN ulen = (STRLEN)*lenp;
7356         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7357                                          SV_GMAGIC|SV_CONST_RETURN);
7358         *lenp = (I32)ulen;
7359     } else {
7360         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7361                                          SV_GMAGIC|SV_CONST_RETURN);
7362     }
7363 }
7364
7365 static void
7366 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7367                            const STRLEN ulen)
7368 {
7369     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7370     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7371         return;
7372
7373     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7374                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7375         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7376     }
7377     assert(*mgp);
7378
7379     (*mgp)->mg_len = ulen;
7380 }
7381
7382 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7383    byte length pairing. The (byte) length of the total SV is passed in too,
7384    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7385    may not have updated SvCUR, so we can't rely on reading it directly.
7386
7387    The proffered utf8/byte length pairing isn't used if the cache already has
7388    two pairs, and swapping either for the proffered pair would increase the
7389    RMS of the intervals between known byte offsets.
7390
7391    The cache itself consists of 4 STRLEN values
7392    0: larger UTF-8 offset
7393    1: corresponding byte offset
7394    2: smaller UTF-8 offset
7395    3: corresponding byte offset
7396
7397    Unused cache pairs have the value 0, 0.
7398    Keeping the cache "backwards" means that the invariant of
7399    cache[0] >= cache[2] is maintained even with empty slots, which means that
7400    the code that uses it doesn't need to worry if only 1 entry has actually
7401    been set to non-zero.  It also makes the "position beyond the end of the
7402    cache" logic much simpler, as the first slot is always the one to start
7403    from.   
7404 */
7405 static void
7406 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7407                            const STRLEN utf8, const STRLEN blen)
7408 {
7409     STRLEN *cache;
7410
7411     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7412
7413     if (SvREADONLY(sv))
7414         return;
7415
7416     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7417                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7418         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7419                            0);
7420         (*mgp)->mg_len = -1;
7421     }
7422     assert(*mgp);
7423
7424     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7425         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7426         (*mgp)->mg_ptr = (char *) cache;
7427     }
7428     assert(cache);
7429
7430     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7431         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7432            a pointer.  Note that we no longer cache utf8 offsets on refer-
7433            ences, but this check is still a good idea, for robustness.  */
7434         const U8 *start = (const U8 *) SvPVX_const(sv);
7435         const STRLEN realutf8 = utf8_length(start, start + byte);
7436
7437         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7438                                    sv);
7439     }
7440
7441     /* Cache is held with the later position first, to simplify the code
7442        that deals with unbounded ends.  */
7443        
7444     ASSERT_UTF8_CACHE(cache);
7445     if (cache[1] == 0) {
7446         /* Cache is totally empty  */
7447         cache[0] = utf8;
7448         cache[1] = byte;
7449     } else if (cache[3] == 0) {
7450         if (byte > cache[1]) {
7451             /* New one is larger, so goes first.  */
7452             cache[2] = cache[0];
7453             cache[3] = cache[1];
7454             cache[0] = utf8;
7455             cache[1] = byte;
7456         } else {
7457             cache[2] = utf8;
7458             cache[3] = byte;
7459         }
7460     } else {
7461 /* float casts necessary? XXX */
7462 #define THREEWAY_SQUARE(a,b,c,d) \
7463             ((float)((d) - (c))) * ((float)((d) - (c))) \
7464             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7465                + ((float)((b) - (a))) * ((float)((b) - (a)))
7466
7467         /* Cache has 2 slots in use, and we know three potential pairs.
7468            Keep the two that give the lowest RMS distance. Do the
7469            calculation in bytes simply because we always know the byte
7470            length.  squareroot has the same ordering as the positive value,
7471            so don't bother with the actual square root.  */
7472         if (byte > cache[1]) {
7473             /* New position is after the existing pair of pairs.  */
7474             const float keep_earlier
7475                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7476             const float keep_later
7477                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7478
7479             if (keep_later < keep_earlier) {
7480                 cache[2] = cache[0];
7481                 cache[3] = cache[1];
7482             }
7483             cache[0] = utf8;
7484             cache[1] = byte;
7485         }
7486         else {
7487             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7488             float b, c, keep_earlier;
7489             if (byte > cache[3]) {
7490                 /* New position is between the existing pair of pairs.  */
7491                 b = (float)cache[3];
7492                 c = (float)byte;
7493             } else {
7494                 /* New position is before the existing pair of pairs.  */
7495                 b = (float)byte;
7496                 c = (float)cache[3];
7497             }
7498             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7499             if (byte > cache[3]) {
7500                 if (keep_later < keep_earlier) {
7501                     cache[2] = utf8;
7502                     cache[3] = byte;
7503                 }
7504                 else {
7505                     cache[0] = utf8;
7506                     cache[1] = byte;
7507                 }
7508             }
7509             else {
7510                 if (! (keep_later < keep_earlier)) {
7511                     cache[0] = cache[2];
7512                     cache[1] = cache[3];
7513                 }
7514                 cache[2] = utf8;
7515                 cache[3] = byte;
7516             }
7517         }
7518     }
7519     ASSERT_UTF8_CACHE(cache);
7520 }
7521
7522 /* We already know all of the way, now we may be able to walk back.  The same
7523    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7524    backward is half the speed of walking forward. */
7525 static STRLEN
7526 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7527                     const U8 *end, STRLEN endu)
7528 {
7529     const STRLEN forw = target - s;
7530     STRLEN backw = end - target;
7531
7532     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7533
7534     if (forw < 2 * backw) {
7535         return utf8_length(s, target);
7536     }
7537
7538     while (end > target) {
7539         end--;
7540         while (UTF8_IS_CONTINUATION(*end)) {
7541             end--;
7542         }
7543         endu--;
7544     }
7545     return endu;
7546 }
7547
7548 /*
7549 =for apidoc sv_pos_b2u_flags
7550
7551 Converts C<offset> from a count of bytes from the start of the string, to
7552 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7553 C<flags> is passed to C<SvPV_flags>, and usually should be
7554 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7555
7556 =cut
7557 */
7558
7559 /*
7560  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7561  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7562  * and byte offsets.
7563  *
7564  */
7565 STRLEN
7566 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7567 {
7568     const U8* s;
7569     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7570     STRLEN blen;
7571     MAGIC* mg = NULL;
7572     const U8* send;
7573     bool found = FALSE;
7574
7575     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7576
7577     s = (const U8*)SvPV_flags(sv, blen, flags);
7578
7579     if (blen < offset)
7580         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7581                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7582
7583     send = s + offset;
7584
7585     if (!SvREADONLY(sv)
7586         && PL_utf8cache
7587         && SvTYPE(sv) >= SVt_PVMG
7588         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7589     {
7590         if (mg->mg_ptr) {
7591             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7592             if (cache[1] == offset) {
7593                 /* An exact match. */
7594                 return cache[0];
7595             }
7596             if (cache[3] == offset) {
7597                 /* An exact match. */
7598                 return cache[2];
7599             }
7600
7601             if (cache[1] < offset) {
7602                 /* We already know part of the way. */
7603                 if (mg->mg_len != -1) {
7604                     /* Actually, we know the end too.  */
7605                     len = cache[0]
7606                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7607                                               s + blen, mg->mg_len - cache[0]);
7608                 } else {
7609                     len = cache[0] + utf8_length(s + cache[1], send);
7610                 }
7611             }
7612             else if (cache[3] < offset) {
7613                 /* We're between the two cached pairs, so we do the calculation
7614                    offset by the byte/utf-8 positions for the earlier pair,
7615                    then add the utf-8 characters from the string start to
7616                    there.  */
7617                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7618                                           s + cache[1], cache[0] - cache[2])
7619                     + cache[2];
7620
7621             }
7622             else { /* cache[3] > offset */
7623                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7624                                           cache[2]);
7625
7626             }
7627             ASSERT_UTF8_CACHE(cache);
7628             found = TRUE;
7629         } else if (mg->mg_len != -1) {
7630             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7631             found = TRUE;
7632         }
7633     }
7634     if (!found || PL_utf8cache < 0) {
7635         const STRLEN real_len = utf8_length(s, send);
7636
7637         if (found && PL_utf8cache < 0)
7638             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7639         len = real_len;
7640     }
7641
7642     if (PL_utf8cache) {
7643         if (blen == offset)
7644             utf8_mg_len_cache_update(sv, &mg, len);
7645         else
7646             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7647     }
7648
7649     return len;
7650 }
7651
7652 /*
7653 =for apidoc sv_pos_b2u
7654
7655 Converts the value pointed to by C<offsetp> from a count of bytes from the
7656 start of the string, to a count of the equivalent number of UTF-8 chars.
7657 Handles magic and type coercion.
7658
7659 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7660 longer than 2Gb.
7661
7662 =cut
7663 */
7664
7665 /*
7666  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7667  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7668  * byte offsets.
7669  *
7670  */
7671 void
7672 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7673 {
7674     PERL_ARGS_ASSERT_SV_POS_B2U;
7675
7676     if (!sv)
7677         return;
7678
7679     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7680                                      SV_GMAGIC|SV_CONST_RETURN);
7681 }
7682
7683 static void
7684 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7685                              STRLEN real, SV *const sv)
7686 {
7687     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7688
7689     /* As this is debugging only code, save space by keeping this test here,
7690        rather than inlining it in all the callers.  */
7691     if (from_cache == real)
7692         return;
7693
7694     /* Need to turn the assertions off otherwise we may recurse infinitely
7695        while printing error messages.  */
7696     SAVEI8(PL_utf8cache);
7697     PL_utf8cache = 0;
7698     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7699                func, (UV) from_cache, (UV) real, SVfARG(sv));
7700 }
7701
7702 /*
7703 =for apidoc sv_eq
7704
7705 Returns a boolean indicating whether the strings in the two SVs are
7706 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7707 coerce its args to strings if necessary.
7708
7709 =for apidoc sv_eq_flags
7710
7711 Returns a boolean indicating whether the strings in the two SVs are
7712 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7713 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7714
7715 =cut
7716 */
7717
7718 I32
7719 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7720 {
7721     const char *pv1;
7722     STRLEN cur1;
7723     const char *pv2;
7724     STRLEN cur2;
7725     I32  eq     = 0;
7726     SV* svrecode = NULL;
7727
7728     if (!sv1) {
7729         pv1 = "";
7730         cur1 = 0;
7731     }
7732     else {
7733         /* if pv1 and pv2 are the same, second SvPV_const call may
7734          * invalidate pv1 (if we are handling magic), so we may need to
7735          * make a copy */
7736         if (sv1 == sv2 && flags & SV_GMAGIC
7737          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7738             pv1 = SvPV_const(sv1, cur1);
7739             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7740         }
7741         pv1 = SvPV_flags_const(sv1, cur1, flags);
7742     }
7743
7744     if (!sv2){
7745         pv2 = "";
7746         cur2 = 0;
7747     }
7748     else
7749         pv2 = SvPV_flags_const(sv2, cur2, flags);
7750
7751     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7752         /* Differing utf8ness.
7753          * Do not UTF8size the comparands as a side-effect. */
7754          if (IN_ENCODING) {
7755               if (SvUTF8(sv1)) {
7756                    svrecode = newSVpvn(pv2, cur2);
7757                    sv_recode_to_utf8(svrecode, _get_encoding());
7758                    pv2 = SvPV_const(svrecode, cur2);
7759               }
7760               else {
7761                    svrecode = newSVpvn(pv1, cur1);
7762                    sv_recode_to_utf8(svrecode, _get_encoding());
7763                    pv1 = SvPV_const(svrecode, cur1);
7764               }
7765               /* Now both are in UTF-8. */
7766               if (cur1 != cur2) {
7767                    SvREFCNT_dec_NN(svrecode);
7768                    return FALSE;
7769               }
7770          }
7771          else {
7772               if (SvUTF8(sv1)) {
7773                   /* sv1 is the UTF-8 one  */
7774                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7775                                         (const U8*)pv1, cur1) == 0;
7776               }
7777               else {
7778                   /* sv2 is the UTF-8 one  */
7779                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7780                                         (const U8*)pv2, cur2) == 0;
7781               }
7782          }
7783     }
7784
7785     if (cur1 == cur2)
7786         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7787         
7788     SvREFCNT_dec(svrecode);
7789
7790     return eq;
7791 }
7792
7793 /*
7794 =for apidoc sv_cmp
7795
7796 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7797 string in C<sv1> is less than, equal to, or greater than the string in
7798 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7799 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7800
7801 =for apidoc sv_cmp_flags
7802
7803 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7804 string in C<sv1> is less than, equal to, or greater than the string in
7805 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7806 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7807 also C<L</sv_cmp_locale_flags>>.
7808
7809 =cut
7810 */
7811
7812 I32
7813 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7814 {
7815     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7816 }
7817
7818 I32
7819 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7820                   const U32 flags)
7821 {
7822     STRLEN cur1, cur2;
7823     const char *pv1, *pv2;
7824     I32  cmp;
7825     SV *svrecode = NULL;
7826
7827     if (!sv1) {
7828         pv1 = "";
7829         cur1 = 0;
7830     }
7831     else
7832         pv1 = SvPV_flags_const(sv1, cur1, flags);
7833
7834     if (!sv2) {
7835         pv2 = "";
7836         cur2 = 0;
7837     }
7838     else
7839         pv2 = SvPV_flags_const(sv2, cur2, flags);
7840
7841     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7842         /* Differing utf8ness.
7843          * Do not UTF8size the comparands as a side-effect. */
7844         if (SvUTF8(sv1)) {
7845             if (IN_ENCODING) {
7846                  svrecode = newSVpvn(pv2, cur2);
7847                  sv_recode_to_utf8(svrecode, _get_encoding());
7848                  pv2 = SvPV_const(svrecode, cur2);
7849             }
7850             else {
7851                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7852                                                    (const U8*)pv1, cur1);
7853                 return retval ? retval < 0 ? -1 : +1 : 0;
7854             }
7855         }
7856         else {
7857             if (IN_ENCODING) {
7858                  svrecode = newSVpvn(pv1, cur1);
7859                  sv_recode_to_utf8(svrecode, _get_encoding());
7860                  pv1 = SvPV_const(svrecode, cur1);
7861             }
7862             else {
7863                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7864                                                   (const U8*)pv2, cur2);
7865                 return retval ? retval < 0 ? -1 : +1 : 0;
7866             }
7867         }
7868     }
7869
7870     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7871
7872     if (!cur1) {
7873         cmp = cur2 ? -1 : 0;
7874     } else if (!cur2) {
7875         cmp = 1;
7876     } else {
7877         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7878
7879 #ifdef EBCDIC
7880         if (! DO_UTF8(sv1)) {
7881 #endif
7882             const I32 retval = memcmp((const void*)pv1,
7883                                       (const void*)pv2,
7884                                       shortest_len);
7885             if (retval) {
7886                 cmp = retval < 0 ? -1 : 1;
7887             } else if (cur1 == cur2) {
7888                 cmp = 0;
7889             } else {
7890                 cmp = cur1 < cur2 ? -1 : 1;
7891             }
7892 #ifdef EBCDIC
7893         }
7894         else {  /* Both are to be treated as UTF-EBCDIC */
7895
7896             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7897              * which remaps code points 0-255.  We therefore generally have to
7898              * unmap back to the original values to get an accurate comparison.
7899              * But we don't have to do that for UTF-8 invariants, as by
7900              * definition, they aren't remapped, nor do we have to do it for
7901              * above-latin1 code points, as they also aren't remapped.  (This
7902              * code also works on ASCII platforms, but the memcmp() above is
7903              * much faster). */
7904
7905             const char *e = pv1 + shortest_len;
7906
7907             /* Find the first bytes that differ between the two strings */
7908             while (pv1 < e && *pv1 == *pv2) {
7909                 pv1++;
7910                 pv2++;
7911             }
7912
7913
7914             if (pv1 == e) { /* Are the same all the way to the end */
7915                 if (cur1 == cur2) {
7916                     cmp = 0;
7917                 } else {
7918                     cmp = cur1 < cur2 ? -1 : 1;
7919                 }
7920             }
7921             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7922                     * in the strings were.  The current bytes may or may not be
7923                     * at the beginning of a character.  But neither or both are
7924                     * (or else earlier bytes would have been different).  And
7925                     * if we are in the middle of a character, the two
7926                     * characters are comprised of the same number of bytes
7927                     * (because in this case the start bytes are the same, and
7928                     * the start bytes encode the character's length). */
7929                  if (UTF8_IS_INVARIANT(*pv1))
7930             {
7931                 /* If both are invariants; can just compare directly */
7932                 if (UTF8_IS_INVARIANT(*pv2)) {
7933                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7934                 }
7935                 else   /* Since *pv1 is invariant, it is the whole character,
7936                           which means it is at the beginning of a character.
7937                           That means pv2 is also at the beginning of a
7938                           character (see earlier comment).  Since it isn't
7939                           invariant, it must be a start byte.  If it starts a
7940                           character whose code point is above 255, that
7941                           character is greater than any single-byte char, which
7942                           *pv1 is */
7943                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7944                 {
7945                     cmp = -1;
7946                 }
7947                 else {
7948                     /* Here, pv2 points to a character composed of 2 bytes
7949                      * whose code point is < 256.  Get its code point and
7950                      * compare with *pv1 */
7951                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7952                            ?  -1
7953                            : 1;
7954                 }
7955             }
7956             else   /* The code point starting at pv1 isn't a single byte */
7957                  if (UTF8_IS_INVARIANT(*pv2))
7958             {
7959                 /* But here, the code point starting at *pv2 is a single byte,
7960                  * and so *pv1 must begin a character, hence is a start byte.
7961                  * If that character is above 255, it is larger than any
7962                  * single-byte char, which *pv2 is */
7963                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
7964                     cmp = 1;
7965                 }
7966                 else {
7967                     /* Here, pv1 points to a character composed of 2 bytes
7968                      * whose code point is < 256.  Get its code point and
7969                      * compare with the single byte character *pv2 */
7970                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
7971                           ?  -1
7972                           : 1;
7973                 }
7974             }
7975             else   /* Here, we've ruled out either *pv1 and *pv2 being
7976                       invariant.  That means both are part of variants, but not
7977                       necessarily at the start of a character */
7978                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
7979                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
7980             {
7981                 /* Here, at least one is the start of a character, which means
7982                  * the other is also a start byte.  And the code point of at
7983                  * least one of the characters is above 255.  It is a
7984                  * characteristic of UTF-EBCDIC that all start bytes for
7985                  * above-latin1 code points are well behaved as far as code
7986                  * point comparisons go, and all are larger than all other
7987                  * start bytes, so the comparison with those is also well
7988                  * behaved */
7989                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7990             }
7991             else {
7992                 /* Here both *pv1 and *pv2 are part of variant characters.
7993                  * They could be both continuations, or both start characters.
7994                  * (One or both could even be an illegal start character (for
7995                  * an overlong) which for the purposes of sorting we treat as
7996                  * legal. */
7997                 if (UTF8_IS_CONTINUATION(*pv1)) {
7998
7999                     /* If they are continuations for code points above 255,
8000                      * then comparing the current byte is sufficient, as there
8001                      * is no remapping of these and so the comparison is
8002                      * well-behaved.   We determine if they are such
8003                      * continuations by looking at the preceding byte.  It
8004                      * could be a start byte, from which we can tell if it is
8005                      * for an above 255 code point.  Or it could be a
8006                      * continuation, which means the character occupies at
8007                      * least 3 bytes, so must be above 255.  */
8008                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8009                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8010                     {
8011                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8012                         goto cmp_done;
8013                     }
8014
8015                     /* Here, the continuations are for code points below 256;
8016                      * back up one to get to the start byte */
8017                     pv1--;
8018                     pv2--;
8019                 }
8020
8021                 /* We need to get the actual native code point of each of these
8022                  * variants in order to compare them */
8023                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8024                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8025                         ? -1
8026                         : 1;
8027             }
8028         }
8029       cmp_done: ;
8030 #endif
8031     }
8032
8033     SvREFCNT_dec(svrecode);
8034
8035     return cmp;
8036 }
8037
8038 /*
8039 =for apidoc sv_cmp_locale
8040
8041 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8042 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8043 if necessary.  See also C<L</sv_cmp>>.
8044
8045 =for apidoc sv_cmp_locale_flags
8046
8047 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8048 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8049 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8050 C<L</sv_cmp_flags>>.
8051
8052 =cut
8053 */
8054
8055 I32
8056 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8057 {
8058     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8059 }
8060
8061 I32
8062 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8063                          const U32 flags)
8064 {
8065 #ifdef USE_LOCALE_COLLATE
8066
8067     char *pv1, *pv2;
8068     STRLEN len1, len2;
8069     I32 retval;
8070
8071     if (PL_collation_standard)
8072         goto raw_compare;
8073
8074     len1 = 0;
8075     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8076     len2 = 0;
8077     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8078
8079     if (!pv1 || !len1) {
8080         if (pv2 && len2)
8081             return -1;
8082         else
8083             goto raw_compare;
8084     }
8085     else {
8086         if (!pv2 || !len2)
8087             return 1;
8088     }
8089
8090     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8091
8092     if (retval)
8093         return retval < 0 ? -1 : 1;
8094
8095     /*
8096      * When the result of collation is equality, that doesn't mean
8097      * that there are no differences -- some locales exclude some
8098      * characters from consideration.  So to avoid false equalities,
8099      * we use the raw string as a tiebreaker.
8100      */
8101
8102   raw_compare:
8103     /* FALLTHROUGH */
8104
8105 #else
8106     PERL_UNUSED_ARG(flags);
8107 #endif /* USE_LOCALE_COLLATE */
8108
8109     return sv_cmp(sv1, sv2);
8110 }
8111
8112
8113 #ifdef USE_LOCALE_COLLATE
8114
8115 /*
8116 =for apidoc sv_collxfrm
8117
8118 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8119 C<L</sv_collxfrm_flags>>.
8120
8121 =for apidoc sv_collxfrm_flags
8122
8123 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8124 flags contain C<SV_GMAGIC>, it handles get-magic.
8125
8126 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8127 scalar data of the variable, but transformed to such a format that a normal
8128 memory comparison can be used to compare the data according to the locale
8129 settings.
8130
8131 =cut
8132 */
8133
8134 char *
8135 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8136 {
8137     MAGIC *mg;
8138
8139     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8140
8141     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8142     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8143         const char *s;
8144         char *xf;
8145         STRLEN len, xlen;
8146
8147         if (mg)
8148             Safefree(mg->mg_ptr);
8149         s = SvPV_flags_const(sv, len, flags);
8150         if ((xf = mem_collxfrm(s, len, &xlen))) {
8151             if (! mg) {
8152                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8153                                  0, 0);
8154                 assert(mg);
8155             }
8156             mg->mg_ptr = xf;
8157             mg->mg_len = xlen;
8158         }
8159         else {
8160             if (mg) {
8161                 mg->mg_ptr = NULL;
8162                 mg->mg_len = -1;
8163             }
8164         }
8165     }
8166     if (mg && mg->mg_ptr) {
8167         *nxp = mg->mg_len;
8168         return mg->mg_ptr + sizeof(PL_collation_ix);
8169     }
8170     else {
8171         *nxp = 0;
8172         return NULL;
8173     }
8174 }
8175
8176 #endif /* USE_LOCALE_COLLATE */
8177
8178 static char *
8179 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8180 {
8181     SV * const tsv = newSV(0);
8182     ENTER;
8183     SAVEFREESV(tsv);
8184     sv_gets(tsv, fp, 0);
8185     sv_utf8_upgrade_nomg(tsv);
8186     SvCUR_set(sv,append);
8187     sv_catsv(sv,tsv);
8188     LEAVE;
8189     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8190 }
8191
8192 static char *
8193 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8194 {
8195     SSize_t bytesread;
8196     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8197       /* Grab the size of the record we're getting */
8198     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8199     
8200     /* Go yank in */
8201 #ifdef __VMS
8202     int fd;
8203     Stat_t st;
8204
8205     /* With a true, record-oriented file on VMS, we need to use read directly
8206      * to ensure that we respect RMS record boundaries.  The user is responsible
8207      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8208      * record size) field.  N.B. This is likely to produce invalid results on
8209      * varying-width character data when a record ends mid-character.
8210      */
8211     fd = PerlIO_fileno(fp);
8212     if (fd != -1
8213         && PerlLIO_fstat(fd, &st) == 0
8214         && (st.st_fab_rfm == FAB$C_VAR
8215             || st.st_fab_rfm == FAB$C_VFC
8216             || st.st_fab_rfm == FAB$C_FIX)) {
8217
8218         bytesread = PerlLIO_read(fd, buffer, recsize);
8219     }
8220     else /* in-memory file from PerlIO::Scalar
8221           * or not a record-oriented file
8222           */
8223 #endif
8224     {
8225         bytesread = PerlIO_read(fp, buffer, recsize);
8226
8227         /* At this point, the logic in sv_get() means that sv will
8228            be treated as utf-8 if the handle is utf8.
8229         */
8230         if (PerlIO_isutf8(fp) && bytesread > 0) {
8231             char *bend = buffer + bytesread;
8232             char *bufp = buffer;
8233             size_t charcount = 0;
8234             bool charstart = TRUE;
8235             STRLEN skip = 0;
8236
8237             while (charcount < recsize) {
8238                 /* count accumulated characters */
8239                 while (bufp < bend) {
8240                     if (charstart) {
8241                         skip = UTF8SKIP(bufp);
8242                     }
8243                     if (bufp + skip > bend) {
8244                         /* partial at the end */
8245                         charstart = FALSE;
8246                         break;
8247                     }
8248                     else {
8249                         ++charcount;
8250                         bufp += skip;
8251                         charstart = TRUE;
8252                     }
8253                 }
8254
8255                 if (charcount < recsize) {
8256                     STRLEN readsize;
8257                     STRLEN bufp_offset = bufp - buffer;
8258                     SSize_t morebytesread;
8259
8260                     /* originally I read enough to fill any incomplete
8261                        character and the first byte of the next
8262                        character if needed, but if there's many
8263                        multi-byte encoded characters we're going to be
8264                        making a read call for every character beyond
8265                        the original read size.
8266
8267                        So instead, read the rest of the character if
8268                        any, and enough bytes to match at least the
8269                        start bytes for each character we're going to
8270                        read.
8271                     */
8272                     if (charstart)
8273                         readsize = recsize - charcount;
8274                     else 
8275                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8276                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8277                     bend = buffer + bytesread;
8278                     morebytesread = PerlIO_read(fp, bend, readsize);
8279                     if (morebytesread <= 0) {
8280                         /* we're done, if we still have incomplete
8281                            characters the check code in sv_gets() will
8282                            warn about them.
8283
8284                            I'd originally considered doing
8285                            PerlIO_ungetc() on all but the lead
8286                            character of the incomplete character, but
8287                            read() doesn't do that, so I don't.
8288                         */
8289                         break;
8290                     }
8291
8292                     /* prepare to scan some more */
8293                     bytesread += morebytesread;
8294                     bend = buffer + bytesread;
8295                     bufp = buffer + bufp_offset;
8296                 }
8297             }
8298         }
8299     }
8300
8301     if (bytesread < 0)
8302         bytesread = 0;
8303     SvCUR_set(sv, bytesread + append);
8304     buffer[bytesread] = '\0';
8305     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8306 }
8307
8308 /*
8309 =for apidoc sv_gets
8310
8311 Get a line from the filehandle and store it into the SV, optionally
8312 appending to the currently-stored string.  If C<append> is not 0, the
8313 line is appended to the SV instead of overwriting it.  C<append> should
8314 be set to the byte offset that the appended string should start at
8315 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8316
8317 =cut
8318 */
8319
8320 char *
8321 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8322 {
8323     const char *rsptr;
8324     STRLEN rslen;
8325     STDCHAR rslast;
8326     STDCHAR *bp;
8327     SSize_t cnt;
8328     int i = 0;
8329     int rspara = 0;
8330
8331     PERL_ARGS_ASSERT_SV_GETS;
8332
8333     if (SvTHINKFIRST(sv))
8334         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8335     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8336        from <>.
8337        However, perlbench says it's slower, because the existing swipe code
8338        is faster than copy on write.
8339        Swings and roundabouts.  */
8340     SvUPGRADE(sv, SVt_PV);
8341
8342     if (append) {
8343         /* line is going to be appended to the existing buffer in the sv */
8344         if (PerlIO_isutf8(fp)) {
8345             if (!SvUTF8(sv)) {
8346                 sv_utf8_upgrade_nomg(sv);
8347                 sv_pos_u2b(sv,&append,0);
8348             }
8349         } else if (SvUTF8(sv)) {
8350             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8351         }
8352     }
8353
8354     SvPOK_only(sv);
8355     if (!append) {
8356         /* not appending - "clear" the string by setting SvCUR to 0,
8357          * the pv is still avaiable. */
8358         SvCUR_set(sv,0);
8359     }
8360     if (PerlIO_isutf8(fp))
8361         SvUTF8_on(sv);
8362
8363     if (IN_PERL_COMPILETIME) {
8364         /* we always read code in line mode */
8365         rsptr = "\n";
8366         rslen = 1;
8367     }
8368     else if (RsSNARF(PL_rs)) {
8369         /* If it is a regular disk file use size from stat() as estimate
8370            of amount we are going to read -- may result in mallocing
8371            more memory than we really need if the layers below reduce
8372            the size we read (e.g. CRLF or a gzip layer).
8373          */
8374         Stat_t st;
8375         int fd = PerlIO_fileno(fp);
8376         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8377             const Off_t offset = PerlIO_tell(fp);
8378             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8379 #ifdef PERL_COPY_ON_WRITE
8380                 /* Add an extra byte for the sake of copy-on-write's
8381                  * buffer reference count. */
8382                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8383 #else
8384                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8385 #endif
8386             }
8387         }
8388         rsptr = NULL;
8389         rslen = 0;
8390     }
8391     else if (RsRECORD(PL_rs)) {
8392         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8393     }
8394     else if (RsPARA(PL_rs)) {
8395         rsptr = "\n\n";
8396         rslen = 2;
8397         rspara = 1;
8398     }
8399     else {
8400         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8401         if (PerlIO_isutf8(fp)) {
8402             rsptr = SvPVutf8(PL_rs, rslen);
8403         }
8404         else {
8405             if (SvUTF8(PL_rs)) {
8406                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8407                     Perl_croak(aTHX_ "Wide character in $/");
8408                 }
8409             }
8410             /* extract the raw pointer to the record separator */
8411             rsptr = SvPV_const(PL_rs, rslen);
8412         }
8413     }
8414
8415     /* rslast is the last character in the record separator
8416      * note we don't use rslast except when rslen is true, so the
8417      * null assign is a placeholder. */
8418     rslast = rslen ? rsptr[rslen - 1] : '\0';
8419
8420     if (rspara) {               /* have to do this both before and after */
8421         do {                    /* to make sure file boundaries work right */
8422             if (PerlIO_eof(fp))
8423                 return 0;
8424             i = PerlIO_getc(fp);
8425             if (i != '\n') {
8426                 if (i == -1)
8427                     return 0;
8428                 PerlIO_ungetc(fp,i);
8429                 break;
8430             }
8431         } while (i != EOF);
8432     }
8433
8434     /* See if we know enough about I/O mechanism to cheat it ! */
8435
8436     /* This used to be #ifdef test - it is made run-time test for ease
8437        of abstracting out stdio interface. One call should be cheap
8438        enough here - and may even be a macro allowing compile
8439        time optimization.
8440      */
8441
8442     if (PerlIO_fast_gets(fp)) {
8443     /*
8444      * We can do buffer based IO operations on this filehandle.
8445      *
8446      * This means we can bypass a lot of subcalls and process
8447      * the buffer directly, it also means we know the upper bound
8448      * on the amount of data we might read of the current buffer
8449      * into our sv. Knowing this allows us to preallocate the pv
8450      * to be able to hold that maximum, which allows us to simplify
8451      * a lot of logic. */
8452
8453     /*
8454      * We're going to steal some values from the stdio struct
8455      * and put EVERYTHING in the innermost loop into registers.
8456      */
8457     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8458     STRLEN bpx;         /* length of the data in the target sv
8459                            used to fix pointers after a SvGROW */
8460     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8461                            of data left in the read-ahead buffer.
8462                            If 0 then the pv buffer can hold the full
8463                            amount left, otherwise this is the amount it
8464                            can hold. */
8465
8466     /* Here is some breathtakingly efficient cheating */
8467
8468     /* When you read the following logic resist the urge to think
8469      * of record separators that are 1 byte long. They are an
8470      * uninteresting special (simple) case.
8471      *
8472      * Instead think of record separators which are at least 2 bytes
8473      * long, and keep in mind that we need to deal with such
8474      * separators when they cross a read-ahead buffer boundary.
8475      *
8476      * Also consider that we need to gracefully deal with separators
8477      * that may be longer than a single read ahead buffer.
8478      *
8479      * Lastly do not forget we want to copy the delimiter as well. We
8480      * are copying all data in the file _up_to_and_including_ the separator
8481      * itself.
8482      *
8483      * Now that you have all that in mind here is what is happening below:
8484      *
8485      * 1. When we first enter the loop we do some memory book keeping to see
8486      * how much free space there is in the target SV. (This sub assumes that
8487      * it is operating on the same SV most of the time via $_ and that it is
8488      * going to be able to reuse the same pv buffer each call.) If there is
8489      * "enough" room then we set "shortbuffered" to how much space there is
8490      * and start reading forward.
8491      *
8492      * 2. When we scan forward we copy from the read-ahead buffer to the target
8493      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8494      * and the end of the of pv, as well as for the "rslast", which is the last
8495      * char of the separator.
8496      *
8497      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8498      * (which has a "complete" record up to the point we saw rslast) and check
8499      * it to see if it matches the separator. If it does we are done. If it doesn't
8500      * we continue on with the scan/copy.
8501      *
8502      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8503      * the IO system to read the next buffer. We do this by doing a getc(), which
8504      * returns a single char read (or EOF), and prefills the buffer, and also
8505      * allows us to find out how full the buffer is.  We use this information to
8506      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8507      * the returned single char into the target sv, and then go back into scan
8508      * forward mode.
8509      *
8510      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8511      * remaining space in the read-buffer.
8512      *
8513      * Note that this code despite its twisty-turny nature is pretty darn slick.
8514      * It manages single byte separators, multi-byte cross boundary separators,
8515      * and cross-read-buffer separators cleanly and efficiently at the cost
8516      * of potentially greatly overallocating the target SV.
8517      *
8518      * Yves
8519      */
8520
8521
8522     /* get the number of bytes remaining in the read-ahead buffer
8523      * on first call on a given fp this will return 0.*/
8524     cnt = PerlIO_get_cnt(fp);
8525
8526     /* make sure we have the room */
8527     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8528         /* Not room for all of it
8529            if we are looking for a separator and room for some
8530          */
8531         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8532             /* just process what we have room for */
8533             shortbuffered = cnt - SvLEN(sv) + append + 1;
8534             cnt -= shortbuffered;
8535         }
8536         else {
8537             /* ensure that the target sv has enough room to hold
8538              * the rest of the read-ahead buffer */
8539             shortbuffered = 0;
8540             /* remember that cnt can be negative */
8541             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8542         }
8543     }
8544     else {
8545         /* we have enough room to hold the full buffer, lets scream */
8546         shortbuffered = 0;
8547     }
8548
8549     /* extract the pointer to sv's string buffer, offset by append as necessary */
8550     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8551     /* extract the point to the read-ahead buffer */
8552     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8553
8554     /* some trace debug output */
8555     DEBUG_P(PerlIO_printf(Perl_debug_log,
8556         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8557     DEBUG_P(PerlIO_printf(Perl_debug_log,
8558         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8559          UVuf"\n",
8560                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8561                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8562
8563     for (;;) {
8564       screamer:
8565         /* if there is stuff left in the read-ahead buffer */
8566         if (cnt > 0) {
8567             /* if there is a separator */
8568             if (rslen) {
8569                 /* loop until we hit the end of the read-ahead buffer */
8570                 while (cnt > 0) {                    /* this     |  eat */
8571                     /* scan forward copying and searching for rslast as we go */
8572                     cnt--;
8573                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8574                         goto thats_all_folks;        /* screams  |  sed :-) */
8575                 }
8576             }
8577             else {
8578                 /* no separator, slurp the full buffer */
8579                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8580                 bp += cnt;                           /* screams  |  dust */
8581                 ptr += cnt;                          /* louder   |  sed :-) */
8582                 cnt = 0;
8583                 assert (!shortbuffered);
8584                 goto cannot_be_shortbuffered;
8585             }
8586         }
8587         
8588         if (shortbuffered) {            /* oh well, must extend */
8589             /* we didnt have enough room to fit the line into the target buffer
8590              * so we must extend the target buffer and keep going */
8591             cnt = shortbuffered;
8592             shortbuffered = 0;
8593             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8594             SvCUR_set(sv, bpx);
8595             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8596             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8597             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8598             continue;
8599         }
8600
8601     cannot_be_shortbuffered:
8602         /* we need to refill the read-ahead buffer if possible */
8603
8604         DEBUG_P(PerlIO_printf(Perl_debug_log,
8605                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8606                               PTR2UV(ptr),(IV)cnt));
8607         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8608
8609         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8610            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8611             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8612             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8613
8614         /*
8615             call PerlIO_getc() to let it prefill the lookahead buffer
8616
8617             This used to call 'filbuf' in stdio form, but as that behaves like
8618             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8619             another abstraction.
8620
8621             Note we have to deal with the char in 'i' if we are not at EOF
8622         */
8623         i   = PerlIO_getc(fp);          /* get more characters */
8624
8625         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8626            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8627             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8628             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8629
8630         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8631         cnt = PerlIO_get_cnt(fp);
8632         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8633         DEBUG_P(PerlIO_printf(Perl_debug_log,
8634             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8635             PTR2UV(ptr),(IV)cnt));
8636
8637         if (i == EOF)                   /* all done for ever? */
8638             goto thats_really_all_folks;
8639
8640         /* make sure we have enough space in the target sv */
8641         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8642         SvCUR_set(sv, bpx);
8643         SvGROW(sv, bpx + cnt + 2);
8644         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8645
8646         /* copy of the char we got from getc() */
8647         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8648
8649         /* make sure we deal with the i being the last character of a separator */
8650         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8651             goto thats_all_folks;
8652     }
8653
8654   thats_all_folks:
8655     /* check if we have actually found the separator - only really applies
8656      * when rslen > 1 */
8657     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8658           memNE((char*)bp - rslen, rsptr, rslen))
8659         goto screamer;                          /* go back to the fray */
8660   thats_really_all_folks:
8661     if (shortbuffered)
8662         cnt += shortbuffered;
8663         DEBUG_P(PerlIO_printf(Perl_debug_log,
8664              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8665     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8666     DEBUG_P(PerlIO_printf(Perl_debug_log,
8667         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8668         "\n",
8669         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8670         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8671     *bp = '\0';
8672     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8673     DEBUG_P(PerlIO_printf(Perl_debug_log,
8674         "Screamer: done, len=%ld, string=|%.*s|\n",
8675         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8676     }
8677    else
8678     {
8679        /*The big, slow, and stupid way. */
8680 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8681         STDCHAR *buf = NULL;
8682         Newx(buf, 8192, STDCHAR);
8683         assert(buf);
8684 #else
8685         STDCHAR buf[8192];
8686 #endif
8687
8688       screamer2:
8689         if (rslen) {
8690             const STDCHAR * const bpe = buf + sizeof(buf);
8691             bp = buf;
8692             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8693                 ; /* keep reading */
8694             cnt = bp - buf;
8695         }
8696         else {
8697             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8698             /* Accommodate broken VAXC compiler, which applies U8 cast to
8699              * both args of ?: operator, causing EOF to change into 255
8700              */
8701             if (cnt > 0)
8702                  i = (U8)buf[cnt - 1];
8703             else
8704                  i = EOF;
8705         }
8706
8707         if (cnt < 0)
8708             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8709         if (append)
8710             sv_catpvn_nomg(sv, (char *) buf, cnt);
8711         else
8712             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8713
8714         if (i != EOF &&                 /* joy */
8715             (!rslen ||
8716              SvCUR(sv) < rslen ||
8717              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8718         {
8719             append = -1;
8720             /*
8721              * If we're reading from a TTY and we get a short read,
8722              * indicating that the user hit his EOF character, we need
8723              * to notice it now, because if we try to read from the TTY
8724              * again, the EOF condition will disappear.
8725              *
8726              * The comparison of cnt to sizeof(buf) is an optimization
8727              * that prevents unnecessary calls to feof().
8728              *
8729              * - jik 9/25/96
8730              */
8731             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8732                 goto screamer2;
8733         }
8734
8735 #ifdef USE_HEAP_INSTEAD_OF_STACK
8736         Safefree(buf);
8737 #endif
8738     }
8739
8740     if (rspara) {               /* have to do this both before and after */
8741         while (i != EOF) {      /* to make sure file boundaries work right */
8742             i = PerlIO_getc(fp);
8743             if (i != '\n') {
8744                 PerlIO_ungetc(fp,i);
8745                 break;
8746             }
8747         }
8748     }
8749
8750     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8751 }
8752
8753 /*
8754 =for apidoc sv_inc
8755
8756 Auto-increment of the value in the SV, doing string to numeric conversion
8757 if necessary.  Handles 'get' magic and operator overloading.
8758
8759 =cut
8760 */
8761
8762 void
8763 Perl_sv_inc(pTHX_ SV *const sv)
8764 {
8765     if (!sv)
8766         return;
8767     SvGETMAGIC(sv);
8768     sv_inc_nomg(sv);
8769 }
8770
8771 /*
8772 =for apidoc sv_inc_nomg
8773
8774 Auto-increment of the value in the SV, doing string to numeric conversion
8775 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8776
8777 =cut
8778 */
8779
8780 void
8781 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8782 {
8783     char *d;
8784     int flags;
8785
8786     if (!sv)
8787         return;
8788     if (SvTHINKFIRST(sv)) {
8789         if (SvREADONLY(sv)) {
8790                 Perl_croak_no_modify();
8791         }
8792         if (SvROK(sv)) {
8793             IV i;
8794             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8795                 return;
8796             i = PTR2IV(SvRV(sv));
8797             sv_unref(sv);
8798             sv_setiv(sv, i);
8799         }
8800         else sv_force_normal_flags(sv, 0);
8801     }
8802     flags = SvFLAGS(sv);
8803     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8804         /* It's (privately or publicly) a float, but not tested as an
8805            integer, so test it to see. */
8806         (void) SvIV(sv);
8807         flags = SvFLAGS(sv);
8808     }
8809     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8810         /* It's publicly an integer, or privately an integer-not-float */
8811 #ifdef PERL_PRESERVE_IVUV
8812       oops_its_int:
8813 #endif
8814         if (SvIsUV(sv)) {
8815             if (SvUVX(sv) == UV_MAX)
8816                 sv_setnv(sv, UV_MAX_P1);
8817             else
8818                 (void)SvIOK_only_UV(sv);
8819                 SvUV_set(sv, SvUVX(sv) + 1);
8820         } else {
8821             if (SvIVX(sv) == IV_MAX)
8822                 sv_setuv(sv, (UV)IV_MAX + 1);
8823             else {
8824                 (void)SvIOK_only(sv);
8825                 SvIV_set(sv, SvIVX(sv) + 1);
8826             }   
8827         }
8828         return;
8829     }
8830     if (flags & SVp_NOK) {
8831         const NV was = SvNVX(sv);
8832         if (LIKELY(!Perl_isinfnan(was)) &&
8833             NV_OVERFLOWS_INTEGERS_AT &&
8834             was >= NV_OVERFLOWS_INTEGERS_AT) {
8835             /* diag_listed_as: Lost precision when %s %f by 1 */
8836             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8837                            "Lost precision when incrementing %" NVff " by 1",
8838                            was);
8839         }
8840         (void)SvNOK_only(sv);
8841         SvNV_set(sv, was + 1.0);
8842         return;
8843     }
8844
8845     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8846     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8847         Perl_croak_no_modify();
8848
8849     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8850         if ((flags & SVTYPEMASK) < SVt_PVIV)
8851             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8852         (void)SvIOK_only(sv);
8853         SvIV_set(sv, 1);
8854         return;
8855     }
8856     d = SvPVX(sv);
8857     while (isALPHA(*d)) d++;
8858     while (isDIGIT(*d)) d++;
8859     if (d < SvEND(sv)) {
8860         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8861 #ifdef PERL_PRESERVE_IVUV
8862         /* Got to punt this as an integer if needs be, but we don't issue
8863            warnings. Probably ought to make the sv_iv_please() that does
8864            the conversion if possible, and silently.  */
8865         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8866             /* Need to try really hard to see if it's an integer.
8867                9.22337203685478e+18 is an integer.
8868                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8869                so $a="9.22337203685478e+18"; $a+0; $a++
8870                needs to be the same as $a="9.22337203685478e+18"; $a++
8871                or we go insane. */
8872         
8873             (void) sv_2iv(sv);
8874             if (SvIOK(sv))
8875                 goto oops_its_int;
8876
8877             /* sv_2iv *should* have made this an NV */
8878             if (flags & SVp_NOK) {
8879                 (void)SvNOK_only(sv);
8880                 SvNV_set(sv, SvNVX(sv) + 1.0);
8881                 return;
8882             }
8883             /* I don't think we can get here. Maybe I should assert this
8884                And if we do get here I suspect that sv_setnv will croak. NWC
8885                Fall through. */
8886             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8887                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8888         }
8889 #endif /* PERL_PRESERVE_IVUV */
8890         if (!numtype && ckWARN(WARN_NUMERIC))
8891             not_incrementable(sv);
8892         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8893         return;
8894     }
8895     d--;
8896     while (d >= SvPVX_const(sv)) {
8897         if (isDIGIT(*d)) {
8898             if (++*d <= '9')
8899                 return;
8900             *(d--) = '0';
8901         }
8902         else {
8903 #ifdef EBCDIC
8904             /* MKS: The original code here died if letters weren't consecutive.
8905              * at least it didn't have to worry about non-C locales.  The
8906              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8907              * arranged in order (although not consecutively) and that only
8908              * [A-Za-z] are accepted by isALPHA in the C locale.
8909              */
8910             if (isALPHA_FOLD_NE(*d, 'z')) {
8911                 do { ++*d; } while (!isALPHA(*d));
8912                 return;
8913             }
8914             *(d--) -= 'z' - 'a';
8915 #else
8916             ++*d;
8917             if (isALPHA(*d))
8918                 return;
8919             *(d--) -= 'z' - 'a' + 1;
8920 #endif
8921         }
8922     }
8923     /* oh,oh, the number grew */
8924     SvGROW(sv, SvCUR(sv) + 2);
8925     SvCUR_set(sv, SvCUR(sv) + 1);
8926     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8927         *d = d[-1];
8928     if (isDIGIT(d[1]))
8929         *d = '1';
8930     else
8931         *d = d[1];
8932 }
8933
8934 /*
8935 =for apidoc sv_dec
8936
8937 Auto-decrement of the value in the SV, doing string to numeric conversion
8938 if necessary.  Handles 'get' magic and operator overloading.
8939
8940 =cut
8941 */
8942
8943 void
8944 Perl_sv_dec(pTHX_ SV *const sv)
8945 {
8946     if (!sv)
8947         return;
8948     SvGETMAGIC(sv);
8949     sv_dec_nomg(sv);
8950 }
8951
8952 /*
8953 =for apidoc sv_dec_nomg
8954
8955 Auto-decrement of the value in the SV, doing string to numeric conversion
8956 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8957
8958 =cut
8959 */
8960
8961 void
8962 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8963 {
8964     int flags;
8965
8966     if (!sv)
8967         return;
8968     if (SvTHINKFIRST(sv)) {
8969         if (SvREADONLY(sv)) {
8970                 Perl_croak_no_modify();
8971         }
8972         if (SvROK(sv)) {
8973             IV i;
8974             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8975                 return;
8976             i = PTR2IV(SvRV(sv));
8977             sv_unref(sv);
8978             sv_setiv(sv, i);
8979         }
8980         else sv_force_normal_flags(sv, 0);
8981     }
8982     /* Unlike sv_inc we don't have to worry about string-never-numbers
8983        and keeping them magic. But we mustn't warn on punting */
8984     flags = SvFLAGS(sv);
8985     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8986         /* It's publicly an integer, or privately an integer-not-float */
8987 #ifdef PERL_PRESERVE_IVUV
8988       oops_its_int:
8989 #endif
8990         if (SvIsUV(sv)) {
8991             if (SvUVX(sv) == 0) {
8992                 (void)SvIOK_only(sv);
8993                 SvIV_set(sv, -1);
8994             }
8995             else {
8996                 (void)SvIOK_only_UV(sv);
8997                 SvUV_set(sv, SvUVX(sv) - 1);
8998             }   
8999         } else {
9000             if (SvIVX(sv) == IV_MIN) {
9001                 sv_setnv(sv, (NV)IV_MIN);
9002                 goto oops_its_num;
9003             }
9004             else {
9005                 (void)SvIOK_only(sv);
9006                 SvIV_set(sv, SvIVX(sv) - 1);
9007             }   
9008         }
9009         return;
9010     }
9011     if (flags & SVp_NOK) {
9012     oops_its_num:
9013         {
9014             const NV was = SvNVX(sv);
9015             if (LIKELY(!Perl_isinfnan(was)) &&
9016                 NV_OVERFLOWS_INTEGERS_AT &&
9017                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9018                 /* diag_listed_as: Lost precision when %s %f by 1 */
9019                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9020                                "Lost precision when decrementing %" NVff " by 1",
9021                                was);
9022             }
9023             (void)SvNOK_only(sv);
9024             SvNV_set(sv, was - 1.0);
9025             return;
9026         }
9027     }
9028
9029     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9030     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9031         Perl_croak_no_modify();
9032
9033     if (!(flags & SVp_POK)) {
9034         if ((flags & SVTYPEMASK) < SVt_PVIV)
9035             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9036         SvIV_set(sv, -1);
9037         (void)SvIOK_only(sv);
9038         return;
9039     }
9040 #ifdef PERL_PRESERVE_IVUV
9041     {
9042         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9043         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9044             /* Need to try really hard to see if it's an integer.
9045                9.22337203685478e+18 is an integer.
9046                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9047                so $a="9.22337203685478e+18"; $a+0; $a--
9048                needs to be the same as $a="9.22337203685478e+18"; $a--
9049                or we go insane. */
9050         
9051             (void) sv_2iv(sv);
9052             if (SvIOK(sv))
9053                 goto oops_its_int;
9054
9055             /* sv_2iv *should* have made this an NV */
9056             if (flags & SVp_NOK) {
9057                 (void)SvNOK_only(sv);
9058                 SvNV_set(sv, SvNVX(sv) - 1.0);
9059                 return;
9060             }
9061             /* I don't think we can get here. Maybe I should assert this
9062                And if we do get here I suspect that sv_setnv will croak. NWC
9063                Fall through. */
9064             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
9065                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9066         }
9067     }
9068 #endif /* PERL_PRESERVE_IVUV */
9069     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9070 }
9071
9072 /* this define is used to eliminate a chunk of duplicated but shared logic
9073  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9074  * used anywhere but here - yves
9075  */
9076 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9077     STMT_START {      \
9078         SSize_t ix = ++PL_tmps_ix;              \
9079         if (UNLIKELY(ix >= PL_tmps_max))        \
9080             ix = tmps_grow_p(ix);                       \
9081         PL_tmps_stack[ix] = (AnSv); \
9082     } STMT_END
9083
9084 /*
9085 =for apidoc sv_mortalcopy
9086
9087 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9088 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9089 explicit call to C<FREETMPS>, or by an implicit call at places such as
9090 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9091
9092 =cut
9093 */
9094
9095 /* Make a string that will exist for the duration of the expression
9096  * evaluation.  Actually, it may have to last longer than that, but
9097  * hopefully we won't free it until it has been assigned to a
9098  * permanent location. */
9099
9100 SV *
9101 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9102 {
9103     SV *sv;
9104
9105     if (flags & SV_GMAGIC)
9106         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9107     new_SV(sv);
9108     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9109     PUSH_EXTEND_MORTAL__SV_C(sv);
9110     SvTEMP_on(sv);
9111     return sv;
9112 }
9113
9114 /*
9115 =for apidoc sv_newmortal
9116
9117 Creates a new null SV which is mortal.  The reference count of the SV is
9118 set to 1.  It will be destroyed "soon", either by an explicit call to
9119 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9120 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9121
9122 =cut
9123 */
9124
9125 SV *
9126 Perl_sv_newmortal(pTHX)
9127 {
9128     SV *sv;
9129
9130     new_SV(sv);
9131     SvFLAGS(sv) = SVs_TEMP;
9132     PUSH_EXTEND_MORTAL__SV_C(sv);
9133     return sv;
9134 }
9135
9136
9137 /*
9138 =for apidoc newSVpvn_flags
9139
9140 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9141 characters) into it.  The reference count for the
9142 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9143 string.  You are responsible for ensuring that the source string is at least
9144 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9145 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9146 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9147 returning.  If C<SVf_UTF8> is set, C<s>
9148 is considered to be in UTF-8 and the
9149 C<SVf_UTF8> flag will be set on the new SV.
9150 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9151
9152     #define newSVpvn_utf8(s, len, u)                    \
9153         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9154
9155 =cut
9156 */
9157
9158 SV *
9159 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9160 {
9161     SV *sv;
9162
9163     /* All the flags we don't support must be zero.
9164        And we're new code so I'm going to assert this from the start.  */
9165     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9166     new_SV(sv);
9167     sv_setpvn(sv,s,len);
9168
9169     /* This code used to do a sv_2mortal(), however we now unroll the call to
9170      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9171      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9172      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9173      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9174      * means that we eliminate quite a few steps than it looks - Yves
9175      * (explaining patch by gfx) */
9176
9177     SvFLAGS(sv) |= flags;
9178
9179     if(flags & SVs_TEMP){
9180         PUSH_EXTEND_MORTAL__SV_C(sv);
9181     }
9182
9183     return sv;
9184 }
9185
9186 /*
9187 =for apidoc sv_2mortal
9188
9189 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9190 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9191 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9192 string buffer can be "stolen" if this SV is copied.  See also
9193 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9194
9195 =cut
9196 */
9197
9198 SV *
9199 Perl_sv_2mortal(pTHX_ SV *const sv)
9200 {
9201     dVAR;
9202     if (!sv)
9203         return sv;
9204     if (SvIMMORTAL(sv))
9205         return sv;
9206     PUSH_EXTEND_MORTAL__SV_C(sv);
9207     SvTEMP_on(sv);
9208     return sv;
9209 }
9210
9211 /*
9212 =for apidoc newSVpv
9213
9214 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9215 characters) into it.  The reference count for the
9216 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9217 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9218 C<NUL> characters and has to have a terminating C<NUL> byte).
9219
9220 For efficiency, consider using C<newSVpvn> instead.
9221
9222 =cut
9223 */
9224
9225 SV *
9226 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9227 {
9228     SV *sv;
9229
9230     new_SV(sv);
9231     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9232     return sv;
9233 }
9234
9235 /*
9236 =for apidoc newSVpvn
9237
9238 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9239 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9240 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9241 are responsible for ensuring that the source buffer is at least
9242 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9243 undefined.
9244
9245 =cut
9246 */
9247
9248 SV *
9249 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9250 {
9251     SV *sv;
9252     new_SV(sv);
9253     sv_setpvn(sv,buffer,len);
9254     return sv;
9255 }
9256
9257 /*
9258 =for apidoc newSVhek
9259
9260 Creates a new SV from the hash key structure.  It will generate scalars that
9261 point to the shared string table where possible.  Returns a new (undefined)
9262 SV if C<hek> is NULL.
9263
9264 =cut
9265 */
9266
9267 SV *
9268 Perl_newSVhek(pTHX_ const HEK *const hek)
9269 {
9270     if (!hek) {
9271         SV *sv;
9272
9273         new_SV(sv);
9274         return sv;
9275     }
9276
9277     if (HEK_LEN(hek) == HEf_SVKEY) {
9278         return newSVsv(*(SV**)HEK_KEY(hek));
9279     } else {
9280         const int flags = HEK_FLAGS(hek);
9281         if (flags & HVhek_WASUTF8) {
9282             /* Trouble :-)
9283                Andreas would like keys he put in as utf8 to come back as utf8
9284             */
9285             STRLEN utf8_len = HEK_LEN(hek);
9286             SV * const sv = newSV_type(SVt_PV);
9287             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9288             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9289             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9290             SvUTF8_on (sv);
9291             return sv;
9292         } else if (flags & HVhek_UNSHARED) {
9293             /* A hash that isn't using shared hash keys has to have
9294                the flag in every key so that we know not to try to call
9295                share_hek_hek on it.  */
9296
9297             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9298             if (HEK_UTF8(hek))
9299                 SvUTF8_on (sv);
9300             return sv;
9301         }
9302         /* This will be overwhelminly the most common case.  */
9303         {
9304             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9305                more efficient than sharepvn().  */
9306             SV *sv;
9307
9308             new_SV(sv);
9309             sv_upgrade(sv, SVt_PV);
9310             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9311             SvCUR_set(sv, HEK_LEN(hek));
9312             SvLEN_set(sv, 0);
9313             SvIsCOW_on(sv);
9314             SvPOK_on(sv);
9315             if (HEK_UTF8(hek))
9316                 SvUTF8_on(sv);
9317             return sv;
9318         }
9319     }
9320 }
9321
9322 /*
9323 =for apidoc newSVpvn_share
9324
9325 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9326 table.  If the string does not already exist in the table, it is
9327 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9328 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9329 is non-zero, that value is used; otherwise the hash is computed.
9330 The string's hash can later be retrieved from the SV
9331 with the C<SvSHARED_HASH()> macro.  The idea here is
9332 that as the string table is used for shared hash keys these strings will have
9333 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9334
9335 =cut
9336 */
9337
9338 SV *
9339 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9340 {
9341     dVAR;
9342     SV *sv;
9343     bool is_utf8 = FALSE;
9344     const char *const orig_src = src;
9345
9346     if (len < 0) {
9347         STRLEN tmplen = -len;
9348         is_utf8 = TRUE;
9349         /* See the note in hv.c:hv_fetch() --jhi */
9350         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9351         len = tmplen;
9352     }
9353     if (!hash)
9354         PERL_HASH(hash, src, len);
9355     new_SV(sv);
9356     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9357        changes here, update it there too.  */
9358     sv_upgrade(sv, SVt_PV);
9359     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9360     SvCUR_set(sv, len);
9361     SvLEN_set(sv, 0);
9362     SvIsCOW_on(sv);
9363     SvPOK_on(sv);
9364     if (is_utf8)
9365         SvUTF8_on(sv);
9366     if (src != orig_src)
9367         Safefree(src);
9368     return sv;
9369 }
9370
9371 /*
9372 =for apidoc newSVpv_share
9373
9374 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9375 string/length pair.
9376
9377 =cut
9378 */
9379
9380 SV *
9381 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9382 {
9383     return newSVpvn_share(src, strlen(src), hash);
9384 }
9385
9386 #if defined(PERL_IMPLICIT_CONTEXT)
9387
9388 /* pTHX_ magic can't cope with varargs, so this is a no-context
9389  * version of the main function, (which may itself be aliased to us).
9390  * Don't access this version directly.
9391  */
9392
9393 SV *
9394 Perl_newSVpvf_nocontext(const char *const pat, ...)
9395 {
9396     dTHX;
9397     SV *sv;
9398     va_list args;
9399
9400     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9401
9402     va_start(args, pat);
9403     sv = vnewSVpvf(pat, &args);
9404     va_end(args);
9405     return sv;
9406 }
9407 #endif
9408
9409 /*
9410 =for apidoc newSVpvf
9411
9412 Creates a new SV and initializes it with the string formatted like
9413 C<sv_catpvf>.
9414
9415 =cut
9416 */
9417
9418 SV *
9419 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9420 {
9421     SV *sv;
9422     va_list args;
9423
9424     PERL_ARGS_ASSERT_NEWSVPVF;
9425
9426     va_start(args, pat);
9427     sv = vnewSVpvf(pat, &args);
9428     va_end(args);
9429     return sv;
9430 }
9431
9432 /* backend for newSVpvf() and newSVpvf_nocontext() */
9433
9434 SV *
9435 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9436 {
9437     SV *sv;
9438
9439     PERL_ARGS_ASSERT_VNEWSVPVF;
9440
9441     new_SV(sv);
9442     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9443     return sv;
9444 }
9445
9446 /*
9447 =for apidoc newSVnv
9448
9449 Creates a new SV and copies a floating point value into it.
9450 The reference count for the SV is set to 1.
9451
9452 =cut
9453 */
9454
9455 SV *
9456 Perl_newSVnv(pTHX_ const NV n)
9457 {
9458     SV *sv;
9459
9460     new_SV(sv);
9461     sv_setnv(sv,n);
9462     return sv;
9463 }
9464
9465 /*
9466 =for apidoc newSViv
9467
9468 Creates a new SV and copies an integer into it.  The reference count for the
9469 SV is set to 1.
9470
9471 =cut
9472 */
9473
9474 SV *
9475 Perl_newSViv(pTHX_ const IV i)
9476 {
9477     SV *sv;
9478
9479     new_SV(sv);
9480
9481     /* Inlining ONLY the small relevant subset of sv_setiv here
9482      * for performance. Makes a significant difference. */
9483
9484     /* We're starting from SVt_FIRST, so provided that's
9485      * actual 0, we don't have to unset any SV type flags
9486      * to promote to SVt_IV. */
9487     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9488
9489     SET_SVANY_FOR_BODYLESS_IV(sv);
9490     SvFLAGS(sv) |= SVt_IV;
9491     (void)SvIOK_on(sv);
9492
9493     SvIV_set(sv, i);
9494     SvTAINT(sv);
9495
9496     return sv;
9497 }
9498
9499 /*
9500 =for apidoc newSVuv
9501
9502 Creates a new SV and copies an unsigned integer into it.
9503 The reference count for the SV is set to 1.
9504
9505 =cut
9506 */
9507
9508 SV *
9509 Perl_newSVuv(pTHX_ const UV u)
9510 {
9511     SV *sv;
9512
9513     /* Inlining ONLY the small relevant subset of sv_setuv here
9514      * for performance. Makes a significant difference. */
9515
9516     /* Using ivs is more efficient than using uvs - see sv_setuv */
9517     if (u <= (UV)IV_MAX) {
9518         return newSViv((IV)u);
9519     }
9520
9521     new_SV(sv);
9522
9523     /* We're starting from SVt_FIRST, so provided that's
9524      * actual 0, we don't have to unset any SV type flags
9525      * to promote to SVt_IV. */
9526     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9527
9528     SET_SVANY_FOR_BODYLESS_IV(sv);
9529     SvFLAGS(sv) |= SVt_IV;
9530     (void)SvIOK_on(sv);
9531     (void)SvIsUV_on(sv);
9532
9533     SvUV_set(sv, u);
9534     SvTAINT(sv);
9535
9536     return sv;
9537 }
9538
9539 /*
9540 =for apidoc newSV_type
9541
9542 Creates a new SV, of the type specified.  The reference count for the new SV
9543 is set to 1.
9544
9545 =cut
9546 */
9547
9548 SV *
9549 Perl_newSV_type(pTHX_ const svtype type)
9550 {
9551     SV *sv;
9552
9553     new_SV(sv);
9554     ASSUME(SvTYPE(sv) == SVt_FIRST);
9555     if(type != SVt_FIRST)
9556         sv_upgrade(sv, type);
9557     return sv;
9558 }
9559
9560 /*
9561 =for apidoc newRV_noinc
9562
9563 Creates an RV wrapper for an SV.  The reference count for the original
9564 SV is B<not> incremented.
9565
9566 =cut
9567 */
9568
9569 SV *
9570 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9571 {
9572     SV *sv;
9573
9574     PERL_ARGS_ASSERT_NEWRV_NOINC;
9575
9576     new_SV(sv);
9577
9578     /* We're starting from SVt_FIRST, so provided that's
9579      * actual 0, we don't have to unset any SV type flags
9580      * to promote to SVt_IV. */
9581     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9582
9583     SET_SVANY_FOR_BODYLESS_IV(sv);
9584     SvFLAGS(sv) |= SVt_IV;
9585     SvROK_on(sv);
9586     SvIV_set(sv, 0);
9587
9588     SvTEMP_off(tmpRef);
9589     SvRV_set(sv, tmpRef);
9590
9591     return sv;
9592 }
9593
9594 /* newRV_inc is the official function name to use now.
9595  * newRV_inc is in fact #defined to newRV in sv.h
9596  */
9597
9598 SV *
9599 Perl_newRV(pTHX_ SV *const sv)
9600 {
9601     PERL_ARGS_ASSERT_NEWRV;
9602
9603     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9604 }
9605
9606 /*
9607 =for apidoc newSVsv
9608
9609 Creates a new SV which is an exact duplicate of the original SV.
9610 (Uses C<sv_setsv>.)
9611
9612 =cut
9613 */
9614
9615 SV *
9616 Perl_newSVsv(pTHX_ SV *const old)
9617 {
9618     SV *sv;
9619
9620     if (!old)
9621         return NULL;
9622     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9623         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9624         return NULL;
9625     }
9626     /* Do this here, otherwise we leak the new SV if this croaks. */
9627     SvGETMAGIC(old);
9628     new_SV(sv);
9629     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9630        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9631     sv_setsv_flags(sv, old, SV_NOSTEAL);
9632     return sv;
9633 }
9634
9635 /*
9636 =for apidoc sv_reset
9637
9638 Underlying implementation for the C<reset> Perl function.
9639 Note that the perl-level function is vaguely deprecated.
9640
9641 =cut
9642 */
9643
9644 void
9645 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9646 {
9647     PERL_ARGS_ASSERT_SV_RESET;
9648
9649     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9650 }
9651
9652 void
9653 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9654 {
9655     char todo[PERL_UCHAR_MAX+1];
9656     const char *send;
9657
9658     if (!stash || SvTYPE(stash) != SVt_PVHV)
9659         return;
9660
9661     if (!s) {           /* reset ?? searches */
9662         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9663         if (mg) {
9664             const U32 count = mg->mg_len / sizeof(PMOP**);
9665             PMOP **pmp = (PMOP**) mg->mg_ptr;
9666             PMOP *const *const end = pmp + count;
9667
9668             while (pmp < end) {
9669 #ifdef USE_ITHREADS
9670                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9671 #else
9672                 (*pmp)->op_pmflags &= ~PMf_USED;
9673 #endif
9674                 ++pmp;
9675             }
9676         }
9677         return;
9678     }
9679
9680     /* reset variables */
9681
9682     if (!HvARRAY(stash))
9683         return;
9684
9685     Zero(todo, 256, char);
9686     send = s + len;
9687     while (s < send) {
9688         I32 max;
9689         I32 i = (unsigned char)*s;
9690         if (s[1] == '-') {
9691             s += 2;
9692         }
9693         max = (unsigned char)*s++;
9694         for ( ; i <= max; i++) {
9695             todo[i] = 1;
9696         }
9697         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9698             HE *entry;
9699             for (entry = HvARRAY(stash)[i];
9700                  entry;
9701                  entry = HeNEXT(entry))
9702             {
9703                 GV *gv;
9704                 SV *sv;
9705
9706                 if (!todo[(U8)*HeKEY(entry)])
9707                     continue;
9708                 gv = MUTABLE_GV(HeVAL(entry));
9709                 sv = GvSV(gv);
9710                 if (sv && !SvREADONLY(sv)) {
9711                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9712                     if (!isGV(sv)) SvOK_off(sv);
9713                 }
9714                 if (GvAV(gv)) {
9715                     av_clear(GvAV(gv));
9716                 }
9717                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9718                     hv_clear(GvHV(gv));
9719                 }
9720             }
9721         }
9722     }
9723 }
9724
9725 /*
9726 =for apidoc sv_2io
9727
9728 Using various gambits, try to get an IO from an SV: the IO slot if its a
9729 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9730 named after the PV if we're a string.
9731
9732 'Get' magic is ignored on the C<sv> passed in, but will be called on
9733 C<SvRV(sv)> if C<sv> is an RV.
9734
9735 =cut
9736 */
9737
9738 IO*
9739 Perl_sv_2io(pTHX_ SV *const sv)
9740 {
9741     IO* io;
9742     GV* gv;
9743
9744     PERL_ARGS_ASSERT_SV_2IO;
9745
9746     switch (SvTYPE(sv)) {
9747     case SVt_PVIO:
9748         io = MUTABLE_IO(sv);
9749         break;
9750     case SVt_PVGV:
9751     case SVt_PVLV:
9752         if (isGV_with_GP(sv)) {
9753             gv = MUTABLE_GV(sv);
9754             io = GvIO(gv);
9755             if (!io)
9756                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9757                                     HEKfARG(GvNAME_HEK(gv)));
9758             break;
9759         }
9760         /* FALLTHROUGH */
9761     default:
9762         if (!SvOK(sv))
9763             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9764         if (SvROK(sv)) {
9765             SvGETMAGIC(SvRV(sv));
9766             return sv_2io(SvRV(sv));
9767         }
9768         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9769         if (gv)
9770             io = GvIO(gv);
9771         else
9772             io = 0;
9773         if (!io) {
9774             SV *newsv = sv;
9775             if (SvGMAGICAL(sv)) {
9776                 newsv = sv_newmortal();
9777                 sv_setsv_nomg(newsv, sv);
9778             }
9779             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9780         }
9781         break;
9782     }
9783     return io;
9784 }
9785
9786 /*
9787 =for apidoc sv_2cv
9788
9789 Using various gambits, try to get a CV from an SV; in addition, try if
9790 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9791 The flags in C<lref> are passed to C<gv_fetchsv>.
9792
9793 =cut
9794 */
9795
9796 CV *
9797 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9798 {
9799     GV *gv = NULL;
9800     CV *cv = NULL;
9801
9802     PERL_ARGS_ASSERT_SV_2CV;
9803
9804     if (!sv) {
9805         *st = NULL;
9806         *gvp = NULL;
9807         return NULL;
9808     }
9809     switch (SvTYPE(sv)) {
9810     case SVt_PVCV:
9811         *st = CvSTASH(sv);
9812         *gvp = NULL;
9813         return MUTABLE_CV(sv);
9814     case SVt_PVHV:
9815     case SVt_PVAV:
9816         *st = NULL;
9817         *gvp = NULL;
9818         return NULL;
9819     default:
9820         SvGETMAGIC(sv);
9821         if (SvROK(sv)) {
9822             if (SvAMAGIC(sv))
9823                 sv = amagic_deref_call(sv, to_cv_amg);
9824
9825             sv = SvRV(sv);
9826             if (SvTYPE(sv) == SVt_PVCV) {
9827                 cv = MUTABLE_CV(sv);
9828                 *gvp = NULL;
9829                 *st = CvSTASH(cv);
9830                 return cv;
9831             }
9832             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9833                 gv = MUTABLE_GV(sv);
9834             else
9835                 Perl_croak(aTHX_ "Not a subroutine reference");
9836         }
9837         else if (isGV_with_GP(sv)) {
9838             gv = MUTABLE_GV(sv);
9839         }
9840         else {
9841             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9842         }
9843         *gvp = gv;
9844         if (!gv) {
9845             *st = NULL;
9846             return NULL;
9847         }
9848         /* Some flags to gv_fetchsv mean don't really create the GV  */
9849         if (!isGV_with_GP(gv)) {
9850             *st = NULL;
9851             return NULL;
9852         }
9853         *st = GvESTASH(gv);
9854         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9855             /* XXX this is probably not what they think they're getting.
9856              * It has the same effect as "sub name;", i.e. just a forward
9857              * declaration! */
9858             newSTUB(gv,0);
9859         }
9860         return GvCVu(gv);
9861     }
9862 }
9863
9864 /*
9865 =for apidoc sv_true
9866
9867 Returns true if the SV has a true value by Perl's rules.
9868 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9869 instead use an in-line version.
9870
9871 =cut
9872 */
9873
9874 I32
9875 Perl_sv_true(pTHX_ SV *const sv)
9876 {
9877     if (!sv)
9878         return 0;
9879     if (SvPOK(sv)) {
9880         const XPV* const tXpv = (XPV*)SvANY(sv);
9881         if (tXpv &&
9882                 (tXpv->xpv_cur > 1 ||
9883                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9884             return 1;
9885         else
9886             return 0;
9887     }
9888     else {
9889         if (SvIOK(sv))
9890             return SvIVX(sv) != 0;
9891         else {
9892             if (SvNOK(sv))
9893                 return SvNVX(sv) != 0.0;
9894             else
9895                 return sv_2bool(sv);
9896         }
9897     }
9898 }
9899
9900 /*
9901 =for apidoc sv_pvn_force
9902
9903 Get a sensible string out of the SV somehow.
9904 A private implementation of the C<SvPV_force> macro for compilers which
9905 can't cope with complex macro expressions.  Always use the macro instead.
9906
9907 =for apidoc sv_pvn_force_flags
9908
9909 Get a sensible string out of the SV somehow.
9910 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9911 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9912 implemented in terms of this function.
9913 You normally want to use the various wrapper macros instead: see
9914 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
9915
9916 =cut
9917 */
9918
9919 char *
9920 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9921 {
9922     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9923
9924     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9925     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9926         sv_force_normal_flags(sv, 0);
9927
9928     if (SvPOK(sv)) {
9929         if (lp)
9930             *lp = SvCUR(sv);
9931     }
9932     else {
9933         char *s;
9934         STRLEN len;
9935  
9936         if (SvTYPE(sv) > SVt_PVLV
9937             || isGV_with_GP(sv))
9938             /* diag_listed_as: Can't coerce %s to %s in %s */
9939             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9940                 OP_DESC(PL_op));
9941         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9942         if (!s) {
9943           s = (char *)"";
9944         }
9945         if (lp)
9946             *lp = len;
9947
9948         if (SvTYPE(sv) < SVt_PV ||
9949             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9950             if (SvROK(sv))
9951                 sv_unref(sv);
9952             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9953             SvGROW(sv, len + 1);
9954             Move(s,SvPVX(sv),len,char);
9955             SvCUR_set(sv, len);
9956             SvPVX(sv)[len] = '\0';
9957         }
9958         if (!SvPOK(sv)) {
9959             SvPOK_on(sv);               /* validate pointer */
9960             SvTAINT(sv);
9961             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9962                                   PTR2UV(sv),SvPVX_const(sv)));
9963         }
9964     }
9965     (void)SvPOK_only_UTF8(sv);
9966     return SvPVX_mutable(sv);
9967 }
9968
9969 /*
9970 =for apidoc sv_pvbyten_force
9971
9972 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9973 instead.
9974
9975 =cut
9976 */
9977
9978 char *
9979 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9980 {
9981     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9982
9983     sv_pvn_force(sv,lp);
9984     sv_utf8_downgrade(sv,0);
9985     *lp = SvCUR(sv);
9986     return SvPVX(sv);
9987 }
9988
9989 /*
9990 =for apidoc sv_pvutf8n_force
9991
9992 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9993 instead.
9994
9995 =cut
9996 */
9997
9998 char *
9999 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10000 {
10001     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10002
10003     sv_pvn_force(sv,0);
10004     sv_utf8_upgrade_nomg(sv);
10005     *lp = SvCUR(sv);
10006     return SvPVX(sv);
10007 }
10008
10009 /*
10010 =for apidoc sv_reftype
10011
10012 Returns a string describing what the SV is a reference to.
10013
10014 If ob is true and the SV is blessed, the string is the class name,
10015 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10016
10017 =cut
10018 */
10019
10020 const char *
10021 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10022 {
10023     PERL_ARGS_ASSERT_SV_REFTYPE;
10024     if (ob && SvOBJECT(sv)) {
10025         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10026     }
10027     else {
10028         /* WARNING - There is code, for instance in mg.c, that assumes that
10029          * the only reason that sv_reftype(sv,0) would return a string starting
10030          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10031          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10032          * this routine inside other subs, and it saves time.
10033          * Do not change this assumption without searching for "dodgy type check" in
10034          * the code.
10035          * - Yves */
10036         switch (SvTYPE(sv)) {
10037         case SVt_NULL:
10038         case SVt_IV:
10039         case SVt_NV:
10040         case SVt_PV:
10041         case SVt_PVIV:
10042         case SVt_PVNV:
10043         case SVt_PVMG:
10044                                 if (SvVOK(sv))
10045                                     return "VSTRING";
10046                                 if (SvROK(sv))
10047                                     return "REF";
10048                                 else
10049                                     return "SCALAR";
10050
10051         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10052                                 /* tied lvalues should appear to be
10053                                  * scalars for backwards compatibility */
10054                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10055                                     ? "SCALAR" : "LVALUE");
10056         case SVt_PVAV:          return "ARRAY";
10057         case SVt_PVHV:          return "HASH";
10058         case SVt_PVCV:          return "CODE";
10059         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10060                                     ? "GLOB" : "SCALAR");
10061         case SVt_PVFM:          return "FORMAT";
10062         case SVt_PVIO:          return "IO";
10063         case SVt_INVLIST:       return "INVLIST";
10064         case SVt_REGEXP:        return "REGEXP";
10065         default:                return "UNKNOWN";
10066         }
10067     }
10068 }
10069
10070 /*
10071 =for apidoc sv_ref
10072
10073 Returns a SV describing what the SV passed in is a reference to.
10074
10075 dst can be a SV to be set to the description or NULL, in which case a
10076 mortal SV is returned.
10077
10078 If ob is true and the SV is blessed, the description is the class
10079 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10080
10081 =cut
10082 */
10083
10084 SV *
10085 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10086 {
10087     PERL_ARGS_ASSERT_SV_REF;
10088
10089     if (!dst)
10090         dst = sv_newmortal();
10091
10092     if (ob && SvOBJECT(sv)) {
10093         HvNAME_get(SvSTASH(sv))
10094                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10095                     : sv_setpvn(dst, "__ANON__", 8);
10096     }
10097     else {
10098         const char * reftype = sv_reftype(sv, 0);
10099         sv_setpv(dst, reftype);
10100     }
10101     return dst;
10102 }
10103
10104 /*
10105 =for apidoc sv_isobject
10106
10107 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10108 object.  If the SV is not an RV, or if the object is not blessed, then this
10109 will return false.
10110
10111 =cut
10112 */
10113
10114 int
10115 Perl_sv_isobject(pTHX_ SV *sv)
10116 {
10117     if (!sv)
10118         return 0;
10119     SvGETMAGIC(sv);
10120     if (!SvROK(sv))
10121         return 0;
10122     sv = SvRV(sv);
10123     if (!SvOBJECT(sv))
10124         return 0;
10125     return 1;
10126 }
10127
10128 /*
10129 =for apidoc sv_isa
10130
10131 Returns a boolean indicating whether the SV is blessed into the specified
10132 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10133 an inheritance relationship.
10134
10135 =cut
10136 */
10137
10138 int
10139 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10140 {
10141     const char *hvname;
10142
10143     PERL_ARGS_ASSERT_SV_ISA;
10144
10145     if (!sv)
10146         return 0;
10147     SvGETMAGIC(sv);
10148     if (!SvROK(sv))
10149         return 0;
10150     sv = SvRV(sv);
10151     if (!SvOBJECT(sv))
10152         return 0;
10153     hvname = HvNAME_get(SvSTASH(sv));
10154     if (!hvname)
10155         return 0;
10156
10157     return strEQ(hvname, name);
10158 }
10159
10160 /*
10161 =for apidoc newSVrv
10162
10163 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10164 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10165 SV will be blessed in the specified package.  The new SV is returned and its
10166 reference count is 1.  The reference count 1 is owned by C<rv>.
10167
10168 =cut
10169 */
10170
10171 SV*
10172 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10173 {
10174     SV *sv;
10175
10176     PERL_ARGS_ASSERT_NEWSVRV;
10177
10178     new_SV(sv);
10179
10180     SV_CHECK_THINKFIRST_COW_DROP(rv);
10181
10182     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10183         const U32 refcnt = SvREFCNT(rv);
10184         SvREFCNT(rv) = 0;
10185         sv_clear(rv);
10186         SvFLAGS(rv) = 0;
10187         SvREFCNT(rv) = refcnt;
10188
10189         sv_upgrade(rv, SVt_IV);
10190     } else if (SvROK(rv)) {
10191         SvREFCNT_dec(SvRV(rv));
10192     } else {
10193         prepare_SV_for_RV(rv);
10194     }
10195
10196     SvOK_off(rv);
10197     SvRV_set(rv, sv);
10198     SvROK_on(rv);
10199
10200     if (classname) {
10201         HV* const stash = gv_stashpv(classname, GV_ADD);
10202         (void)sv_bless(rv, stash);
10203     }
10204     return sv;
10205 }
10206
10207 SV *
10208 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10209 {
10210     SV * const lv = newSV_type(SVt_PVLV);
10211     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10212     LvTYPE(lv) = 'y';
10213     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10214     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10215     LvSTARGOFF(lv) = ix;
10216     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10217     return lv;
10218 }
10219
10220 /*
10221 =for apidoc sv_setref_pv
10222
10223 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10224 argument will be upgraded to an RV.  That RV will be modified to point to
10225 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10226 into the SV.  The C<classname> argument indicates the package for the
10227 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10228 will have a reference count of 1, and the RV will be returned.
10229
10230 Do not use with other Perl types such as HV, AV, SV, CV, because those
10231 objects will become corrupted by the pointer copy process.
10232
10233 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10234
10235 =cut
10236 */
10237
10238 SV*
10239 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10240 {
10241     PERL_ARGS_ASSERT_SV_SETREF_PV;
10242
10243     if (!pv) {
10244         sv_setsv(rv, &PL_sv_undef);
10245         SvSETMAGIC(rv);
10246     }
10247     else
10248         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10249     return rv;
10250 }
10251
10252 /*
10253 =for apidoc sv_setref_iv
10254
10255 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10256 argument will be upgraded to an RV.  That RV will be modified to point to
10257 the new SV.  The C<classname> argument indicates the package for the
10258 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10259 will have a reference count of 1, and the RV will be returned.
10260
10261 =cut
10262 */
10263
10264 SV*
10265 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10266 {
10267     PERL_ARGS_ASSERT_SV_SETREF_IV;
10268
10269     sv_setiv(newSVrv(rv,classname), iv);
10270     return rv;
10271 }
10272
10273 /*
10274 =for apidoc sv_setref_uv
10275
10276 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10277 argument will be upgraded to an RV.  That RV will be modified to point to
10278 the new SV.  The C<classname> argument indicates the package for the
10279 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10280 will have a reference count of 1, and the RV will be returned.
10281
10282 =cut
10283 */
10284
10285 SV*
10286 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10287 {
10288     PERL_ARGS_ASSERT_SV_SETREF_UV;
10289
10290     sv_setuv(newSVrv(rv,classname), uv);
10291     return rv;
10292 }
10293
10294 /*
10295 =for apidoc sv_setref_nv
10296
10297 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10298 argument will be upgraded to an RV.  That RV will be modified to point to
10299 the new SV.  The C<classname> argument indicates the package for the
10300 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10301 will have a reference count of 1, and the RV will be returned.
10302
10303 =cut
10304 */
10305
10306 SV*
10307 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10308 {
10309     PERL_ARGS_ASSERT_SV_SETREF_NV;
10310
10311     sv_setnv(newSVrv(rv,classname), nv);
10312     return rv;
10313 }
10314
10315 /*
10316 =for apidoc sv_setref_pvn
10317
10318 Copies a string into a new SV, optionally blessing the SV.  The length of the
10319 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10320 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10321 argument indicates the package for the blessing.  Set C<classname> to
10322 C<NULL> to avoid the blessing.  The new SV will have a reference count
10323 of 1, and the RV will be returned.
10324
10325 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10326
10327 =cut
10328 */
10329
10330 SV*
10331 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10332                    const char *const pv, const STRLEN n)
10333 {
10334     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10335
10336     sv_setpvn(newSVrv(rv,classname), pv, n);
10337     return rv;
10338 }
10339
10340 /*
10341 =for apidoc sv_bless
10342
10343 Blesses an SV into a specified package.  The SV must be an RV.  The package
10344 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10345 of the SV is unaffected.
10346
10347 =cut
10348 */
10349
10350 SV*
10351 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10352 {
10353     SV *tmpRef;
10354     HV *oldstash = NULL;
10355
10356     PERL_ARGS_ASSERT_SV_BLESS;
10357
10358     SvGETMAGIC(sv);
10359     if (!SvROK(sv))
10360         Perl_croak(aTHX_ "Can't bless non-reference value");
10361     tmpRef = SvRV(sv);
10362     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10363         if (SvREADONLY(tmpRef))
10364             Perl_croak_no_modify();
10365         if (SvOBJECT(tmpRef)) {
10366             oldstash = SvSTASH(tmpRef);
10367         }
10368     }
10369     SvOBJECT_on(tmpRef);
10370     SvUPGRADE(tmpRef, SVt_PVMG);
10371     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10372     SvREFCNT_dec(oldstash);
10373
10374     if(SvSMAGICAL(tmpRef))
10375         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10376             mg_set(tmpRef);
10377
10378
10379
10380     return sv;
10381 }
10382
10383 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10384  * as it is after unglobbing it.
10385  */
10386
10387 PERL_STATIC_INLINE void
10388 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10389 {
10390     void *xpvmg;
10391     HV *stash;
10392     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10393
10394     PERL_ARGS_ASSERT_SV_UNGLOB;
10395
10396     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10397     SvFAKE_off(sv);
10398     if (!(flags & SV_COW_DROP_PV))
10399         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10400
10401     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10402     if (GvGP(sv)) {
10403         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10404            && HvNAME_get(stash))
10405             mro_method_changed_in(stash);
10406         gp_free(MUTABLE_GV(sv));
10407     }
10408     if (GvSTASH(sv)) {
10409         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10410         GvSTASH(sv) = NULL;
10411     }
10412     GvMULTI_off(sv);
10413     if (GvNAME_HEK(sv)) {
10414         unshare_hek(GvNAME_HEK(sv));
10415     }
10416     isGV_with_GP_off(sv);
10417
10418     if(SvTYPE(sv) == SVt_PVGV) {
10419         /* need to keep SvANY(sv) in the right arena */
10420         xpvmg = new_XPVMG();
10421         StructCopy(SvANY(sv), xpvmg, XPVMG);
10422         del_XPVGV(SvANY(sv));
10423         SvANY(sv) = xpvmg;
10424
10425         SvFLAGS(sv) &= ~SVTYPEMASK;
10426         SvFLAGS(sv) |= SVt_PVMG;
10427     }
10428
10429     /* Intentionally not calling any local SET magic, as this isn't so much a
10430        set operation as merely an internal storage change.  */
10431     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10432     else sv_setsv_flags(sv, temp, 0);
10433
10434     if ((const GV *)sv == PL_last_in_gv)
10435         PL_last_in_gv = NULL;
10436     else if ((const GV *)sv == PL_statgv)
10437         PL_statgv = NULL;
10438 }
10439
10440 /*
10441 =for apidoc sv_unref_flags
10442
10443 Unsets the RV status of the SV, and decrements the reference count of
10444 whatever was being referenced by the RV.  This can almost be thought of
10445 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10446 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10447 (otherwise the decrementing is conditional on the reference count being
10448 different from one or the reference being a readonly SV).
10449 See C<L</SvROK_off>>.
10450
10451 =cut
10452 */
10453
10454 void
10455 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10456 {
10457     SV* const target = SvRV(ref);
10458
10459     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10460
10461     if (SvWEAKREF(ref)) {
10462         sv_del_backref(target, ref);
10463         SvWEAKREF_off(ref);
10464         SvRV_set(ref, NULL);
10465         return;
10466     }
10467     SvRV_set(ref, NULL);
10468     SvROK_off(ref);
10469     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10470        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10471     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10472         SvREFCNT_dec_NN(target);
10473     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10474         sv_2mortal(target);     /* Schedule for freeing later */
10475 }
10476
10477 /*
10478 =for apidoc sv_untaint
10479
10480 Untaint an SV.  Use C<SvTAINTED_off> instead.
10481
10482 =cut
10483 */
10484
10485 void
10486 Perl_sv_untaint(pTHX_ SV *const sv)
10487 {
10488     PERL_ARGS_ASSERT_SV_UNTAINT;
10489     PERL_UNUSED_CONTEXT;
10490
10491     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10492         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10493         if (mg)
10494             mg->mg_len &= ~1;
10495     }
10496 }
10497
10498 /*
10499 =for apidoc sv_tainted
10500
10501 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10502
10503 =cut
10504 */
10505
10506 bool
10507 Perl_sv_tainted(pTHX_ SV *const sv)
10508 {
10509     PERL_ARGS_ASSERT_SV_TAINTED;
10510     PERL_UNUSED_CONTEXT;
10511
10512     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10513         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10514         if (mg && (mg->mg_len & 1) )
10515             return TRUE;
10516     }
10517     return FALSE;
10518 }
10519
10520 /*
10521 =for apidoc sv_setpviv
10522
10523 Copies an integer into the given SV, also updating its string value.
10524 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10525
10526 =cut
10527 */
10528
10529 void
10530 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10531 {
10532     char buf[TYPE_CHARS(UV)];
10533     char *ebuf;
10534     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10535
10536     PERL_ARGS_ASSERT_SV_SETPVIV;
10537
10538     sv_setpvn(sv, ptr, ebuf - ptr);
10539 }
10540
10541 /*
10542 =for apidoc sv_setpviv_mg
10543
10544 Like C<sv_setpviv>, but also handles 'set' magic.
10545
10546 =cut
10547 */
10548
10549 void
10550 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10551 {
10552     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10553
10554     sv_setpviv(sv, iv);
10555     SvSETMAGIC(sv);
10556 }
10557
10558 #if defined(PERL_IMPLICIT_CONTEXT)
10559
10560 /* pTHX_ magic can't cope with varargs, so this is a no-context
10561  * version of the main function, (which may itself be aliased to us).
10562  * Don't access this version directly.
10563  */
10564
10565 void
10566 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10567 {
10568     dTHX;
10569     va_list args;
10570
10571     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10572
10573     va_start(args, pat);
10574     sv_vsetpvf(sv, pat, &args);
10575     va_end(args);
10576 }
10577
10578 /* pTHX_ magic can't cope with varargs, so this is a no-context
10579  * version of the main function, (which may itself be aliased to us).
10580  * Don't access this version directly.
10581  */
10582
10583 void
10584 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10585 {
10586     dTHX;
10587     va_list args;
10588
10589     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10590
10591     va_start(args, pat);
10592     sv_vsetpvf_mg(sv, pat, &args);
10593     va_end(args);
10594 }
10595 #endif
10596
10597 /*
10598 =for apidoc sv_setpvf
10599
10600 Works like C<sv_catpvf> but copies the text into the SV instead of
10601 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10602
10603 =cut
10604 */
10605
10606 void
10607 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10608 {
10609     va_list args;
10610
10611     PERL_ARGS_ASSERT_SV_SETPVF;
10612
10613     va_start(args, pat);
10614     sv_vsetpvf(sv, pat, &args);
10615     va_end(args);
10616 }
10617
10618 /*
10619 =for apidoc sv_vsetpvf
10620
10621 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10622 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10623
10624 Usually used via its frontend C<sv_setpvf>.
10625
10626 =cut
10627 */
10628
10629 void
10630 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10631 {
10632     PERL_ARGS_ASSERT_SV_VSETPVF;
10633
10634     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10635 }
10636
10637 /*
10638 =for apidoc sv_setpvf_mg
10639
10640 Like C<sv_setpvf>, but also handles 'set' magic.
10641
10642 =cut
10643 */
10644
10645 void
10646 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10647 {
10648     va_list args;
10649
10650     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10651
10652     va_start(args, pat);
10653     sv_vsetpvf_mg(sv, pat, &args);
10654     va_end(args);
10655 }
10656
10657 /*
10658 =for apidoc sv_vsetpvf_mg
10659
10660 Like C<sv_vsetpvf>, but also handles 'set' magic.
10661
10662 Usually used via its frontend C<sv_setpvf_mg>.
10663
10664 =cut
10665 */
10666
10667 void
10668 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10669 {
10670     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10671
10672     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10673     SvSETMAGIC(sv);
10674 }
10675
10676 #if defined(PERL_IMPLICIT_CONTEXT)
10677
10678 /* pTHX_ magic can't cope with varargs, so this is a no-context
10679  * version of the main function, (which may itself be aliased to us).
10680  * Don't access this version directly.
10681  */
10682
10683 void
10684 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10685 {
10686     dTHX;
10687     va_list args;
10688
10689     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10690
10691     va_start(args, pat);
10692     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10693     va_end(args);
10694 }
10695
10696 /* pTHX_ magic can't cope with varargs, so this is a no-context
10697  * version of the main function, (which may itself be aliased to us).
10698  * Don't access this version directly.
10699  */
10700
10701 void
10702 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10703 {
10704     dTHX;
10705     va_list args;
10706
10707     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10708
10709     va_start(args, pat);
10710     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10711     SvSETMAGIC(sv);
10712     va_end(args);
10713 }
10714 #endif
10715
10716 /*
10717 =for apidoc sv_catpvf
10718
10719 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10720 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10721 variable argument list, argument reordering is not supported.
10722 If the appended data contains "wide" characters
10723 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10724 and characters >255 formatted with C<%c>), the original SV might get
10725 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10726 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10727 valid UTF-8; if the original SV was bytes, the pattern should be too.
10728
10729 =cut */
10730
10731 void
10732 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10733 {
10734     va_list args;
10735
10736     PERL_ARGS_ASSERT_SV_CATPVF;
10737
10738     va_start(args, pat);
10739     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10740     va_end(args);
10741 }
10742
10743 /*
10744 =for apidoc sv_vcatpvf
10745
10746 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10747 variable argument list, and appends the formatted
10748 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10749
10750 Usually used via its frontend C<sv_catpvf>.
10751
10752 =cut
10753 */
10754
10755 void
10756 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10757 {
10758     PERL_ARGS_ASSERT_SV_VCATPVF;
10759
10760     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10761 }
10762
10763 /*
10764 =for apidoc sv_catpvf_mg
10765
10766 Like C<sv_catpvf>, but also handles 'set' magic.
10767
10768 =cut
10769 */
10770
10771 void
10772 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10773 {
10774     va_list args;
10775
10776     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10777
10778     va_start(args, pat);
10779     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10780     SvSETMAGIC(sv);
10781     va_end(args);
10782 }
10783
10784 /*
10785 =for apidoc sv_vcatpvf_mg
10786
10787 Like C<sv_vcatpvf>, but also handles 'set' magic.
10788
10789 Usually used via its frontend C<sv_catpvf_mg>.
10790
10791 =cut
10792 */
10793
10794 void
10795 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10796 {
10797     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10798
10799     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10800     SvSETMAGIC(sv);
10801 }
10802
10803 /*
10804 =for apidoc sv_vsetpvfn
10805
10806 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10807 appending it.
10808
10809 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10810
10811 =cut
10812 */
10813
10814 void
10815 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10816                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10817 {
10818     PERL_ARGS_ASSERT_SV_VSETPVFN;
10819
10820     sv_setpvs(sv, "");
10821     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10822 }
10823
10824
10825 /*
10826  * Warn of missing argument to sprintf. The value used in place of such
10827  * arguments should be &PL_sv_no; an undefined value would yield
10828  * inappropriate "use of uninit" warnings [perl #71000].
10829  */
10830 STATIC void
10831 S_warn_vcatpvfn_missing_argument(pTHX) {
10832     if (ckWARN(WARN_MISSING)) {
10833         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10834                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10835     }
10836 }
10837
10838
10839 STATIC I32
10840 S_expect_number(pTHX_ char **const pattern)
10841 {
10842     I32 var = 0;
10843
10844     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10845
10846     switch (**pattern) {
10847     case '1': case '2': case '3':
10848     case '4': case '5': case '6':
10849     case '7': case '8': case '9':
10850         var = *(*pattern)++ - '0';
10851         while (isDIGIT(**pattern)) {
10852             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10853             if (tmp < var)
10854                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10855             var = tmp;
10856         }
10857     }
10858     return var;
10859 }
10860
10861 STATIC char *
10862 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10863 {
10864     const int neg = nv < 0;
10865     UV uv;
10866
10867     PERL_ARGS_ASSERT_F0CONVERT;
10868
10869     if (UNLIKELY(Perl_isinfnan(nv))) {
10870         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10871         *len = n;
10872         return endbuf - n;
10873     }
10874     if (neg)
10875         nv = -nv;
10876     if (nv < UV_MAX) {
10877         char *p = endbuf;
10878         nv += 0.5;
10879         uv = (UV)nv;
10880         if (uv & 1 && uv == nv)
10881             uv--;                       /* Round to even */
10882         do {
10883             const unsigned dig = uv % 10;
10884             *--p = '0' + dig;
10885         } while (uv /= 10);
10886         if (neg)
10887             *--p = '-';
10888         *len = endbuf - p;
10889         return p;
10890     }
10891     return NULL;
10892 }
10893
10894
10895 /*
10896 =for apidoc sv_vcatpvfn
10897
10898 =for apidoc sv_vcatpvfn_flags
10899
10900 Processes its arguments like C<vsprintf> and appends the formatted output
10901 to an SV.  Uses an array of SVs if the C-style variable argument list is
10902 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
10903 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10904 C<va_list> argument list with a format string that uses argument reordering
10905 will yield an exception.
10906
10907 When running with taint checks enabled, indicates via
10908 C<maybe_tainted> if results are untrustworthy (often due to the use of
10909 locales).
10910
10911 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
10912
10913 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10914
10915 =cut
10916 */
10917
10918 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10919                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10920                         vec_utf8 = DO_UTF8(vecsv);
10921
10922 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10923
10924 void
10925 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10926                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10927 {
10928     PERL_ARGS_ASSERT_SV_VCATPVFN;
10929
10930     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10931 }
10932
10933 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10934 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10935  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10936  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10937  * after the first 1023 zero bits.
10938  *
10939  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10940  * of dynamically growing buffer might be better, start at just 16 bytes
10941  * (for example) and grow only when necessary.  Or maybe just by looking
10942  * at the exponents of the two doubles? */
10943 #  define DOUBLEDOUBLE_MAXBITS 2098
10944 #endif
10945
10946 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10947  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10948  * per xdigit.  For the double-double case, this can be rather many.
10949  * The non-double-double-long-double overshoots since all bits of NV
10950  * are not mantissa bits, there are also exponent bits. */
10951 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10952 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
10953 #else
10954 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10955 #endif
10956
10957 /* If we do not have a known long double format, (including not using
10958  * long doubles, or long doubles being equal to doubles) then we will
10959  * fall back to the ldexp/frexp route, with which we can retrieve at
10960  * most as many bits as our widest unsigned integer type is.  We try
10961  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10962  *
10963  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10964  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10965  */
10966 #if defined(HAS_QUAD) && defined(Uquad_t)
10967 #  define MANTISSATYPE Uquad_t
10968 #  define MANTISSASIZE 8
10969 #else
10970 #  define MANTISSATYPE UV
10971 #  define MANTISSASIZE UVSIZE
10972 #endif
10973
10974 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10975 #  define HEXTRACT_LITTLE_ENDIAN
10976 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10977 #  define HEXTRACT_BIG_ENDIAN
10978 #else
10979 #  define HEXTRACT_MIX_ENDIAN
10980 #endif
10981
10982 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10983  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10984  * are being extracted from (either directly from the long double in-memory
10985  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10986  * is used to update the exponent.  vhex is the pointer to the beginning
10987  * of the output buffer (of VHEX_SIZE).
10988  *
10989  * The tricky part is that S_hextract() needs to be called twice:
10990  * the first time with vend as NULL, and the second time with vend as
10991  * the pointer returned by the first call.  What happens is that on
10992  * the first round the output size is computed, and the intended
10993  * extraction sanity checked.  On the second round the actual output
10994  * (the extraction of the hexadecimal values) takes place.
10995  * Sanity failures cause fatal failures during both rounds. */
10996 STATIC U8*
10997 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10998 {
10999     U8* v = vhex;
11000     int ix;
11001     int ixmin = 0, ixmax = 0;
11002
11003     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
11004      * and elsewhere. */
11005
11006     /* These macros are just to reduce typos, they have multiple
11007      * repetitions below, but usually only one (or sometimes two)
11008      * of them is really being used. */
11009     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11010 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11011 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11012 #define HEXTRACT_OUTPUT(ix) \
11013     STMT_START { \
11014       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11015    } STMT_END
11016 #define HEXTRACT_COUNT(ix, c) \
11017     STMT_START { \
11018       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11019    } STMT_END
11020 #define HEXTRACT_BYTE(ix) \
11021     STMT_START { \
11022       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11023    } STMT_END
11024 #define HEXTRACT_LO_NYBBLE(ix) \
11025     STMT_START { \
11026       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11027    } STMT_END
11028     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11029      * to make it look less odd when the top bits of a NV
11030      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11031      * order bits can be in the "low nybble" of a byte. */
11032 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11033 #define HEXTRACT_BYTES_LE(a, b) \
11034     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11035 #define HEXTRACT_BYTES_BE(a, b) \
11036     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11037 #define HEXTRACT_IMPLICIT_BIT(nv) \
11038     STMT_START { \
11039         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11040    } STMT_END
11041
11042 /* Most formats do.  Those which don't should undef this. */
11043 #define HEXTRACT_HAS_IMPLICIT_BIT
11044 /* Many formats do.  Those which don't should undef this. */
11045 #define HEXTRACT_HAS_TOP_NYBBLE
11046
11047     /* HEXTRACTSIZE is the maximum number of xdigits. */
11048 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11049 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11050 #else
11051 #  define HEXTRACTSIZE 2 * NVSIZE
11052 #endif
11053
11054     const U8* vmaxend = vhex + HEXTRACTSIZE;
11055     PERL_UNUSED_VAR(ix); /* might happen */
11056     (void)Perl_frexp(PERL_ABS(nv), exponent);
11057     if (vend && (vend <= vhex || vend > vmaxend)) {
11058         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11059         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11060     }
11061     {
11062         /* First check if using long doubles. */
11063 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11064 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11065         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11066          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
11067         /* The bytes 13..0 are the mantissa/fraction,
11068          * the 15,14 are the sign+exponent. */
11069         const U8* nvp = (const U8*)(&nv);
11070         HEXTRACT_IMPLICIT_BIT(nv);
11071 #   undef HEXTRACT_HAS_TOP_NYBBLE
11072         HEXTRACT_BYTES_LE(13, 0);
11073 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11074         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11075          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11076         /* The bytes 2..15 are the mantissa/fraction,
11077          * the 0,1 are the sign+exponent. */
11078         const U8* nvp = (const U8*)(&nv);
11079         HEXTRACT_IMPLICIT_BIT(nv);
11080 #   undef HEXTRACT_HAS_TOP_NYBBLE
11081         HEXTRACT_BYTES_BE(2, 15);
11082 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11083         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11084          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
11085          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
11086          * meaning that 2 or 6 bytes are empty padding. */
11087         /* The bytes 7..0 are the mantissa/fraction */
11088         const U8* nvp = (const U8*)(&nv);
11089 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11090 #    undef HEXTRACT_HAS_TOP_NYBBLE
11091         HEXTRACT_BYTES_LE(7, 0);
11092 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11093         /* Does this format ever happen? (Wikipedia says the Motorola
11094          * 6888x math coprocessors used format _like_ this but padded
11095          * to 96 bits with 16 unused bits between the exponent and the
11096          * mantissa.) */
11097         const U8* nvp = (const U8*)(&nv);
11098 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11099 #    undef HEXTRACT_HAS_TOP_NYBBLE
11100         HEXTRACT_BYTES_BE(0, 7);
11101 #  else
11102 #    define HEXTRACT_FALLBACK
11103         /* Double-double format: two doubles next to each other.
11104          * The first double is the high-order one, exactly like
11105          * it would be for a "lone" double.  The second double
11106          * is shifted down using the exponent so that that there
11107          * are no common bits.  The tricky part is that the value
11108          * of the double-double is the SUM of the two doubles and
11109          * the second one can be also NEGATIVE.
11110          *
11111          * Because of this tricky construction the bytewise extraction we
11112          * use for the other long double formats doesn't work, we must
11113          * extract the values bit by bit.
11114          *
11115          * The little-endian double-double is used .. somewhere?
11116          *
11117          * The big endian double-double is used in e.g. PPC/Power (AIX)
11118          * and MIPS (SGI).
11119          *
11120          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11121          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11122          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11123          */
11124 #  endif
11125 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11126         /* Using normal doubles, not long doubles.
11127          *
11128          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11129          * bytes, since we might need to handle printf precision, and
11130          * also need to insert the radix. */
11131 #  if NVSIZE == 8
11132 #    ifdef HEXTRACT_LITTLE_ENDIAN
11133         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11134         const U8* nvp = (const U8*)(&nv);
11135         HEXTRACT_IMPLICIT_BIT(nv);
11136         HEXTRACT_TOP_NYBBLE(6);
11137         HEXTRACT_BYTES_LE(5, 0);
11138 #    elif defined(HEXTRACT_BIG_ENDIAN)
11139         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11140         const U8* nvp = (const U8*)(&nv);
11141         HEXTRACT_IMPLICIT_BIT(nv);
11142         HEXTRACT_TOP_NYBBLE(1);
11143         HEXTRACT_BYTES_BE(2, 7);
11144 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11145         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11146         const U8* nvp = (const U8*)(&nv);
11147         HEXTRACT_IMPLICIT_BIT(nv);
11148         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11149         HEXTRACT_BYTE(1); /* 5 */
11150         HEXTRACT_BYTE(0); /* 4 */
11151         HEXTRACT_BYTE(7); /* 3 */
11152         HEXTRACT_BYTE(6); /* 2 */
11153         HEXTRACT_BYTE(5); /* 1 */
11154         HEXTRACT_BYTE(4); /* 0 */
11155 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11156         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11157         const U8* nvp = (const U8*)(&nv);
11158         HEXTRACT_IMPLICIT_BIT(nv);
11159         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11160         HEXTRACT_BYTE(6); /* 5 */
11161         HEXTRACT_BYTE(7); /* 4 */
11162         HEXTRACT_BYTE(0); /* 3 */
11163         HEXTRACT_BYTE(1); /* 2 */
11164         HEXTRACT_BYTE(2); /* 1 */
11165         HEXTRACT_BYTE(3); /* 0 */
11166 #    else
11167 #      define HEXTRACT_FALLBACK
11168 #    endif
11169 #  else
11170 #    define HEXTRACT_FALLBACK
11171 #  endif
11172 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11173 #  ifdef HEXTRACT_FALLBACK
11174 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11175         /* The fallback is used for the double-double format, and
11176          * for unknown long double formats, and for unknown double
11177          * formats, or in general unknown NV formats. */
11178         if (nv == (NV)0.0) {
11179             if (vend)
11180                 *v++ = 0;
11181             else
11182                 v++;
11183             *exponent = 0;
11184         }
11185         else {
11186             NV d = nv < 0 ? -nv : nv;
11187             NV e = (NV)1.0;
11188             U8 ha = 0x0; /* hexvalue accumulator */
11189             U8 hd = 0x8; /* hexvalue digit */
11190
11191             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11192              * this is essentially manual frexp(). Multiplying by 0.5 and
11193              * doubling should be lossless in binary floating point. */
11194
11195             *exponent = 1;
11196
11197             while (e > d) {
11198                 e *= (NV)0.5;
11199                 (*exponent)--;
11200             }
11201             /* Now d >= e */
11202
11203             while (d >= e + e) {
11204                 e += e;
11205                 (*exponent)++;
11206             }
11207             /* Now e <= d < 2*e */
11208
11209             /* First extract the leading hexdigit (the implicit bit). */
11210             if (d >= e) {
11211                 d -= e;
11212                 if (vend)
11213                     *v++ = 1;
11214                 else
11215                     v++;
11216             }
11217             else {
11218                 if (vend)
11219                     *v++ = 0;
11220                 else
11221                     v++;
11222             }
11223             e *= (NV)0.5;
11224
11225             /* Then extract the remaining hexdigits. */
11226             while (d > (NV)0.0) {
11227                 if (d >= e) {
11228                     ha |= hd;
11229                     d -= e;
11230                 }
11231                 if (hd == 1) {
11232                     /* Output or count in groups of four bits,
11233                      * that is, when the hexdigit is down to one. */
11234                     if (vend)
11235                         *v++ = ha;
11236                     else
11237                         v++;
11238                     /* Reset the hexvalue. */
11239                     ha = 0x0;
11240                     hd = 0x8;
11241                 }
11242                 else
11243                     hd >>= 1;
11244                 e *= (NV)0.5;
11245             }
11246
11247             /* Flush possible pending hexvalue. */
11248             if (ha) {
11249                 if (vend)
11250                     *v++ = ha;
11251                 else
11252                     v++;
11253             }
11254         }
11255 #  endif
11256     }
11257     /* Croak for various reasons: if the output pointer escaped the
11258      * output buffer, if the extraction index escaped the extraction
11259      * buffer, or if the ending output pointer didn't match the
11260      * previously computed value. */
11261     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11262         /* For double-double the ixmin and ixmax stay at zero,
11263          * which is convenient since the HEXTRACTSIZE is tricky
11264          * for double-double. */
11265         ixmin < 0 || ixmax >= NVSIZE ||
11266         (vend && v != vend)) {
11267         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11268         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11269     }
11270     return v;
11271 }
11272
11273 /* Helper for sv_vcatpvfn_flags().  */
11274 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11275     STMT_START {                                       \
11276         if (in_range)                                  \
11277             (var) = (expr);                            \
11278         else {                                         \
11279             (var) = &PL_sv_no; /* [perl #71000] */     \
11280             arg_missing = TRUE;                        \
11281         }                                              \
11282     } STMT_END
11283
11284 void
11285 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11286                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11287                        const U32 flags)
11288 {
11289     char *p;
11290     char *q;
11291     const char *patend;
11292     STRLEN origlen;
11293     I32 svix = 0;
11294     static const char nullstr[] = "(null)";
11295     SV *argsv = NULL;
11296     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11297     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11298     SV *nsv = NULL;
11299     /* Times 4: a decimal digit takes more than 3 binary digits.
11300      * NV_DIG: mantissa takes than many decimal digits.
11301      * Plus 32: Playing safe. */
11302     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11303     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11304     bool hexfp = FALSE; /* hexadecimal floating point? */
11305
11306     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11307
11308     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11309     PERL_UNUSED_ARG(maybe_tainted);
11310
11311     if (flags & SV_GMAGIC)
11312         SvGETMAGIC(sv);
11313
11314     /* no matter what, this is a string now */
11315     (void)SvPV_force_nomg(sv, origlen);
11316
11317     /* special-case "", "%s", and "%-p" (SVf - see below) */
11318     if (patlen == 0) {
11319         if (svmax && ckWARN(WARN_REDUNDANT))
11320             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11321                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11322         return;
11323     }
11324     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11325         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11326             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11327                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11328
11329         if (args) {
11330             const char * const s = va_arg(*args, char*);
11331             sv_catpv_nomg(sv, s ? s : nullstr);
11332         }
11333         else if (svix < svmax) {
11334             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11335             SvGETMAGIC(*svargs);
11336             sv_catsv_nomg(sv, *svargs);
11337         }
11338         else
11339             S_warn_vcatpvfn_missing_argument(aTHX);
11340         return;
11341     }
11342     if (args && patlen == 3 && pat[0] == '%' &&
11343                 pat[1] == '-' && pat[2] == 'p') {
11344         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11345             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11346                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11347         argsv = MUTABLE_SV(va_arg(*args, void*));
11348         sv_catsv_nomg(sv, argsv);
11349         return;
11350     }
11351
11352 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11353     /* special-case "%.<number>[gf]" */
11354     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11355          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11356         unsigned digits = 0;
11357         const char *pp;
11358
11359         pp = pat + 2;
11360         while (*pp >= '0' && *pp <= '9')
11361             digits = 10 * digits + (*pp++ - '0');
11362
11363         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11364            format the first argument and WARN_REDUNDANT if svmax > 1?
11365            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11366         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11367             const NV nv = SvNV(*svargs);
11368             if (LIKELY(!Perl_isinfnan(nv))) {
11369                 if (*pp == 'g') {
11370                     /* Add check for digits != 0 because it seems that some
11371                        gconverts are buggy in this case, and we don't yet have
11372                        a Configure test for this.  */
11373                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11374                         /* 0, point, slack */
11375                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11376                         SNPRINTF_G(nv, ebuf, size, digits);
11377                         sv_catpv_nomg(sv, ebuf);
11378                         if (*ebuf)      /* May return an empty string for digits==0 */
11379                             return;
11380                     }
11381                 } else if (!digits) {
11382                     STRLEN l;
11383
11384                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11385                         sv_catpvn_nomg(sv, p, l);
11386                         return;
11387                     }
11388                 }
11389             }
11390         }
11391     }
11392 #endif /* !USE_LONG_DOUBLE */
11393
11394     if (!args && svix < svmax && DO_UTF8(*svargs))
11395         has_utf8 = TRUE;
11396
11397     patend = (char*)pat + patlen;
11398     for (p = (char*)pat; p < patend; p = q) {
11399         bool alt = FALSE;
11400         bool left = FALSE;
11401         bool vectorize = FALSE;
11402         bool vectorarg = FALSE;
11403         bool vec_utf8 = FALSE;
11404         char fill = ' ';
11405         char plus = 0;
11406         char intsize = 0;
11407         STRLEN width = 0;
11408         STRLEN zeros = 0;
11409         bool has_precis = FALSE;
11410         STRLEN precis = 0;
11411         const I32 osvix = svix;
11412         bool is_utf8 = FALSE;  /* is this item utf8?   */
11413         bool used_explicit_ix = FALSE;
11414         bool arg_missing = FALSE;
11415 #ifdef HAS_LDBL_SPRINTF_BUG
11416         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11417            with sfio - Allen <allens@cpan.org> */
11418         bool fix_ldbl_sprintf_bug = FALSE;
11419 #endif
11420
11421         char esignbuf[4];
11422         U8 utf8buf[UTF8_MAXBYTES+1];
11423         STRLEN esignlen = 0;
11424
11425         const char *eptr = NULL;
11426         const char *fmtstart;
11427         STRLEN elen = 0;
11428         SV *vecsv = NULL;
11429         const U8 *vecstr = NULL;
11430         STRLEN veclen = 0;
11431         char c = 0;
11432         int i;
11433         unsigned base = 0;
11434         IV iv = 0;
11435         UV uv = 0;
11436         /* We need a long double target in case HAS_LONG_DOUBLE,
11437          * even without USE_LONG_DOUBLE, so that we can printf with
11438          * long double formats, even without NV being long double.
11439          * But we call the target 'fv' instead of 'nv', since most of
11440          * the time it is not (most compilers these days recognize
11441          * "long double", even if only as a synonym for "double").
11442         */
11443 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11444         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11445         long double fv;
11446 #  ifdef Perl_isfinitel
11447 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11448 #  endif
11449 #  define FV_GF PERL_PRIgldbl
11450 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11451        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11452 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11453                                            double _dv = nv;  \
11454                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11455                               } STMT_END
11456 #    else
11457 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11458 #    endif
11459 #else
11460         NV fv;
11461 #  define FV_GF NVgf
11462 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11463 #endif
11464 #ifndef FV_ISFINITE
11465 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11466 #endif
11467         NV nv;
11468         STRLEN have;
11469         STRLEN need;
11470         STRLEN gap;
11471         const char *dotstr = ".";
11472         STRLEN dotstrlen = 1;
11473         I32 efix = 0; /* explicit format parameter index */
11474         I32 ewix = 0; /* explicit width index */
11475         I32 epix = 0; /* explicit precision index */
11476         I32 evix = 0; /* explicit vector index */
11477         bool asterisk = FALSE;
11478         bool infnan = FALSE;
11479
11480         /* echo everything up to the next format specification */
11481         for (q = p; q < patend && *q != '%'; ++q) ;
11482         if (q > p) {
11483             if (has_utf8 && !pat_utf8)
11484                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11485             else
11486                 sv_catpvn_nomg(sv, p, q - p);
11487             p = q;
11488         }
11489         if (q++ >= patend)
11490             break;
11491
11492         fmtstart = q;
11493
11494 /*
11495     We allow format specification elements in this order:
11496         \d+\$              explicit format parameter index
11497         [-+ 0#]+           flags
11498         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11499         0                  flag (as above): repeated to allow "v02"     
11500         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11501         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11502         [hlqLV]            size
11503     [%bcdefginopsuxDFOUX] format (mandatory)
11504 */
11505
11506         if (args) {
11507 /*  
11508         As of perl5.9.3, printf format checking is on by default.
11509         Internally, perl uses %p formats to provide an escape to
11510         some extended formatting.  This block deals with those
11511         extensions: if it does not match, (char*)q is reset and
11512         the normal format processing code is used.
11513
11514         Currently defined extensions are:
11515                 %p              include pointer address (standard)      
11516                 %-p     (SVf)   include an SV (previously %_)
11517                 %-<num>p        include an SV with precision <num>      
11518                 %2p             include a HEK
11519                 %3p             include a HEK with precision of 256
11520                 %4p             char* preceded by utf8 flag and length
11521                 %<num>p         (where num is 1 or > 4) reserved for future
11522                                 extensions
11523
11524         Robin Barker 2005-07-14 (but modified since)
11525
11526                 %1p     (VDf)   removed.  RMB 2007-10-19
11527 */
11528             char* r = q; 
11529             bool sv = FALSE;    
11530             STRLEN n = 0;
11531             if (*q == '-')
11532                 sv = *q++;
11533             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11534                 /* The argument has already gone through cBOOL, so the cast
11535                    is safe. */
11536                 is_utf8 = (bool)va_arg(*args, int);
11537                 elen = va_arg(*args, UV);
11538                 /* if utf8 length is larger than 0x7ffff..., then it might
11539                  * have been a signed value that wrapped */
11540                 if (elen  > ((~(STRLEN)0) >> 1)) {
11541                     assert(0); /* in DEBUGGING build we want to crash */
11542                     elen= 0; /* otherwise we want to treat this as an empty string */
11543                 }
11544                 eptr = va_arg(*args, char *);
11545                 q += sizeof(UTF8f)-1;
11546                 goto string;
11547             }
11548             n = expect_number(&q);
11549             if (*q++ == 'p') {
11550                 if (sv) {                       /* SVf */
11551                     if (n) {
11552                         precis = n;
11553                         has_precis = TRUE;
11554                     }
11555                     argsv = MUTABLE_SV(va_arg(*args, void*));
11556                     eptr = SvPV_const(argsv, elen);
11557                     if (DO_UTF8(argsv))
11558                         is_utf8 = TRUE;
11559                     goto string;
11560                 }
11561                 else if (n==2 || n==3) {        /* HEKf */
11562                     HEK * const hek = va_arg(*args, HEK *);
11563                     eptr = HEK_KEY(hek);
11564                     elen = HEK_LEN(hek);
11565                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11566                     if (n==3) precis = 256, has_precis = TRUE;
11567                     goto string;
11568                 }
11569                 else if (n) {
11570                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11571                                      "internal %%<num>p might conflict with future printf extensions");
11572                 }
11573             }
11574             q = r; 
11575         }
11576
11577         if ( (width = expect_number(&q)) ) {
11578             if (*q == '$') {
11579                 if (args)
11580                     Perl_croak_nocontext(
11581                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11582                 ++q;
11583                 efix = width;
11584                 used_explicit_ix = TRUE;
11585             } else {
11586                 goto gotwidth;
11587             }
11588         }
11589
11590         /* FLAGS */
11591
11592         while (*q) {
11593             switch (*q) {
11594             case ' ':
11595             case '+':
11596                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11597                     q++;
11598                 else
11599                     plus = *q++;
11600                 continue;
11601
11602             case '-':
11603                 left = TRUE;
11604                 q++;
11605                 continue;
11606
11607             case '0':
11608                 fill = *q++;
11609                 continue;
11610
11611             case '#':
11612                 alt = TRUE;
11613                 q++;
11614                 continue;
11615
11616             default:
11617                 break;
11618             }
11619             break;
11620         }
11621
11622       tryasterisk:
11623         if (*q == '*') {
11624             q++;
11625             if ( (ewix = expect_number(&q)) ) {
11626                 if (*q++ == '$') {
11627                     if (args)
11628                         Perl_croak_nocontext(
11629                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11630                     used_explicit_ix = TRUE;
11631                 } else
11632                     goto unknown;
11633             }
11634             asterisk = TRUE;
11635         }
11636         if (*q == 'v') {
11637             q++;
11638             if (vectorize)
11639                 goto unknown;
11640             if ((vectorarg = asterisk)) {
11641                 evix = ewix;
11642                 ewix = 0;
11643                 asterisk = FALSE;
11644             }
11645             vectorize = TRUE;
11646             goto tryasterisk;
11647         }
11648
11649         if (!asterisk)
11650         {
11651             if( *q == '0' )
11652                 fill = *q++;
11653             width = expect_number(&q);
11654         }
11655
11656         if (vectorize && vectorarg) {
11657             /* vectorizing, but not with the default "." */
11658             if (args)
11659                 vecsv = va_arg(*args, SV*);
11660             else if (evix) {
11661                 FETCH_VCATPVFN_ARGUMENT(
11662                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11663             } else {
11664                 FETCH_VCATPVFN_ARGUMENT(
11665                     vecsv, svix < svmax, svargs[svix++]);
11666             }
11667             dotstr = SvPV_const(vecsv, dotstrlen);
11668             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11669                bad with tied or overloaded values that return UTF8.  */
11670             if (DO_UTF8(vecsv))
11671                 is_utf8 = TRUE;
11672             else if (has_utf8) {
11673                 vecsv = sv_mortalcopy(vecsv);
11674                 sv_utf8_upgrade(vecsv);
11675                 dotstr = SvPV_const(vecsv, dotstrlen);
11676                 is_utf8 = TRUE;
11677             }               
11678         }
11679
11680         if (asterisk) {
11681             if (args)
11682                 i = va_arg(*args, int);
11683             else
11684                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11685                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11686             left |= (i < 0);
11687             width = (i < 0) ? -i : i;
11688         }
11689       gotwidth:
11690
11691         /* PRECISION */
11692
11693         if (*q == '.') {
11694             q++;
11695             if (*q == '*') {
11696                 q++;
11697                 if ( (epix = expect_number(&q)) ) {
11698                     if (*q++ == '$') {
11699                         if (args)
11700                             Perl_croak_nocontext(
11701                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11702                         used_explicit_ix = TRUE;
11703                     } else
11704                         goto unknown;
11705                 }
11706                 if (args)
11707                     i = va_arg(*args, int);
11708                 else {
11709                     SV *precsv;
11710                     if (epix)
11711                         FETCH_VCATPVFN_ARGUMENT(
11712                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11713                     else
11714                         FETCH_VCATPVFN_ARGUMENT(
11715                             precsv, svix < svmax, svargs[svix++]);
11716                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11717                 }
11718                 precis = i;
11719                 has_precis = !(i < 0);
11720             }
11721             else {
11722                 precis = 0;
11723                 while (isDIGIT(*q))
11724                     precis = precis * 10 + (*q++ - '0');
11725                 has_precis = TRUE;
11726             }
11727         }
11728
11729         if (vectorize) {
11730             if (args) {
11731                 VECTORIZE_ARGS
11732             }
11733             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11734                 vecsv = svargs[efix ? efix-1 : svix++];
11735                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11736                 vec_utf8 = DO_UTF8(vecsv);
11737
11738                 /* if this is a version object, we need to convert
11739                  * back into v-string notation and then let the
11740                  * vectorize happen normally
11741                  */
11742                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11743                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11744                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11745                         "vector argument not supported with alpha versions");
11746                         goto vdblank;
11747                     }
11748                     vecsv = sv_newmortal();
11749                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11750                                  vecsv);
11751                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11752                     vec_utf8 = DO_UTF8(vecsv);
11753                 }
11754             }
11755             else {
11756               vdblank:
11757                 vecstr = (U8*)"";
11758                 veclen = 0;
11759             }
11760         }
11761
11762         /* SIZE */
11763
11764         switch (*q) {
11765 #ifdef WIN32
11766         case 'I':                       /* Ix, I32x, and I64x */
11767 #  ifdef USE_64_BIT_INT
11768             if (q[1] == '6' && q[2] == '4') {
11769                 q += 3;
11770                 intsize = 'q';
11771                 break;
11772             }
11773 #  endif
11774             if (q[1] == '3' && q[2] == '2') {
11775                 q += 3;
11776                 break;
11777             }
11778 #  ifdef USE_64_BIT_INT
11779             intsize = 'q';
11780 #  endif
11781             q++;
11782             break;
11783 #endif
11784 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11785     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11786         case 'L':                       /* Ld */
11787             /* FALLTHROUGH */
11788 #  ifdef USE_QUADMATH
11789         case 'Q':
11790             /* FALLTHROUGH */
11791 #  endif
11792 #  if IVSIZE >= 8
11793         case 'q':                       /* qd */
11794 #  endif
11795             intsize = 'q';
11796             q++;
11797             break;
11798 #endif
11799         case 'l':
11800             ++q;
11801 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11802     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11803             if (*q == 'l') {    /* lld, llf */
11804                 intsize = 'q';
11805                 ++q;
11806             }
11807             else
11808 #endif
11809                 intsize = 'l';
11810             break;
11811         case 'h':
11812             if (*++q == 'h') {  /* hhd, hhu */
11813                 intsize = 'c';
11814                 ++q;
11815             }
11816             else
11817                 intsize = 'h';
11818             break;
11819         case 'V':
11820         case 'z':
11821         case 't':
11822 #ifdef I_STDINT
11823         case 'j':
11824 #endif
11825             intsize = *q++;
11826             break;
11827         }
11828
11829         /* CONVERSION */
11830
11831         if (*q == '%') {
11832             eptr = q++;
11833             elen = 1;
11834             if (vectorize) {
11835                 c = '%';
11836                 goto unknown;
11837             }
11838             goto string;
11839         }
11840
11841         if (!vectorize && !args) {
11842             if (efix) {
11843                 const I32 i = efix-1;
11844                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11845             } else {
11846                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11847                                         svargs[svix++]);
11848             }
11849         }
11850
11851         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11852             /* XXX va_arg(*args) case? need peek, use va_copy? */
11853             SvGETMAGIC(argsv);
11854             if (UNLIKELY(SvAMAGIC(argsv)))
11855                 argsv = sv_2num(argsv);
11856             infnan = UNLIKELY(isinfnansv(argsv));
11857         }
11858
11859         switch (c = *q++) {
11860
11861             /* STRINGS */
11862
11863         case 'c':
11864             if (vectorize)
11865                 goto unknown;
11866             if (infnan)
11867                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11868                            /* no va_arg() case */
11869                            SvNV_nomg(argsv), (int)c);
11870             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11871             if ((uv > 255 ||
11872                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11873                 && !IN_BYTES) {
11874                 eptr = (char*)utf8buf;
11875                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11876                 is_utf8 = TRUE;
11877             }
11878             else {
11879                 c = (char)uv;
11880                 eptr = &c;
11881                 elen = 1;
11882             }
11883             goto string;
11884
11885         case 's':
11886             if (vectorize)
11887                 goto unknown;
11888             if (args) {
11889                 eptr = va_arg(*args, char*);
11890                 if (eptr)
11891                     elen = strlen(eptr);
11892                 else {
11893                     eptr = (char *)nullstr;
11894                     elen = sizeof nullstr - 1;
11895                 }
11896             }
11897             else {
11898                 eptr = SvPV_const(argsv, elen);
11899                 if (DO_UTF8(argsv)) {
11900                     STRLEN old_precis = precis;
11901                     if (has_precis && precis < elen) {
11902                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11903                         STRLEN p = precis > ulen ? ulen : precis;
11904                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11905                                                         /* sticks at end */
11906                     }
11907                     if (width) { /* fudge width (can't fudge elen) */
11908                         if (has_precis && precis < elen)
11909                             width += precis - old_precis;
11910                         else
11911                             width +=
11912                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11913                     }
11914                     is_utf8 = TRUE;
11915                 }
11916             }
11917
11918         string:
11919             if (has_precis && precis < elen)
11920                 elen = precis;
11921             break;
11922
11923             /* INTEGERS */
11924
11925         case 'p':
11926             if (infnan) {
11927                 goto floating_point;
11928             }
11929             if (alt || vectorize)
11930                 goto unknown;
11931             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11932             base = 16;
11933             goto integer;
11934
11935         case 'D':
11936 #ifdef IV_IS_QUAD
11937             intsize = 'q';
11938 #else
11939             intsize = 'l';
11940 #endif
11941             /* FALLTHROUGH */
11942         case 'd':
11943         case 'i':
11944             if (infnan) {
11945                 goto floating_point;
11946             }
11947             if (vectorize) {
11948                 STRLEN ulen;
11949                 if (!veclen)
11950                     goto donevalidconversion;
11951                 if (vec_utf8)
11952                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11953                                         UTF8_ALLOW_ANYUV);
11954                 else {
11955                     uv = *vecstr;
11956                     ulen = 1;
11957                 }
11958                 vecstr += ulen;
11959                 veclen -= ulen;
11960                 if (plus)
11961                      esignbuf[esignlen++] = plus;
11962             }
11963             else if (args) {
11964                 switch (intsize) {
11965                 case 'c':       iv = (char)va_arg(*args, int); break;
11966                 case 'h':       iv = (short)va_arg(*args, int); break;
11967                 case 'l':       iv = va_arg(*args, long); break;
11968                 case 'V':       iv = va_arg(*args, IV); break;
11969                 case 'z':       iv = va_arg(*args, SSize_t); break;
11970 #ifdef HAS_PTRDIFF_T
11971                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11972 #endif
11973                 default:        iv = va_arg(*args, int); break;
11974 #ifdef I_STDINT
11975                 case 'j':       iv = va_arg(*args, intmax_t); break;
11976 #endif
11977                 case 'q':
11978 #if IVSIZE >= 8
11979                                 iv = va_arg(*args, Quad_t); break;
11980 #else
11981                                 goto unknown;
11982 #endif
11983                 }
11984             }
11985             else {
11986                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11987                 switch (intsize) {
11988                 case 'c':       iv = (char)tiv; break;
11989                 case 'h':       iv = (short)tiv; break;
11990                 case 'l':       iv = (long)tiv; break;
11991                 case 'V':
11992                 default:        iv = tiv; break;
11993                 case 'q':
11994 #if IVSIZE >= 8
11995                                 iv = (Quad_t)tiv; break;
11996 #else
11997                                 goto unknown;
11998 #endif
11999                 }
12000             }
12001             if ( !vectorize )   /* we already set uv above */
12002             {
12003                 if (iv >= 0) {
12004                     uv = iv;
12005                     if (plus)
12006                         esignbuf[esignlen++] = plus;
12007                 }
12008                 else {
12009                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12010                     esignbuf[esignlen++] = '-';
12011                 }
12012             }
12013             base = 10;
12014             goto integer;
12015
12016         case 'U':
12017 #ifdef IV_IS_QUAD
12018             intsize = 'q';
12019 #else
12020             intsize = 'l';
12021 #endif
12022             /* FALLTHROUGH */
12023         case 'u':
12024             base = 10;
12025             goto uns_integer;
12026
12027         case 'B':
12028         case 'b':
12029             base = 2;
12030             goto uns_integer;
12031
12032         case 'O':
12033 #ifdef IV_IS_QUAD
12034             intsize = 'q';
12035 #else
12036             intsize = 'l';
12037 #endif
12038             /* FALLTHROUGH */
12039         case 'o':
12040             base = 8;
12041             goto uns_integer;
12042
12043         case 'X':
12044         case 'x':
12045             base = 16;
12046
12047         uns_integer:
12048             if (infnan) {
12049                 goto floating_point;
12050             }
12051             if (vectorize) {
12052                 STRLEN ulen;
12053         vector:
12054                 if (!veclen)
12055                     goto donevalidconversion;
12056                 if (vec_utf8)
12057                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12058                                         UTF8_ALLOW_ANYUV);
12059                 else {
12060                     uv = *vecstr;
12061                     ulen = 1;
12062                 }
12063                 vecstr += ulen;
12064                 veclen -= ulen;
12065             }
12066             else if (args) {
12067                 switch (intsize) {
12068                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12069                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12070                 case 'l':  uv = va_arg(*args, unsigned long); break;
12071                 case 'V':  uv = va_arg(*args, UV); break;
12072                 case 'z':  uv = va_arg(*args, Size_t); break;
12073 #ifdef HAS_PTRDIFF_T
12074                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12075 #endif
12076 #ifdef I_STDINT
12077                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12078 #endif
12079                 default:   uv = va_arg(*args, unsigned); break;
12080                 case 'q':
12081 #if IVSIZE >= 8
12082                            uv = va_arg(*args, Uquad_t); break;
12083 #else
12084                            goto unknown;
12085 #endif
12086                 }
12087             }
12088             else {
12089                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12090                 switch (intsize) {
12091                 case 'c':       uv = (unsigned char)tuv; break;
12092                 case 'h':       uv = (unsigned short)tuv; break;
12093                 case 'l':       uv = (unsigned long)tuv; break;
12094                 case 'V':
12095                 default:        uv = tuv; break;
12096                 case 'q':
12097 #if IVSIZE >= 8
12098                                 uv = (Uquad_t)tuv; break;
12099 #else
12100                                 goto unknown;
12101 #endif
12102                 }
12103             }
12104
12105         integer:
12106             {
12107                 char *ptr = ebuf + sizeof ebuf;
12108                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12109                 unsigned dig;
12110                 zeros = 0;
12111
12112                 switch (base) {
12113                 case 16:
12114                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12115                     do {
12116                         dig = uv & 15;
12117                         *--ptr = p[dig];
12118                     } while (uv >>= 4);
12119                     if (tempalt) {
12120                         esignbuf[esignlen++] = '0';
12121                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12122                     }
12123                     break;
12124                 case 8:
12125                     do {
12126                         dig = uv & 7;
12127                         *--ptr = '0' + dig;
12128                     } while (uv >>= 3);
12129                     if (alt && *ptr != '0')
12130                         *--ptr = '0';
12131                     break;
12132                 case 2:
12133                     do {
12134                         dig = uv & 1;
12135                         *--ptr = '0' + dig;
12136                     } while (uv >>= 1);
12137                     if (tempalt) {
12138                         esignbuf[esignlen++] = '0';
12139                         esignbuf[esignlen++] = c;
12140                     }
12141                     break;
12142                 default:                /* it had better be ten or less */
12143                     do {
12144                         dig = uv % base;
12145                         *--ptr = '0' + dig;
12146                     } while (uv /= base);
12147                     break;
12148                 }
12149                 elen = (ebuf + sizeof ebuf) - ptr;
12150                 eptr = ptr;
12151                 if (has_precis) {
12152                     if (precis > elen)
12153                         zeros = precis - elen;
12154                     else if (precis == 0 && elen == 1 && *eptr == '0'
12155                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12156                         elen = 0;
12157
12158                 /* a precision nullifies the 0 flag. */
12159                     if (fill == '0')
12160                         fill = ' ';
12161                 }
12162             }
12163             break;
12164
12165             /* FLOATING POINT */
12166
12167         floating_point:
12168
12169         case 'F':
12170             c = 'f';            /* maybe %F isn't supported here */
12171             /* FALLTHROUGH */
12172         case 'e': case 'E':
12173         case 'f':
12174         case 'g': case 'G':
12175         case 'a': case 'A':
12176             if (vectorize)
12177                 goto unknown;
12178
12179             /* This is evil, but floating point is even more evil */
12180
12181             /* for SV-style calling, we can only get NV
12182                for C-style calling, we assume %f is double;
12183                for simplicity we allow any of %Lf, %llf, %qf for long double
12184             */
12185             switch (intsize) {
12186             case 'V':
12187 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12188                 intsize = 'q';
12189 #endif
12190                 break;
12191 /* [perl #20339] - we should accept and ignore %lf rather than die */
12192             case 'l':
12193                 /* FALLTHROUGH */
12194             default:
12195 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12196                 intsize = args ? 0 : 'q';
12197 #endif
12198                 break;
12199             case 'q':
12200 #if defined(HAS_LONG_DOUBLE)
12201                 break;
12202 #else
12203                 /* FALLTHROUGH */
12204 #endif
12205             case 'c':
12206             case 'h':
12207             case 'z':
12208             case 't':
12209             case 'j':
12210                 goto unknown;
12211             }
12212
12213             /* Now we need (long double) if intsize == 'q', else (double). */
12214             if (args) {
12215                 /* Note: do not pull NVs off the va_list with va_arg()
12216                  * (pull doubles instead) because if you have a build
12217                  * with long doubles, you would always be pulling long
12218                  * doubles, which would badly break anyone using only
12219                  * doubles (i.e. the majority of builds). In other
12220                  * words, you cannot mix doubles and long doubles.
12221                  * The only case where you can pull off long doubles
12222                  * is when the format specifier explicitly asks so with
12223                  * e.g. "%Lg". */
12224 #ifdef USE_QUADMATH
12225                 fv = intsize == 'q' ?
12226                     va_arg(*args, NV) : va_arg(*args, double);
12227                 nv = fv;
12228 #elif LONG_DOUBLESIZE > DOUBLESIZE
12229                 if (intsize == 'q') {
12230                     fv = va_arg(*args, long double);
12231                     nv = fv;
12232                 } else {
12233                     nv = va_arg(*args, double);
12234                     NV_TO_FV(nv, fv);
12235                 }
12236 #else
12237                 nv = va_arg(*args, double);
12238                 fv = nv;
12239 #endif
12240             }
12241             else
12242             {
12243                 if (!infnan) SvGETMAGIC(argsv);
12244                 nv = SvNV_nomg(argsv);
12245                 NV_TO_FV(nv, fv);
12246             }
12247
12248             need = 0;
12249             /* frexp() (or frexpl) has some unspecified behaviour for
12250              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12251             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12252                 i = PERL_INT_MIN;
12253                 (void)Perl_frexp((NV)fv, &i);
12254                 if (i == PERL_INT_MIN)
12255                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12256                 /* Do not set hexfp earlier since we want to printf
12257                  * Inf/NaN for Inf/NaN, not their hexfp. */
12258                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12259                 if (UNLIKELY(hexfp)) {
12260                     /* This seriously overshoots in most cases, but
12261                      * better the undershooting.  Firstly, all bytes
12262                      * of the NV are not mantissa, some of them are
12263                      * exponent.  Secondly, for the reasonably common
12264                      * long doubles case, the "80-bit extended", two
12265                      * or six bytes of the NV are unused. */
12266                     need +=
12267                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12268                         2 + /* "0x" */
12269                         1 + /* the very unlikely carry */
12270                         1 + /* "1" */
12271                         1 + /* "." */
12272                         2 * NVSIZE + /* 2 hexdigits for each byte */
12273                         2 + /* "p+" */
12274                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12275                         1;   /* \0 */
12276 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12277                     /* However, for the "double double", we need more.
12278                      * Since each double has their own exponent, the
12279                      * doubles may float (haha) rather far from each
12280                      * other, and the number of required bits is much
12281                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12282                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12283                      *
12284                      * Need 2 hexdigits for each byte. */
12285                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12286                     /* the size for the exponent already added */
12287 #endif
12288 #ifdef USE_LOCALE_NUMERIC
12289                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12290                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12291                             need += SvLEN(PL_numeric_radix_sv);
12292                         RESTORE_LC_NUMERIC();
12293 #endif
12294                 }
12295                 else if (i > 0) {
12296                     need = BIT_DIGITS(i);
12297                 } /* if i < 0, the number of digits is hard to predict. */
12298             }
12299             need += has_precis ? precis : 6; /* known default */
12300
12301             if (need < width)
12302                 need = width;
12303
12304 #ifdef HAS_LDBL_SPRINTF_BUG
12305             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12306                with sfio - Allen <allens@cpan.org> */
12307
12308 #  ifdef DBL_MAX
12309 #    define MY_DBL_MAX DBL_MAX
12310 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12311 #    if DOUBLESIZE >= 8
12312 #      define MY_DBL_MAX 1.7976931348623157E+308L
12313 #    else
12314 #      define MY_DBL_MAX 3.40282347E+38L
12315 #    endif
12316 #  endif
12317
12318 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12319 #    define MY_DBL_MAX_BUG 1L
12320 #  else
12321 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12322 #  endif
12323
12324 #  ifdef DBL_MIN
12325 #    define MY_DBL_MIN DBL_MIN
12326 #  else  /* XXX guessing! -Allen */
12327 #    if DOUBLESIZE >= 8
12328 #      define MY_DBL_MIN 2.2250738585072014E-308L
12329 #    else
12330 #      define MY_DBL_MIN 1.17549435E-38L
12331 #    endif
12332 #  endif
12333
12334             if ((intsize == 'q') && (c == 'f') &&
12335                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12336                 (need < DBL_DIG)) {
12337                 /* it's going to be short enough that
12338                  * long double precision is not needed */
12339
12340                 if ((fv <= 0L) && (fv >= -0L))
12341                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12342                 else {
12343                     /* would use Perl_fp_class as a double-check but not
12344                      * functional on IRIX - see perl.h comments */
12345
12346                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12347                         /* It's within the range that a double can represent */
12348 #if defined(DBL_MAX) && !defined(DBL_MIN)
12349                         if ((fv >= ((long double)1/DBL_MAX)) ||
12350                             (fv <= (-(long double)1/DBL_MAX)))
12351 #endif
12352                         fix_ldbl_sprintf_bug = TRUE;
12353                     }
12354                 }
12355                 if (fix_ldbl_sprintf_bug == TRUE) {
12356                     double temp;
12357
12358                     intsize = 0;
12359                     temp = (double)fv;
12360                     fv = (NV)temp;
12361                 }
12362             }
12363
12364 #  undef MY_DBL_MAX
12365 #  undef MY_DBL_MAX_BUG
12366 #  undef MY_DBL_MIN
12367
12368 #endif /* HAS_LDBL_SPRINTF_BUG */
12369
12370             need += 20; /* fudge factor */
12371             if (PL_efloatsize < need) {
12372                 Safefree(PL_efloatbuf);
12373                 PL_efloatsize = need + 20; /* more fudge */
12374                 Newx(PL_efloatbuf, PL_efloatsize, char);
12375                 PL_efloatbuf[0] = '\0';
12376             }
12377
12378             if ( !(width || left || plus || alt) && fill != '0'
12379                  && has_precis && intsize != 'q'        /* Shortcuts */
12380                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12381                 /* See earlier comment about buggy Gconvert when digits,
12382                    aka precis is 0  */
12383                 if ( c == 'g' && precis ) {
12384                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12385                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12386                     /* May return an empty string for digits==0 */
12387                     if (*PL_efloatbuf) {
12388                         elen = strlen(PL_efloatbuf);
12389                         goto float_converted;
12390                     }
12391                 } else if ( c == 'f' && !precis ) {
12392                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12393                         break;
12394                 }
12395             }
12396
12397             if (UNLIKELY(hexfp)) {
12398                 /* Hexadecimal floating point. */
12399                 char* p = PL_efloatbuf;
12400                 U8 vhex[VHEX_SIZE];
12401                 U8* v = vhex; /* working pointer to vhex */
12402                 U8* vend; /* pointer to one beyond last digit of vhex */
12403                 U8* vfnz = NULL; /* first non-zero */
12404                 U8* vlnz = NULL; /* last non-zero */
12405                 const bool lower = (c == 'a');
12406                 /* At output the values of vhex (up to vend) will
12407                  * be mapped through the xdig to get the actual
12408                  * human-readable xdigits. */
12409                 const char* xdig = PL_hexdigit;
12410                 int zerotail = 0; /* how many extra zeros to append */
12411                 int exponent = 0; /* exponent of the floating point input */
12412                 bool hexradix = FALSE; /* should we output the radix */
12413
12414                 /* XXX: denormals, NaN, Inf.
12415                  *
12416                  * For example with denormals, (assuming the vanilla
12417                  * 64-bit double): the exponent is zero. 1xp-1074 is
12418                  * the smallest denormal and the smallest double, it
12419                  * should be output as 0x0.0000000000001p-1022 to
12420                  * match its internal structure. */
12421
12422                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12423                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12424
12425 #if NVSIZE > DOUBLESIZE
12426 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12427                 /* In this case there is an implicit bit,
12428                  * and therefore the exponent is shifted shift by one. */
12429                 exponent--;
12430 #  else
12431                 /* In this case there is no implicit bit,
12432                  * and the exponent is shifted by the first xdigit. */
12433                 exponent -= 4;
12434 #  endif
12435 #endif
12436
12437                 if (fv < 0
12438                     || Perl_signbit(nv)
12439                   )
12440                     *p++ = '-';
12441                 else if (plus)
12442                     *p++ = plus;
12443                 *p++ = '0';
12444                 if (lower) {
12445                     *p++ = 'x';
12446                 }
12447                 else {
12448                     *p++ = 'X';
12449                     xdig += 16; /* Use uppercase hex. */
12450                 }
12451
12452                 /* Find the first non-zero xdigit. */
12453                 for (v = vhex; v < vend; v++) {
12454                     if (*v) {
12455                         vfnz = v;
12456                         break;
12457                     }
12458                 }
12459
12460                 if (vfnz) {
12461                     /* Find the last non-zero xdigit. */
12462                     for (v = vend - 1; v >= vhex; v--) {
12463                         if (*v) {
12464                             vlnz = v;
12465                             break;
12466                         }
12467                     }
12468
12469 #if NVSIZE == DOUBLESIZE
12470                     if (fv != 0.0)
12471                         exponent--;
12472 #endif
12473
12474                     if (precis > 0) {
12475                         if ((SSize_t)(precis + 1) < vend - vhex) {
12476                             bool round;
12477
12478                             v = vhex + precis + 1;
12479                             /* Round away from zero: if the tail
12480                              * beyond the precis xdigits is equal to
12481                              * or greater than 0x8000... */
12482                             round = *v > 0x8;
12483                             if (!round && *v == 0x8) {
12484                                 for (v++; v < vend; v++) {
12485                                     if (*v) {
12486                                         round = TRUE;
12487                                         break;
12488                                     }
12489                                 }
12490                             }
12491                             if (round) {
12492                                 for (v = vhex + precis; v >= vhex; v--) {
12493                                     if (*v < 0xF) {
12494                                         (*v)++;
12495                                         break;
12496                                     }
12497                                     *v = 0;
12498                                     if (v == vhex) {
12499                                         /* If the carry goes all the way to
12500                                          * the front, we need to output
12501                                          * a single '1'. This goes against
12502                                          * the "xdigit and then radix"
12503                                          * but since this is "cannot happen"
12504                                          * category, that is probably good. */
12505                                         *p++ = xdig[1];
12506                                     }
12507                                 }
12508                             }
12509                             /* The new effective "last non zero". */
12510                             vlnz = vhex + precis;
12511                         }
12512                         else {
12513                             zerotail = precis - (vlnz - vhex);
12514                         }
12515                     }
12516
12517                     v = vhex;
12518                     *p++ = xdig[*v++];
12519
12520                     /* If there are non-zero xdigits, the radix
12521                      * is output after the first one. */
12522                     if (vfnz < vlnz) {
12523                       hexradix = TRUE;
12524                     }
12525                 }
12526                 else {
12527                     *p++ = '0';
12528                     exponent = 0;
12529                     zerotail = precis;
12530                 }
12531
12532                 /* The radix is always output if precis, or if alt. */
12533                 if (precis > 0 || alt) {
12534                   hexradix = TRUE;
12535                 }
12536
12537                 if (hexradix) {
12538 #ifndef USE_LOCALE_NUMERIC
12539                         *p++ = '.';
12540 #else
12541                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12542                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12543                             STRLEN n;
12544                             const char* r = SvPV(PL_numeric_radix_sv, n);
12545                             Copy(r, p, n, char);
12546                             p += n;
12547                         }
12548                         else {
12549                             *p++ = '.';
12550                         }
12551                         RESTORE_LC_NUMERIC();
12552 #endif
12553                 }
12554
12555                 if (vlnz) {
12556                     while (v <= vlnz)
12557                         *p++ = xdig[*v++];
12558                 }
12559
12560                 if (zerotail > 0) {
12561                   while (zerotail--) {
12562                     *p++ = '0';
12563                   }
12564                 }
12565
12566                 elen = p - PL_efloatbuf;
12567                 elen += my_snprintf(p, PL_efloatsize - elen,
12568                                     "%c%+d", lower ? 'p' : 'P',
12569                                     exponent);
12570
12571                 if (elen < width) {
12572                     if (left) {
12573                         /* Pad the back with spaces. */
12574                         memset(PL_efloatbuf + elen, ' ', width - elen);
12575                     }
12576                     else if (fill == '0') {
12577                         /* Insert the zeros between the "0x" and
12578                          * the digits, otherwise we end up with
12579                          * "0000xHHH..." */
12580                         STRLEN nzero = width - elen;
12581                         char* zerox = PL_efloatbuf + 2;
12582                         Move(zerox, zerox + nzero,  elen - 2, char);
12583                         memset(zerox, fill, nzero);
12584                     }
12585                     else {
12586                         /* Move it to the right. */
12587                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12588                              elen, char);
12589                         /* Pad the front with spaces. */
12590                         memset(PL_efloatbuf, ' ', width - elen);
12591                     }
12592                     elen = width;
12593                 }
12594             }
12595             else {
12596                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12597                 if (elen) {
12598                     /* Not affecting infnan output: precision, alt, fill. */
12599                     if (elen < width) {
12600                         if (left) {
12601                             /* Pack the back with spaces. */
12602                             memset(PL_efloatbuf + elen, ' ', width - elen);
12603                         } else {
12604                             /* Move it to the right. */
12605                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12606                                  elen, char);
12607                             /* Pad the front with spaces. */
12608                             memset(PL_efloatbuf, ' ', width - elen);
12609                         }
12610                         elen = width;
12611                     }
12612                 }
12613             }
12614
12615             if (elen == 0) {
12616                 char *ptr = ebuf + sizeof ebuf;
12617                 *--ptr = '\0';
12618                 *--ptr = c;
12619 #if defined(USE_QUADMATH)
12620                 if (intsize == 'q') {
12621                     /* "g" -> "Qg" */
12622                     *--ptr = 'Q';
12623                 }
12624                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12625 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12626                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12627                  * not USE_LONG_DOUBLE and NVff.  In other words,
12628                  * this needs to work without USE_LONG_DOUBLE. */
12629                 if (intsize == 'q') {
12630                     /* Copy the one or more characters in a long double
12631                      * format before the 'base' ([efgEFG]) character to
12632                      * the format string. */
12633                     static char const ldblf[] = PERL_PRIfldbl;
12634                     char const *p = ldblf + sizeof(ldblf) - 3;
12635                     while (p >= ldblf) { *--ptr = *p--; }
12636                 }
12637 #endif
12638                 if (has_precis) {
12639                     base = precis;
12640                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12641                     *--ptr = '.';
12642                 }
12643                 if (width) {
12644                     base = width;
12645                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12646                 }
12647                 if (fill == '0')
12648                     *--ptr = fill;
12649                 if (left)
12650                     *--ptr = '-';
12651                 if (plus)
12652                     *--ptr = plus;
12653                 if (alt)
12654                     *--ptr = '#';
12655                 *--ptr = '%';
12656
12657                 /* No taint.  Otherwise we are in the strange situation
12658                  * where printf() taints but print($float) doesn't.
12659                  * --jhi */
12660
12661                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12662
12663                 /* hopefully the above makes ptr a very constrained format
12664                  * that is safe to use, even though it's not literal */
12665                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12666 #ifdef USE_QUADMATH
12667                 {
12668                     const char* qfmt = quadmath_format_single(ptr);
12669                     if (!qfmt)
12670                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12671                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12672                                              qfmt, nv);
12673                     if ((IV)elen == -1)
12674                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12675                     if (qfmt != ptr)
12676                         Safefree(qfmt);
12677                 }
12678 #elif defined(HAS_LONG_DOUBLE)
12679                 elen = ((intsize == 'q')
12680                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12681                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12682 #else
12683                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12684 #endif
12685                 GCC_DIAG_RESTORE;
12686             }
12687
12688         float_converted:
12689             eptr = PL_efloatbuf;
12690             assert((IV)elen > 0); /* here zero elen is bad */
12691
12692 #ifdef USE_LOCALE_NUMERIC
12693             /* If the decimal point character in the string is UTF-8, make the
12694              * output utf8 */
12695             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12696                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12697             {
12698                 is_utf8 = TRUE;
12699             }
12700 #endif
12701
12702             break;
12703
12704             /* SPECIAL */
12705
12706         case 'n':
12707             if (vectorize)
12708                 goto unknown;
12709             i = SvCUR(sv) - origlen;
12710             if (args) {
12711                 switch (intsize) {
12712                 case 'c':       *(va_arg(*args, char*)) = i; break;
12713                 case 'h':       *(va_arg(*args, short*)) = i; break;
12714                 default:        *(va_arg(*args, int*)) = i; break;
12715                 case 'l':       *(va_arg(*args, long*)) = i; break;
12716                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12717                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12718 #ifdef HAS_PTRDIFF_T
12719                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12720 #endif
12721 #ifdef I_STDINT
12722                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12723 #endif
12724                 case 'q':
12725 #if IVSIZE >= 8
12726                                 *(va_arg(*args, Quad_t*)) = i; break;
12727 #else
12728                                 goto unknown;
12729 #endif
12730                 }
12731             }
12732             else
12733                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12734             goto donevalidconversion;
12735
12736             /* UNKNOWN */
12737
12738         default:
12739       unknown:
12740             if (!args
12741                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12742                 && ckWARN(WARN_PRINTF))
12743             {
12744                 SV * const msg = sv_newmortal();
12745                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12746                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12747                 if (fmtstart < patend) {
12748                     const char * const fmtend = q < patend ? q : patend;
12749                     const char * f;
12750                     sv_catpvs(msg, "\"%");
12751                     for (f = fmtstart; f < fmtend; f++) {
12752                         if (isPRINT(*f)) {
12753                             sv_catpvn_nomg(msg, f, 1);
12754                         } else {
12755                             Perl_sv_catpvf(aTHX_ msg,
12756                                            "\\%03"UVof, (UV)*f & 0xFF);
12757                         }
12758                     }
12759                     sv_catpvs(msg, "\"");
12760                 } else {
12761                     sv_catpvs(msg, "end of string");
12762                 }
12763                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12764             }
12765
12766             /* output mangled stuff ... */
12767             if (c == '\0')
12768                 --q;
12769             eptr = p;
12770             elen = q - p;
12771
12772             /* ... right here, because formatting flags should not apply */
12773             SvGROW(sv, SvCUR(sv) + elen + 1);
12774             p = SvEND(sv);
12775             Copy(eptr, p, elen, char);
12776             p += elen;
12777             *p = '\0';
12778             SvCUR_set(sv, p - SvPVX_const(sv));
12779             svix = osvix;
12780             continue;   /* not "break" */
12781         }
12782
12783         if (is_utf8 != has_utf8) {
12784             if (is_utf8) {
12785                 if (SvCUR(sv))
12786                     sv_utf8_upgrade(sv);
12787             }
12788             else {
12789                 const STRLEN old_elen = elen;
12790                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12791                 sv_utf8_upgrade(nsv);
12792                 eptr = SvPVX_const(nsv);
12793                 elen = SvCUR(nsv);
12794
12795                 if (width) { /* fudge width (can't fudge elen) */
12796                     width += elen - old_elen;
12797                 }
12798                 is_utf8 = TRUE;
12799             }
12800         }
12801
12802         /* signed value that's wrapped? */
12803         assert(elen  <= ((~(STRLEN)0) >> 1));
12804         have = esignlen + zeros + elen;
12805         if (have < zeros)
12806             croak_memory_wrap();
12807
12808         need = (have > width ? have : width);
12809         gap = need - have;
12810
12811         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12812             croak_memory_wrap();
12813         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12814         p = SvEND(sv);
12815         if (esignlen && fill == '0') {
12816             int i;
12817             for (i = 0; i < (int)esignlen; i++)
12818                 *p++ = esignbuf[i];
12819         }
12820         if (gap && !left) {
12821             memset(p, fill, gap);
12822             p += gap;
12823         }
12824         if (esignlen && fill != '0') {
12825             int i;
12826             for (i = 0; i < (int)esignlen; i++)
12827                 *p++ = esignbuf[i];
12828         }
12829         if (zeros) {
12830             int i;
12831             for (i = zeros; i; i--)
12832                 *p++ = '0';
12833         }
12834         if (elen) {
12835             Copy(eptr, p, elen, char);
12836             p += elen;
12837         }
12838         if (gap && left) {
12839             memset(p, ' ', gap);
12840             p += gap;
12841         }
12842         if (vectorize) {
12843             if (veclen) {
12844                 Copy(dotstr, p, dotstrlen, char);
12845                 p += dotstrlen;
12846             }
12847             else
12848                 vectorize = FALSE;              /* done iterating over vecstr */
12849         }
12850         if (is_utf8)
12851             has_utf8 = TRUE;
12852         if (has_utf8)
12853             SvUTF8_on(sv);
12854         *p = '\0';
12855         SvCUR_set(sv, p - SvPVX_const(sv));
12856         if (vectorize) {
12857             esignlen = 0;
12858             goto vector;
12859         }
12860
12861       donevalidconversion:
12862         if (used_explicit_ix)
12863             no_redundant_warning = TRUE;
12864         if (arg_missing)
12865             S_warn_vcatpvfn_missing_argument(aTHX);
12866     }
12867
12868     /* Now that we've consumed all our printf format arguments (svix)
12869      * do we have things left on the stack that we didn't use?
12870      */
12871     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12872         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12873                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12874     }
12875
12876     SvTAINT(sv);
12877
12878     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12879                                each iteration. */
12880 }
12881
12882 /* =========================================================================
12883
12884 =head1 Cloning an interpreter
12885
12886 =cut
12887
12888 All the macros and functions in this section are for the private use of
12889 the main function, perl_clone().
12890
12891 The foo_dup() functions make an exact copy of an existing foo thingy.
12892 During the course of a cloning, a hash table is used to map old addresses
12893 to new addresses.  The table is created and manipulated with the
12894 ptr_table_* functions.
12895
12896  * =========================================================================*/
12897
12898
12899 #if defined(USE_ITHREADS)
12900
12901 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12902 #ifndef GpREFCNT_inc
12903 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12904 #endif
12905
12906
12907 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12908    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12909    If this changes, please unmerge ss_dup.
12910    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12911 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12912 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12913 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12914 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12915 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12916 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12917 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12918 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12919 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12920 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12921 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12922 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12923 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12924
12925 /* clone a parser */
12926
12927 yy_parser *
12928 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12929 {
12930     yy_parser *parser;
12931
12932     PERL_ARGS_ASSERT_PARSER_DUP;
12933
12934     if (!proto)
12935         return NULL;
12936
12937     /* look for it in the table first */
12938     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12939     if (parser)
12940         return parser;
12941
12942     /* create anew and remember what it is */
12943     Newxz(parser, 1, yy_parser);
12944     ptr_table_store(PL_ptr_table, proto, parser);
12945
12946     /* XXX these not yet duped */
12947     parser->old_parser = NULL;
12948     parser->stack = NULL;
12949     parser->ps = NULL;
12950     parser->stack_size = 0;
12951     /* XXX parser->stack->state = 0; */
12952
12953     /* XXX eventually, just Copy() most of the parser struct ? */
12954
12955     parser->lex_brackets = proto->lex_brackets;
12956     parser->lex_casemods = proto->lex_casemods;
12957     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12958                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12959     parser->lex_casestack = savepvn(proto->lex_casestack,
12960                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12961     parser->lex_defer   = proto->lex_defer;
12962     parser->lex_dojoin  = proto->lex_dojoin;
12963     parser->lex_formbrack = proto->lex_formbrack;
12964     parser->lex_inpat   = proto->lex_inpat;
12965     parser->lex_inwhat  = proto->lex_inwhat;
12966     parser->lex_op      = proto->lex_op;
12967     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12968     parser->lex_starts  = proto->lex_starts;
12969     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12970     parser->multi_close = proto->multi_close;
12971     parser->multi_open  = proto->multi_open;
12972     parser->multi_start = proto->multi_start;
12973     parser->multi_end   = proto->multi_end;
12974     parser->preambled   = proto->preambled;
12975     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12976     parser->linestr     = sv_dup_inc(proto->linestr, param);
12977     parser->expect      = proto->expect;
12978     parser->copline     = proto->copline;
12979     parser->last_lop_op = proto->last_lop_op;
12980     parser->lex_state   = proto->lex_state;
12981     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12982     /* rsfp_filters entries have fake IoDIRP() */
12983     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12984     parser->in_my       = proto->in_my;
12985     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12986     parser->error_count = proto->error_count;
12987
12988
12989     parser->linestr     = sv_dup_inc(proto->linestr, param);
12990
12991     {
12992         char * const ols = SvPVX(proto->linestr);
12993         char * const ls  = SvPVX(parser->linestr);
12994
12995         parser->bufptr      = ls + (proto->bufptr >= ols ?
12996                                     proto->bufptr -  ols : 0);
12997         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12998                                     proto->oldbufptr -  ols : 0);
12999         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13000                                     proto->oldoldbufptr -  ols : 0);
13001         parser->linestart   = ls + (proto->linestart >= ols ?
13002                                     proto->linestart -  ols : 0);
13003         parser->last_uni    = ls + (proto->last_uni >= ols ?
13004                                     proto->last_uni -  ols : 0);
13005         parser->last_lop    = ls + (proto->last_lop >= ols ?
13006                                     proto->last_lop -  ols : 0);
13007
13008         parser->bufend      = ls + SvCUR(parser->linestr);
13009     }
13010
13011     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13012
13013
13014     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13015     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13016     parser->nexttoke    = proto->nexttoke;
13017
13018     /* XXX should clone saved_curcop here, but we aren't passed
13019      * proto_perl; so do it in perl_clone_using instead */
13020
13021     return parser;
13022 }
13023
13024
13025 /* duplicate a file handle */
13026
13027 PerlIO *
13028 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13029 {
13030     PerlIO *ret;
13031
13032     PERL_ARGS_ASSERT_FP_DUP;
13033     PERL_UNUSED_ARG(type);
13034
13035     if (!fp)
13036         return (PerlIO*)NULL;
13037
13038     /* look for it in the table first */
13039     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13040     if (ret)
13041         return ret;
13042
13043     /* create anew and remember what it is */
13044 #ifdef __amigaos4__
13045     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13046 #else
13047     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13048 #endif
13049     ptr_table_store(PL_ptr_table, fp, ret);
13050     return ret;
13051 }
13052
13053 /* duplicate a directory handle */
13054
13055 DIR *
13056 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13057 {
13058     DIR *ret;
13059
13060 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13061     DIR *pwd;
13062     const Direntry_t *dirent;
13063     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13064     char *name = NULL;
13065     STRLEN len = 0;
13066     long pos;
13067 #endif
13068
13069     PERL_UNUSED_CONTEXT;
13070     PERL_ARGS_ASSERT_DIRP_DUP;
13071
13072     if (!dp)
13073         return (DIR*)NULL;
13074
13075     /* look for it in the table first */
13076     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13077     if (ret)
13078         return ret;
13079
13080 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13081
13082     PERL_UNUSED_ARG(param);
13083
13084     /* create anew */
13085
13086     /* open the current directory (so we can switch back) */
13087     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13088
13089     /* chdir to our dir handle and open the present working directory */
13090     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13091         PerlDir_close(pwd);
13092         return (DIR *)NULL;
13093     }
13094     /* Now we should have two dir handles pointing to the same dir. */
13095
13096     /* Be nice to the calling code and chdir back to where we were. */
13097     /* XXX If this fails, then what? */
13098     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13099
13100     /* We have no need of the pwd handle any more. */
13101     PerlDir_close(pwd);
13102
13103 #ifdef DIRNAMLEN
13104 # define d_namlen(d) (d)->d_namlen
13105 #else
13106 # define d_namlen(d) strlen((d)->d_name)
13107 #endif
13108     /* Iterate once through dp, to get the file name at the current posi-
13109        tion. Then step back. */
13110     pos = PerlDir_tell(dp);
13111     if ((dirent = PerlDir_read(dp))) {
13112         len = d_namlen(dirent);
13113         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13114             /* If the len is somehow magically longer than the
13115              * maximum length of the directory entry, even though
13116              * we could fit it in a buffer, we could not copy it
13117              * from the dirent.  Bail out. */
13118             PerlDir_close(ret);
13119             return (DIR*)NULL;
13120         }
13121         if (len <= sizeof smallbuf) name = smallbuf;
13122         else Newx(name, len, char);
13123         Move(dirent->d_name, name, len, char);
13124     }
13125     PerlDir_seek(dp, pos);
13126
13127     /* Iterate through the new dir handle, till we find a file with the
13128        right name. */
13129     if (!dirent) /* just before the end */
13130         for(;;) {
13131             pos = PerlDir_tell(ret);
13132             if (PerlDir_read(ret)) continue; /* not there yet */
13133             PerlDir_seek(ret, pos); /* step back */
13134             break;
13135         }
13136     else {
13137         const long pos0 = PerlDir_tell(ret);
13138         for(;;) {
13139             pos = PerlDir_tell(ret);
13140             if ((dirent = PerlDir_read(ret))) {
13141                 if (len == (STRLEN)d_namlen(dirent)
13142                     && memEQ(name, dirent->d_name, len)) {
13143                     /* found it */
13144                     PerlDir_seek(ret, pos); /* step back */
13145                     break;
13146                 }
13147                 /* else we are not there yet; keep iterating */
13148             }
13149             else { /* This is not meant to happen. The best we can do is
13150                       reset the iterator to the beginning. */
13151                 PerlDir_seek(ret, pos0);
13152                 break;
13153             }
13154         }
13155     }
13156 #undef d_namlen
13157
13158     if (name && name != smallbuf)
13159         Safefree(name);
13160 #endif
13161
13162 #ifdef WIN32
13163     ret = win32_dirp_dup(dp, param);
13164 #endif
13165
13166     /* pop it in the pointer table */
13167     if (ret)
13168         ptr_table_store(PL_ptr_table, dp, ret);
13169
13170     return ret;
13171 }
13172
13173 /* duplicate a typeglob */
13174
13175 GP *
13176 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13177 {
13178     GP *ret;
13179
13180     PERL_ARGS_ASSERT_GP_DUP;
13181
13182     if (!gp)
13183         return (GP*)NULL;
13184     /* look for it in the table first */
13185     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13186     if (ret)
13187         return ret;
13188
13189     /* create anew and remember what it is */
13190     Newxz(ret, 1, GP);
13191     ptr_table_store(PL_ptr_table, gp, ret);
13192
13193     /* clone */
13194     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13195        on Newxz() to do this for us.  */
13196     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13197     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13198     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13199     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13200     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13201     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13202     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13203     ret->gp_cvgen       = gp->gp_cvgen;
13204     ret->gp_line        = gp->gp_line;
13205     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13206     return ret;
13207 }
13208
13209 /* duplicate a chain of magic */
13210
13211 MAGIC *
13212 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13213 {
13214     MAGIC *mgret = NULL;
13215     MAGIC **mgprev_p = &mgret;
13216
13217     PERL_ARGS_ASSERT_MG_DUP;
13218
13219     for (; mg; mg = mg->mg_moremagic) {
13220         MAGIC *nmg;
13221
13222         if ((param->flags & CLONEf_JOIN_IN)
13223                 && mg->mg_type == PERL_MAGIC_backref)
13224             /* when joining, we let the individual SVs add themselves to
13225              * backref as needed. */
13226             continue;
13227
13228         Newx(nmg, 1, MAGIC);
13229         *mgprev_p = nmg;
13230         mgprev_p = &(nmg->mg_moremagic);
13231
13232         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13233            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13234            from the original commit adding Perl_mg_dup() - revision 4538.
13235            Similarly there is the annotation "XXX random ptr?" next to the
13236            assignment to nmg->mg_ptr.  */
13237         *nmg = *mg;
13238
13239         /* FIXME for plugins
13240         if (nmg->mg_type == PERL_MAGIC_qr) {
13241             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13242         }
13243         else
13244         */
13245         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13246                           ? nmg->mg_type == PERL_MAGIC_backref
13247                                 /* The backref AV has its reference
13248                                  * count deliberately bumped by 1 */
13249                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13250                                                     nmg->mg_obj, param))
13251                                 : sv_dup_inc(nmg->mg_obj, param)
13252                           : sv_dup(nmg->mg_obj, param);
13253
13254         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13255             if (nmg->mg_len > 0) {
13256                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13257                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13258                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13259                 {
13260                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13261                     sv_dup_inc_multiple((SV**)(namtp->table),
13262                                         (SV**)(namtp->table), NofAMmeth, param);
13263                 }
13264             }
13265             else if (nmg->mg_len == HEf_SVKEY)
13266                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13267         }
13268         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13269             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13270         }
13271     }
13272     return mgret;
13273 }
13274
13275 #endif /* USE_ITHREADS */
13276
13277 struct ptr_tbl_arena {
13278     struct ptr_tbl_arena *next;
13279     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13280 };
13281
13282 /* create a new pointer-mapping table */
13283
13284 PTR_TBL_t *
13285 Perl_ptr_table_new(pTHX)
13286 {
13287     PTR_TBL_t *tbl;
13288     PERL_UNUSED_CONTEXT;
13289
13290     Newx(tbl, 1, PTR_TBL_t);
13291     tbl->tbl_max        = 511;
13292     tbl->tbl_items      = 0;
13293     tbl->tbl_arena      = NULL;
13294     tbl->tbl_arena_next = NULL;
13295     tbl->tbl_arena_end  = NULL;
13296     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13297     return tbl;
13298 }
13299
13300 #define PTR_TABLE_HASH(ptr) \
13301   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13302
13303 /* map an existing pointer using a table */
13304
13305 STATIC PTR_TBL_ENT_t *
13306 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13307 {
13308     PTR_TBL_ENT_t *tblent;
13309     const UV hash = PTR_TABLE_HASH(sv);
13310
13311     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13312
13313     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13314     for (; tblent; tblent = tblent->next) {
13315         if (tblent->oldval == sv)
13316             return tblent;
13317     }
13318     return NULL;
13319 }
13320
13321 void *
13322 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13323 {
13324     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13325
13326     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13327     PERL_UNUSED_CONTEXT;
13328
13329     return tblent ? tblent->newval : NULL;
13330 }
13331
13332 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13333  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13334  * the core's typical use of ptr_tables in thread cloning. */
13335
13336 void
13337 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13338 {
13339     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13340
13341     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13342     PERL_UNUSED_CONTEXT;
13343
13344     if (tblent) {
13345         tblent->newval = newsv;
13346     } else {
13347         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13348
13349         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13350             struct ptr_tbl_arena *new_arena;
13351
13352             Newx(new_arena, 1, struct ptr_tbl_arena);
13353             new_arena->next = tbl->tbl_arena;
13354             tbl->tbl_arena = new_arena;
13355             tbl->tbl_arena_next = new_arena->array;
13356             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13357         }
13358
13359         tblent = tbl->tbl_arena_next++;
13360
13361         tblent->oldval = oldsv;
13362         tblent->newval = newsv;
13363         tblent->next = tbl->tbl_ary[entry];
13364         tbl->tbl_ary[entry] = tblent;
13365         tbl->tbl_items++;
13366         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13367             ptr_table_split(tbl);
13368     }
13369 }
13370
13371 /* double the hash bucket size of an existing ptr table */
13372
13373 void
13374 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13375 {
13376     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13377     const UV oldsize = tbl->tbl_max + 1;
13378     UV newsize = oldsize * 2;
13379     UV i;
13380
13381     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13382     PERL_UNUSED_CONTEXT;
13383
13384     Renew(ary, newsize, PTR_TBL_ENT_t*);
13385     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13386     tbl->tbl_max = --newsize;
13387     tbl->tbl_ary = ary;
13388     for (i=0; i < oldsize; i++, ary++) {
13389         PTR_TBL_ENT_t **entp = ary;
13390         PTR_TBL_ENT_t *ent = *ary;
13391         PTR_TBL_ENT_t **curentp;
13392         if (!ent)
13393             continue;
13394         curentp = ary + oldsize;
13395         do {
13396             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13397                 *entp = ent->next;
13398                 ent->next = *curentp;
13399                 *curentp = ent;
13400             }
13401             else
13402                 entp = &ent->next;
13403             ent = *entp;
13404         } while (ent);
13405     }
13406 }
13407
13408 /* remove all the entries from a ptr table */
13409 /* Deprecated - will be removed post 5.14 */
13410
13411 void
13412 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13413 {
13414     PERL_UNUSED_CONTEXT;
13415     if (tbl && tbl->tbl_items) {
13416         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13417
13418         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13419
13420         while (arena) {
13421             struct ptr_tbl_arena *next = arena->next;
13422
13423             Safefree(arena);
13424             arena = next;
13425         };
13426
13427         tbl->tbl_items = 0;
13428         tbl->tbl_arena = NULL;
13429         tbl->tbl_arena_next = NULL;
13430         tbl->tbl_arena_end = NULL;
13431     }
13432 }
13433
13434 /* clear and free a ptr table */
13435
13436 void
13437 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13438 {
13439     struct ptr_tbl_arena *arena;
13440
13441     PERL_UNUSED_CONTEXT;
13442
13443     if (!tbl) {
13444         return;
13445     }
13446
13447     arena = tbl->tbl_arena;
13448
13449     while (arena) {
13450         struct ptr_tbl_arena *next = arena->next;
13451
13452         Safefree(arena);
13453         arena = next;
13454     }
13455
13456     Safefree(tbl->tbl_ary);
13457     Safefree(tbl);
13458 }
13459
13460 #if defined(USE_ITHREADS)
13461
13462 void
13463 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13464 {
13465     PERL_ARGS_ASSERT_RVPV_DUP;
13466
13467     assert(!isREGEXP(sstr));
13468     if (SvROK(sstr)) {
13469         if (SvWEAKREF(sstr)) {
13470             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13471             if (param->flags & CLONEf_JOIN_IN) {
13472                 /* if joining, we add any back references individually rather
13473                  * than copying the whole backref array */
13474                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13475             }
13476         }
13477         else
13478             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13479     }
13480     else if (SvPVX_const(sstr)) {
13481         /* Has something there */
13482         if (SvLEN(sstr)) {
13483             /* Normal PV - clone whole allocated space */
13484             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13485             /* sstr may not be that normal, but actually copy on write.
13486                But we are a true, independent SV, so:  */
13487             SvIsCOW_off(dstr);
13488         }
13489         else {
13490             /* Special case - not normally malloced for some reason */
13491             if (isGV_with_GP(sstr)) {
13492                 /* Don't need to do anything here.  */
13493             }
13494             else if ((SvIsCOW(sstr))) {
13495                 /* A "shared" PV - clone it as "shared" PV */
13496                 SvPV_set(dstr,
13497                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13498                                          param)));
13499             }
13500             else {
13501                 /* Some other special case - random pointer */
13502                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13503             }
13504         }
13505     }
13506     else {
13507         /* Copy the NULL */
13508         SvPV_set(dstr, NULL);
13509     }
13510 }
13511
13512 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13513 static SV **
13514 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13515                       SSize_t items, CLONE_PARAMS *const param)
13516 {
13517     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13518
13519     while (items-- > 0) {
13520         *dest++ = sv_dup_inc(*source++, param);
13521     }
13522
13523     return dest;
13524 }
13525
13526 /* duplicate an SV of any type (including AV, HV etc) */
13527
13528 static SV *
13529 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13530 {
13531     dVAR;
13532     SV *dstr;
13533
13534     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13535
13536     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13537 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13538         abort();
13539 #endif
13540         return NULL;
13541     }
13542     /* look for it in the table first */
13543     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13544     if (dstr)
13545         return dstr;
13546
13547     if(param->flags & CLONEf_JOIN_IN) {
13548         /** We are joining here so we don't want do clone
13549             something that is bad **/
13550         if (SvTYPE(sstr) == SVt_PVHV) {
13551             const HEK * const hvname = HvNAME_HEK(sstr);
13552             if (hvname) {
13553                 /** don't clone stashes if they already exist **/
13554                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13555                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13556                 ptr_table_store(PL_ptr_table, sstr, dstr);
13557                 return dstr;
13558             }
13559         }
13560         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13561             HV *stash = GvSTASH(sstr);
13562             const HEK * hvname;
13563             if (stash && (hvname = HvNAME_HEK(stash))) {
13564                 /** don't clone GVs if they already exist **/
13565                 SV **svp;
13566                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13567                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13568                 svp = hv_fetch(
13569                         stash, GvNAME(sstr),
13570                         GvNAMEUTF8(sstr)
13571                             ? -GvNAMELEN(sstr)
13572                             :  GvNAMELEN(sstr),
13573                         0
13574                       );
13575                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13576                     ptr_table_store(PL_ptr_table, sstr, *svp);
13577                     return *svp;
13578                 }
13579             }
13580         }
13581     }
13582
13583     /* create anew and remember what it is */
13584     new_SV(dstr);
13585
13586 #ifdef DEBUG_LEAKING_SCALARS
13587     dstr->sv_debug_optype = sstr->sv_debug_optype;
13588     dstr->sv_debug_line = sstr->sv_debug_line;
13589     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13590     dstr->sv_debug_parent = (SV*)sstr;
13591     FREE_SV_DEBUG_FILE(dstr);
13592     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13593 #endif
13594
13595     ptr_table_store(PL_ptr_table, sstr, dstr);
13596
13597     /* clone */
13598     SvFLAGS(dstr)       = SvFLAGS(sstr);
13599     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13600     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13601
13602 #ifdef DEBUGGING
13603     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13604         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13605                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13606 #endif
13607
13608     /* don't clone objects whose class has asked us not to */
13609     if (SvOBJECT(sstr)
13610      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13611     {
13612         SvFLAGS(dstr) = 0;
13613         return dstr;
13614     }
13615
13616     switch (SvTYPE(sstr)) {
13617     case SVt_NULL:
13618         SvANY(dstr)     = NULL;
13619         break;
13620     case SVt_IV:
13621         SET_SVANY_FOR_BODYLESS_IV(dstr);
13622         if(SvROK(sstr)) {
13623             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13624         } else {
13625             SvIV_set(dstr, SvIVX(sstr));
13626         }
13627         break;
13628     case SVt_NV:
13629 #if NVSIZE <= IVSIZE
13630         SET_SVANY_FOR_BODYLESS_NV(dstr);
13631 #else
13632         SvANY(dstr)     = new_XNV();
13633 #endif
13634         SvNV_set(dstr, SvNVX(sstr));
13635         break;
13636     default:
13637         {
13638             /* These are all the types that need complex bodies allocating.  */
13639             void *new_body;
13640             const svtype sv_type = SvTYPE(sstr);
13641             const struct body_details *const sv_type_details
13642                 = bodies_by_type + sv_type;
13643
13644             switch (sv_type) {
13645             default:
13646                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13647                 break;
13648
13649             case SVt_PVGV:
13650             case SVt_PVIO:
13651             case SVt_PVFM:
13652             case SVt_PVHV:
13653             case SVt_PVAV:
13654             case SVt_PVCV:
13655             case SVt_PVLV:
13656             case SVt_REGEXP:
13657             case SVt_PVMG:
13658             case SVt_PVNV:
13659             case SVt_PVIV:
13660             case SVt_INVLIST:
13661             case SVt_PV:
13662                 assert(sv_type_details->body_size);
13663                 if (sv_type_details->arena) {
13664                     new_body_inline(new_body, sv_type);
13665                     new_body
13666                         = (void*)((char*)new_body - sv_type_details->offset);
13667                 } else {
13668                     new_body = new_NOARENA(sv_type_details);
13669                 }
13670             }
13671             assert(new_body);
13672             SvANY(dstr) = new_body;
13673
13674 #ifndef PURIFY
13675             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13676                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13677                  sv_type_details->copy, char);
13678 #else
13679             Copy(((char*)SvANY(sstr)),
13680                  ((char*)SvANY(dstr)),
13681                  sv_type_details->body_size + sv_type_details->offset, char);
13682 #endif
13683
13684             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13685                 && !isGV_with_GP(dstr)
13686                 && !isREGEXP(dstr)
13687                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13688                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13689
13690             /* The Copy above means that all the source (unduplicated) pointers
13691                are now in the destination.  We can check the flags and the
13692                pointers in either, but it's possible that there's less cache
13693                missing by always going for the destination.
13694                FIXME - instrument and check that assumption  */
13695             if (sv_type >= SVt_PVMG) {
13696                 if (SvMAGIC(dstr))
13697                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13698                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13699                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13700                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13701             }
13702
13703             /* The cast silences a GCC warning about unhandled types.  */
13704             switch ((int)sv_type) {
13705             case SVt_PV:
13706                 break;
13707             case SVt_PVIV:
13708                 break;
13709             case SVt_PVNV:
13710                 break;
13711             case SVt_PVMG:
13712                 break;
13713             case SVt_REGEXP:
13714               duprex:
13715                 /* FIXME for plugins */
13716                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13717                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13718                 break;
13719             case SVt_PVLV:
13720                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13721                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13722                     LvTARG(dstr) = dstr;
13723                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13724                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13725                 else
13726                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13727                 if (isREGEXP(sstr)) goto duprex;
13728             case SVt_PVGV:
13729                 /* non-GP case already handled above */
13730                 if(isGV_with_GP(sstr)) {
13731                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13732                     /* Don't call sv_add_backref here as it's going to be
13733                        created as part of the magic cloning of the symbol
13734                        table--unless this is during a join and the stash
13735                        is not actually being cloned.  */
13736                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13737                        at the point of this comment.  */
13738                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13739                     if (param->flags & CLONEf_JOIN_IN)
13740                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13741                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13742                     (void)GpREFCNT_inc(GvGP(dstr));
13743                 }
13744                 break;
13745             case SVt_PVIO:
13746                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13747                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13748                     /* I have no idea why fake dirp (rsfps)
13749                        should be treated differently but otherwise
13750                        we end up with leaks -- sky*/
13751                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13752                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13753                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13754                 } else {
13755                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13756                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13757                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13758                     if (IoDIRP(dstr)) {
13759                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13760                     } else {
13761                         NOOP;
13762                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13763                     }
13764                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13765                 }
13766                 if (IoOFP(dstr) == IoIFP(sstr))
13767                     IoOFP(dstr) = IoIFP(dstr);
13768                 else
13769                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13770                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13771                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13772                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13773                 break;
13774             case SVt_PVAV:
13775                 /* avoid cloning an empty array */
13776                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13777                     SV **dst_ary, **src_ary;
13778                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13779
13780                     src_ary = AvARRAY((const AV *)sstr);
13781                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13782                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13783                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13784                     AvALLOC((const AV *)dstr) = dst_ary;
13785                     if (AvREAL((const AV *)sstr)) {
13786                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13787                                                       param);
13788                     }
13789                     else {
13790                         while (items-- > 0)
13791                             *dst_ary++ = sv_dup(*src_ary++, param);
13792                     }
13793                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13794                     while (items-- > 0) {
13795                         *dst_ary++ = NULL;
13796                     }
13797                 }
13798                 else {
13799                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13800                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13801                     AvMAX(  (const AV *)dstr)   = -1;
13802                     AvFILLp((const AV *)dstr)   = -1;
13803                 }
13804                 break;
13805             case SVt_PVHV:
13806                 if (HvARRAY((const HV *)sstr)) {
13807                     STRLEN i = 0;
13808                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13809                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13810                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13811                     char *darray;
13812                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13813                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13814                         char);
13815                     HvARRAY(dstr) = (HE**)darray;
13816                     while (i <= sxhv->xhv_max) {
13817                         const HE * const source = HvARRAY(sstr)[i];
13818                         HvARRAY(dstr)[i] = source
13819                             ? he_dup(source, sharekeys, param) : 0;
13820                         ++i;
13821                     }
13822                     if (SvOOK(sstr)) {
13823                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13824                         struct xpvhv_aux * const daux = HvAUX(dstr);
13825                         /* This flag isn't copied.  */
13826                         SvOOK_on(dstr);
13827
13828                         if (saux->xhv_name_count) {
13829                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13830                             const I32 count
13831                              = saux->xhv_name_count < 0
13832                                 ? -saux->xhv_name_count
13833                                 :  saux->xhv_name_count;
13834                             HEK **shekp = sname + count;
13835                             HEK **dhekp;
13836                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13837                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13838                             while (shekp-- > sname) {
13839                                 dhekp--;
13840                                 *dhekp = hek_dup(*shekp, param);
13841                             }
13842                         }
13843                         else {
13844                             daux->xhv_name_u.xhvnameu_name
13845                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13846                                           param);
13847                         }
13848                         daux->xhv_name_count = saux->xhv_name_count;
13849
13850                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13851                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13852 #ifdef PERL_HASH_RANDOMIZE_KEYS
13853                         daux->xhv_rand = saux->xhv_rand;
13854                         daux->xhv_last_rand = saux->xhv_last_rand;
13855 #endif
13856                         daux->xhv_riter = saux->xhv_riter;
13857                         daux->xhv_eiter = saux->xhv_eiter
13858                             ? he_dup(saux->xhv_eiter,
13859                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13860                         /* backref array needs refcnt=2; see sv_add_backref */
13861                         daux->xhv_backreferences =
13862                             (param->flags & CLONEf_JOIN_IN)
13863                                 /* when joining, we let the individual GVs and
13864                                  * CVs add themselves to backref as
13865                                  * needed. This avoids pulling in stuff
13866                                  * that isn't required, and simplifies the
13867                                  * case where stashes aren't cloned back
13868                                  * if they already exist in the parent
13869                                  * thread */
13870                             ? NULL
13871                             : saux->xhv_backreferences
13872                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13873                                     ? MUTABLE_AV(SvREFCNT_inc(
13874                                           sv_dup_inc((const SV *)
13875                                             saux->xhv_backreferences, param)))
13876                                     : MUTABLE_AV(sv_dup((const SV *)
13877                                             saux->xhv_backreferences, param))
13878                                 : 0;
13879
13880                         daux->xhv_mro_meta = saux->xhv_mro_meta
13881                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13882                             : 0;
13883
13884                         /* Record stashes for possible cloning in Perl_clone(). */
13885                         if (HvNAME(sstr))
13886                             av_push(param->stashes, dstr);
13887                     }
13888                 }
13889                 else
13890                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13891                 break;
13892             case SVt_PVCV:
13893                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13894                     CvDEPTH(dstr) = 0;
13895                 }
13896                 /* FALLTHROUGH */
13897             case SVt_PVFM:
13898                 /* NOTE: not refcounted */
13899                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13900                     hv_dup(CvSTASH(dstr), param);
13901                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13902                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13903                 if (!CvISXSUB(dstr)) {
13904                     OP_REFCNT_LOCK;
13905                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13906                     OP_REFCNT_UNLOCK;
13907                     CvSLABBED_off(dstr);
13908                 } else if (CvCONST(dstr)) {
13909                     CvXSUBANY(dstr).any_ptr =
13910                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13911                 }
13912                 assert(!CvSLABBED(dstr));
13913                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13914                 if (CvNAMED(dstr))
13915                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13916                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13917                 /* don't dup if copying back - CvGV isn't refcounted, so the
13918                  * duped GV may never be freed. A bit of a hack! DAPM */
13919                 else
13920                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13921                     CvCVGV_RC(dstr)
13922                     ? gv_dup_inc(CvGV(sstr), param)
13923                     : (param->flags & CLONEf_JOIN_IN)
13924                         ? NULL
13925                         : gv_dup(CvGV(sstr), param);
13926
13927                 if (!CvISXSUB(sstr)) {
13928                     PADLIST * padlist = CvPADLIST(sstr);
13929                     if(padlist)
13930                         padlist = padlist_dup(padlist, param);
13931                     CvPADLIST_set(dstr, padlist);
13932                 } else
13933 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13934                     PoisonPADLIST(dstr);
13935
13936                 CvOUTSIDE(dstr) =
13937                     CvWEAKOUTSIDE(sstr)
13938                     ? cv_dup(    CvOUTSIDE(dstr), param)
13939                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13940                 break;
13941             }
13942         }
13943     }
13944
13945     return dstr;
13946  }
13947
13948 SV *
13949 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13950 {
13951     PERL_ARGS_ASSERT_SV_DUP_INC;
13952     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13953 }
13954
13955 SV *
13956 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13957 {
13958     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13959     PERL_ARGS_ASSERT_SV_DUP;
13960
13961     /* Track every SV that (at least initially) had a reference count of 0.
13962        We need to do this by holding an actual reference to it in this array.
13963        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13964        (akin to the stashes hash, and the perl stack), we come unstuck if
13965        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13966        thread) is manipulated in a CLONE method, because CLONE runs before the
13967        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13968        (and fix things up by giving each a reference via the temps stack).
13969        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13970        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13971        before the walk of unreferenced happens and a reference to that is SV
13972        added to the temps stack. At which point we have the same SV considered
13973        to be in use, and free to be re-used. Not good.
13974     */
13975     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13976         assert(param->unreferenced);
13977         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13978     }
13979
13980     return dstr;
13981 }
13982
13983 /* duplicate a context */
13984
13985 PERL_CONTEXT *
13986 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13987 {
13988     PERL_CONTEXT *ncxs;
13989
13990     PERL_ARGS_ASSERT_CX_DUP;
13991
13992     if (!cxs)
13993         return (PERL_CONTEXT*)NULL;
13994
13995     /* look for it in the table first */
13996     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13997     if (ncxs)
13998         return ncxs;
13999
14000     /* create anew and remember what it is */
14001     Newx(ncxs, max + 1, PERL_CONTEXT);
14002     ptr_table_store(PL_ptr_table, cxs, ncxs);
14003     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14004
14005     while (ix >= 0) {
14006         PERL_CONTEXT * const ncx = &ncxs[ix];
14007         if (CxTYPE(ncx) == CXt_SUBST) {
14008             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14009         }
14010         else {
14011             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14012             switch (CxTYPE(ncx)) {
14013             case CXt_SUB:
14014                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14015                 if(CxHASARGS(ncx)){
14016                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14017                 } else {
14018                     ncx->blk_sub.savearray = NULL;
14019                 }
14020                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14021                                            ncx->blk_sub.prevcomppad);
14022                 break;
14023             case CXt_EVAL:
14024                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14025                                                       param);
14026                 /* XXX should this sv_dup_inc? Or only if SvSCREAM ???? */
14027                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14028                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14029                 /* XXX what do do with cur_top_env ???? */
14030                 break;
14031             case CXt_LOOP_LAZYSV:
14032                 ncx->blk_loop.state_u.lazysv.end
14033                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14034                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14035                    duplication code instead.
14036                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14037                    actually being the same function, and (2) order
14038                    equivalence of the two unions.
14039                    We can assert the later [but only at run time :-(]  */
14040                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14041                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14042                 /* FALLTHROUGH */
14043             case CXt_LOOP_ARY:
14044                 ncx->blk_loop.state_u.ary.ary
14045                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14046                 /* FALLTHROUGH */
14047             case CXt_LOOP_LIST:
14048             case CXt_LOOP_LAZYIV:
14049                 /* code common to all 'for' CXt_LOOP_* types */
14050                 ncx->blk_loop.itersave =
14051                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14052                 if (CxPADLOOP(ncx)) {
14053                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14054                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14055                     ncx->blk_loop.oldcomppad =
14056                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14057                                                 ncx->blk_loop.oldcomppad);
14058                     ncx->blk_loop.itervar_u.svp =
14059                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14060                 }
14061                 else {
14062                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14063                      * alias (for \$x (...)) - relies on gv_dup being the
14064                      * same as sv_dup */
14065                     ncx->blk_loop.itervar_u.gv
14066                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14067                                     param);
14068                 }
14069                 break;
14070             case CXt_LOOP_PLAIN:
14071                 break;
14072             case CXt_FORMAT:
14073                 ncx->blk_format.prevcomppad =
14074                         (PAD*)ptr_table_fetch(PL_ptr_table,
14075                                            ncx->blk_format.prevcomppad);
14076                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14077                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14078                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14079                                                      param);
14080                 break;
14081             case CXt_GIVEN:
14082                 ncx->blk_givwhen.defsv_save =
14083                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14084                 break;
14085             case CXt_BLOCK:
14086             case CXt_NULL:
14087             case CXt_WHEN:
14088                 break;
14089             }
14090         }
14091         --ix;
14092     }
14093     return ncxs;
14094 }
14095
14096 /* duplicate a stack info structure */
14097
14098 PERL_SI *
14099 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14100 {
14101     PERL_SI *nsi;
14102
14103     PERL_ARGS_ASSERT_SI_DUP;
14104
14105     if (!si)
14106         return (PERL_SI*)NULL;
14107
14108     /* look for it in the table first */
14109     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14110     if (nsi)
14111         return nsi;
14112
14113     /* create anew and remember what it is */
14114     Newxz(nsi, 1, PERL_SI);
14115     ptr_table_store(PL_ptr_table, si, nsi);
14116
14117     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14118     nsi->si_cxix        = si->si_cxix;
14119     nsi->si_cxmax       = si->si_cxmax;
14120     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14121     nsi->si_type        = si->si_type;
14122     nsi->si_prev        = si_dup(si->si_prev, param);
14123     nsi->si_next        = si_dup(si->si_next, param);
14124     nsi->si_markoff     = si->si_markoff;
14125
14126     return nsi;
14127 }
14128
14129 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14130 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14131 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14132 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14133 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14134 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14135 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14136 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14137 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14138 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14139 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14140 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14141 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14142 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14143 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14144 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14145
14146 /* XXXXX todo */
14147 #define pv_dup_inc(p)   SAVEPV(p)
14148 #define pv_dup(p)       SAVEPV(p)
14149 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14150
14151 /* map any object to the new equivent - either something in the
14152  * ptr table, or something in the interpreter structure
14153  */
14154
14155 void *
14156 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14157 {
14158     void *ret;
14159
14160     PERL_ARGS_ASSERT_ANY_DUP;
14161
14162     if (!v)
14163         return (void*)NULL;
14164
14165     /* look for it in the table first */
14166     ret = ptr_table_fetch(PL_ptr_table, v);
14167     if (ret)
14168         return ret;
14169
14170     /* see if it is part of the interpreter structure */
14171     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14172         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14173     else {
14174         ret = v;
14175     }
14176
14177     return ret;
14178 }
14179
14180 /* duplicate the save stack */
14181
14182 ANY *
14183 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14184 {
14185     dVAR;
14186     ANY * const ss      = proto_perl->Isavestack;
14187     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14188     I32 ix              = proto_perl->Isavestack_ix;
14189     ANY *nss;
14190     const SV *sv;
14191     const GV *gv;
14192     const AV *av;
14193     const HV *hv;
14194     void* ptr;
14195     int intval;
14196     long longval;
14197     GP *gp;
14198     IV iv;
14199     I32 i;
14200     char *c = NULL;
14201     void (*dptr) (void*);
14202     void (*dxptr) (pTHX_ void*);
14203
14204     PERL_ARGS_ASSERT_SS_DUP;
14205
14206     Newxz(nss, max, ANY);
14207
14208     while (ix > 0) {
14209         const UV uv = POPUV(ss,ix);
14210         const U8 type = (U8)uv & SAVE_MASK;
14211
14212         TOPUV(nss,ix) = uv;
14213         switch (type) {
14214         case SAVEt_CLEARSV:
14215         case SAVEt_CLEARPADRANGE:
14216             break;
14217         case SAVEt_HELEM:               /* hash element */
14218         case SAVEt_SV:                  /* scalar reference */
14219             sv = (const SV *)POPPTR(ss,ix);
14220             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14221             /* FALLTHROUGH */
14222         case SAVEt_ITEM:                        /* normal string */
14223         case SAVEt_GVSV:                        /* scalar slot in GV */
14224             sv = (const SV *)POPPTR(ss,ix);
14225             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14226             if (type == SAVEt_SV)
14227                 break;
14228             /* FALLTHROUGH */
14229         case SAVEt_FREESV:
14230         case SAVEt_MORTALIZESV:
14231         case SAVEt_READONLY_OFF:
14232             sv = (const SV *)POPPTR(ss,ix);
14233             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14234             break;
14235         case SAVEt_FREEPADNAME:
14236             ptr = POPPTR(ss,ix);
14237             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14238             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14239             break;
14240         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14241             c = (char*)POPPTR(ss,ix);
14242             TOPPTR(nss,ix) = savesharedpv(c);
14243             ptr = POPPTR(ss,ix);
14244             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14245             break;
14246         case SAVEt_GENERIC_SVREF:               /* generic sv */
14247         case SAVEt_SVREF:                       /* scalar reference */
14248             sv = (const SV *)POPPTR(ss,ix);
14249             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14250             if (type == SAVEt_SVREF)
14251                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14252             ptr = POPPTR(ss,ix);
14253             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14254             break;
14255         case SAVEt_GVSLOT:              /* any slot in GV */
14256             sv = (const SV *)POPPTR(ss,ix);
14257             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14258             ptr = POPPTR(ss,ix);
14259             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14260             sv = (const SV *)POPPTR(ss,ix);
14261             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14262             break;
14263         case SAVEt_HV:                          /* hash reference */
14264         case SAVEt_AV:                          /* array reference */
14265             sv = (const SV *) POPPTR(ss,ix);
14266             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14267             /* FALLTHROUGH */
14268         case SAVEt_COMPPAD:
14269         case SAVEt_NSTAB:
14270             sv = (const SV *) POPPTR(ss,ix);
14271             TOPPTR(nss,ix) = sv_dup(sv, param);
14272             break;
14273         case SAVEt_INT:                         /* int reference */
14274             ptr = POPPTR(ss,ix);
14275             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14276             intval = (int)POPINT(ss,ix);
14277             TOPINT(nss,ix) = intval;
14278             break;
14279         case SAVEt_LONG:                        /* long reference */
14280             ptr = POPPTR(ss,ix);
14281             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14282             longval = (long)POPLONG(ss,ix);
14283             TOPLONG(nss,ix) = longval;
14284             break;
14285         case SAVEt_I32:                         /* I32 reference */
14286             ptr = POPPTR(ss,ix);
14287             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14288             i = POPINT(ss,ix);
14289             TOPINT(nss,ix) = i;
14290             break;
14291         case SAVEt_IV:                          /* IV reference */
14292         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14293             ptr = POPPTR(ss,ix);
14294             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14295             iv = POPIV(ss,ix);
14296             TOPIV(nss,ix) = iv;
14297             break;
14298         case SAVEt_TMPSFLOOR:
14299             iv = POPIV(ss,ix);
14300             TOPIV(nss,ix) = iv;
14301             break;
14302         case SAVEt_HPTR:                        /* HV* reference */
14303         case SAVEt_APTR:                        /* AV* reference */
14304         case SAVEt_SPTR:                        /* SV* reference */
14305             ptr = POPPTR(ss,ix);
14306             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14307             sv = (const SV *)POPPTR(ss,ix);
14308             TOPPTR(nss,ix) = sv_dup(sv, param);
14309             break;
14310         case SAVEt_VPTR:                        /* random* reference */
14311             ptr = POPPTR(ss,ix);
14312             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14313             /* FALLTHROUGH */
14314         case SAVEt_INT_SMALL:
14315         case SAVEt_I32_SMALL:
14316         case SAVEt_I16:                         /* I16 reference */
14317         case SAVEt_I8:                          /* I8 reference */
14318         case SAVEt_BOOL:
14319             ptr = POPPTR(ss,ix);
14320             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14321             break;
14322         case SAVEt_GENERIC_PVREF:               /* generic char* */
14323         case SAVEt_PPTR:                        /* char* reference */
14324             ptr = POPPTR(ss,ix);
14325             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14326             c = (char*)POPPTR(ss,ix);
14327             TOPPTR(nss,ix) = pv_dup(c);
14328             break;
14329         case SAVEt_GP:                          /* scalar reference */
14330             gp = (GP*)POPPTR(ss,ix);
14331             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14332             (void)GpREFCNT_inc(gp);
14333             gv = (const GV *)POPPTR(ss,ix);
14334             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14335             break;
14336         case SAVEt_FREEOP:
14337             ptr = POPPTR(ss,ix);
14338             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14339                 /* these are assumed to be refcounted properly */
14340                 OP *o;
14341                 switch (((OP*)ptr)->op_type) {
14342                 case OP_LEAVESUB:
14343                 case OP_LEAVESUBLV:
14344                 case OP_LEAVEEVAL:
14345                 case OP_LEAVE:
14346                 case OP_SCOPE:
14347                 case OP_LEAVEWRITE:
14348                     TOPPTR(nss,ix) = ptr;
14349                     o = (OP*)ptr;
14350                     OP_REFCNT_LOCK;
14351                     (void) OpREFCNT_inc(o);
14352                     OP_REFCNT_UNLOCK;
14353                     break;
14354                 default:
14355                     TOPPTR(nss,ix) = NULL;
14356                     break;
14357                 }
14358             }
14359             else
14360                 TOPPTR(nss,ix) = NULL;
14361             break;
14362         case SAVEt_FREECOPHH:
14363             ptr = POPPTR(ss,ix);
14364             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14365             break;
14366         case SAVEt_ADELETE:
14367             av = (const AV *)POPPTR(ss,ix);
14368             TOPPTR(nss,ix) = av_dup_inc(av, param);
14369             i = POPINT(ss,ix);
14370             TOPINT(nss,ix) = i;
14371             break;
14372         case SAVEt_DELETE:
14373             hv = (const HV *)POPPTR(ss,ix);
14374             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14375             i = POPINT(ss,ix);
14376             TOPINT(nss,ix) = i;
14377             /* FALLTHROUGH */
14378         case SAVEt_FREEPV:
14379             c = (char*)POPPTR(ss,ix);
14380             TOPPTR(nss,ix) = pv_dup_inc(c);
14381             break;
14382         case SAVEt_STACK_POS:           /* Position on Perl stack */
14383             i = POPINT(ss,ix);
14384             TOPINT(nss,ix) = i;
14385             break;
14386         case SAVEt_DESTRUCTOR:
14387             ptr = POPPTR(ss,ix);
14388             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14389             dptr = POPDPTR(ss,ix);
14390             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14391                                         any_dup(FPTR2DPTR(void *, dptr),
14392                                                 proto_perl));
14393             break;
14394         case SAVEt_DESTRUCTOR_X:
14395             ptr = POPPTR(ss,ix);
14396             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14397             dxptr = POPDXPTR(ss,ix);
14398             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14399                                          any_dup(FPTR2DPTR(void *, dxptr),
14400                                                  proto_perl));
14401             break;
14402         case SAVEt_REGCONTEXT:
14403         case SAVEt_ALLOC:
14404             ix -= uv >> SAVE_TIGHT_SHIFT;
14405             break;
14406         case SAVEt_AELEM:               /* array element */
14407             sv = (const SV *)POPPTR(ss,ix);
14408             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14409             i = POPINT(ss,ix);
14410             TOPINT(nss,ix) = i;
14411             av = (const AV *)POPPTR(ss,ix);
14412             TOPPTR(nss,ix) = av_dup_inc(av, param);
14413             break;
14414         case SAVEt_OP:
14415             ptr = POPPTR(ss,ix);
14416             TOPPTR(nss,ix) = ptr;
14417             break;
14418         case SAVEt_HINTS:
14419             ptr = POPPTR(ss,ix);
14420             ptr = cophh_copy((COPHH*)ptr);
14421             TOPPTR(nss,ix) = ptr;
14422             i = POPINT(ss,ix);
14423             TOPINT(nss,ix) = i;
14424             if (i & HINT_LOCALIZE_HH) {
14425                 hv = (const HV *)POPPTR(ss,ix);
14426                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14427             }
14428             break;
14429         case SAVEt_PADSV_AND_MORTALIZE:
14430             longval = (long)POPLONG(ss,ix);
14431             TOPLONG(nss,ix) = longval;
14432             ptr = POPPTR(ss,ix);
14433             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14434             sv = (const SV *)POPPTR(ss,ix);
14435             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14436             break;
14437         case SAVEt_SET_SVFLAGS:
14438             i = POPINT(ss,ix);
14439             TOPINT(nss,ix) = i;
14440             i = POPINT(ss,ix);
14441             TOPINT(nss,ix) = i;
14442             sv = (const SV *)POPPTR(ss,ix);
14443             TOPPTR(nss,ix) = sv_dup(sv, param);
14444             break;
14445         case SAVEt_COMPILE_WARNINGS:
14446             ptr = POPPTR(ss,ix);
14447             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14448             break;
14449         case SAVEt_PARSER:
14450             ptr = POPPTR(ss,ix);
14451             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14452             break;
14453         default:
14454             Perl_croak(aTHX_
14455                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14456         }
14457     }
14458
14459     return nss;
14460 }
14461
14462
14463 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14464  * flag to the result. This is done for each stash before cloning starts,
14465  * so we know which stashes want their objects cloned */
14466
14467 static void
14468 do_mark_cloneable_stash(pTHX_ SV *const sv)
14469 {
14470     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14471     if (hvname) {
14472         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14473         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14474         if (cloner && GvCV(cloner)) {
14475             dSP;
14476             UV status;
14477
14478             ENTER;
14479             SAVETMPS;
14480             PUSHMARK(SP);
14481             mXPUSHs(newSVhek(hvname));
14482             PUTBACK;
14483             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14484             SPAGAIN;
14485             status = POPu;
14486             PUTBACK;
14487             FREETMPS;
14488             LEAVE;
14489             if (status)
14490                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14491         }
14492     }
14493 }
14494
14495
14496
14497 /*
14498 =for apidoc perl_clone
14499
14500 Create and return a new interpreter by cloning the current one.
14501
14502 C<perl_clone> takes these flags as parameters:
14503
14504 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14505 without it we only clone the data and zero the stacks,
14506 with it we copy the stacks and the new perl interpreter is
14507 ready to run at the exact same point as the previous one.
14508 The pseudo-fork code uses C<COPY_STACKS> while the
14509 threads->create doesn't.
14510
14511 C<CLONEf_KEEP_PTR_TABLE> -
14512 C<perl_clone> keeps a ptr_table with the pointer of the old
14513 variable as a key and the new variable as a value,
14514 this allows it to check if something has been cloned and not
14515 clone it again but rather just use the value and increase the
14516 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14517 the ptr_table using the function
14518 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14519 reason to keep it around is if you want to dup some of your own
14520 variable who are outside the graph perl scans, an example of this
14521 code is in F<threads.xs> create.
14522
14523 C<CLONEf_CLONE_HOST> -
14524 This is a win32 thing, it is ignored on unix, it tells perls
14525 win32host code (which is c++) to clone itself, this is needed on
14526 win32 if you want to run two threads at the same time,
14527 if you just want to do some stuff in a separate perl interpreter
14528 and then throw it away and return to the original one,
14529 you don't need to do anything.
14530
14531 =cut
14532 */
14533
14534 /* XXX the above needs expanding by someone who actually understands it ! */
14535 EXTERN_C PerlInterpreter *
14536 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14537
14538 PerlInterpreter *
14539 perl_clone(PerlInterpreter *proto_perl, UV flags)
14540 {
14541    dVAR;
14542 #ifdef PERL_IMPLICIT_SYS
14543
14544     PERL_ARGS_ASSERT_PERL_CLONE;
14545
14546    /* perlhost.h so we need to call into it
14547    to clone the host, CPerlHost should have a c interface, sky */
14548
14549 #ifndef __amigaos4__
14550    if (flags & CLONEf_CLONE_HOST) {
14551        return perl_clone_host(proto_perl,flags);
14552    }
14553 #endif
14554    return perl_clone_using(proto_perl, flags,
14555                             proto_perl->IMem,
14556                             proto_perl->IMemShared,
14557                             proto_perl->IMemParse,
14558                             proto_perl->IEnv,
14559                             proto_perl->IStdIO,
14560                             proto_perl->ILIO,
14561                             proto_perl->IDir,
14562                             proto_perl->ISock,
14563                             proto_perl->IProc);
14564 }
14565
14566 PerlInterpreter *
14567 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14568                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14569                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14570                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14571                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14572                  struct IPerlProc* ipP)
14573 {
14574     /* XXX many of the string copies here can be optimized if they're
14575      * constants; they need to be allocated as common memory and just
14576      * their pointers copied. */
14577
14578     IV i;
14579     CLONE_PARAMS clone_params;
14580     CLONE_PARAMS* const param = &clone_params;
14581
14582     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14583
14584     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14585 #else           /* !PERL_IMPLICIT_SYS */
14586     IV i;
14587     CLONE_PARAMS clone_params;
14588     CLONE_PARAMS* param = &clone_params;
14589     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14590
14591     PERL_ARGS_ASSERT_PERL_CLONE;
14592 #endif          /* PERL_IMPLICIT_SYS */
14593
14594     /* for each stash, determine whether its objects should be cloned */
14595     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14596     PERL_SET_THX(my_perl);
14597
14598 #ifdef DEBUGGING
14599     PoisonNew(my_perl, 1, PerlInterpreter);
14600     PL_op = NULL;
14601     PL_curcop = NULL;
14602     PL_defstash = NULL; /* may be used by perl malloc() */
14603     PL_markstack = 0;
14604     PL_scopestack = 0;
14605     PL_scopestack_name = 0;
14606     PL_savestack = 0;
14607     PL_savestack_ix = 0;
14608     PL_savestack_max = -1;
14609     PL_sig_pending = 0;
14610     PL_parser = NULL;
14611     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14612     Zero(&PL_padname_undef, 1, PADNAME);
14613     Zero(&PL_padname_const, 1, PADNAME);
14614 #  ifdef DEBUG_LEAKING_SCALARS
14615     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14616 #  endif
14617 #  ifdef PERL_TRACE_OPS
14618     Zero(PL_op_exec_cnt, OP_max+2, UV);
14619 #  endif
14620 #else   /* !DEBUGGING */
14621     Zero(my_perl, 1, PerlInterpreter);
14622 #endif  /* DEBUGGING */
14623
14624 #ifdef PERL_IMPLICIT_SYS
14625     /* host pointers */
14626     PL_Mem              = ipM;
14627     PL_MemShared        = ipMS;
14628     PL_MemParse         = ipMP;
14629     PL_Env              = ipE;
14630     PL_StdIO            = ipStd;
14631     PL_LIO              = ipLIO;
14632     PL_Dir              = ipD;
14633     PL_Sock             = ipS;
14634     PL_Proc             = ipP;
14635 #endif          /* PERL_IMPLICIT_SYS */
14636
14637
14638     param->flags = flags;
14639     /* Nothing in the core code uses this, but we make it available to
14640        extensions (using mg_dup).  */
14641     param->proto_perl = proto_perl;
14642     /* Likely nothing will use this, but it is initialised to be consistent
14643        with Perl_clone_params_new().  */
14644     param->new_perl = my_perl;
14645     param->unreferenced = NULL;
14646
14647
14648     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14649
14650     PL_body_arenas = NULL;
14651     Zero(&PL_body_roots, 1, PL_body_roots);
14652     
14653     PL_sv_count         = 0;
14654     PL_sv_root          = NULL;
14655     PL_sv_arenaroot     = NULL;
14656
14657     PL_debug            = proto_perl->Idebug;
14658
14659     /* dbargs array probably holds garbage */
14660     PL_dbargs           = NULL;
14661
14662     PL_compiling = proto_perl->Icompiling;
14663
14664     /* pseudo environmental stuff */
14665     PL_origargc         = proto_perl->Iorigargc;
14666     PL_origargv         = proto_perl->Iorigargv;
14667
14668 #ifndef NO_TAINT_SUPPORT
14669     /* Set tainting stuff before PerlIO_debug can possibly get called */
14670     PL_tainting         = proto_perl->Itainting;
14671     PL_taint_warn       = proto_perl->Itaint_warn;
14672 #else
14673     PL_tainting         = FALSE;
14674     PL_taint_warn       = FALSE;
14675 #endif
14676
14677     PL_minus_c          = proto_perl->Iminus_c;
14678
14679     PL_localpatches     = proto_perl->Ilocalpatches;
14680     PL_splitstr         = proto_perl->Isplitstr;
14681     PL_minus_n          = proto_perl->Iminus_n;
14682     PL_minus_p          = proto_perl->Iminus_p;
14683     PL_minus_l          = proto_perl->Iminus_l;
14684     PL_minus_a          = proto_perl->Iminus_a;
14685     PL_minus_E          = proto_perl->Iminus_E;
14686     PL_minus_F          = proto_perl->Iminus_F;
14687     PL_doswitches       = proto_perl->Idoswitches;
14688     PL_dowarn           = proto_perl->Idowarn;
14689 #ifdef PERL_SAWAMPERSAND
14690     PL_sawampersand     = proto_perl->Isawampersand;
14691 #endif
14692     PL_unsafe           = proto_perl->Iunsafe;
14693     PL_perldb           = proto_perl->Iperldb;
14694     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14695     PL_exit_flags       = proto_perl->Iexit_flags;
14696
14697     /* XXX time(&PL_basetime) when asked for? */
14698     PL_basetime         = proto_perl->Ibasetime;
14699
14700     PL_maxsysfd         = proto_perl->Imaxsysfd;
14701     PL_statusvalue      = proto_perl->Istatusvalue;
14702 #ifdef __VMS
14703     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14704 #else
14705     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14706 #endif
14707
14708     /* RE engine related */
14709     PL_regmatch_slab    = NULL;
14710     PL_reg_curpm        = NULL;
14711
14712     PL_sub_generation   = proto_perl->Isub_generation;
14713
14714     /* funky return mechanisms */
14715     PL_forkprocess      = proto_perl->Iforkprocess;
14716
14717     /* internal state */
14718     PL_maxo             = proto_perl->Imaxo;
14719
14720     PL_main_start       = proto_perl->Imain_start;
14721     PL_eval_root        = proto_perl->Ieval_root;
14722     PL_eval_start       = proto_perl->Ieval_start;
14723
14724     PL_filemode         = proto_perl->Ifilemode;
14725     PL_lastfd           = proto_perl->Ilastfd;
14726     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14727     PL_Argv             = NULL;
14728     PL_Cmd              = NULL;
14729     PL_gensym           = proto_perl->Igensym;
14730
14731     PL_laststatval      = proto_perl->Ilaststatval;
14732     PL_laststype        = proto_perl->Ilaststype;
14733     PL_mess_sv          = NULL;
14734
14735     PL_profiledata      = NULL;
14736
14737     PL_generation       = proto_perl->Igeneration;
14738
14739     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14740     PL_in_clean_all     = proto_perl->Iin_clean_all;
14741
14742     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14743     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14744     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14745     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14746     PL_nomemok          = proto_perl->Inomemok;
14747     PL_an               = proto_perl->Ian;
14748     PL_evalseq          = proto_perl->Ievalseq;
14749     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14750     PL_origalen         = proto_perl->Iorigalen;
14751
14752     PL_sighandlerp      = proto_perl->Isighandlerp;
14753
14754     PL_runops           = proto_perl->Irunops;
14755
14756     PL_subline          = proto_perl->Isubline;
14757
14758     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14759
14760 #ifdef FCRYPT
14761     PL_cryptseen        = proto_perl->Icryptseen;
14762 #endif
14763
14764 #ifdef USE_LOCALE_COLLATE
14765     PL_collation_ix     = proto_perl->Icollation_ix;
14766     PL_collation_standard       = proto_perl->Icollation_standard;
14767     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14768     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14769 #endif /* USE_LOCALE_COLLATE */
14770
14771 #ifdef USE_LOCALE_NUMERIC
14772     PL_numeric_standard = proto_perl->Inumeric_standard;
14773     PL_numeric_local    = proto_perl->Inumeric_local;
14774 #endif /* !USE_LOCALE_NUMERIC */
14775
14776     /* Did the locale setup indicate UTF-8? */
14777     PL_utf8locale       = proto_perl->Iutf8locale;
14778     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14779     /* Unicode features (see perlrun/-C) */
14780     PL_unicode          = proto_perl->Iunicode;
14781
14782     /* Pre-5.8 signals control */
14783     PL_signals          = proto_perl->Isignals;
14784
14785     /* times() ticks per second */
14786     PL_clocktick        = proto_perl->Iclocktick;
14787
14788     /* Recursion stopper for PerlIO_find_layer */
14789     PL_in_load_module   = proto_perl->Iin_load_module;
14790
14791     /* sort() routine */
14792     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14793
14794     /* Not really needed/useful since the reenrant_retint is "volatile",
14795      * but do it for consistency's sake. */
14796     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14797
14798     /* Hooks to shared SVs and locks. */
14799     PL_sharehook        = proto_perl->Isharehook;
14800     PL_lockhook         = proto_perl->Ilockhook;
14801     PL_unlockhook       = proto_perl->Iunlockhook;
14802     PL_threadhook       = proto_perl->Ithreadhook;
14803     PL_destroyhook      = proto_perl->Idestroyhook;
14804     PL_signalhook       = proto_perl->Isignalhook;
14805
14806     PL_globhook         = proto_perl->Iglobhook;
14807
14808     /* swatch cache */
14809     PL_last_swash_hv    = NULL; /* reinits on demand */
14810     PL_last_swash_klen  = 0;
14811     PL_last_swash_key[0]= '\0';
14812     PL_last_swash_tmps  = (U8*)NULL;
14813     PL_last_swash_slen  = 0;
14814
14815     PL_srand_called     = proto_perl->Isrand_called;
14816     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14817
14818     if (flags & CLONEf_COPY_STACKS) {
14819         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14820         PL_tmps_ix              = proto_perl->Itmps_ix;
14821         PL_tmps_max             = proto_perl->Itmps_max;
14822         PL_tmps_floor           = proto_perl->Itmps_floor;
14823
14824         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14825          * NOTE: unlike the others! */
14826         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14827         PL_scopestack_max       = proto_perl->Iscopestack_max;
14828
14829         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14830          * NOTE: unlike the others! */
14831         PL_savestack_ix         = proto_perl->Isavestack_ix;
14832         PL_savestack_max        = proto_perl->Isavestack_max;
14833     }
14834
14835     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14836     PL_top_env          = &PL_start_env;
14837
14838     PL_op               = proto_perl->Iop;
14839
14840     PL_Sv               = NULL;
14841     PL_Xpv              = (XPV*)NULL;
14842     my_perl->Ina        = proto_perl->Ina;
14843
14844     PL_statbuf          = proto_perl->Istatbuf;
14845     PL_statcache        = proto_perl->Istatcache;
14846
14847 #ifndef NO_TAINT_SUPPORT
14848     PL_tainted          = proto_perl->Itainted;
14849 #else
14850     PL_tainted          = FALSE;
14851 #endif
14852     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14853
14854     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14855
14856     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14857     PL_restartop        = proto_perl->Irestartop;
14858     PL_in_eval          = proto_perl->Iin_eval;
14859     PL_delaymagic       = proto_perl->Idelaymagic;
14860     PL_phase            = proto_perl->Iphase;
14861     PL_localizing       = proto_perl->Ilocalizing;
14862
14863     PL_hv_fetch_ent_mh  = NULL;
14864     PL_modcount         = proto_perl->Imodcount;
14865     PL_lastgotoprobe    = NULL;
14866     PL_dumpindent       = proto_perl->Idumpindent;
14867
14868     PL_efloatbuf        = NULL;         /* reinits on demand */
14869     PL_efloatsize       = 0;                    /* reinits on demand */
14870
14871     /* regex stuff */
14872
14873     PL_colorset         = 0;            /* reinits PL_colors[] */
14874     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14875
14876     /* Pluggable optimizer */
14877     PL_peepp            = proto_perl->Ipeepp;
14878     PL_rpeepp           = proto_perl->Irpeepp;
14879     /* op_free() hook */
14880     PL_opfreehook       = proto_perl->Iopfreehook;
14881
14882 #ifdef USE_REENTRANT_API
14883     /* XXX: things like -Dm will segfault here in perlio, but doing
14884      *  PERL_SET_CONTEXT(proto_perl);
14885      * breaks too many other things
14886      */
14887     Perl_reentrant_init(aTHX);
14888 #endif
14889
14890     /* create SV map for pointer relocation */
14891     PL_ptr_table = ptr_table_new();
14892
14893     /* initialize these special pointers as early as possible */
14894     init_constants();
14895     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14896     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14897     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14898     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14899                     &PL_padname_const);
14900
14901     /* create (a non-shared!) shared string table */
14902     PL_strtab           = newHV();
14903     HvSHAREKEYS_off(PL_strtab);
14904     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14905     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14906
14907     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14908
14909     /* This PV will be free'd special way so must set it same way op.c does */
14910     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14911     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14912
14913     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14914     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14915     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14916     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14917
14918     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14919     /* This makes no difference to the implementation, as it always pushes
14920        and shifts pointers to other SVs without changing their reference
14921        count, with the array becoming empty before it is freed. However, it
14922        makes it conceptually clear what is going on, and will avoid some
14923        work inside av.c, filling slots between AvFILL() and AvMAX() with
14924        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14925     AvREAL_off(param->stashes);
14926
14927     if (!(flags & CLONEf_COPY_STACKS)) {
14928         param->unreferenced = newAV();
14929     }
14930
14931 #ifdef PERLIO_LAYERS
14932     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14933     PerlIO_clone(aTHX_ proto_perl, param);
14934 #endif
14935
14936     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14937     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14938     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14939     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14940     PL_xsubfilename     = proto_perl->Ixsubfilename;
14941     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14942     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14943
14944     /* switches */
14945     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14946     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14947     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14948
14949     /* magical thingies */
14950
14951     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14952     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14953
14954     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14955     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14956     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14957
14958    
14959     /* Clone the regex array */
14960     /* ORANGE FIXME for plugins, probably in the SV dup code.
14961        newSViv(PTR2IV(CALLREGDUPE(
14962        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14963     */
14964     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14965     PL_regex_pad = AvARRAY(PL_regex_padav);
14966
14967     PL_stashpadmax      = proto_perl->Istashpadmax;
14968     PL_stashpadix       = proto_perl->Istashpadix ;
14969     Newx(PL_stashpad, PL_stashpadmax, HV *);
14970     {
14971         PADOFFSET o = 0;
14972         for (; o < PL_stashpadmax; ++o)
14973             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14974     }
14975
14976     /* shortcuts to various I/O objects */
14977     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14978     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14979     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14980     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14981     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14982     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14983     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14984
14985     /* shortcuts to regexp stuff */
14986     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14987
14988     /* shortcuts to misc objects */
14989     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14990
14991     /* shortcuts to debugging objects */
14992     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14993     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14994     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14995     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14996     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14997     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14998     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14999
15000     /* symbol tables */
15001     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15002     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15003     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15004     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15005     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15006
15007     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15008     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15009     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15010     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15011     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15012     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15013     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15014     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15015     PL_savebegin        = proto_perl->Isavebegin;
15016
15017     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15018
15019     /* subprocess state */
15020     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15021
15022     if (proto_perl->Iop_mask)
15023         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15024     else
15025         PL_op_mask      = NULL;
15026     /* PL_asserting        = proto_perl->Iasserting; */
15027
15028     /* current interpreter roots */
15029     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15030     OP_REFCNT_LOCK;
15031     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15032     OP_REFCNT_UNLOCK;
15033
15034     /* runtime control stuff */
15035     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15036
15037     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15038
15039     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15040
15041     /* interpreter atexit processing */
15042     PL_exitlistlen      = proto_perl->Iexitlistlen;
15043     if (PL_exitlistlen) {
15044         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15045         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15046     }
15047     else
15048         PL_exitlist     = (PerlExitListEntry*)NULL;
15049
15050     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15051     if (PL_my_cxt_size) {
15052         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15053         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15054 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15055         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15056         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15057 #endif
15058     }
15059     else {
15060         PL_my_cxt_list  = (void**)NULL;
15061 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15062         PL_my_cxt_keys  = (const char**)NULL;
15063 #endif
15064     }
15065     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15066     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15067     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15068     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15069
15070     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15071
15072     PAD_CLONE_VARS(proto_perl, param);
15073
15074 #ifdef HAVE_INTERP_INTERN
15075     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15076 #endif
15077
15078     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15079
15080 #ifdef PERL_USES_PL_PIDSTATUS
15081     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15082 #endif
15083     PL_osname           = SAVEPV(proto_perl->Iosname);
15084     PL_parser           = parser_dup(proto_perl->Iparser, param);
15085
15086     /* XXX this only works if the saved cop has already been cloned */
15087     if (proto_perl->Iparser) {
15088         PL_parser->saved_curcop = (COP*)any_dup(
15089                                     proto_perl->Iparser->saved_curcop,
15090                                     proto_perl);
15091     }
15092
15093     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15094
15095 #ifdef USE_LOCALE_CTYPE
15096     /* Should we warn if uses locale? */
15097     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15098 #endif
15099
15100 #ifdef USE_LOCALE_COLLATE
15101     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15102 #endif /* USE_LOCALE_COLLATE */
15103
15104 #ifdef USE_LOCALE_NUMERIC
15105     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15106     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15107 #endif /* !USE_LOCALE_NUMERIC */
15108
15109     /* Unicode inversion lists */
15110     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15111     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15112     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15113     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15114
15115     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15116     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15117
15118     /* utf8 character class swashes */
15119     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15120         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15121     }
15122     for (i = 0; i < POSIX_CC_COUNT; i++) {
15123         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15124     }
15125     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15126     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15127     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15128     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15129     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15130     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15131     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15132     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15133     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15134     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15135     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15136     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15137     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15138     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15139     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15140     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15141     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15142
15143     if (proto_perl->Ipsig_pend) {
15144         Newxz(PL_psig_pend, SIG_SIZE, int);
15145     }
15146     else {
15147         PL_psig_pend    = (int*)NULL;
15148     }
15149
15150     if (proto_perl->Ipsig_name) {
15151         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15152         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15153                             param);
15154         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15155     }
15156     else {
15157         PL_psig_ptr     = (SV**)NULL;
15158         PL_psig_name    = (SV**)NULL;
15159     }
15160
15161     if (flags & CLONEf_COPY_STACKS) {
15162         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15163         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15164                             PL_tmps_ix+1, param);
15165
15166         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15167         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15168         Newxz(PL_markstack, i, I32);
15169         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15170                                                   - proto_perl->Imarkstack);
15171         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15172                                                   - proto_perl->Imarkstack);
15173         Copy(proto_perl->Imarkstack, PL_markstack,
15174              PL_markstack_ptr - PL_markstack + 1, I32);
15175
15176         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15177          * NOTE: unlike the others! */
15178         Newxz(PL_scopestack, PL_scopestack_max, I32);
15179         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15180
15181 #ifdef DEBUGGING
15182         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15183         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15184 #endif
15185         /* reset stack AV to correct length before its duped via
15186          * PL_curstackinfo */
15187         AvFILLp(proto_perl->Icurstack) =
15188                             proto_perl->Istack_sp - proto_perl->Istack_base;
15189
15190         /* NOTE: si_dup() looks at PL_markstack */
15191         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15192
15193         /* PL_curstack          = PL_curstackinfo->si_stack; */
15194         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15195         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15196
15197         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15198         PL_stack_base           = AvARRAY(PL_curstack);
15199         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15200                                                    - proto_perl->Istack_base);
15201         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15202
15203         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15204         PL_savestack            = ss_dup(proto_perl, param);
15205     }
15206     else {
15207         init_stacks();
15208         ENTER;                  /* perl_destruct() wants to LEAVE; */
15209     }
15210
15211     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15212     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15213
15214     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15215     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15216     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15217     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15218     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15219     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15220
15221     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15222
15223     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15224     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15225     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15226
15227     PL_stashcache       = newHV();
15228
15229     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15230                                             proto_perl->Iwatchaddr);
15231     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15232     if (PL_debug && PL_watchaddr) {
15233         PerlIO_printf(Perl_debug_log,
15234           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15235           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15236           PTR2UV(PL_watchok));
15237     }
15238
15239     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15240     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15241     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15242
15243     /* Call the ->CLONE method, if it exists, for each of the stashes
15244        identified by sv_dup() above.
15245     */
15246     while(av_tindex(param->stashes) != -1) {
15247         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15248         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15249         if (cloner && GvCV(cloner)) {
15250             dSP;
15251             ENTER;
15252             SAVETMPS;
15253             PUSHMARK(SP);
15254             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15255             PUTBACK;
15256             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15257             FREETMPS;
15258             LEAVE;
15259         }
15260     }
15261
15262     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15263         ptr_table_free(PL_ptr_table);
15264         PL_ptr_table = NULL;
15265     }
15266
15267     if (!(flags & CLONEf_COPY_STACKS)) {
15268         unreferenced_to_tmp_stack(param->unreferenced);
15269     }
15270
15271     SvREFCNT_dec(param->stashes);
15272
15273     /* orphaned? eg threads->new inside BEGIN or use */
15274     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15275         SvREFCNT_inc_simple_void(PL_compcv);
15276         SAVEFREESV(PL_compcv);
15277     }
15278
15279     return my_perl;
15280 }
15281
15282 static void
15283 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15284 {
15285     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15286     
15287     if (AvFILLp(unreferenced) > -1) {
15288         SV **svp = AvARRAY(unreferenced);
15289         SV **const last = svp + AvFILLp(unreferenced);
15290         SSize_t count = 0;
15291
15292         do {
15293             if (SvREFCNT(*svp) == 1)
15294                 ++count;
15295         } while (++svp <= last);
15296
15297         EXTEND_MORTAL(count);
15298         svp = AvARRAY(unreferenced);
15299
15300         do {
15301             if (SvREFCNT(*svp) == 1) {
15302                 /* Our reference is the only one to this SV. This means that
15303                    in this thread, the scalar effectively has a 0 reference.
15304                    That doesn't work (cleanup never happens), so donate our
15305                    reference to it onto the save stack. */
15306                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15307             } else {
15308                 /* As an optimisation, because we are already walking the
15309                    entire array, instead of above doing either
15310                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15311                    release our reference to the scalar, so that at the end of
15312                    the array owns zero references to the scalars it happens to
15313                    point to. We are effectively converting the array from
15314                    AvREAL() on to AvREAL() off. This saves the av_clear()
15315                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15316                    walking the array a second time.  */
15317                 SvREFCNT_dec(*svp);
15318             }
15319
15320         } while (++svp <= last);
15321         AvREAL_off(unreferenced);
15322     }
15323     SvREFCNT_dec_NN(unreferenced);
15324 }
15325
15326 void
15327 Perl_clone_params_del(CLONE_PARAMS *param)
15328 {
15329     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15330        happy: */
15331     PerlInterpreter *const to = param->new_perl;
15332     dTHXa(to);
15333     PerlInterpreter *const was = PERL_GET_THX;
15334
15335     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15336
15337     if (was != to) {
15338         PERL_SET_THX(to);
15339     }
15340
15341     SvREFCNT_dec(param->stashes);
15342     if (param->unreferenced)
15343         unreferenced_to_tmp_stack(param->unreferenced);
15344
15345     Safefree(param);
15346
15347     if (was != to) {
15348         PERL_SET_THX(was);
15349     }
15350 }
15351
15352 CLONE_PARAMS *
15353 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15354 {
15355     dVAR;
15356     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15357        does a dTHX; to get the context from thread local storage.
15358        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15359        a version that passes in my_perl.  */
15360     PerlInterpreter *const was = PERL_GET_THX;
15361     CLONE_PARAMS *param;
15362
15363     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15364
15365     if (was != to) {
15366         PERL_SET_THX(to);
15367     }
15368
15369     /* Given that we've set the context, we can do this unshared.  */
15370     Newx(param, 1, CLONE_PARAMS);
15371
15372     param->flags = 0;
15373     param->proto_perl = from;
15374     param->new_perl = to;
15375     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15376     AvREAL_off(param->stashes);
15377     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15378
15379     if (was != to) {
15380         PERL_SET_THX(was);
15381     }
15382     return param;
15383 }
15384
15385 #endif /* USE_ITHREADS */
15386
15387 void
15388 Perl_init_constants(pTHX)
15389 {
15390     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15391     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15392     SvANY(&PL_sv_undef)         = NULL;
15393
15394     SvANY(&PL_sv_no)            = new_XPVNV();
15395     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15396     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15397                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15398                                   |SVp_POK|SVf_POK;
15399
15400     SvANY(&PL_sv_yes)           = new_XPVNV();
15401     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15402     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15403                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15404                                   |SVp_POK|SVf_POK;
15405
15406     SvPV_set(&PL_sv_no, (char*)PL_No);
15407     SvCUR_set(&PL_sv_no, 0);
15408     SvLEN_set(&PL_sv_no, 0);
15409     SvIV_set(&PL_sv_no, 0);
15410     SvNV_set(&PL_sv_no, 0);
15411
15412     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15413     SvCUR_set(&PL_sv_yes, 1);
15414     SvLEN_set(&PL_sv_yes, 0);
15415     SvIV_set(&PL_sv_yes, 1);
15416     SvNV_set(&PL_sv_yes, 1);
15417
15418     PadnamePV(&PL_padname_const) = (char *)PL_No;
15419 }
15420
15421 /*
15422 =head1 Unicode Support
15423
15424 =for apidoc sv_recode_to_utf8
15425
15426 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15427 of C<sv> is assumed to be octets in that encoding, and C<sv>
15428 will be converted into Unicode (and UTF-8).
15429
15430 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15431 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15432 an C<Encode::XS> Encoding object, bad things will happen.
15433 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15434
15435 The PV of C<sv> is returned.
15436
15437 =cut */
15438
15439 char *
15440 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15441 {
15442     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15443
15444     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15445         SV *uni;
15446         STRLEN len;
15447         const char *s;
15448         dSP;
15449         SV *nsv = sv;
15450         ENTER;
15451         PUSHSTACK;
15452         SAVETMPS;
15453         if (SvPADTMP(nsv)) {
15454             nsv = sv_newmortal();
15455             SvSetSV_nosteal(nsv, sv);
15456         }
15457         save_re_context();
15458         PUSHMARK(sp);
15459         EXTEND(SP, 3);
15460         PUSHs(encoding);
15461         PUSHs(nsv);
15462 /*
15463   NI-S 2002/07/09
15464   Passing sv_yes is wrong - it needs to be or'ed set of constants
15465   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15466   remove converted chars from source.
15467
15468   Both will default the value - let them.
15469
15470         XPUSHs(&PL_sv_yes);
15471 */
15472         PUTBACK;
15473         call_method("decode", G_SCALAR);
15474         SPAGAIN;
15475         uni = POPs;
15476         PUTBACK;
15477         s = SvPV_const(uni, len);
15478         if (s != SvPVX_const(sv)) {
15479             SvGROW(sv, len + 1);
15480             Move(s, SvPVX(sv), len + 1, char);
15481             SvCUR_set(sv, len);
15482         }
15483         FREETMPS;
15484         POPSTACK;
15485         LEAVE;
15486         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15487             /* clear pos and any utf8 cache */
15488             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15489             if (mg)
15490                 mg->mg_len = -1;
15491             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15492                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15493         }
15494         SvUTF8_on(sv);
15495         return SvPVX(sv);
15496     }
15497     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15498 }
15499
15500 /*
15501 =for apidoc sv_cat_decode
15502
15503 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15504 assumed to be octets in that encoding and decoding the input starts
15505 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15506 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15507 when the string C<tstr> appears in decoding output or the input ends on
15508 the PV of C<ssv>.  The value which C<offset> points will be modified
15509 to the last input position on C<ssv>.
15510
15511 Returns TRUE if the terminator was found, else returns FALSE.
15512
15513 =cut */
15514
15515 bool
15516 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15517                    SV *ssv, int *offset, char *tstr, int tlen)
15518 {
15519     bool ret = FALSE;
15520
15521     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15522
15523     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15524         SV *offsv;
15525         dSP;
15526         ENTER;
15527         SAVETMPS;
15528         save_re_context();
15529         PUSHMARK(sp);
15530         EXTEND(SP, 6);
15531         PUSHs(encoding);
15532         PUSHs(dsv);
15533         PUSHs(ssv);
15534         offsv = newSViv(*offset);
15535         mPUSHs(offsv);
15536         mPUSHp(tstr, tlen);
15537         PUTBACK;
15538         call_method("cat_decode", G_SCALAR);
15539         SPAGAIN;
15540         ret = SvTRUE(TOPs);
15541         *offset = SvIV(offsv);
15542         PUTBACK;
15543         FREETMPS;
15544         LEAVE;
15545     }
15546     else
15547         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15548     return ret;
15549
15550 }
15551
15552 /* ---------------------------------------------------------------------
15553  *
15554  * support functions for report_uninit()
15555  */
15556
15557 /* the maxiumum size of array or hash where we will scan looking
15558  * for the undefined element that triggered the warning */
15559
15560 #define FUV_MAX_SEARCH_SIZE 1000
15561
15562 /* Look for an entry in the hash whose value has the same SV as val;
15563  * If so, return a mortal copy of the key. */
15564
15565 STATIC SV*
15566 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15567 {
15568     dVAR;
15569     HE **array;
15570     I32 i;
15571
15572     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15573
15574     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15575                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15576         return NULL;
15577
15578     array = HvARRAY(hv);
15579
15580     for (i=HvMAX(hv); i>=0; i--) {
15581         HE *entry;
15582         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15583             if (HeVAL(entry) != val)
15584                 continue;
15585             if (    HeVAL(entry) == &PL_sv_undef ||
15586                     HeVAL(entry) == &PL_sv_placeholder)
15587                 continue;
15588             if (!HeKEY(entry))
15589                 return NULL;
15590             if (HeKLEN(entry) == HEf_SVKEY)
15591                 return sv_mortalcopy(HeKEY_sv(entry));
15592             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15593         }
15594     }
15595     return NULL;
15596 }
15597
15598 /* Look for an entry in the array whose value has the same SV as val;
15599  * If so, return the index, otherwise return -1. */
15600
15601 STATIC I32
15602 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15603 {
15604     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15605
15606     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15607                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15608         return -1;
15609
15610     if (val != &PL_sv_undef) {
15611         SV ** const svp = AvARRAY(av);
15612         I32 i;
15613
15614         for (i=AvFILLp(av); i>=0; i--)
15615             if (svp[i] == val)
15616                 return i;
15617     }
15618     return -1;
15619 }
15620
15621 /* varname(): return the name of a variable, optionally with a subscript.
15622  * If gv is non-zero, use the name of that global, along with gvtype (one
15623  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15624  * targ.  Depending on the value of the subscript_type flag, return:
15625  */
15626
15627 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15628 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15629 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15630 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15631
15632 SV*
15633 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15634         const SV *const keyname, I32 aindex, int subscript_type)
15635 {
15636
15637     SV * const name = sv_newmortal();
15638     if (gv && isGV(gv)) {
15639         char buffer[2];
15640         buffer[0] = gvtype;
15641         buffer[1] = 0;
15642
15643         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15644
15645         gv_fullname4(name, gv, buffer, 0);
15646
15647         if ((unsigned int)SvPVX(name)[1] <= 26) {
15648             buffer[0] = '^';
15649             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15650
15651             /* Swap the 1 unprintable control character for the 2 byte pretty
15652                version - ie substr($name, 1, 1) = $buffer; */
15653             sv_insert(name, 1, 1, buffer, 2);
15654         }
15655     }
15656     else {
15657         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15658         PADNAME *sv;
15659
15660         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15661
15662         if (!cv || !CvPADLIST(cv))
15663             return NULL;
15664         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15665         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15666         SvUTF8_on(name);
15667     }
15668
15669     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15670         SV * const sv = newSV(0);
15671         *SvPVX(name) = '$';
15672         Perl_sv_catpvf(aTHX_ name, "{%s}",
15673             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15674                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15675         SvREFCNT_dec_NN(sv);
15676     }
15677     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15678         *SvPVX(name) = '$';
15679         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15680     }
15681     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15682         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15683         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15684     }
15685
15686     return name;
15687 }
15688
15689
15690 /*
15691 =for apidoc find_uninit_var
15692
15693 Find the name of the undefined variable (if any) that caused the operator
15694 to issue a "Use of uninitialized value" warning.
15695 If match is true, only return a name if its value matches C<uninit_sv>.
15696 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15697 warning, then following the direct child of the op may yield an
15698 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15699 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15700 the variable name if we get an exact match.
15701 C<desc_p> points to a string pointer holding the description of the op.
15702 This may be updated if needed.
15703
15704 The name is returned as a mortal SV.
15705
15706 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15707 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15708
15709 =cut
15710 */
15711
15712 STATIC SV *
15713 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15714                   bool match, const char **desc_p)
15715 {
15716     dVAR;
15717     SV *sv;
15718     const GV *gv;
15719     const OP *o, *o2, *kid;
15720
15721     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15722
15723     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15724                             uninit_sv == &PL_sv_placeholder)))
15725         return NULL;
15726
15727     switch (obase->op_type) {
15728
15729     case OP_RV2AV:
15730     case OP_RV2HV:
15731     case OP_PADAV:
15732     case OP_PADHV:
15733       {
15734         const bool pad  = (    obase->op_type == OP_PADAV
15735                             || obase->op_type == OP_PADHV
15736                             || obase->op_type == OP_PADRANGE
15737                           );
15738
15739         const bool hash = (    obase->op_type == OP_PADHV
15740                             || obase->op_type == OP_RV2HV
15741                             || (obase->op_type == OP_PADRANGE
15742                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15743                           );
15744         I32 index = 0;
15745         SV *keysv = NULL;
15746         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15747
15748         if (pad) { /* @lex, %lex */
15749             sv = PAD_SVl(obase->op_targ);
15750             gv = NULL;
15751         }
15752         else {
15753             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15754             /* @global, %global */
15755                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15756                 if (!gv)
15757                     break;
15758                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15759             }
15760             else if (obase == PL_op) /* @{expr}, %{expr} */
15761                 return find_uninit_var(cUNOPx(obase)->op_first,
15762                                                 uninit_sv, match, desc_p);
15763             else /* @{expr}, %{expr} as a sub-expression */
15764                 return NULL;
15765         }
15766
15767         /* attempt to find a match within the aggregate */
15768         if (hash) {
15769             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15770             if (keysv)
15771                 subscript_type = FUV_SUBSCRIPT_HASH;
15772         }
15773         else {
15774             index = find_array_subscript((const AV *)sv, uninit_sv);
15775             if (index >= 0)
15776                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15777         }
15778
15779         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15780             break;
15781
15782         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15783                                     keysv, index, subscript_type);
15784       }
15785
15786     case OP_RV2SV:
15787         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15788             /* $global */
15789             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15790             if (!gv || !GvSTASH(gv))
15791                 break;
15792             if (match && (GvSV(gv) != uninit_sv))
15793                 break;
15794             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15795         }
15796         /* ${expr} */
15797         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15798
15799     case OP_PADSV:
15800         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15801             break;
15802         return varname(NULL, '$', obase->op_targ,
15803                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15804
15805     case OP_GVSV:
15806         gv = cGVOPx_gv(obase);
15807         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15808             break;
15809         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15810
15811     case OP_AELEMFAST_LEX:
15812         if (match) {
15813             SV **svp;
15814             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15815             if (!av || SvRMAGICAL(av))
15816                 break;
15817             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15818             if (!svp || *svp != uninit_sv)
15819                 break;
15820         }
15821         return varname(NULL, '$', obase->op_targ,
15822                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15823     case OP_AELEMFAST:
15824         {
15825             gv = cGVOPx_gv(obase);
15826             if (!gv)
15827                 break;
15828             if (match) {
15829                 SV **svp;
15830                 AV *const av = GvAV(gv);
15831                 if (!av || SvRMAGICAL(av))
15832                     break;
15833                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15834                 if (!svp || *svp != uninit_sv)
15835                     break;
15836             }
15837             return varname(gv, '$', 0,
15838                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15839         }
15840         NOT_REACHED; /* NOTREACHED */
15841
15842     case OP_EXISTS:
15843         o = cUNOPx(obase)->op_first;
15844         if (!o || o->op_type != OP_NULL ||
15845                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15846             break;
15847         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15848
15849     case OP_AELEM:
15850     case OP_HELEM:
15851     {
15852         bool negate = FALSE;
15853
15854         if (PL_op == obase)
15855             /* $a[uninit_expr] or $h{uninit_expr} */
15856             return find_uninit_var(cBINOPx(obase)->op_last,
15857                                                 uninit_sv, match, desc_p);
15858
15859         gv = NULL;
15860         o = cBINOPx(obase)->op_first;
15861         kid = cBINOPx(obase)->op_last;
15862
15863         /* get the av or hv, and optionally the gv */
15864         sv = NULL;
15865         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15866             sv = PAD_SV(o->op_targ);
15867         }
15868         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15869                 && cUNOPo->op_first->op_type == OP_GV)
15870         {
15871             gv = cGVOPx_gv(cUNOPo->op_first);
15872             if (!gv)
15873                 break;
15874             sv = o->op_type
15875                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15876         }
15877         if (!sv)
15878             break;
15879
15880         if (kid && kid->op_type == OP_NEGATE) {
15881             negate = TRUE;
15882             kid = cUNOPx(kid)->op_first;
15883         }
15884
15885         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15886             /* index is constant */
15887             SV* kidsv;
15888             if (negate) {
15889                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15890                 sv_catsv(kidsv, cSVOPx_sv(kid));
15891             }
15892             else
15893                 kidsv = cSVOPx_sv(kid);
15894             if (match) {
15895                 if (SvMAGICAL(sv))
15896                     break;
15897                 if (obase->op_type == OP_HELEM) {
15898                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15899                     if (!he || HeVAL(he) != uninit_sv)
15900                         break;
15901                 }
15902                 else {
15903                     SV * const  opsv = cSVOPx_sv(kid);
15904                     const IV  opsviv = SvIV(opsv);
15905                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15906                         negate ? - opsviv : opsviv,
15907                         FALSE);
15908                     if (!svp || *svp != uninit_sv)
15909                         break;
15910                 }
15911             }
15912             if (obase->op_type == OP_HELEM)
15913                 return varname(gv, '%', o->op_targ,
15914                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15915             else
15916                 return varname(gv, '@', o->op_targ, NULL,
15917                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15918                     FUV_SUBSCRIPT_ARRAY);
15919         }
15920         else  {
15921             /* index is an expression;
15922              * attempt to find a match within the aggregate */
15923             if (obase->op_type == OP_HELEM) {
15924                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15925                 if (keysv)
15926                     return varname(gv, '%', o->op_targ,
15927                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15928             }
15929             else {
15930                 const I32 index
15931                     = find_array_subscript((const AV *)sv, uninit_sv);
15932                 if (index >= 0)
15933                     return varname(gv, '@', o->op_targ,
15934                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15935             }
15936             if (match)
15937                 break;
15938             return varname(gv,
15939                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15940                 ? '@' : '%'),
15941                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15942         }
15943         NOT_REACHED; /* NOTREACHED */
15944     }
15945
15946     case OP_MULTIDEREF: {
15947         /* If we were executing OP_MULTIDEREF when the undef warning
15948          * triggered, then it must be one of the index values within
15949          * that triggered it. If not, then the only possibility is that
15950          * the value retrieved by the last aggregate lookup might be the
15951          * culprit. For the former, we set PL_multideref_pc each time before
15952          * using an index, so work though the item list until we reach
15953          * that point. For the latter, just work through the entire item
15954          * list; the last aggregate retrieved will be the candidate.
15955          */
15956
15957         /* the named aggregate, if any */
15958         PADOFFSET agg_targ = 0;
15959         GV       *agg_gv   = NULL;
15960         /* the last-seen index */
15961         UV        index_type;
15962         PADOFFSET index_targ;
15963         GV       *index_gv;
15964         IV        index_const_iv = 0; /* init for spurious compiler warn */
15965         SV       *index_const_sv;
15966         int       depth = 0;  /* how many array/hash lookups we've done */
15967
15968         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15969         UNOP_AUX_item *last = NULL;
15970         UV actions = items->uv;
15971         bool is_hv;
15972
15973         if (PL_op == obase) {
15974             last = PL_multideref_pc;
15975             assert(last >= items && last <= items + items[-1].uv);
15976         }
15977
15978         assert(actions);
15979
15980         while (1) {
15981             is_hv = FALSE;
15982             switch (actions & MDEREF_ACTION_MASK) {
15983
15984             case MDEREF_reload:
15985                 actions = (++items)->uv;
15986                 continue;
15987
15988             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15989                 is_hv = TRUE;
15990                 /* FALLTHROUGH */
15991             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15992                 agg_targ = (++items)->pad_offset;
15993                 agg_gv = NULL;
15994                 break;
15995
15996             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15997                 is_hv = TRUE;
15998                 /* FALLTHROUGH */
15999             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16000                 agg_targ = 0;
16001                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16002                 assert(isGV_with_GP(agg_gv));
16003                 break;
16004
16005             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16006             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16007                 ++items;
16008                 /* FALLTHROUGH */
16009             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16010             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16011                 agg_targ = 0;
16012                 agg_gv   = NULL;
16013                 is_hv    = TRUE;
16014                 break;
16015
16016             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16017             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16018                 ++items;
16019                 /* FALLTHROUGH */
16020             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16021             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16022                 agg_targ = 0;
16023                 agg_gv   = NULL;
16024             } /* switch */
16025
16026             index_targ     = 0;
16027             index_gv       = NULL;
16028             index_const_sv = NULL;
16029
16030             index_type = (actions & MDEREF_INDEX_MASK);
16031             switch (index_type) {
16032             case MDEREF_INDEX_none:
16033                 break;
16034             case MDEREF_INDEX_const:
16035                 if (is_hv)
16036                     index_const_sv = UNOP_AUX_item_sv(++items)
16037                 else
16038                     index_const_iv = (++items)->iv;
16039                 break;
16040             case MDEREF_INDEX_padsv:
16041                 index_targ = (++items)->pad_offset;
16042                 break;
16043             case MDEREF_INDEX_gvsv:
16044                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16045                 assert(isGV_with_GP(index_gv));
16046                 break;
16047             }
16048
16049             if (index_type != MDEREF_INDEX_none)
16050                 depth++;
16051
16052             if (   index_type == MDEREF_INDEX_none
16053                 || (actions & MDEREF_FLAG_last)
16054                 || (last && items == last)
16055             )
16056                 break;
16057
16058             actions >>= MDEREF_SHIFT;
16059         } /* while */
16060
16061         if (PL_op == obase) {
16062             /* index was undef */
16063
16064             *desc_p = (    (actions & MDEREF_FLAG_last)
16065                         && (obase->op_private
16066                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16067                         ?
16068                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16069                                 ? "exists"
16070                                 : "delete"
16071                         : is_hv ? "hash element" : "array element";
16072             assert(index_type != MDEREF_INDEX_none);
16073             if (index_gv)
16074                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16075             if (index_targ)
16076                 return varname(NULL, '$', index_targ,
16077                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16078             assert(is_hv); /* AV index is an IV and can't be undef */
16079             /* can a const HV index ever be undef? */
16080             return NULL;
16081         }
16082
16083         /* the SV returned by pp_multideref() was undef, if anything was */
16084
16085         if (depth != 1)
16086             break;
16087
16088         if (agg_targ)
16089             sv = PAD_SV(agg_targ);
16090         else if (agg_gv)
16091             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16092         else
16093             break;
16094
16095         if (index_type == MDEREF_INDEX_const) {
16096             if (match) {
16097                 if (SvMAGICAL(sv))
16098                     break;
16099                 if (is_hv) {
16100                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16101                     if (!he || HeVAL(he) != uninit_sv)
16102                         break;
16103                 }
16104                 else {
16105                     SV * const * const svp =
16106                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16107                     if (!svp || *svp != uninit_sv)
16108                         break;
16109                 }
16110             }
16111             return is_hv
16112                 ? varname(agg_gv, '%', agg_targ,
16113                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16114                 : varname(agg_gv, '@', agg_targ,
16115                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16116         }
16117         else  {
16118             /* index is an var */
16119             if (is_hv) {
16120                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16121                 if (keysv)
16122                     return varname(agg_gv, '%', agg_targ,
16123                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16124             }
16125             else {
16126                 const I32 index
16127                     = find_array_subscript((const AV *)sv, uninit_sv);
16128                 if (index >= 0)
16129                     return varname(agg_gv, '@', agg_targ,
16130                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16131             }
16132             if (match)
16133                 break;
16134             return varname(agg_gv,
16135                 is_hv ? '%' : '@',
16136                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16137         }
16138         NOT_REACHED; /* NOTREACHED */
16139     }
16140
16141     case OP_AASSIGN:
16142         /* only examine RHS */
16143         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16144                                                                 match, desc_p);
16145
16146     case OP_OPEN:
16147         o = cUNOPx(obase)->op_first;
16148         if (   o->op_type == OP_PUSHMARK
16149            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16150         )
16151             o = OpSIBLING(o);
16152
16153         if (!OpHAS_SIBLING(o)) {
16154             /* one-arg version of open is highly magical */
16155
16156             if (o->op_type == OP_GV) { /* open FOO; */
16157                 gv = cGVOPx_gv(o);
16158                 if (match && GvSV(gv) != uninit_sv)
16159                     break;
16160                 return varname(gv, '$', 0,
16161                             NULL, 0, FUV_SUBSCRIPT_NONE);
16162             }
16163             /* other possibilities not handled are:
16164              * open $x; or open my $x;  should return '${*$x}'
16165              * open expr;               should return '$'.expr ideally
16166              */
16167              break;
16168         }
16169         goto do_op;
16170
16171     /* ops where $_ may be an implicit arg */
16172     case OP_TRANS:
16173     case OP_TRANSR:
16174     case OP_SUBST:
16175     case OP_MATCH:
16176         if ( !(obase->op_flags & OPf_STACKED)) {
16177             if (uninit_sv == DEFSV)
16178                 return newSVpvs_flags("$_", SVs_TEMP);
16179             else if (obase->op_targ
16180                   && uninit_sv == PAD_SVl(obase->op_targ))
16181                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16182                                FUV_SUBSCRIPT_NONE);
16183         }
16184         goto do_op;
16185
16186     case OP_PRTF:
16187     case OP_PRINT:
16188     case OP_SAY:
16189         match = 1; /* print etc can return undef on defined args */
16190         /* skip filehandle as it can't produce 'undef' warning  */
16191         o = cUNOPx(obase)->op_first;
16192         if ((obase->op_flags & OPf_STACKED)
16193             &&
16194                (   o->op_type == OP_PUSHMARK
16195                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16196             o = OpSIBLING(OpSIBLING(o));
16197         goto do_op2;
16198
16199
16200     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16201     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16202
16203         /* the following ops are capable of returning PL_sv_undef even for
16204          * defined arg(s) */
16205
16206     case OP_BACKTICK:
16207     case OP_PIPE_OP:
16208     case OP_FILENO:
16209     case OP_BINMODE:
16210     case OP_TIED:
16211     case OP_GETC:
16212     case OP_SYSREAD:
16213     case OP_SEND:
16214     case OP_IOCTL:
16215     case OP_SOCKET:
16216     case OP_SOCKPAIR:
16217     case OP_BIND:
16218     case OP_CONNECT:
16219     case OP_LISTEN:
16220     case OP_ACCEPT:
16221     case OP_SHUTDOWN:
16222     case OP_SSOCKOPT:
16223     case OP_GETPEERNAME:
16224     case OP_FTRREAD:
16225     case OP_FTRWRITE:
16226     case OP_FTREXEC:
16227     case OP_FTROWNED:
16228     case OP_FTEREAD:
16229     case OP_FTEWRITE:
16230     case OP_FTEEXEC:
16231     case OP_FTEOWNED:
16232     case OP_FTIS:
16233     case OP_FTZERO:
16234     case OP_FTSIZE:
16235     case OP_FTFILE:
16236     case OP_FTDIR:
16237     case OP_FTLINK:
16238     case OP_FTPIPE:
16239     case OP_FTSOCK:
16240     case OP_FTBLK:
16241     case OP_FTCHR:
16242     case OP_FTTTY:
16243     case OP_FTSUID:
16244     case OP_FTSGID:
16245     case OP_FTSVTX:
16246     case OP_FTTEXT:
16247     case OP_FTBINARY:
16248     case OP_FTMTIME:
16249     case OP_FTATIME:
16250     case OP_FTCTIME:
16251     case OP_READLINK:
16252     case OP_OPEN_DIR:
16253     case OP_READDIR:
16254     case OP_TELLDIR:
16255     case OP_SEEKDIR:
16256     case OP_REWINDDIR:
16257     case OP_CLOSEDIR:
16258     case OP_GMTIME:
16259     case OP_ALARM:
16260     case OP_SEMGET:
16261     case OP_GETLOGIN:
16262     case OP_UNDEF:
16263     case OP_SUBSTR:
16264     case OP_AEACH:
16265     case OP_EACH:
16266     case OP_SORT:
16267     case OP_CALLER:
16268     case OP_DOFILE:
16269     case OP_PROTOTYPE:
16270     case OP_NCMP:
16271     case OP_SMARTMATCH:
16272     case OP_UNPACK:
16273     case OP_SYSOPEN:
16274     case OP_SYSSEEK:
16275         match = 1;
16276         goto do_op;
16277
16278     case OP_ENTERSUB:
16279     case OP_GOTO:
16280         /* XXX tmp hack: these two may call an XS sub, and currently
16281           XS subs don't have a SUB entry on the context stack, so CV and
16282           pad determination goes wrong, and BAD things happen. So, just
16283           don't try to determine the value under those circumstances.
16284           Need a better fix at dome point. DAPM 11/2007 */
16285         break;
16286
16287     case OP_FLIP:
16288     case OP_FLOP:
16289     {
16290         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16291         if (gv && GvSV(gv) == uninit_sv)
16292             return newSVpvs_flags("$.", SVs_TEMP);
16293         goto do_op;
16294     }
16295
16296     case OP_POS:
16297         /* def-ness of rval pos() is independent of the def-ness of its arg */
16298         if ( !(obase->op_flags & OPf_MOD))
16299             break;
16300
16301     case OP_SCHOMP:
16302     case OP_CHOMP:
16303         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16304             return newSVpvs_flags("${$/}", SVs_TEMP);
16305         /* FALLTHROUGH */
16306
16307     default:
16308     do_op:
16309         if (!(obase->op_flags & OPf_KIDS))
16310             break;
16311         o = cUNOPx(obase)->op_first;
16312         
16313     do_op2:
16314         if (!o)
16315             break;
16316
16317         /* This loop checks all the kid ops, skipping any that cannot pos-
16318          * sibly be responsible for the uninitialized value; i.e., defined
16319          * constants and ops that return nothing.  If there is only one op
16320          * left that is not skipped, then we *know* it is responsible for
16321          * the uninitialized value.  If there is more than one op left, we
16322          * have to look for an exact match in the while() loop below.
16323          * Note that we skip padrange, because the individual pad ops that
16324          * it replaced are still in the tree, so we work on them instead.
16325          */
16326         o2 = NULL;
16327         for (kid=o; kid; kid = OpSIBLING(kid)) {
16328             const OPCODE type = kid->op_type;
16329             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16330               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16331               || (type == OP_PUSHMARK)
16332               || (type == OP_PADRANGE)
16333             )
16334             continue;
16335
16336             if (o2) { /* more than one found */
16337                 o2 = NULL;
16338                 break;
16339             }
16340             o2 = kid;
16341         }
16342         if (o2)
16343             return find_uninit_var(o2, uninit_sv, match, desc_p);
16344
16345         /* scan all args */
16346         while (o) {
16347             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16348             if (sv)
16349                 return sv;
16350             o = OpSIBLING(o);
16351         }
16352         break;
16353     }
16354     return NULL;
16355 }
16356
16357
16358 /*
16359 =for apidoc report_uninit
16360
16361 Print appropriate "Use of uninitialized variable" warning.
16362
16363 =cut
16364 */
16365
16366 void
16367 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16368 {
16369     const char *desc = NULL;
16370     SV* varname = NULL;
16371
16372     if (PL_op) {
16373         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16374                 ? "join or string"
16375                 : OP_DESC(PL_op);
16376         if (uninit_sv && PL_curpad) {
16377             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16378             if (varname)
16379                 sv_insert(varname, 0, 0, " ", 1);
16380         }
16381     }
16382     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16383         /* we've reached the end of a sort block or sub,
16384          * and the uninit value is probably what that code returned */
16385         desc = "sort";
16386
16387     /* PL_warn_uninit_sv is constant */
16388     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16389     if (desc)
16390         /* diag_listed_as: Use of uninitialized value%s */
16391         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16392                 SVfARG(varname ? varname : &PL_sv_no),
16393                 " in ", desc);
16394     else
16395         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16396                 "", "", "");
16397     GCC_DIAG_RESTORE;
16398 }
16399
16400 /*
16401  * ex: set ts=8 sts=4 sw=4 et:
16402  */