This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
infnan: more tests.
[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 PERL_NEW_COPY_ON_WRITE
44 #   ifndef SV_COW_THRESHOLD
45 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
46 #   endif
47 #   ifndef SV_COWBUF_THRESHOLD
48 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
49 #   endif
50 #   ifndef SV_COW_MAX_WASTE_THRESHOLD
51 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
52 #   endif
53 #   ifndef SV_COWBUF_WASTE_THRESHOLD
54 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
55 #   endif
56 #   ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
57 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
58 #   endif
59 #   ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
60 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
61 #   endif
62 #endif
63 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
64    hold is 0. */
65 #if SV_COW_THRESHOLD
66 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
67 #else
68 # define GE_COW_THRESHOLD(cur) 1
69 #endif
70 #if SV_COWBUF_THRESHOLD
71 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
72 #else
73 # define GE_COWBUF_THRESHOLD(cur) 1
74 #endif
75 #if SV_COW_MAX_WASTE_THRESHOLD
76 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
77 #else
78 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
79 #endif
80 #if SV_COWBUF_WASTE_THRESHOLD
81 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
82 #else
83 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
84 #endif
85 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
86 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
87 #else
88 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
89 #endif
90 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
91 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
92 #else
93 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
94 #endif
95
96 #define CHECK_COW_THRESHOLD(cur,len) (\
97     GE_COW_THRESHOLD((cur)) && \
98     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
99     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
100 )
101 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
102     GE_COWBUF_THRESHOLD((cur)) && \
103     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
104     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
105 )
106
107 #ifdef PERL_UTF8_CACHE_ASSERT
108 /* if adding more checks watch out for the following tests:
109  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
110  *   lib/utf8.t lib/Unicode/Collate/t/index.t
111  * --jhi
112  */
113 #   define ASSERT_UTF8_CACHE(cache) \
114     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
115                               assert((cache)[2] <= (cache)[3]); \
116                               assert((cache)[3] <= (cache)[1]);} \
117                               } STMT_END
118 #else
119 #   define ASSERT_UTF8_CACHE(cache) NOOP
120 #endif
121
122 #ifdef PERL_OLD_COPY_ON_WRITE
123 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
124 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
125 #endif
126
127 /* ============================================================================
128
129 =head1 Allocation and deallocation of SVs.
130 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
131 sv, av, hv...) contains type and reference count information, and for
132 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
133 contains fields specific to each type.  Some types store all they need
134 in the head, so don't have a body.
135
136 In all but the most memory-paranoid configurations (ex: PURIFY), heads
137 and bodies are allocated out of arenas, which by default are
138 approximately 4K chunks of memory parcelled up into N heads or bodies.
139 Sv-bodies are allocated by their sv-type, guaranteeing size
140 consistency needed to allocate safely from arrays.
141
142 For SV-heads, the first slot in each arena is reserved, and holds a
143 link to the next arena, some flags, and a note of the number of slots.
144 Snaked through each arena chain is a linked list of free items; when
145 this becomes empty, an extra arena is allocated and divided up into N
146 items which are threaded into the free list.
147
148 SV-bodies are similar, but they use arena-sets by default, which
149 separate the link and info from the arena itself, and reclaim the 1st
150 slot in the arena.  SV-bodies are further described later.
151
152 The following global variables are associated with arenas:
153
154  PL_sv_arenaroot     pointer to list of SV arenas
155  PL_sv_root          pointer to list of free SV structures
156
157  PL_body_arenas      head of linked-list of body arenas
158  PL_body_roots[]     array of pointers to list of free bodies of svtype
159                      arrays are indexed by the svtype needed
160
161 A few special SV heads are not allocated from an arena, but are
162 instead directly created in the interpreter structure, eg PL_sv_undef.
163 The size of arenas can be changed from the default by setting
164 PERL_ARENA_SIZE appropriately at compile time.
165
166 The SV arena serves the secondary purpose of allowing still-live SVs
167 to be located and destroyed during final cleanup.
168
169 At the lowest level, the macros new_SV() and del_SV() grab and free
170 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
171 to return the SV to the free list with error checking.) new_SV() calls
172 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
173 SVs in the free list have their SvTYPE field set to all ones.
174
175 At the time of very final cleanup, sv_free_arenas() is called from
176 perl_destruct() to physically free all the arenas allocated since the
177 start of the interpreter.
178
179 The function visit() scans the SV arenas list, and calls a specified
180 function for each SV it finds which is still live - ie which has an SvTYPE
181 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
182 following functions (specified as [function that calls visit()] / [function
183 called by visit() for each SV]):
184
185     sv_report_used() / do_report_used()
186                         dump all remaining SVs (debugging aid)
187
188     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
189                       do_clean_named_io_objs(),do_curse()
190                         Attempt to free all objects pointed to by RVs,
191                         try to do the same for all objects indir-
192                         ectly referenced by typeglobs too, and
193                         then do a final sweep, cursing any
194                         objects that remain.  Called once from
195                         perl_destruct(), prior to calling sv_clean_all()
196                         below.
197
198     sv_clean_all() / do_clean_all()
199                         SvREFCNT_dec(sv) each remaining SV, possibly
200                         triggering an sv_free(). It also sets the
201                         SVf_BREAK flag on the SV to indicate that the
202                         refcnt has been artificially lowered, and thus
203                         stopping sv_free() from giving spurious warnings
204                         about SVs which unexpectedly have a refcnt
205                         of zero.  called repeatedly from perl_destruct()
206                         until there are no SVs left.
207
208 =head2 Arena allocator API Summary
209
210 Private API to rest of sv.c
211
212     new_SV(),  del_SV(),
213
214     new_XPVNV(), del_XPVGV(),
215     etc
216
217 Public API:
218
219     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
220
221 =cut
222
223  * ========================================================================= */
224
225 /*
226  * "A time to plant, and a time to uproot what was planted..."
227  */
228
229 #ifdef PERL_MEM_LOG
230 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
231             Perl_mem_log_new_sv(sv, file, line, func)
232 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
233             Perl_mem_log_del_sv(sv, file, line, func)
234 #else
235 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
237 #endif
238
239 #ifdef DEBUG_LEAKING_SCALARS
240 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
241         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
242     } STMT_END
243 #  define DEBUG_SV_SERIAL(sv)                                               \
244     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
245             PTR2UV(sv), (long)(sv)->sv_debug_serial))
246 #else
247 #  define FREE_SV_DEBUG_FILE(sv)
248 #  define DEBUG_SV_SERIAL(sv)   NOOP
249 #endif
250
251 #ifdef PERL_POISON
252 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
253 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
254 /* Whilst I'd love to do this, it seems that things like to check on
255    unreferenced scalars
256 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
257 */
258 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
259                                 PoisonNew(&SvREFCNT(sv), 1, U32)
260 #else
261 #  define SvARENA_CHAIN(sv)     SvANY(sv)
262 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
263 #  define POSION_SV_HEAD(sv)
264 #endif
265
266 /* Mark an SV head as unused, and add to free list.
267  *
268  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
269  * its refcount artificially decremented during global destruction, so
270  * there may be dangling pointers to it. The last thing we want in that
271  * case is for it to be reused. */
272
273 #define plant_SV(p) \
274     STMT_START {                                        \
275         const U32 old_flags = SvFLAGS(p);                       \
276         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
277         DEBUG_SV_SERIAL(p);                             \
278         FREE_SV_DEBUG_FILE(p);                          \
279         POSION_SV_HEAD(p);                              \
280         SvFLAGS(p) = SVTYPEMASK;                        \
281         if (!(old_flags & SVf_BREAK)) {         \
282             SvARENA_CHAIN_SET(p, PL_sv_root);   \
283             PL_sv_root = (p);                           \
284         }                                               \
285         --PL_sv_count;                                  \
286     } STMT_END
287
288 #define uproot_SV(p) \
289     STMT_START {                                        \
290         (p) = PL_sv_root;                               \
291         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
292         ++PL_sv_count;                                  \
293     } STMT_END
294
295
296 /* make some more SVs by adding another arena */
297
298 STATIC SV*
299 S_more_sv(pTHX)
300 {
301     SV* sv;
302     char *chunk;                /* must use New here to match call to */
303     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
304     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
305     uproot_SV(sv);
306     return sv;
307 }
308
309 /* new_SV(): return a new, empty SV head */
310
311 #ifdef DEBUG_LEAKING_SCALARS
312 /* provide a real function for a debugger to play with */
313 STATIC SV*
314 S_new_SV(pTHX_ const char *file, int line, const char *func)
315 {
316     SV* sv;
317
318     if (PL_sv_root)
319         uproot_SV(sv);
320     else
321         sv = S_more_sv(aTHX);
322     SvANY(sv) = 0;
323     SvREFCNT(sv) = 1;
324     SvFLAGS(sv) = 0;
325     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
326     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
327                 ? PL_parser->copline
328                 :  PL_curcop
329                     ? CopLINE(PL_curcop)
330                     : 0
331             );
332     sv->sv_debug_inpad = 0;
333     sv->sv_debug_parent = NULL;
334     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
335
336     sv->sv_debug_serial = PL_sv_serial++;
337
338     MEM_LOG_NEW_SV(sv, file, line, func);
339     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
340             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
341
342     return sv;
343 }
344 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
345
346 #else
347 #  define new_SV(p) \
348     STMT_START {                                        \
349         if (PL_sv_root)                                 \
350             uproot_SV(p);                               \
351         else                                            \
352             (p) = S_more_sv(aTHX);                      \
353         SvANY(p) = 0;                                   \
354         SvREFCNT(p) = 1;                                \
355         SvFLAGS(p) = 0;                                 \
356         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
357     } STMT_END
358 #endif
359
360
361 /* del_SV(): return an empty SV head to the free list */
362
363 #ifdef DEBUGGING
364
365 #define del_SV(p) \
366     STMT_START {                                        \
367         if (DEBUG_D_TEST)                               \
368             del_sv(p);                                  \
369         else                                            \
370             plant_SV(p);                                \
371     } STMT_END
372
373 STATIC void
374 S_del_sv(pTHX_ SV *p)
375 {
376     PERL_ARGS_ASSERT_DEL_SV;
377
378     if (DEBUG_D_TEST) {
379         SV* sva;
380         bool ok = 0;
381         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
382             const SV * const sv = sva + 1;
383             const SV * const svend = &sva[SvREFCNT(sva)];
384             if (p >= sv && p < svend) {
385                 ok = 1;
386                 break;
387             }
388         }
389         if (!ok) {
390             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
391                              "Attempt to free non-arena SV: 0x%"UVxf
392                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
393             return;
394         }
395     }
396     plant_SV(p);
397 }
398
399 #else /* ! DEBUGGING */
400
401 #define del_SV(p)   plant_SV(p)
402
403 #endif /* DEBUGGING */
404
405
406 /*
407 =head1 SV Manipulation Functions
408
409 =for apidoc sv_add_arena
410
411 Given a chunk of memory, link it to the head of the list of arenas,
412 and split it into a list of free SVs.
413
414 =cut
415 */
416
417 static void
418 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
419 {
420     SV *const sva = MUTABLE_SV(ptr);
421     SV* sv;
422     SV* svend;
423
424     PERL_ARGS_ASSERT_SV_ADD_ARENA;
425
426     /* The first SV in an arena isn't an SV. */
427     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
428     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
429     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
430
431     PL_sv_arenaroot = sva;
432     PL_sv_root = sva + 1;
433
434     svend = &sva[SvREFCNT(sva) - 1];
435     sv = sva + 1;
436     while (sv < svend) {
437         SvARENA_CHAIN_SET(sv, (sv + 1));
438 #ifdef DEBUGGING
439         SvREFCNT(sv) = 0;
440 #endif
441         /* Must always set typemask because it's always checked in on cleanup
442            when the arenas are walked looking for objects.  */
443         SvFLAGS(sv) = SVTYPEMASK;
444         sv++;
445     }
446     SvARENA_CHAIN_SET(sv, 0);
447 #ifdef DEBUGGING
448     SvREFCNT(sv) = 0;
449 #endif
450     SvFLAGS(sv) = SVTYPEMASK;
451 }
452
453 /* visit(): call the named function for each non-free SV in the arenas
454  * whose flags field matches the flags/mask args. */
455
456 STATIC I32
457 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
458 {
459     SV* sva;
460     I32 visited = 0;
461
462     PERL_ARGS_ASSERT_VISIT;
463
464     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
465         const SV * const svend = &sva[SvREFCNT(sva)];
466         SV* sv;
467         for (sv = sva + 1; sv < svend; ++sv) {
468             if (SvTYPE(sv) != (svtype)SVTYPEMASK
469                     && (sv->sv_flags & mask) == flags
470                     && SvREFCNT(sv))
471             {
472                 (*f)(aTHX_ sv);
473                 ++visited;
474             }
475         }
476     }
477     return visited;
478 }
479
480 #ifdef DEBUGGING
481
482 /* called by sv_report_used() for each live SV */
483
484 static void
485 do_report_used(pTHX_ SV *const sv)
486 {
487     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
488         PerlIO_printf(Perl_debug_log, "****\n");
489         sv_dump(sv);
490     }
491 }
492 #endif
493
494 /*
495 =for apidoc sv_report_used
496
497 Dump the contents of all SVs not yet freed (debugging aid).
498
499 =cut
500 */
501
502 void
503 Perl_sv_report_used(pTHX)
504 {
505 #ifdef DEBUGGING
506     visit(do_report_used, 0, 0);
507 #else
508     PERL_UNUSED_CONTEXT;
509 #endif
510 }
511
512 /* called by sv_clean_objs() for each live SV */
513
514 static void
515 do_clean_objs(pTHX_ SV *const ref)
516 {
517     assert (SvROK(ref));
518     {
519         SV * const target = SvRV(ref);
520         if (SvOBJECT(target)) {
521             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
522             if (SvWEAKREF(ref)) {
523                 sv_del_backref(target, ref);
524                 SvWEAKREF_off(ref);
525                 SvRV_set(ref, NULL);
526             } else {
527                 SvROK_off(ref);
528                 SvRV_set(ref, NULL);
529                 SvREFCNT_dec_NN(target);
530             }
531         }
532     }
533 }
534
535
536 /* clear any slots in a GV which hold objects - except IO;
537  * called by sv_clean_objs() for each live GV */
538
539 static void
540 do_clean_named_objs(pTHX_ SV *const sv)
541 {
542     SV *obj;
543     assert(SvTYPE(sv) == SVt_PVGV);
544     assert(isGV_with_GP(sv));
545     if (!GvGP(sv))
546         return;
547
548     /* freeing GP entries may indirectly free the current GV;
549      * hold onto it while we mess with the GP slots */
550     SvREFCNT_inc(sv);
551
552     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
553         DEBUG_D((PerlIO_printf(Perl_debug_log,
554                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
555         GvSV(sv) = NULL;
556         SvREFCNT_dec_NN(obj);
557     }
558     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
559         DEBUG_D((PerlIO_printf(Perl_debug_log,
560                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
561         GvAV(sv) = NULL;
562         SvREFCNT_dec_NN(obj);
563     }
564     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
565         DEBUG_D((PerlIO_printf(Perl_debug_log,
566                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
567         GvHV(sv) = NULL;
568         SvREFCNT_dec_NN(obj);
569     }
570     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
571         DEBUG_D((PerlIO_printf(Perl_debug_log,
572                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
573         GvCV_set(sv, NULL);
574         SvREFCNT_dec_NN(obj);
575     }
576     SvREFCNT_dec_NN(sv); /* undo the inc above */
577 }
578
579 /* clear any IO slots in a GV which hold objects (except stderr, defout);
580  * called by sv_clean_objs() for each live GV */
581
582 static void
583 do_clean_named_io_objs(pTHX_ SV *const sv)
584 {
585     SV *obj;
586     assert(SvTYPE(sv) == SVt_PVGV);
587     assert(isGV_with_GP(sv));
588     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
589         return;
590
591     SvREFCNT_inc(sv);
592     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
593         DEBUG_D((PerlIO_printf(Perl_debug_log,
594                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
595         GvIOp(sv) = NULL;
596         SvREFCNT_dec_NN(obj);
597     }
598     SvREFCNT_dec_NN(sv); /* undo the inc above */
599 }
600
601 /* Void wrapper to pass to visit() */
602 static void
603 do_curse(pTHX_ SV * const sv) {
604     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
605      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
606         return;
607     (void)curse(sv, 0);
608 }
609
610 /*
611 =for apidoc sv_clean_objs
612
613 Attempt to destroy all objects not yet freed.
614
615 =cut
616 */
617
618 void
619 Perl_sv_clean_objs(pTHX)
620 {
621     GV *olddef, *olderr;
622     PL_in_clean_objs = TRUE;
623     visit(do_clean_objs, SVf_ROK, SVf_ROK);
624     /* Some barnacles may yet remain, clinging to typeglobs.
625      * Run the non-IO destructors first: they may want to output
626      * error messages, close files etc */
627     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
628     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
629     /* And if there are some very tenacious barnacles clinging to arrays,
630        closures, or what have you.... */
631     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
632     olddef = PL_defoutgv;
633     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
634     if (olddef && isGV_with_GP(olddef))
635         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
636     olderr = PL_stderrgv;
637     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
638     if (olderr && isGV_with_GP(olderr))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
640     SvREFCNT_dec(olddef);
641     PL_in_clean_objs = FALSE;
642 }
643
644 /* called by sv_clean_all() for each live SV */
645
646 static void
647 do_clean_all(pTHX_ SV *const sv)
648 {
649     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
650         /* don't clean pid table and strtab */
651         return;
652     }
653     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
654     SvFLAGS(sv) |= SVf_BREAK;
655     SvREFCNT_dec_NN(sv);
656 }
657
658 /*
659 =for apidoc sv_clean_all
660
661 Decrement the refcnt of each remaining SV, possibly triggering a
662 cleanup.  This function may have to be called multiple times to free
663 SVs which are in complex self-referential hierarchies.
664
665 =cut
666 */
667
668 I32
669 Perl_sv_clean_all(pTHX)
670 {
671     I32 cleaned;
672     PL_in_clean_all = TRUE;
673     cleaned = visit(do_clean_all, 0,0);
674     return cleaned;
675 }
676
677 /*
678   ARENASETS: a meta-arena implementation which separates arena-info
679   into struct arena_set, which contains an array of struct
680   arena_descs, each holding info for a single arena.  By separating
681   the meta-info from the arena, we recover the 1st slot, formerly
682   borrowed for list management.  The arena_set is about the size of an
683   arena, avoiding the needless malloc overhead of a naive linked-list.
684
685   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
686   memory in the last arena-set (1/2 on average).  In trade, we get
687   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
688   smaller types).  The recovery of the wasted space allows use of
689   small arenas for large, rare body types, by changing array* fields
690   in body_details_by_type[] below.
691 */
692 struct arena_desc {
693     char       *arena;          /* the raw storage, allocated aligned */
694     size_t      size;           /* its size ~4k typ */
695     svtype      utype;          /* bodytype stored in arena */
696 };
697
698 struct arena_set;
699
700 /* Get the maximum number of elements in set[] such that struct arena_set
701    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
702    therefore likely to be 1 aligned memory page.  */
703
704 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
705                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
706
707 struct arena_set {
708     struct arena_set* next;
709     unsigned int   set_size;    /* ie ARENAS_PER_SET */
710     unsigned int   curr;        /* index of next available arena-desc */
711     struct arena_desc set[ARENAS_PER_SET];
712 };
713
714 /*
715 =for apidoc sv_free_arenas
716
717 Deallocate the memory used by all arenas.  Note that all the individual SV
718 heads and bodies within the arenas must already have been freed.
719
720 =cut
721
722 */
723 void
724 Perl_sv_free_arenas(pTHX)
725 {
726     SV* sva;
727     SV* svanext;
728     unsigned int i;
729
730     /* Free arenas here, but be careful about fake ones.  (We assume
731        contiguity of the fake ones with the corresponding real ones.) */
732
733     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
734         svanext = MUTABLE_SV(SvANY(sva));
735         while (svanext && SvFAKE(svanext))
736             svanext = MUTABLE_SV(SvANY(svanext));
737
738         if (!SvFAKE(sva))
739             Safefree(sva);
740     }
741
742     {
743         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
744
745         while (aroot) {
746             struct arena_set *current = aroot;
747             i = aroot->curr;
748             while (i--) {
749                 assert(aroot->set[i].arena);
750                 Safefree(aroot->set[i].arena);
751             }
752             aroot = aroot->next;
753             Safefree(current);
754         }
755     }
756     PL_body_arenas = 0;
757
758     i = PERL_ARENA_ROOTS_SIZE;
759     while (i--)
760         PL_body_roots[i] = 0;
761
762     PL_sv_arenaroot = 0;
763     PL_sv_root = 0;
764 }
765
766 /*
767   Here are mid-level routines that manage the allocation of bodies out
768   of the various arenas.  There are 5 kinds of arenas:
769
770   1. SV-head arenas, which are discussed and handled above
771   2. regular body arenas
772   3. arenas for reduced-size bodies
773   4. Hash-Entry arenas
774
775   Arena types 2 & 3 are chained by body-type off an array of
776   arena-root pointers, which is indexed by svtype.  Some of the
777   larger/less used body types are malloced singly, since a large
778   unused block of them is wasteful.  Also, several svtypes dont have
779   bodies; the data fits into the sv-head itself.  The arena-root
780   pointer thus has a few unused root-pointers (which may be hijacked
781   later for arena types 4,5)
782
783   3 differs from 2 as an optimization; some body types have several
784   unused fields in the front of the structure (which are kept in-place
785   for consistency).  These bodies can be allocated in smaller chunks,
786   because the leading fields arent accessed.  Pointers to such bodies
787   are decremented to point at the unused 'ghost' memory, knowing that
788   the pointers are used with offsets to the real memory.
789
790
791 =head1 SV-Body Allocation
792
793 =cut
794
795 Allocation of SV-bodies is similar to SV-heads, differing as follows;
796 the allocation mechanism is used for many body types, so is somewhat
797 more complicated, it uses arena-sets, and has no need for still-live
798 SV detection.
799
800 At the outermost level, (new|del)_X*V macros return bodies of the
801 appropriate type.  These macros call either (new|del)_body_type or
802 (new|del)_body_allocated macro pairs, depending on specifics of the
803 type.  Most body types use the former pair, the latter pair is used to
804 allocate body types with "ghost fields".
805
806 "ghost fields" are fields that are unused in certain types, and
807 consequently don't need to actually exist.  They are declared because
808 they're part of a "base type", which allows use of functions as
809 methods.  The simplest examples are AVs and HVs, 2 aggregate types
810 which don't use the fields which support SCALAR semantics.
811
812 For these types, the arenas are carved up into appropriately sized
813 chunks, we thus avoid wasted memory for those unaccessed members.
814 When bodies are allocated, we adjust the pointer back in memory by the
815 size of the part not allocated, so it's as if we allocated the full
816 structure.  (But things will all go boom if you write to the part that
817 is "not there", because you'll be overwriting the last members of the
818 preceding structure in memory.)
819
820 We calculate the correction using the STRUCT_OFFSET macro on the first
821 member present.  If the allocated structure is smaller (no initial NV
822 actually allocated) then the net effect is to subtract the size of the NV
823 from the pointer, to return a new pointer as if an initial NV were actually
824 allocated.  (We were using structures named *_allocated for this, but
825 this turned out to be a subtle bug, because a structure without an NV
826 could have a lower alignment constraint, but the compiler is allowed to
827 optimised accesses based on the alignment constraint of the actual pointer
828 to the full structure, for example, using a single 64 bit load instruction
829 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
830
831 This is the same trick as was used for NV and IV bodies.  Ironically it
832 doesn't need to be used for NV bodies any more, because NV is now at
833 the start of the structure.  IV bodies don't need it either, because
834 they are no longer allocated.
835
836 In turn, the new_body_* allocators call S_new_body(), which invokes
837 new_body_inline macro, which takes a lock, and takes a body off the
838 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
839 necessary to refresh an empty list.  Then the lock is released, and
840 the body is returned.
841
842 Perl_more_bodies allocates a new arena, and carves it up into an array of N
843 bodies, which it strings into a linked list.  It looks up arena-size
844 and body-size from the body_details table described below, thus
845 supporting the multiple body-types.
846
847 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
848 the (new|del)_X*V macros are mapped directly to malloc/free.
849
850 For each sv-type, struct body_details bodies_by_type[] carries
851 parameters which control these aspects of SV handling:
852
853 Arena_size determines whether arenas are used for this body type, and if
854 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
855 zero, forcing individual mallocs and frees.
856
857 Body_size determines how big a body is, and therefore how many fit into
858 each arena.  Offset carries the body-pointer adjustment needed for
859 "ghost fields", and is used in *_allocated macros.
860
861 But its main purpose is to parameterize info needed in
862 Perl_sv_upgrade().  The info here dramatically simplifies the function
863 vs the implementation in 5.8.8, making it table-driven.  All fields
864 are used for this, except for arena_size.
865
866 For the sv-types that have no bodies, arenas are not used, so those
867 PL_body_roots[sv_type] are unused, and can be overloaded.  In
868 something of a special case, SVt_NULL is borrowed for HE arenas;
869 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
870 bodies_by_type[SVt_NULL] slot is not used, as the table is not
871 available in hv.c.
872
873 */
874
875 struct body_details {
876     U8 body_size;       /* Size to allocate  */
877     U8 copy;            /* Size of structure to copy (may be shorter)  */
878     U8 offset;
879     unsigned int type : 4;          /* We have space for a sanity check.  */
880     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
881     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
882     unsigned int arena : 1;         /* Allocated from an arena */
883     size_t arena_size;              /* Size of arena to allocate */
884 };
885
886 #define HADNV FALSE
887 #define NONV TRUE
888
889
890 #ifdef PURIFY
891 /* With -DPURFIY we allocate everything directly, and don't use arenas.
892    This seems a rather elegant way to simplify some of the code below.  */
893 #define HASARENA FALSE
894 #else
895 #define HASARENA TRUE
896 #endif
897 #define NOARENA FALSE
898
899 /* Size the arenas to exactly fit a given number of bodies.  A count
900    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
901    simplifying the default.  If count > 0, the arena is sized to fit
902    only that many bodies, allowing arenas to be used for large, rare
903    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
904    limited by PERL_ARENA_SIZE, so we can safely oversize the
905    declarations.
906  */
907 #define FIT_ARENA0(body_size)                           \
908     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
909 #define FIT_ARENAn(count,body_size)                     \
910     ( count * body_size <= PERL_ARENA_SIZE)             \
911     ? count * body_size                                 \
912     : FIT_ARENA0 (body_size)
913 #define FIT_ARENA(count,body_size)                      \
914     count                                               \
915     ? FIT_ARENAn (count, body_size)                     \
916     : FIT_ARENA0 (body_size)
917
918 /* Calculate the length to copy. Specifically work out the length less any
919    final padding the compiler needed to add.  See the comment in sv_upgrade
920    for why copying the padding proved to be a bug.  */
921
922 #define copy_length(type, last_member) \
923         STRUCT_OFFSET(type, last_member) \
924         + sizeof (((type*)SvANY((const SV *)0))->last_member)
925
926 static const struct body_details bodies_by_type[] = {
927     /* HEs use this offset for their arena.  */
928     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
929
930     /* IVs are in the head, so the allocation size is 0.  */
931     { 0,
932       sizeof(IV), /* This is used to copy out the IV body.  */
933       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
934       NOARENA /* IVS don't need an arena  */, 0
935     },
936
937     { sizeof(NV), sizeof(NV),
938       STRUCT_OFFSET(XPVNV, xnv_u),
939       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
940
941     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
942       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
943       + STRUCT_OFFSET(XPV, xpv_cur),
944       SVt_PV, FALSE, NONV, HASARENA,
945       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
946
947     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
948       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
949       + STRUCT_OFFSET(XPV, xpv_cur),
950       SVt_INVLIST, TRUE, NONV, HASARENA,
951       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
952
953     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
954       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
955       + STRUCT_OFFSET(XPV, xpv_cur),
956       SVt_PVIV, FALSE, NONV, HASARENA,
957       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
958
959     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
960       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
961       + STRUCT_OFFSET(XPV, xpv_cur),
962       SVt_PVNV, FALSE, HADNV, HASARENA,
963       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
964
965     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
966       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
967
968     { sizeof(regexp),
969       sizeof(regexp),
970       0,
971       SVt_REGEXP, TRUE, NONV, HASARENA,
972       FIT_ARENA(0, sizeof(regexp))
973     },
974
975     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
976       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
977     
978     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
979       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
980
981     { sizeof(XPVAV),
982       copy_length(XPVAV, xav_alloc),
983       0,
984       SVt_PVAV, TRUE, NONV, HASARENA,
985       FIT_ARENA(0, sizeof(XPVAV)) },
986
987     { sizeof(XPVHV),
988       copy_length(XPVHV, xhv_max),
989       0,
990       SVt_PVHV, TRUE, NONV, HASARENA,
991       FIT_ARENA(0, sizeof(XPVHV)) },
992
993     { sizeof(XPVCV),
994       sizeof(XPVCV),
995       0,
996       SVt_PVCV, TRUE, NONV, HASARENA,
997       FIT_ARENA(0, sizeof(XPVCV)) },
998
999     { sizeof(XPVFM),
1000       sizeof(XPVFM),
1001       0,
1002       SVt_PVFM, TRUE, NONV, NOARENA,
1003       FIT_ARENA(20, sizeof(XPVFM)) },
1004
1005     { sizeof(XPVIO),
1006       sizeof(XPVIO),
1007       0,
1008       SVt_PVIO, TRUE, NONV, HASARENA,
1009       FIT_ARENA(24, sizeof(XPVIO)) },
1010 };
1011
1012 #define new_body_allocated(sv_type)             \
1013     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1014              - bodies_by_type[sv_type].offset)
1015
1016 /* return a thing to the free list */
1017
1018 #define del_body(thing, root)                           \
1019     STMT_START {                                        \
1020         void ** const thing_copy = (void **)thing;      \
1021         *thing_copy = *root;                            \
1022         *root = (void*)thing_copy;                      \
1023     } STMT_END
1024
1025 #ifdef PURIFY
1026
1027 #define new_XNV()       safemalloc(sizeof(XPVNV))
1028 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1029 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1030
1031 #define del_XPVGV(p)    safefree(p)
1032
1033 #else /* !PURIFY */
1034
1035 #define new_XNV()       new_body_allocated(SVt_NV)
1036 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1037 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1038
1039 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1040                                  &PL_body_roots[SVt_PVGV])
1041
1042 #endif /* PURIFY */
1043
1044 /* no arena for you! */
1045
1046 #define new_NOARENA(details) \
1047         safemalloc((details)->body_size + (details)->offset)
1048 #define new_NOARENAZ(details) \
1049         safecalloc((details)->body_size + (details)->offset, 1)
1050
1051 void *
1052 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1053                   const size_t arena_size)
1054 {
1055     void ** const root = &PL_body_roots[sv_type];
1056     struct arena_desc *adesc;
1057     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1058     unsigned int curr;
1059     char *start;
1060     const char *end;
1061     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1062 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1063     dVAR;
1064 #endif
1065 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1066     static bool done_sanity_check;
1067
1068     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1069      * variables like done_sanity_check. */
1070     if (!done_sanity_check) {
1071         unsigned int i = SVt_LAST;
1072
1073         done_sanity_check = TRUE;
1074
1075         while (i--)
1076             assert (bodies_by_type[i].type == i);
1077     }
1078 #endif
1079
1080     assert(arena_size);
1081
1082     /* may need new arena-set to hold new arena */
1083     if (!aroot || aroot->curr >= aroot->set_size) {
1084         struct arena_set *newroot;
1085         Newxz(newroot, 1, struct arena_set);
1086         newroot->set_size = ARENAS_PER_SET;
1087         newroot->next = aroot;
1088         aroot = newroot;
1089         PL_body_arenas = (void *) newroot;
1090         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1091     }
1092
1093     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1094     curr = aroot->curr++;
1095     adesc = &(aroot->set[curr]);
1096     assert(!adesc->arena);
1097     
1098     Newx(adesc->arena, good_arena_size, char);
1099     adesc->size = good_arena_size;
1100     adesc->utype = sv_type;
1101     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1102                           curr, (void*)adesc->arena, (UV)good_arena_size));
1103
1104     start = (char *) adesc->arena;
1105
1106     /* Get the address of the byte after the end of the last body we can fit.
1107        Remember, this is integer division:  */
1108     end = start + good_arena_size / body_size * body_size;
1109
1110     /* computed count doesn't reflect the 1st slot reservation */
1111 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1112     DEBUG_m(PerlIO_printf(Perl_debug_log,
1113                           "arena %p end %p arena-size %d (from %d) type %d "
1114                           "size %d ct %d\n",
1115                           (void*)start, (void*)end, (int)good_arena_size,
1116                           (int)arena_size, sv_type, (int)body_size,
1117                           (int)good_arena_size / (int)body_size));
1118 #else
1119     DEBUG_m(PerlIO_printf(Perl_debug_log,
1120                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1121                           (void*)start, (void*)end,
1122                           (int)arena_size, sv_type, (int)body_size,
1123                           (int)good_arena_size / (int)body_size));
1124 #endif
1125     *root = (void *)start;
1126
1127     while (1) {
1128         /* Where the next body would start:  */
1129         char * const next = start + body_size;
1130
1131         if (next >= end) {
1132             /* This is the last body:  */
1133             assert(next == end);
1134
1135             *(void **)start = 0;
1136             return *root;
1137         }
1138
1139         *(void**) start = (void *)next;
1140         start = next;
1141     }
1142 }
1143
1144 /* grab a new thing from the free list, allocating more if necessary.
1145    The inline version is used for speed in hot routines, and the
1146    function using it serves the rest (unless PURIFY).
1147 */
1148 #define new_body_inline(xpv, sv_type) \
1149     STMT_START { \
1150         void ** const r3wt = &PL_body_roots[sv_type]; \
1151         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1152           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1153                                              bodies_by_type[sv_type].body_size,\
1154                                              bodies_by_type[sv_type].arena_size)); \
1155         *(r3wt) = *(void**)(xpv); \
1156     } STMT_END
1157
1158 #ifndef PURIFY
1159
1160 STATIC void *
1161 S_new_body(pTHX_ const svtype sv_type)
1162 {
1163     void *xpv;
1164     new_body_inline(xpv, sv_type);
1165     return xpv;
1166 }
1167
1168 #endif
1169
1170 static const struct body_details fake_rv =
1171     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1172
1173 /*
1174 =for apidoc sv_upgrade
1175
1176 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1177 SV, then copies across as much information as possible from the old body.
1178 It croaks if the SV is already in a more complex form than requested.  You
1179 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1180 before calling C<sv_upgrade>, and hence does not croak.  See also
1181 C<svtype>.
1182
1183 =cut
1184 */
1185
1186 void
1187 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1188 {
1189     void*       old_body;
1190     void*       new_body;
1191     const svtype old_type = SvTYPE(sv);
1192     const struct body_details *new_type_details;
1193     const struct body_details *old_type_details
1194         = bodies_by_type + old_type;
1195     SV *referant = NULL;
1196
1197     PERL_ARGS_ASSERT_SV_UPGRADE;
1198
1199     if (old_type == new_type)
1200         return;
1201
1202     /* This clause was purposefully added ahead of the early return above to
1203        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1204        inference by Nick I-S that it would fix other troublesome cases. See
1205        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1206
1207        Given that shared hash key scalars are no longer PVIV, but PV, there is
1208        no longer need to unshare so as to free up the IVX slot for its proper
1209        purpose. So it's safe to move the early return earlier.  */
1210
1211     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1212         sv_force_normal_flags(sv, 0);
1213     }
1214
1215     old_body = SvANY(sv);
1216
1217     /* Copying structures onto other structures that have been neatly zeroed
1218        has a subtle gotcha. Consider XPVMG
1219
1220        +------+------+------+------+------+-------+-------+
1221        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1222        +------+------+------+------+------+-------+-------+
1223        0      4      8     12     16     20      24      28
1224
1225        where NVs are aligned to 8 bytes, so that sizeof that structure is
1226        actually 32 bytes long, with 4 bytes of padding at the end:
1227
1228        +------+------+------+------+------+-------+-------+------+
1229        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1230        +------+------+------+------+------+-------+-------+------+
1231        0      4      8     12     16     20      24      28     32
1232
1233        so what happens if you allocate memory for this structure:
1234
1235        +------+------+------+------+------+-------+-------+------+------+...
1236        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1237        +------+------+------+------+------+-------+-------+------+------+...
1238        0      4      8     12     16     20      24      28     32     36
1239
1240        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1241        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1242        started out as zero once, but it's quite possible that it isn't. So now,
1243        rather than a nicely zeroed GP, you have it pointing somewhere random.
1244        Bugs ensue.
1245
1246        (In fact, GP ends up pointing at a previous GP structure, because the
1247        principle cause of the padding in XPVMG getting garbage is a copy of
1248        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1249        this happens to be moot because XPVGV has been re-ordered, with GP
1250        no longer after STASH)
1251
1252        So we are careful and work out the size of used parts of all the
1253        structures.  */
1254
1255     switch (old_type) {
1256     case SVt_NULL:
1257         break;
1258     case SVt_IV:
1259         if (SvROK(sv)) {
1260             referant = SvRV(sv);
1261             old_type_details = &fake_rv;
1262             if (new_type == SVt_NV)
1263                 new_type = SVt_PVNV;
1264         } else {
1265             if (new_type < SVt_PVIV) {
1266                 new_type = (new_type == SVt_NV)
1267                     ? SVt_PVNV : SVt_PVIV;
1268             }
1269         }
1270         break;
1271     case SVt_NV:
1272         if (new_type < SVt_PVNV) {
1273             new_type = SVt_PVNV;
1274         }
1275         break;
1276     case SVt_PV:
1277         assert(new_type > SVt_PV);
1278         assert(SVt_IV < SVt_PV);
1279         assert(SVt_NV < SVt_PV);
1280         break;
1281     case SVt_PVIV:
1282         break;
1283     case SVt_PVNV:
1284         break;
1285     case SVt_PVMG:
1286         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1287            there's no way that it can be safely upgraded, because perl.c
1288            expects to Safefree(SvANY(PL_mess_sv))  */
1289         assert(sv != PL_mess_sv);
1290         /* This flag bit is used to mean other things in other scalar types.
1291            Given that it only has meaning inside the pad, it shouldn't be set
1292            on anything that can get upgraded.  */
1293         assert(!SvPAD_TYPED(sv));
1294         break;
1295     default:
1296         if (UNLIKELY(old_type_details->cant_upgrade))
1297             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1298                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1299     }
1300
1301     if (UNLIKELY(old_type > new_type))
1302         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1303                 (int)old_type, (int)new_type);
1304
1305     new_type_details = bodies_by_type + new_type;
1306
1307     SvFLAGS(sv) &= ~SVTYPEMASK;
1308     SvFLAGS(sv) |= new_type;
1309
1310     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1311        the return statements above will have triggered.  */
1312     assert (new_type != SVt_NULL);
1313     switch (new_type) {
1314     case SVt_IV:
1315         assert(old_type == SVt_NULL);
1316         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1317         SvIV_set(sv, 0);
1318         return;
1319     case SVt_NV:
1320         assert(old_type == SVt_NULL);
1321         SvANY(sv) = new_XNV();
1322         SvNV_set(sv, 0);
1323         return;
1324     case SVt_PVHV:
1325     case SVt_PVAV:
1326         assert(new_type_details->body_size);
1327
1328 #ifndef PURIFY  
1329         assert(new_type_details->arena);
1330         assert(new_type_details->arena_size);
1331         /* This points to the start of the allocated area.  */
1332         new_body_inline(new_body, new_type);
1333         Zero(new_body, new_type_details->body_size, char);
1334         new_body = ((char *)new_body) - new_type_details->offset;
1335 #else
1336         /* We always allocated the full length item with PURIFY. To do this
1337            we fake things so that arena is false for all 16 types..  */
1338         new_body = new_NOARENAZ(new_type_details);
1339 #endif
1340         SvANY(sv) = new_body;
1341         if (new_type == SVt_PVAV) {
1342             AvMAX(sv)   = -1;
1343             AvFILLp(sv) = -1;
1344             AvREAL_only(sv);
1345             if (old_type_details->body_size) {
1346                 AvALLOC(sv) = 0;
1347             } else {
1348                 /* It will have been zeroed when the new body was allocated.
1349                    Lets not write to it, in case it confuses a write-back
1350                    cache.  */
1351             }
1352         } else {
1353             assert(!SvOK(sv));
1354             SvOK_off(sv);
1355 #ifndef NODEFAULT_SHAREKEYS
1356             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1357 #endif
1358             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1359             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1360         }
1361
1362         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1363            The target created by newSVrv also is, and it can have magic.
1364            However, it never has SvPVX set.
1365         */
1366         if (old_type == SVt_IV) {
1367             assert(!SvROK(sv));
1368         } else if (old_type >= SVt_PV) {
1369             assert(SvPVX_const(sv) == 0);
1370         }
1371
1372         if (old_type >= SVt_PVMG) {
1373             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1374             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1375         } else {
1376             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1377         }
1378         break;
1379
1380     case SVt_PVIV:
1381         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1382            no route from NV to PVIV, NOK can never be true  */
1383         assert(!SvNOKp(sv));
1384         assert(!SvNOK(sv));
1385     case SVt_PVIO:
1386     case SVt_PVFM:
1387     case SVt_PVGV:
1388     case SVt_PVCV:
1389     case SVt_PVLV:
1390     case SVt_INVLIST:
1391     case SVt_REGEXP:
1392     case SVt_PVMG:
1393     case SVt_PVNV:
1394     case SVt_PV:
1395
1396         assert(new_type_details->body_size);
1397         /* We always allocated the full length item with PURIFY. To do this
1398            we fake things so that arena is false for all 16 types..  */
1399         if(new_type_details->arena) {
1400             /* This points to the start of the allocated area.  */
1401             new_body_inline(new_body, new_type);
1402             Zero(new_body, new_type_details->body_size, char);
1403             new_body = ((char *)new_body) - new_type_details->offset;
1404         } else {
1405             new_body = new_NOARENAZ(new_type_details);
1406         }
1407         SvANY(sv) = new_body;
1408
1409         if (old_type_details->copy) {
1410             /* There is now the potential for an upgrade from something without
1411                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1412             int offset = old_type_details->offset;
1413             int length = old_type_details->copy;
1414
1415             if (new_type_details->offset > old_type_details->offset) {
1416                 const int difference
1417                     = new_type_details->offset - old_type_details->offset;
1418                 offset += difference;
1419                 length -= difference;
1420             }
1421             assert (length >= 0);
1422                 
1423             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1424                  char);
1425         }
1426
1427 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1428         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1429          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1430          * NV slot, but the new one does, then we need to initialise the
1431          * freshly created NV slot with whatever the correct bit pattern is
1432          * for 0.0  */
1433         if (old_type_details->zero_nv && !new_type_details->zero_nv
1434             && !isGV_with_GP(sv))
1435             SvNV_set(sv, 0);
1436 #endif
1437
1438         if (UNLIKELY(new_type == SVt_PVIO)) {
1439             IO * const io = MUTABLE_IO(sv);
1440             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1441
1442             SvOBJECT_on(io);
1443             /* Clear the stashcache because a new IO could overrule a package
1444                name */
1445             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1446             hv_clear(PL_stashcache);
1447
1448             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1449             IoPAGE_LEN(sv) = 60;
1450         }
1451         if (UNLIKELY(new_type == SVt_REGEXP))
1452             sv->sv_u.svu_rx = (regexp *)new_body;
1453         else if (old_type < SVt_PV) {
1454             /* referant will be NULL unless the old type was SVt_IV emulating
1455                SVt_RV */
1456             sv->sv_u.svu_rv = referant;
1457         }
1458         break;
1459     default:
1460         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1461                    (unsigned long)new_type);
1462     }
1463
1464     if (old_type > SVt_IV) {
1465 #ifdef PURIFY
1466         safefree(old_body);
1467 #else
1468         /* Note that there is an assumption that all bodies of types that
1469            can be upgraded came from arenas. Only the more complex non-
1470            upgradable types are allowed to be directly malloc()ed.  */
1471         assert(old_type_details->arena);
1472         del_body((void*)((char*)old_body + old_type_details->offset),
1473                  &PL_body_roots[old_type]);
1474 #endif
1475     }
1476 }
1477
1478 /*
1479 =for apidoc sv_backoff
1480
1481 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1482 wrapper instead.
1483
1484 =cut
1485 */
1486
1487 int
1488 Perl_sv_backoff(SV *const sv)
1489 {
1490     STRLEN delta;
1491     const char * const s = SvPVX_const(sv);
1492
1493     PERL_ARGS_ASSERT_SV_BACKOFF;
1494
1495     assert(SvOOK(sv));
1496     assert(SvTYPE(sv) != SVt_PVHV);
1497     assert(SvTYPE(sv) != SVt_PVAV);
1498
1499     SvOOK_offset(sv, delta);
1500     
1501     SvLEN_set(sv, SvLEN(sv) + delta);
1502     SvPV_set(sv, SvPVX(sv) - delta);
1503     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1504     SvFLAGS(sv) &= ~SVf_OOK;
1505     return 0;
1506 }
1507
1508 /*
1509 =for apidoc sv_grow
1510
1511 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1512 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1513 Use the C<SvGROW> wrapper instead.
1514
1515 =cut
1516 */
1517
1518 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1519
1520 char *
1521 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1522 {
1523     char *s;
1524
1525     PERL_ARGS_ASSERT_SV_GROW;
1526
1527     if (SvROK(sv))
1528         sv_unref(sv);
1529     if (SvTYPE(sv) < SVt_PV) {
1530         sv_upgrade(sv, SVt_PV);
1531         s = SvPVX_mutable(sv);
1532     }
1533     else if (SvOOK(sv)) {       /* pv is offset? */
1534         sv_backoff(sv);
1535         s = SvPVX_mutable(sv);
1536         if (newlen > SvLEN(sv))
1537             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1538     }
1539     else
1540     {
1541         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1542         s = SvPVX_mutable(sv);
1543     }
1544
1545 #ifdef PERL_NEW_COPY_ON_WRITE
1546     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1547      * to store the COW count. So in general, allocate one more byte than
1548      * asked for, to make it likely this byte is always spare: and thus
1549      * make more strings COW-able.
1550      * If the new size is a big power of two, don't bother: we assume the
1551      * caller wanted a nice 2^N sized block and will be annoyed at getting
1552      * 2^N+1 */
1553     if (newlen & 0xff)
1554         newlen++;
1555 #endif
1556
1557 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1558 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1559 #endif
1560
1561     if (newlen > SvLEN(sv)) {           /* need more room? */
1562         STRLEN minlen = SvCUR(sv);
1563         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1564         if (newlen < minlen)
1565             newlen = minlen;
1566 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1567
1568         /* Don't round up on the first allocation, as odds are pretty good that
1569          * the initial request is accurate as to what is really needed */
1570         if (SvLEN(sv)) {
1571             newlen = PERL_STRLEN_ROUNDUP(newlen);
1572         }
1573 #endif
1574         if (SvLEN(sv) && s) {
1575             s = (char*)saferealloc(s, newlen);
1576         }
1577         else {
1578             s = (char*)safemalloc(newlen);
1579             if (SvPVX_const(sv) && SvCUR(sv)) {
1580                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1581             }
1582         }
1583         SvPV_set(sv, s);
1584 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1585         /* Do this here, do it once, do it right, and then we will never get
1586            called back into sv_grow() unless there really is some growing
1587            needed.  */
1588         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1589 #else
1590         SvLEN_set(sv, newlen);
1591 #endif
1592     }
1593     return s;
1594 }
1595
1596 /*
1597 =for apidoc sv_setiv
1598
1599 Copies an integer into the given SV, upgrading first if necessary.
1600 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1601
1602 =cut
1603 */
1604
1605 void
1606 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1607 {
1608     PERL_ARGS_ASSERT_SV_SETIV;
1609
1610     SV_CHECK_THINKFIRST_COW_DROP(sv);
1611     switch (SvTYPE(sv)) {
1612     case SVt_NULL:
1613     case SVt_NV:
1614         sv_upgrade(sv, SVt_IV);
1615         break;
1616     case SVt_PV:
1617         sv_upgrade(sv, SVt_PVIV);
1618         break;
1619
1620     case SVt_PVGV:
1621         if (!isGV_with_GP(sv))
1622             break;
1623     case SVt_PVAV:
1624     case SVt_PVHV:
1625     case SVt_PVCV:
1626     case SVt_PVFM:
1627     case SVt_PVIO:
1628         /* diag_listed_as: Can't coerce %s to %s in %s */
1629         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1630                    OP_DESC(PL_op));
1631     default: NOOP;
1632     }
1633     (void)SvIOK_only(sv);                       /* validate number */
1634     SvIV_set(sv, i);
1635     SvTAINT(sv);
1636 }
1637
1638 /*
1639 =for apidoc sv_setiv_mg
1640
1641 Like C<sv_setiv>, but also handles 'set' magic.
1642
1643 =cut
1644 */
1645
1646 void
1647 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1648 {
1649     PERL_ARGS_ASSERT_SV_SETIV_MG;
1650
1651     sv_setiv(sv,i);
1652     SvSETMAGIC(sv);
1653 }
1654
1655 /*
1656 =for apidoc sv_setuv
1657
1658 Copies an unsigned integer into the given SV, upgrading first if necessary.
1659 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1660
1661 =cut
1662 */
1663
1664 void
1665 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1666 {
1667     PERL_ARGS_ASSERT_SV_SETUV;
1668
1669     /* With the if statement to ensure that integers are stored as IVs whenever
1670        possible:
1671        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1672
1673        without
1674        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1675
1676        If you wish to remove the following if statement, so that this routine
1677        (and its callers) always return UVs, please benchmark to see what the
1678        effect is. Modern CPUs may be different. Or may not :-)
1679     */
1680     if (u <= (UV)IV_MAX) {
1681        sv_setiv(sv, (IV)u);
1682        return;
1683     }
1684     sv_setiv(sv, 0);
1685     SvIsUV_on(sv);
1686     SvUV_set(sv, u);
1687 }
1688
1689 /*
1690 =for apidoc sv_setuv_mg
1691
1692 Like C<sv_setuv>, but also handles 'set' magic.
1693
1694 =cut
1695 */
1696
1697 void
1698 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1699 {
1700     PERL_ARGS_ASSERT_SV_SETUV_MG;
1701
1702     sv_setuv(sv,u);
1703     SvSETMAGIC(sv);
1704 }
1705
1706 /*
1707 =for apidoc sv_setnv
1708
1709 Copies a double into the given SV, upgrading first if necessary.
1710 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1711
1712 =cut
1713 */
1714
1715 void
1716 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1717 {
1718     PERL_ARGS_ASSERT_SV_SETNV;
1719
1720     SV_CHECK_THINKFIRST_COW_DROP(sv);
1721     switch (SvTYPE(sv)) {
1722     case SVt_NULL:
1723     case SVt_IV:
1724         sv_upgrade(sv, SVt_NV);
1725         break;
1726     case SVt_PV:
1727     case SVt_PVIV:
1728         sv_upgrade(sv, SVt_PVNV);
1729         break;
1730
1731     case SVt_PVGV:
1732         if (!isGV_with_GP(sv))
1733             break;
1734     case SVt_PVAV:
1735     case SVt_PVHV:
1736     case SVt_PVCV:
1737     case SVt_PVFM:
1738     case SVt_PVIO:
1739         /* diag_listed_as: Can't coerce %s to %s in %s */
1740         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1741                    OP_DESC(PL_op));
1742     default: NOOP;
1743     }
1744     SvNV_set(sv, num);
1745     (void)SvNOK_only(sv);                       /* validate number */
1746     SvTAINT(sv);
1747 }
1748
1749 /*
1750 =for apidoc sv_setnv_mg
1751
1752 Like C<sv_setnv>, but also handles 'set' magic.
1753
1754 =cut
1755 */
1756
1757 void
1758 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1759 {
1760     PERL_ARGS_ASSERT_SV_SETNV_MG;
1761
1762     sv_setnv(sv,num);
1763     SvSETMAGIC(sv);
1764 }
1765
1766 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1767  * not incrementable warning display.
1768  * Originally part of S_not_a_number().
1769  * The return value may be != tmpbuf.
1770  */
1771
1772 STATIC const char *
1773 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1774     const char *pv;
1775
1776      PERL_ARGS_ASSERT_SV_DISPLAY;
1777
1778      if (DO_UTF8(sv)) {
1779           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1780           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1781      } else {
1782           char *d = tmpbuf;
1783           const char * const limit = tmpbuf + tmpbuf_size - 8;
1784           /* each *s can expand to 4 chars + "...\0",
1785              i.e. need room for 8 chars */
1786         
1787           const char *s = SvPVX_const(sv);
1788           const char * const end = s + SvCUR(sv);
1789           for ( ; s < end && d < limit; s++ ) {
1790                int ch = *s & 0xFF;
1791                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1792                     *d++ = 'M';
1793                     *d++ = '-';
1794
1795                     /* Map to ASCII "equivalent" of Latin1 */
1796                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1797                }
1798                if (ch == '\n') {
1799                     *d++ = '\\';
1800                     *d++ = 'n';
1801                }
1802                else if (ch == '\r') {
1803                     *d++ = '\\';
1804                     *d++ = 'r';
1805                }
1806                else if (ch == '\f') {
1807                     *d++ = '\\';
1808                     *d++ = 'f';
1809                }
1810                else if (ch == '\\') {
1811                     *d++ = '\\';
1812                     *d++ = '\\';
1813                }
1814                else if (ch == '\0') {
1815                     *d++ = '\\';
1816                     *d++ = '0';
1817                }
1818                else if (isPRINT_LC(ch))
1819                     *d++ = ch;
1820                else {
1821                     *d++ = '^';
1822                     *d++ = toCTRL(ch);
1823                }
1824           }
1825           if (s < end) {
1826                *d++ = '.';
1827                *d++ = '.';
1828                *d++ = '.';
1829           }
1830           *d = '\0';
1831           pv = tmpbuf;
1832     }
1833
1834     return pv;
1835 }
1836
1837 /* Print an "isn't numeric" warning, using a cleaned-up,
1838  * printable version of the offending string
1839  */
1840
1841 STATIC void
1842 S_not_a_number(pTHX_ SV *const sv)
1843 {
1844      char tmpbuf[64];
1845      const char *pv;
1846
1847      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1848
1849      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1850
1851     if (PL_op)
1852         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1853                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1854                     "Argument \"%s\" isn't numeric in %s", pv,
1855                     OP_DESC(PL_op));
1856     else
1857         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1858                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1859                     "Argument \"%s\" isn't numeric", pv);
1860 }
1861
1862 STATIC void
1863 S_not_incrementable(pTHX_ SV *const sv) {
1864      char tmpbuf[64];
1865      const char *pv;
1866
1867      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1868
1869      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1870
1871      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1872                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1873 }
1874
1875 /*
1876 =for apidoc looks_like_number
1877
1878 Test if the content of an SV looks like a number (or is a number).
1879 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1880 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1881 ignored.
1882
1883 =cut
1884 */
1885
1886 I32
1887 Perl_looks_like_number(pTHX_ SV *const sv)
1888 {
1889     const char *sbegin;
1890     STRLEN len;
1891
1892     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1893
1894     if (SvPOK(sv) || SvPOKp(sv)) {
1895         sbegin = SvPV_nomg_const(sv, len);
1896     }
1897     else
1898         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1899     return grok_number(sbegin, len, NULL);
1900 }
1901
1902 STATIC bool
1903 S_glob_2number(pTHX_ GV * const gv)
1904 {
1905     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1906
1907     /* We know that all GVs stringify to something that is not-a-number,
1908         so no need to test that.  */
1909     if (ckWARN(WARN_NUMERIC))
1910     {
1911         SV *const buffer = sv_newmortal();
1912         gv_efullname3(buffer, gv, "*");
1913         not_a_number(buffer);
1914     }
1915     /* We just want something true to return, so that S_sv_2iuv_common
1916         can tail call us and return true.  */
1917     return TRUE;
1918 }
1919
1920 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1921    until proven guilty, assume that things are not that bad... */
1922
1923 /*
1924    NV_PRESERVES_UV:
1925
1926    As 64 bit platforms often have an NV that doesn't preserve all bits of
1927    an IV (an assumption perl has been based on to date) it becomes necessary
1928    to remove the assumption that the NV always carries enough precision to
1929    recreate the IV whenever needed, and that the NV is the canonical form.
1930    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1931    precision as a side effect of conversion (which would lead to insanity
1932    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1933    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1934       where precision was lost, and IV/UV/NV slots that have a valid conversion
1935       which has lost no precision
1936    2) to ensure that if a numeric conversion to one form is requested that
1937       would lose precision, the precise conversion (or differently
1938       imprecise conversion) is also performed and cached, to prevent
1939       requests for different numeric formats on the same SV causing
1940       lossy conversion chains. (lossless conversion chains are perfectly
1941       acceptable (still))
1942
1943
1944    flags are used:
1945    SvIOKp is true if the IV slot contains a valid value
1946    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1947    SvNOKp is true if the NV slot contains a valid value
1948    SvNOK  is true only if the NV value is accurate
1949
1950    so
1951    while converting from PV to NV, check to see if converting that NV to an
1952    IV(or UV) would lose accuracy over a direct conversion from PV to
1953    IV(or UV). If it would, cache both conversions, return NV, but mark
1954    SV as IOK NOKp (ie not NOK).
1955
1956    While converting from PV to IV, check to see if converting that IV to an
1957    NV would lose accuracy over a direct conversion from PV to NV. If it
1958    would, cache both conversions, flag similarly.
1959
1960    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1961    correctly because if IV & NV were set NV *always* overruled.
1962    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1963    changes - now IV and NV together means that the two are interchangeable:
1964    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1965
1966    The benefit of this is that operations such as pp_add know that if
1967    SvIOK is true for both left and right operands, then integer addition
1968    can be used instead of floating point (for cases where the result won't
1969    overflow). Before, floating point was always used, which could lead to
1970    loss of precision compared with integer addition.
1971
1972    * making IV and NV equal status should make maths accurate on 64 bit
1973      platforms
1974    * may speed up maths somewhat if pp_add and friends start to use
1975      integers when possible instead of fp. (Hopefully the overhead in
1976      looking for SvIOK and checking for overflow will not outweigh the
1977      fp to integer speedup)
1978    * will slow down integer operations (callers of SvIV) on "inaccurate"
1979      values, as the change from SvIOK to SvIOKp will cause a call into
1980      sv_2iv each time rather than a macro access direct to the IV slot
1981    * should speed up number->string conversion on integers as IV is
1982      favoured when IV and NV are equally accurate
1983
1984    ####################################################################
1985    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1986    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1987    On the other hand, SvUOK is true iff UV.
1988    ####################################################################
1989
1990    Your mileage will vary depending your CPU's relative fp to integer
1991    performance ratio.
1992 */
1993
1994 #ifndef NV_PRESERVES_UV
1995 #  define IS_NUMBER_UNDERFLOW_IV 1
1996 #  define IS_NUMBER_UNDERFLOW_UV 2
1997 #  define IS_NUMBER_IV_AND_UV    2
1998 #  define IS_NUMBER_OVERFLOW_IV  4
1999 #  define IS_NUMBER_OVERFLOW_UV  5
2000
2001 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2002
2003 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2004 STATIC int
2005 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2006 #  ifdef DEBUGGING
2007                        , I32 numtype
2008 #  endif
2009                        )
2010 {
2011     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2012     PERL_UNUSED_CONTEXT;
2013
2014     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));
2015     if (SvNVX(sv) < (NV)IV_MIN) {
2016         (void)SvIOKp_on(sv);
2017         (void)SvNOK_on(sv);
2018         SvIV_set(sv, IV_MIN);
2019         return IS_NUMBER_UNDERFLOW_IV;
2020     }
2021     if (SvNVX(sv) > (NV)UV_MAX) {
2022         (void)SvIOKp_on(sv);
2023         (void)SvNOK_on(sv);
2024         SvIsUV_on(sv);
2025         SvUV_set(sv, UV_MAX);
2026         return IS_NUMBER_OVERFLOW_UV;
2027     }
2028     (void)SvIOKp_on(sv);
2029     (void)SvNOK_on(sv);
2030     /* Can't use strtol etc to convert this string.  (See truth table in
2031        sv_2iv  */
2032     if (SvNVX(sv) <= (UV)IV_MAX) {
2033         SvIV_set(sv, I_V(SvNVX(sv)));
2034         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2035             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2036         } else {
2037             /* Integer is imprecise. NOK, IOKp */
2038         }
2039         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2040     }
2041     SvIsUV_on(sv);
2042     SvUV_set(sv, U_V(SvNVX(sv)));
2043     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2044         if (SvUVX(sv) == UV_MAX) {
2045             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2046                possibly be preserved by NV. Hence, it must be overflow.
2047                NOK, IOKp */
2048             return IS_NUMBER_OVERFLOW_UV;
2049         }
2050         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2051     } else {
2052         /* Integer is imprecise. NOK, IOKp */
2053     }
2054     return IS_NUMBER_OVERFLOW_IV;
2055 }
2056 #endif /* !NV_PRESERVES_UV*/
2057
2058 STATIC bool
2059 S_sv_2iuv_common(pTHX_ SV *const sv)
2060 {
2061     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2062
2063     if (SvNOKp(sv)) {
2064         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2065          * without also getting a cached IV/UV from it at the same time
2066          * (ie PV->NV conversion should detect loss of accuracy and cache
2067          * IV or UV at same time to avoid this. */
2068         /* IV-over-UV optimisation - choose to cache IV if possible */
2069
2070         if (SvTYPE(sv) == SVt_NV)
2071             sv_upgrade(sv, SVt_PVNV);
2072
2073         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2074         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2075            certainly cast into the IV range at IV_MAX, whereas the correct
2076            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2077            cases go to UV */
2078 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2079         if (Perl_isnan(SvNVX(sv))) {
2080             SvUV_set(sv, 0);
2081             SvIsUV_on(sv);
2082             return FALSE;
2083         }
2084 #endif
2085         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2086             SvIV_set(sv, I_V(SvNVX(sv)));
2087             if (SvNVX(sv) == (NV) SvIVX(sv)
2088 #ifndef NV_PRESERVES_UV
2089                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2090                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2091                 /* Don't flag it as "accurately an integer" if the number
2092                    came from a (by definition imprecise) NV operation, and
2093                    we're outside the range of NV integer precision */
2094 #endif
2095                 ) {
2096                 if (SvNOK(sv))
2097                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2098                 else {
2099                     /* scalar has trailing garbage, eg "42a" */
2100                 }
2101                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2102                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2103                                       PTR2UV(sv),
2104                                       SvNVX(sv),
2105                                       SvIVX(sv)));
2106
2107             } else {
2108                 /* IV not precise.  No need to convert from PV, as NV
2109                    conversion would already have cached IV if it detected
2110                    that PV->IV would be better than PV->NV->IV
2111                    flags already correct - don't set public IOK.  */
2112                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2113                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2114                                       PTR2UV(sv),
2115                                       SvNVX(sv),
2116                                       SvIVX(sv)));
2117             }
2118             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2119                but the cast (NV)IV_MIN rounds to a the value less (more
2120                negative) than IV_MIN which happens to be equal to SvNVX ??
2121                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2122                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2123                (NV)UVX == NVX are both true, but the values differ. :-(
2124                Hopefully for 2s complement IV_MIN is something like
2125                0x8000000000000000 which will be exact. NWC */
2126         }
2127         else {
2128             SvUV_set(sv, U_V(SvNVX(sv)));
2129             if (
2130                 (SvNVX(sv) == (NV) SvUVX(sv))
2131 #ifndef  NV_PRESERVES_UV
2132                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2133                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2134                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2135                 /* Don't flag it as "accurately an integer" if the number
2136                    came from a (by definition imprecise) NV operation, and
2137                    we're outside the range of NV integer precision */
2138 #endif
2139                 && SvNOK(sv)
2140                 )
2141                 SvIOK_on(sv);
2142             SvIsUV_on(sv);
2143             DEBUG_c(PerlIO_printf(Perl_debug_log,
2144                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2145                                   PTR2UV(sv),
2146                                   SvUVX(sv),
2147                                   SvUVX(sv)));
2148         }
2149     }
2150     else if (SvPOKp(sv)) {
2151         UV value;
2152         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2153         /* We want to avoid a possible problem when we cache an IV/ a UV which
2154            may be later translated to an NV, and the resulting NV is not
2155            the same as the direct translation of the initial string
2156            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2157            be careful to ensure that the value with the .456 is around if the
2158            NV value is requested in the future).
2159         
2160            This means that if we cache such an IV/a UV, we need to cache the
2161            NV as well.  Moreover, we trade speed for space, and do not
2162            cache the NV if we are sure it's not needed.
2163          */
2164
2165         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2166         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2167              == IS_NUMBER_IN_UV) {
2168             /* It's definitely an integer, only upgrade to PVIV */
2169             if (SvTYPE(sv) < SVt_PVIV)
2170                 sv_upgrade(sv, SVt_PVIV);
2171             (void)SvIOK_on(sv);
2172         } else if (SvTYPE(sv) < SVt_PVNV)
2173             sv_upgrade(sv, SVt_PVNV);
2174
2175         /* If NVs preserve UVs then we only use the UV value if we know that
2176            we aren't going to call atof() below. If NVs don't preserve UVs
2177            then the value returned may have more precision than atof() will
2178            return, even though value isn't perfectly accurate.  */
2179         if ((numtype & (IS_NUMBER_IN_UV
2180 #ifdef NV_PRESERVES_UV
2181                         | IS_NUMBER_NOT_INT
2182 #endif
2183             )) == IS_NUMBER_IN_UV) {
2184             /* This won't turn off the public IOK flag if it was set above  */
2185             (void)SvIOKp_on(sv);
2186
2187             if (!(numtype & IS_NUMBER_NEG)) {
2188                 /* positive */;
2189                 if (value <= (UV)IV_MAX) {
2190                     SvIV_set(sv, (IV)value);
2191                 } else {
2192                     /* it didn't overflow, and it was positive. */
2193                     SvUV_set(sv, value);
2194                     SvIsUV_on(sv);
2195                 }
2196             } else {
2197                 /* 2s complement assumption  */
2198                 if (value <= (UV)IV_MIN) {
2199                     SvIV_set(sv, -(IV)value);
2200                 } else {
2201                     /* Too negative for an IV.  This is a double upgrade, but
2202                        I'm assuming it will be rare.  */
2203                     if (SvTYPE(sv) < SVt_PVNV)
2204                         sv_upgrade(sv, SVt_PVNV);
2205                     SvNOK_on(sv);
2206                     SvIOK_off(sv);
2207                     SvIOKp_on(sv);
2208                     SvNV_set(sv, -(NV)value);
2209                     SvIV_set(sv, IV_MIN);
2210                 }
2211             }
2212         }
2213         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2214            will be in the previous block to set the IV slot, and the next
2215            block to set the NV slot.  So no else here.  */
2216         
2217         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2218             != IS_NUMBER_IN_UV) {
2219             /* It wasn't an (integer that doesn't overflow the UV). */
2220             SvNV_set(sv, Atof(SvPVX_const(sv)));
2221
2222             if (! numtype && ckWARN(WARN_NUMERIC))
2223                 not_a_number(sv);
2224
2225             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2226                                   PTR2UV(sv), SvNVX(sv)));
2227
2228 #ifdef NV_PRESERVES_UV
2229             (void)SvIOKp_on(sv);
2230             (void)SvNOK_on(sv);
2231 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2232             if (Perl_isnan(SvNVX(sv))) {
2233                 SvUV_set(sv, 0);
2234                 SvIsUV_on(sv);
2235                 return FALSE;
2236             }
2237 #endif
2238             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2239                 SvIV_set(sv, I_V(SvNVX(sv)));
2240                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2241                     SvIOK_on(sv);
2242                 } else {
2243                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2244                 }
2245                 /* UV will not work better than IV */
2246             } else {
2247                 if (SvNVX(sv) > (NV)UV_MAX) {
2248                     SvIsUV_on(sv);
2249                     /* Integer is inaccurate. NOK, IOKp, is UV */
2250                     SvUV_set(sv, UV_MAX);
2251                 } else {
2252                     SvUV_set(sv, U_V(SvNVX(sv)));
2253                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2254                        NV preservse UV so can do correct comparison.  */
2255                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2256                         SvIOK_on(sv);
2257                     } else {
2258                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2259                     }
2260                 }
2261                 SvIsUV_on(sv);
2262             }
2263 #else /* NV_PRESERVES_UV */
2264             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2265                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2266                 /* The IV/UV slot will have been set from value returned by
2267                    grok_number above.  The NV slot has just been set using
2268                    Atof.  */
2269                 SvNOK_on(sv);
2270                 assert (SvIOKp(sv));
2271             } else {
2272                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2273                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2274                     /* Small enough to preserve all bits. */
2275                     (void)SvIOKp_on(sv);
2276                     SvNOK_on(sv);
2277                     SvIV_set(sv, I_V(SvNVX(sv)));
2278                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2279                         SvIOK_on(sv);
2280                     /* Assumption: first non-preserved integer is < IV_MAX,
2281                        this NV is in the preserved range, therefore: */
2282                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2283                           < (UV)IV_MAX)) {
2284                         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);
2285                     }
2286                 } else {
2287                     /* IN_UV NOT_INT
2288                          0      0       already failed to read UV.
2289                          0      1       already failed to read UV.
2290                          1      0       you won't get here in this case. IV/UV
2291                                         slot set, public IOK, Atof() unneeded.
2292                          1      1       already read UV.
2293                        so there's no point in sv_2iuv_non_preserve() attempting
2294                        to use atol, strtol, strtoul etc.  */
2295 #  ifdef DEBUGGING
2296                     sv_2iuv_non_preserve (sv, numtype);
2297 #  else
2298                     sv_2iuv_non_preserve (sv);
2299 #  endif
2300                 }
2301             }
2302 #endif /* NV_PRESERVES_UV */
2303         /* It might be more code efficient to go through the entire logic above
2304            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2305            gets complex and potentially buggy, so more programmer efficient
2306            to do it this way, by turning off the public flags:  */
2307         if (!numtype)
2308             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2309         }
2310     }
2311     else  {
2312         if (isGV_with_GP(sv))
2313             return glob_2number(MUTABLE_GV(sv));
2314
2315         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2316                 report_uninit(sv);
2317         if (SvTYPE(sv) < SVt_IV)
2318             /* Typically the caller expects that sv_any is not NULL now.  */
2319             sv_upgrade(sv, SVt_IV);
2320         /* Return 0 from the caller.  */
2321         return TRUE;
2322     }
2323     return FALSE;
2324 }
2325
2326 /*
2327 =for apidoc sv_2iv_flags
2328
2329 Return the integer value of an SV, doing any necessary string
2330 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2331 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2332
2333 =cut
2334 */
2335
2336 IV
2337 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2338 {
2339     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2340
2341     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2342          && SvTYPE(sv) != SVt_PVFM);
2343
2344     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2345         mg_get(sv);
2346
2347     if (SvROK(sv)) {
2348         if (SvAMAGIC(sv)) {
2349             SV * tmpstr;
2350             if (flags & SV_SKIP_OVERLOAD)
2351                 return 0;
2352             tmpstr = AMG_CALLunary(sv, numer_amg);
2353             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2354                 return SvIV(tmpstr);
2355             }
2356         }
2357         return PTR2IV(SvRV(sv));
2358     }
2359
2360     if (SvVALID(sv) || isREGEXP(sv)) {
2361         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2362            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2363            In practice they are extremely unlikely to actually get anywhere
2364            accessible by user Perl code - the only way that I'm aware of is when
2365            a constant subroutine which is used as the second argument to index.
2366
2367            Regexps have no SvIVX and SvNVX fields.
2368         */
2369         assert(isREGEXP(sv) || SvPOKp(sv));
2370         {
2371             UV value;
2372             const char * const ptr =
2373                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2374             const int numtype
2375                 = grok_number(ptr, SvCUR(sv), &value);
2376
2377             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2378                 == IS_NUMBER_IN_UV) {
2379                 /* It's definitely an integer */
2380                 if (numtype & IS_NUMBER_NEG) {
2381                     if (value < (UV)IV_MIN)
2382                         return -(IV)value;
2383                 } else {
2384                     if (value < (UV)IV_MAX)
2385                         return (IV)value;
2386                 }
2387             }
2388
2389             /* Quite wrong but no good choices. */
2390             if ((numtype & IS_NUMBER_INFINITY)) {
2391                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2392             } else if ((numtype & IS_NUMBER_NAN)) {
2393                 return 0; /* So wrong. */
2394             }
2395
2396             if (!numtype) {
2397                 if (ckWARN(WARN_NUMERIC))
2398                     not_a_number(sv);
2399             }
2400             return I_V(Atof(ptr));
2401         }
2402     }
2403
2404     if (SvTHINKFIRST(sv)) {
2405 #ifdef PERL_OLD_COPY_ON_WRITE
2406         if (SvIsCOW(sv)) {
2407             sv_force_normal_flags(sv, 0);
2408         }
2409 #endif
2410         if (SvREADONLY(sv) && !SvOK(sv)) {
2411             if (ckWARN(WARN_UNINITIALIZED))
2412                 report_uninit(sv);
2413             return 0;
2414         }
2415     }
2416
2417     if (!SvIOKp(sv)) {
2418         if (S_sv_2iuv_common(aTHX_ sv))
2419             return 0;
2420     }
2421
2422     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2423         PTR2UV(sv),SvIVX(sv)));
2424     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2425 }
2426
2427 /*
2428 =for apidoc sv_2uv_flags
2429
2430 Return the unsigned integer value of an SV, doing any necessary string
2431 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2432 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2433
2434 =cut
2435 */
2436
2437 UV
2438 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2439 {
2440     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2441
2442     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2443         mg_get(sv);
2444
2445     if (SvROK(sv)) {
2446         if (SvAMAGIC(sv)) {
2447             SV *tmpstr;
2448             if (flags & SV_SKIP_OVERLOAD)
2449                 return 0;
2450             tmpstr = AMG_CALLunary(sv, numer_amg);
2451             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2452                 return SvUV(tmpstr);
2453             }
2454         }
2455         return PTR2UV(SvRV(sv));
2456     }
2457
2458     if (SvVALID(sv) || isREGEXP(sv)) {
2459         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2460            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2461            Regexps have no SvIVX and SvNVX fields. */
2462         assert(isREGEXP(sv) || SvPOKp(sv));
2463         {
2464             UV value;
2465             const char * const ptr =
2466                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2467             const int numtype
2468                 = grok_number(ptr, SvCUR(sv), &value);
2469
2470             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2471                 == IS_NUMBER_IN_UV) {
2472                 /* It's definitely an integer */
2473                 if (!(numtype & IS_NUMBER_NEG))
2474                     return value;
2475             }
2476
2477             /* Quite wrong but no good choices. */
2478             if ((numtype & IS_NUMBER_INFINITY)) {
2479                 return UV_MAX; /* So wrong. */
2480             } else if ((numtype & IS_NUMBER_NAN)) {
2481                 return 0; /* So wrong. */
2482             }
2483
2484             if (!numtype) {
2485                 if (ckWARN(WARN_NUMERIC))
2486                     not_a_number(sv);
2487             }
2488             return U_V(Atof(ptr));
2489         }
2490     }
2491
2492     if (SvTHINKFIRST(sv)) {
2493 #ifdef PERL_OLD_COPY_ON_WRITE
2494         if (SvIsCOW(sv)) {
2495             sv_force_normal_flags(sv, 0);
2496         }
2497 #endif
2498         if (SvREADONLY(sv) && !SvOK(sv)) {
2499             if (ckWARN(WARN_UNINITIALIZED))
2500                 report_uninit(sv);
2501             return 0;
2502         }
2503     }
2504
2505     if (!SvIOKp(sv)) {
2506         if (S_sv_2iuv_common(aTHX_ sv))
2507             return 0;
2508     }
2509
2510     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2511                           PTR2UV(sv),SvUVX(sv)));
2512     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2513 }
2514
2515 /*
2516 =for apidoc sv_2nv_flags
2517
2518 Return the num value of an SV, doing any necessary string or integer
2519 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2520 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2521
2522 =cut
2523 */
2524
2525 NV
2526 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2527 {
2528     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2529
2530     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2531          && SvTYPE(sv) != SVt_PVFM);
2532     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2533         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2534            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2535            Regexps have no SvIVX and SvNVX fields.  */
2536         const char *ptr;
2537         if (flags & SV_GMAGIC)
2538             mg_get(sv);
2539         if (SvNOKp(sv))
2540             return SvNVX(sv);
2541         if (SvPOKp(sv) && !SvIOKp(sv)) {
2542             ptr = SvPVX_const(sv);
2543           grokpv:
2544             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2545                 !grok_number(ptr, SvCUR(sv), NULL))
2546                 not_a_number(sv);
2547             return Atof(ptr);
2548         }
2549         if (SvIOKp(sv)) {
2550             if (SvIsUV(sv))
2551                 return (NV)SvUVX(sv);
2552             else
2553                 return (NV)SvIVX(sv);
2554         }
2555         if (SvROK(sv)) {
2556             goto return_rok;
2557         }
2558         if (isREGEXP(sv)) {
2559             ptr = RX_WRAPPED((REGEXP *)sv);
2560             goto grokpv;
2561         }
2562         assert(SvTYPE(sv) >= SVt_PVMG);
2563         /* This falls through to the report_uninit near the end of the
2564            function. */
2565     } else if (SvTHINKFIRST(sv)) {
2566         if (SvROK(sv)) {
2567         return_rok:
2568             if (SvAMAGIC(sv)) {
2569                 SV *tmpstr;
2570                 if (flags & SV_SKIP_OVERLOAD)
2571                     return 0;
2572                 tmpstr = AMG_CALLunary(sv, numer_amg);
2573                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2574                     return SvNV(tmpstr);
2575                 }
2576             }
2577             return PTR2NV(SvRV(sv));
2578         }
2579 #ifdef PERL_OLD_COPY_ON_WRITE
2580         if (SvIsCOW(sv)) {
2581             sv_force_normal_flags(sv, 0);
2582         }
2583 #endif
2584         if (SvREADONLY(sv) && !SvOK(sv)) {
2585             if (ckWARN(WARN_UNINITIALIZED))
2586                 report_uninit(sv);
2587             return 0.0;
2588         }
2589     }
2590     if (SvTYPE(sv) < SVt_NV) {
2591         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2592         sv_upgrade(sv, SVt_NV);
2593         DEBUG_c({
2594             STORE_NUMERIC_LOCAL_SET_STANDARD();
2595             PerlIO_printf(Perl_debug_log,
2596                           "0x%"UVxf" num(%" NVgf ")\n",
2597                           PTR2UV(sv), SvNVX(sv));
2598             RESTORE_NUMERIC_LOCAL();
2599         });
2600     }
2601     else if (SvTYPE(sv) < SVt_PVNV)
2602         sv_upgrade(sv, SVt_PVNV);
2603     if (SvNOKp(sv)) {
2604         return SvNVX(sv);
2605     }
2606     if (SvIOKp(sv)) {
2607         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2608 #ifdef NV_PRESERVES_UV
2609         if (SvIOK(sv))
2610             SvNOK_on(sv);
2611         else
2612             SvNOKp_on(sv);
2613 #else
2614         /* Only set the public NV OK flag if this NV preserves the IV  */
2615         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2616         if (SvIOK(sv) &&
2617             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2618                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2619             SvNOK_on(sv);
2620         else
2621             SvNOKp_on(sv);
2622 #endif
2623     }
2624     else if (SvPOKp(sv)) {
2625         UV value;
2626         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2627         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2628             not_a_number(sv);
2629 #ifdef NV_PRESERVES_UV
2630         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2631             == IS_NUMBER_IN_UV) {
2632             /* It's definitely an integer */
2633             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2634         } else {
2635             if ((numtype & IS_NUMBER_INFINITY)) {
2636                 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2637             } else if ((numtype & IS_NUMBER_NAN)) {
2638                 SvNV_set(sv, NV_NAN);
2639             } else
2640                 SvNV_set(sv, Atof(SvPVX_const(sv)));
2641         }
2642         if (numtype)
2643             SvNOK_on(sv);
2644         else
2645             SvNOKp_on(sv);
2646 #else
2647         SvNV_set(sv, Atof(SvPVX_const(sv)));
2648         /* Only set the public NV OK flag if this NV preserves the value in
2649            the PV at least as well as an IV/UV would.
2650            Not sure how to do this 100% reliably. */
2651         /* if that shift count is out of range then Configure's test is
2652            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2653            UV_BITS */
2654         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2655             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2656             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2657         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2658             /* Can't use strtol etc to convert this string, so don't try.
2659                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2660             SvNOK_on(sv);
2661         } else {
2662             /* value has been set.  It may not be precise.  */
2663             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2664                 /* 2s complement assumption for (UV)IV_MIN  */
2665                 SvNOK_on(sv); /* Integer is too negative.  */
2666             } else {
2667                 SvNOKp_on(sv);
2668                 SvIOKp_on(sv);
2669
2670                 if (numtype & IS_NUMBER_NEG) {
2671                     SvIV_set(sv, -(IV)value);
2672                 } else if (value <= (UV)IV_MAX) {
2673                     SvIV_set(sv, (IV)value);
2674                 } else {
2675                     SvUV_set(sv, value);
2676                     SvIsUV_on(sv);
2677                 }
2678
2679                 if (numtype & IS_NUMBER_NOT_INT) {
2680                     /* I believe that even if the original PV had decimals,
2681                        they are lost beyond the limit of the FP precision.
2682                        However, neither is canonical, so both only get p
2683                        flags.  NWC, 2000/11/25 */
2684                     /* Both already have p flags, so do nothing */
2685                 } else {
2686                     const NV nv = SvNVX(sv);
2687                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2688                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2689                         if (SvIVX(sv) == I_V(nv)) {
2690                             SvNOK_on(sv);
2691                         } else {
2692                             /* It had no "." so it must be integer.  */
2693                         }
2694                         SvIOK_on(sv);
2695                     } else {
2696                         /* between IV_MAX and NV(UV_MAX).
2697                            Could be slightly > UV_MAX */
2698
2699                         if (numtype & IS_NUMBER_NOT_INT) {
2700                             /* UV and NV both imprecise.  */
2701                         } else {
2702                             const UV nv_as_uv = U_V(nv);
2703
2704                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2705                                 SvNOK_on(sv);
2706                             }
2707                             SvIOK_on(sv);
2708                         }
2709                     }
2710                 }
2711             }
2712         }
2713         /* It might be more code efficient to go through the entire logic above
2714            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2715            gets complex and potentially buggy, so more programmer efficient
2716            to do it this way, by turning off the public flags:  */
2717         if (!numtype)
2718             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2719 #endif /* NV_PRESERVES_UV */
2720     }
2721     else  {
2722         if (isGV_with_GP(sv)) {
2723             glob_2number(MUTABLE_GV(sv));
2724             return 0.0;
2725         }
2726
2727         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2728             report_uninit(sv);
2729         assert (SvTYPE(sv) >= SVt_NV);
2730         /* Typically the caller expects that sv_any is not NULL now.  */
2731         /* XXX Ilya implies that this is a bug in callers that assume this
2732            and ideally should be fixed.  */
2733         return 0.0;
2734     }
2735     DEBUG_c({
2736         STORE_NUMERIC_LOCAL_SET_STANDARD();
2737         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2738                       PTR2UV(sv), SvNVX(sv));
2739         RESTORE_NUMERIC_LOCAL();
2740     });
2741     return SvNVX(sv);
2742 }
2743
2744 /*
2745 =for apidoc sv_2num
2746
2747 Return an SV with the numeric value of the source SV, doing any necessary
2748 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2749 access this function.
2750
2751 =cut
2752 */
2753
2754 SV *
2755 Perl_sv_2num(pTHX_ SV *const sv)
2756 {
2757     PERL_ARGS_ASSERT_SV_2NUM;
2758
2759     if (!SvROK(sv))
2760         return sv;
2761     if (SvAMAGIC(sv)) {
2762         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2763         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2764         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2765             return sv_2num(tmpsv);
2766     }
2767     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2768 }
2769
2770 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2771  * UV as a string towards the end of buf, and return pointers to start and
2772  * end of it.
2773  *
2774  * We assume that buf is at least TYPE_CHARS(UV) long.
2775  */
2776
2777 static char *
2778 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2779 {
2780     char *ptr = buf + TYPE_CHARS(UV);
2781     char * const ebuf = ptr;
2782     int sign;
2783
2784     PERL_ARGS_ASSERT_UIV_2BUF;
2785
2786     if (is_uv)
2787         sign = 0;
2788     else if (iv >= 0) {
2789         uv = iv;
2790         sign = 0;
2791     } else {
2792         uv = -iv;
2793         sign = 1;
2794     }
2795     do {
2796         *--ptr = '0' + (char)(uv % 10);
2797     } while (uv /= 10);
2798     if (sign)
2799         *--ptr = '-';
2800     *peob = ebuf;
2801     return ptr;
2802 }
2803
2804 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2805  * infinity or a not-a-number, writes the appropriate strings to the
2806  * buffer, including a zero byte.  On success returns the written length,
2807  * excluding the zero byte, on failure (not an infinity, not a nan, or the
2808  * maxlen too small) returns zero. */
2809 STATIC size_t
2810 S_infnan_2pv(NV nv, char* buffer, size_t maxlen) {
2811     /* XXX this should be an assert */
2812     if (maxlen < 4) /* "Inf\0", "NaN\0" */
2813         return 0;
2814     else {
2815         char* s = buffer;
2816         /* isnan must be first due to NAN_COMPARE_BROKEN builds, since NAN might
2817            use the broken for NAN >/< ops in the inf check, and then the inf
2818            check returns true for NAN on NAN_COMPARE_BROKEN compilers */
2819         if (Perl_isnan(nv)) {
2820             *s++ = 'N';
2821             *s++ = 'a';
2822             *s++ = 'N';
2823             /* XXX optionally output the payload mantissa bits as
2824              * "(unsigned)" (to match the nan("...") C99 function,
2825              * or maybe as "(0xhhh...)"  would make more sense...
2826              * provide a format string so that the user can decide?
2827              * NOTE: would affect the maxlen and assert() logic.*/
2828         }
2829         else if (Perl_isinf(nv)) {
2830             if (nv < 0) {
2831                 if (maxlen < 5) /* "-Inf\0"  */
2832                     return 0;
2833                 *s++ = '-';
2834             }
2835             *s++ = 'I';
2836             *s++ = 'n';
2837             *s++ = 'f';
2838         }
2839
2840         else
2841             return 0;
2842         assert((s == buffer + 3) || (s == buffer + 4));
2843         *s++ = 0;
2844         return s - buffer - 1; /* -1: excluding the zero byte */
2845     }
2846 }
2847
2848 /*
2849 =for apidoc sv_2pv_flags
2850
2851 Returns a pointer to the string value of an SV, and sets *lp to its length.
2852 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2853 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2854 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2855
2856 =cut
2857 */
2858
2859 char *
2860 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2861 {
2862     char *s;
2863
2864     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2865
2866     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2867          && SvTYPE(sv) != SVt_PVFM);
2868     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2869         mg_get(sv);
2870     if (SvROK(sv)) {
2871         if (SvAMAGIC(sv)) {
2872             SV *tmpstr;
2873             if (flags & SV_SKIP_OVERLOAD)
2874                 return NULL;
2875             tmpstr = AMG_CALLunary(sv, string_amg);
2876             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2877             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2878                 /* Unwrap this:  */
2879                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2880                  */
2881
2882                 char *pv;
2883                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2884                     if (flags & SV_CONST_RETURN) {
2885                         pv = (char *) SvPVX_const(tmpstr);
2886                     } else {
2887                         pv = (flags & SV_MUTABLE_RETURN)
2888                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2889                     }
2890                     if (lp)
2891                         *lp = SvCUR(tmpstr);
2892                 } else {
2893                     pv = sv_2pv_flags(tmpstr, lp, flags);
2894                 }
2895                 if (SvUTF8(tmpstr))
2896                     SvUTF8_on(sv);
2897                 else
2898                     SvUTF8_off(sv);
2899                 return pv;
2900             }
2901         }
2902         {
2903             STRLEN len;
2904             char *retval;
2905             char *buffer;
2906             SV *const referent = SvRV(sv);
2907
2908             if (!referent) {
2909                 len = 7;
2910                 retval = buffer = savepvn("NULLREF", len);
2911             } else if (SvTYPE(referent) == SVt_REGEXP &&
2912                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2913                         amagic_is_enabled(string_amg))) {
2914                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2915
2916                 assert(re);
2917                         
2918                 /* If the regex is UTF-8 we want the containing scalar to
2919                    have an UTF-8 flag too */
2920                 if (RX_UTF8(re))
2921                     SvUTF8_on(sv);
2922                 else
2923                     SvUTF8_off(sv);     
2924
2925                 if (lp)
2926                     *lp = RX_WRAPLEN(re);
2927  
2928                 return RX_WRAPPED(re);
2929             } else {
2930                 const char *const typestr = sv_reftype(referent, 0);
2931                 const STRLEN typelen = strlen(typestr);
2932                 UV addr = PTR2UV(referent);
2933                 const char *stashname = NULL;
2934                 STRLEN stashnamelen = 0; /* hush, gcc */
2935                 const char *buffer_end;
2936
2937                 if (SvOBJECT(referent)) {
2938                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2939
2940                     if (name) {
2941                         stashname = HEK_KEY(name);
2942                         stashnamelen = HEK_LEN(name);
2943
2944                         if (HEK_UTF8(name)) {
2945                             SvUTF8_on(sv);
2946                         } else {
2947                             SvUTF8_off(sv);
2948                         }
2949                     } else {
2950                         stashname = "__ANON__";
2951                         stashnamelen = 8;
2952                     }
2953                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2954                         + 2 * sizeof(UV) + 2 /* )\0 */;
2955                 } else {
2956                     len = typelen + 3 /* (0x */
2957                         + 2 * sizeof(UV) + 2 /* )\0 */;
2958                 }
2959
2960                 Newx(buffer, len, char);
2961                 buffer_end = retval = buffer + len;
2962
2963                 /* Working backwards  */
2964                 *--retval = '\0';
2965                 *--retval = ')';
2966                 do {
2967                     *--retval = PL_hexdigit[addr & 15];
2968                 } while (addr >>= 4);
2969                 *--retval = 'x';
2970                 *--retval = '0';
2971                 *--retval = '(';
2972
2973                 retval -= typelen;
2974                 memcpy(retval, typestr, typelen);
2975
2976                 if (stashname) {
2977                     *--retval = '=';
2978                     retval -= stashnamelen;
2979                     memcpy(retval, stashname, stashnamelen);
2980                 }
2981                 /* retval may not necessarily have reached the start of the
2982                    buffer here.  */
2983                 assert (retval >= buffer);
2984
2985                 len = buffer_end - retval - 1; /* -1 for that \0  */
2986             }
2987             if (lp)
2988                 *lp = len;
2989             SAVEFREEPV(buffer);
2990             return retval;
2991         }
2992     }
2993
2994     if (SvPOKp(sv)) {
2995         if (lp)
2996             *lp = SvCUR(sv);
2997         if (flags & SV_MUTABLE_RETURN)
2998             return SvPVX_mutable(sv);
2999         if (flags & SV_CONST_RETURN)
3000             return (char *)SvPVX_const(sv);
3001         return SvPVX(sv);
3002     }
3003
3004     if (SvIOK(sv)) {
3005         /* I'm assuming that if both IV and NV are equally valid then
3006            converting the IV is going to be more efficient */
3007         const U32 isUIOK = SvIsUV(sv);
3008         char buf[TYPE_CHARS(UV)];
3009         char *ebuf, *ptr;
3010         STRLEN len;
3011
3012         if (SvTYPE(sv) < SVt_PVIV)
3013             sv_upgrade(sv, SVt_PVIV);
3014         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3015         len = ebuf - ptr;
3016         /* inlined from sv_setpvn */
3017         s = SvGROW_mutable(sv, len + 1);
3018         Move(ptr, s, len, char);
3019         s += len;
3020         *s = '\0';
3021         SvPOK_on(sv);
3022     }
3023     else if (SvNOK(sv)) {
3024         if (SvTYPE(sv) < SVt_PVNV)
3025             sv_upgrade(sv, SVt_PVNV);
3026         if (SvNVX(sv) == 0.0
3027 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3028             && !Perl_isnan(SvNVX(sv))
3029 #endif
3030         ) {
3031             s = SvGROW_mutable(sv, 2);
3032             *s++ = '0';
3033             *s = '\0';
3034         } else {
3035             /* The +20 is pure guesswork.  Configure test needed. --jhi */
3036             STRLEN size = NV_DIG + 20;
3037             STRLEN len;
3038             s = SvGROW_mutable(sv, size);
3039
3040             len = S_infnan_2pv(SvNVX(sv), s, size);
3041             if (len > 0)
3042                 s += len;
3043             else {
3044                 dSAVE_ERRNO;
3045                 /* some Xenix systems wipe out errno here */
3046
3047 #ifndef USE_LOCALE_NUMERIC
3048                 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3049                 SvPOK_on(sv);
3050 #else
3051                 {
3052                     DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3053                     PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3054
3055                     /* If the radix character is UTF-8, and actually is in the
3056                      * output, turn on the UTF-8 flag for the scalar */
3057                     if (PL_numeric_local
3058                         && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
3059                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3060                         {
3061                             SvUTF8_on(sv);
3062                         }
3063                     RESTORE_LC_NUMERIC();
3064                 }
3065
3066                 /* We don't call SvPOK_on(), because it may come to
3067                  * pass that the locale changes so that the
3068                  * stringification we just did is no longer correct.  We
3069                  * will have to re-stringify every time it is needed */
3070 #endif
3071                 RESTORE_ERRNO;
3072             }
3073             while (*s) s++;
3074         }
3075     }
3076     else if (isGV_with_GP(sv)) {
3077         GV *const gv = MUTABLE_GV(sv);
3078         SV *const buffer = sv_newmortal();
3079
3080         gv_efullname3(buffer, gv, "*");
3081
3082         assert(SvPOK(buffer));
3083         if (SvUTF8(buffer))
3084             SvUTF8_on(sv);
3085         if (lp)
3086             *lp = SvCUR(buffer);
3087         return SvPVX(buffer);
3088     }
3089     else if (isREGEXP(sv)) {
3090         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3091         return RX_WRAPPED((REGEXP *)sv);
3092     }
3093     else {
3094         if (lp)
3095             *lp = 0;
3096         if (flags & SV_UNDEF_RETURNS_NULL)
3097             return NULL;
3098         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3099             report_uninit(sv);
3100         /* Typically the caller expects that sv_any is not NULL now.  */
3101         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3102             sv_upgrade(sv, SVt_PV);
3103         return (char *)"";
3104     }
3105
3106     {
3107         const STRLEN len = s - SvPVX_const(sv);
3108         if (lp) 
3109             *lp = len;
3110         SvCUR_set(sv, len);
3111     }
3112     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3113                           PTR2UV(sv),SvPVX_const(sv)));
3114     if (flags & SV_CONST_RETURN)
3115         return (char *)SvPVX_const(sv);
3116     if (flags & SV_MUTABLE_RETURN)
3117         return SvPVX_mutable(sv);
3118     return SvPVX(sv);
3119 }
3120
3121 /*
3122 =for apidoc sv_copypv
3123
3124 Copies a stringified representation of the source SV into the
3125 destination SV.  Automatically performs any necessary mg_get and
3126 coercion of numeric values into strings.  Guaranteed to preserve
3127 UTF8 flag even from overloaded objects.  Similar in nature to
3128 sv_2pv[_flags] but operates directly on an SV instead of just the
3129 string.  Mostly uses sv_2pv_flags to do its work, except when that
3130 would lose the UTF-8'ness of the PV.
3131
3132 =for apidoc sv_copypv_nomg
3133
3134 Like sv_copypv, but doesn't invoke get magic first.
3135
3136 =for apidoc sv_copypv_flags
3137
3138 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3139 include SV_GMAGIC.
3140
3141 =cut
3142 */
3143
3144 void
3145 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3146 {
3147     PERL_ARGS_ASSERT_SV_COPYPV;
3148
3149     sv_copypv_flags(dsv, ssv, 0);
3150 }
3151
3152 void
3153 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3154 {
3155     STRLEN len;
3156     const char *s;
3157
3158     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3159
3160     s = SvPV_flags_const(ssv,len,flags & SV_GMAGIC);
3161     sv_setpvn(dsv,s,len);
3162     if (SvUTF8(ssv))
3163         SvUTF8_on(dsv);
3164     else
3165         SvUTF8_off(dsv);
3166 }
3167
3168 /*
3169 =for apidoc sv_2pvbyte
3170
3171 Return a pointer to the byte-encoded representation of the SV, and set *lp
3172 to its length.  May cause the SV to be downgraded from UTF-8 as a
3173 side-effect.
3174
3175 Usually accessed via the C<SvPVbyte> macro.
3176
3177 =cut
3178 */
3179
3180 char *
3181 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3182 {
3183     PERL_ARGS_ASSERT_SV_2PVBYTE;
3184
3185     SvGETMAGIC(sv);
3186     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3187      || isGV_with_GP(sv) || SvROK(sv)) {
3188         SV *sv2 = sv_newmortal();
3189         sv_copypv_nomg(sv2,sv);
3190         sv = sv2;
3191     }
3192     sv_utf8_downgrade(sv,0);
3193     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3194 }
3195
3196 /*
3197 =for apidoc sv_2pvutf8
3198
3199 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3200 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3201
3202 Usually accessed via the C<SvPVutf8> macro.
3203
3204 =cut
3205 */
3206
3207 char *
3208 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3209 {
3210     PERL_ARGS_ASSERT_SV_2PVUTF8;
3211
3212     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3213      || isGV_with_GP(sv) || SvROK(sv))
3214         sv = sv_mortalcopy(sv);
3215     else
3216         SvGETMAGIC(sv);
3217     sv_utf8_upgrade_nomg(sv);
3218     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3219 }
3220
3221
3222 /*
3223 =for apidoc sv_2bool
3224
3225 This macro is only used by sv_true() or its macro equivalent, and only if
3226 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3227 It calls sv_2bool_flags with the SV_GMAGIC flag.
3228
3229 =for apidoc sv_2bool_flags
3230
3231 This function is only used by sv_true() and friends,  and only if
3232 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3233 contain SV_GMAGIC, then it does an mg_get() first.
3234
3235
3236 =cut
3237 */
3238
3239 bool
3240 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3241 {
3242     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3243
3244     restart:
3245     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3246
3247     if (!SvOK(sv))
3248         return 0;
3249     if (SvROK(sv)) {
3250         if (SvAMAGIC(sv)) {
3251             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3252             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3253                 bool svb;
3254                 sv = tmpsv;
3255                 if(SvGMAGICAL(sv)) {
3256                     flags = SV_GMAGIC;
3257                     goto restart; /* call sv_2bool */
3258                 }
3259                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3260                 else if(!SvOK(sv)) {
3261                     svb = 0;
3262                 }
3263                 else if(SvPOK(sv)) {
3264                     svb = SvPVXtrue(sv);
3265                 }
3266                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3267                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3268                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3269                 }
3270                 else {
3271                     flags = 0;
3272                     goto restart; /* call sv_2bool_nomg */
3273                 }
3274                 return cBOOL(svb);
3275             }
3276         }
3277         return SvRV(sv) != 0;
3278     }
3279     if (isREGEXP(sv))
3280         return
3281           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3282     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3283 }
3284
3285 /*
3286 =for apidoc sv_utf8_upgrade
3287
3288 Converts the PV of an SV to its UTF-8-encoded form.
3289 Forces the SV to string form if it is not already.
3290 Will C<mg_get> on C<sv> if appropriate.
3291 Always sets the SvUTF8 flag to avoid future validity checks even
3292 if the whole string is the same in UTF-8 as not.
3293 Returns the number of bytes in the converted string
3294
3295 This is not a general purpose byte encoding to Unicode interface:
3296 use the Encode extension for that.
3297
3298 =for apidoc sv_utf8_upgrade_nomg
3299
3300 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3301
3302 =for apidoc sv_utf8_upgrade_flags
3303
3304 Converts the PV of an SV to its UTF-8-encoded form.
3305 Forces the SV to string form if it is not already.
3306 Always sets the SvUTF8 flag to avoid future validity checks even
3307 if all the bytes are invariant in UTF-8.
3308 If C<flags> has C<SV_GMAGIC> bit set,
3309 will C<mg_get> on C<sv> if appropriate, else not.
3310
3311 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3312 will expand when converted to UTF-8, and skips the extra work of checking for
3313 that.  Typically this flag is used by a routine that has already parsed the
3314 string and found such characters, and passes this information on so that the
3315 work doesn't have to be repeated.
3316
3317 Returns the number of bytes in the converted string.
3318
3319 This is not a general purpose byte encoding to Unicode interface:
3320 use the Encode extension for that.
3321
3322 =for apidoc sv_utf8_upgrade_flags_grow
3323
3324 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3325 the number of unused bytes the string of 'sv' is guaranteed to have free after
3326 it upon return.  This allows the caller to reserve extra space that it intends
3327 to fill, to avoid extra grows.
3328
3329 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3330 are implemented in terms of this function.
3331
3332 Returns the number of bytes in the converted string (not including the spares).
3333
3334 =cut
3335
3336 (One might think that the calling routine could pass in the position of the
3337 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3338 have to be found again.  But that is not the case, because typically when the
3339 caller is likely to use this flag, it won't be calling this routine unless it
3340 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3341 and just use bytes.  But some things that do fit into a byte are variants in
3342 utf8, and the caller may not have been keeping track of these.)
3343
3344 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3345 C<NUL> isn't guaranteed due to having other routines do the work in some input
3346 cases, or if the input is already flagged as being in utf8.
3347
3348 The speed of this could perhaps be improved for many cases if someone wanted to
3349 write a fast function that counts the number of variant characters in a string,
3350 especially if it could return the position of the first one.
3351
3352 */
3353
3354 STRLEN
3355 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3356 {
3357     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3358
3359     if (sv == &PL_sv_undef)
3360         return 0;
3361     if (!SvPOK_nog(sv)) {
3362         STRLEN len = 0;
3363         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3364             (void) sv_2pv_flags(sv,&len, flags);
3365             if (SvUTF8(sv)) {
3366                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3367                 return len;
3368             }
3369         } else {
3370             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3371         }
3372     }
3373
3374     if (SvUTF8(sv)) {
3375         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3376         return SvCUR(sv);
3377     }
3378
3379     if (SvIsCOW(sv)) {
3380         S_sv_uncow(aTHX_ sv, 0);
3381     }
3382
3383     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3384         sv_recode_to_utf8(sv, PL_encoding);
3385         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3386         return SvCUR(sv);
3387     }
3388
3389     if (SvCUR(sv) == 0) {
3390         if (extra) SvGROW(sv, extra);
3391     } else { /* Assume Latin-1/EBCDIC */
3392         /* This function could be much more efficient if we
3393          * had a FLAG in SVs to signal if there are any variant
3394          * chars in the PV.  Given that there isn't such a flag
3395          * make the loop as fast as possible (although there are certainly ways
3396          * to speed this up, eg. through vectorization) */
3397         U8 * s = (U8 *) SvPVX_const(sv);
3398         U8 * e = (U8 *) SvEND(sv);
3399         U8 *t = s;
3400         STRLEN two_byte_count = 0;
3401         
3402         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3403
3404         /* See if really will need to convert to utf8.  We mustn't rely on our
3405          * incoming SV being well formed and having a trailing '\0', as certain
3406          * code in pp_formline can send us partially built SVs. */
3407
3408         while (t < e) {
3409             const U8 ch = *t++;
3410             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3411
3412             t--;    /* t already incremented; re-point to first variant */
3413             two_byte_count = 1;
3414             goto must_be_utf8;
3415         }
3416
3417         /* utf8 conversion not needed because all are invariants.  Mark as
3418          * UTF-8 even if no variant - saves scanning loop */
3419         SvUTF8_on(sv);
3420         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3421         return SvCUR(sv);
3422
3423 must_be_utf8:
3424
3425         /* Here, the string should be converted to utf8, either because of an
3426          * input flag (two_byte_count = 0), or because a character that
3427          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3428          * the beginning of the string (if we didn't examine anything), or to
3429          * the first variant.  In either case, everything from s to t - 1 will
3430          * occupy only 1 byte each on output.
3431          *
3432          * There are two main ways to convert.  One is to create a new string
3433          * and go through the input starting from the beginning, appending each
3434          * converted value onto the new string as we go along.  It's probably
3435          * best to allocate enough space in the string for the worst possible
3436          * case rather than possibly running out of space and having to
3437          * reallocate and then copy what we've done so far.  Since everything
3438          * from s to t - 1 is invariant, the destination can be initialized
3439          * with these using a fast memory copy
3440          *
3441          * The other way is to figure out exactly how big the string should be
3442          * by parsing the entire input.  Then you don't have to make it big
3443          * enough to handle the worst possible case, and more importantly, if
3444          * the string you already have is large enough, you don't have to
3445          * allocate a new string, you can copy the last character in the input
3446          * string to the final position(s) that will be occupied by the
3447          * converted string and go backwards, stopping at t, since everything
3448          * before that is invariant.
3449          *
3450          * There are advantages and disadvantages to each method.
3451          *
3452          * In the first method, we can allocate a new string, do the memory
3453          * copy from the s to t - 1, and then proceed through the rest of the
3454          * string byte-by-byte.
3455          *
3456          * In the second method, we proceed through the rest of the input
3457          * string just calculating how big the converted string will be.  Then
3458          * there are two cases:
3459          *  1)  if the string has enough extra space to handle the converted
3460          *      value.  We go backwards through the string, converting until we
3461          *      get to the position we are at now, and then stop.  If this
3462          *      position is far enough along in the string, this method is
3463          *      faster than the other method.  If the memory copy were the same
3464          *      speed as the byte-by-byte loop, that position would be about
3465          *      half-way, as at the half-way mark, parsing to the end and back
3466          *      is one complete string's parse, the same amount as starting
3467          *      over and going all the way through.  Actually, it would be
3468          *      somewhat less than half-way, as it's faster to just count bytes
3469          *      than to also copy, and we don't have the overhead of allocating
3470          *      a new string, changing the scalar to use it, and freeing the
3471          *      existing one.  But if the memory copy is fast, the break-even
3472          *      point is somewhere after half way.  The counting loop could be
3473          *      sped up by vectorization, etc, to move the break-even point
3474          *      further towards the beginning.
3475          *  2)  if the string doesn't have enough space to handle the converted
3476          *      value.  A new string will have to be allocated, and one might
3477          *      as well, given that, start from the beginning doing the first
3478          *      method.  We've spent extra time parsing the string and in
3479          *      exchange all we've gotten is that we know precisely how big to
3480          *      make the new one.  Perl is more optimized for time than space,
3481          *      so this case is a loser.
3482          * So what I've decided to do is not use the 2nd method unless it is
3483          * guaranteed that a new string won't have to be allocated, assuming
3484          * the worst case.  I also decided not to put any more conditions on it
3485          * than this, for now.  It seems likely that, since the worst case is
3486          * twice as big as the unknown portion of the string (plus 1), we won't
3487          * be guaranteed enough space, causing us to go to the first method,
3488          * unless the string is short, or the first variant character is near
3489          * the end of it.  In either of these cases, it seems best to use the
3490          * 2nd method.  The only circumstance I can think of where this would
3491          * be really slower is if the string had once had much more data in it
3492          * than it does now, but there is still a substantial amount in it  */
3493
3494         {
3495             STRLEN invariant_head = t - s;
3496             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3497             if (SvLEN(sv) < size) {
3498
3499                 /* Here, have decided to allocate a new string */
3500
3501                 U8 *dst;
3502                 U8 *d;
3503
3504                 Newx(dst, size, U8);
3505
3506                 /* If no known invariants at the beginning of the input string,
3507                  * set so starts from there.  Otherwise, can use memory copy to
3508                  * get up to where we are now, and then start from here */
3509
3510                 if (invariant_head == 0) {
3511                     d = dst;
3512                 } else {
3513                     Copy(s, dst, invariant_head, char);
3514                     d = dst + invariant_head;
3515                 }
3516
3517                 while (t < e) {
3518                     append_utf8_from_native_byte(*t, &d);
3519                     t++;
3520                 }
3521                 *d = '\0';
3522                 SvPV_free(sv); /* No longer using pre-existing string */
3523                 SvPV_set(sv, (char*)dst);
3524                 SvCUR_set(sv, d - dst);
3525                 SvLEN_set(sv, size);
3526             } else {
3527
3528                 /* Here, have decided to get the exact size of the string.
3529                  * Currently this happens only when we know that there is
3530                  * guaranteed enough space to fit the converted string, so
3531                  * don't have to worry about growing.  If two_byte_count is 0,
3532                  * then t points to the first byte of the string which hasn't
3533                  * been examined yet.  Otherwise two_byte_count is 1, and t
3534                  * points to the first byte in the string that will expand to
3535                  * two.  Depending on this, start examining at t or 1 after t.
3536                  * */
3537
3538                 U8 *d = t + two_byte_count;
3539
3540
3541                 /* Count up the remaining bytes that expand to two */
3542
3543                 while (d < e) {
3544                     const U8 chr = *d++;
3545                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3546                 }
3547
3548                 /* The string will expand by just the number of bytes that
3549                  * occupy two positions.  But we are one afterwards because of
3550                  * the increment just above.  This is the place to put the
3551                  * trailing NUL, and to set the length before we decrement */
3552
3553                 d += two_byte_count;
3554                 SvCUR_set(sv, d - s);
3555                 *d-- = '\0';
3556
3557
3558                 /* Having decremented d, it points to the position to put the
3559                  * very last byte of the expanded string.  Go backwards through
3560                  * the string, copying and expanding as we go, stopping when we
3561                  * get to the part that is invariant the rest of the way down */
3562
3563                 e--;
3564                 while (e >= t) {
3565                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3566                         *d-- = *e;
3567                     } else {
3568                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3569                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3570                     }
3571                     e--;
3572                 }
3573             }
3574
3575             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3576                 /* Update pos. We do it at the end rather than during
3577                  * the upgrade, to avoid slowing down the common case
3578                  * (upgrade without pos).
3579                  * pos can be stored as either bytes or characters.  Since
3580                  * this was previously a byte string we can just turn off
3581                  * the bytes flag. */
3582                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3583                 if (mg) {
3584                     mg->mg_flags &= ~MGf_BYTES;
3585                 }
3586                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3587                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3588             }
3589         }
3590     }
3591
3592     /* Mark as UTF-8 even if no variant - saves scanning loop */
3593     SvUTF8_on(sv);
3594     return SvCUR(sv);
3595 }
3596
3597 /*
3598 =for apidoc sv_utf8_downgrade
3599
3600 Attempts to convert the PV of an SV from characters to bytes.
3601 If the PV contains a character that cannot fit
3602 in a byte, this conversion will fail;
3603 in this case, either returns false or, if C<fail_ok> is not
3604 true, croaks.
3605
3606 This is not a general purpose Unicode to byte encoding interface:
3607 use the Encode extension for that.
3608
3609 =cut
3610 */
3611
3612 bool
3613 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3614 {
3615     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3616
3617     if (SvPOKp(sv) && SvUTF8(sv)) {
3618         if (SvCUR(sv)) {
3619             U8 *s;
3620             STRLEN len;
3621             int mg_flags = SV_GMAGIC;
3622
3623             if (SvIsCOW(sv)) {
3624                 S_sv_uncow(aTHX_ sv, 0);
3625             }
3626             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3627                 /* update pos */
3628                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3629                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3630                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3631                                                 SV_GMAGIC|SV_CONST_RETURN);
3632                         mg_flags = 0; /* sv_pos_b2u does get magic */
3633                 }
3634                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3635                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3636
3637             }
3638             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3639
3640             if (!utf8_to_bytes(s, &len)) {
3641                 if (fail_ok)
3642                     return FALSE;
3643                 else {
3644                     if (PL_op)
3645                         Perl_croak(aTHX_ "Wide character in %s",
3646                                    OP_DESC(PL_op));
3647                     else
3648                         Perl_croak(aTHX_ "Wide character");
3649                 }
3650             }
3651             SvCUR_set(sv, len);
3652         }
3653     }
3654     SvUTF8_off(sv);
3655     return TRUE;
3656 }
3657
3658 /*
3659 =for apidoc sv_utf8_encode
3660
3661 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3662 flag off so that it looks like octets again.
3663
3664 =cut
3665 */
3666
3667 void
3668 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3669 {
3670     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3671
3672     if (SvREADONLY(sv)) {
3673         sv_force_normal_flags(sv, 0);
3674     }
3675     (void) sv_utf8_upgrade(sv);
3676     SvUTF8_off(sv);
3677 }
3678
3679 /*
3680 =for apidoc sv_utf8_decode
3681
3682 If the PV of the SV is an octet sequence in UTF-8
3683 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3684 so that it looks like a character.  If the PV contains only single-byte
3685 characters, the C<SvUTF8> flag stays off.
3686 Scans PV for validity and returns false if the PV is invalid UTF-8.
3687
3688 =cut
3689 */
3690
3691 bool
3692 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3693 {
3694     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3695
3696     if (SvPOKp(sv)) {
3697         const U8 *start, *c;
3698         const U8 *e;
3699
3700         /* The octets may have got themselves encoded - get them back as
3701          * bytes
3702          */
3703         if (!sv_utf8_downgrade(sv, TRUE))
3704             return FALSE;
3705
3706         /* it is actually just a matter of turning the utf8 flag on, but
3707          * we want to make sure everything inside is valid utf8 first.
3708          */
3709         c = start = (const U8 *) SvPVX_const(sv);
3710         if (!is_utf8_string(c, SvCUR(sv)))
3711             return FALSE;
3712         e = (const U8 *) SvEND(sv);
3713         while (c < e) {
3714             const U8 ch = *c++;
3715             if (!UTF8_IS_INVARIANT(ch)) {
3716                 SvUTF8_on(sv);
3717                 break;
3718             }
3719         }
3720         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3721             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3722                    after this, clearing pos.  Does anything on CPAN
3723                    need this? */
3724             /* adjust pos to the start of a UTF8 char sequence */
3725             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3726             if (mg) {
3727                 I32 pos = mg->mg_len;
3728                 if (pos > 0) {
3729                     for (c = start + pos; c > start; c--) {
3730                         if (UTF8_IS_START(*c))
3731                             break;
3732                     }
3733                     mg->mg_len  = c - start;
3734                 }
3735             }
3736             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3737                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3738         }
3739     }
3740     return TRUE;
3741 }
3742
3743 /*
3744 =for apidoc sv_setsv
3745
3746 Copies the contents of the source SV C<ssv> into the destination SV
3747 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3748 function if the source SV needs to be reused.  Does not handle 'set' magic on
3749 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3750 performs a copy-by-value, obliterating any previous content of the
3751 destination.
3752
3753 You probably want to use one of the assortment of wrappers, such as
3754 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3755 C<SvSetMagicSV_nosteal>.
3756
3757 =for apidoc sv_setsv_flags
3758
3759 Copies the contents of the source SV C<ssv> into the destination SV
3760 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3761 function if the source SV needs to be reused.  Does not handle 'set' magic.
3762 Loosely speaking, it performs a copy-by-value, obliterating any previous
3763 content of the destination.
3764 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3765 C<ssv> if appropriate, else not.  If the C<flags>
3766 parameter has the C<SV_NOSTEAL> bit set then the
3767 buffers of temps will not be stolen.  <sv_setsv>
3768 and C<sv_setsv_nomg> are implemented in terms of this function.
3769
3770 You probably want to use one of the assortment of wrappers, such as
3771 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3772 C<SvSetMagicSV_nosteal>.
3773
3774 This is the primary function for copying scalars, and most other
3775 copy-ish functions and macros use this underneath.
3776
3777 =cut
3778 */
3779
3780 static void
3781 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3782 {
3783     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3784     HV *old_stash = NULL;
3785
3786     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3787
3788     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3789         const char * const name = GvNAME(sstr);
3790         const STRLEN len = GvNAMELEN(sstr);
3791         {
3792             if (dtype >= SVt_PV) {
3793                 SvPV_free(dstr);
3794                 SvPV_set(dstr, 0);
3795                 SvLEN_set(dstr, 0);
3796                 SvCUR_set(dstr, 0);
3797             }
3798             SvUPGRADE(dstr, SVt_PVGV);
3799             (void)SvOK_off(dstr);
3800             isGV_with_GP_on(dstr);
3801         }
3802         GvSTASH(dstr) = GvSTASH(sstr);
3803         if (GvSTASH(dstr))
3804             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3805         gv_name_set(MUTABLE_GV(dstr), name, len,
3806                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3807         SvFAKE_on(dstr);        /* can coerce to non-glob */
3808     }
3809
3810     if(GvGP(MUTABLE_GV(sstr))) {
3811         /* If source has method cache entry, clear it */
3812         if(GvCVGEN(sstr)) {
3813             SvREFCNT_dec(GvCV(sstr));
3814             GvCV_set(sstr, NULL);
3815             GvCVGEN(sstr) = 0;
3816         }
3817         /* If source has a real method, then a method is
3818            going to change */
3819         else if(
3820          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3821         ) {
3822             mro_changes = 1;
3823         }
3824     }
3825
3826     /* If dest already had a real method, that's a change as well */
3827     if(
3828         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3829      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3830     ) {
3831         mro_changes = 1;
3832     }
3833
3834     /* We don't need to check the name of the destination if it was not a
3835        glob to begin with. */
3836     if(dtype == SVt_PVGV) {
3837         const char * const name = GvNAME((const GV *)dstr);
3838         if(
3839             strEQ(name,"ISA")
3840          /* The stash may have been detached from the symbol table, so
3841             check its name. */
3842          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3843         )
3844             mro_changes = 2;
3845         else {
3846             const STRLEN len = GvNAMELEN(dstr);
3847             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3848              || (len == 1 && name[0] == ':')) {
3849                 mro_changes = 3;
3850
3851                 /* Set aside the old stash, so we can reset isa caches on
3852                    its subclasses. */
3853                 if((old_stash = GvHV(dstr)))
3854                     /* Make sure we do not lose it early. */
3855                     SvREFCNT_inc_simple_void_NN(
3856                      sv_2mortal((SV *)old_stash)
3857                     );
3858             }
3859         }
3860
3861         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3862     }
3863
3864     gp_free(MUTABLE_GV(dstr));
3865     GvINTRO_off(dstr);          /* one-shot flag */
3866     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3867     if (SvTAINTED(sstr))
3868         SvTAINT(dstr);
3869     if (GvIMPORTED(dstr) != GVf_IMPORTED
3870         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3871         {
3872             GvIMPORTED_on(dstr);
3873         }
3874     GvMULTI_on(dstr);
3875     if(mro_changes == 2) {
3876       if (GvAV((const GV *)sstr)) {
3877         MAGIC *mg;
3878         SV * const sref = (SV *)GvAV((const GV *)dstr);
3879         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3880             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3881                 AV * const ary = newAV();
3882                 av_push(ary, mg->mg_obj); /* takes the refcount */
3883                 mg->mg_obj = (SV *)ary;
3884             }
3885             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3886         }
3887         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3888       }
3889       mro_isa_changed_in(GvSTASH(dstr));
3890     }
3891     else if(mro_changes == 3) {
3892         HV * const stash = GvHV(dstr);
3893         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3894             mro_package_moved(
3895                 stash, old_stash,
3896                 (GV *)dstr, 0
3897             );
3898     }
3899     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3900     if (GvIO(dstr) && dtype == SVt_PVGV) {
3901         DEBUG_o(Perl_deb(aTHX_
3902                         "glob_assign_glob clearing PL_stashcache\n"));
3903         /* It's a cache. It will rebuild itself quite happily.
3904            It's a lot of effort to work out exactly which key (or keys)
3905            might be invalidated by the creation of the this file handle.
3906          */
3907         hv_clear(PL_stashcache);
3908     }
3909     return;
3910 }
3911
3912 static void
3913 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3914 {
3915     SV * const sref = SvRV(sstr);
3916     SV *dref;
3917     const int intro = GvINTRO(dstr);
3918     SV **location;
3919     U8 import_flag = 0;
3920     const U32 stype = SvTYPE(sref);
3921
3922     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3923
3924     if (intro) {
3925         GvINTRO_off(dstr);      /* one-shot flag */
3926         GvLINE(dstr) = CopLINE(PL_curcop);
3927         GvEGV(dstr) = MUTABLE_GV(dstr);
3928     }
3929     GvMULTI_on(dstr);
3930     switch (stype) {
3931     case SVt_PVCV:
3932         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3933         import_flag = GVf_IMPORTED_CV;
3934         goto common;
3935     case SVt_PVHV:
3936         location = (SV **) &GvHV(dstr);
3937         import_flag = GVf_IMPORTED_HV;
3938         goto common;
3939     case SVt_PVAV:
3940         location = (SV **) &GvAV(dstr);
3941         import_flag = GVf_IMPORTED_AV;
3942         goto common;
3943     case SVt_PVIO:
3944         location = (SV **) &GvIOp(dstr);
3945         goto common;
3946     case SVt_PVFM:
3947         location = (SV **) &GvFORM(dstr);
3948         goto common;
3949     default:
3950         location = &GvSV(dstr);
3951         import_flag = GVf_IMPORTED_SV;
3952     common:
3953         if (intro) {
3954             if (stype == SVt_PVCV) {
3955                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3956                 if (GvCVGEN(dstr)) {
3957                     SvREFCNT_dec(GvCV(dstr));
3958                     GvCV_set(dstr, NULL);
3959                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3960                 }
3961             }
3962             /* SAVEt_GVSLOT takes more room on the savestack and has more
3963                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3964                leave_scope needs access to the GV so it can reset method
3965                caches.  We must use SAVEt_GVSLOT whenever the type is
3966                SVt_PVCV, even if the stash is anonymous, as the stash may
3967                gain a name somehow before leave_scope. */
3968             if (stype == SVt_PVCV) {
3969                 /* There is no save_pushptrptrptr.  Creating it for this
3970                    one call site would be overkill.  So inline the ss add
3971                    routines here. */
3972                 dSS_ADD;
3973                 SS_ADD_PTR(dstr);
3974                 SS_ADD_PTR(location);
3975                 SS_ADD_PTR(SvREFCNT_inc(*location));
3976                 SS_ADD_UV(SAVEt_GVSLOT);
3977                 SS_ADD_END(4);
3978             }
3979             else SAVEGENERICSV(*location);
3980         }
3981         dref = *location;
3982         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3983             CV* const cv = MUTABLE_CV(*location);
3984             if (cv) {
3985                 if (!GvCVGEN((const GV *)dstr) &&
3986                     (CvROOT(cv) || CvXSUB(cv)) &&
3987                     /* redundant check that avoids creating the extra SV
3988                        most of the time: */
3989                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3990                     {
3991                         SV * const new_const_sv =
3992                             CvCONST((const CV *)sref)
3993                                  ? cv_const_sv((const CV *)sref)
3994                                  : NULL;
3995                         report_redefined_cv(
3996                            sv_2mortal(Perl_newSVpvf(aTHX_
3997                                 "%"HEKf"::%"HEKf,
3998                                 HEKfARG(
3999                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4000                                 ),
4001                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4002                            )),
4003                            cv,
4004                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4005                         );
4006                     }
4007                 if (!intro)
4008                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4009                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4010                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4011                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4012             }
4013             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4014             GvASSUMECV_on(dstr);
4015             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4016                 if (intro && GvREFCNT(dstr) > 1) {
4017                     /* temporary remove extra savestack's ref */
4018                     --GvREFCNT(dstr);
4019                     gv_method_changed(dstr);
4020                     ++GvREFCNT(dstr);
4021                 }
4022                 else gv_method_changed(dstr);
4023             }
4024         }
4025         *location = SvREFCNT_inc_simple_NN(sref);
4026         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4027             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4028             GvFLAGS(dstr) |= import_flag;
4029         }
4030         if (import_flag == GVf_IMPORTED_SV) {
4031             if (intro) {
4032                 dSS_ADD;
4033                 SS_ADD_PTR(gp_ref(GvGP(dstr)));
4034                 SS_ADD_UV(SAVEt_GP_ALIASED_SV
4035                         | cBOOL(GvALIASED_SV(dstr)) << 8);
4036                 SS_ADD_END(2);
4037             }
4038             /* Turn off the flag if sref is not referenced elsewhere,
4039                even by weak refs.  (SvRMAGICAL is a pessimistic check for
4040                back refs.)  */
4041             if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
4042                 GvALIASED_SV_off(dstr);
4043             else
4044                 GvALIASED_SV_on(dstr);
4045         }
4046         if (stype == SVt_PVHV) {
4047             const char * const name = GvNAME((GV*)dstr);
4048             const STRLEN len = GvNAMELEN(dstr);
4049             if (
4050                 (
4051                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4052                 || (len == 1 && name[0] == ':')
4053                 )
4054              && (!dref || HvENAME_get(dref))
4055             ) {
4056                 mro_package_moved(
4057                     (HV *)sref, (HV *)dref,
4058                     (GV *)dstr, 0
4059                 );
4060             }
4061         }
4062         else if (
4063             stype == SVt_PVAV && sref != dref
4064          && strEQ(GvNAME((GV*)dstr), "ISA")
4065          /* The stash may have been detached from the symbol table, so
4066             check its name before doing anything. */
4067          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4068         ) {
4069             MAGIC *mg;
4070             MAGIC * const omg = dref && SvSMAGICAL(dref)
4071                                  ? mg_find(dref, PERL_MAGIC_isa)
4072                                  : NULL;
4073             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4074                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4075                     AV * const ary = newAV();
4076                     av_push(ary, mg->mg_obj); /* takes the refcount */
4077                     mg->mg_obj = (SV *)ary;
4078                 }
4079                 if (omg) {
4080                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4081                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4082                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4083                         while (items--)
4084                             av_push(
4085                              (AV *)mg->mg_obj,
4086                              SvREFCNT_inc_simple_NN(*svp++)
4087                             );
4088                     }
4089                     else
4090                         av_push(
4091                          (AV *)mg->mg_obj,
4092                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4093                         );
4094                 }
4095                 else
4096                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4097             }
4098             else
4099             {
4100                 sv_magic(
4101                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4102                 );
4103                 mg = mg_find(sref, PERL_MAGIC_isa);
4104             }
4105             /* Since the *ISA assignment could have affected more than
4106                one stash, don't call mro_isa_changed_in directly, but let
4107                magic_clearisa do it for us, as it already has the logic for
4108                dealing with globs vs arrays of globs. */
4109             assert(mg);
4110             Perl_magic_clearisa(aTHX_ NULL, mg);
4111         }
4112         else if (stype == SVt_PVIO) {
4113             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4114             /* It's a cache. It will rebuild itself quite happily.
4115                It's a lot of effort to work out exactly which key (or keys)
4116                might be invalidated by the creation of the this file handle.
4117             */
4118             hv_clear(PL_stashcache);
4119         }
4120         break;
4121     }
4122     if (!intro) SvREFCNT_dec(dref);
4123     if (SvTAINTED(sstr))
4124         SvTAINT(dstr);
4125     return;
4126 }
4127
4128
4129
4130
4131 #ifdef PERL_DEBUG_READONLY_COW
4132 # include <sys/mman.h>
4133
4134 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4135 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4136 # endif
4137
4138 void
4139 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4140 {
4141     struct perl_memory_debug_header * const header =
4142         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4143     const MEM_SIZE len = header->size;
4144     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4145 # ifdef PERL_TRACK_MEMPOOL
4146     if (!header->readonly) header->readonly = 1;
4147 # endif
4148     if (mprotect(header, len, PROT_READ))
4149         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4150                          header, len, errno);
4151 }
4152
4153 static void
4154 S_sv_buf_to_rw(pTHX_ SV *sv)
4155 {
4156     struct perl_memory_debug_header * const header =
4157         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4158     const MEM_SIZE len = header->size;
4159     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4160     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4161         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4162                          header, len, errno);
4163 # ifdef PERL_TRACK_MEMPOOL
4164     header->readonly = 0;
4165 # endif
4166 }
4167
4168 #else
4169 # define sv_buf_to_ro(sv)       NOOP
4170 # define sv_buf_to_rw(sv)       NOOP
4171 #endif
4172
4173 void
4174 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4175 {
4176     U32 sflags;
4177     int dtype;
4178     svtype stype;
4179
4180     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4181
4182     if (sstr == dstr)
4183         return;
4184
4185     if (SvIS_FREED(dstr)) {
4186         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4187                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4188     }
4189     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4190     if (!sstr)
4191         sstr = &PL_sv_undef;
4192     if (SvIS_FREED(sstr)) {
4193         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4194                    (void*)sstr, (void*)dstr);
4195     }
4196     stype = SvTYPE(sstr);
4197     dtype = SvTYPE(dstr);
4198
4199     /* There's a lot of redundancy below but we're going for speed here */
4200
4201     switch (stype) {
4202     case SVt_NULL:
4203       undef_sstr:
4204         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4205             (void)SvOK_off(dstr);
4206             return;
4207         }
4208         break;
4209     case SVt_IV:
4210         if (SvIOK(sstr)) {
4211             switch (dtype) {
4212             case SVt_NULL:
4213                 sv_upgrade(dstr, SVt_IV);
4214                 break;
4215             case SVt_NV:
4216             case SVt_PV:
4217                 sv_upgrade(dstr, SVt_PVIV);
4218                 break;
4219             case SVt_PVGV:
4220             case SVt_PVLV:
4221                 goto end_of_first_switch;
4222             }
4223             (void)SvIOK_only(dstr);
4224             SvIV_set(dstr,  SvIVX(sstr));
4225             if (SvIsUV(sstr))
4226                 SvIsUV_on(dstr);
4227             /* SvTAINTED can only be true if the SV has taint magic, which in
4228                turn means that the SV type is PVMG (or greater). This is the
4229                case statement for SVt_IV, so this cannot be true (whatever gcov
4230                may say).  */
4231             assert(!SvTAINTED(sstr));
4232             return;
4233         }
4234         if (!SvROK(sstr))
4235             goto undef_sstr;
4236         if (dtype < SVt_PV && dtype != SVt_IV)
4237             sv_upgrade(dstr, SVt_IV);
4238         break;
4239
4240     case SVt_NV:
4241         if (SvNOK(sstr)) {
4242             switch (dtype) {
4243             case SVt_NULL:
4244             case SVt_IV:
4245                 sv_upgrade(dstr, SVt_NV);
4246                 break;
4247             case SVt_PV:
4248             case SVt_PVIV:
4249                 sv_upgrade(dstr, SVt_PVNV);
4250                 break;
4251             case SVt_PVGV:
4252             case SVt_PVLV:
4253                 goto end_of_first_switch;
4254             }
4255             SvNV_set(dstr, SvNVX(sstr));
4256             (void)SvNOK_only(dstr);
4257             /* SvTAINTED can only be true if the SV has taint magic, which in
4258                turn means that the SV type is PVMG (or greater). This is the
4259                case statement for SVt_NV, so this cannot be true (whatever gcov
4260                may say).  */
4261             assert(!SvTAINTED(sstr));
4262             return;
4263         }
4264         goto undef_sstr;
4265
4266     case SVt_PV:
4267         if (dtype < SVt_PV)
4268             sv_upgrade(dstr, SVt_PV);
4269         break;
4270     case SVt_PVIV:
4271         if (dtype < SVt_PVIV)
4272             sv_upgrade(dstr, SVt_PVIV);
4273         break;
4274     case SVt_PVNV:
4275         if (dtype < SVt_PVNV)
4276             sv_upgrade(dstr, SVt_PVNV);
4277         break;
4278     default:
4279         {
4280         const char * const type = sv_reftype(sstr,0);
4281         if (PL_op)
4282             /* diag_listed_as: Bizarre copy of %s */
4283             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4284         else
4285             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4286         }
4287         NOT_REACHED; /* NOTREACHED */
4288
4289     case SVt_REGEXP:
4290       upgregexp:
4291         if (dtype < SVt_REGEXP)
4292         {
4293             if (dtype >= SVt_PV) {
4294                 SvPV_free(dstr);
4295                 SvPV_set(dstr, 0);
4296                 SvLEN_set(dstr, 0);
4297                 SvCUR_set(dstr, 0);
4298             }
4299             sv_upgrade(dstr, SVt_REGEXP);
4300         }
4301         break;
4302
4303         case SVt_INVLIST:
4304     case SVt_PVLV:
4305     case SVt_PVGV:
4306     case SVt_PVMG:
4307         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4308             mg_get(sstr);
4309             if (SvTYPE(sstr) != stype)
4310                 stype = SvTYPE(sstr);
4311         }
4312         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4313                     glob_assign_glob(dstr, sstr, dtype);
4314                     return;
4315         }
4316         if (stype == SVt_PVLV)
4317         {
4318             if (isREGEXP(sstr)) goto upgregexp;
4319             SvUPGRADE(dstr, SVt_PVNV);
4320         }
4321         else
4322             SvUPGRADE(dstr, (svtype)stype);
4323     }
4324  end_of_first_switch:
4325
4326     /* dstr may have been upgraded.  */
4327     dtype = SvTYPE(dstr);
4328     sflags = SvFLAGS(sstr);
4329
4330     if (dtype == SVt_PVCV) {
4331         /* Assigning to a subroutine sets the prototype.  */
4332         if (SvOK(sstr)) {
4333             STRLEN len;
4334             const char *const ptr = SvPV_const(sstr, len);
4335
4336             SvGROW(dstr, len + 1);
4337             Copy(ptr, SvPVX(dstr), len + 1, char);
4338             SvCUR_set(dstr, len);
4339             SvPOK_only(dstr);
4340             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4341             CvAUTOLOAD_off(dstr);
4342         } else {
4343             SvOK_off(dstr);
4344         }
4345     }
4346     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4347         const char * const type = sv_reftype(dstr,0);
4348         if (PL_op)
4349             /* diag_listed_as: Cannot copy to %s */
4350             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4351         else
4352             Perl_croak(aTHX_ "Cannot copy to %s", type);
4353     } else if (sflags & SVf_ROK) {
4354         if (isGV_with_GP(dstr)
4355             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4356             sstr = SvRV(sstr);
4357             if (sstr == dstr) {
4358                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4359                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4360                 {
4361                     GvIMPORTED_on(dstr);
4362                 }
4363                 GvMULTI_on(dstr);
4364                 return;
4365             }
4366             glob_assign_glob(dstr, sstr, dtype);
4367             return;
4368         }
4369
4370         if (dtype >= SVt_PV) {
4371             if (isGV_with_GP(dstr)) {
4372                 glob_assign_ref(dstr, sstr);
4373                 return;
4374             }
4375             if (SvPVX_const(dstr)) {
4376                 SvPV_free(dstr);
4377                 SvLEN_set(dstr, 0);
4378                 SvCUR_set(dstr, 0);
4379             }
4380         }
4381         (void)SvOK_off(dstr);
4382         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4383         SvFLAGS(dstr) |= sflags & SVf_ROK;
4384         assert(!(sflags & SVp_NOK));
4385         assert(!(sflags & SVp_IOK));
4386         assert(!(sflags & SVf_NOK));
4387         assert(!(sflags & SVf_IOK));
4388     }
4389     else if (isGV_with_GP(dstr)) {
4390         if (!(sflags & SVf_OK)) {
4391             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4392                            "Undefined value assigned to typeglob");
4393         }
4394         else {
4395             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4396             if (dstr != (const SV *)gv) {
4397                 const char * const name = GvNAME((const GV *)dstr);
4398                 const STRLEN len = GvNAMELEN(dstr);
4399                 HV *old_stash = NULL;
4400                 bool reset_isa = FALSE;
4401                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4402                  || (len == 1 && name[0] == ':')) {
4403                     /* Set aside the old stash, so we can reset isa caches
4404                        on its subclasses. */
4405                     if((old_stash = GvHV(dstr))) {
4406                         /* Make sure we do not lose it early. */
4407                         SvREFCNT_inc_simple_void_NN(
4408                          sv_2mortal((SV *)old_stash)
4409                         );
4410                     }
4411                     reset_isa = TRUE;
4412                 }
4413
4414                 if (GvGP(dstr)) {
4415                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4416                     gp_free(MUTABLE_GV(dstr));
4417                 }
4418                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4419
4420                 if (reset_isa) {
4421                     HV * const stash = GvHV(dstr);
4422                     if(
4423                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4424                     )
4425                         mro_package_moved(
4426                          stash, old_stash,
4427                          (GV *)dstr, 0
4428                         );
4429                 }
4430             }
4431         }
4432     }
4433     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4434           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4435         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4436     }
4437     else if (sflags & SVp_POK) {
4438         const STRLEN cur = SvCUR(sstr);
4439         const STRLEN len = SvLEN(sstr);
4440
4441         /*
4442          * We have three basic ways to copy the string:
4443          *
4444          *  1. Swipe
4445          *  2. Copy-on-write
4446          *  3. Actual copy
4447          * 
4448          * Which we choose is based on various factors.  The following
4449          * things are listed in order of speed, fastest to slowest:
4450          *  - Swipe
4451          *  - Copying a short string
4452          *  - Copy-on-write bookkeeping
4453          *  - malloc
4454          *  - Copying a long string
4455          * 
4456          * We swipe the string (steal the string buffer) if the SV on the
4457          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4458          * big win on long strings.  It should be a win on short strings if
4459          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4460          * slow things down, as SvPVX_const(sstr) would have been freed
4461          * soon anyway.
4462          * 
4463          * We also steal the buffer from a PADTMP (operator target) if it
4464          * is â€˜long enough’.  For short strings, a swipe does not help
4465          * here, as it causes more malloc calls the next time the target
4466          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4467          * be allocated it is still not worth swiping PADTMPs for short
4468          * strings, as the savings here are small.
4469          * 
4470          * If the rhs is already flagged as a copy-on-write string and COW
4471          * is possible here, we use copy-on-write and make both SVs share
4472          * the string buffer.
4473          * 
4474          * If the rhs is not flagged as copy-on-write, then we see whether
4475          * it is worth upgrading it to such.  If the lhs already has a buf-
4476          * fer big enough and the string is short, we skip it and fall back
4477          * to method 3, since memcpy is faster for short strings than the
4478          * later bookkeeping overhead that copy-on-write entails.
4479          * 
4480          * If there is no buffer on the left, or the buffer is too small,
4481          * then we use copy-on-write.
4482          */
4483
4484         /* Whichever path we take through the next code, we want this true,
4485            and doing it now facilitates the COW check.  */
4486         (void)SvPOK_only(dstr);
4487
4488         if (
4489                  (              /* Either ... */
4490                                 /* slated for free anyway (and not COW)? */
4491                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4492                                 /* or a swipable TARG */
4493                  || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
4494                        == SVs_PADTMP
4495                                 /* whose buffer is worth stealing */
4496                      && CHECK_COWBUF_THRESHOLD(cur,len)
4497                     )
4498                  ) &&
4499                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4500                  (!(flags & SV_NOSTEAL)) &&
4501                                         /* and we're allowed to steal temps */
4502                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4503                  len)             /* and really is a string */
4504         {       /* Passes the swipe test.  */
4505             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4506                 SvPV_free(dstr);
4507             SvPV_set(dstr, SvPVX_mutable(sstr));
4508             SvLEN_set(dstr, SvLEN(sstr));
4509             SvCUR_set(dstr, SvCUR(sstr));
4510
4511             SvTEMP_off(dstr);
4512             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4513             SvPV_set(sstr, NULL);
4514             SvLEN_set(sstr, 0);
4515             SvCUR_set(sstr, 0);
4516             SvTEMP_off(sstr);
4517         }
4518         else if (flags & SV_COW_SHARED_HASH_KEYS
4519               &&
4520 #ifdef PERL_OLD_COPY_ON_WRITE
4521                  (  sflags & SVf_IsCOW
4522                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4523                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4524                      && SvTYPE(sstr) >= SVt_PVIV && len
4525                     )
4526                  )
4527 #elif defined(PERL_NEW_COPY_ON_WRITE)
4528                  (sflags & SVf_IsCOW
4529                    ? (!len ||
4530                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4531                           /* If this is a regular (non-hek) COW, only so
4532                              many COW "copies" are possible. */
4533                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4534                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4535                      && !(SvFLAGS(dstr) & SVf_BREAK)
4536                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4537                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4538                     ))
4539 #else
4540                  sflags & SVf_IsCOW
4541               && !(SvFLAGS(dstr) & SVf_BREAK)
4542 #endif
4543             ) {
4544             /* Either it's a shared hash key, or it's suitable for
4545                copy-on-write.  */
4546             if (DEBUG_C_TEST) {
4547                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4548                 sv_dump(sstr);
4549                 sv_dump(dstr);
4550             }
4551 #ifdef PERL_ANY_COW
4552             if (!(sflags & SVf_IsCOW)) {
4553                     SvIsCOW_on(sstr);
4554 # ifdef PERL_OLD_COPY_ON_WRITE
4555                     /* Make the source SV into a loop of 1.
4556                        (about to become 2) */
4557                     SV_COW_NEXT_SV_SET(sstr, sstr);
4558 # else
4559                     CowREFCNT(sstr) = 0;
4560 # endif
4561             }
4562 #endif
4563             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4564                 SvPV_free(dstr);
4565             }
4566
4567 #ifdef PERL_ANY_COW
4568             if (len) {
4569 # ifdef PERL_OLD_COPY_ON_WRITE
4570                     assert (SvTYPE(dstr) >= SVt_PVIV);
4571                     /* SvIsCOW_normal */
4572                     /* splice us in between source and next-after-source.  */
4573                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4574                     SV_COW_NEXT_SV_SET(sstr, dstr);
4575 # else
4576                     if (sflags & SVf_IsCOW) {
4577                         sv_buf_to_rw(sstr);
4578                     }
4579                     CowREFCNT(sstr)++;
4580 # endif
4581                     SvPV_set(dstr, SvPVX_mutable(sstr));
4582                     sv_buf_to_ro(sstr);
4583             } else
4584 #endif
4585             {
4586                     /* SvIsCOW_shared_hash */
4587                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4588                                           "Copy on write: Sharing hash\n"));
4589
4590                     assert (SvTYPE(dstr) >= SVt_PV);
4591                     SvPV_set(dstr,
4592                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4593             }
4594             SvLEN_set(dstr, len);
4595             SvCUR_set(dstr, cur);
4596             SvIsCOW_on(dstr);
4597         } else {
4598             /* Failed the swipe test, and we cannot do copy-on-write either.
4599                Have to copy the string.  */
4600             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4601             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4602             SvCUR_set(dstr, cur);
4603             *SvEND(dstr) = '\0';
4604         }
4605         if (sflags & SVp_NOK) {
4606             SvNV_set(dstr, SvNVX(sstr));
4607         }
4608         if (sflags & SVp_IOK) {
4609             SvIV_set(dstr, SvIVX(sstr));
4610             /* Must do this otherwise some other overloaded use of 0x80000000
4611                gets confused. I guess SVpbm_VALID */
4612             if (sflags & SVf_IVisUV)
4613                 SvIsUV_on(dstr);
4614         }
4615         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4616         {
4617             const MAGIC * const smg = SvVSTRING_mg(sstr);
4618             if (smg) {
4619                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4620                          smg->mg_ptr, smg->mg_len);
4621                 SvRMAGICAL_on(dstr);
4622             }
4623         }
4624     }
4625     else if (sflags & (SVp_IOK|SVp_NOK)) {
4626         (void)SvOK_off(dstr);
4627         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4628         if (sflags & SVp_IOK) {
4629             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4630             SvIV_set(dstr, SvIVX(sstr));
4631         }
4632         if (sflags & SVp_NOK) {
4633             SvNV_set(dstr, SvNVX(sstr));
4634         }
4635     }
4636     else {
4637         if (isGV_with_GP(sstr)) {
4638             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4639         }
4640         else
4641             (void)SvOK_off(dstr);
4642     }
4643     if (SvTAINTED(sstr))
4644         SvTAINT(dstr);
4645 }
4646
4647 /*
4648 =for apidoc sv_setsv_mg
4649
4650 Like C<sv_setsv>, but also handles 'set' magic.
4651
4652 =cut
4653 */
4654
4655 void
4656 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4657 {
4658     PERL_ARGS_ASSERT_SV_SETSV_MG;
4659
4660     sv_setsv(dstr,sstr);
4661     SvSETMAGIC(dstr);
4662 }
4663
4664 #ifdef PERL_ANY_COW
4665 # ifdef PERL_OLD_COPY_ON_WRITE
4666 #  define SVt_COW SVt_PVIV
4667 # else
4668 #  define SVt_COW SVt_PV
4669 # endif
4670 SV *
4671 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4672 {
4673     STRLEN cur = SvCUR(sstr);
4674     STRLEN len = SvLEN(sstr);
4675     char *new_pv;
4676 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4677     const bool already = cBOOL(SvIsCOW(sstr));
4678 #endif
4679
4680     PERL_ARGS_ASSERT_SV_SETSV_COW;
4681
4682     if (DEBUG_C_TEST) {
4683         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4684                       (void*)sstr, (void*)dstr);
4685         sv_dump(sstr);
4686         if (dstr)
4687                     sv_dump(dstr);
4688     }
4689
4690     if (dstr) {
4691         if (SvTHINKFIRST(dstr))
4692             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4693         else if (SvPVX_const(dstr))
4694             Safefree(SvPVX_mutable(dstr));
4695     }
4696     else
4697         new_SV(dstr);
4698     SvUPGRADE(dstr, SVt_COW);
4699
4700     assert (SvPOK(sstr));
4701     assert (SvPOKp(sstr));
4702 # ifdef PERL_OLD_COPY_ON_WRITE
4703     assert (!SvIOK(sstr));
4704     assert (!SvIOKp(sstr));
4705     assert (!SvNOK(sstr));
4706     assert (!SvNOKp(sstr));
4707 # endif
4708
4709     if (SvIsCOW(sstr)) {
4710
4711         if (SvLEN(sstr) == 0) {
4712             /* source is a COW shared hash key.  */
4713             DEBUG_C(PerlIO_printf(Perl_debug_log,
4714                                   "Fast copy on write: Sharing hash\n"));
4715             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4716             goto common_exit;
4717         }
4718 # ifdef PERL_OLD_COPY_ON_WRITE
4719         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4720 # else
4721         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4722         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4723 # endif
4724     } else {
4725         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4726         SvUPGRADE(sstr, SVt_COW);
4727         SvIsCOW_on(sstr);
4728         DEBUG_C(PerlIO_printf(Perl_debug_log,
4729                               "Fast copy on write: Converting sstr to COW\n"));
4730 # ifdef PERL_OLD_COPY_ON_WRITE
4731         SV_COW_NEXT_SV_SET(dstr, sstr);
4732 # else
4733         CowREFCNT(sstr) = 0;    
4734 # endif
4735     }
4736 # ifdef PERL_OLD_COPY_ON_WRITE
4737     SV_COW_NEXT_SV_SET(sstr, dstr);
4738 # else
4739 #  ifdef PERL_DEBUG_READONLY_COW
4740     if (already) sv_buf_to_rw(sstr);
4741 #  endif
4742     CowREFCNT(sstr)++;  
4743 # endif
4744     new_pv = SvPVX_mutable(sstr);
4745     sv_buf_to_ro(sstr);
4746
4747   common_exit:
4748     SvPV_set(dstr, new_pv);
4749     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4750     if (SvUTF8(sstr))
4751         SvUTF8_on(dstr);
4752     SvLEN_set(dstr, len);
4753     SvCUR_set(dstr, cur);
4754     if (DEBUG_C_TEST) {
4755         sv_dump(dstr);
4756     }
4757     return dstr;
4758 }
4759 #endif
4760
4761 /*
4762 =for apidoc sv_setpvn
4763
4764 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4765 The C<len> parameter indicates the number of
4766 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4767 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4768
4769 =cut
4770 */
4771
4772 void
4773 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4774 {
4775     char *dptr;
4776
4777     PERL_ARGS_ASSERT_SV_SETPVN;
4778
4779     SV_CHECK_THINKFIRST_COW_DROP(sv);
4780     if (!ptr) {
4781         (void)SvOK_off(sv);
4782         return;
4783     }
4784     else {
4785         /* len is STRLEN which is unsigned, need to copy to signed */
4786         const IV iv = len;
4787         if (iv < 0)
4788             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4789                        IVdf, iv);
4790     }
4791     SvUPGRADE(sv, SVt_PV);
4792
4793     dptr = SvGROW(sv, len + 1);
4794     Move(ptr,dptr,len,char);
4795     dptr[len] = '\0';
4796     SvCUR_set(sv, len);
4797     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4798     SvTAINT(sv);
4799     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4800 }
4801
4802 /*
4803 =for apidoc sv_setpvn_mg
4804
4805 Like C<sv_setpvn>, but also handles 'set' magic.
4806
4807 =cut
4808 */
4809
4810 void
4811 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4812 {
4813     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4814
4815     sv_setpvn(sv,ptr,len);
4816     SvSETMAGIC(sv);
4817 }
4818
4819 /*
4820 =for apidoc sv_setpv
4821
4822 Copies a string into an SV.  The string must be terminated with a C<NUL>
4823 character.
4824 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4825
4826 =cut
4827 */
4828
4829 void
4830 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4831 {
4832     STRLEN len;
4833
4834     PERL_ARGS_ASSERT_SV_SETPV;
4835
4836     SV_CHECK_THINKFIRST_COW_DROP(sv);
4837     if (!ptr) {
4838         (void)SvOK_off(sv);
4839         return;
4840     }
4841     len = strlen(ptr);
4842     SvUPGRADE(sv, SVt_PV);
4843
4844     SvGROW(sv, len + 1);
4845     Move(ptr,SvPVX(sv),len+1,char);
4846     SvCUR_set(sv, len);
4847     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4848     SvTAINT(sv);
4849     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4850 }
4851
4852 /*
4853 =for apidoc sv_setpv_mg
4854
4855 Like C<sv_setpv>, but also handles 'set' magic.
4856
4857 =cut
4858 */
4859
4860 void
4861 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4862 {
4863     PERL_ARGS_ASSERT_SV_SETPV_MG;
4864
4865     sv_setpv(sv,ptr);
4866     SvSETMAGIC(sv);
4867 }
4868
4869 void
4870 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4871 {
4872     PERL_ARGS_ASSERT_SV_SETHEK;
4873
4874     if (!hek) {
4875         return;
4876     }
4877
4878     if (HEK_LEN(hek) == HEf_SVKEY) {
4879         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4880         return;
4881     } else {
4882         const int flags = HEK_FLAGS(hek);
4883         if (flags & HVhek_WASUTF8) {
4884             STRLEN utf8_len = HEK_LEN(hek);
4885             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4886             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4887             SvUTF8_on(sv);
4888             return;
4889         } else if (flags & HVhek_UNSHARED) {
4890             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4891             if (HEK_UTF8(hek))
4892                 SvUTF8_on(sv);
4893             else SvUTF8_off(sv);
4894             return;
4895         }
4896         {
4897             SV_CHECK_THINKFIRST_COW_DROP(sv);
4898             SvUPGRADE(sv, SVt_PV);
4899             SvPV_free(sv);
4900             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4901             SvCUR_set(sv, HEK_LEN(hek));
4902             SvLEN_set(sv, 0);
4903             SvIsCOW_on(sv);
4904             SvPOK_on(sv);
4905             if (HEK_UTF8(hek))
4906                 SvUTF8_on(sv);
4907             else SvUTF8_off(sv);
4908             return;
4909         }
4910     }
4911 }
4912
4913
4914 /*
4915 =for apidoc sv_usepvn_flags
4916
4917 Tells an SV to use C<ptr> to find its string value.  Normally the
4918 string is stored inside the SV, but sv_usepvn allows the SV to use an
4919 outside string.  The C<ptr> should point to memory that was allocated
4920 by L<Newx|perlclib/Memory Management and String Handling>. It must be
4921 the start of a Newx-ed block of memory, and not a pointer to the
4922 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4923 and not be from a non-Newx memory allocator like C<malloc>. The
4924 string length, C<len>, must be supplied.  By default this function
4925 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4926 so that pointer should not be freed or used by the programmer after
4927 giving it to sv_usepvn, and neither should any pointers from "behind"
4928 that pointer (e.g. ptr + 1) be used.
4929
4930 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4931 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4932 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4933 C<len>, and already meets the requirements for storing in C<SvPVX>).
4934
4935 =cut
4936 */
4937
4938 void
4939 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4940 {
4941     STRLEN allocate;
4942
4943     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4944
4945     SV_CHECK_THINKFIRST_COW_DROP(sv);
4946     SvUPGRADE(sv, SVt_PV);
4947     if (!ptr) {
4948         (void)SvOK_off(sv);
4949         if (flags & SV_SMAGIC)
4950             SvSETMAGIC(sv);
4951         return;
4952     }
4953     if (SvPVX_const(sv))
4954         SvPV_free(sv);
4955
4956 #ifdef DEBUGGING
4957     if (flags & SV_HAS_TRAILING_NUL)
4958         assert(ptr[len] == '\0');
4959 #endif
4960
4961     allocate = (flags & SV_HAS_TRAILING_NUL)
4962         ? len + 1 :
4963 #ifdef Perl_safesysmalloc_size
4964         len + 1;
4965 #else 
4966         PERL_STRLEN_ROUNDUP(len + 1);
4967 #endif
4968     if (flags & SV_HAS_TRAILING_NUL) {
4969         /* It's long enough - do nothing.
4970            Specifically Perl_newCONSTSUB is relying on this.  */
4971     } else {
4972 #ifdef DEBUGGING
4973         /* Force a move to shake out bugs in callers.  */
4974         char *new_ptr = (char*)safemalloc(allocate);
4975         Copy(ptr, new_ptr, len, char);
4976         PoisonFree(ptr,len,char);
4977         Safefree(ptr);
4978         ptr = new_ptr;
4979 #else
4980         ptr = (char*) saferealloc (ptr, allocate);
4981 #endif
4982     }
4983 #ifdef Perl_safesysmalloc_size
4984     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4985 #else
4986     SvLEN_set(sv, allocate);
4987 #endif
4988     SvCUR_set(sv, len);
4989     SvPV_set(sv, ptr);
4990     if (!(flags & SV_HAS_TRAILING_NUL)) {
4991         ptr[len] = '\0';
4992     }
4993     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4994     SvTAINT(sv);
4995     if (flags & SV_SMAGIC)
4996         SvSETMAGIC(sv);
4997 }
4998
4999 #ifdef PERL_OLD_COPY_ON_WRITE
5000 /* Need to do this *after* making the SV normal, as we need the buffer
5001    pointer to remain valid until after we've copied it.  If we let go too early,
5002    another thread could invalidate it by unsharing last of the same hash key
5003    (which it can do by means other than releasing copy-on-write Svs)
5004    or by changing the other copy-on-write SVs in the loop.  */
5005 STATIC void
5006 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
5007 {
5008     PERL_ARGS_ASSERT_SV_RELEASE_COW;
5009
5010     { /* this SV was SvIsCOW_normal(sv) */
5011          /* we need to find the SV pointing to us.  */
5012         SV *current = SV_COW_NEXT_SV(after);
5013
5014         if (current == sv) {
5015             /* The SV we point to points back to us (there were only two of us
5016                in the loop.)
5017                Hence other SV is no longer copy on write either.  */
5018             SvIsCOW_off(after);
5019             sv_buf_to_rw(after);
5020         } else {
5021             /* We need to follow the pointers around the loop.  */
5022             SV *next;
5023             while ((next = SV_COW_NEXT_SV(current)) != sv) {
5024                 assert (next);
5025                 current = next;
5026                  /* don't loop forever if the structure is bust, and we have
5027                     a pointer into a closed loop.  */
5028                 assert (current != after);
5029                 assert (SvPVX_const(current) == pvx);
5030             }
5031             /* Make the SV before us point to the SV after us.  */
5032             SV_COW_NEXT_SV_SET(current, after);
5033         }
5034     }
5035 }
5036 #endif
5037 /*
5038 =for apidoc sv_force_normal_flags
5039
5040 Undo various types of fakery on an SV, where fakery means
5041 "more than" a string: if the PV is a shared string, make
5042 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5043 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5044 we do the copy, and is also used locally; if this is a
5045 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5046 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5047 SvPOK_off rather than making a copy.  (Used where this
5048 scalar is about to be set to some other value.)  In addition,
5049 the C<flags> parameter gets passed to C<sv_unref_flags()>
5050 when unreffing.  C<sv_force_normal> calls this function
5051 with flags set to 0.
5052
5053 This function is expected to be used to signal to perl that this SV is
5054 about to be written to, and any extra book-keeping needs to be taken care
5055 of.  Hence, it croaks on read-only values.
5056
5057 =cut
5058 */
5059
5060 static void
5061 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5062 {
5063     assert(SvIsCOW(sv));
5064     {
5065 #ifdef PERL_ANY_COW
5066         const char * const pvx = SvPVX_const(sv);
5067         const STRLEN len = SvLEN(sv);
5068         const STRLEN cur = SvCUR(sv);
5069 # ifdef PERL_OLD_COPY_ON_WRITE
5070         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5071            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5072            we'll fail an assertion.  */
5073         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5074 # endif
5075
5076         if (DEBUG_C_TEST) {
5077                 PerlIO_printf(Perl_debug_log,
5078                               "Copy on write: Force normal %ld\n",
5079                               (long) flags);
5080                 sv_dump(sv);
5081         }
5082         SvIsCOW_off(sv);
5083 # ifdef PERL_NEW_COPY_ON_WRITE
5084         if (len && CowREFCNT(sv) == 0)
5085             /* We own the buffer ourselves. */
5086             sv_buf_to_rw(sv);
5087         else
5088 # endif
5089         {
5090                 
5091             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5092 # ifdef PERL_NEW_COPY_ON_WRITE
5093             /* Must do this first, since the macro uses SvPVX. */
5094             if (len) {
5095                 sv_buf_to_rw(sv);
5096                 CowREFCNT(sv)--;
5097                 sv_buf_to_ro(sv);
5098             }
5099 # endif
5100             SvPV_set(sv, NULL);
5101             SvCUR_set(sv, 0);
5102             SvLEN_set(sv, 0);
5103             if (flags & SV_COW_DROP_PV) {
5104                 /* OK, so we don't need to copy our buffer.  */
5105                 SvPOK_off(sv);
5106             } else {
5107                 SvGROW(sv, cur + 1);
5108                 Move(pvx,SvPVX(sv),cur,char);
5109                 SvCUR_set(sv, cur);
5110                 *SvEND(sv) = '\0';
5111             }
5112             if (len) {
5113 # ifdef PERL_OLD_COPY_ON_WRITE
5114                 sv_release_COW(sv, pvx, next);
5115 # endif
5116             } else {
5117                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5118             }
5119             if (DEBUG_C_TEST) {
5120                 sv_dump(sv);
5121             }
5122         }
5123 #else
5124             const char * const pvx = SvPVX_const(sv);
5125             const STRLEN len = SvCUR(sv);
5126             SvIsCOW_off(sv);
5127             SvPV_set(sv, NULL);
5128             SvLEN_set(sv, 0);
5129             if (flags & SV_COW_DROP_PV) {
5130                 /* OK, so we don't need to copy our buffer.  */
5131                 SvPOK_off(sv);
5132             } else {
5133                 SvGROW(sv, len + 1);
5134                 Move(pvx,SvPVX(sv),len,char);
5135                 *SvEND(sv) = '\0';
5136             }
5137             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5138 #endif
5139     }
5140 }
5141
5142 void
5143 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5144 {
5145     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5146
5147     if (SvREADONLY(sv))
5148         Perl_croak_no_modify();
5149     else if (SvIsCOW(sv))
5150         S_sv_uncow(aTHX_ sv, flags);
5151     if (SvROK(sv))
5152         sv_unref_flags(sv, flags);
5153     else if (SvFAKE(sv) && isGV_with_GP(sv))
5154         sv_unglob(sv, flags);
5155     else if (SvFAKE(sv) && isREGEXP(sv)) {
5156         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5157            to sv_unglob. We only need it here, so inline it.  */
5158         const bool islv = SvTYPE(sv) == SVt_PVLV;
5159         const svtype new_type =
5160           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5161         SV *const temp = newSV_type(new_type);
5162         regexp *const temp_p = ReANY((REGEXP *)sv);
5163
5164         if (new_type == SVt_PVMG) {
5165             SvMAGIC_set(temp, SvMAGIC(sv));
5166             SvMAGIC_set(sv, NULL);
5167             SvSTASH_set(temp, SvSTASH(sv));
5168             SvSTASH_set(sv, NULL);
5169         }
5170         if (!islv) SvCUR_set(temp, SvCUR(sv));
5171         /* Remember that SvPVX is in the head, not the body.  But
5172            RX_WRAPPED is in the body. */
5173         assert(ReANY((REGEXP *)sv)->mother_re);
5174         /* Their buffer is already owned by someone else. */
5175         if (flags & SV_COW_DROP_PV) {
5176             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5177                zeroed body.  For SVt_PVLV, it should have been set to 0
5178                before turning into a regexp. */
5179             assert(!SvLEN(islv ? sv : temp));
5180             sv->sv_u.svu_pv = 0;
5181         }
5182         else {
5183             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5184             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5185             SvPOK_on(sv);
5186         }
5187
5188         /* Now swap the rest of the bodies. */
5189
5190         SvFAKE_off(sv);
5191         if (!islv) {
5192             SvFLAGS(sv) &= ~SVTYPEMASK;
5193             SvFLAGS(sv) |= new_type;
5194             SvANY(sv) = SvANY(temp);
5195         }
5196
5197         SvFLAGS(temp) &= ~(SVTYPEMASK);
5198         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5199         SvANY(temp) = temp_p;
5200         temp->sv_u.svu_rx = (regexp *)temp_p;
5201
5202         SvREFCNT_dec_NN(temp);
5203     }
5204     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5205 }
5206
5207 /*
5208 =for apidoc sv_chop
5209
5210 Efficient removal of characters from the beginning of the string buffer.
5211 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5212 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5213 character of the adjusted string.  Uses the "OOK hack".  On return, only
5214 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5215
5216 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5217 refer to the same chunk of data.
5218
5219 The unfortunate similarity of this function's name to that of Perl's C<chop>
5220 operator is strictly coincidental.  This function works from the left;
5221 C<chop> works from the right.
5222
5223 =cut
5224 */
5225
5226 void
5227 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5228 {
5229     STRLEN delta;
5230     STRLEN old_delta;
5231     U8 *p;
5232 #ifdef DEBUGGING
5233     const U8 *evacp;
5234     STRLEN evacn;
5235 #endif
5236     STRLEN max_delta;
5237
5238     PERL_ARGS_ASSERT_SV_CHOP;
5239
5240     if (!ptr || !SvPOKp(sv))
5241         return;
5242     delta = ptr - SvPVX_const(sv);
5243     if (!delta) {
5244         /* Nothing to do.  */
5245         return;
5246     }
5247     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5248     if (delta > max_delta)
5249         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5250                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5251     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5252     SV_CHECK_THINKFIRST(sv);
5253     SvPOK_only_UTF8(sv);
5254
5255     if (!SvOOK(sv)) {
5256         if (!SvLEN(sv)) { /* make copy of shared string */
5257             const char *pvx = SvPVX_const(sv);
5258             const STRLEN len = SvCUR(sv);
5259             SvGROW(sv, len + 1);
5260             Move(pvx,SvPVX(sv),len,char);
5261             *SvEND(sv) = '\0';
5262         }
5263         SvOOK_on(sv);
5264         old_delta = 0;
5265     } else {
5266         SvOOK_offset(sv, old_delta);
5267     }
5268     SvLEN_set(sv, SvLEN(sv) - delta);
5269     SvCUR_set(sv, SvCUR(sv) - delta);
5270     SvPV_set(sv, SvPVX(sv) + delta);
5271
5272     p = (U8 *)SvPVX_const(sv);
5273
5274 #ifdef DEBUGGING
5275     /* how many bytes were evacuated?  we will fill them with sentinel
5276        bytes, except for the part holding the new offset of course. */
5277     evacn = delta;
5278     if (old_delta)
5279         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5280     assert(evacn);
5281     assert(evacn <= delta + old_delta);
5282     evacp = p - evacn;
5283 #endif
5284
5285     /* This sets 'delta' to the accumulated value of all deltas so far */
5286     delta += old_delta;
5287     assert(delta);
5288
5289     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5290      * the string; otherwise store a 0 byte there and store 'delta' just prior
5291      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5292      * portion of the chopped part of the string */
5293     if (delta < 0x100) {
5294         *--p = (U8) delta;
5295     } else {
5296         *--p = 0;
5297         p -= sizeof(STRLEN);
5298         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5299     }
5300
5301 #ifdef DEBUGGING
5302     /* Fill the preceding buffer with sentinals to verify that no-one is
5303        using it.  */
5304     while (p > evacp) {
5305         --p;
5306         *p = (U8)PTR2UV(p);
5307     }
5308 #endif
5309 }
5310
5311 /*
5312 =for apidoc sv_catpvn
5313
5314 Concatenates the string onto the end of the string which is in the SV.  The
5315 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5316 status set, then the bytes appended should be valid UTF-8.
5317 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5318
5319 =for apidoc sv_catpvn_flags
5320
5321 Concatenates the string onto the end of the string which is in the SV.  The
5322 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5323 status set, then the bytes appended should be valid UTF-8.
5324 If C<flags> has the C<SV_SMAGIC> bit set, will
5325 C<mg_set> on C<dsv> afterwards if appropriate.
5326 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5327 in terms of this function.
5328
5329 =cut
5330 */
5331
5332 void
5333 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5334 {
5335     STRLEN dlen;
5336     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5337
5338     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5339     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5340
5341     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5342       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5343          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5344          dlen = SvCUR(dsv);
5345       }
5346       else SvGROW(dsv, dlen + slen + 1);
5347       if (sstr == dstr)
5348         sstr = SvPVX_const(dsv);
5349       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5350       SvCUR_set(dsv, SvCUR(dsv) + slen);
5351     }
5352     else {
5353         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5354         const char * const send = sstr + slen;
5355         U8 *d;
5356
5357         /* Something this code does not account for, which I think is
5358            impossible; it would require the same pv to be treated as
5359            bytes *and* utf8, which would indicate a bug elsewhere. */
5360         assert(sstr != dstr);
5361
5362         SvGROW(dsv, dlen + slen * 2 + 1);
5363         d = (U8 *)SvPVX(dsv) + dlen;
5364
5365         while (sstr < send) {
5366             append_utf8_from_native_byte(*sstr, &d);
5367             sstr++;
5368         }
5369         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5370     }
5371     *SvEND(dsv) = '\0';
5372     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5373     SvTAINT(dsv);
5374     if (flags & SV_SMAGIC)
5375         SvSETMAGIC(dsv);
5376 }
5377
5378 /*
5379 =for apidoc sv_catsv
5380
5381 Concatenates the string from SV C<ssv> onto the end of the string in SV
5382 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5383 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5384 C<sv_catsv_nomg>.
5385
5386 =for apidoc sv_catsv_flags
5387
5388 Concatenates the string from SV C<ssv> onto the end of the string in SV
5389 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5390 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5391 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5392 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5393 and C<sv_catsv_mg> are implemented in terms of this function.
5394
5395 =cut */
5396
5397 void
5398 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5399 {
5400     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5401
5402     if (ssv) {
5403         STRLEN slen;
5404         const char *spv = SvPV_flags_const(ssv, slen, flags);
5405         if (spv) {
5406             if (flags & SV_GMAGIC)
5407                 SvGETMAGIC(dsv);
5408             sv_catpvn_flags(dsv, spv, slen,
5409                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5410             if (flags & SV_SMAGIC)
5411                 SvSETMAGIC(dsv);
5412         }
5413     }
5414 }
5415
5416 /*
5417 =for apidoc sv_catpv
5418
5419 Concatenates the C<NUL>-terminated string onto the end of the string which is
5420 in the SV.
5421 If the SV has the UTF-8 status set, then the bytes appended should be
5422 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5423
5424 =cut */
5425
5426 void
5427 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5428 {
5429     STRLEN len;
5430     STRLEN tlen;
5431     char *junk;
5432
5433     PERL_ARGS_ASSERT_SV_CATPV;
5434
5435     if (!ptr)
5436         return;
5437     junk = SvPV_force(sv, tlen);
5438     len = strlen(ptr);
5439     SvGROW(sv, tlen + len + 1);
5440     if (ptr == junk)
5441         ptr = SvPVX_const(sv);
5442     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5443     SvCUR_set(sv, SvCUR(sv) + len);
5444     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5445     SvTAINT(sv);
5446 }
5447
5448 /*
5449 =for apidoc sv_catpv_flags
5450
5451 Concatenates the C<NUL>-terminated string onto the end of the string which is
5452 in the SV.
5453 If the SV has the UTF-8 status set, then the bytes appended should
5454 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5455 on the modified SV if appropriate.
5456
5457 =cut
5458 */
5459
5460 void
5461 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5462 {
5463     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5464     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5465 }
5466
5467 /*
5468 =for apidoc sv_catpv_mg
5469
5470 Like C<sv_catpv>, but also handles 'set' magic.
5471
5472 =cut
5473 */
5474
5475 void
5476 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5477 {
5478     PERL_ARGS_ASSERT_SV_CATPV_MG;
5479
5480     sv_catpv(sv,ptr);
5481     SvSETMAGIC(sv);
5482 }
5483
5484 /*
5485 =for apidoc newSV
5486
5487 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5488 bytes of preallocated string space the SV should have.  An extra byte for a
5489 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5490 space is allocated.)  The reference count for the new SV is set to 1.
5491
5492 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5493 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5494 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5495 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5496 modules supporting older perls.
5497
5498 =cut
5499 */
5500
5501 SV *
5502 Perl_newSV(pTHX_ const STRLEN len)
5503 {
5504     SV *sv;
5505
5506     new_SV(sv);
5507     if (len) {
5508         sv_upgrade(sv, SVt_PV);
5509         SvGROW(sv, len + 1);
5510     }
5511     return sv;
5512 }
5513 /*
5514 =for apidoc sv_magicext
5515
5516 Adds magic to an SV, upgrading it if necessary.  Applies the
5517 supplied vtable and returns a pointer to the magic added.
5518
5519 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5520 In particular, you can add magic to SvREADONLY SVs, and add more than
5521 one instance of the same 'how'.
5522
5523 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5524 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5525 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5526 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5527
5528 (This is now used as a subroutine by C<sv_magic>.)
5529
5530 =cut
5531 */
5532 MAGIC * 
5533 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5534                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5535 {
5536     MAGIC* mg;
5537
5538     PERL_ARGS_ASSERT_SV_MAGICEXT;
5539
5540     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5541
5542     SvUPGRADE(sv, SVt_PVMG);
5543     Newxz(mg, 1, MAGIC);
5544     mg->mg_moremagic = SvMAGIC(sv);
5545     SvMAGIC_set(sv, mg);
5546
5547     /* Sometimes a magic contains a reference loop, where the sv and
5548        object refer to each other.  To prevent a reference loop that
5549        would prevent such objects being freed, we look for such loops
5550        and if we find one we avoid incrementing the object refcount.
5551
5552        Note we cannot do this to avoid self-tie loops as intervening RV must
5553        have its REFCNT incremented to keep it in existence.
5554
5555     */
5556     if (!obj || obj == sv ||
5557         how == PERL_MAGIC_arylen ||
5558         how == PERL_MAGIC_symtab ||
5559         (SvTYPE(obj) == SVt_PVGV &&
5560             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5561              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5562              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5563     {
5564         mg->mg_obj = obj;
5565     }
5566     else {
5567         mg->mg_obj = SvREFCNT_inc_simple(obj);
5568         mg->mg_flags |= MGf_REFCOUNTED;
5569     }
5570
5571     /* Normal self-ties simply pass a null object, and instead of
5572        using mg_obj directly, use the SvTIED_obj macro to produce a
5573        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5574        with an RV obj pointing to the glob containing the PVIO.  In
5575        this case, to avoid a reference loop, we need to weaken the
5576        reference.
5577     */
5578
5579     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5580         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5581     {
5582       sv_rvweaken(obj);
5583     }
5584
5585     mg->mg_type = how;
5586     mg->mg_len = namlen;
5587     if (name) {
5588         if (namlen > 0)
5589             mg->mg_ptr = savepvn(name, namlen);
5590         else if (namlen == HEf_SVKEY) {
5591             /* Yes, this is casting away const. This is only for the case of
5592                HEf_SVKEY. I think we need to document this aberation of the
5593                constness of the API, rather than making name non-const, as
5594                that change propagating outwards a long way.  */
5595             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5596         } else
5597             mg->mg_ptr = (char *) name;
5598     }
5599     mg->mg_virtual = (MGVTBL *) vtable;
5600
5601     mg_magical(sv);
5602     return mg;
5603 }
5604
5605 MAGIC *
5606 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5607 {
5608     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5609     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5610         /* This sv is only a delegate.  //g magic must be attached to
5611            its target. */
5612         vivify_defelem(sv);
5613         sv = LvTARG(sv);
5614     }
5615 #ifdef PERL_OLD_COPY_ON_WRITE
5616     if (SvIsCOW(sv))
5617         sv_force_normal_flags(sv, 0);
5618 #endif
5619     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5620                        &PL_vtbl_mglob, 0, 0);
5621 }
5622
5623 /*
5624 =for apidoc sv_magic
5625
5626 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5627 necessary, then adds a new magic item of type C<how> to the head of the
5628 magic list.
5629
5630 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5631 handling of the C<name> and C<namlen> arguments.
5632
5633 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5634 to add more than one instance of the same 'how'.
5635
5636 =cut
5637 */
5638
5639 void
5640 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5641              const char *const name, const I32 namlen)
5642 {
5643     const MGVTBL *vtable;
5644     MAGIC* mg;
5645     unsigned int flags;
5646     unsigned int vtable_index;
5647
5648     PERL_ARGS_ASSERT_SV_MAGIC;
5649
5650     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5651         || ((flags = PL_magic_data[how]),
5652             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5653             > magic_vtable_max))
5654         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5655
5656     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5657        Useful for attaching extension internal data to perl vars.
5658        Note that multiple extensions may clash if magical scalars
5659        etc holding private data from one are passed to another. */
5660
5661     vtable = (vtable_index == magic_vtable_max)
5662         ? NULL : PL_magic_vtables + vtable_index;
5663
5664 #ifdef PERL_OLD_COPY_ON_WRITE
5665     if (SvIsCOW(sv))
5666         sv_force_normal_flags(sv, 0);
5667 #endif
5668     if (SvREADONLY(sv)) {
5669         if (
5670             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5671            )
5672         {
5673             Perl_croak_no_modify();
5674         }
5675     }
5676     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5677         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5678             /* sv_magic() refuses to add a magic of the same 'how' as an
5679                existing one
5680              */
5681             if (how == PERL_MAGIC_taint)
5682                 mg->mg_len |= 1;
5683             return;
5684         }
5685     }
5686
5687     /* Force pos to be stored as characters, not bytes. */
5688     if (SvMAGICAL(sv) && DO_UTF8(sv)
5689       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5690       && mg->mg_len != -1
5691       && mg->mg_flags & MGf_BYTES) {
5692         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5693                                                SV_CONST_RETURN);
5694         mg->mg_flags &= ~MGf_BYTES;
5695     }
5696
5697     /* Rest of work is done else where */
5698     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5699
5700     switch (how) {
5701     case PERL_MAGIC_taint:
5702         mg->mg_len = 1;
5703         break;
5704     case PERL_MAGIC_ext:
5705     case PERL_MAGIC_dbfile:
5706         SvRMAGICAL_on(sv);
5707         break;
5708     }
5709 }
5710
5711 static int
5712 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5713 {
5714     MAGIC* mg;
5715     MAGIC** mgp;
5716
5717     assert(flags <= 1);
5718
5719     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5720         return 0;
5721     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5722     for (mg = *mgp; mg; mg = *mgp) {
5723         const MGVTBL* const virt = mg->mg_virtual;
5724         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5725             *mgp = mg->mg_moremagic;
5726             if (virt && virt->svt_free)
5727                 virt->svt_free(aTHX_ sv, mg);
5728             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5729                 if (mg->mg_len > 0)
5730                     Safefree(mg->mg_ptr);
5731                 else if (mg->mg_len == HEf_SVKEY)
5732                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5733                 else if (mg->mg_type == PERL_MAGIC_utf8)
5734                     Safefree(mg->mg_ptr);
5735             }
5736             if (mg->mg_flags & MGf_REFCOUNTED)
5737                 SvREFCNT_dec(mg->mg_obj);
5738             Safefree(mg);
5739         }
5740         else
5741             mgp = &mg->mg_moremagic;
5742     }
5743     if (SvMAGIC(sv)) {
5744         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5745             mg_magical(sv);     /*    else fix the flags now */
5746     }
5747     else {
5748         SvMAGICAL_off(sv);
5749         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5750     }
5751     return 0;
5752 }
5753
5754 /*
5755 =for apidoc sv_unmagic
5756
5757 Removes all magic of type C<type> from an SV.
5758
5759 =cut
5760 */
5761
5762 int
5763 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5764 {
5765     PERL_ARGS_ASSERT_SV_UNMAGIC;
5766     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5767 }
5768
5769 /*
5770 =for apidoc sv_unmagicext
5771
5772 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5773
5774 =cut
5775 */
5776
5777 int
5778 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5779 {
5780     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5781     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5782 }
5783
5784 /*
5785 =for apidoc sv_rvweaken
5786
5787 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5788 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5789 push a back-reference to this RV onto the array of backreferences
5790 associated with that magic.  If the RV is magical, set magic will be
5791 called after the RV is cleared.
5792
5793 =cut
5794 */
5795
5796 SV *
5797 Perl_sv_rvweaken(pTHX_ SV *const sv)
5798 {
5799     SV *tsv;
5800
5801     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5802
5803     if (!SvOK(sv))  /* let undefs pass */
5804         return sv;
5805     if (!SvROK(sv))
5806         Perl_croak(aTHX_ "Can't weaken a nonreference");
5807     else if (SvWEAKREF(sv)) {
5808         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5809         return sv;
5810     }
5811     else if (SvREADONLY(sv)) croak_no_modify();
5812     tsv = SvRV(sv);
5813     Perl_sv_add_backref(aTHX_ tsv, sv);
5814     SvWEAKREF_on(sv);
5815     SvREFCNT_dec_NN(tsv);
5816     return sv;
5817 }
5818
5819 /* Give tsv backref magic if it hasn't already got it, then push a
5820  * back-reference to sv onto the array associated with the backref magic.
5821  *
5822  * As an optimisation, if there's only one backref and it's not an AV,
5823  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5824  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5825  * active.)
5826  */
5827
5828 /* A discussion about the backreferences array and its refcount:
5829  *
5830  * The AV holding the backreferences is pointed to either as the mg_obj of
5831  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5832  * xhv_backreferences field. The array is created with a refcount
5833  * of 2. This means that if during global destruction the array gets
5834  * picked on before its parent to have its refcount decremented by the
5835  * random zapper, it won't actually be freed, meaning it's still there for
5836  * when its parent gets freed.
5837  *
5838  * When the parent SV is freed, the extra ref is killed by
5839  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5840  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5841  *
5842  * When a single backref SV is stored directly, it is not reference
5843  * counted.
5844  */
5845
5846 void
5847 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5848 {
5849     SV **svp;
5850     AV *av = NULL;
5851     MAGIC *mg = NULL;
5852
5853     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5854
5855     /* find slot to store array or singleton backref */
5856
5857     if (SvTYPE(tsv) == SVt_PVHV) {
5858         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5859     } else {
5860         if (SvMAGICAL(tsv))
5861             mg = mg_find(tsv, PERL_MAGIC_backref);
5862         if (!mg)
5863             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5864         svp = &(mg->mg_obj);
5865     }
5866
5867     /* create or retrieve the array */
5868
5869     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5870         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5871     ) {
5872         /* create array */
5873         if (mg)
5874             mg->mg_flags |= MGf_REFCOUNTED;
5875         av = newAV();
5876         AvREAL_off(av);
5877         SvREFCNT_inc_simple_void_NN(av);
5878         /* av now has a refcnt of 2; see discussion above */
5879         av_extend(av, *svp ? 2 : 1);
5880         if (*svp) {
5881             /* move single existing backref to the array */
5882             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5883         }
5884         *svp = (SV*)av;
5885     }
5886     else {
5887         av = MUTABLE_AV(*svp);
5888         if (!av) {
5889             /* optimisation: store single backref directly in HvAUX or mg_obj */
5890             *svp = sv;
5891             return;
5892         }
5893         assert(SvTYPE(av) == SVt_PVAV);
5894         if (AvFILLp(av) >= AvMAX(av)) {
5895             av_extend(av, AvFILLp(av)+1);
5896         }
5897     }
5898     /* push new backref */
5899     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5900 }
5901
5902 /* delete a back-reference to ourselves from the backref magic associated
5903  * with the SV we point to.
5904  */
5905
5906 void
5907 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5908 {
5909     SV **svp = NULL;
5910
5911     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5912
5913     if (SvTYPE(tsv) == SVt_PVHV) {
5914         if (SvOOK(tsv))
5915             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5916     }
5917     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5918         /* It's possible for the the last (strong) reference to tsv to have
5919            become freed *before* the last thing holding a weak reference.
5920            If both survive longer than the backreferences array, then when
5921            the referent's reference count drops to 0 and it is freed, it's
5922            not able to chase the backreferences, so they aren't NULLed.
5923
5924            For example, a CV holds a weak reference to its stash. If both the
5925            CV and the stash survive longer than the backreferences array,
5926            and the CV gets picked for the SvBREAK() treatment first,
5927            *and* it turns out that the stash is only being kept alive because
5928            of an our variable in the pad of the CV, then midway during CV
5929            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5930            It ends up pointing to the freed HV. Hence it's chased in here, and
5931            if this block wasn't here, it would hit the !svp panic just below.
5932
5933            I don't believe that "better" destruction ordering is going to help
5934            here - during global destruction there's always going to be the
5935            chance that something goes out of order. We've tried to make it
5936            foolproof before, and it only resulted in evolutionary pressure on
5937            fools. Which made us look foolish for our hubris. :-(
5938         */
5939         return;
5940     }
5941     else {
5942         MAGIC *const mg
5943             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5944         svp =  mg ? &(mg->mg_obj) : NULL;
5945     }
5946
5947     if (!svp)
5948         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5949     if (!*svp) {
5950         /* It's possible that sv is being freed recursively part way through the
5951            freeing of tsv. If this happens, the backreferences array of tsv has
5952            already been freed, and so svp will be NULL. If this is the case,
5953            we should not panic. Instead, nothing needs doing, so return.  */
5954         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5955             return;
5956         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5957                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5958     }
5959
5960     if (SvTYPE(*svp) == SVt_PVAV) {
5961 #ifdef DEBUGGING
5962         int count = 1;
5963 #endif
5964         AV * const av = (AV*)*svp;
5965         SSize_t fill;
5966         assert(!SvIS_FREED(av));
5967         fill = AvFILLp(av);
5968         assert(fill > -1);
5969         svp = AvARRAY(av);
5970         /* for an SV with N weak references to it, if all those
5971          * weak refs are deleted, then sv_del_backref will be called
5972          * N times and O(N^2) compares will be done within the backref
5973          * array. To ameliorate this potential slowness, we:
5974          * 1) make sure this code is as tight as possible;
5975          * 2) when looking for SV, look for it at both the head and tail of the
5976          *    array first before searching the rest, since some create/destroy
5977          *    patterns will cause the backrefs to be freed in order.
5978          */
5979         if (*svp == sv) {
5980             AvARRAY(av)++;
5981             AvMAX(av)--;
5982         }
5983         else {
5984             SV **p = &svp[fill];
5985             SV *const topsv = *p;
5986             if (topsv != sv) {
5987 #ifdef DEBUGGING
5988                 count = 0;
5989 #endif
5990                 while (--p > svp) {
5991                     if (*p == sv) {
5992                         /* We weren't the last entry.
5993                            An unordered list has this property that you
5994                            can take the last element off the end to fill
5995                            the hole, and it's still an unordered list :-)
5996                         */
5997                         *p = topsv;
5998 #ifdef DEBUGGING
5999                         count++;
6000 #else
6001                         break; /* should only be one */
6002 #endif
6003                     }
6004                 }
6005             }
6006         }
6007         assert(count ==1);
6008         AvFILLp(av) = fill-1;
6009     }
6010     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6011         /* freed AV; skip */
6012     }
6013     else {
6014         /* optimisation: only a single backref, stored directly */
6015         if (*svp != sv)
6016             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6017                        (void*)*svp, (void*)sv);
6018         *svp = NULL;
6019     }
6020
6021 }
6022
6023 void
6024 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6025 {
6026     SV **svp;
6027     SV **last;
6028     bool is_array;
6029
6030     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6031
6032     if (!av)
6033         return;
6034
6035     /* after multiple passes through Perl_sv_clean_all() for a thingy
6036      * that has badly leaked, the backref array may have gotten freed,
6037      * since we only protect it against 1 round of cleanup */
6038     if (SvIS_FREED(av)) {
6039         if (PL_in_clean_all) /* All is fair */
6040             return;
6041         Perl_croak(aTHX_
6042                    "panic: magic_killbackrefs (freed backref AV/SV)");
6043     }
6044
6045
6046     is_array = (SvTYPE(av) == SVt_PVAV);
6047     if (is_array) {
6048         assert(!SvIS_FREED(av));
6049         svp = AvARRAY(av);
6050         if (svp)
6051             last = svp + AvFILLp(av);
6052     }
6053     else {
6054         /* optimisation: only a single backref, stored directly */
6055         svp = (SV**)&av;
6056         last = svp;
6057     }
6058
6059     if (svp) {
6060         while (svp <= last) {
6061             if (*svp) {
6062                 SV *const referrer = *svp;
6063                 if (SvWEAKREF(referrer)) {
6064                     /* XXX Should we check that it hasn't changed? */
6065                     assert(SvROK(referrer));
6066                     SvRV_set(referrer, 0);
6067                     SvOK_off(referrer);
6068                     SvWEAKREF_off(referrer);
6069                     SvSETMAGIC(referrer);
6070                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6071                            SvTYPE(referrer) == SVt_PVLV) {
6072                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6073                     /* You lookin' at me?  */
6074                     assert(GvSTASH(referrer));
6075                     assert(GvSTASH(referrer) == (const HV *)sv);
6076                     GvSTASH(referrer) = 0;
6077                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6078                            SvTYPE(referrer) == SVt_PVFM) {
6079                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6080                         /* You lookin' at me?  */
6081                         assert(CvSTASH(referrer));
6082                         assert(CvSTASH(referrer) == (const HV *)sv);
6083                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6084                     }
6085                     else {
6086                         assert(SvTYPE(sv) == SVt_PVGV);
6087                         /* You lookin' at me?  */
6088                         assert(CvGV(referrer));
6089                         assert(CvGV(referrer) == (const GV *)sv);
6090                         anonymise_cv_maybe(MUTABLE_GV(sv),
6091                                                 MUTABLE_CV(referrer));
6092                     }
6093
6094                 } else {
6095                     Perl_croak(aTHX_
6096                                "panic: magic_killbackrefs (flags=%"UVxf")",
6097                                (UV)SvFLAGS(referrer));
6098                 }
6099
6100                 if (is_array)
6101                     *svp = NULL;
6102             }
6103             svp++;
6104         }
6105     }
6106     if (is_array) {
6107         AvFILLp(av) = -1;
6108         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6109     }
6110     return;
6111 }
6112
6113 /*
6114 =for apidoc sv_insert
6115
6116 Inserts a string at the specified offset/length within the SV.  Similar to
6117 the Perl substr() function.  Handles get magic.
6118
6119 =for apidoc sv_insert_flags
6120
6121 Same as C<sv_insert>, but the extra C<flags> are passed to the
6122 C<SvPV_force_flags> that applies to C<bigstr>.
6123
6124 =cut
6125 */
6126
6127 void
6128 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6129 {
6130     char *big;
6131     char *mid;
6132     char *midend;
6133     char *bigend;
6134     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6135     STRLEN curlen;
6136
6137     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6138
6139     if (!bigstr)
6140         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6141     SvPV_force_flags(bigstr, curlen, flags);
6142     (void)SvPOK_only_UTF8(bigstr);
6143     if (offset + len > curlen) {
6144         SvGROW(bigstr, offset+len+1);
6145         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6146         SvCUR_set(bigstr, offset+len);
6147     }
6148
6149     SvTAINT(bigstr);
6150     i = littlelen - len;
6151     if (i > 0) {                        /* string might grow */
6152         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6153         mid = big + offset + len;
6154         midend = bigend = big + SvCUR(bigstr);
6155         bigend += i;
6156         *bigend = '\0';
6157         while (midend > mid)            /* shove everything down */
6158             *--bigend = *--midend;
6159         Move(little,big+offset,littlelen,char);
6160         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6161         SvSETMAGIC(bigstr);
6162         return;
6163     }
6164     else if (i == 0) {
6165         Move(little,SvPVX(bigstr)+offset,len,char);
6166         SvSETMAGIC(bigstr);
6167         return;
6168     }
6169
6170     big = SvPVX(bigstr);
6171     mid = big + offset;
6172     midend = mid + len;
6173     bigend = big + SvCUR(bigstr);
6174
6175     if (midend > bigend)
6176         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6177                    midend, bigend);
6178
6179     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6180         if (littlelen) {
6181             Move(little, mid, littlelen,char);
6182             mid += littlelen;
6183         }
6184         i = bigend - midend;
6185         if (i > 0) {
6186             Move(midend, mid, i,char);
6187             mid += i;
6188         }
6189         *mid = '\0';
6190         SvCUR_set(bigstr, mid - big);
6191     }
6192     else if ((i = mid - big)) { /* faster from front */
6193         midend -= littlelen;
6194         mid = midend;
6195         Move(big, midend - i, i, char);
6196         sv_chop(bigstr,midend-i);
6197         if (littlelen)
6198             Move(little, mid, littlelen,char);
6199     }
6200     else if (littlelen) {
6201         midend -= littlelen;
6202         sv_chop(bigstr,midend);
6203         Move(little,midend,littlelen,char);
6204     }
6205     else {
6206         sv_chop(bigstr,midend);
6207     }
6208     SvSETMAGIC(bigstr);
6209 }
6210
6211 /*
6212 =for apidoc sv_replace
6213
6214 Make the first argument a copy of the second, then delete the original.
6215 The target SV physically takes over ownership of the body of the source SV
6216 and inherits its flags; however, the target keeps any magic it owns,
6217 and any magic in the source is discarded.
6218 Note that this is a rather specialist SV copying operation; most of the
6219 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6220
6221 =cut
6222 */
6223
6224 void
6225 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6226 {
6227     const U32 refcnt = SvREFCNT(sv);
6228
6229     PERL_ARGS_ASSERT_SV_REPLACE;
6230
6231     SV_CHECK_THINKFIRST_COW_DROP(sv);
6232     if (SvREFCNT(nsv) != 1) {
6233         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6234                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6235     }
6236     if (SvMAGICAL(sv)) {
6237         if (SvMAGICAL(nsv))
6238             mg_free(nsv);
6239         else
6240             sv_upgrade(nsv, SVt_PVMG);
6241         SvMAGIC_set(nsv, SvMAGIC(sv));
6242         SvFLAGS(nsv) |= SvMAGICAL(sv);
6243         SvMAGICAL_off(sv);
6244         SvMAGIC_set(sv, NULL);
6245     }
6246     SvREFCNT(sv) = 0;
6247     sv_clear(sv);
6248     assert(!SvREFCNT(sv));
6249 #ifdef DEBUG_LEAKING_SCALARS
6250     sv->sv_flags  = nsv->sv_flags;
6251     sv->sv_any    = nsv->sv_any;
6252     sv->sv_refcnt = nsv->sv_refcnt;
6253     sv->sv_u      = nsv->sv_u;
6254 #else
6255     StructCopy(nsv,sv,SV);
6256 #endif
6257     if(SvTYPE(sv) == SVt_IV) {
6258         SvANY(sv)
6259             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6260     }
6261         
6262
6263 #ifdef PERL_OLD_COPY_ON_WRITE
6264     if (SvIsCOW_normal(nsv)) {
6265         /* We need to follow the pointers around the loop to make the
6266            previous SV point to sv, rather than nsv.  */
6267         SV *next;
6268         SV *current = nsv;
6269         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6270             assert(next);
6271             current = next;
6272             assert(SvPVX_const(current) == SvPVX_const(nsv));
6273         }
6274         /* Make the SV before us point to the SV after us.  */
6275         if (DEBUG_C_TEST) {
6276             PerlIO_printf(Perl_debug_log, "previous is\n");
6277             sv_dump(current);
6278             PerlIO_printf(Perl_debug_log,
6279                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6280                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6281         }
6282         SV_COW_NEXT_SV_SET(current, sv);
6283     }
6284 #endif
6285     SvREFCNT(sv) = refcnt;
6286     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6287     SvREFCNT(nsv) = 0;
6288     del_SV(nsv);
6289 }
6290
6291 /* We're about to free a GV which has a CV that refers back to us.
6292  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6293  * field) */
6294
6295 STATIC void
6296 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6297 {
6298     SV *gvname;
6299     GV *anongv;
6300
6301     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6302
6303     /* be assertive! */
6304     assert(SvREFCNT(gv) == 0);
6305     assert(isGV(gv) && isGV_with_GP(gv));
6306     assert(GvGP(gv));
6307     assert(!CvANON(cv));
6308     assert(CvGV(cv) == gv);
6309     assert(!CvNAMED(cv));
6310
6311     /* will the CV shortly be freed by gp_free() ? */
6312     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6313         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6314         return;
6315     }
6316
6317     /* if not, anonymise: */
6318     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6319                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6320                     : newSVpvn_flags( "__ANON__", 8, 0 );
6321     sv_catpvs(gvname, "::__ANON__");
6322     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6323     SvREFCNT_dec_NN(gvname);
6324
6325     CvANON_on(cv);
6326     CvCVGV_RC_on(cv);
6327     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6328 }
6329
6330
6331 /*
6332 =for apidoc sv_clear
6333
6334 Clear an SV: call any destructors, free up any memory used by the body,
6335 and free the body itself.  The SV's head is I<not> freed, although
6336 its type is set to all 1's so that it won't inadvertently be assumed
6337 to be live during global destruction etc.
6338 This function should only be called when REFCNT is zero.  Most of the time
6339 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6340 instead.
6341
6342 =cut
6343 */
6344
6345 void
6346 Perl_sv_clear(pTHX_ SV *const orig_sv)
6347 {
6348     dVAR;
6349     HV *stash;
6350     U32 type;
6351     const struct body_details *sv_type_details;
6352     SV* iter_sv = NULL;
6353     SV* next_sv = NULL;
6354     SV *sv = orig_sv;
6355     STRLEN hash_index;
6356
6357     PERL_ARGS_ASSERT_SV_CLEAR;
6358
6359     /* within this loop, sv is the SV currently being freed, and
6360      * iter_sv is the most recent AV or whatever that's being iterated
6361      * over to provide more SVs */
6362
6363     while (sv) {
6364
6365         type = SvTYPE(sv);
6366
6367         assert(SvREFCNT(sv) == 0);
6368         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6369
6370         if (type <= SVt_IV) {
6371             /* See the comment in sv.h about the collusion between this
6372              * early return and the overloading of the NULL slots in the
6373              * size table.  */
6374             if (SvROK(sv))
6375                 goto free_rv;
6376             SvFLAGS(sv) &= SVf_BREAK;
6377             SvFLAGS(sv) |= SVTYPEMASK;
6378             goto free_head;
6379         }
6380
6381         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6382
6383         if (type >= SVt_PVMG) {
6384             if (SvOBJECT(sv)) {
6385                 if (!curse(sv, 1)) goto get_next_sv;
6386                 type = SvTYPE(sv); /* destructor may have changed it */
6387             }
6388             /* Free back-references before magic, in case the magic calls
6389              * Perl code that has weak references to sv. */
6390             if (type == SVt_PVHV) {
6391                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6392                 if (SvMAGIC(sv))
6393                     mg_free(sv);
6394             }
6395             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6396                 SvREFCNT_dec(SvOURSTASH(sv));
6397             }
6398             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6399                 assert(!SvMAGICAL(sv));
6400             } else if (SvMAGIC(sv)) {
6401                 /* Free back-references before other types of magic. */
6402                 sv_unmagic(sv, PERL_MAGIC_backref);
6403                 mg_free(sv);
6404             }
6405             SvMAGICAL_off(sv);
6406             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6407                 SvREFCNT_dec(SvSTASH(sv));
6408         }
6409         switch (type) {
6410             /* case SVt_INVLIST: */
6411         case SVt_PVIO:
6412             if (IoIFP(sv) &&
6413                 IoIFP(sv) != PerlIO_stdin() &&
6414                 IoIFP(sv) != PerlIO_stdout() &&
6415                 IoIFP(sv) != PerlIO_stderr() &&
6416                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6417             {
6418                 io_close(MUTABLE_IO(sv), FALSE);
6419             }
6420             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6421                 PerlDir_close(IoDIRP(sv));
6422             IoDIRP(sv) = (DIR*)NULL;
6423             Safefree(IoTOP_NAME(sv));
6424             Safefree(IoFMT_NAME(sv));
6425             Safefree(IoBOTTOM_NAME(sv));
6426             if ((const GV *)sv == PL_statgv)
6427                 PL_statgv = NULL;
6428             goto freescalar;
6429         case SVt_REGEXP:
6430             /* FIXME for plugins */
6431           freeregexp:
6432             pregfree2((REGEXP*) sv);
6433             goto freescalar;
6434         case SVt_PVCV:
6435         case SVt_PVFM:
6436             cv_undef(MUTABLE_CV(sv));
6437             /* If we're in a stash, we don't own a reference to it.
6438              * However it does have a back reference to us, which needs to
6439              * be cleared.  */
6440             if ((stash = CvSTASH(sv)))
6441                 sv_del_backref(MUTABLE_SV(stash), sv);
6442             goto freescalar;
6443         case SVt_PVHV:
6444             if (PL_last_swash_hv == (const HV *)sv) {
6445                 PL_last_swash_hv = NULL;
6446             }
6447             if (HvTOTALKEYS((HV*)sv) > 0) {
6448                 const char *name;
6449                 /* this statement should match the one at the beginning of
6450                  * hv_undef_flags() */
6451                 if (   PL_phase != PERL_PHASE_DESTRUCT
6452                     && (name = HvNAME((HV*)sv)))
6453                 {
6454                     if (PL_stashcache) {
6455                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6456                                      SVfARG(sv)));
6457                         (void)hv_deletehek(PL_stashcache,
6458                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6459                     }
6460                     hv_name_set((HV*)sv, NULL, 0, 0);
6461                 }
6462
6463                 /* save old iter_sv in unused SvSTASH field */
6464                 assert(!SvOBJECT(sv));
6465                 SvSTASH(sv) = (HV*)iter_sv;
6466                 iter_sv = sv;
6467
6468                 /* save old hash_index in unused SvMAGIC field */
6469                 assert(!SvMAGICAL(sv));
6470                 assert(!SvMAGIC(sv));
6471                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6472                 hash_index = 0;
6473
6474                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6475                 goto get_next_sv; /* process this new sv */
6476             }
6477             /* free empty hash */
6478             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6479             assert(!HvARRAY((HV*)sv));
6480             break;
6481         case SVt_PVAV:
6482             {
6483                 AV* av = MUTABLE_AV(sv);
6484                 if (PL_comppad == av) {
6485                     PL_comppad = NULL;
6486                     PL_curpad = NULL;
6487                 }
6488                 if (AvREAL(av) && AvFILLp(av) > -1) {
6489                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6490                     /* save old iter_sv in top-most slot of AV,
6491                      * and pray that it doesn't get wiped in the meantime */
6492                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6493                     iter_sv = sv;
6494                     goto get_next_sv; /* process this new sv */
6495                 }
6496                 Safefree(AvALLOC(av));
6497             }
6498
6499             break;
6500         case SVt_PVLV:
6501             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6502                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6503                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6504                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6505             }
6506             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6507                 SvREFCNT_dec(LvTARG(sv));
6508             if (isREGEXP(sv)) goto freeregexp;
6509         case SVt_PVGV:
6510             if (isGV_with_GP(sv)) {
6511                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6512                    && HvENAME_get(stash))
6513                     mro_method_changed_in(stash);
6514                 gp_free(MUTABLE_GV(sv));
6515                 if (GvNAME_HEK(sv))
6516                     unshare_hek(GvNAME_HEK(sv));
6517                 /* If we're in a stash, we don't own a reference to it.
6518                  * However it does have a back reference to us, which
6519                  * needs to be cleared.  */
6520                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6521                         sv_del_backref(MUTABLE_SV(stash), sv);
6522             }
6523             /* FIXME. There are probably more unreferenced pointers to SVs
6524              * in the interpreter struct that we should check and tidy in
6525              * a similar fashion to this:  */
6526             /* See also S_sv_unglob, which does the same thing. */
6527             if ((const GV *)sv == PL_last_in_gv)
6528                 PL_last_in_gv = NULL;
6529             else if ((const GV *)sv == PL_statgv)
6530                 PL_statgv = NULL;
6531             else if ((const GV *)sv == PL_stderrgv)
6532                 PL_stderrgv = NULL;
6533         case SVt_PVMG:
6534         case SVt_PVNV:
6535         case SVt_PVIV:
6536         case SVt_INVLIST:
6537         case SVt_PV:
6538           freescalar:
6539             /* Don't bother with SvOOK_off(sv); as we're only going to
6540              * free it.  */
6541             if (SvOOK(sv)) {
6542                 STRLEN offset;
6543                 SvOOK_offset(sv, offset);
6544                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6545                 /* Don't even bother with turning off the OOK flag.  */
6546             }
6547             if (SvROK(sv)) {
6548             free_rv:
6549                 {
6550                     SV * const target = SvRV(sv);
6551                     if (SvWEAKREF(sv))
6552                         sv_del_backref(target, sv);
6553                     else
6554                         next_sv = target;
6555                 }
6556             }
6557 #ifdef PERL_ANY_COW
6558             else if (SvPVX_const(sv)
6559                      && !(SvTYPE(sv) == SVt_PVIO
6560                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6561             {
6562                 if (SvIsCOW(sv)) {
6563                     if (DEBUG_C_TEST) {
6564                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6565                         sv_dump(sv);
6566                     }
6567                     if (SvLEN(sv)) {
6568 # ifdef PERL_OLD_COPY_ON_WRITE
6569                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6570 # else
6571                         if (CowREFCNT(sv)) {
6572                             sv_buf_to_rw(sv);
6573                             CowREFCNT(sv)--;
6574                             sv_buf_to_ro(sv);
6575                             SvLEN_set(sv, 0);
6576                         }
6577 # endif
6578                     } else {
6579                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6580                     }
6581
6582                 }
6583 # ifdef PERL_OLD_COPY_ON_WRITE
6584                 else
6585 # endif
6586                 if (SvLEN(sv)) {
6587                     Safefree(SvPVX_mutable(sv));
6588                 }
6589             }
6590 #else
6591             else if (SvPVX_const(sv) && SvLEN(sv)
6592                      && !(SvTYPE(sv) == SVt_PVIO
6593                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6594                 Safefree(SvPVX_mutable(sv));
6595             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6596                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6597             }
6598 #endif
6599             break;
6600         case SVt_NV:
6601             break;
6602         }
6603
6604       free_body:
6605
6606         SvFLAGS(sv) &= SVf_BREAK;
6607         SvFLAGS(sv) |= SVTYPEMASK;
6608
6609         sv_type_details = bodies_by_type + type;
6610         if (sv_type_details->arena) {
6611             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6612                      &PL_body_roots[type]);
6613         }
6614         else if (sv_type_details->body_size) {
6615             safefree(SvANY(sv));
6616         }
6617
6618       free_head:
6619         /* caller is responsible for freeing the head of the original sv */
6620         if (sv != orig_sv && !SvREFCNT(sv))
6621             del_SV(sv);
6622
6623         /* grab and free next sv, if any */
6624       get_next_sv:
6625         while (1) {
6626             sv = NULL;
6627             if (next_sv) {
6628                 sv = next_sv;
6629                 next_sv = NULL;
6630             }
6631             else if (!iter_sv) {
6632                 break;
6633             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6634                 AV *const av = (AV*)iter_sv;
6635                 if (AvFILLp(av) > -1) {
6636                     sv = AvARRAY(av)[AvFILLp(av)--];
6637                 }
6638                 else { /* no more elements of current AV to free */
6639                     sv = iter_sv;
6640                     type = SvTYPE(sv);
6641                     /* restore previous value, squirrelled away */
6642                     iter_sv = AvARRAY(av)[AvMAX(av)];
6643                     Safefree(AvALLOC(av));
6644                     goto free_body;
6645                 }
6646             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6647                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6648                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6649                     /* no more elements of current HV to free */
6650                     sv = iter_sv;
6651                     type = SvTYPE(sv);
6652                     /* Restore previous values of iter_sv and hash_index,
6653                      * squirrelled away */
6654                     assert(!SvOBJECT(sv));
6655                     iter_sv = (SV*)SvSTASH(sv);
6656                     assert(!SvMAGICAL(sv));
6657                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6658 #ifdef DEBUGGING
6659                     /* perl -DA does not like rubbish in SvMAGIC. */
6660                     SvMAGIC_set(sv, 0);
6661 #endif
6662
6663                     /* free any remaining detritus from the hash struct */
6664                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6665                     assert(!HvARRAY((HV*)sv));
6666                     goto free_body;
6667                 }
6668             }
6669
6670             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6671
6672             if (!sv)
6673                 continue;
6674             if (!SvREFCNT(sv)) {
6675                 sv_free(sv);
6676                 continue;
6677             }
6678             if (--(SvREFCNT(sv)))
6679                 continue;
6680 #ifdef DEBUGGING
6681             if (SvTEMP(sv)) {
6682                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6683                          "Attempt to free temp prematurely: SV 0x%"UVxf
6684                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6685                 continue;
6686             }
6687 #endif
6688             if (SvIMMORTAL(sv)) {
6689                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6690                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6691                 continue;
6692             }
6693             break;
6694         } /* while 1 */
6695
6696     } /* while sv */
6697 }
6698
6699 /* This routine curses the sv itself, not the object referenced by sv. So
6700    sv does not have to be ROK. */
6701
6702 static bool
6703 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6704     PERL_ARGS_ASSERT_CURSE;
6705     assert(SvOBJECT(sv));
6706
6707     if (PL_defstash &&  /* Still have a symbol table? */
6708         SvDESTROYABLE(sv))
6709     {
6710         dSP;
6711         HV* stash;
6712         do {
6713           stash = SvSTASH(sv);
6714           assert(SvTYPE(stash) == SVt_PVHV);
6715           if (HvNAME(stash)) {
6716             CV* destructor = NULL;
6717             assert (SvOOK(stash));
6718             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6719             if (!destructor || HvMROMETA(stash)->destroy_gen
6720                                 != PL_sub_generation)
6721             {
6722                 GV * const gv =
6723                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6724                 if (gv) destructor = GvCV(gv);
6725                 if (!SvOBJECT(stash))
6726                 {
6727                     SvSTASH(stash) =
6728                         destructor ? (HV *)destructor : ((HV *)0)+1;
6729                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6730                         PL_sub_generation;
6731                 }
6732             }
6733             assert(!destructor || destructor == ((CV *)0)+1
6734                 || SvTYPE(destructor) == SVt_PVCV);
6735             if (destructor && destructor != ((CV *)0)+1
6736                 /* A constant subroutine can have no side effects, so
6737                    don't bother calling it.  */
6738                 && !CvCONST(destructor)
6739                 /* Don't bother calling an empty destructor or one that
6740                    returns immediately. */
6741                 && (CvISXSUB(destructor)
6742                 || (CvSTART(destructor)
6743                     && (CvSTART(destructor)->op_next->op_type
6744                                         != OP_LEAVESUB)
6745                     && (CvSTART(destructor)->op_next->op_type
6746                                         != OP_PUSHMARK
6747                         || CvSTART(destructor)->op_next->op_next->op_type
6748                                         != OP_RETURN
6749                        )
6750                    ))
6751                )
6752             {
6753                 SV* const tmpref = newRV(sv);
6754                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6755                 ENTER;
6756                 PUSHSTACKi(PERLSI_DESTROY);
6757                 EXTEND(SP, 2);
6758                 PUSHMARK(SP);
6759                 PUSHs(tmpref);
6760                 PUTBACK;
6761                 call_sv(MUTABLE_SV(destructor),
6762                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6763                 POPSTACK;
6764                 SPAGAIN;
6765                 LEAVE;
6766                 if(SvREFCNT(tmpref) < 2) {
6767                     /* tmpref is not kept alive! */
6768                     SvREFCNT(sv)--;
6769                     SvRV_set(tmpref, NULL);
6770                     SvROK_off(tmpref);
6771                 }
6772                 SvREFCNT_dec_NN(tmpref);
6773             }
6774           }
6775         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6776
6777
6778         if (check_refcnt && SvREFCNT(sv)) {
6779             if (PL_in_clean_objs)
6780                 Perl_croak(aTHX_
6781                   "DESTROY created new reference to dead object '%"HEKf"'",
6782                    HEKfARG(HvNAME_HEK(stash)));
6783             /* DESTROY gave object new lease on life */
6784             return FALSE;
6785         }
6786     }
6787
6788     if (SvOBJECT(sv)) {
6789         HV * const stash = SvSTASH(sv);
6790         /* Curse before freeing the stash, as freeing the stash could cause
6791            a recursive call into S_curse. */
6792         SvOBJECT_off(sv);       /* Curse the object. */
6793         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6794         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6795     }
6796     return TRUE;
6797 }
6798
6799 /*
6800 =for apidoc sv_newref
6801
6802 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6803 instead.
6804
6805 =cut
6806 */
6807
6808 SV *
6809 Perl_sv_newref(pTHX_ SV *const sv)
6810 {
6811     PERL_UNUSED_CONTEXT;
6812     if (sv)
6813         (SvREFCNT(sv))++;
6814     return sv;
6815 }
6816
6817 /*
6818 =for apidoc sv_free
6819
6820 Decrement an SV's reference count, and if it drops to zero, call
6821 C<sv_clear> to invoke destructors and free up any memory used by
6822 the body; finally, deallocate the SV's head itself.
6823 Normally called via a wrapper macro C<SvREFCNT_dec>.
6824
6825 =cut
6826 */
6827
6828 void
6829 Perl_sv_free(pTHX_ SV *const sv)
6830 {
6831     SvREFCNT_dec(sv);
6832 }
6833
6834
6835 /* Private helper function for SvREFCNT_dec().
6836  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6837
6838 void
6839 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6840 {
6841     dVAR;
6842
6843     PERL_ARGS_ASSERT_SV_FREE2;
6844
6845     if (LIKELY( rc == 1 )) {
6846         /* normal case */
6847         SvREFCNT(sv) = 0;
6848
6849 #ifdef DEBUGGING
6850         if (SvTEMP(sv)) {
6851             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6852                              "Attempt to free temp prematurely: SV 0x%"UVxf
6853                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6854             return;
6855         }
6856 #endif
6857         if (SvIMMORTAL(sv)) {
6858             /* make sure SvREFCNT(sv)==0 happens very seldom */
6859             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6860             return;
6861         }
6862         sv_clear(sv);
6863         if (! SvREFCNT(sv)) /* may have have been resurrected */
6864             del_SV(sv);
6865         return;
6866     }
6867
6868     /* handle exceptional cases */
6869
6870     assert(rc == 0);
6871
6872     if (SvFLAGS(sv) & SVf_BREAK)
6873         /* this SV's refcnt has been artificially decremented to
6874          * trigger cleanup */
6875         return;
6876     if (PL_in_clean_all) /* All is fair */
6877         return;
6878     if (SvIMMORTAL(sv)) {
6879         /* make sure SvREFCNT(sv)==0 happens very seldom */
6880         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6881         return;
6882     }
6883     if (ckWARN_d(WARN_INTERNAL)) {
6884 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6885         Perl_dump_sv_child(aTHX_ sv);
6886 #else
6887     #ifdef DEBUG_LEAKING_SCALARS
6888         sv_dump(sv);
6889     #endif
6890 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6891         if (PL_warnhook == PERL_WARNHOOK_FATAL
6892             || ckDEAD(packWARN(WARN_INTERNAL))) {
6893             /* Don't let Perl_warner cause us to escape our fate:  */
6894             abort();
6895         }
6896 #endif
6897         /* This may not return:  */
6898         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6899                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6900                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6901 #endif
6902     }
6903 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6904     abort();
6905 #endif
6906
6907 }
6908
6909
6910 /*
6911 =for apidoc sv_len
6912
6913 Returns the length of the string in the SV.  Handles magic and type
6914 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6915 gives raw access to the xpv_cur slot.
6916
6917 =cut
6918 */
6919
6920 STRLEN
6921 Perl_sv_len(pTHX_ SV *const sv)
6922 {
6923     STRLEN len;
6924
6925     if (!sv)
6926         return 0;
6927
6928     (void)SvPV_const(sv, len);
6929     return len;
6930 }
6931
6932 /*
6933 =for apidoc sv_len_utf8
6934
6935 Returns the number of characters in the string in an SV, counting wide
6936 UTF-8 bytes as a single character.  Handles magic and type coercion.
6937
6938 =cut
6939 */
6940
6941 /*
6942  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6943  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6944  * (Note that the mg_len is not the length of the mg_ptr field.
6945  * This allows the cache to store the character length of the string without
6946  * needing to malloc() extra storage to attach to the mg_ptr.)
6947  *
6948  */
6949
6950 STRLEN
6951 Perl_sv_len_utf8(pTHX_ SV *const sv)
6952 {
6953     if (!sv)
6954         return 0;
6955
6956     SvGETMAGIC(sv);
6957     return sv_len_utf8_nomg(sv);
6958 }
6959
6960 STRLEN
6961 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6962 {
6963     STRLEN len;
6964     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6965
6966     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6967
6968     if (PL_utf8cache && SvUTF8(sv)) {
6969             STRLEN ulen;
6970             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6971
6972             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6973                 if (mg->mg_len != -1)
6974                     ulen = mg->mg_len;
6975                 else {
6976                     /* We can use the offset cache for a headstart.
6977                        The longer value is stored in the first pair.  */
6978                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6979
6980                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6981                                                        s + len);
6982                 }
6983                 
6984                 if (PL_utf8cache < 0) {
6985                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6986                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6987                 }
6988             }
6989             else {
6990                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6991                 utf8_mg_len_cache_update(sv, &mg, ulen);
6992             }
6993             return ulen;
6994     }
6995     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6996 }
6997
6998 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6999    offset.  */
7000 static STRLEN
7001 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7002                       STRLEN *const uoffset_p, bool *const at_end)
7003 {
7004     const U8 *s = start;
7005     STRLEN uoffset = *uoffset_p;
7006
7007     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7008
7009     while (s < send && uoffset) {
7010         --uoffset;
7011         s += UTF8SKIP(s);
7012     }
7013     if (s == send) {
7014         *at_end = TRUE;
7015     }
7016     else if (s > send) {
7017         *at_end = TRUE;
7018         /* This is the existing behaviour. Possibly it should be a croak, as
7019            it's actually a bounds error  */
7020         s = send;
7021     }
7022     *uoffset_p -= uoffset;
7023     return s - start;
7024 }
7025
7026 /* Given the length of the string in both bytes and UTF-8 characters, decide
7027    whether to walk forwards or backwards to find the byte corresponding to
7028    the passed in UTF-8 offset.  */
7029 static STRLEN
7030 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7031                     STRLEN uoffset, const STRLEN uend)
7032 {
7033     STRLEN backw = uend - uoffset;
7034
7035     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7036
7037     if (uoffset < 2 * backw) {
7038         /* The assumption is that going forwards is twice the speed of going
7039            forward (that's where the 2 * backw comes from).
7040            (The real figure of course depends on the UTF-8 data.)  */
7041         const U8 *s = start;
7042
7043         while (s < send && uoffset--)
7044             s += UTF8SKIP(s);
7045         assert (s <= send);
7046         if (s > send)
7047             s = send;
7048         return s - start;
7049     }
7050
7051     while (backw--) {
7052         send--;
7053         while (UTF8_IS_CONTINUATION(*send))
7054             send--;
7055     }
7056     return send - start;
7057 }
7058
7059 /* For the string representation of the given scalar, find the byte
7060    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7061    give another position in the string, *before* the sought offset, which
7062    (which is always true, as 0, 0 is a valid pair of positions), which should
7063    help reduce the amount of linear searching.
7064    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7065    will be used to reduce the amount of linear searching. The cache will be
7066    created if necessary, and the found value offered to it for update.  */
7067 static STRLEN
7068 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7069                     const U8 *const send, STRLEN uoffset,
7070                     STRLEN uoffset0, STRLEN boffset0)
7071 {
7072     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7073     bool found = FALSE;
7074     bool at_end = FALSE;
7075
7076     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7077
7078     assert (uoffset >= uoffset0);
7079
7080     if (!uoffset)
7081         return 0;
7082
7083     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7084         && PL_utf8cache
7085         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7086                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7087         if ((*mgp)->mg_ptr) {
7088             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7089             if (cache[0] == uoffset) {
7090                 /* An exact match. */
7091                 return cache[1];
7092             }
7093             if (cache[2] == uoffset) {
7094                 /* An exact match. */
7095                 return cache[3];
7096             }
7097
7098             if (cache[0] < uoffset) {
7099                 /* The cache already knows part of the way.   */
7100                 if (cache[0] > uoffset0) {
7101                     /* The cache knows more than the passed in pair  */
7102                     uoffset0 = cache[0];
7103                     boffset0 = cache[1];
7104                 }
7105                 if ((*mgp)->mg_len != -1) {
7106                     /* And we know the end too.  */
7107                     boffset = boffset0
7108                         + sv_pos_u2b_midway(start + boffset0, send,
7109                                               uoffset - uoffset0,
7110                                               (*mgp)->mg_len - uoffset0);
7111                 } else {
7112                     uoffset -= uoffset0;
7113                     boffset = boffset0
7114                         + sv_pos_u2b_forwards(start + boffset0,
7115                                               send, &uoffset, &at_end);
7116                     uoffset += uoffset0;
7117                 }
7118             }
7119             else if (cache[2] < uoffset) {
7120                 /* We're between the two cache entries.  */
7121                 if (cache[2] > uoffset0) {
7122                     /* and the cache knows more than the passed in pair  */
7123                     uoffset0 = cache[2];
7124                     boffset0 = cache[3];
7125                 }
7126
7127                 boffset = boffset0
7128                     + sv_pos_u2b_midway(start + boffset0,
7129                                           start + cache[1],
7130                                           uoffset - uoffset0,
7131                                           cache[0] - uoffset0);
7132             } else {
7133                 boffset = boffset0
7134                     + sv_pos_u2b_midway(start + boffset0,
7135                                           start + cache[3],
7136                                           uoffset - uoffset0,
7137                                           cache[2] - uoffset0);
7138             }
7139             found = TRUE;
7140         }
7141         else if ((*mgp)->mg_len != -1) {
7142             /* If we can take advantage of a passed in offset, do so.  */
7143             /* In fact, offset0 is either 0, or less than offset, so don't
7144                need to worry about the other possibility.  */
7145             boffset = boffset0
7146                 + sv_pos_u2b_midway(start + boffset0, send,
7147                                       uoffset - uoffset0,
7148                                       (*mgp)->mg_len - uoffset0);
7149             found = TRUE;
7150         }
7151     }
7152
7153     if (!found || PL_utf8cache < 0) {
7154         STRLEN real_boffset;
7155         uoffset -= uoffset0;
7156         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7157                                                       send, &uoffset, &at_end);
7158         uoffset += uoffset0;
7159
7160         if (found && PL_utf8cache < 0)
7161             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7162                                        real_boffset, sv);
7163         boffset = real_boffset;
7164     }
7165
7166     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7167         if (at_end)
7168             utf8_mg_len_cache_update(sv, mgp, uoffset);
7169         else
7170             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7171     }
7172     return boffset;
7173 }
7174
7175
7176 /*
7177 =for apidoc sv_pos_u2b_flags
7178
7179 Converts the offset from a count of UTF-8 chars from
7180 the start of the string, to a count of the equivalent number of bytes; if
7181 lenp is non-zero, it does the same to lenp, but this time starting from
7182 the offset, rather than from the start
7183 of the string.  Handles type coercion.
7184 I<flags> is passed to C<SvPV_flags>, and usually should be
7185 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7186
7187 =cut
7188 */
7189
7190 /*
7191  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7192  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7193  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7194  *
7195  */
7196
7197 STRLEN
7198 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7199                       U32 flags)
7200 {
7201     const U8 *start;
7202     STRLEN len;
7203     STRLEN boffset;
7204
7205     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7206
7207     start = (U8*)SvPV_flags(sv, len, flags);
7208     if (len) {
7209         const U8 * const send = start + len;
7210         MAGIC *mg = NULL;
7211         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7212
7213         if (lenp
7214             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7215                         is 0, and *lenp is already set to that.  */) {
7216             /* Convert the relative offset to absolute.  */
7217             const STRLEN uoffset2 = uoffset + *lenp;
7218             const STRLEN boffset2
7219                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7220                                       uoffset, boffset) - boffset;
7221
7222             *lenp = boffset2;
7223         }
7224     } else {
7225         if (lenp)
7226             *lenp = 0;
7227         boffset = 0;
7228     }
7229
7230     return boffset;
7231 }
7232
7233 /*
7234 =for apidoc sv_pos_u2b
7235
7236 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7237 the start of the string, to a count of the equivalent number of bytes; if
7238 lenp is non-zero, it does the same to lenp, but this time starting from
7239 the offset, rather than from the start of the string.  Handles magic and
7240 type coercion.
7241
7242 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7243 than 2Gb.
7244
7245 =cut
7246 */
7247
7248 /*
7249  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7250  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7251  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7252  *
7253  */
7254
7255 /* This function is subject to size and sign problems */
7256
7257 void
7258 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7259 {
7260     PERL_ARGS_ASSERT_SV_POS_U2B;
7261
7262     if (lenp) {
7263         STRLEN ulen = (STRLEN)*lenp;
7264         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7265                                          SV_GMAGIC|SV_CONST_RETURN);
7266         *lenp = (I32)ulen;
7267     } else {
7268         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7269                                          SV_GMAGIC|SV_CONST_RETURN);
7270     }
7271 }
7272
7273 static void
7274 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7275                            const STRLEN ulen)
7276 {
7277     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7278     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7279         return;
7280
7281     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7282                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7283         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7284     }
7285     assert(*mgp);
7286
7287     (*mgp)->mg_len = ulen;
7288 }
7289
7290 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7291    byte length pairing. The (byte) length of the total SV is passed in too,
7292    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7293    may not have updated SvCUR, so we can't rely on reading it directly.
7294
7295    The proffered utf8/byte length pairing isn't used if the cache already has
7296    two pairs, and swapping either for the proffered pair would increase the
7297    RMS of the intervals between known byte offsets.
7298
7299    The cache itself consists of 4 STRLEN values
7300    0: larger UTF-8 offset
7301    1: corresponding byte offset
7302    2: smaller UTF-8 offset
7303    3: corresponding byte offset
7304
7305    Unused cache pairs have the value 0, 0.
7306    Keeping the cache "backwards" means that the invariant of
7307    cache[0] >= cache[2] is maintained even with empty slots, which means that
7308    the code that uses it doesn't need to worry if only 1 entry has actually
7309    been set to non-zero.  It also makes the "position beyond the end of the
7310    cache" logic much simpler, as the first slot is always the one to start
7311    from.   
7312 */
7313 static void
7314 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7315                            const STRLEN utf8, const STRLEN blen)
7316 {
7317     STRLEN *cache;
7318
7319     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7320
7321     if (SvREADONLY(sv))
7322         return;
7323
7324     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7325                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7326         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7327                            0);
7328         (*mgp)->mg_len = -1;
7329     }
7330     assert(*mgp);
7331
7332     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7333         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7334         (*mgp)->mg_ptr = (char *) cache;
7335     }
7336     assert(cache);
7337
7338     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7339         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7340            a pointer.  Note that we no longer cache utf8 offsets on refer-
7341            ences, but this check is still a good idea, for robustness.  */
7342         const U8 *start = (const U8 *) SvPVX_const(sv);
7343         const STRLEN realutf8 = utf8_length(start, start + byte);
7344
7345         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7346                                    sv);
7347     }
7348
7349     /* Cache is held with the later position first, to simplify the code
7350        that deals with unbounded ends.  */
7351        
7352     ASSERT_UTF8_CACHE(cache);
7353     if (cache[1] == 0) {
7354         /* Cache is totally empty  */
7355         cache[0] = utf8;
7356         cache[1] = byte;
7357     } else if (cache[3] == 0) {
7358         if (byte > cache[1]) {
7359             /* New one is larger, so goes first.  */
7360             cache[2] = cache[0];
7361             cache[3] = cache[1];
7362             cache[0] = utf8;
7363             cache[1] = byte;
7364         } else {
7365             cache[2] = utf8;
7366             cache[3] = byte;
7367         }
7368     } else {
7369 #define THREEWAY_SQUARE(a,b,c,d) \
7370             ((float)((d) - (c))) * ((float)((d) - (c))) \
7371             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7372                + ((float)((b) - (a))) * ((float)((b) - (a)))
7373
7374         /* Cache has 2 slots in use, and we know three potential pairs.
7375            Keep the two that give the lowest RMS distance. Do the
7376            calculation in bytes simply because we always know the byte
7377            length.  squareroot has the same ordering as the positive value,
7378            so don't bother with the actual square root.  */
7379         if (byte > cache[1]) {
7380             /* New position is after the existing pair of pairs.  */
7381             const float keep_earlier
7382                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7383             const float keep_later
7384                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7385
7386             if (keep_later < keep_earlier) {
7387                 cache[2] = cache[0];
7388                 cache[3] = cache[1];
7389                 cache[0] = utf8;
7390                 cache[1] = byte;
7391             }
7392             else {
7393                 cache[0] = utf8;
7394                 cache[1] = byte;
7395             }
7396         }
7397         else if (byte > cache[3]) {
7398             /* New position is between the existing pair of pairs.  */
7399             const float keep_earlier
7400                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7401             const float keep_later
7402                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7403
7404             if (keep_later < keep_earlier) {
7405                 cache[2] = utf8;
7406                 cache[3] = byte;
7407             }
7408             else {
7409                 cache[0] = utf8;
7410                 cache[1] = byte;
7411             }
7412         }
7413         else {
7414             /* New position is before the existing pair of pairs.  */
7415             const float keep_earlier
7416                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7417             const float keep_later
7418                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7419
7420             if (keep_later < keep_earlier) {
7421                 cache[2] = utf8;
7422                 cache[3] = byte;
7423             }
7424             else {
7425                 cache[0] = cache[2];
7426                 cache[1] = cache[3];
7427                 cache[2] = utf8;
7428                 cache[3] = byte;
7429             }
7430         }
7431     }
7432     ASSERT_UTF8_CACHE(cache);
7433 }
7434
7435 /* We already know all of the way, now we may be able to walk back.  The same
7436    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7437    backward is half the speed of walking forward. */
7438 static STRLEN
7439 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7440                     const U8 *end, STRLEN endu)
7441 {
7442     const STRLEN forw = target - s;
7443     STRLEN backw = end - target;
7444
7445     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7446
7447     if (forw < 2 * backw) {
7448         return utf8_length(s, target);
7449     }
7450
7451     while (end > target) {
7452         end--;
7453         while (UTF8_IS_CONTINUATION(*end)) {
7454             end--;
7455         }
7456         endu--;
7457     }
7458     return endu;
7459 }
7460
7461 /*
7462 =for apidoc sv_pos_b2u_flags
7463
7464 Converts the offset from a count of bytes from the start of the string, to
7465 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7466 I<flags> is passed to C<SvPV_flags>, and usually should be
7467 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7468
7469 =cut
7470 */
7471
7472 /*
7473  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7474  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7475  * and byte offsets.
7476  *
7477  */
7478 STRLEN
7479 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7480 {
7481     const U8* s;
7482     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7483     STRLEN blen;
7484     MAGIC* mg = NULL;
7485     const U8* send;
7486     bool found = FALSE;
7487
7488     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7489
7490     s = (const U8*)SvPV_flags(sv, blen, flags);
7491
7492     if (blen < offset)
7493         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7494                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7495
7496     send = s + offset;
7497
7498     if (!SvREADONLY(sv)
7499         && PL_utf8cache
7500         && SvTYPE(sv) >= SVt_PVMG
7501         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7502     {
7503         if (mg->mg_ptr) {
7504             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7505             if (cache[1] == offset) {
7506                 /* An exact match. */
7507                 return cache[0];
7508             }
7509             if (cache[3] == offset) {
7510                 /* An exact match. */
7511                 return cache[2];
7512             }
7513
7514             if (cache[1] < offset) {
7515                 /* We already know part of the way. */
7516                 if (mg->mg_len != -1) {
7517                     /* Actually, we know the end too.  */
7518                     len = cache[0]
7519                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7520                                               s + blen, mg->mg_len - cache[0]);
7521                 } else {
7522                     len = cache[0] + utf8_length(s + cache[1], send);
7523                 }
7524             }
7525             else if (cache[3] < offset) {
7526                 /* We're between the two cached pairs, so we do the calculation
7527                    offset by the byte/utf-8 positions for the earlier pair,
7528                    then add the utf-8 characters from the string start to
7529                    there.  */
7530                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7531                                           s + cache[1], cache[0] - cache[2])
7532                     + cache[2];
7533
7534             }
7535             else { /* cache[3] > offset */
7536                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7537                                           cache[2]);
7538
7539             }
7540             ASSERT_UTF8_CACHE(cache);
7541             found = TRUE;
7542         } else if (mg->mg_len != -1) {
7543             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7544             found = TRUE;
7545         }
7546     }
7547     if (!found || PL_utf8cache < 0) {
7548         const STRLEN real_len = utf8_length(s, send);
7549
7550         if (found && PL_utf8cache < 0)
7551             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7552         len = real_len;
7553     }
7554
7555     if (PL_utf8cache) {
7556         if (blen == offset)
7557             utf8_mg_len_cache_update(sv, &mg, len);
7558         else
7559             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7560     }
7561
7562     return len;
7563 }
7564
7565 /*
7566 =for apidoc sv_pos_b2u
7567
7568 Converts the value pointed to by offsetp from a count of bytes from the
7569 start of the string, to a count of the equivalent number of UTF-8 chars.
7570 Handles magic and type coercion.
7571
7572 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7573 longer than 2Gb.
7574
7575 =cut
7576 */
7577
7578 /*
7579  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7580  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7581  * byte offsets.
7582  *
7583  */
7584 void
7585 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7586 {
7587     PERL_ARGS_ASSERT_SV_POS_B2U;
7588
7589     if (!sv)
7590         return;
7591
7592     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7593                                      SV_GMAGIC|SV_CONST_RETURN);
7594 }
7595
7596 static void
7597 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7598                              STRLEN real, SV *const sv)
7599 {
7600     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7601
7602     /* As this is debugging only code, save space by keeping this test here,
7603        rather than inlining it in all the callers.  */
7604     if (from_cache == real)
7605         return;
7606
7607     /* Need to turn the assertions off otherwise we may recurse infinitely
7608        while printing error messages.  */
7609     SAVEI8(PL_utf8cache);
7610     PL_utf8cache = 0;
7611     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7612                func, (UV) from_cache, (UV) real, SVfARG(sv));
7613 }
7614
7615 /*
7616 =for apidoc sv_eq
7617
7618 Returns a boolean indicating whether the strings in the two SVs are
7619 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7620 coerce its args to strings if necessary.
7621
7622 =for apidoc sv_eq_flags
7623
7624 Returns a boolean indicating whether the strings in the two SVs are
7625 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7626 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7627
7628 =cut
7629 */
7630
7631 I32
7632 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7633 {
7634     const char *pv1;
7635     STRLEN cur1;
7636     const char *pv2;
7637     STRLEN cur2;
7638     I32  eq     = 0;
7639     SV* svrecode = NULL;
7640
7641     if (!sv1) {
7642         pv1 = "";
7643         cur1 = 0;
7644     }
7645     else {
7646         /* if pv1 and pv2 are the same, second SvPV_const call may
7647          * invalidate pv1 (if we are handling magic), so we may need to
7648          * make a copy */
7649         if (sv1 == sv2 && flags & SV_GMAGIC
7650          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7651             pv1 = SvPV_const(sv1, cur1);
7652             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7653         }
7654         pv1 = SvPV_flags_const(sv1, cur1, flags);
7655     }
7656
7657     if (!sv2){
7658         pv2 = "";
7659         cur2 = 0;
7660     }
7661     else
7662         pv2 = SvPV_flags_const(sv2, cur2, flags);
7663
7664     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7665         /* Differing utf8ness.
7666          * Do not UTF8size the comparands as a side-effect. */
7667          if (PL_encoding) {
7668               if (SvUTF8(sv1)) {
7669                    svrecode = newSVpvn(pv2, cur2);
7670                    sv_recode_to_utf8(svrecode, PL_encoding);
7671                    pv2 = SvPV_const(svrecode, cur2);
7672               }
7673               else {
7674                    svrecode = newSVpvn(pv1, cur1);
7675                    sv_recode_to_utf8(svrecode, PL_encoding);
7676                    pv1 = SvPV_const(svrecode, cur1);
7677               }
7678               /* Now both are in UTF-8. */
7679               if (cur1 != cur2) {
7680                    SvREFCNT_dec_NN(svrecode);
7681                    return FALSE;
7682               }
7683          }
7684          else {
7685               if (SvUTF8(sv1)) {
7686                   /* sv1 is the UTF-8 one  */
7687                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7688                                         (const U8*)pv1, cur1) == 0;
7689               }
7690               else {
7691                   /* sv2 is the UTF-8 one  */
7692                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7693                                         (const U8*)pv2, cur2) == 0;
7694               }
7695          }
7696     }
7697
7698     if (cur1 == cur2)
7699         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7700         
7701     SvREFCNT_dec(svrecode);
7702
7703     return eq;
7704 }
7705
7706 /*
7707 =for apidoc sv_cmp
7708
7709 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7710 string in C<sv1> is less than, equal to, or greater than the string in
7711 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7712 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7713
7714 =for apidoc sv_cmp_flags
7715
7716 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7717 string in C<sv1> is less than, equal to, or greater than the string in
7718 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7719 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7720 also C<sv_cmp_locale_flags>.
7721
7722 =cut
7723 */
7724
7725 I32
7726 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7727 {
7728     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7729 }
7730
7731 I32
7732 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7733                   const U32 flags)
7734 {
7735     STRLEN cur1, cur2;
7736     const char *pv1, *pv2;
7737     I32  cmp;
7738     SV *svrecode = NULL;
7739
7740     if (!sv1) {
7741         pv1 = "";
7742         cur1 = 0;
7743     }
7744     else
7745         pv1 = SvPV_flags_const(sv1, cur1, flags);
7746
7747     if (!sv2) {
7748         pv2 = "";
7749         cur2 = 0;
7750     }
7751     else
7752         pv2 = SvPV_flags_const(sv2, cur2, flags);
7753
7754     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7755         /* Differing utf8ness.
7756          * Do not UTF8size the comparands as a side-effect. */
7757         if (SvUTF8(sv1)) {
7758             if (PL_encoding) {
7759                  svrecode = newSVpvn(pv2, cur2);
7760                  sv_recode_to_utf8(svrecode, PL_encoding);
7761                  pv2 = SvPV_const(svrecode, cur2);
7762             }
7763             else {
7764                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7765                                                    (const U8*)pv1, cur1);
7766                 return retval ? retval < 0 ? -1 : +1 : 0;
7767             }
7768         }
7769         else {
7770             if (PL_encoding) {
7771                  svrecode = newSVpvn(pv1, cur1);
7772                  sv_recode_to_utf8(svrecode, PL_encoding);
7773                  pv1 = SvPV_const(svrecode, cur1);
7774             }
7775             else {
7776                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7777                                                   (const U8*)pv2, cur2);
7778                 return retval ? retval < 0 ? -1 : +1 : 0;
7779             }
7780         }
7781     }
7782
7783     if (!cur1) {
7784         cmp = cur2 ? -1 : 0;
7785     } else if (!cur2) {
7786         cmp = 1;
7787     } else {
7788         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7789
7790         if (retval) {
7791             cmp = retval < 0 ? -1 : 1;
7792         } else if (cur1 == cur2) {
7793             cmp = 0;
7794         } else {
7795             cmp = cur1 < cur2 ? -1 : 1;
7796         }
7797     }
7798
7799     SvREFCNT_dec(svrecode);
7800
7801     return cmp;
7802 }
7803
7804 /*
7805 =for apidoc sv_cmp_locale
7806
7807 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7808 'use bytes' aware, handles get magic, and will coerce its args to strings
7809 if necessary.  See also C<sv_cmp>.
7810
7811 =for apidoc sv_cmp_locale_flags
7812
7813 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7814 'use bytes' aware and will coerce its args to strings if necessary.  If the
7815 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7816
7817 =cut
7818 */
7819
7820 I32
7821 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7822 {
7823     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7824 }
7825
7826 I32
7827 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7828                          const U32 flags)
7829 {
7830 #ifdef USE_LOCALE_COLLATE
7831
7832     char *pv1, *pv2;
7833     STRLEN len1, len2;
7834     I32 retval;
7835
7836     if (PL_collation_standard)
7837         goto raw_compare;
7838
7839     len1 = 0;
7840     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7841     len2 = 0;
7842     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7843
7844     if (!pv1 || !len1) {
7845         if (pv2 && len2)
7846             return -1;
7847         else
7848             goto raw_compare;
7849     }
7850     else {
7851         if (!pv2 || !len2)
7852             return 1;
7853     }
7854
7855     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7856
7857     if (retval)
7858         return retval < 0 ? -1 : 1;
7859
7860     /*
7861      * When the result of collation is equality, that doesn't mean
7862      * that there are no differences -- some locales exclude some
7863      * characters from consideration.  So to avoid false equalities,
7864      * we use the raw string as a tiebreaker.
7865      */
7866
7867   raw_compare:
7868     /* FALLTHROUGH */
7869
7870 #else
7871     PERL_UNUSED_ARG(flags);
7872 #endif /* USE_LOCALE_COLLATE */
7873
7874     return sv_cmp(sv1, sv2);
7875 }
7876
7877
7878 #ifdef USE_LOCALE_COLLATE
7879
7880 /*
7881 =for apidoc sv_collxfrm
7882
7883 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7884 C<sv_collxfrm_flags>.
7885
7886 =for apidoc sv_collxfrm_flags
7887
7888 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7889 flags contain SV_GMAGIC, it handles get-magic.
7890
7891 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7892 scalar data of the variable, but transformed to such a format that a normal
7893 memory comparison can be used to compare the data according to the locale
7894 settings.
7895
7896 =cut
7897 */
7898
7899 char *
7900 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7901 {
7902     MAGIC *mg;
7903
7904     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7905
7906     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7907     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7908         const char *s;
7909         char *xf;
7910         STRLEN len, xlen;
7911
7912         if (mg)
7913             Safefree(mg->mg_ptr);
7914         s = SvPV_flags_const(sv, len, flags);
7915         if ((xf = mem_collxfrm(s, len, &xlen))) {
7916             if (! mg) {
7917 #ifdef PERL_OLD_COPY_ON_WRITE
7918                 if (SvIsCOW(sv))
7919                     sv_force_normal_flags(sv, 0);
7920 #endif
7921                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7922                                  0, 0);
7923                 assert(mg);
7924             }
7925             mg->mg_ptr = xf;
7926             mg->mg_len = xlen;
7927         }
7928         else {
7929             if (mg) {
7930                 mg->mg_ptr = NULL;
7931                 mg->mg_len = -1;
7932             }
7933         }
7934     }
7935     if (mg && mg->mg_ptr) {
7936         *nxp = mg->mg_len;
7937         return mg->mg_ptr + sizeof(PL_collation_ix);
7938     }
7939     else {
7940         *nxp = 0;
7941         return NULL;
7942     }
7943 }
7944
7945 #endif /* USE_LOCALE_COLLATE */
7946
7947 static char *
7948 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7949 {
7950     SV * const tsv = newSV(0);
7951     ENTER;
7952     SAVEFREESV(tsv);
7953     sv_gets(tsv, fp, 0);
7954     sv_utf8_upgrade_nomg(tsv);
7955     SvCUR_set(sv,append);
7956     sv_catsv(sv,tsv);
7957     LEAVE;
7958     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7959 }
7960
7961 static char *
7962 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7963 {
7964     SSize_t bytesread;
7965     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7966       /* Grab the size of the record we're getting */
7967     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7968     
7969     /* Go yank in */
7970 #ifdef __VMS
7971     int fd;
7972     Stat_t st;
7973
7974     /* With a true, record-oriented file on VMS, we need to use read directly
7975      * to ensure that we respect RMS record boundaries.  The user is responsible
7976      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7977      * record size) field.  N.B. This is likely to produce invalid results on
7978      * varying-width character data when a record ends mid-character.
7979      */
7980     fd = PerlIO_fileno(fp);
7981     if (fd != -1
7982         && PerlLIO_fstat(fd, &st) == 0
7983         && (st.st_fab_rfm == FAB$C_VAR
7984             || st.st_fab_rfm == FAB$C_VFC
7985             || st.st_fab_rfm == FAB$C_FIX)) {
7986
7987         bytesread = PerlLIO_read(fd, buffer, recsize);
7988     }
7989     else /* in-memory file from PerlIO::Scalar
7990           * or not a record-oriented file
7991           */
7992 #endif
7993     {
7994         bytesread = PerlIO_read(fp, buffer, recsize);
7995
7996         /* At this point, the logic in sv_get() means that sv will
7997            be treated as utf-8 if the handle is utf8.
7998         */
7999         if (PerlIO_isutf8(fp) && bytesread > 0) {
8000             char *bend = buffer + bytesread;
8001             char *bufp = buffer;
8002             size_t charcount = 0;
8003             bool charstart = TRUE;
8004             STRLEN skip = 0;
8005
8006             while (charcount < recsize) {
8007                 /* count accumulated characters */
8008                 while (bufp < bend) {
8009                     if (charstart) {
8010                         skip = UTF8SKIP(bufp);
8011                     }
8012                     if (bufp + skip > bend) {
8013                         /* partial at the end */
8014                         charstart = FALSE;
8015                         break;
8016                     }
8017                     else {
8018                         ++charcount;
8019                         bufp += skip;
8020                         charstart = TRUE;
8021                     }
8022                 }
8023
8024                 if (charcount < recsize) {
8025                     STRLEN readsize;
8026                     STRLEN bufp_offset = bufp - buffer;
8027                     SSize_t morebytesread;
8028
8029                     /* originally I read enough to fill any incomplete
8030                        character and the first byte of the next
8031                        character if needed, but if there's many
8032                        multi-byte encoded characters we're going to be
8033                        making a read call for every character beyond
8034                        the original read size.
8035
8036                        So instead, read the rest of the character if
8037                        any, and enough bytes to match at least the
8038                        start bytes for each character we're going to
8039                        read.
8040                     */
8041                     if (charstart)
8042                         readsize = recsize - charcount;
8043                     else 
8044                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8045                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8046                     bend = buffer + bytesread;
8047                     morebytesread = PerlIO_read(fp, bend, readsize);
8048                     if (morebytesread <= 0) {
8049                         /* we're done, if we still have incomplete
8050                            characters the check code in sv_gets() will
8051                            warn about them.
8052
8053                            I'd originally considered doing
8054                            PerlIO_ungetc() on all but the lead
8055                            character of the incomplete character, but
8056                            read() doesn't do that, so I don't.
8057                         */
8058                         break;
8059                     }
8060
8061                     /* prepare to scan some more */
8062                     bytesread += morebytesread;
8063                     bend = buffer + bytesread;
8064                     bufp = buffer + bufp_offset;
8065                 }
8066             }
8067         }
8068     }
8069
8070     if (bytesread < 0)
8071         bytesread = 0;
8072     SvCUR_set(sv, bytesread + append);
8073     buffer[bytesread] = '\0';
8074     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8075 }
8076
8077 /*
8078 =for apidoc sv_gets
8079
8080 Get a line from the filehandle and store it into the SV, optionally
8081 appending to the currently-stored string.  If C<append> is not 0, the
8082 line is appended to the SV instead of overwriting it.  C<append> should
8083 be set to the byte offset that the appended string should start at
8084 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8085
8086 =cut
8087 */
8088
8089 char *
8090 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8091 {
8092     const char *rsptr;
8093     STRLEN rslen;
8094     STDCHAR rslast;
8095     STDCHAR *bp;
8096     SSize_t cnt;
8097     int i = 0;
8098     int rspara = 0;
8099
8100     PERL_ARGS_ASSERT_SV_GETS;
8101
8102     if (SvTHINKFIRST(sv))
8103         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8104     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8105        from <>.
8106        However, perlbench says it's slower, because the existing swipe code
8107        is faster than copy on write.
8108        Swings and roundabouts.  */
8109     SvUPGRADE(sv, SVt_PV);
8110
8111     if (append) {
8112         /* line is going to be appended to the existing buffer in the sv */
8113         if (PerlIO_isutf8(fp)) {
8114             if (!SvUTF8(sv)) {
8115                 sv_utf8_upgrade_nomg(sv);
8116                 sv_pos_u2b(sv,&append,0);
8117             }
8118         } else if (SvUTF8(sv)) {
8119             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8120         }
8121     }
8122
8123     SvPOK_only(sv);
8124     if (!append) {
8125         /* not appending - "clear" the string by setting SvCUR to 0,
8126          * the pv is still avaiable. */
8127         SvCUR_set(sv,0);
8128     }
8129     if (PerlIO_isutf8(fp))
8130         SvUTF8_on(sv);
8131
8132     if (IN_PERL_COMPILETIME) {
8133         /* we always read code in line mode */
8134         rsptr = "\n";
8135         rslen = 1;
8136     }
8137     else if (RsSNARF(PL_rs)) {
8138         /* If it is a regular disk file use size from stat() as estimate
8139            of amount we are going to read -- may result in mallocing
8140            more memory than we really need if the layers below reduce
8141            the size we read (e.g. CRLF or a gzip layer).
8142          */
8143         Stat_t st;
8144         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8145             const Off_t offset = PerlIO_tell(fp);
8146             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8147 #ifdef PERL_NEW_COPY_ON_WRITE
8148                 /* Add an extra byte for the sake of copy-on-write's
8149                  * buffer reference count. */
8150                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8151 #else
8152                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8153 #endif
8154             }
8155         }
8156         rsptr = NULL;
8157         rslen = 0;
8158     }
8159     else if (RsRECORD(PL_rs)) {
8160         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8161     }
8162     else if (RsPARA(PL_rs)) {
8163         rsptr = "\n\n";
8164         rslen = 2;
8165         rspara = 1;
8166     }
8167     else {
8168         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8169         if (PerlIO_isutf8(fp)) {
8170             rsptr = SvPVutf8(PL_rs, rslen);
8171         }
8172         else {
8173             if (SvUTF8(PL_rs)) {
8174                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8175                     Perl_croak(aTHX_ "Wide character in $/");
8176                 }
8177             }
8178             /* extract the raw pointer to the record separator */
8179             rsptr = SvPV_const(PL_rs, rslen);
8180         }
8181     }
8182
8183     /* rslast is the last character in the record separator
8184      * note we don't use rslast except when rslen is true, so the
8185      * null assign is a placeholder. */
8186     rslast = rslen ? rsptr[rslen - 1] : '\0';
8187
8188     if (rspara) {               /* have to do this both before and after */
8189         do {                    /* to make sure file boundaries work right */
8190             if (PerlIO_eof(fp))
8191                 return 0;
8192             i = PerlIO_getc(fp);
8193             if (i != '\n') {
8194                 if (i == -1)
8195                     return 0;
8196                 PerlIO_ungetc(fp,i);
8197                 break;
8198             }
8199         } while (i != EOF);
8200     }
8201
8202     /* See if we know enough about I/O mechanism to cheat it ! */
8203
8204     /* This used to be #ifdef test - it is made run-time test for ease
8205        of abstracting out stdio interface. One call should be cheap
8206        enough here - and may even be a macro allowing compile
8207        time optimization.
8208      */
8209
8210     if (PerlIO_fast_gets(fp)) {
8211     /*
8212      * We can do buffer based IO operations on this filehandle.
8213      *
8214      * This means we can bypass a lot of subcalls and process
8215      * the buffer directly, it also means we know the upper bound
8216      * on the amount of data we might read of the current buffer
8217      * into our sv. Knowing this allows us to preallocate the pv
8218      * to be able to hold that maximum, which allows us to simplify
8219      * a lot of logic. */
8220
8221     /*
8222      * We're going to steal some values from the stdio struct
8223      * and put EVERYTHING in the innermost loop into registers.
8224      */
8225     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8226     STRLEN bpx;         /* length of the data in the target sv
8227                            used to fix pointers after a SvGROW */
8228     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8229                            of data left in the read-ahead buffer.
8230                            If 0 then the pv buffer can hold the full
8231                            amount left, otherwise this is the amount it
8232                            can hold. */
8233
8234 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8235     /* An ungetc()d char is handled separately from the regular
8236      * buffer, so we getc() it back out and stuff it in the buffer.
8237      */
8238     i = PerlIO_getc(fp);
8239     if (i == EOF) return 0;
8240     *(--((*fp)->_ptr)) = (unsigned char) i;
8241     (*fp)->_cnt++;
8242 #endif
8243
8244     /* Here is some breathtakingly efficient cheating */
8245
8246     /* When you read the following logic resist the urge to think
8247      * of record separators that are 1 byte long. They are an
8248      * uninteresting special (simple) case.
8249      *
8250      * Instead think of record separators which are at least 2 bytes
8251      * long, and keep in mind that we need to deal with such
8252      * separators when they cross a read-ahead buffer boundary.
8253      *
8254      * Also consider that we need to gracefully deal with separators
8255      * that may be longer than a single read ahead buffer.
8256      *
8257      * Lastly do not forget we want to copy the delimiter as well. We
8258      * are copying all data in the file _up_to_and_including_ the separator
8259      * itself.
8260      *
8261      * Now that you have all that in mind here is what is happening below:
8262      *
8263      * 1. When we first enter the loop we do some memory book keeping to see
8264      * how much free space there is in the target SV. (This sub assumes that
8265      * it is operating on the same SV most of the time via $_ and that it is
8266      * going to be able to reuse the same pv buffer each call.) If there is
8267      * "enough" room then we set "shortbuffered" to how much space there is
8268      * and start reading forward.
8269      *
8270      * 2. When we scan forward we copy from the read-ahead buffer to the target
8271      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8272      * and the end of the of pv, as well as for the "rslast", which is the last
8273      * char of the separator.
8274      *
8275      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8276      * (which has a "complete" record up to the point we saw rslast) and check
8277      * it to see if it matches the separator. If it does we are done. If it doesn't
8278      * we continue on with the scan/copy.
8279      *
8280      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8281      * the IO system to read the next buffer. We do this by doing a getc(), which
8282      * returns a single char read (or EOF), and prefills the buffer, and also
8283      * allows us to find out how full the buffer is.  We use this information to
8284      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8285      * the returned single char into the target sv, and then go back into scan
8286      * forward mode.
8287      *
8288      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8289      * remaining space in the read-buffer.
8290      *
8291      * Note that this code despite its twisty-turny nature is pretty darn slick.
8292      * It manages single byte separators, multi-byte cross boundary separators,
8293      * and cross-read-buffer separators cleanly and efficiently at the cost
8294      * of potentially greatly overallocating the target SV.
8295      *
8296      * Yves
8297      */
8298
8299
8300     /* get the number of bytes remaining in the read-ahead buffer
8301      * on first call on a given fp this will return 0.*/
8302     cnt = PerlIO_get_cnt(fp);
8303
8304     /* make sure we have the room */
8305     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8306         /* Not room for all of it
8307            if we are looking for a separator and room for some
8308          */
8309         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8310             /* just process what we have room for */
8311             shortbuffered = cnt - SvLEN(sv) + append + 1;
8312             cnt -= shortbuffered;
8313         }
8314         else {
8315             /* ensure that the target sv has enough room to hold
8316              * the rest of the read-ahead buffer */
8317             shortbuffered = 0;
8318             /* remember that cnt can be negative */
8319             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8320         }
8321     }
8322     else {
8323         /* we have enough room to hold the full buffer, lets scream */
8324         shortbuffered = 0;
8325     }
8326
8327     /* extract the pointer to sv's string buffer, offset by append as necessary */
8328     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8329     /* extract the point to the read-ahead buffer */
8330     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8331
8332     /* some trace debug output */
8333     DEBUG_P(PerlIO_printf(Perl_debug_log,
8334         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8335     DEBUG_P(PerlIO_printf(Perl_debug_log,
8336         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8337          UVuf"\n",
8338                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8339                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8340
8341     for (;;) {
8342       screamer:
8343         /* if there is stuff left in the read-ahead buffer */
8344         if (cnt > 0) {
8345             /* if there is a separator */
8346             if (rslen) {
8347                 /* loop until we hit the end of the read-ahead buffer */
8348                 while (cnt > 0) {                    /* this     |  eat */
8349                     /* scan forward copying and searching for rslast as we go */
8350                     cnt--;
8351                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8352                         goto thats_all_folks;        /* screams  |  sed :-) */
8353                 }
8354             }
8355             else {
8356                 /* no separator, slurp the full buffer */
8357                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8358                 bp += cnt;                           /* screams  |  dust */
8359                 ptr += cnt;                          /* louder   |  sed :-) */
8360                 cnt = 0;
8361                 assert (!shortbuffered);
8362                 goto cannot_be_shortbuffered;
8363             }
8364         }
8365         
8366         if (shortbuffered) {            /* oh well, must extend */
8367             /* we didnt have enough room to fit the line into the target buffer
8368              * so we must extend the target buffer and keep going */
8369             cnt = shortbuffered;
8370             shortbuffered = 0;
8371             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8372             SvCUR_set(sv, bpx);
8373             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8374             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8375             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8376             continue;
8377         }
8378
8379     cannot_be_shortbuffered:
8380         /* we need to refill the read-ahead buffer if possible */
8381
8382         DEBUG_P(PerlIO_printf(Perl_debug_log,
8383                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8384                               PTR2UV(ptr),(IV)cnt));
8385         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8386
8387         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8388            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8389             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8390             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8391
8392         /*
8393             call PerlIO_getc() to let it prefill the lookahead buffer
8394
8395             This used to call 'filbuf' in stdio form, but as that behaves like
8396             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8397             another abstraction.
8398
8399             Note we have to deal with the char in 'i' if we are not at EOF
8400         */
8401         i   = PerlIO_getc(fp);          /* get more characters */
8402
8403         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8404            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8405             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8406             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8407
8408         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8409         cnt = PerlIO_get_cnt(fp);
8410         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8411         DEBUG_P(PerlIO_printf(Perl_debug_log,
8412             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8413             PTR2UV(ptr),(IV)cnt));
8414
8415         if (i == EOF)                   /* all done for ever? */
8416             goto thats_really_all_folks;
8417
8418         /* make sure we have enough space in the target sv */
8419         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8420         SvCUR_set(sv, bpx);
8421         SvGROW(sv, bpx + cnt + 2);
8422         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8423
8424         /* copy of the char we got from getc() */
8425         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8426
8427         /* make sure we deal with the i being the last character of a separator */
8428         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8429             goto thats_all_folks;
8430     }
8431
8432 thats_all_folks:
8433     /* check if we have actually found the separator - only really applies
8434      * when rslen > 1 */
8435     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8436           memNE((char*)bp - rslen, rsptr, rslen))
8437         goto screamer;                          /* go back to the fray */
8438 thats_really_all_folks:
8439     if (shortbuffered)
8440         cnt += shortbuffered;
8441         DEBUG_P(PerlIO_printf(Perl_debug_log,
8442              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8443     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8444     DEBUG_P(PerlIO_printf(Perl_debug_log,
8445         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8446         "\n",
8447         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8448         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8449     *bp = '\0';
8450     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8451     DEBUG_P(PerlIO_printf(Perl_debug_log,
8452         "Screamer: done, len=%ld, string=|%.*s|\n",
8453         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8454     }
8455    else
8456     {
8457        /*The big, slow, and stupid way. */
8458 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8459         STDCHAR *buf = NULL;
8460         Newx(buf, 8192, STDCHAR);
8461         assert(buf);
8462 #else
8463         STDCHAR buf[8192];
8464 #endif
8465
8466 screamer2:
8467         if (rslen) {
8468             const STDCHAR * const bpe = buf + sizeof(buf);
8469             bp = buf;
8470             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8471                 ; /* keep reading */
8472             cnt = bp - buf;
8473         }
8474         else {
8475             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8476             /* Accommodate broken VAXC compiler, which applies U8 cast to
8477              * both args of ?: operator, causing EOF to change into 255
8478              */
8479             if (cnt > 0)
8480                  i = (U8)buf[cnt - 1];
8481             else
8482                  i = EOF;
8483         }
8484
8485         if (cnt < 0)
8486             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8487         if (append)
8488             sv_catpvn_nomg(sv, (char *) buf, cnt);
8489         else
8490             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8491
8492         if (i != EOF &&                 /* joy */
8493             (!rslen ||
8494              SvCUR(sv) < rslen ||
8495              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8496         {
8497             append = -1;
8498             /*
8499              * If we're reading from a TTY and we get a short read,
8500              * indicating that the user hit his EOF character, we need
8501              * to notice it now, because if we try to read from the TTY
8502              * again, the EOF condition will disappear.
8503              *
8504              * The comparison of cnt to sizeof(buf) is an optimization
8505              * that prevents unnecessary calls to feof().
8506              *
8507              * - jik 9/25/96
8508              */
8509             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8510                 goto screamer2;
8511         }
8512
8513 #ifdef USE_HEAP_INSTEAD_OF_STACK
8514         Safefree(buf);
8515 #endif
8516     }
8517
8518     if (rspara) {               /* have to do this both before and after */
8519         while (i != EOF) {      /* to make sure file boundaries work right */
8520             i = PerlIO_getc(fp);
8521             if (i != '\n') {
8522                 PerlIO_ungetc(fp,i);
8523                 break;
8524             }
8525         }
8526     }
8527
8528     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8529 }
8530
8531 /*
8532 =for apidoc sv_inc
8533
8534 Auto-increment of the value in the SV, doing string to numeric conversion
8535 if necessary.  Handles 'get' magic and operator overloading.
8536
8537 =cut
8538 */
8539
8540 void
8541 Perl_sv_inc(pTHX_ SV *const sv)
8542 {
8543     if (!sv)
8544         return;
8545     SvGETMAGIC(sv);
8546     sv_inc_nomg(sv);
8547 }
8548
8549 /*
8550 =for apidoc sv_inc_nomg
8551
8552 Auto-increment of the value in the SV, doing string to numeric conversion
8553 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8554
8555 =cut
8556 */
8557
8558 void
8559 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8560 {
8561     char *d;
8562     int flags;
8563
8564     if (!sv)
8565         return;
8566     if (SvTHINKFIRST(sv)) {
8567         if (SvREADONLY(sv)) {
8568                 Perl_croak_no_modify();
8569         }
8570         if (SvROK(sv)) {
8571             IV i;
8572             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8573                 return;
8574             i = PTR2IV(SvRV(sv));
8575             sv_unref(sv);
8576             sv_setiv(sv, i);
8577         }
8578         else sv_force_normal_flags(sv, 0);
8579     }
8580     flags = SvFLAGS(sv);
8581     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8582         /* It's (privately or publicly) a float, but not tested as an
8583            integer, so test it to see. */
8584         (void) SvIV(sv);
8585         flags = SvFLAGS(sv);
8586     }
8587     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8588         /* It's publicly an integer, or privately an integer-not-float */
8589 #ifdef PERL_PRESERVE_IVUV
8590       oops_its_int:
8591 #endif
8592         if (SvIsUV(sv)) {
8593             if (SvUVX(sv) == UV_MAX)
8594                 sv_setnv(sv, UV_MAX_P1);
8595             else
8596                 (void)SvIOK_only_UV(sv);
8597                 SvUV_set(sv, SvUVX(sv) + 1);
8598         } else {
8599             if (SvIVX(sv) == IV_MAX)
8600                 sv_setuv(sv, (UV)IV_MAX + 1);
8601             else {
8602                 (void)SvIOK_only(sv);
8603                 SvIV_set(sv, SvIVX(sv) + 1);
8604             }   
8605         }
8606         return;
8607     }
8608     if (flags & SVp_NOK) {
8609         const NV was = SvNVX(sv);
8610         if (!Perl_isinfnan(was) &&
8611             NV_OVERFLOWS_INTEGERS_AT &&
8612             was >= NV_OVERFLOWS_INTEGERS_AT) {
8613             /* diag_listed_as: Lost precision when %s %f by 1 */
8614             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8615                            "Lost precision when incrementing %" NVff " by 1",
8616                            was);
8617         }
8618         (void)SvNOK_only(sv);
8619         SvNV_set(sv, was + 1.0);
8620         return;
8621     }
8622
8623     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8624         if ((flags & SVTYPEMASK) < SVt_PVIV)
8625             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8626         (void)SvIOK_only(sv);
8627         SvIV_set(sv, 1);
8628         return;
8629     }
8630     d = SvPVX(sv);
8631     while (isALPHA(*d)) d++;
8632     while (isDIGIT(*d)) d++;
8633     if (d < SvEND(sv)) {
8634         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8635 #ifdef PERL_PRESERVE_IVUV
8636         /* Got to punt this as an integer if needs be, but we don't issue
8637            warnings. Probably ought to make the sv_iv_please() that does
8638            the conversion if possible, and silently.  */
8639         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8640             /* Need to try really hard to see if it's an integer.
8641                9.22337203685478e+18 is an integer.
8642                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8643                so $a="9.22337203685478e+18"; $a+0; $a++
8644                needs to be the same as $a="9.22337203685478e+18"; $a++
8645                or we go insane. */
8646         
8647             (void) sv_2iv(sv);
8648             if (SvIOK(sv))
8649                 goto oops_its_int;
8650
8651             /* sv_2iv *should* have made this an NV */
8652             if (flags & SVp_NOK) {
8653                 (void)SvNOK_only(sv);
8654                 SvNV_set(sv, SvNVX(sv) + 1.0);
8655                 return;
8656             }
8657             /* I don't think we can get here. Maybe I should assert this
8658                And if we do get here I suspect that sv_setnv will croak. NWC
8659                Fall through. */
8660             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8661                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8662         }
8663 #endif /* PERL_PRESERVE_IVUV */
8664         if (!numtype && ckWARN(WARN_NUMERIC))
8665             not_incrementable(sv);
8666         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8667         return;
8668     }
8669     d--;
8670     while (d >= SvPVX_const(sv)) {
8671         if (isDIGIT(*d)) {
8672             if (++*d <= '9')
8673                 return;
8674             *(d--) = '0';
8675         }
8676         else {
8677 #ifdef EBCDIC
8678             /* MKS: The original code here died if letters weren't consecutive.
8679              * at least it didn't have to worry about non-C locales.  The
8680              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8681              * arranged in order (although not consecutively) and that only
8682              * [A-Za-z] are accepted by isALPHA in the C locale.
8683              */
8684             if (isALPHA_FOLD_NE(*d, 'z')) {
8685                 do { ++*d; } while (!isALPHA(*d));
8686                 return;
8687             }
8688             *(d--) -= 'z' - 'a';
8689 #else
8690             ++*d;
8691             if (isALPHA(*d))
8692                 return;
8693             *(d--) -= 'z' - 'a' + 1;
8694 #endif
8695         }
8696     }
8697     /* oh,oh, the number grew */
8698     SvGROW(sv, SvCUR(sv) + 2);
8699     SvCUR_set(sv, SvCUR(sv) + 1);
8700     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8701         *d = d[-1];
8702     if (isDIGIT(d[1]))
8703         *d = '1';
8704     else
8705         *d = d[1];
8706 }
8707
8708 /*
8709 =for apidoc sv_dec
8710
8711 Auto-decrement of the value in the SV, doing string to numeric conversion
8712 if necessary.  Handles 'get' magic and operator overloading.
8713
8714 =cut
8715 */
8716
8717 void
8718 Perl_sv_dec(pTHX_ SV *const sv)
8719 {
8720     if (!sv)
8721         return;
8722     SvGETMAGIC(sv);
8723     sv_dec_nomg(sv);
8724 }
8725
8726 /*
8727 =for apidoc sv_dec_nomg
8728
8729 Auto-decrement of the value in the SV, doing string to numeric conversion
8730 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8731
8732 =cut
8733 */
8734
8735 void
8736 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8737 {
8738     int flags;
8739
8740     if (!sv)
8741         return;
8742     if (SvTHINKFIRST(sv)) {
8743         if (SvREADONLY(sv)) {
8744                 Perl_croak_no_modify();
8745         }
8746         if (SvROK(sv)) {
8747             IV i;
8748             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8749                 return;
8750             i = PTR2IV(SvRV(sv));
8751             sv_unref(sv);
8752             sv_setiv(sv, i);
8753         }
8754         else sv_force_normal_flags(sv, 0);
8755     }
8756     /* Unlike sv_inc we don't have to worry about string-never-numbers
8757        and keeping them magic. But we mustn't warn on punting */
8758     flags = SvFLAGS(sv);
8759     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8760         /* It's publicly an integer, or privately an integer-not-float */
8761 #ifdef PERL_PRESERVE_IVUV
8762       oops_its_int:
8763 #endif
8764         if (SvIsUV(sv)) {
8765             if (SvUVX(sv) == 0) {
8766                 (void)SvIOK_only(sv);
8767                 SvIV_set(sv, -1);
8768             }
8769             else {
8770                 (void)SvIOK_only_UV(sv);
8771                 SvUV_set(sv, SvUVX(sv) - 1);
8772             }   
8773         } else {
8774             if (SvIVX(sv) == IV_MIN) {
8775                 sv_setnv(sv, (NV)IV_MIN);
8776                 goto oops_its_num;
8777             }
8778             else {
8779                 (void)SvIOK_only(sv);
8780                 SvIV_set(sv, SvIVX(sv) - 1);
8781             }   
8782         }
8783         return;
8784     }
8785     if (flags & SVp_NOK) {
8786     oops_its_num:
8787         {
8788             const NV was = SvNVX(sv);
8789             if (!Perl_isinfnan(was) &&
8790                 NV_OVERFLOWS_INTEGERS_AT &&
8791                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8792                 /* diag_listed_as: Lost precision when %s %f by 1 */
8793                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8794                                "Lost precision when decrementing %" NVff " by 1",
8795                                was);
8796             }
8797             (void)SvNOK_only(sv);
8798             SvNV_set(sv, was - 1.0);
8799             return;
8800         }
8801     }
8802     if (!(flags & SVp_POK)) {
8803         if ((flags & SVTYPEMASK) < SVt_PVIV)
8804             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8805         SvIV_set(sv, -1);
8806         (void)SvIOK_only(sv);
8807         return;
8808     }
8809 #ifdef PERL_PRESERVE_IVUV
8810     {
8811         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8812         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8813             /* Need to try really hard to see if it's an integer.
8814                9.22337203685478e+18 is an integer.
8815                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8816                so $a="9.22337203685478e+18"; $a+0; $a--
8817                needs to be the same as $a="9.22337203685478e+18"; $a--
8818                or we go insane. */
8819         
8820             (void) sv_2iv(sv);
8821             if (SvIOK(sv))
8822                 goto oops_its_int;
8823
8824             /* sv_2iv *should* have made this an NV */
8825             if (flags & SVp_NOK) {
8826                 (void)SvNOK_only(sv);
8827                 SvNV_set(sv, SvNVX(sv) - 1.0);
8828                 return;
8829             }
8830             /* I don't think we can get here. Maybe I should assert this
8831                And if we do get here I suspect that sv_setnv will croak. NWC
8832                Fall through. */
8833             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8834                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8835         }
8836     }
8837 #endif /* PERL_PRESERVE_IVUV */
8838     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8839 }
8840
8841 /* this define is used to eliminate a chunk of duplicated but shared logic
8842  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8843  * used anywhere but here - yves
8844  */
8845 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8846     STMT_START {      \
8847         EXTEND_MORTAL(1); \
8848         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8849     } STMT_END
8850
8851 /*
8852 =for apidoc sv_mortalcopy
8853
8854 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8855 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8856 explicit call to FREETMPS, or by an implicit call at places such as
8857 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8858
8859 =cut
8860 */
8861
8862 /* Make a string that will exist for the duration of the expression
8863  * evaluation.  Actually, it may have to last longer than that, but
8864  * hopefully we won't free it until it has been assigned to a
8865  * permanent location. */
8866
8867 SV *
8868 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8869 {
8870     SV *sv;
8871
8872     if (flags & SV_GMAGIC)
8873         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8874     new_SV(sv);
8875     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8876     PUSH_EXTEND_MORTAL__SV_C(sv);
8877     SvTEMP_on(sv);
8878     return sv;
8879 }
8880
8881 /*
8882 =for apidoc sv_newmortal
8883
8884 Creates a new null SV which is mortal.  The reference count of the SV is
8885 set to 1.  It will be destroyed "soon", either by an explicit call to
8886 FREETMPS, or by an implicit call at places such as statement boundaries.
8887 See also C<sv_mortalcopy> and C<sv_2mortal>.
8888
8889 =cut
8890 */
8891
8892 SV *
8893 Perl_sv_newmortal(pTHX)
8894 {
8895     SV *sv;
8896
8897     new_SV(sv);
8898     SvFLAGS(sv) = SVs_TEMP;
8899     PUSH_EXTEND_MORTAL__SV_C(sv);
8900     return sv;
8901 }
8902
8903
8904 /*
8905 =for apidoc newSVpvn_flags
8906
8907 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8908 characters) into it.  The reference count for the
8909 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8910 string.  You are responsible for ensuring that the source string is at least
8911 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8912 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8913 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8914 returning.  If C<SVf_UTF8> is set, C<s>
8915 is considered to be in UTF-8 and the
8916 C<SVf_UTF8> flag will be set on the new SV.
8917 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8918
8919     #define newSVpvn_utf8(s, len, u)                    \
8920         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8921
8922 =cut
8923 */
8924
8925 SV *
8926 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8927 {
8928     SV *sv;
8929
8930     /* All the flags we don't support must be zero.
8931        And we're new code so I'm going to assert this from the start.  */
8932     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8933     new_SV(sv);
8934     sv_setpvn(sv,s,len);
8935
8936     /* This code used to do a sv_2mortal(), however we now unroll the call to
8937      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8938      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8939      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8940      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8941      * means that we eliminate quite a few steps than it looks - Yves
8942      * (explaining patch by gfx) */
8943
8944     SvFLAGS(sv) |= flags;
8945
8946     if(flags & SVs_TEMP){
8947         PUSH_EXTEND_MORTAL__SV_C(sv);
8948     }
8949
8950     return sv;
8951 }
8952
8953 /*
8954 =for apidoc sv_2mortal
8955
8956 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8957 by an explicit call to FREETMPS, or by an implicit call at places such as
8958 statement boundaries.  SvTEMP() is turned on which means that the SV's
8959 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8960 and C<sv_mortalcopy>.
8961
8962 =cut
8963 */
8964
8965 SV *
8966 Perl_sv_2mortal(pTHX_ SV *const sv)
8967 {
8968     dVAR;
8969     if (!sv)
8970         return NULL;
8971     if (SvIMMORTAL(sv))
8972         return sv;
8973     PUSH_EXTEND_MORTAL__SV_C(sv);
8974     SvTEMP_on(sv);
8975     return sv;
8976 }
8977
8978 /*
8979 =for apidoc newSVpv
8980
8981 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8982 characters) into it.  The reference count for the
8983 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8984 strlen(), (which means if you use this option, that C<s> can't have embedded
8985 C<NUL> characters and has to have a terminating C<NUL> byte).
8986
8987 For efficiency, consider using C<newSVpvn> instead.
8988
8989 =cut
8990 */
8991
8992 SV *
8993 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8994 {
8995     SV *sv;
8996
8997     new_SV(sv);
8998     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8999     return sv;
9000 }
9001
9002 /*
9003 =for apidoc newSVpvn
9004
9005 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9006 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9007 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9008 are responsible for ensuring that the source buffer is at least
9009 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9010 undefined.
9011
9012 =cut
9013 */
9014
9015 SV *
9016 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9017 {
9018     SV *sv;
9019     new_SV(sv);
9020     sv_setpvn(sv,buffer,len);
9021     return sv;
9022 }
9023
9024 /*
9025 =for apidoc newSVhek
9026
9027 Creates a new SV from the hash key structure.  It will generate scalars that
9028 point to the shared string table where possible.  Returns a new (undefined)
9029 SV if the hek is NULL.
9030
9031 =cut
9032 */
9033
9034 SV *
9035 Perl_newSVhek(pTHX_ const HEK *const hek)
9036 {
9037     if (!hek) {
9038         SV *sv;
9039
9040         new_SV(sv);
9041         return sv;
9042     }
9043
9044     if (HEK_LEN(hek) == HEf_SVKEY) {
9045         return newSVsv(*(SV**)HEK_KEY(hek));
9046     } else {
9047         const int flags = HEK_FLAGS(hek);
9048         if (flags & HVhek_WASUTF8) {
9049             /* Trouble :-)
9050                Andreas would like keys he put in as utf8 to come back as utf8
9051             */
9052             STRLEN utf8_len = HEK_LEN(hek);
9053             SV * const sv = newSV_type(SVt_PV);
9054             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9055             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9056             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9057             SvUTF8_on (sv);
9058             return sv;
9059         } else if (flags & HVhek_UNSHARED) {
9060             /* A hash that isn't using shared hash keys has to have
9061                the flag in every key so that we know not to try to call
9062                share_hek_hek on it.  */
9063
9064             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9065             if (HEK_UTF8(hek))
9066                 SvUTF8_on (sv);
9067             return sv;
9068         }
9069         /* This will be overwhelminly the most common case.  */
9070         {
9071             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9072                more efficient than sharepvn().  */
9073             SV *sv;
9074
9075             new_SV(sv);
9076             sv_upgrade(sv, SVt_PV);
9077             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9078             SvCUR_set(sv, HEK_LEN(hek));
9079             SvLEN_set(sv, 0);
9080             SvIsCOW_on(sv);
9081             SvPOK_on(sv);
9082             if (HEK_UTF8(hek))
9083                 SvUTF8_on(sv);
9084             return sv;
9085         }
9086     }
9087 }
9088
9089 /*
9090 =for apidoc newSVpvn_share
9091
9092 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9093 table.  If the string does not already exist in the table, it is
9094 created first.  Turns on the SvIsCOW flag (or READONLY
9095 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9096 is non-zero, that value is used; otherwise the hash is computed.
9097 The string's hash can later be retrieved from the SV
9098 with the C<SvSHARED_HASH()> macro.  The idea here is
9099 that as the string table is used for shared hash keys these strings will have
9100 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9101
9102 =cut
9103 */
9104
9105 SV *
9106 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9107 {
9108     dVAR;
9109     SV *sv;
9110     bool is_utf8 = FALSE;
9111     const char *const orig_src = src;
9112
9113     if (len < 0) {
9114         STRLEN tmplen = -len;
9115         is_utf8 = TRUE;
9116         /* See the note in hv.c:hv_fetch() --jhi */
9117         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9118         len = tmplen;
9119     }
9120     if (!hash)
9121         PERL_HASH(hash, src, len);
9122     new_SV(sv);
9123     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9124        changes here, update it there too.  */
9125     sv_upgrade(sv, SVt_PV);
9126     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9127     SvCUR_set(sv, len);
9128     SvLEN_set(sv, 0);
9129     SvIsCOW_on(sv);
9130     SvPOK_on(sv);
9131     if (is_utf8)
9132         SvUTF8_on(sv);
9133     if (src != orig_src)
9134         Safefree(src);
9135     return sv;
9136 }
9137
9138 /*
9139 =for apidoc newSVpv_share
9140
9141 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9142 string/length pair.
9143
9144 =cut
9145 */
9146
9147 SV *
9148 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9149 {
9150     return newSVpvn_share(src, strlen(src), hash);
9151 }
9152
9153 #if defined(PERL_IMPLICIT_CONTEXT)
9154
9155 /* pTHX_ magic can't cope with varargs, so this is a no-context
9156  * version of the main function, (which may itself be aliased to us).
9157  * Don't access this version directly.
9158  */
9159
9160 SV *
9161 Perl_newSVpvf_nocontext(const char *const pat, ...)
9162 {
9163     dTHX;
9164     SV *sv;
9165     va_list args;
9166
9167     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9168
9169     va_start(args, pat);
9170     sv = vnewSVpvf(pat, &args);
9171     va_end(args);
9172     return sv;
9173 }
9174 #endif
9175
9176 /*
9177 =for apidoc newSVpvf
9178
9179 Creates a new SV and initializes it with the string formatted like
9180 C<sprintf>.
9181
9182 =cut
9183 */
9184
9185 SV *
9186 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9187 {
9188     SV *sv;
9189     va_list args;
9190
9191     PERL_ARGS_ASSERT_NEWSVPVF;
9192
9193     va_start(args, pat);
9194     sv = vnewSVpvf(pat, &args);
9195     va_end(args);
9196     return sv;
9197 }
9198
9199 /* backend for newSVpvf() and newSVpvf_nocontext() */
9200
9201 SV *
9202 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9203 {
9204     SV *sv;
9205
9206     PERL_ARGS_ASSERT_VNEWSVPVF;
9207
9208     new_SV(sv);
9209     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9210     return sv;
9211 }
9212
9213 /*
9214 =for apidoc newSVnv
9215
9216 Creates a new SV and copies a floating point value into it.
9217 The reference count for the SV is set to 1.
9218
9219 =cut
9220 */
9221
9222 SV *
9223 Perl_newSVnv(pTHX_ const NV n)
9224 {
9225     SV *sv;
9226
9227     new_SV(sv);
9228     sv_setnv(sv,n);
9229     return sv;
9230 }
9231
9232 /*
9233 =for apidoc newSViv
9234
9235 Creates a new SV and copies an integer into it.  The reference count for the
9236 SV is set to 1.
9237
9238 =cut
9239 */
9240
9241 SV *
9242 Perl_newSViv(pTHX_ const IV i)
9243 {
9244     SV *sv;
9245
9246     new_SV(sv);
9247     sv_setiv(sv,i);
9248     return sv;
9249 }
9250
9251 /*
9252 =for apidoc newSVuv
9253
9254 Creates a new SV and copies an unsigned integer into it.
9255 The reference count for the SV is set to 1.
9256
9257 =cut
9258 */
9259
9260 SV *
9261 Perl_newSVuv(pTHX_ const UV u)
9262 {
9263     SV *sv;
9264
9265     new_SV(sv);
9266     sv_setuv(sv,u);
9267     return sv;
9268 }
9269
9270 /*
9271 =for apidoc newSV_type
9272
9273 Creates a new SV, of the type specified.  The reference count for the new SV
9274 is set to 1.
9275
9276 =cut
9277 */
9278
9279 SV *
9280 Perl_newSV_type(pTHX_ const svtype type)
9281 {
9282     SV *sv;
9283
9284     new_SV(sv);
9285     sv_upgrade(sv, type);
9286     return sv;
9287 }
9288
9289 /*
9290 =for apidoc newRV_noinc
9291
9292 Creates an RV wrapper for an SV.  The reference count for the original
9293 SV is B<not> incremented.
9294
9295 =cut
9296 */
9297
9298 SV *
9299 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9300 {
9301     SV *sv = newSV_type(SVt_IV);
9302
9303     PERL_ARGS_ASSERT_NEWRV_NOINC;
9304
9305     SvTEMP_off(tmpRef);
9306     SvRV_set(sv, tmpRef);
9307     SvROK_on(sv);
9308     return sv;
9309 }
9310
9311 /* newRV_inc is the official function name to use now.
9312  * newRV_inc is in fact #defined to newRV in sv.h
9313  */
9314
9315 SV *
9316 Perl_newRV(pTHX_ SV *const sv)
9317 {
9318     PERL_ARGS_ASSERT_NEWRV;
9319
9320     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9321 }
9322
9323 /*
9324 =for apidoc newSVsv
9325
9326 Creates a new SV which is an exact duplicate of the original SV.
9327 (Uses C<sv_setsv>.)
9328
9329 =cut
9330 */
9331
9332 SV *
9333 Perl_newSVsv(pTHX_ SV *const old)
9334 {
9335     SV *sv;
9336
9337     if (!old)
9338         return NULL;
9339     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9340         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9341         return NULL;
9342     }
9343     /* Do this here, otherwise we leak the new SV if this croaks. */
9344     SvGETMAGIC(old);
9345     new_SV(sv);
9346     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9347        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9348     sv_setsv_flags(sv, old, SV_NOSTEAL);
9349     return sv;
9350 }
9351
9352 /*
9353 =for apidoc sv_reset
9354
9355 Underlying implementation for the C<reset> Perl function.
9356 Note that the perl-level function is vaguely deprecated.
9357
9358 =cut
9359 */
9360
9361 void
9362 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9363 {
9364     PERL_ARGS_ASSERT_SV_RESET;
9365
9366     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9367 }
9368
9369 void
9370 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9371 {
9372     char todo[PERL_UCHAR_MAX+1];
9373     const char *send;
9374
9375     if (!stash || SvTYPE(stash) != SVt_PVHV)
9376         return;
9377
9378     if (!s) {           /* reset ?? searches */
9379         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9380         if (mg) {
9381             const U32 count = mg->mg_len / sizeof(PMOP**);
9382             PMOP **pmp = (PMOP**) mg->mg_ptr;
9383             PMOP *const *const end = pmp + count;
9384
9385             while (pmp < end) {
9386 #ifdef USE_ITHREADS
9387                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9388 #else
9389                 (*pmp)->op_pmflags &= ~PMf_USED;
9390 #endif
9391                 ++pmp;
9392             }
9393         }
9394         return;
9395     }
9396
9397     /* reset variables */
9398
9399     if (!HvARRAY(stash))
9400         return;
9401
9402     Zero(todo, 256, char);
9403     send = s + len;
9404     while (s < send) {
9405         I32 max;
9406         I32 i = (unsigned char)*s;
9407         if (s[1] == '-') {
9408             s += 2;
9409         }
9410         max = (unsigned char)*s++;
9411         for ( ; i <= max; i++) {
9412             todo[i] = 1;
9413         }
9414         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9415             HE *entry;
9416             for (entry = HvARRAY(stash)[i];
9417                  entry;
9418                  entry = HeNEXT(entry))
9419             {
9420                 GV *gv;
9421                 SV *sv;
9422
9423                 if (!todo[(U8)*HeKEY(entry)])
9424                     continue;
9425                 gv = MUTABLE_GV(HeVAL(entry));
9426                 sv = GvSV(gv);
9427                 if (sv && !SvREADONLY(sv)) {
9428                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9429                     if (!isGV(sv)) SvOK_off(sv);
9430                 }
9431                 if (GvAV(gv)) {
9432                     av_clear(GvAV(gv));
9433                 }
9434                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9435                     hv_clear(GvHV(gv));
9436                 }
9437             }
9438         }
9439     }
9440 }
9441
9442 /*
9443 =for apidoc sv_2io
9444
9445 Using various gambits, try to get an IO from an SV: the IO slot if its a
9446 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9447 named after the PV if we're a string.
9448
9449 'Get' magic is ignored on the sv passed in, but will be called on
9450 C<SvRV(sv)> if sv is an RV.
9451
9452 =cut
9453 */
9454
9455 IO*
9456 Perl_sv_2io(pTHX_ SV *const sv)
9457 {
9458     IO* io;
9459     GV* gv;
9460
9461     PERL_ARGS_ASSERT_SV_2IO;
9462
9463     switch (SvTYPE(sv)) {
9464     case SVt_PVIO:
9465         io = MUTABLE_IO(sv);
9466         break;
9467     case SVt_PVGV:
9468     case SVt_PVLV:
9469         if (isGV_with_GP(sv)) {
9470             gv = MUTABLE_GV(sv);
9471             io = GvIO(gv);
9472             if (!io)
9473                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9474                                     HEKfARG(GvNAME_HEK(gv)));
9475             break;
9476         }
9477         /* FALLTHROUGH */
9478     default:
9479         if (!SvOK(sv))
9480             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9481         if (SvROK(sv)) {
9482             SvGETMAGIC(SvRV(sv));
9483             return sv_2io(SvRV(sv));
9484         }
9485         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9486         if (gv)
9487             io = GvIO(gv);
9488         else
9489             io = 0;
9490         if (!io) {
9491             SV *newsv = sv;
9492             if (SvGMAGICAL(sv)) {
9493                 newsv = sv_newmortal();
9494                 sv_setsv_nomg(newsv, sv);
9495             }
9496             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9497         }
9498         break;
9499     }
9500     return io;
9501 }
9502
9503 /*
9504 =for apidoc sv_2cv
9505
9506 Using various gambits, try to get a CV from an SV; in addition, try if
9507 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9508 The flags in C<lref> are passed to gv_fetchsv.
9509
9510 =cut
9511 */
9512
9513 CV *
9514 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9515 {
9516     GV *gv = NULL;
9517     CV *cv = NULL;
9518
9519     PERL_ARGS_ASSERT_SV_2CV;
9520
9521     if (!sv) {
9522         *st = NULL;
9523         *gvp = NULL;
9524         return NULL;
9525     }
9526     switch (SvTYPE(sv)) {
9527     case SVt_PVCV:
9528         *st = CvSTASH(sv);
9529         *gvp = NULL;
9530         return MUTABLE_CV(sv);
9531     case SVt_PVHV:
9532     case SVt_PVAV:
9533         *st = NULL;
9534         *gvp = NULL;
9535         return NULL;
9536     default:
9537         SvGETMAGIC(sv);
9538         if (SvROK(sv)) {
9539             if (SvAMAGIC(sv))
9540                 sv = amagic_deref_call(sv, to_cv_amg);
9541
9542             sv = SvRV(sv);
9543             if (SvTYPE(sv) == SVt_PVCV) {
9544                 cv = MUTABLE_CV(sv);
9545                 *gvp = NULL;
9546                 *st = CvSTASH(cv);
9547                 return cv;
9548             }
9549             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9550                 gv = MUTABLE_GV(sv);
9551             else
9552                 Perl_croak(aTHX_ "Not a subroutine reference");
9553         }
9554         else if (isGV_with_GP(sv)) {
9555             gv = MUTABLE_GV(sv);
9556         }
9557         else {
9558             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9559         }
9560         *gvp = gv;
9561         if (!gv) {
9562             *st = NULL;
9563             return NULL;
9564         }
9565         /* Some flags to gv_fetchsv mean don't really create the GV  */
9566         if (!isGV_with_GP(gv)) {
9567             *st = NULL;
9568             return NULL;
9569         }
9570         *st = GvESTASH(gv);
9571         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9572             /* XXX this is probably not what they think they're getting.
9573              * It has the same effect as "sub name;", i.e. just a forward
9574              * declaration! */
9575             newSTUB(gv,0);
9576         }
9577         return GvCVu(gv);
9578     }
9579 }
9580
9581 /*
9582 =for apidoc sv_true
9583
9584 Returns true if the SV has a true value by Perl's rules.
9585 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9586 instead use an in-line version.
9587
9588 =cut
9589 */
9590
9591 I32
9592 Perl_sv_true(pTHX_ SV *const sv)
9593 {
9594     if (!sv)
9595         return 0;
9596     if (SvPOK(sv)) {
9597         const XPV* const tXpv = (XPV*)SvANY(sv);
9598         if (tXpv &&
9599                 (tXpv->xpv_cur > 1 ||
9600                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9601             return 1;
9602         else
9603             return 0;
9604     }
9605     else {
9606         if (SvIOK(sv))
9607             return SvIVX(sv) != 0;
9608         else {
9609             if (SvNOK(sv))
9610                 return SvNVX(sv) != 0.0;
9611             else
9612                 return sv_2bool(sv);
9613         }
9614     }
9615 }
9616
9617 /*
9618 =for apidoc sv_pvn_force
9619
9620 Get a sensible string out of the SV somehow.
9621 A private implementation of the C<SvPV_force> macro for compilers which
9622 can't cope with complex macro expressions.  Always use the macro instead.
9623
9624 =for apidoc sv_pvn_force_flags
9625
9626 Get a sensible string out of the SV somehow.
9627 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9628 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9629 implemented in terms of this function.
9630 You normally want to use the various wrapper macros instead: see
9631 C<SvPV_force> and C<SvPV_force_nomg>
9632
9633 =cut
9634 */
9635
9636 char *
9637 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9638 {
9639     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9640
9641     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9642     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9643         sv_force_normal_flags(sv, 0);
9644
9645     if (SvPOK(sv)) {
9646         if (lp)
9647             *lp = SvCUR(sv);
9648     }
9649     else {
9650         char *s;
9651         STRLEN len;
9652  
9653         if (SvTYPE(sv) > SVt_PVLV
9654             || isGV_with_GP(sv))
9655             /* diag_listed_as: Can't coerce %s to %s in %s */
9656             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9657                 OP_DESC(PL_op));
9658         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9659         if (!s) {
9660           s = (char *)"";
9661         }
9662         if (lp)
9663             *lp = len;
9664
9665         if (SvTYPE(sv) < SVt_PV ||
9666             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9667             if (SvROK(sv))
9668                 sv_unref(sv);
9669             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9670             SvGROW(sv, len + 1);
9671             Move(s,SvPVX(sv),len,char);
9672             SvCUR_set(sv, len);
9673             SvPVX(sv)[len] = '\0';
9674         }
9675         if (!SvPOK(sv)) {
9676             SvPOK_on(sv);               /* validate pointer */
9677             SvTAINT(sv);
9678             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9679                                   PTR2UV(sv),SvPVX_const(sv)));
9680         }
9681     }
9682     (void)SvPOK_only_UTF8(sv);
9683     return SvPVX_mutable(sv);
9684 }
9685
9686 /*
9687 =for apidoc sv_pvbyten_force
9688
9689 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9690 instead.
9691
9692 =cut
9693 */
9694
9695 char *
9696 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9697 {
9698     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9699
9700     sv_pvn_force(sv,lp);
9701     sv_utf8_downgrade(sv,0);
9702     *lp = SvCUR(sv);
9703     return SvPVX(sv);
9704 }
9705
9706 /*
9707 =for apidoc sv_pvutf8n_force
9708
9709 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9710 instead.
9711
9712 =cut
9713 */
9714
9715 char *
9716 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9717 {
9718     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9719
9720     sv_pvn_force(sv,0);
9721     sv_utf8_upgrade_nomg(sv);
9722     *lp = SvCUR(sv);
9723     return SvPVX(sv);
9724 }
9725
9726 /*
9727 =for apidoc sv_reftype
9728
9729 Returns a string describing what the SV is a reference to.
9730
9731 =cut
9732 */
9733
9734 const char *
9735 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9736 {
9737     PERL_ARGS_ASSERT_SV_REFTYPE;
9738     if (ob && SvOBJECT(sv)) {
9739         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9740     }
9741     else {
9742         /* WARNING - There is code, for instance in mg.c, that assumes that
9743          * the only reason that sv_reftype(sv,0) would return a string starting
9744          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9745          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9746          * this routine inside other subs, and it saves time.
9747          * Do not change this assumption without searching for "dodgy type check" in
9748          * the code.
9749          * - Yves */
9750         switch (SvTYPE(sv)) {
9751         case SVt_NULL:
9752         case SVt_IV:
9753         case SVt_NV:
9754         case SVt_PV:
9755         case SVt_PVIV:
9756         case SVt_PVNV:
9757         case SVt_PVMG:
9758                                 if (SvVOK(sv))
9759                                     return "VSTRING";
9760                                 if (SvROK(sv))
9761                                     return "REF";
9762                                 else
9763                                     return "SCALAR";
9764
9765         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9766                                 /* tied lvalues should appear to be
9767                                  * scalars for backwards compatibility */
9768                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9769                                     ? "SCALAR" : "LVALUE");
9770         case SVt_PVAV:          return "ARRAY";
9771         case SVt_PVHV:          return "HASH";
9772         case SVt_PVCV:          return "CODE";
9773         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9774                                     ? "GLOB" : "SCALAR");
9775         case SVt_PVFM:          return "FORMAT";
9776         case SVt_PVIO:          return "IO";
9777         case SVt_INVLIST:       return "INVLIST";
9778         case SVt_REGEXP:        return "REGEXP";
9779         default:                return "UNKNOWN";
9780         }
9781     }
9782 }
9783
9784 /*
9785 =for apidoc sv_ref
9786
9787 Returns a SV describing what the SV passed in is a reference to.
9788
9789 =cut
9790 */
9791
9792 SV *
9793 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9794 {
9795     PERL_ARGS_ASSERT_SV_REF;
9796
9797     if (!dst)
9798         dst = sv_newmortal();
9799
9800     if (ob && SvOBJECT(sv)) {
9801         HvNAME_get(SvSTASH(sv))
9802                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9803                     : sv_setpvn(dst, "__ANON__", 8);
9804     }
9805     else {
9806         const char * reftype = sv_reftype(sv, 0);
9807         sv_setpv(dst, reftype);
9808     }
9809     return dst;
9810 }
9811
9812 /*
9813 =for apidoc sv_isobject
9814
9815 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9816 object.  If the SV is not an RV, or if the object is not blessed, then this
9817 will return false.
9818
9819 =cut
9820 */
9821
9822 int
9823 Perl_sv_isobject(pTHX_ SV *sv)
9824 {
9825     if (!sv)
9826         return 0;
9827     SvGETMAGIC(sv);
9828     if (!SvROK(sv))
9829         return 0;
9830     sv = SvRV(sv);
9831     if (!SvOBJECT(sv))
9832         return 0;
9833     return 1;
9834 }
9835
9836 /*
9837 =for apidoc sv_isa
9838
9839 Returns a boolean indicating whether the SV is blessed into the specified
9840 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9841 an inheritance relationship.
9842
9843 =cut
9844 */
9845
9846 int
9847 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9848 {
9849     const char *hvname;
9850
9851     PERL_ARGS_ASSERT_SV_ISA;
9852
9853     if (!sv)
9854         return 0;
9855     SvGETMAGIC(sv);
9856     if (!SvROK(sv))
9857         return 0;
9858     sv = SvRV(sv);
9859     if (!SvOBJECT(sv))
9860         return 0;
9861     hvname = HvNAME_get(SvSTASH(sv));
9862     if (!hvname)
9863         return 0;
9864
9865     return strEQ(hvname, name);
9866 }
9867
9868 /*
9869 =for apidoc newSVrv
9870
9871 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9872 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9873 SV will be blessed in the specified package.  The new SV is returned and its
9874 reference count is 1.  The reference count 1 is owned by C<rv>.
9875
9876 =cut
9877 */
9878
9879 SV*
9880 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9881 {
9882     SV *sv;
9883
9884     PERL_ARGS_ASSERT_NEWSVRV;
9885
9886     new_SV(sv);
9887
9888     SV_CHECK_THINKFIRST_COW_DROP(rv);
9889
9890     if (SvTYPE(rv) >= SVt_PVMG) {
9891         const U32 refcnt = SvREFCNT(rv);
9892         SvREFCNT(rv) = 0;
9893         sv_clear(rv);
9894         SvFLAGS(rv) = 0;
9895         SvREFCNT(rv) = refcnt;
9896
9897         sv_upgrade(rv, SVt_IV);
9898     } else if (SvROK(rv)) {
9899         SvREFCNT_dec(SvRV(rv));
9900     } else {
9901         prepare_SV_for_RV(rv);
9902     }
9903
9904     SvOK_off(rv);
9905     SvRV_set(rv, sv);
9906     SvROK_on(rv);
9907
9908     if (classname) {
9909         HV* const stash = gv_stashpv(classname, GV_ADD);
9910         (void)sv_bless(rv, stash);
9911     }
9912     return sv;
9913 }
9914
9915 SV *
9916 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9917 {
9918     SV * const lv = newSV_type(SVt_PVLV);
9919     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9920     LvTYPE(lv) = 'y';
9921     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9922     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9923     LvSTARGOFF(lv) = ix;
9924     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9925     return lv;
9926 }
9927
9928 /*
9929 =for apidoc sv_setref_pv
9930
9931 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9932 argument will be upgraded to an RV.  That RV will be modified to point to
9933 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9934 into the SV.  The C<classname> argument indicates the package for the
9935 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9936 will have a reference count of 1, and the RV will be returned.
9937
9938 Do not use with other Perl types such as HV, AV, SV, CV, because those
9939 objects will become corrupted by the pointer copy process.
9940
9941 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9942
9943 =cut
9944 */
9945
9946 SV*
9947 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9948 {
9949     PERL_ARGS_ASSERT_SV_SETREF_PV;
9950
9951     if (!pv) {
9952         sv_setsv(rv, &PL_sv_undef);
9953         SvSETMAGIC(rv);
9954     }
9955     else
9956         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9957     return rv;
9958 }
9959
9960 /*
9961 =for apidoc sv_setref_iv
9962
9963 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9964 argument will be upgraded to an RV.  That RV will be modified to point to
9965 the new SV.  The C<classname> argument indicates the package for the
9966 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9967 will have a reference count of 1, and the RV will be returned.
9968
9969 =cut
9970 */
9971
9972 SV*
9973 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9974 {
9975     PERL_ARGS_ASSERT_SV_SETREF_IV;
9976
9977     sv_setiv(newSVrv(rv,classname), iv);
9978     return rv;
9979 }
9980
9981 /*
9982 =for apidoc sv_setref_uv
9983
9984 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9985 argument will be upgraded to an RV.  That RV will be modified to point to
9986 the new SV.  The C<classname> argument indicates the package for the
9987 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9988 will have a reference count of 1, and the RV will be returned.
9989
9990 =cut
9991 */
9992
9993 SV*
9994 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9995 {
9996     PERL_ARGS_ASSERT_SV_SETREF_UV;
9997
9998     sv_setuv(newSVrv(rv,classname), uv);
9999     return rv;
10000 }
10001
10002 /*
10003 =for apidoc sv_setref_nv
10004
10005 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10006 argument will be upgraded to an RV.  That RV will be modified to point to
10007 the new SV.  The C<classname> argument indicates the package for the
10008 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10009 will have a reference count of 1, and the RV will be returned.
10010
10011 =cut
10012 */
10013
10014 SV*
10015 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10016 {
10017     PERL_ARGS_ASSERT_SV_SETREF_NV;
10018
10019     sv_setnv(newSVrv(rv,classname), nv);
10020     return rv;
10021 }
10022
10023 /*
10024 =for apidoc sv_setref_pvn
10025
10026 Copies a string into a new SV, optionally blessing the SV.  The length of the
10027 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10028 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10029 argument indicates the package for the blessing.  Set C<classname> to
10030 C<NULL> to avoid the blessing.  The new SV will have a reference count
10031 of 1, and the RV will be returned.
10032
10033 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10034
10035 =cut
10036 */
10037
10038 SV*
10039 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10040                    const char *const pv, const STRLEN n)
10041 {
10042     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10043
10044     sv_setpvn(newSVrv(rv,classname), pv, n);
10045     return rv;
10046 }
10047
10048 /*
10049 =for apidoc sv_bless
10050
10051 Blesses an SV into a specified package.  The SV must be an RV.  The package
10052 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10053 of the SV is unaffected.
10054
10055 =cut
10056 */
10057
10058 SV*
10059 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10060 {
10061     SV *tmpRef;
10062     HV *oldstash = NULL;
10063
10064     PERL_ARGS_ASSERT_SV_BLESS;
10065
10066     SvGETMAGIC(sv);
10067     if (!SvROK(sv))
10068         Perl_croak(aTHX_ "Can't bless non-reference value");
10069     tmpRef = SvRV(sv);
10070     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
10071         if (SvREADONLY(tmpRef))
10072             Perl_croak_no_modify();
10073         if (SvOBJECT(tmpRef)) {
10074             oldstash = SvSTASH(tmpRef);
10075         }
10076     }
10077     SvOBJECT_on(tmpRef);
10078     SvUPGRADE(tmpRef, SVt_PVMG);
10079     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10080     SvREFCNT_dec(oldstash);
10081
10082     if(SvSMAGICAL(tmpRef))
10083         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10084             mg_set(tmpRef);
10085
10086
10087
10088     return sv;
10089 }
10090
10091 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10092  * as it is after unglobbing it.
10093  */
10094
10095 PERL_STATIC_INLINE void
10096 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10097 {
10098     void *xpvmg;
10099     HV *stash;
10100     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10101
10102     PERL_ARGS_ASSERT_SV_UNGLOB;
10103
10104     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10105     SvFAKE_off(sv);
10106     if (!(flags & SV_COW_DROP_PV))
10107         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10108
10109     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10110     if (GvGP(sv)) {
10111         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10112            && HvNAME_get(stash))
10113             mro_method_changed_in(stash);
10114         gp_free(MUTABLE_GV(sv));
10115     }
10116     if (GvSTASH(sv)) {
10117         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10118         GvSTASH(sv) = NULL;
10119     }
10120     GvMULTI_off(sv);
10121     if (GvNAME_HEK(sv)) {
10122         unshare_hek(GvNAME_HEK(sv));
10123     }
10124     isGV_with_GP_off(sv);
10125
10126     if(SvTYPE(sv) == SVt_PVGV) {
10127         /* need to keep SvANY(sv) in the right arena */
10128         xpvmg = new_XPVMG();
10129         StructCopy(SvANY(sv), xpvmg, XPVMG);
10130         del_XPVGV(SvANY(sv));
10131         SvANY(sv) = xpvmg;
10132
10133         SvFLAGS(sv) &= ~SVTYPEMASK;
10134         SvFLAGS(sv) |= SVt_PVMG;
10135     }
10136
10137     /* Intentionally not calling any local SET magic, as this isn't so much a
10138        set operation as merely an internal storage change.  */
10139     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10140     else sv_setsv_flags(sv, temp, 0);
10141
10142     if ((const GV *)sv == PL_last_in_gv)
10143         PL_last_in_gv = NULL;
10144     else if ((const GV *)sv == PL_statgv)
10145         PL_statgv = NULL;
10146 }
10147
10148 /*
10149 =for apidoc sv_unref_flags
10150
10151 Unsets the RV status of the SV, and decrements the reference count of
10152 whatever was being referenced by the RV.  This can almost be thought of
10153 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10154 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10155 (otherwise the decrementing is conditional on the reference count being
10156 different from one or the reference being a readonly SV).
10157 See C<SvROK_off>.
10158
10159 =cut
10160 */
10161
10162 void
10163 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10164 {
10165     SV* const target = SvRV(ref);
10166
10167     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10168
10169     if (SvWEAKREF(ref)) {
10170         sv_del_backref(target, ref);
10171         SvWEAKREF_off(ref);
10172         SvRV_set(ref, NULL);
10173         return;
10174     }
10175     SvRV_set(ref, NULL);
10176     SvROK_off(ref);
10177     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10178        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10179     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10180         SvREFCNT_dec_NN(target);
10181     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10182         sv_2mortal(target);     /* Schedule for freeing later */
10183 }
10184
10185 /*
10186 =for apidoc sv_untaint
10187
10188 Untaint an SV.  Use C<SvTAINTED_off> instead.
10189
10190 =cut
10191 */
10192
10193 void
10194 Perl_sv_untaint(pTHX_ SV *const sv)
10195 {
10196     PERL_ARGS_ASSERT_SV_UNTAINT;
10197     PERL_UNUSED_CONTEXT;
10198
10199     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10200         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10201         if (mg)
10202             mg->mg_len &= ~1;
10203     }
10204 }
10205
10206 /*
10207 =for apidoc sv_tainted
10208
10209 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10210
10211 =cut
10212 */
10213
10214 bool
10215 Perl_sv_tainted(pTHX_ SV *const sv)
10216 {
10217     PERL_ARGS_ASSERT_SV_TAINTED;
10218     PERL_UNUSED_CONTEXT;
10219
10220     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10221         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10222         if (mg && (mg->mg_len & 1) )
10223             return TRUE;
10224     }
10225     return FALSE;
10226 }
10227
10228 /*
10229 =for apidoc sv_setpviv
10230
10231 Copies an integer into the given SV, also updating its string value.
10232 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10233
10234 =cut
10235 */
10236
10237 void
10238 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10239 {
10240     char buf[TYPE_CHARS(UV)];
10241     char *ebuf;
10242     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10243
10244     PERL_ARGS_ASSERT_SV_SETPVIV;
10245
10246     sv_setpvn(sv, ptr, ebuf - ptr);
10247 }
10248
10249 /*
10250 =for apidoc sv_setpviv_mg
10251
10252 Like C<sv_setpviv>, but also handles 'set' magic.
10253
10254 =cut
10255 */
10256
10257 void
10258 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10259 {
10260     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10261
10262     sv_setpviv(sv, iv);
10263     SvSETMAGIC(sv);
10264 }
10265
10266 #if defined(PERL_IMPLICIT_CONTEXT)
10267
10268 /* pTHX_ magic can't cope with varargs, so this is a no-context
10269  * version of the main function, (which may itself be aliased to us).
10270  * Don't access this version directly.
10271  */
10272
10273 void
10274 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10275 {
10276     dTHX;
10277     va_list args;
10278
10279     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10280
10281     va_start(args, pat);
10282     sv_vsetpvf(sv, pat, &args);
10283     va_end(args);
10284 }
10285
10286 /* pTHX_ magic can't cope with varargs, so this is a no-context
10287  * version of the main function, (which may itself be aliased to us).
10288  * Don't access this version directly.
10289  */
10290
10291 void
10292 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10293 {
10294     dTHX;
10295     va_list args;
10296
10297     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10298
10299     va_start(args, pat);
10300     sv_vsetpvf_mg(sv, pat, &args);
10301     va_end(args);
10302 }
10303 #endif
10304
10305 /*
10306 =for apidoc sv_setpvf
10307
10308 Works like C<sv_catpvf> but copies the text into the SV instead of
10309 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10310
10311 =cut
10312 */
10313
10314 void
10315 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10316 {
10317     va_list args;
10318
10319     PERL_ARGS_ASSERT_SV_SETPVF;
10320
10321     va_start(args, pat);
10322     sv_vsetpvf(sv, pat, &args);
10323     va_end(args);
10324 }
10325
10326 /*
10327 =for apidoc sv_vsetpvf
10328
10329 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10330 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10331
10332 Usually used via its frontend C<sv_setpvf>.
10333
10334 =cut
10335 */
10336
10337 void
10338 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10339 {
10340     PERL_ARGS_ASSERT_SV_VSETPVF;
10341
10342     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10343 }
10344
10345 /*
10346 =for apidoc sv_setpvf_mg
10347
10348 Like C<sv_setpvf>, but also handles 'set' magic.
10349
10350 =cut
10351 */
10352
10353 void
10354 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10355 {
10356     va_list args;
10357
10358     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10359
10360     va_start(args, pat);
10361     sv_vsetpvf_mg(sv, pat, &args);
10362     va_end(args);
10363 }
10364
10365 /*
10366 =for apidoc sv_vsetpvf_mg
10367
10368 Like C<sv_vsetpvf>, but also handles 'set' magic.
10369
10370 Usually used via its frontend C<sv_setpvf_mg>.
10371
10372 =cut
10373 */
10374
10375 void
10376 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10377 {
10378     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10379
10380     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10381     SvSETMAGIC(sv);
10382 }
10383
10384 #if defined(PERL_IMPLICIT_CONTEXT)
10385
10386 /* pTHX_ magic can't cope with varargs, so this is a no-context
10387  * version of the main function, (which may itself be aliased to us).
10388  * Don't access this version directly.
10389  */
10390
10391 void
10392 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10393 {
10394     dTHX;
10395     va_list args;
10396
10397     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10398
10399     va_start(args, pat);
10400     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10401     va_end(args);
10402 }
10403
10404 /* pTHX_ magic can't cope with varargs, so this is a no-context
10405  * version of the main function, (which may itself be aliased to us).
10406  * Don't access this version directly.
10407  */
10408
10409 void
10410 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10411 {
10412     dTHX;
10413     va_list args;
10414
10415     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10416
10417     va_start(args, pat);
10418     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10419     SvSETMAGIC(sv);
10420     va_end(args);
10421 }
10422 #endif
10423
10424 /*
10425 =for apidoc sv_catpvf
10426
10427 Processes its arguments like C<sprintf> and appends the formatted
10428 output to an SV.  If the appended data contains "wide" characters
10429 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10430 and characters >255 formatted with %c), the original SV might get
10431 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10432 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10433 valid UTF-8; if the original SV was bytes, the pattern should be too.
10434
10435 =cut */
10436
10437 void
10438 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10439 {
10440     va_list args;
10441
10442     PERL_ARGS_ASSERT_SV_CATPVF;
10443
10444     va_start(args, pat);
10445     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10446     va_end(args);
10447 }
10448
10449 /*
10450 =for apidoc sv_vcatpvf
10451
10452 Processes its arguments like C<vsprintf> and appends the formatted output
10453 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10454
10455 Usually used via its frontend C<sv_catpvf>.
10456
10457 =cut
10458 */
10459
10460 void
10461 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10462 {
10463     PERL_ARGS_ASSERT_SV_VCATPVF;
10464
10465     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10466 }
10467
10468 /*
10469 =for apidoc sv_catpvf_mg
10470
10471 Like C<sv_catpvf>, but also handles 'set' magic.
10472
10473 =cut
10474 */
10475
10476 void
10477 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10478 {
10479     va_list args;
10480
10481     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10482
10483     va_start(args, pat);
10484     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10485     SvSETMAGIC(sv);
10486     va_end(args);
10487 }
10488
10489 /*
10490 =for apidoc sv_vcatpvf_mg
10491
10492 Like C<sv_vcatpvf>, but also handles 'set' magic.
10493
10494 Usually used via its frontend C<sv_catpvf_mg>.
10495
10496 =cut
10497 */
10498
10499 void
10500 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10501 {
10502     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10503
10504     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10505     SvSETMAGIC(sv);
10506 }
10507
10508 /*
10509 =for apidoc sv_vsetpvfn
10510
10511 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10512 appending it.
10513
10514 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10515
10516 =cut
10517 */
10518
10519 void
10520 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10521                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10522 {
10523     PERL_ARGS_ASSERT_SV_VSETPVFN;
10524
10525     sv_setpvs(sv, "");
10526     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10527 }
10528
10529
10530 /*
10531  * Warn of missing argument to sprintf, and then return a defined value
10532  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10533  */
10534 STATIC SV*
10535 S_vcatpvfn_missing_argument(pTHX) {
10536     if (ckWARN(WARN_MISSING)) {
10537         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10538                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10539     }
10540     return &PL_sv_no;
10541 }
10542
10543
10544 STATIC I32
10545 S_expect_number(pTHX_ char **const pattern)
10546 {
10547     I32 var = 0;
10548
10549     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10550
10551     switch (**pattern) {
10552     case '1': case '2': case '3':
10553     case '4': case '5': case '6':
10554     case '7': case '8': case '9':
10555         var = *(*pattern)++ - '0';
10556         while (isDIGIT(**pattern)) {
10557             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10558             if (tmp < var)
10559                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10560             var = tmp;
10561         }
10562     }
10563     return var;
10564 }
10565
10566 STATIC char *
10567 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10568 {
10569     const int neg = nv < 0;
10570     UV uv;
10571
10572     PERL_ARGS_ASSERT_F0CONVERT;
10573
10574     if (Perl_isinfnan(nv)) {
10575         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len);
10576         *len = n;
10577         return endbuf - n;
10578     }
10579     if (neg)
10580         nv = -nv;
10581     if (nv < UV_MAX) {
10582         char *p = endbuf;
10583         nv += 0.5;
10584         uv = (UV)nv;
10585         if (uv & 1 && uv == nv)
10586             uv--;                       /* Round to even */
10587         do {
10588             const unsigned dig = uv % 10;
10589             *--p = '0' + dig;
10590         } while (uv /= 10);
10591         if (neg)
10592             *--p = '-';
10593         *len = endbuf - p;
10594         return p;
10595     }
10596     return NULL;
10597 }
10598
10599
10600 /*
10601 =for apidoc sv_vcatpvfn
10602
10603 =for apidoc sv_vcatpvfn_flags
10604
10605 Processes its arguments like C<vsprintf> and appends the formatted output
10606 to an SV.  Uses an array of SVs if the C style variable argument list is
10607 missing (NULL).  When running with taint checks enabled, indicates via
10608 C<maybe_tainted> if results are untrustworthy (often due to the use of
10609 locales).
10610
10611 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10612
10613 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10614
10615 =cut
10616 */
10617
10618 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10619                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10620                         vec_utf8 = DO_UTF8(vecsv);
10621
10622 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10623
10624 void
10625 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10626                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10627 {
10628     PERL_ARGS_ASSERT_SV_VCATPVFN;
10629
10630     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10631 }
10632
10633 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \
10634     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10635     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
10636 #  define LONGDOUBLE_LITTLE_ENDIAN
10637 #endif
10638
10639 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \
10640     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \
10641     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10642 #  define LONGDOUBLE_BIG_ENDIAN
10643 #endif
10644
10645 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10646     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10647 #  define LONGDOUBLE_X86_80_BIT
10648 #endif
10649
10650 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \
10651     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10652 #  define LONGDOUBLE_DOUBLEDOUBLE
10653 #  define DOUBLEDOUBLE_MAXBITS 1028
10654 #endif
10655
10656 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10657  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10658  * per xdigit. */
10659 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10660 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
10661 #else
10662 #  define VHEX_SIZE (1+128/4)
10663 #endif
10664
10665 /* If we do not have a known long double format, (including not using
10666  * long doubles, or long doubles being equal to doubles) then we will
10667  * fall back to the ldexp/frexp route, with which we can retrieve at
10668  * most as many bits as our widest unsigned integer type is.  We try
10669  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10670  *
10671  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10672  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10673  */
10674 #if defined(HAS_QUAD) && defined(Uquad_t)
10675 #  define MANTISSATYPE Uquad_t
10676 #  define MANTISSASIZE 8
10677 #else
10678 #  define MANTISSATYPE UV
10679 #  define MANTISSASIZE UVSIZE
10680 #endif
10681
10682 /* We make here the wild assumption that the endianness of doubles
10683  * is similar to the endianness of integers, and that there is no
10684  * middle-endianness.  This may come back to haunt us (the rumor
10685  * has it that ARM can be quite haunted). */
10686 #if BYTEORDER == 0x12345678 || BYTEORDER == 0x1234 || \
10687      defined(DOUBLEKIND_LITTLE_ENDIAN)
10688 #  define HEXTRACT_LITTLE_ENDIAN
10689 #else
10690 #  define HEXTRACT_BIG_ENDIAN
10691 #endif
10692
10693 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10694  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10695  * are being extracted from (either directly from the long double in-memory
10696  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10697  * is used to update the exponent.  vhex is the pointer to the beginning
10698  * of the output buffer (of VHEX_SIZE).
10699  *
10700  * The tricky part is that S_hextract() needs to be called twice:
10701  * the first time with vend as NULL, and the second time with vend as
10702  * the pointer returned by the first call.  What happens is that on
10703  * the first round the output size is computed, and the intended
10704  * extraction sanity checked.  On the second round the actual output
10705  * (the extraction of the hexadecimal values) takes place.
10706  * Sanity failures cause fatal failures during both rounds. */
10707 STATIC U8*
10708 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10709 {
10710     U8* v = vhex;
10711     int ix;
10712     int ixmin = 0, ixmax = 0;
10713
10714     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10715      * and elsewhere. */
10716
10717     /* These macros are just to reduce typos, they have multiple
10718      * repetitions below, but usually only one (or sometimes two)
10719      * of them is really being used. */
10720     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10721 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10722 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10723 #define HEXTRACT_OUTPUT(ix) \
10724     STMT_START { \
10725       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10726    } STMT_END
10727 #define HEXTRACT_COUNT(ix, c) \
10728     STMT_START { \
10729       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10730    } STMT_END
10731 #define HEXTRACT_BYTE(ix) \
10732     STMT_START { \
10733     if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10734    } STMT_END
10735 #define HEXTRACT_LO_NYBBLE(ix) \
10736     STMT_START { \
10737       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10738    } STMT_END
10739 #  define HEXTRACT_IMPLICIT_BIT(nv) \
10740     STMT_START { \
10741         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10742    } STMT_END
10743
10744 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10745 #  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/8)
10746 #else
10747 #  define HEXTRACTSIZE NVSIZE
10748 #endif
10749
10750     const U8* nvp = (const U8*)(&nv);
10751     const U8* vmaxend = vhex + 2 * HEXTRACTSIZE + 1;
10752     (void)Perl_frexp(PERL_ABS(nv), exponent);
10753     if (vend && (vend <= vhex || vend > vmaxend))
10754         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10755
10756     /* First check if using long doubles. */
10757 #if NVSIZE > DOUBLESIZE
10758 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10759     /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10760      * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10761     /* The bytes 13..0 are the mantissa/fraction,
10762      * the 15,14 are the sign+exponent. */
10763     HEXTRACT_IMPLICIT_BIT(nv);
10764     for (ix = 13; ix >= 0; ix--) {
10765         HEXTRACT_BYTE(ix);
10766     }
10767 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10768     /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10769      * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10770     /* The bytes 2..15 are the mantissa/fraction,
10771      * the 0,1 are the sign+exponent. */
10772     HEXTRACT_IMPLICIT_BIT(nv);
10773     for (ix = 2; ix <= 15; ix++) {
10774         HEXTRACT_BYTE(ix);
10775     }
10776 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10777     /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10778      * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10779      * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10780      * meaning that 2 or 6 bytes are empty padding. */
10781     /* The bytes 7..0 are the mantissa/fraction */
10782
10783     /* Intentionally NO HEXTRACT_IMPLICIT_BIT here. */
10784     for (ix = 7; ix >= 0; ix--) {
10785         HEXTRACT_BYTE(ix);
10786     }
10787 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10788     /* Does this format ever happen? (Wikipedia says the Motorola
10789      * 6888x math coprocessors used format _like_ this but padded
10790      * to 96 bits with 16 unused bits between the exponent and the
10791      * mantissa.) */
10792
10793     /* Intentionally NO HEXTRACT_IMPLICIT_BIT here. */
10794     for (ix = 0; ix < 8; ix++) {
10795         HEXTRACT_BYTE(ix);
10796     }
10797 #  elif defined(LONGDOUBLE_DOUBLEDOUBLE)
10798     /* Double-double format: two doubles next to each other.
10799      * The first double is the high-order one, exactly like
10800      * it would be for a "lone" double.  The second double
10801      * is shifted down using the exponent so that that there
10802      * are no common bits.  The tricky part is that the value
10803      * of the double-double is the SUM of the two doubles and
10804      * the second one can be also NEGATIVE.
10805      *
10806      * Because of this tricky construction the bytewise extraction we
10807      * use for the other long double formats doesn't work, we must
10808      * extract the values bit by bit.
10809      *
10810      * The little-endian double-double is used .. somewhere?
10811      *
10812      * The big endian double-double is used in e.g. PPC/Power (AIX)
10813      * and MIPS (SGI).
10814      *
10815      * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10816      * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
10817      * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
10818      */
10819
10820     if (nv == (NV)0.0) {
10821         if (vend)
10822             *v++ = 0;
10823         else
10824             v++;
10825         *exponent = 0;
10826     }
10827     else {
10828         NV d = nv < 0 ? -nv : nv;
10829         NV e = (NV)1.0;
10830         U8 ha = 0x0; /* hexvalue accumulator */
10831         U8 hd = 0x8; /* hexvalue digit */
10832
10833         /* Shift d and e (and update exponent) so that e <= d < 2*e,
10834          * this is essentially manual frexp(). Multiplying by 0.5 and
10835          * doubling should be lossless in binary floating point. */
10836
10837         *exponent = 1;
10838
10839         while (e > d) {
10840             e *= (NV)0.5;
10841             (*exponent)--;
10842         }
10843         /* Now d >= e */
10844
10845         while (d >= e + e) {
10846             e += e;
10847             (*exponent)++;
10848         }
10849         /* Now e <= d < 2*e */
10850
10851         /* First extract the leading hexdigit (the implicit bit). */
10852         if (d >= e) {
10853             d -= e;
10854             if (vend)
10855                 *v++ = 1;
10856             else
10857                 v++;
10858         }
10859         else {
10860             if (vend)
10861                 *v++ = 0;
10862             else
10863                 v++;
10864         }
10865         e *= (NV)0.5;
10866
10867         /* Then extract the remaining hexdigits. */
10868         while (d > (NV)0.0) {
10869             if (d >= e) {
10870                 ha |= hd;
10871                 d -= e;
10872             }
10873             if (hd == 1) {
10874                 /* Output or count in groups of four bits,
10875                  * that is, when the hexdigit is down to one. */
10876                 if (vend)
10877                     *v++ = ha;
10878                 else
10879                     v++;
10880                 /* Reset the hexvalue. */
10881                 ha = 0x0;
10882                 hd = 0x8;
10883             }
10884             else 
10885                 hd >>= 1;
10886             e *= (NV)0.5;
10887         }
10888
10889         /* Flush possible pending hexvalue. */
10890         if (ha) {
10891             if (vend)
10892                 *v++ = ha;
10893             else
10894                 v++;
10895         }
10896     }
10897 #  else
10898     Perl_croak(aTHX_
10899                "Hexadecimal float: unsupported long double format");
10900 #  endif
10901 #else
10902     /* Using normal doubles, not long doubles.
10903      *
10904      * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10905      * bytes, since we might need to handle printf precision, and
10906      * also need to insert the radix. */
10907     HEXTRACT_IMPLICIT_BIT(nv);
10908 #  ifdef HEXTRACT_LITTLE_ENDIAN
10909     HEXTRACT_LO_NYBBLE(6);
10910     for (ix = 5; ix >= 0; ix--) {
10911         HEXTRACT_BYTE(ix);
10912     }
10913 #  else
10914     HEXTRACT_LO_NYBBLE(1);
10915     for (ix = 2; ix < HEXTRACTSIZE; ix++) {
10916         HEXTRACT_BYTE(ix);
10917     }
10918 #  endif
10919 #endif
10920     /* Croak for various reasons: if the output pointer escaped the
10921      * output buffer, if the extraction index escaped the extraction
10922      * buffer, or if the ending output pointer didn't match the
10923      * previously computed value. */
10924     if (v <= vhex || v - vhex >= VHEX_SIZE ||
10925         /* For double-double the ixmin and ixmax stay at zero,
10926          * which is convenient since the HEXTRACTSIZE is tricky
10927          * for double-double. */
10928         ixmin < 0 || ixmax >= HEXTRACTSIZE ||
10929         (vend && v != vend))
10930         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10931     return v;
10932 }
10933
10934 void
10935 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10936                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10937                        const U32 flags)
10938 {
10939     char *p;
10940     char *q;
10941     const char *patend;
10942     STRLEN origlen;
10943     I32 svix = 0;
10944     static const char nullstr[] = "(null)";
10945     SV *argsv = NULL;
10946     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10947     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10948     SV *nsv = NULL;
10949     /* Times 4: a decimal digit takes more than 3 binary digits.
10950      * NV_DIG: mantissa takes than many decimal digits.
10951      * Plus 32: Playing safe. */
10952     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10953     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
10954     bool hexfp = FALSE; /* hexadecimal floating point? */
10955
10956     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
10957
10958     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10959     PERL_UNUSED_ARG(maybe_tainted);
10960
10961     if (flags & SV_GMAGIC)
10962         SvGETMAGIC(sv);
10963
10964     /* no matter what, this is a string now */
10965     (void)SvPV_force_nomg(sv, origlen);
10966
10967     /* special-case "", "%s", and "%-p" (SVf - see below) */
10968     if (patlen == 0) {
10969         if (svmax && ckWARN(WARN_REDUNDANT))
10970             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10971                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10972         return;
10973     }
10974     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10975         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10976             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10977                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10978
10979         if (args) {
10980             const char * const s = va_arg(*args, char*);
10981             sv_catpv_nomg(sv, s ? s : nullstr);
10982         }
10983         else if (svix < svmax) {
10984             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10985             SvGETMAGIC(*svargs);
10986             sv_catsv_nomg(sv, *svargs);
10987         }
10988         else
10989             S_vcatpvfn_missing_argument(aTHX);
10990         return;
10991     }
10992     if (args && patlen == 3 && pat[0] == '%' &&
10993                 pat[1] == '-' && pat[2] == 'p') {
10994         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10995             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10996                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10997         argsv = MUTABLE_SV(va_arg(*args, void*));
10998         sv_catsv_nomg(sv, argsv);
10999         return;
11000     }
11001
11002 #ifndef USE_LONG_DOUBLE
11003     /* special-case "%.<number>[gf]" */
11004     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11005          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11006         unsigned digits = 0;
11007         const char *pp;
11008
11009         pp = pat + 2;
11010         while (*pp >= '0' && *pp <= '9')
11011             digits = 10 * digits + (*pp++ - '0');
11012
11013         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11014            format the first argument and WARN_REDUNDANT if svmax > 1?
11015            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11016         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11017             const NV nv = SvNV(*svargs);
11018             if (LIKELY(!Perl_isinfnan(nv))) {
11019                 if (*pp == 'g') {
11020                     /* Add check for digits != 0 because it seems that some
11021                        gconverts are buggy in this case, and we don't yet have
11022                        a Configure test for this.  */
11023                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11024                         /* 0, point, slack */
11025                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11026                         PERL_UNUSED_RESULT(Gconvert(nv, (int)digits, 0, ebuf));
11027                         sv_catpv_nomg(sv, ebuf);
11028                         if (*ebuf) /* May return an empty string for digits==0 */
11029                             return;
11030                     }
11031                 } else if (!digits) {
11032                     STRLEN l;
11033
11034                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11035                         sv_catpvn_nomg(sv, p, l);
11036                         return;
11037                     }
11038                 }
11039             }
11040         }
11041     }
11042 #endif /* !USE_LONG_DOUBLE */
11043
11044     if (!args && svix < svmax && DO_UTF8(*svargs))
11045         has_utf8 = TRUE;
11046
11047     patend = (char*)pat + patlen;
11048     for (p = (char*)pat; p < patend; p = q) {
11049         bool alt = FALSE;
11050         bool left = FALSE;
11051         bool vectorize = FALSE;
11052         bool vectorarg = FALSE;
11053         bool vec_utf8 = FALSE;
11054         char fill = ' ';
11055         char plus = 0;
11056         char intsize = 0;
11057         STRLEN width = 0;
11058         STRLEN zeros = 0;
11059         bool has_precis = FALSE;
11060         STRLEN precis = 0;
11061         const I32 osvix = svix;
11062         bool is_utf8 = FALSE;  /* is this item utf8?   */
11063 #ifdef HAS_LDBL_SPRINTF_BUG
11064         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11065            with sfio - Allen <allens@cpan.org> */
11066         bool fix_ldbl_sprintf_bug = FALSE;
11067 #endif
11068
11069         char esignbuf[4];
11070         U8 utf8buf[UTF8_MAXBYTES+1];
11071         STRLEN esignlen = 0;
11072
11073         const char *eptr = NULL;
11074         const char *fmtstart;
11075         STRLEN elen = 0;
11076         SV *vecsv = NULL;
11077         const U8 *vecstr = NULL;
11078         STRLEN veclen = 0;
11079         char c = 0;
11080         int i;
11081         unsigned base = 0;
11082         IV iv = 0;
11083         UV uv = 0;
11084         /* We need a long double target in case HAS_LONG_DOUBLE,
11085          * even without USE_LONG_DOUBLE, so that we can printf with
11086          * long double formats, even without NV being long double.
11087          * But we call the target 'fv' instead of 'nv', since most of
11088          * the time it is not (most compilers these days recognize
11089          * "long double", even if only as a synonym for "double").
11090         */
11091 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && defined(PERL_PRIgldbl)
11092         long double fv;
11093 #  define FV_ISFINITE(x) Perl_isfinitel(x)
11094 #  define FV_GF PERL_PRIgldbl
11095 #else
11096         NV fv;
11097 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11098 #  define FV_GF NVgf
11099 #endif
11100         STRLEN have;
11101         STRLEN need;
11102         STRLEN gap;
11103         const char *dotstr = ".";
11104         STRLEN dotstrlen = 1;
11105         I32 efix = 0; /* explicit format parameter index */
11106         I32 ewix = 0; /* explicit width index */
11107         I32 epix = 0; /* explicit precision index */
11108         I32 evix = 0; /* explicit vector index */
11109         bool asterisk = FALSE;
11110         bool infnan = FALSE;
11111
11112         /* echo everything up to the next format specification */
11113         for (q = p; q < patend && *q != '%'; ++q) ;
11114         if (q > p) {
11115             if (has_utf8 && !pat_utf8)
11116                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11117             else
11118                 sv_catpvn_nomg(sv, p, q - p);
11119             p = q;
11120         }
11121         if (q++ >= patend)
11122             break;
11123
11124         fmtstart = q;
11125
11126 /*
11127     We allow format specification elements in this order:
11128         \d+\$              explicit format parameter index
11129         [-+ 0#]+           flags
11130         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11131         0                  flag (as above): repeated to allow "v02"     
11132         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11133         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11134         [hlqLV]            size
11135     [%bcdefginopsuxDFOUX] format (mandatory)
11136 */
11137
11138         if (args) {
11139 /*  
11140         As of perl5.9.3, printf format checking is on by default.
11141         Internally, perl uses %p formats to provide an escape to
11142         some extended formatting.  This block deals with those
11143         extensions: if it does not match, (char*)q is reset and
11144         the normal format processing code is used.
11145
11146         Currently defined extensions are:
11147                 %p              include pointer address (standard)      
11148                 %-p     (SVf)   include an SV (previously %_)
11149                 %-<num>p        include an SV with precision <num>      
11150                 %2p             include a HEK
11151                 %3p             include a HEK with precision of 256
11152                 %4p             char* preceded by utf8 flag and length
11153                 %<num>p         (where num is 1 or > 4) reserved for future
11154                                 extensions
11155
11156         Robin Barker 2005-07-14 (but modified since)
11157
11158                 %1p     (VDf)   removed.  RMB 2007-10-19
11159 */
11160             char* r = q; 
11161             bool sv = FALSE;    
11162             STRLEN n = 0;
11163             if (*q == '-')
11164                 sv = *q++;
11165             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11166                 /* The argument has already gone through cBOOL, so the cast
11167                    is safe. */
11168                 is_utf8 = (bool)va_arg(*args, int);
11169                 elen = va_arg(*args, UV);
11170                 eptr = va_arg(*args, char *);
11171                 q += sizeof(UTF8f)-1;
11172                 goto string;
11173             }
11174             n = expect_number(&q);
11175             if (*q++ == 'p') {
11176                 if (sv) {                       /* SVf */
11177                     if (n) {
11178                         precis = n;
11179                         has_precis = TRUE;
11180                     }
11181                     argsv = MUTABLE_SV(va_arg(*args, void*));
11182                     eptr = SvPV_const(argsv, elen);
11183                     if (DO_UTF8(argsv))
11184                         is_utf8 = TRUE;
11185                     goto string;
11186                 }
11187                 else if (n==2 || n==3) {        /* HEKf */
11188                     HEK * const hek = va_arg(*args, HEK *);
11189                     eptr = HEK_KEY(hek);
11190                     elen = HEK_LEN(hek);
11191                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11192                     if (n==3) precis = 256, has_precis = TRUE;
11193                     goto string;
11194                 }
11195                 else if (n) {
11196                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11197                                      "internal %%<num>p might conflict with future printf extensions");
11198                 }
11199             }
11200             q = r; 
11201         }
11202
11203         if ( (width = expect_number(&q)) ) {
11204             if (*q == '$') {
11205                 ++q;
11206                 efix = width;
11207                 if (!no_redundant_warning)
11208                     /* I've forgotten if it's a better
11209                        micro-optimization to always set this or to
11210                        only set it if it's unset */
11211                     no_redundant_warning = TRUE;
11212             } else {
11213                 goto gotwidth;
11214             }
11215         }
11216
11217         /* FLAGS */
11218
11219         while (*q) {
11220             switch (*q) {
11221             case ' ':
11222             case '+':
11223                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11224                     q++;
11225                 else
11226                     plus = *q++;
11227                 continue;
11228
11229             case '-':
11230                 left = TRUE;
11231                 q++;
11232                 continue;
11233
11234             case '0':
11235                 fill = *q++;
11236                 continue;
11237
11238             case '#':
11239                 alt = TRUE;
11240                 q++;
11241                 continue;
11242
11243             default:
11244                 break;
11245             }
11246             break;
11247         }
11248
11249       tryasterisk:
11250         if (*q == '*') {
11251             q++;
11252             if ( (ewix = expect_number(&q)) )
11253                 if (*q++ != '$')
11254                     goto unknown;
11255             asterisk = TRUE;
11256         }
11257         if (*q == 'v') {
11258             q++;
11259             if (vectorize)
11260                 goto unknown;
11261             if ((vectorarg = asterisk)) {
11262                 evix = ewix;
11263                 ewix = 0;
11264                 asterisk = FALSE;
11265             }
11266             vectorize = TRUE;
11267             goto tryasterisk;
11268         }
11269
11270         if (!asterisk)
11271         {
11272             if( *q == '0' )
11273                 fill = *q++;
11274             width = expect_number(&q);
11275         }
11276
11277         if (vectorize && vectorarg) {
11278             /* vectorizing, but not with the default "." */
11279             if (args)
11280                 vecsv = va_arg(*args, SV*);
11281             else if (evix) {
11282                 vecsv = (evix > 0 && evix <= svmax)
11283                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11284             } else {
11285                 vecsv = svix < svmax
11286                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11287             }
11288             dotstr = SvPV_const(vecsv, dotstrlen);
11289             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11290                bad with tied or overloaded values that return UTF8.  */
11291             if (DO_UTF8(vecsv))
11292                 is_utf8 = TRUE;
11293             else if (has_utf8) {
11294                 vecsv = sv_mortalcopy(vecsv);
11295                 sv_utf8_upgrade(vecsv);
11296                 dotstr = SvPV_const(vecsv, dotstrlen);
11297                 is_utf8 = TRUE;
11298             }               
11299         }
11300
11301         if (asterisk) {
11302             if (args)
11303                 i = va_arg(*args, int);
11304             else
11305                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11306                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11307             left |= (i < 0);
11308             width = (i < 0) ? -i : i;
11309         }
11310       gotwidth:
11311
11312         /* PRECISION */
11313
11314         if (*q == '.') {
11315             q++;
11316             if (*q == '*') {
11317                 q++;
11318                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11319                     goto unknown;
11320                 /* XXX: todo, support specified precision parameter */
11321                 if (epix)
11322                     goto unknown;
11323                 if (args)
11324                     i = va_arg(*args, int);
11325                 else
11326                     i = (ewix ? ewix <= svmax : svix < svmax)
11327                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11328                 precis = i;
11329                 has_precis = !(i < 0);
11330             }
11331             else {
11332                 precis = 0;
11333                 while (isDIGIT(*q))
11334                     precis = precis * 10 + (*q++ - '0');
11335                 has_precis = TRUE;
11336             }
11337         }
11338
11339         if (vectorize) {
11340             if (args) {
11341                 VECTORIZE_ARGS
11342             }
11343             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11344                 vecsv = svargs[efix ? efix-1 : svix++];
11345                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11346                 vec_utf8 = DO_UTF8(vecsv);
11347
11348                 /* if this is a version object, we need to convert
11349                  * back into v-string notation and then let the
11350                  * vectorize happen normally
11351                  */
11352                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11353                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11354                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11355                         "vector argument not supported with alpha versions");
11356                         goto vdblank;
11357                     }
11358                     vecsv = sv_newmortal();
11359                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11360                                  vecsv);
11361                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11362                     vec_utf8 = DO_UTF8(vecsv);
11363                 }
11364             }
11365             else {
11366               vdblank:
11367                 vecstr = (U8*)"";
11368                 veclen = 0;
11369             }
11370         }
11371
11372         /* SIZE */
11373
11374         switch (*q) {
11375 #ifdef WIN32
11376         case 'I':                       /* Ix, I32x, and I64x */
11377 #  ifdef USE_64_BIT_INT
11378             if (q[1] == '6' && q[2] == '4') {
11379                 q += 3;
11380                 intsize = 'q';
11381                 break;
11382             }
11383 #  endif
11384             if (q[1] == '3' && q[2] == '2') {
11385                 q += 3;
11386                 break;
11387             }
11388 #  ifdef USE_64_BIT_INT
11389             intsize = 'q';
11390 #  endif
11391             q++;
11392             break;
11393 #endif
11394 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11395         case 'L':                       /* Ld */
11396             /* FALLTHROUGH */
11397 #if IVSIZE >= 8
11398         case 'q':                       /* qd */
11399 #endif
11400             intsize = 'q';
11401             q++;
11402             break;
11403 #endif
11404         case 'l':
11405             ++q;
11406 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11407             if (*q == 'l') {    /* lld, llf */
11408                 intsize = 'q';
11409                 ++q;
11410             }
11411             else
11412 #endif
11413                 intsize = 'l';
11414             break;
11415         case 'h':
11416             if (*++q == 'h') {  /* hhd, hhu */
11417                 intsize = 'c';
11418                 ++q;
11419             }
11420             else
11421                 intsize = 'h';
11422             break;
11423         case 'V':
11424         case 'z':
11425         case 't':
11426 #ifdef I_STDINT
11427         case 'j':
11428 #endif
11429             intsize = *q++;
11430             break;
11431         }
11432
11433         /* CONVERSION */
11434
11435         if (*q == '%') {
11436             eptr = q++;
11437             elen = 1;
11438             if (vectorize) {
11439                 c = '%';
11440                 goto unknown;
11441             }
11442             goto string;
11443         }
11444
11445         if (!vectorize && !args) {
11446             if (efix) {
11447                 const I32 i = efix-1;
11448                 argsv = (i >= 0 && i < svmax)
11449                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11450             } else {
11451                 argsv = (svix >= 0 && svix < svmax)
11452                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11453             }
11454         }
11455
11456         if (argsv && SvNOK(argsv)) {
11457             /* XXX va_arg(*args) case? */
11458             infnan = Perl_isinfnan(SvNV(argsv));
11459         }
11460
11461         switch (c = *q++) {
11462
11463             /* STRINGS */
11464
11465         case 'c':
11466             if (vectorize)
11467                 goto unknown;
11468             uv = (args) ? va_arg(*args, int) :
11469                 infnan ? UNICODE_REPLACEMENT : SvIV(argsv);
11470             if ((uv > 255 ||
11471                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11472                 && !IN_BYTES) {
11473                 eptr = (char*)utf8buf;
11474                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11475                 is_utf8 = TRUE;
11476             }
11477             else {
11478                 c = (char)uv;
11479                 eptr = &c;
11480                 elen = 1;
11481             }
11482             goto string;
11483
11484         case 's':
11485             if (vectorize)
11486                 goto unknown;
11487             if (args) {
11488                 eptr = va_arg(*args, char*);
11489                 if (eptr)
11490                     elen = strlen(eptr);
11491                 else {
11492                     eptr = (char *)nullstr;
11493                     elen = sizeof nullstr - 1;
11494                 }
11495             }
11496             else {
11497                 eptr = SvPV_const(argsv, elen);
11498                 if (DO_UTF8(argsv)) {
11499                     STRLEN old_precis = precis;
11500                     if (has_precis && precis < elen) {
11501                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11502                         STRLEN p = precis > ulen ? ulen : precis;
11503                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11504                                                         /* sticks at end */
11505                     }
11506                     if (width) { /* fudge width (can't fudge elen) */
11507                         if (has_precis && precis < elen)
11508                             width += precis - old_precis;
11509                         else
11510                             width +=
11511                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11512                     }
11513                     is_utf8 = TRUE;
11514                 }
11515             }
11516
11517         string:
11518             if (has_precis && precis < elen)
11519                 elen = precis;
11520             break;
11521
11522             /* INTEGERS */
11523
11524         case 'p':
11525             if (infnan) {
11526                 c = 'g';
11527                 goto floating_point;
11528             }
11529             if (alt || vectorize)
11530                 goto unknown;
11531             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11532             base = 16;
11533             goto integer;
11534
11535         case 'D':
11536 #ifdef IV_IS_QUAD
11537             intsize = 'q';
11538 #else
11539             intsize = 'l';
11540 #endif
11541             /* FALLTHROUGH */
11542         case 'd':
11543         case 'i':
11544             if (infnan) {
11545                 c = 'g';
11546                 goto floating_point;
11547             }
11548             if (vectorize) {
11549                 STRLEN ulen;
11550                 if (!veclen)
11551                     continue;
11552                 if (vec_utf8)
11553                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11554                                         UTF8_ALLOW_ANYUV);
11555                 else {
11556                     uv = *vecstr;
11557                     ulen = 1;
11558                 }
11559                 vecstr += ulen;
11560                 veclen -= ulen;
11561                 if (plus)
11562                      esignbuf[esignlen++] = plus;
11563             }
11564             else if (args) {
11565                 switch (intsize) {
11566                 case 'c':       iv = (char)va_arg(*args, int); break;
11567                 case 'h':       iv = (short)va_arg(*args, int); break;
11568                 case 'l':       iv = va_arg(*args, long); break;
11569                 case 'V':       iv = va_arg(*args, IV); break;
11570                 case 'z':       iv = va_arg(*args, SSize_t); break;
11571 #ifdef HAS_PTRDIFF_T
11572                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11573 #endif
11574                 default:        iv = va_arg(*args, int); break;
11575 #ifdef I_STDINT
11576                 case 'j':       iv = va_arg(*args, intmax_t); break;
11577 #endif
11578                 case 'q':
11579 #if IVSIZE >= 8
11580                                 iv = va_arg(*args, Quad_t); break;
11581 #else
11582                                 goto unknown;
11583 #endif
11584                 }
11585             }
11586             else {
11587                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
11588                 switch (intsize) {
11589                 case 'c':       iv = (char)tiv; break;
11590                 case 'h':       iv = (short)tiv; break;
11591                 case 'l':       iv = (long)tiv; break;
11592                 case 'V':
11593                 default:        iv = tiv; break;
11594                 case 'q':
11595 #if IVSIZE >= 8
11596                                 iv = (Quad_t)tiv; break;
11597 #else
11598                                 goto unknown;
11599 #endif
11600                 }
11601             }
11602             if ( !vectorize )   /* we already set uv above */
11603             {
11604                 if (iv >= 0) {
11605                     uv = iv;
11606                     if (plus)
11607                         esignbuf[esignlen++] = plus;
11608                 }
11609                 else {
11610                     uv = -iv;
11611                     esignbuf[esignlen++] = '-';
11612                 }
11613             }
11614             base = 10;
11615             goto integer;
11616
11617         case 'U':
11618 #ifdef IV_IS_QUAD
11619             intsize = 'q';
11620 #else
11621             intsize = 'l';
11622 #endif
11623             /* FALLTHROUGH */
11624         case 'u':
11625             base = 10;
11626             goto uns_integer;
11627
11628         case 'B':
11629         case 'b':
11630             base = 2;
11631             goto uns_integer;
11632
11633         case 'O':
11634 #ifdef IV_IS_QUAD
11635             intsize = 'q';
11636 #else
11637             intsize = 'l';
11638 #endif
11639             /* FALLTHROUGH */
11640         case 'o':
11641             base = 8;
11642             goto uns_integer;
11643
11644         case 'X':
11645         case 'x':
11646             base = 16;
11647
11648         uns_integer:
11649             if (infnan) {
11650                 c = 'g';
11651                 goto floating_point;
11652             }
11653             if (vectorize) {
11654                 STRLEN ulen;
11655         vector:
11656                 if (!veclen)
11657                     continue;
11658                 if (vec_utf8)
11659                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11660                                         UTF8_ALLOW_ANYUV);
11661                 else {
11662                     uv = *vecstr;
11663                     ulen = 1;
11664                 }
11665                 vecstr += ulen;
11666                 veclen -= ulen;
11667             }
11668             else if (args) {
11669                 switch (intsize) {
11670                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11671                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11672                 case 'l':  uv = va_arg(*args, unsigned long); break;
11673                 case 'V':  uv = va_arg(*args, UV); break;
11674                 case 'z':  uv = va_arg(*args, Size_t); break;
11675 #ifdef HAS_PTRDIFF_T
11676                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11677 #endif
11678 #ifdef I_STDINT
11679                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11680 #endif
11681                 default:   uv = va_arg(*args, unsigned); break;
11682                 case 'q':
11683 #if IVSIZE >= 8
11684                            uv = va_arg(*args, Uquad_t); break;
11685 #else
11686                            goto unknown;
11687 #endif
11688                 }
11689             }
11690             else {
11691                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11692                 switch (intsize) {
11693                 case 'c':       uv = (unsigned char)tuv; break;
11694                 case 'h':       uv = (unsigned short)tuv; break;
11695                 case 'l':       uv = (unsigned long)tuv; break;
11696                 case 'V':
11697                 default:        uv = tuv; break;
11698                 case 'q':
11699 #if IVSIZE >= 8
11700                                 uv = (Uquad_t)tuv; break;
11701 #else
11702                                 goto unknown;
11703 #endif
11704                 }
11705             }
11706
11707         integer:
11708             {
11709                 char *ptr = ebuf + sizeof ebuf;
11710                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11711                 unsigned dig;
11712                 zeros = 0;
11713
11714                 switch (base) {
11715                 case 16:
11716                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11717                     do {
11718                         dig = uv & 15;
11719                         *--ptr = p[dig];
11720                     } while (uv >>= 4);
11721                     if (tempalt) {
11722                         esignbuf[esignlen++] = '0';
11723                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11724                     }
11725                     break;
11726                 case 8:
11727                     do {
11728                         dig = uv & 7;
11729                         *--ptr = '0' + dig;
11730                     } while (uv >>= 3);
11731                     if (alt && *ptr != '0')
11732                         *--ptr = '0';
11733                     break;
11734                 case 2:
11735                     do {
11736                         dig = uv & 1;
11737                         *--ptr = '0' + dig;
11738                     } while (uv >>= 1);
11739                     if (tempalt) {
11740                         esignbuf[esignlen++] = '0';
11741                         esignbuf[esignlen++] = c;
11742                     }
11743                     break;
11744                 default:                /* it had better be ten or less */
11745                     do {
11746                         dig = uv % base;
11747                         *--ptr = '0' + dig;
11748                     } while (uv /= base);
11749                     break;
11750                 }
11751                 elen = (ebuf + sizeof ebuf) - ptr;
11752                 eptr = ptr;
11753                 if (has_precis) {
11754                     if (precis > elen)
11755                         zeros = precis - elen;
11756                     else if (precis == 0 && elen == 1 && *eptr == '0'
11757                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11758                         elen = 0;
11759
11760                 /* a precision nullifies the 0 flag. */
11761                     if (fill == '0')
11762                         fill = ' ';
11763                 }
11764             }
11765             break;
11766
11767             /* FLOATING POINT */
11768
11769         floating_point:
11770
11771         case 'F':
11772             c = 'f';            /* maybe %F isn't supported here */
11773             /* FALLTHROUGH */
11774         case 'e': case 'E':
11775         case 'f':
11776         case 'g': case 'G':
11777         case 'a': case 'A':
11778             if (vectorize)
11779                 goto unknown;
11780
11781             /* This is evil, but floating point is even more evil */
11782
11783             /* for SV-style calling, we can only get NV
11784                for C-style calling, we assume %f is double;
11785                for simplicity we allow any of %Lf, %llf, %qf for long double
11786             */
11787             switch (intsize) {
11788             case 'V':
11789 #if defined(USE_LONG_DOUBLE)
11790                 intsize = 'q';
11791 #endif
11792                 break;
11793 /* [perl #20339] - we should accept and ignore %lf rather than die */
11794             case 'l':
11795                 /* FALLTHROUGH */
11796             default:
11797 #if defined(USE_LONG_DOUBLE)
11798                 intsize = args ? 0 : 'q';
11799 #endif
11800                 break;
11801             case 'q':
11802 #if defined(HAS_LONG_DOUBLE)
11803                 break;
11804 #else
11805                 /* FALLTHROUGH */
11806 #endif
11807             case 'c':
11808             case 'h':
11809             case 'z':
11810             case 't':
11811             case 'j':
11812                 goto unknown;
11813             }
11814
11815             /* Now we need (long double) if intsize == 'q', else (double). */
11816             if (args) {
11817                 /* Note: do not pull NVs off the va_list with va_arg()
11818                  * (pull doubles instead) because if you have a build
11819                  * with long doubles, you would always be pulling long
11820                  * doubles, which would badly break anyone using only
11821                  * doubles (i.e. the majority of builds). In other
11822                  * words, you cannot mix doubles and long doubles.
11823                  * The only case where you can pull off long doubles
11824                  * is when the format specifier explicitly asks so with
11825                  * e.g. "%Lg". */
11826 #if LONG_DOUBLESIZE > DOUBLESIZE
11827                 fv = intsize == 'q' ?
11828                     va_arg(*args, long double) : va_arg(*args, double);
11829 #else
11830                 fv = va_arg(*args, double);
11831 #endif
11832             }
11833             else
11834                 fv = SvNV(argsv);
11835
11836             need = 0;
11837             /* frexp() (or frexpl) has some unspecified behaviour for
11838              * nan/inf/-inf, so let's avoid calling that on non-finites. */
11839             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
11840                 i = PERL_INT_MIN;
11841                 (void)Perl_frexp((NV)fv, &i);
11842                 if (i == PERL_INT_MIN)
11843                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
11844                 /* Do not set hexfp earlier since we want to printf
11845                  * Inf/NaN for Inf/NaN, not their hexfp. */
11846                 hexfp = isALPHA_FOLD_EQ(c, 'a');
11847                 if (UNLIKELY(hexfp)) {
11848                     /* This seriously overshoots in most cases, but
11849                      * better the undershooting.  Firstly, all bytes
11850                      * of the NV are not mantissa, some of them are
11851                      * exponent.  Secondly, for the reasonably common
11852                      * long doubles case, the "80-bit extended", two
11853                      * or six bytes of the NV are unused. */
11854                     need +=
11855                         (fv < 0) ? 1 : 0 + /* possible unary minus */
11856                         2 + /* "0x" */
11857                         1 + /* the very unlikely carry */
11858                         1 + /* "1" */
11859                         1 + /* "." */
11860                         2 * NVSIZE + /* 2 hexdigits for each byte */
11861                         2 + /* "p+" */
11862                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
11863                         1;   /* \0 */
11864 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11865                     /* However, for the "double double", we need more.
11866                      * Since each double has their own exponent, the
11867                      * doubles may float (haha) rather far from each
11868                      * other, and the number of required bits is much
11869                      * larger, up to total of 1028 bits.  (NOTE: this
11870                      * is not actually implemented properly yet,
11871                      * we are using just the first double, see
11872                      * S_hextract() for details.  But let's prepare
11873                      * for the future.) */
11874
11875                     /* 2 hexdigits for each byte. */ 
11876                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
11877                     /* the size for the exponent already added */
11878 #endif
11879 #ifdef USE_LOCALE_NUMERIC
11880                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11881                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
11882                             need += SvLEN(PL_numeric_radix_sv);
11883                         RESTORE_LC_NUMERIC();
11884 #endif
11885                 }
11886                 else if (i > 0) {
11887                     need = BIT_DIGITS(i);
11888                 } /* if i < 0, the number of digits is hard to predict. */
11889             }
11890             need += has_precis ? precis : 6; /* known default */
11891
11892             if (need < width)
11893                 need = width;
11894
11895 #ifdef HAS_LDBL_SPRINTF_BUG
11896             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11897                with sfio - Allen <allens@cpan.org> */
11898
11899 #  ifdef DBL_MAX
11900 #    define MY_DBL_MAX DBL_MAX
11901 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11902 #    if DOUBLESIZE >= 8
11903 #      define MY_DBL_MAX 1.7976931348623157E+308L
11904 #    else
11905 #      define MY_DBL_MAX 3.40282347E+38L
11906 #    endif
11907 #  endif
11908
11909 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11910 #    define MY_DBL_MAX_BUG 1L
11911 #  else
11912 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11913 #  endif
11914
11915 #  ifdef DBL_MIN
11916 #    define MY_DBL_MIN DBL_MIN
11917 #  else  /* XXX guessing! -Allen */
11918 #    if DOUBLESIZE >= 8
11919 #      define MY_DBL_MIN 2.2250738585072014E-308L
11920 #    else
11921 #      define MY_DBL_MIN 1.17549435E-38L
11922 #    endif
11923 #  endif
11924
11925             if ((intsize == 'q') && (c == 'f') &&
11926                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
11927                 (need < DBL_DIG)) {
11928                 /* it's going to be short enough that
11929                  * long double precision is not needed */
11930
11931                 if ((fv <= 0L) && (fv >= -0L))
11932                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11933                 else {
11934                     /* would use Perl_fp_class as a double-check but not
11935                      * functional on IRIX - see perl.h comments */
11936
11937                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
11938                         /* It's within the range that a double can represent */
11939 #if defined(DBL_MAX) && !defined(DBL_MIN)
11940                         if ((fv >= ((long double)1/DBL_MAX)) ||
11941                             (fv <= (-(long double)1/DBL_MAX)))
11942 #endif
11943                         fix_ldbl_sprintf_bug = TRUE;
11944                     }
11945                 }
11946                 if (fix_ldbl_sprintf_bug == TRUE) {
11947                     double temp;
11948
11949                     intsize = 0;
11950                     temp = (double)fv;
11951                     fv = (NV)temp;
11952                 }
11953             }
11954
11955 #  undef MY_DBL_MAX
11956 #  undef MY_DBL_MAX_BUG
11957 #  undef MY_DBL_MIN
11958
11959 #endif /* HAS_LDBL_SPRINTF_BUG */
11960
11961             need += 20; /* fudge factor */
11962             if (PL_efloatsize < need) {
11963                 Safefree(PL_efloatbuf);
11964                 PL_efloatsize = need + 20; /* more fudge */
11965                 Newx(PL_efloatbuf, PL_efloatsize, char);
11966                 PL_efloatbuf[0] = '\0';
11967             }
11968
11969             if ( !(width || left || plus || alt) && fill != '0'
11970                  && has_precis && intsize != 'q'        /* Shortcuts */
11971                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
11972                 /* See earlier comment about buggy Gconvert when digits,
11973                    aka precis is 0  */
11974                 if ( c == 'g' && precis ) {
11975                     STORE_LC_NUMERIC_SET_TO_NEEDED();
11976                     PERL_UNUSED_RESULT(Gconvert((NV)fv, (int)precis, 0, PL_efloatbuf));
11977                     /* May return an empty string for digits==0 */
11978                     if (*PL_efloatbuf) {
11979                         elen = strlen(PL_efloatbuf);
11980                         goto float_converted;
11981                     }
11982                 } else if ( c == 'f' && !precis ) {
11983                     if ((eptr = F0convert(fv, ebuf + sizeof ebuf, &elen)))
11984                         break;
11985                 }
11986             }
11987
11988             if (UNLIKELY(hexfp)) {
11989                 /* Hexadecimal floating point. */
11990                 char* p = PL_efloatbuf;
11991                 U8 vhex[VHEX_SIZE];
11992                 U8* v = vhex; /* working pointer to vhex */
11993                 U8* vend; /* pointer to one beyond last digit of vhex */
11994                 U8* vfnz = NULL; /* first non-zero */
11995                 const bool lower = (c == 'a');
11996                 /* At output the values of vhex (up to vend) will
11997                  * be mapped through the xdig to get the actual
11998                  * human-readable xdigits. */
11999                 const char* xdig = PL_hexdigit;
12000                 int zerotail = 0; /* how many extra zeros to append */
12001                 int exponent = 0; /* exponent of the floating point input */
12002
12003                 /* XXX: denormals, NaN, Inf.
12004                  *
12005                  * For example with denormals, (assuming the vanilla
12006                  * 64-bit double): the exponent is zero. 1xp-1074 is
12007                  * the smallest denormal and the smallest double, it
12008                  * should be output as 0x0.0000000000001p-1022 to
12009                  * match its internal structure. */
12010
12011                 /* Note: fv can be (and often is) long double.
12012                  * Here it is explicitly cast to NV. */
12013                 vend = S_hextract(aTHX_ (NV)fv, &exponent, vhex, NULL);
12014                 S_hextract(aTHX_ (NV)fv, &exponent, vhex, vend);
12015
12016 #if NVSIZE > DOUBLESIZE
12017 #  ifdef LONGDOUBLE_X86_80_BIT
12018                 exponent -= 4;
12019 #  else
12020                 exponent--;
12021 #  endif
12022 #endif
12023
12024                 if (fv < 0)
12025                     *p++ = '-';
12026                 else if (plus)
12027                     *p++ = plus;
12028                 *p++ = '0';
12029                 if (lower) {
12030                     *p++ = 'x';
12031                 }
12032                 else {
12033                     *p++ = 'X';
12034                     xdig += 16; /* Use uppercase hex. */
12035                 }
12036
12037                 /* Find the first non-zero xdigit. */
12038                 for (v = vhex; v < vend; v++) {
12039                     if (*v) {
12040                         vfnz = v;
12041                         break;
12042                     }
12043                 }
12044
12045                 if (vfnz) {
12046                     U8* vlnz = NULL; /* The last non-zero. */
12047
12048                     /* Find the last non-zero xdigit. */
12049                     for (v = vend - 1; v >= vhex; v--) {
12050                         if (*v) {
12051                             vlnz = v;
12052                             break;
12053                         }
12054                     }
12055
12056 #if NVSIZE == DOUBLESIZE
12057                     if (fv != 0.0)
12058                         exponent--;
12059 #endif
12060
12061                     if (precis > 0) {
12062                         v = vhex + precis + 1;
12063                         if (v < vend) {
12064                             /* Round away from zero: if the tail
12065                              * beyond the precis xdigits is equal to
12066                              * or greater than 0x8000... */
12067                             bool round = *v > 0x8;
12068                             if (!round && *v == 0x8) {
12069                                 for (v++; v < vend; v++) {
12070                                     if (*v) {
12071                                         round = TRUE;
12072                                         break;
12073                                     }
12074                                 }
12075                             }
12076                             if (round) {
12077                                 for (v = vhex + precis; v >= vhex; v--) {
12078                                     if (*v < 0xF) {
12079                                         (*v)++;
12080                                         break;
12081                                     }
12082                                     *v = 0;
12083                                     if (v == vhex) {
12084                                         /* If the carry goes all the way to
12085                                          * the front, we need to output
12086                                          * a single '1'. This goes against
12087                                          * the "xdigit and then radix"
12088                                          * but since this is "cannot happen"
12089                                          * category, that is probably good. */
12090                                         *p++ = xdig[1];
12091                                     }
12092                                 }
12093                             }
12094                             /* The new effective "last non zero". */
12095                             vlnz = vhex + precis;
12096                         }
12097                         else {
12098                             zerotail = precis - (vlnz - vhex);
12099                         }
12100                     }
12101
12102                     v = vhex;
12103                     *p++ = xdig[*v++];
12104
12105                     /* The radix is always output after the first
12106                      * non-zero xdigit, or if alt.  */
12107                     if (vfnz < vlnz || alt) {
12108 #ifndef USE_LOCALE_NUMERIC
12109                         *p++ = '.';
12110 #else
12111                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12112                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12113                             STRLEN n;
12114                             const char* r = SvPV(PL_numeric_radix_sv, n);
12115                             Copy(r, p, n, char);
12116                             p += n;
12117                         }
12118                         else {
12119                             *p++ = '.';
12120                         }
12121                         RESTORE_LC_NUMERIC();
12122 #endif
12123                     }
12124
12125                     while (v <= vlnz)
12126                         *p++ = xdig[*v++];
12127
12128                     while (zerotail--)
12129                         *p++ = '0';
12130                 }
12131                 else {
12132                     *p++ = '0';
12133                     exponent = 0;
12134                 }
12135
12136                 elen = p - PL_efloatbuf;
12137                 elen += my_snprintf(p, PL_efloatsize - elen,
12138                                     "%c%+d", lower ? 'p' : 'P',
12139                                     exponent);
12140
12141                 if (elen < width) {
12142                     if (left) {
12143                         /* Pad the back with spaces. */
12144                         memset(PL_efloatbuf + elen, ' ', width - elen);
12145                     }
12146                     else if (fill == '0') {
12147                         /* Insert the zeros between the "0x" and
12148                          * the digits, otherwise we end up with
12149                          * "0000xHHH..." */
12150                         STRLEN nzero = width - elen;
12151                         char* zerox = PL_efloatbuf + 2;
12152                         Move(zerox, zerox + nzero,  elen - 2, char);
12153                         memset(zerox, fill, nzero);
12154                     }
12155                     else {
12156                         /* Move it to the right. */
12157                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12158                              elen, char);
12159                         /* Pad the front with spaces. */
12160                         memset(PL_efloatbuf, ' ', width - elen);
12161                     }
12162                     elen = width;
12163                 }
12164             }
12165             else
12166                 elen = S_infnan_2pv(fv, PL_efloatbuf, PL_efloatsize);
12167
12168             if (elen == 0) {
12169                 char *ptr = ebuf + sizeof ebuf;
12170                 *--ptr = '\0';
12171                 *--ptr = c;
12172                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12173 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12174                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12175                  * not USE_LONG_DOUBLE and NVff.  In other words,
12176                  * this needs to work without USE_LONG_DOUBLE. */
12177                 if (intsize == 'q') {
12178                     /* Copy the one or more characters in a long double
12179                      * format before the 'base' ([efgEFG]) character to
12180                      * the format string. */
12181                     static char const ldblf[] = PERL_PRIfldbl;
12182                     char const *p = ldblf + sizeof(ldblf) - 3;
12183                     while (p >= ldblf) { *--ptr = *p--; }
12184                 }
12185 #endif
12186                 if (has_precis) {
12187                     base = precis;
12188                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12189                     *--ptr = '.';
12190                 }
12191                 if (width) {
12192                     base = width;
12193                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12194                 }
12195                 if (fill == '0')
12196                     *--ptr = fill;
12197                 if (left)
12198                     *--ptr = '-';
12199                 if (plus)
12200                     *--ptr = plus;
12201                 if (alt)
12202                     *--ptr = '#';
12203                 *--ptr = '%';
12204
12205                 /* No taint.  Otherwise we are in the strange situation
12206                  * where printf() taints but print($float) doesn't.
12207                  * --jhi */
12208
12209                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12210
12211                 /* hopefully the above makes ptr a very constrained format
12212                  * that is safe to use, even though it's not literal */
12213                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12214 #if defined(HAS_LONG_DOUBLE)
12215                 elen = ((intsize == 'q')
12216                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12217                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12218 #else
12219                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12220 #endif
12221                 GCC_DIAG_RESTORE;
12222             }
12223
12224         float_converted:
12225             eptr = PL_efloatbuf;
12226             assert((IV)elen > 0); /* here zero elen is bad */
12227
12228 #ifdef USE_LOCALE_NUMERIC
12229             /* If the decimal point character in the string is UTF-8, make the
12230              * output utf8 */
12231             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12232                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12233             {
12234                 is_utf8 = TRUE;
12235             }
12236 #endif
12237
12238             break;
12239
12240             /* SPECIAL */
12241
12242         case 'n':
12243             if (vectorize)
12244                 goto unknown;
12245             i = SvCUR(sv) - origlen;
12246             if (args) {
12247                 switch (intsize) {
12248                 case 'c':       *(va_arg(*args, char*)) = i; break;
12249                 case 'h':       *(va_arg(*args, short*)) = i; break;
12250                 default:        *(va_arg(*args, int*)) = i; break;
12251                 case 'l':       *(va_arg(*args, long*)) = i; break;
12252                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12253                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12254 #ifdef HAS_PTRDIFF_T
12255                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12256 #endif
12257 #ifdef I_STDINT
12258                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12259 #endif
12260                 case 'q':
12261 #if IVSIZE >= 8
12262                                 *(va_arg(*args, Quad_t*)) = i; break;
12263 #else
12264                                 goto unknown;
12265 #endif
12266                 }
12267             }
12268             else
12269                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12270             continue;   /* not "break" */
12271
12272             /* UNKNOWN */
12273
12274         default:
12275       unknown:
12276             if (!args
12277                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12278                 && ckWARN(WARN_PRINTF))
12279             {
12280                 SV * const msg = sv_newmortal();
12281                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12282                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12283                 if (fmtstart < patend) {
12284                     const char * const fmtend = q < patend ? q : patend;
12285                     const char * f;
12286                     sv_catpvs(msg, "\"%");
12287                     for (f = fmtstart; f < fmtend; f++) {
12288                         if (isPRINT(*f)) {
12289                             sv_catpvn_nomg(msg, f, 1);
12290                         } else {
12291                             Perl_sv_catpvf(aTHX_ msg,
12292                                            "\\%03"UVof, (UV)*f & 0xFF);
12293                         }
12294                     }
12295                     sv_catpvs(msg, "\"");
12296                 } else {
12297                     sv_catpvs(msg, "end of string");
12298                 }
12299                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12300             }
12301
12302             /* output mangled stuff ... */
12303             if (c == '\0')
12304                 --q;
12305             eptr = p;
12306             elen = q - p;
12307
12308             /* ... right here, because formatting flags should not apply */
12309             SvGROW(sv, SvCUR(sv) + elen + 1);
12310             p = SvEND(sv);
12311             Copy(eptr, p, elen, char);
12312             p += elen;
12313             *p = '\0';
12314             SvCUR_set(sv, p - SvPVX_const(sv));
12315             svix = osvix;
12316             continue;   /* not "break" */
12317         }
12318
12319         if (is_utf8 != has_utf8) {
12320             if (is_utf8) {
12321                 if (SvCUR(sv))
12322                     sv_utf8_upgrade(sv);
12323             }
12324             else {
12325                 const STRLEN old_elen = elen;
12326                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12327                 sv_utf8_upgrade(nsv);
12328                 eptr = SvPVX_const(nsv);
12329                 elen = SvCUR(nsv);
12330
12331                 if (width) { /* fudge width (can't fudge elen) */
12332                     width += elen - old_elen;
12333                 }
12334                 is_utf8 = TRUE;
12335             }
12336         }
12337
12338         assert((IV)elen >= 0); /* here zero elen is fine */
12339         have = esignlen + zeros + elen;
12340         if (have < zeros)
12341             croak_memory_wrap();
12342
12343         need = (have > width ? have : width);
12344         gap = need - have;
12345
12346         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12347             croak_memory_wrap();
12348         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12349         p = SvEND(sv);
12350         if (esignlen && fill == '0') {
12351             int i;
12352             for (i = 0; i < (int)esignlen; i++)
12353                 *p++ = esignbuf[i];
12354         }
12355         if (gap && !left) {
12356             memset(p, fill, gap);
12357             p += gap;
12358         }
12359         if (esignlen && fill != '0') {
12360             int i;
12361             for (i = 0; i < (int)esignlen; i++)
12362                 *p++ = esignbuf[i];
12363         }
12364         if (zeros) {
12365             int i;
12366             for (i = zeros; i; i--)
12367                 *p++ = '0';
12368         }
12369         if (elen) {
12370             Copy(eptr, p, elen, char);
12371             p += elen;
12372         }
12373         if (gap && left) {
12374             memset(p, ' ', gap);
12375             p += gap;
12376         }
12377         if (vectorize) {
12378             if (veclen) {
12379                 Copy(dotstr, p, dotstrlen, char);
12380                 p += dotstrlen;
12381             }
12382             else
12383                 vectorize = FALSE;              /* done iterating over vecstr */
12384         }
12385         if (is_utf8)
12386             has_utf8 = TRUE;
12387         if (has_utf8)
12388             SvUTF8_on(sv);
12389         *p = '\0';
12390         SvCUR_set(sv, p - SvPVX_const(sv));
12391         if (vectorize) {
12392             esignlen = 0;
12393             goto vector;
12394         }
12395     }
12396
12397     /* Now that we've consumed all our printf format arguments (svix)
12398      * do we have things left on the stack that we didn't use?
12399      */
12400     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12401         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12402                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12403     }
12404
12405     SvTAINT(sv);
12406
12407     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12408                                each iteration. */
12409 }
12410
12411 /* =========================================================================
12412
12413 =head1 Cloning an interpreter
12414
12415 =cut
12416
12417 All the macros and functions in this section are for the private use of
12418 the main function, perl_clone().
12419
12420 The foo_dup() functions make an exact copy of an existing foo thingy.
12421 During the course of a cloning, a hash table is used to map old addresses
12422 to new addresses.  The table is created and manipulated with the
12423 ptr_table_* functions.
12424
12425  * =========================================================================*/
12426
12427
12428 #if defined(USE_ITHREADS)
12429
12430 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12431 #ifndef GpREFCNT_inc
12432 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12433 #endif
12434
12435
12436 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12437    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12438    If this changes, please unmerge ss_dup.
12439    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12440 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12441 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12442 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12443 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12444 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12445 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12446 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12447 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12448 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12449 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12450 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12451 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12452 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12453
12454 /* clone a parser */
12455
12456 yy_parser *
12457 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12458 {
12459     yy_parser *parser;
12460
12461     PERL_ARGS_ASSERT_PARSER_DUP;
12462
12463     if (!proto)
12464         return NULL;
12465
12466     /* look for it in the table first */
12467     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12468     if (parser)
12469         return parser;
12470
12471     /* create anew and remember what it is */
12472     Newxz(parser, 1, yy_parser);
12473     ptr_table_store(PL_ptr_table, proto, parser);
12474
12475     /* XXX these not yet duped */
12476     parser->old_parser = NULL;
12477     parser->stack = NULL;
12478     parser->ps = NULL;
12479     parser->stack_size = 0;
12480     /* XXX parser->stack->state = 0; */
12481
12482     /* XXX eventually, just Copy() most of the parser struct ? */
12483
12484     parser->lex_brackets = proto->lex_brackets;
12485     parser->lex_casemods = proto->lex_casemods;
12486     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12487                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12488     parser->lex_casestack = savepvn(proto->lex_casestack,
12489                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12490     parser->lex_defer   = proto->lex_defer;
12491     parser->lex_dojoin  = proto->lex_dojoin;
12492     parser->lex_formbrack = proto->lex_formbrack;
12493     parser->lex_inpat   = proto->lex_inpat;
12494     parser->lex_inwhat  = proto->lex_inwhat;
12495     parser->lex_op      = proto->lex_op;
12496     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12497     parser->lex_starts  = proto->lex_starts;
12498     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12499     parser->multi_close = proto->multi_close;
12500     parser->multi_open  = proto->multi_open;
12501     parser->multi_start = proto->multi_start;
12502     parser->multi_end   = proto->multi_end;
12503     parser->preambled   = proto->preambled;
12504     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12505     parser->linestr     = sv_dup_inc(proto->linestr, param);
12506     parser->expect      = proto->expect;
12507     parser->copline     = proto->copline;
12508     parser->last_lop_op = proto->last_lop_op;
12509     parser->lex_state   = proto->lex_state;
12510     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12511     /* rsfp_filters entries have fake IoDIRP() */
12512     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12513     parser->in_my       = proto->in_my;
12514     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12515     parser->error_count = proto->error_count;
12516
12517
12518     parser->linestr     = sv_dup_inc(proto->linestr, param);
12519
12520     {
12521         char * const ols = SvPVX(proto->linestr);
12522         char * const ls  = SvPVX(parser->linestr);
12523
12524         parser->bufptr      = ls + (proto->bufptr >= ols ?
12525                                     proto->bufptr -  ols : 0);
12526         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12527                                     proto->oldbufptr -  ols : 0);
12528         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12529                                     proto->oldoldbufptr -  ols : 0);
12530         parser->linestart   = ls + (proto->linestart >= ols ?
12531                                     proto->linestart -  ols : 0);
12532         parser->last_uni    = ls + (proto->last_uni >= ols ?
12533                                     proto->last_uni -  ols : 0);
12534         parser->last_lop    = ls + (proto->last_lop >= ols ?
12535                                     proto->last_lop -  ols : 0);
12536
12537         parser->bufend      = ls + SvCUR(parser->linestr);
12538     }
12539
12540     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12541
12542
12543     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12544     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12545     parser->nexttoke    = proto->nexttoke;
12546
12547     /* XXX should clone saved_curcop here, but we aren't passed
12548      * proto_perl; so do it in perl_clone_using instead */
12549
12550     return parser;
12551 }
12552
12553
12554 /* duplicate a file handle */
12555
12556 PerlIO *
12557 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12558 {
12559     PerlIO *ret;
12560
12561     PERL_ARGS_ASSERT_FP_DUP;
12562     PERL_UNUSED_ARG(type);
12563
12564     if (!fp)
12565         return (PerlIO*)NULL;
12566
12567     /* look for it in the table first */
12568     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12569     if (ret)
12570         return ret;
12571
12572     /* create anew and remember what it is */
12573     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12574     ptr_table_store(PL_ptr_table, fp, ret);
12575     return ret;
12576 }
12577
12578 /* duplicate a directory handle */
12579
12580 DIR *
12581 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12582 {
12583     DIR *ret;
12584
12585 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12586     DIR *pwd;
12587     const Direntry_t *dirent;
12588     char smallbuf[256];
12589     char *name = NULL;
12590     STRLEN len = 0;
12591     long pos;
12592 #endif
12593
12594     PERL_UNUSED_CONTEXT;
12595     PERL_ARGS_ASSERT_DIRP_DUP;
12596
12597     if (!dp)
12598         return (DIR*)NULL;
12599
12600     /* look for it in the table first */
12601     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12602     if (ret)
12603         return ret;
12604
12605 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12606
12607     PERL_UNUSED_ARG(param);
12608
12609     /* create anew */
12610
12611     /* open the current directory (so we can switch back) */
12612     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12613
12614     /* chdir to our dir handle and open the present working directory */
12615     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12616         PerlDir_close(pwd);
12617         return (DIR *)NULL;
12618     }
12619     /* Now we should have two dir handles pointing to the same dir. */
12620
12621     /* Be nice to the calling code and chdir back to where we were. */
12622     /* XXX If this fails, then what? */
12623     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12624
12625     /* We have no need of the pwd handle any more. */
12626     PerlDir_close(pwd);
12627
12628 #ifdef DIRNAMLEN
12629 # define d_namlen(d) (d)->d_namlen
12630 #else
12631 # define d_namlen(d) strlen((d)->d_name)
12632 #endif
12633     /* Iterate once through dp, to get the file name at the current posi-
12634        tion. Then step back. */
12635     pos = PerlDir_tell(dp);
12636     if ((dirent = PerlDir_read(dp))) {
12637         len = d_namlen(dirent);
12638         if (len <= sizeof smallbuf) name = smallbuf;
12639         else Newx(name, len, char);
12640         Move(dirent->d_name, name, len, char);
12641     }
12642     PerlDir_seek(dp, pos);
12643
12644     /* Iterate through the new dir handle, till we find a file with the
12645        right name. */
12646     if (!dirent) /* just before the end */
12647         for(;;) {
12648             pos = PerlDir_tell(ret);
12649             if (PerlDir_read(ret)) continue; /* not there yet */
12650             PerlDir_seek(ret, pos); /* step back */
12651             break;
12652         }
12653     else {
12654         const long pos0 = PerlDir_tell(ret);
12655         for(;;) {
12656             pos = PerlDir_tell(ret);
12657             if ((dirent = PerlDir_read(ret))) {
12658                 if (len == (STRLEN)d_namlen(dirent)
12659                     && memEQ(name, dirent->d_name, len)) {
12660                     /* found it */
12661                     PerlDir_seek(ret, pos); /* step back */
12662                     break;
12663                 }
12664                 /* else we are not there yet; keep iterating */
12665             }
12666             else { /* This is not meant to happen. The best we can do is
12667                       reset the iterator to the beginning. */
12668                 PerlDir_seek(ret, pos0);
12669                 break;
12670             }
12671         }
12672     }
12673 #undef d_namlen
12674
12675     if (name && name != smallbuf)
12676         Safefree(name);
12677 #endif
12678
12679 #ifdef WIN32
12680     ret = win32_dirp_dup(dp, param);
12681 #endif
12682
12683     /* pop it in the pointer table */
12684     if (ret)
12685         ptr_table_store(PL_ptr_table, dp, ret);
12686
12687     return ret;
12688 }
12689
12690 /* duplicate a typeglob */
12691
12692 GP *
12693 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12694 {
12695     GP *ret;
12696
12697     PERL_ARGS_ASSERT_GP_DUP;
12698
12699     if (!gp)
12700         return (GP*)NULL;
12701     /* look for it in the table first */
12702     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12703     if (ret)
12704         return ret;
12705
12706     /* create anew and remember what it is */
12707     Newxz(ret, 1, GP);
12708     ptr_table_store(PL_ptr_table, gp, ret);
12709
12710     /* clone */
12711     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12712        on Newxz() to do this for us.  */
12713     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12714     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12715     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12716     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12717     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12718     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12719     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12720     ret->gp_cvgen       = gp->gp_cvgen;
12721     ret->gp_line        = gp->gp_line;
12722     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12723     return ret;
12724 }
12725
12726 /* duplicate a chain of magic */
12727
12728 MAGIC *
12729 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12730 {
12731     MAGIC *mgret = NULL;
12732     MAGIC **mgprev_p = &mgret;
12733
12734     PERL_ARGS_ASSERT_MG_DUP;
12735
12736     for (; mg; mg = mg->mg_moremagic) {
12737         MAGIC *nmg;
12738
12739         if ((param->flags & CLONEf_JOIN_IN)
12740                 && mg->mg_type == PERL_MAGIC_backref)
12741             /* when joining, we let the individual SVs add themselves to
12742              * backref as needed. */
12743             continue;
12744
12745         Newx(nmg, 1, MAGIC);
12746         *mgprev_p = nmg;
12747         mgprev_p = &(nmg->mg_moremagic);
12748
12749         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12750            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12751            from the original commit adding Perl_mg_dup() - revision 4538.
12752            Similarly there is the annotation "XXX random ptr?" next to the
12753            assignment to nmg->mg_ptr.  */
12754         *nmg = *mg;
12755
12756         /* FIXME for plugins
12757         if (nmg->mg_type == PERL_MAGIC_qr) {
12758             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12759         }
12760         else
12761         */
12762         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12763                           ? nmg->mg_type == PERL_MAGIC_backref
12764                                 /* The backref AV has its reference
12765                                  * count deliberately bumped by 1 */
12766                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12767                                                     nmg->mg_obj, param))
12768                                 : sv_dup_inc(nmg->mg_obj, param)
12769                           : sv_dup(nmg->mg_obj, param);
12770
12771         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12772             if (nmg->mg_len > 0) {
12773                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12774                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12775                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12776                 {
12777                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12778                     sv_dup_inc_multiple((SV**)(namtp->table),
12779                                         (SV**)(namtp->table), NofAMmeth, param);
12780                 }
12781             }
12782             else if (nmg->mg_len == HEf_SVKEY)
12783                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12784         }
12785         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12786             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12787         }
12788     }
12789     return mgret;
12790 }
12791
12792 #endif /* USE_ITHREADS */
12793
12794 struct ptr_tbl_arena {
12795     struct ptr_tbl_arena *next;
12796     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
12797 };
12798
12799 /* create a new pointer-mapping table */
12800
12801 PTR_TBL_t *
12802 Perl_ptr_table_new(pTHX)
12803 {
12804     PTR_TBL_t *tbl;
12805     PERL_UNUSED_CONTEXT;
12806
12807     Newx(tbl, 1, PTR_TBL_t);
12808     tbl->tbl_max        = 511;
12809     tbl->tbl_items      = 0;
12810     tbl->tbl_arena      = NULL;
12811     tbl->tbl_arena_next = NULL;
12812     tbl->tbl_arena_end  = NULL;
12813     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
12814     return tbl;
12815 }
12816
12817 #define PTR_TABLE_HASH(ptr) \
12818   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
12819
12820 /* map an existing pointer using a table */
12821
12822 STATIC PTR_TBL_ENT_t *
12823 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
12824 {
12825     PTR_TBL_ENT_t *tblent;
12826     const UV hash = PTR_TABLE_HASH(sv);
12827
12828     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
12829
12830     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
12831     for (; tblent; tblent = tblent->next) {
12832         if (tblent->oldval == sv)
12833             return tblent;
12834     }
12835     return NULL;
12836 }
12837
12838 void *
12839 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
12840 {
12841     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
12842
12843     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
12844     PERL_UNUSED_CONTEXT;
12845
12846     return tblent ? tblent->newval : NULL;
12847 }
12848
12849 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
12850  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
12851  * the core's typical use of ptr_tables in thread cloning. */
12852
12853 void
12854 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
12855 {
12856     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
12857
12858     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
12859     PERL_UNUSED_CONTEXT;
12860
12861     if (tblent) {
12862         tblent->newval = newsv;
12863     } else {
12864         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
12865
12866         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12867             struct ptr_tbl_arena *new_arena;
12868
12869             Newx(new_arena, 1, struct ptr_tbl_arena);
12870             new_arena->next = tbl->tbl_arena;
12871             tbl->tbl_arena = new_arena;
12872             tbl->tbl_arena_next = new_arena->array;
12873             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
12874         }
12875
12876         tblent = tbl->tbl_arena_next++;
12877
12878         tblent->oldval = oldsv;
12879         tblent->newval = newsv;
12880         tblent->next = tbl->tbl_ary[entry];
12881         tbl->tbl_ary[entry] = tblent;
12882         tbl->tbl_items++;
12883         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12884             ptr_table_split(tbl);
12885     }
12886 }
12887
12888 /* double the hash bucket size of an existing ptr table */
12889
12890 void
12891 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12892 {
12893     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12894     const UV oldsize = tbl->tbl_max + 1;
12895     UV newsize = oldsize * 2;
12896     UV i;
12897
12898     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12899     PERL_UNUSED_CONTEXT;
12900
12901     Renew(ary, newsize, PTR_TBL_ENT_t*);
12902     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12903     tbl->tbl_max = --newsize;
12904     tbl->tbl_ary = ary;
12905     for (i=0; i < oldsize; i++, ary++) {
12906         PTR_TBL_ENT_t **entp = ary;
12907         PTR_TBL_ENT_t *ent = *ary;
12908         PTR_TBL_ENT_t **curentp;
12909         if (!ent)
12910             continue;
12911         curentp = ary + oldsize;
12912         do {
12913             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12914                 *entp = ent->next;
12915                 ent->next = *curentp;
12916                 *curentp = ent;
12917             }
12918             else
12919                 entp = &ent->next;
12920             ent = *entp;
12921         } while (ent);
12922     }
12923 }
12924
12925 /* remove all the entries from a ptr table */
12926 /* Deprecated - will be removed post 5.14 */
12927
12928 void
12929 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12930 {
12931     PERL_UNUSED_CONTEXT;
12932     if (tbl && tbl->tbl_items) {
12933         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12934
12935         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12936
12937         while (arena) {
12938             struct ptr_tbl_arena *next = arena->next;
12939
12940             Safefree(arena);
12941             arena = next;
12942         };
12943
12944         tbl->tbl_items = 0;
12945         tbl->tbl_arena = NULL;
12946         tbl->tbl_arena_next = NULL;
12947         tbl->tbl_arena_end = NULL;
12948     }
12949 }
12950
12951 /* clear and free a ptr table */
12952
12953 void
12954 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12955 {
12956     struct ptr_tbl_arena *arena;
12957
12958     PERL_UNUSED_CONTEXT;
12959
12960     if (!tbl) {
12961         return;
12962     }
12963
12964     arena = tbl->tbl_arena;
12965
12966     while (arena) {
12967         struct ptr_tbl_arena *next = arena->next;
12968
12969         Safefree(arena);
12970         arena = next;
12971     }
12972
12973     Safefree(tbl->tbl_ary);
12974     Safefree(tbl);
12975 }
12976
12977 #if defined(USE_ITHREADS)
12978
12979 void
12980 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12981 {
12982     PERL_ARGS_ASSERT_RVPV_DUP;
12983
12984     assert(!isREGEXP(sstr));
12985     if (SvROK(sstr)) {
12986         if (SvWEAKREF(sstr)) {
12987             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12988             if (param->flags & CLONEf_JOIN_IN) {
12989                 /* if joining, we add any back references individually rather
12990                  * than copying the whole backref array */
12991                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12992             }
12993         }
12994         else
12995             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12996     }
12997     else if (SvPVX_const(sstr)) {
12998         /* Has something there */
12999         if (SvLEN(sstr)) {
13000             /* Normal PV - clone whole allocated space */
13001             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13002             /* sstr may not be that normal, but actually copy on write.
13003                But we are a true, independent SV, so:  */
13004             SvIsCOW_off(dstr);
13005         }
13006         else {
13007             /* Special case - not normally malloced for some reason */
13008             if (isGV_with_GP(sstr)) {
13009                 /* Don't need to do anything here.  */
13010             }
13011             else if ((SvIsCOW(sstr))) {
13012                 /* A "shared" PV - clone it as "shared" PV */
13013                 SvPV_set(dstr,
13014                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13015                                          param)));
13016             }
13017             else {
13018                 /* Some other special case - random pointer */
13019                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13020             }
13021         }
13022     }
13023     else {
13024         /* Copy the NULL */
13025         SvPV_set(dstr, NULL);
13026     }
13027 }
13028
13029 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13030 static SV **
13031 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13032                       SSize_t items, CLONE_PARAMS *const param)
13033 {
13034     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13035
13036     while (items-- > 0) {
13037         *dest++ = sv_dup_inc(*source++, param);
13038     }
13039
13040     return dest;
13041 }
13042
13043 /* duplicate an SV of any type (including AV, HV etc) */
13044
13045 static SV *
13046 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13047 {
13048     dVAR;
13049     SV *dstr;
13050
13051     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13052
13053     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13054 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13055         abort();
13056 #endif
13057         return NULL;
13058     }
13059     /* look for it in the table first */
13060     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13061     if (dstr)
13062         return dstr;
13063
13064     if(param->flags & CLONEf_JOIN_IN) {
13065         /** We are joining here so we don't want do clone
13066             something that is bad **/
13067         if (SvTYPE(sstr) == SVt_PVHV) {
13068             const HEK * const hvname = HvNAME_HEK(sstr);
13069             if (hvname) {
13070                 /** don't clone stashes if they already exist **/
13071                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13072                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13073                 ptr_table_store(PL_ptr_table, sstr, dstr);
13074                 return dstr;
13075             }
13076         }
13077         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13078             HV *stash = GvSTASH(sstr);
13079             const HEK * hvname;
13080             if (stash && (hvname = HvNAME_HEK(stash))) {
13081                 /** don't clone GVs if they already exist **/
13082                 SV **svp;
13083                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13084                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13085                 svp = hv_fetch(
13086                         stash, GvNAME(sstr),
13087                         GvNAMEUTF8(sstr)
13088                             ? -GvNAMELEN(sstr)
13089                             :  GvNAMELEN(sstr),
13090                         0
13091                       );
13092                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13093                     ptr_table_store(PL_ptr_table, sstr, *svp);
13094                     return *svp;
13095                 }
13096             }
13097         }
13098     }
13099
13100     /* create anew and remember what it is */
13101     new_SV(dstr);
13102
13103 #ifdef DEBUG_LEAKING_SCALARS
13104     dstr->sv_debug_optype = sstr->sv_debug_optype;
13105     dstr->sv_debug_line = sstr->sv_debug_line;
13106     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13107     dstr->sv_debug_parent = (SV*)sstr;
13108     FREE_SV_DEBUG_FILE(dstr);
13109     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13110 #endif
13111
13112     ptr_table_store(PL_ptr_table, sstr, dstr);
13113
13114     /* clone */
13115     SvFLAGS(dstr)       = SvFLAGS(sstr);
13116     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13117     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13118
13119 #ifdef DEBUGGING
13120     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13121         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13122                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13123 #endif
13124
13125     /* don't clone objects whose class has asked us not to */
13126     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
13127         SvFLAGS(dstr) = 0;
13128         return dstr;
13129     }
13130
13131     switch (SvTYPE(sstr)) {
13132     case SVt_NULL:
13133         SvANY(dstr)     = NULL;
13134         break;
13135     case SVt_IV:
13136         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
13137         if(SvROK(sstr)) {
13138             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13139         } else {
13140             SvIV_set(dstr, SvIVX(sstr));
13141         }
13142         break;
13143     case SVt_NV:
13144         SvANY(dstr)     = new_XNV();
13145         SvNV_set(dstr, SvNVX(sstr));
13146         break;
13147     default:
13148         {
13149             /* These are all the types that need complex bodies allocating.  */
13150             void *new_body;
13151             const svtype sv_type = SvTYPE(sstr);
13152             const struct body_details *const sv_type_details
13153                 = bodies_by_type + sv_type;
13154
13155             switch (sv_type) {
13156             default:
13157                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13158                 break;
13159
13160             case SVt_PVGV:
13161             case SVt_PVIO:
13162             case SVt_PVFM:
13163             case SVt_PVHV:
13164             case SVt_PVAV:
13165             case SVt_PVCV:
13166             case SVt_PVLV:
13167             case SVt_REGEXP:
13168             case SVt_PVMG:
13169             case SVt_PVNV:
13170             case SVt_PVIV:
13171             case SVt_INVLIST:
13172             case SVt_PV:
13173                 assert(sv_type_details->body_size);
13174                 if (sv_type_details->arena) {
13175                     new_body_inline(new_body, sv_type);
13176                     new_body
13177                         = (void*)((char*)new_body - sv_type_details->offset);
13178                 } else {
13179                     new_body = new_NOARENA(sv_type_details);
13180                 }
13181             }
13182             assert(new_body);
13183             SvANY(dstr) = new_body;
13184
13185 #ifndef PURIFY
13186             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13187                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13188                  sv_type_details->copy, char);
13189 #else
13190             Copy(((char*)SvANY(sstr)),
13191                  ((char*)SvANY(dstr)),
13192                  sv_type_details->body_size + sv_type_details->offset, char);
13193 #endif
13194
13195             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13196                 && !isGV_with_GP(dstr)
13197                 && !isREGEXP(dstr)
13198                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13199                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13200
13201             /* The Copy above means that all the source (unduplicated) pointers
13202                are now in the destination.  We can check the flags and the
13203                pointers in either, but it's possible that there's less cache
13204                missing by always going for the destination.
13205                FIXME - instrument and check that assumption  */
13206             if (sv_type >= SVt_PVMG) {
13207                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
13208                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
13209                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
13210                     NOOP;
13211                 } else if (SvMAGIC(dstr))
13212                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13213                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13214                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13215                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13216             }
13217
13218             /* The cast silences a GCC warning about unhandled types.  */
13219             switch ((int)sv_type) {
13220             case SVt_PV:
13221                 break;
13222             case SVt_PVIV:
13223                 break;
13224             case SVt_PVNV:
13225                 break;
13226             case SVt_PVMG:
13227                 break;
13228             case SVt_REGEXP:
13229               duprex:
13230                 /* FIXME for plugins */
13231                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13232                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13233                 break;
13234             case SVt_PVLV:
13235                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13236                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13237                     LvTARG(dstr) = dstr;
13238                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13239                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13240                 else
13241                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13242                 if (isREGEXP(sstr)) goto duprex;
13243             case SVt_PVGV:
13244                 /* non-GP case already handled above */
13245                 if(isGV_with_GP(sstr)) {
13246                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13247                     /* Don't call sv_add_backref here as it's going to be
13248                        created as part of the magic cloning of the symbol
13249                        table--unless this is during a join and the stash
13250                        is not actually being cloned.  */
13251                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13252                        at the point of this comment.  */
13253                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13254                     if (param->flags & CLONEf_JOIN_IN)
13255                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13256                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13257                     (void)GpREFCNT_inc(GvGP(dstr));
13258                 }
13259                 break;
13260             case SVt_PVIO:
13261                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13262                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13263                     /* I have no idea why fake dirp (rsfps)
13264                        should be treated differently but otherwise
13265                        we end up with leaks -- sky*/
13266                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13267                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13268                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13269                 } else {
13270                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13271                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13272                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13273                     if (IoDIRP(dstr)) {
13274                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13275                     } else {
13276                         NOOP;
13277                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13278                     }
13279                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13280                 }
13281                 if (IoOFP(dstr) == IoIFP(sstr))
13282                     IoOFP(dstr) = IoIFP(dstr);
13283                 else
13284                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13285                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13286                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13287                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13288                 break;
13289             case SVt_PVAV:
13290                 /* avoid cloning an empty array */
13291                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13292                     SV **dst_ary, **src_ary;
13293                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13294
13295                     src_ary = AvARRAY((const AV *)sstr);
13296                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13297                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13298                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13299                     AvALLOC((const AV *)dstr) = dst_ary;
13300                     if (AvREAL((const AV *)sstr)) {
13301                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13302                                                       param);
13303                     }
13304                     else {
13305                         while (items-- > 0)
13306                             *dst_ary++ = sv_dup(*src_ary++, param);
13307                     }
13308                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13309                     while (items-- > 0) {
13310                         *dst_ary++ = &PL_sv_undef;
13311                     }
13312                 }
13313                 else {
13314                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13315                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13316                     AvMAX(  (const AV *)dstr)   = -1;
13317                     AvFILLp((const AV *)dstr)   = -1;
13318                 }
13319                 break;
13320             case SVt_PVHV:
13321                 if (HvARRAY((const HV *)sstr)) {
13322                     STRLEN i = 0;
13323                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13324                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13325                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13326                     char *darray;
13327                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13328                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13329                         char);
13330                     HvARRAY(dstr) = (HE**)darray;
13331                     while (i <= sxhv->xhv_max) {
13332                         const HE * const source = HvARRAY(sstr)[i];
13333                         HvARRAY(dstr)[i] = source
13334                             ? he_dup(source, sharekeys, param) : 0;
13335                         ++i;
13336                     }
13337                     if (SvOOK(sstr)) {
13338                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13339                         struct xpvhv_aux * const daux = HvAUX(dstr);
13340                         /* This flag isn't copied.  */
13341                         SvOOK_on(dstr);
13342
13343                         if (saux->xhv_name_count) {
13344                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13345                             const I32 count
13346                              = saux->xhv_name_count < 0
13347                                 ? -saux->xhv_name_count
13348                                 :  saux->xhv_name_count;
13349                             HEK **shekp = sname + count;
13350                             HEK **dhekp;
13351                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13352                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13353                             while (shekp-- > sname) {
13354                                 dhekp--;
13355                                 *dhekp = hek_dup(*shekp, param);
13356                             }
13357                         }
13358                         else {
13359                             daux->xhv_name_u.xhvnameu_name
13360                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13361                                           param);
13362                         }
13363                         daux->xhv_name_count = saux->xhv_name_count;
13364
13365                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13366                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13367 #ifdef PERL_HASH_RANDOMIZE_KEYS
13368                         daux->xhv_rand = saux->xhv_rand;
13369                         daux->xhv_last_rand = saux->xhv_last_rand;
13370 #endif
13371                         daux->xhv_riter = saux->xhv_riter;
13372                         daux->xhv_eiter = saux->xhv_eiter
13373                             ? he_dup(saux->xhv_eiter,
13374                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13375                         /* backref array needs refcnt=2; see sv_add_backref */
13376                         daux->xhv_backreferences =
13377                             (param->flags & CLONEf_JOIN_IN)
13378                                 /* when joining, we let the individual GVs and
13379                                  * CVs add themselves to backref as
13380                                  * needed. This avoids pulling in stuff
13381                                  * that isn't required, and simplifies the
13382                                  * case where stashes aren't cloned back
13383                                  * if they already exist in the parent
13384                                  * thread */
13385                             ? NULL
13386                             : saux->xhv_backreferences
13387                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13388                                     ? MUTABLE_AV(SvREFCNT_inc(
13389                                           sv_dup_inc((const SV *)
13390                                             saux->xhv_backreferences, param)))
13391                                     : MUTABLE_AV(sv_dup((const SV *)
13392                                             saux->xhv_backreferences, param))
13393                                 : 0;
13394
13395                         daux->xhv_mro_meta = saux->xhv_mro_meta
13396                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13397                             : 0;
13398
13399                         /* Record stashes for possible cloning in Perl_clone(). */
13400                         if (HvNAME(sstr))
13401                             av_push(param->stashes, dstr);
13402                     }
13403                 }
13404                 else
13405                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13406                 break;
13407             case SVt_PVCV:
13408                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13409                     CvDEPTH(dstr) = 0;
13410                 }
13411                 /* FALLTHROUGH */
13412             case SVt_PVFM:
13413                 /* NOTE: not refcounted */
13414                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13415                     hv_dup(CvSTASH(dstr), param);
13416                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13417                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13418                 if (!CvISXSUB(dstr)) {
13419                     OP_REFCNT_LOCK;
13420                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13421                     OP_REFCNT_UNLOCK;
13422                     CvSLABBED_off(dstr);
13423                 } else if (CvCONST(dstr)) {
13424                     CvXSUBANY(dstr).any_ptr =
13425                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13426                 }
13427                 assert(!CvSLABBED(dstr));
13428                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13429                 if (CvNAMED(dstr))
13430                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13431                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13432                 /* don't dup if copying back - CvGV isn't refcounted, so the
13433                  * duped GV may never be freed. A bit of a hack! DAPM */
13434                 else
13435                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13436                     CvCVGV_RC(dstr)
13437                     ? gv_dup_inc(CvGV(sstr), param)
13438                     : (param->flags & CLONEf_JOIN_IN)
13439                         ? NULL
13440                         : gv_dup(CvGV(sstr), param);
13441
13442                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
13443                 CvOUTSIDE(dstr) =
13444                     CvWEAKOUTSIDE(sstr)
13445                     ? cv_dup(    CvOUTSIDE(dstr), param)
13446                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13447                 break;
13448             }
13449         }
13450     }
13451
13452     return dstr;
13453  }
13454
13455 SV *
13456 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13457 {
13458     PERL_ARGS_ASSERT_SV_DUP_INC;
13459     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13460 }
13461
13462 SV *
13463 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13464 {
13465     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13466     PERL_ARGS_ASSERT_SV_DUP;
13467
13468     /* Track every SV that (at least initially) had a reference count of 0.
13469        We need to do this by holding an actual reference to it in this array.
13470        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13471        (akin to the stashes hash, and the perl stack), we come unstuck if
13472        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13473        thread) is manipulated in a CLONE method, because CLONE runs before the
13474        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13475        (and fix things up by giving each a reference via the temps stack).
13476        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13477        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13478        before the walk of unreferenced happens and a reference to that is SV
13479        added to the temps stack. At which point we have the same SV considered
13480        to be in use, and free to be re-used. Not good.
13481     */
13482     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13483         assert(param->unreferenced);
13484         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13485     }
13486
13487     return dstr;
13488 }
13489
13490 /* duplicate a context */
13491
13492 PERL_CONTEXT *
13493 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13494 {
13495     PERL_CONTEXT *ncxs;
13496
13497     PERL_ARGS_ASSERT_CX_DUP;
13498
13499     if (!cxs)
13500         return (PERL_CONTEXT*)NULL;
13501
13502     /* look for it in the table first */
13503     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13504     if (ncxs)
13505         return ncxs;
13506
13507     /* create anew and remember what it is */
13508     Newx(ncxs, max + 1, PERL_CONTEXT);
13509     ptr_table_store(PL_ptr_table, cxs, ncxs);
13510     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13511
13512     while (ix >= 0) {
13513         PERL_CONTEXT * const ncx = &ncxs[ix];
13514         if (CxTYPE(ncx) == CXt_SUBST) {
13515             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13516         }
13517         else {
13518             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13519             switch (CxTYPE(ncx)) {
13520             case CXt_SUB:
13521                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13522                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13523                                            : cv_dup(ncx->blk_sub.cv,param));
13524                 if(CxHASARGS(ncx)){
13525                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13526                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13527                 } else {
13528                     ncx->blk_sub.argarray = NULL;
13529                     ncx->blk_sub.savearray = NULL;
13530                 }
13531                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13532                                            ncx->blk_sub.oldcomppad);
13533                 break;
13534             case CXt_EVAL:
13535                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13536                                                       param);
13537                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13538                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13539                 break;
13540             case CXt_LOOP_LAZYSV:
13541                 ncx->blk_loop.state_u.lazysv.end
13542                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13543                 /* We are taking advantage of av_dup_inc and sv_dup_inc
13544                    actually being the same function, and order equivalence of
13545                    the two unions.
13546                    We can assert the later [but only at run time :-(]  */
13547                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13548                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13549             case CXt_LOOP_FOR:
13550                 ncx->blk_loop.state_u.ary.ary
13551                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13552             case CXt_LOOP_LAZYIV:
13553             case CXt_LOOP_PLAIN:
13554                 if (CxPADLOOP(ncx)) {
13555                     ncx->blk_loop.itervar_u.oldcomppad
13556                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13557                                         ncx->blk_loop.itervar_u.oldcomppad);
13558                 } else {
13559                     ncx->blk_loop.itervar_u.gv
13560                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13561                                     param);
13562                 }
13563                 break;
13564             case CXt_FORMAT:
13565                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13566                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13567                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13568                                                      param);
13569                 break;
13570             case CXt_BLOCK:
13571             case CXt_NULL:
13572             case CXt_WHEN:
13573             case CXt_GIVEN:
13574                 break;
13575             }
13576         }
13577         --ix;
13578     }
13579     return ncxs;
13580 }
13581
13582 /* duplicate a stack info structure */
13583
13584 PERL_SI *
13585 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13586 {
13587     PERL_SI *nsi;
13588
13589     PERL_ARGS_ASSERT_SI_DUP;
13590
13591     if (!si)
13592         return (PERL_SI*)NULL;
13593
13594     /* look for it in the table first */
13595     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13596     if (nsi)
13597         return nsi;
13598
13599     /* create anew and remember what it is */
13600     Newxz(nsi, 1, PERL_SI);
13601     ptr_table_store(PL_ptr_table, si, nsi);
13602
13603     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13604     nsi->si_cxix        = si->si_cxix;
13605     nsi->si_cxmax       = si->si_cxmax;
13606     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13607     nsi->si_type        = si->si_type;
13608     nsi->si_prev        = si_dup(si->si_prev, param);
13609     nsi->si_next        = si_dup(si->si_next, param);
13610     nsi->si_markoff     = si->si_markoff;
13611
13612     return nsi;
13613 }
13614
13615 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13616 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13617 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13618 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13619 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13620 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13621 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13622 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13623 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13624 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13625 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13626 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13627 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13628 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13629 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13630 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13631
13632 /* XXXXX todo */
13633 #define pv_dup_inc(p)   SAVEPV(p)
13634 #define pv_dup(p)       SAVEPV(p)
13635 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13636
13637 /* map any object to the new equivent - either something in the
13638  * ptr table, or something in the interpreter structure
13639  */
13640
13641 void *
13642 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13643 {
13644     void *ret;
13645
13646     PERL_ARGS_ASSERT_ANY_DUP;
13647
13648     if (!v)
13649         return (void*)NULL;
13650
13651     /* look for it in the table first */
13652     ret = ptr_table_fetch(PL_ptr_table, v);
13653     if (ret)
13654         return ret;
13655
13656     /* see if it is part of the interpreter structure */
13657     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13658         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13659     else {
13660         ret = v;
13661     }
13662
13663     return ret;
13664 }
13665
13666 /* duplicate the save stack */
13667
13668 ANY *
13669 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13670 {
13671     dVAR;
13672     ANY * const ss      = proto_perl->Isavestack;
13673     const I32 max       = proto_perl->Isavestack_max;
13674     I32 ix              = proto_perl->Isavestack_ix;
13675     ANY *nss;
13676     const SV *sv;
13677     const GV *gv;
13678     const AV *av;
13679     const HV *hv;
13680     void* ptr;
13681     int intval;
13682     long longval;
13683     GP *gp;
13684     IV iv;
13685     I32 i;
13686     char *c = NULL;
13687     void (*dptr) (void*);
13688     void (*dxptr) (pTHX_ void*);
13689
13690     PERL_ARGS_ASSERT_SS_DUP;
13691
13692     Newxz(nss, max, ANY);
13693
13694     while (ix > 0) {
13695         const UV uv = POPUV(ss,ix);
13696         const U8 type = (U8)uv & SAVE_MASK;
13697
13698         TOPUV(nss,ix) = uv;
13699         switch (type) {
13700         case SAVEt_CLEARSV:
13701         case SAVEt_CLEARPADRANGE:
13702             break;
13703         case SAVEt_HELEM:               /* hash element */
13704             sv = (const SV *)POPPTR(ss,ix);
13705             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13706             /* FALLTHROUGH */
13707         case SAVEt_ITEM:                        /* normal string */
13708         case SAVEt_GVSV:                        /* scalar slot in GV */
13709         case SAVEt_SV:                          /* scalar reference */
13710             sv = (const SV *)POPPTR(ss,ix);
13711             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13712             /* FALLTHROUGH */
13713         case SAVEt_FREESV:
13714         case SAVEt_MORTALIZESV:
13715         case SAVEt_READONLY_OFF:
13716             sv = (const SV *)POPPTR(ss,ix);
13717             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13718             break;
13719         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13720             c = (char*)POPPTR(ss,ix);
13721             TOPPTR(nss,ix) = savesharedpv(c);
13722             ptr = POPPTR(ss,ix);
13723             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13724             break;
13725         case SAVEt_GENERIC_SVREF:               /* generic sv */
13726         case SAVEt_SVREF:                       /* scalar reference */
13727             sv = (const SV *)POPPTR(ss,ix);
13728             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13729             ptr = POPPTR(ss,ix);
13730             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13731             break;
13732         case SAVEt_GVSLOT:              /* any slot in GV */
13733             sv = (const SV *)POPPTR(ss,ix);
13734             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13735             ptr = POPPTR(ss,ix);
13736             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13737             sv = (const SV *)POPPTR(ss,ix);
13738             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13739             break;
13740         case SAVEt_HV:                          /* hash reference */
13741         case SAVEt_AV:                          /* array reference */
13742             sv = (const SV *) POPPTR(ss,ix);
13743             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13744             /* FALLTHROUGH */
13745         case SAVEt_COMPPAD:
13746         case SAVEt_NSTAB:
13747             sv = (const SV *) POPPTR(ss,ix);
13748             TOPPTR(nss,ix) = sv_dup(sv, param);
13749             break;
13750         case SAVEt_INT:                         /* int reference */
13751             ptr = POPPTR(ss,ix);
13752             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13753             intval = (int)POPINT(ss,ix);
13754             TOPINT(nss,ix) = intval;
13755             break;
13756         case SAVEt_LONG:                        /* long reference */
13757             ptr = POPPTR(ss,ix);
13758             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13759             longval = (long)POPLONG(ss,ix);
13760             TOPLONG(nss,ix) = longval;
13761             break;
13762         case SAVEt_I32:                         /* I32 reference */
13763             ptr = POPPTR(ss,ix);
13764             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13765             i = POPINT(ss,ix);
13766             TOPINT(nss,ix) = i;
13767             break;
13768         case SAVEt_IV:                          /* IV reference */
13769         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
13770             ptr = POPPTR(ss,ix);
13771             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13772             iv = POPIV(ss,ix);
13773             TOPIV(nss,ix) = iv;
13774             break;
13775         case SAVEt_HPTR:                        /* HV* reference */
13776         case SAVEt_APTR:                        /* AV* reference */
13777         case SAVEt_SPTR:                        /* SV* reference */
13778             ptr = POPPTR(ss,ix);
13779             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13780             sv = (const SV *)POPPTR(ss,ix);
13781             TOPPTR(nss,ix) = sv_dup(sv, param);
13782             break;
13783         case SAVEt_VPTR:                        /* random* reference */
13784             ptr = POPPTR(ss,ix);
13785             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13786             /* FALLTHROUGH */
13787         case SAVEt_INT_SMALL:
13788         case SAVEt_I32_SMALL:
13789         case SAVEt_I16:                         /* I16 reference */
13790         case SAVEt_I8:                          /* I8 reference */
13791         case SAVEt_BOOL:
13792             ptr = POPPTR(ss,ix);
13793             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13794             break;
13795         case SAVEt_GENERIC_PVREF:               /* generic char* */
13796         case SAVEt_PPTR:                        /* char* reference */
13797             ptr = POPPTR(ss,ix);
13798             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13799             c = (char*)POPPTR(ss,ix);
13800             TOPPTR(nss,ix) = pv_dup(c);
13801             break;
13802         case SAVEt_GP:                          /* scalar reference */
13803             gp = (GP*)POPPTR(ss,ix);
13804             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
13805             (void)GpREFCNT_inc(gp);
13806             gv = (const GV *)POPPTR(ss,ix);
13807             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
13808             break;
13809         case SAVEt_FREEOP:
13810             ptr = POPPTR(ss,ix);
13811             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
13812                 /* these are assumed to be refcounted properly */
13813                 OP *o;
13814                 switch (((OP*)ptr)->op_type) {
13815                 case OP_LEAVESUB:
13816                 case OP_LEAVESUBLV:
13817                 case OP_LEAVEEVAL:
13818                 case OP_LEAVE:
13819                 case OP_SCOPE:
13820                 case OP_LEAVEWRITE:
13821                     TOPPTR(nss,ix) = ptr;
13822                     o = (OP*)ptr;
13823                     OP_REFCNT_LOCK;
13824                     (void) OpREFCNT_inc(o);
13825                     OP_REFCNT_UNLOCK;
13826                     break;
13827                 default:
13828                     TOPPTR(nss,ix) = NULL;
13829                     break;
13830                 }
13831             }
13832             else
13833                 TOPPTR(nss,ix) = NULL;
13834             break;
13835         case SAVEt_FREECOPHH:
13836             ptr = POPPTR(ss,ix);
13837             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
13838             break;
13839         case SAVEt_ADELETE:
13840             av = (const AV *)POPPTR(ss,ix);
13841             TOPPTR(nss,ix) = av_dup_inc(av, param);
13842             i = POPINT(ss,ix);
13843             TOPINT(nss,ix) = i;
13844             break;
13845         case SAVEt_DELETE:
13846             hv = (const HV *)POPPTR(ss,ix);
13847             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13848             i = POPINT(ss,ix);
13849             TOPINT(nss,ix) = i;
13850             /* FALLTHROUGH */
13851         case SAVEt_FREEPV:
13852             c = (char*)POPPTR(ss,ix);
13853             TOPPTR(nss,ix) = pv_dup_inc(c);
13854             break;
13855         case SAVEt_STACK_POS:           /* Position on Perl stack */
13856             i = POPINT(ss,ix);
13857             TOPINT(nss,ix) = i;
13858             break;
13859         case SAVEt_DESTRUCTOR:
13860             ptr = POPPTR(ss,ix);
13861             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13862             dptr = POPDPTR(ss,ix);
13863             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
13864                                         any_dup(FPTR2DPTR(void *, dptr),
13865                                                 proto_perl));
13866             break;
13867         case SAVEt_DESTRUCTOR_X:
13868             ptr = POPPTR(ss,ix);
13869             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13870             dxptr = POPDXPTR(ss,ix);
13871             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
13872                                          any_dup(FPTR2DPTR(void *, dxptr),
13873                                                  proto_perl));
13874             break;
13875         case SAVEt_REGCONTEXT:
13876         case SAVEt_ALLOC:
13877             ix -= uv >> SAVE_TIGHT_SHIFT;
13878             break;
13879         case SAVEt_AELEM:               /* array element */
13880             sv = (const SV *)POPPTR(ss,ix);
13881             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13882             i = POPINT(ss,ix);
13883             TOPINT(nss,ix) = i;
13884             av = (const AV *)POPPTR(ss,ix);
13885             TOPPTR(nss,ix) = av_dup_inc(av, param);
13886             break;
13887         case SAVEt_OP:
13888             ptr = POPPTR(ss,ix);
13889             TOPPTR(nss,ix) = ptr;
13890             break;
13891         case SAVEt_HINTS:
13892             ptr = POPPTR(ss,ix);
13893             ptr = cophh_copy((COPHH*)ptr);
13894             TOPPTR(nss,ix) = ptr;
13895             i = POPINT(ss,ix);
13896             TOPINT(nss,ix) = i;
13897             if (i & HINT_LOCALIZE_HH) {
13898                 hv = (const HV *)POPPTR(ss,ix);
13899                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13900             }
13901             break;
13902         case SAVEt_PADSV_AND_MORTALIZE:
13903             longval = (long)POPLONG(ss,ix);
13904             TOPLONG(nss,ix) = longval;
13905             ptr = POPPTR(ss,ix);
13906             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13907             sv = (const SV *)POPPTR(ss,ix);
13908             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13909             break;
13910         case SAVEt_SET_SVFLAGS:
13911             i = POPINT(ss,ix);
13912             TOPINT(nss,ix) = i;
13913             i = POPINT(ss,ix);
13914             TOPINT(nss,ix) = i;
13915             sv = (const SV *)POPPTR(ss,ix);
13916             TOPPTR(nss,ix) = sv_dup(sv, param);
13917             break;
13918         case SAVEt_COMPILE_WARNINGS:
13919             ptr = POPPTR(ss,ix);
13920             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13921             break;
13922         case SAVEt_PARSER:
13923             ptr = POPPTR(ss,ix);
13924             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13925             break;
13926         case SAVEt_GP_ALIASED_SV:
13927             ptr = POPPTR(ss,ix);
13928             TOPPTR(nss,ix) = gp_dup((GP *)ptr, param);
13929             ((GP *)ptr)->gp_refcnt++;
13930             break;
13931         default:
13932             Perl_croak(aTHX_
13933                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13934         }
13935     }
13936
13937     return nss;
13938 }
13939
13940
13941 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13942  * flag to the result. This is done for each stash before cloning starts,
13943  * so we know which stashes want their objects cloned */
13944
13945 static void
13946 do_mark_cloneable_stash(pTHX_ SV *const sv)
13947 {
13948     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13949     if (hvname) {
13950         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13951         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13952         if (cloner && GvCV(cloner)) {
13953             dSP;
13954             UV status;
13955
13956             ENTER;
13957             SAVETMPS;
13958             PUSHMARK(SP);
13959             mXPUSHs(newSVhek(hvname));
13960             PUTBACK;
13961             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13962             SPAGAIN;
13963             status = POPu;
13964             PUTBACK;
13965             FREETMPS;
13966             LEAVE;
13967             if (status)
13968                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13969         }
13970     }
13971 }
13972
13973
13974
13975 /*
13976 =for apidoc perl_clone
13977
13978 Create and return a new interpreter by cloning the current one.
13979
13980 perl_clone takes these flags as parameters:
13981
13982 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13983 without it we only clone the data and zero the stacks,
13984 with it we copy the stacks and the new perl interpreter is
13985 ready to run at the exact same point as the previous one.
13986 The pseudo-fork code uses COPY_STACKS while the
13987 threads->create doesn't.
13988
13989 CLONEf_KEEP_PTR_TABLE -
13990 perl_clone keeps a ptr_table with the pointer of the old
13991 variable as a key and the new variable as a value,
13992 this allows it to check if something has been cloned and not
13993 clone it again but rather just use the value and increase the
13994 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13995 the ptr_table using the function
13996 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13997 reason to keep it around is if you want to dup some of your own
13998 variable who are outside the graph perl scans, example of this
13999 code is in threads.xs create.
14000
14001 CLONEf_CLONE_HOST -
14002 This is a win32 thing, it is ignored on unix, it tells perls
14003 win32host code (which is c++) to clone itself, this is needed on
14004 win32 if you want to run two threads at the same time,
14005 if you just want to do some stuff in a separate perl interpreter
14006 and then throw it away and return to the original one,
14007 you don't need to do anything.
14008
14009 =cut
14010 */
14011
14012 /* XXX the above needs expanding by someone who actually understands it ! */
14013 EXTERN_C PerlInterpreter *
14014 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14015
14016 PerlInterpreter *
14017 perl_clone(PerlInterpreter *proto_perl, UV flags)
14018 {
14019    dVAR;
14020 #ifdef PERL_IMPLICIT_SYS
14021
14022     PERL_ARGS_ASSERT_PERL_CLONE;
14023
14024    /* perlhost.h so we need to call into it
14025    to clone the host, CPerlHost should have a c interface, sky */
14026
14027    if (flags & CLONEf_CLONE_HOST) {
14028        return perl_clone_host(proto_perl,flags);
14029    }
14030    return perl_clone_using(proto_perl, flags,
14031                             proto_perl->IMem,
14032                             proto_perl->IMemShared,
14033                             proto_perl->IMemParse,
14034                             proto_perl->IEnv,
14035                             proto_perl->IStdIO,
14036                             proto_perl->ILIO,
14037                             proto_perl->IDir,
14038                             proto_perl->ISock,
14039                             proto_perl->IProc);
14040 }
14041
14042 PerlInterpreter *
14043 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14044                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14045                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14046                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14047                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14048                  struct IPerlProc* ipP)
14049 {
14050     /* XXX many of the string copies here can be optimized if they're
14051      * constants; they need to be allocated as common memory and just
14052      * their pointers copied. */
14053
14054     IV i;
14055     CLONE_PARAMS clone_params;
14056     CLONE_PARAMS* const param = &clone_params;
14057
14058     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14059
14060     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14061 #else           /* !PERL_IMPLICIT_SYS */
14062     IV i;
14063     CLONE_PARAMS clone_params;
14064     CLONE_PARAMS* param = &clone_params;
14065     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14066
14067     PERL_ARGS_ASSERT_PERL_CLONE;
14068 #endif          /* PERL_IMPLICIT_SYS */
14069
14070     /* for each stash, determine whether its objects should be cloned */
14071     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14072     PERL_SET_THX(my_perl);
14073
14074 #ifdef DEBUGGING
14075     PoisonNew(my_perl, 1, PerlInterpreter);
14076     PL_op = NULL;
14077     PL_curcop = NULL;
14078     PL_defstash = NULL; /* may be used by perl malloc() */
14079     PL_markstack = 0;
14080     PL_scopestack = 0;
14081     PL_scopestack_name = 0;
14082     PL_savestack = 0;
14083     PL_savestack_ix = 0;
14084     PL_savestack_max = -1;
14085     PL_sig_pending = 0;
14086     PL_parser = NULL;
14087     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14088 #  ifdef DEBUG_LEAKING_SCALARS
14089     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14090 #  endif
14091 #else   /* !DEBUGGING */
14092     Zero(my_perl, 1, PerlInterpreter);
14093 #endif  /* DEBUGGING */
14094
14095 #ifdef PERL_IMPLICIT_SYS
14096     /* host pointers */
14097     PL_Mem              = ipM;
14098     PL_MemShared        = ipMS;
14099     PL_MemParse         = ipMP;
14100     PL_Env              = ipE;
14101     PL_StdIO            = ipStd;
14102     PL_LIO              = ipLIO;
14103     PL_Dir              = ipD;
14104     PL_Sock             = ipS;
14105     PL_Proc             = ipP;
14106 #endif          /* PERL_IMPLICIT_SYS */
14107
14108
14109     param->flags = flags;
14110     /* Nothing in the core code uses this, but we make it available to
14111        extensions (using mg_dup).  */
14112     param->proto_perl = proto_perl;
14113     /* Likely nothing will use this, but it is initialised to be consistent
14114        with Perl_clone_params_new().  */
14115     param->new_perl = my_perl;
14116     param->unreferenced = NULL;
14117
14118
14119     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14120
14121     PL_body_arenas = NULL;
14122     Zero(&PL_body_roots, 1, PL_body_roots);
14123     
14124     PL_sv_count         = 0;
14125     PL_sv_root          = NULL;
14126     PL_sv_arenaroot     = NULL;
14127
14128     PL_debug            = proto_perl->Idebug;
14129
14130     /* dbargs array probably holds garbage */
14131     PL_dbargs           = NULL;
14132
14133     PL_compiling = proto_perl->Icompiling;
14134
14135     /* pseudo environmental stuff */
14136     PL_origargc         = proto_perl->Iorigargc;
14137     PL_origargv         = proto_perl->Iorigargv;
14138
14139 #ifndef NO_TAINT_SUPPORT
14140     /* Set tainting stuff before PerlIO_debug can possibly get called */
14141     PL_tainting         = proto_perl->Itainting;
14142     PL_taint_warn       = proto_perl->Itaint_warn;
14143 #else
14144     PL_tainting         = FALSE;
14145     PL_taint_warn       = FALSE;
14146 #endif
14147
14148     PL_minus_c          = proto_perl->Iminus_c;
14149
14150     PL_localpatches     = proto_perl->Ilocalpatches;
14151     PL_splitstr         = proto_perl->Isplitstr;
14152     PL_minus_n          = proto_perl->Iminus_n;
14153     PL_minus_p          = proto_perl->Iminus_p;
14154     PL_minus_l          = proto_perl->Iminus_l;
14155     PL_minus_a          = proto_perl->Iminus_a;
14156     PL_minus_E          = proto_perl->Iminus_E;
14157     PL_minus_F          = proto_perl->Iminus_F;
14158     PL_doswitches       = proto_perl->Idoswitches;
14159     PL_dowarn           = proto_perl->Idowarn;
14160     PL_sawalias         = proto_perl->Isawalias;
14161 #ifdef PERL_SAWAMPERSAND
14162     PL_sawampersand     = proto_perl->Isawampersand;
14163 #endif
14164     PL_unsafe           = proto_perl->Iunsafe;
14165     PL_perldb           = proto_perl->Iperldb;
14166     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14167     PL_exit_flags       = proto_perl->Iexit_flags;
14168
14169     /* XXX time(&PL_basetime) when asked for? */
14170     PL_basetime         = proto_perl->Ibasetime;
14171
14172     PL_maxsysfd         = proto_perl->Imaxsysfd;
14173     PL_statusvalue      = proto_perl->Istatusvalue;
14174 #ifdef __VMS
14175     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14176 #else
14177     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14178 #endif
14179
14180     /* RE engine related */
14181     PL_regmatch_slab    = NULL;
14182     PL_reg_curpm        = NULL;
14183
14184     PL_sub_generation   = proto_perl->Isub_generation;
14185
14186     /* funky return mechanisms */
14187     PL_forkprocess      = proto_perl->Iforkprocess;
14188
14189     /* internal state */
14190     PL_maxo             = proto_perl->Imaxo;
14191
14192     PL_main_start       = proto_perl->Imain_start;
14193     PL_eval_root        = proto_perl->Ieval_root;
14194     PL_eval_start       = proto_perl->Ieval_start;
14195
14196     PL_filemode         = proto_perl->Ifilemode;
14197     PL_lastfd           = proto_perl->Ilastfd;
14198     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14199     PL_Argv             = NULL;
14200     PL_Cmd              = NULL;
14201     PL_gensym           = proto_perl->Igensym;
14202
14203     PL_laststatval      = proto_perl->Ilaststatval;
14204     PL_laststype        = proto_perl->Ilaststype;
14205     PL_mess_sv          = NULL;
14206
14207     PL_profiledata      = NULL;
14208
14209     PL_generation       = proto_perl->Igeneration;
14210
14211     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14212     PL_in_clean_all     = proto_perl->Iin_clean_all;
14213
14214     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14215     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14216     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14217     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14218     PL_nomemok          = proto_perl->Inomemok;
14219     PL_an               = proto_perl->Ian;
14220     PL_evalseq          = proto_perl->Ievalseq;
14221     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14222     PL_origalen         = proto_perl->Iorigalen;
14223
14224     PL_sighandlerp      = proto_perl->Isighandlerp;
14225
14226     PL_runops           = proto_perl->Irunops;
14227
14228     PL_subline          = proto_perl->Isubline;
14229
14230 #ifdef FCRYPT
14231     PL_cryptseen        = proto_perl->Icryptseen;
14232 #endif
14233
14234 #ifdef USE_LOCALE_COLLATE
14235     PL_collation_ix     = proto_perl->Icollation_ix;
14236     PL_collation_standard       = proto_perl->Icollation_standard;
14237     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14238     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14239 #endif /* USE_LOCALE_COLLATE */
14240
14241 #ifdef USE_LOCALE_NUMERIC
14242     PL_numeric_standard = proto_perl->Inumeric_standard;
14243     PL_numeric_local    = proto_perl->Inumeric_local;
14244 #endif /* !USE_LOCALE_NUMERIC */
14245
14246     /* Did the locale setup indicate UTF-8? */
14247     PL_utf8locale       = proto_perl->Iutf8locale;
14248     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14249     /* Unicode features (see perlrun/-C) */
14250     PL_unicode          = proto_perl->Iunicode;
14251
14252     /* Pre-5.8 signals control */
14253     PL_signals          = proto_perl->Isignals;
14254
14255     /* times() ticks per second */
14256     PL_clocktick        = proto_perl->Iclocktick;
14257
14258     /* Recursion stopper for PerlIO_find_layer */
14259     PL_in_load_module   = proto_perl->Iin_load_module;
14260
14261     /* sort() routine */
14262     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14263
14264     /* Not really needed/useful since the reenrant_retint is "volatile",
14265      * but do it for consistency's sake. */
14266     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14267
14268     /* Hooks to shared SVs and locks. */
14269     PL_sharehook        = proto_perl->Isharehook;
14270     PL_lockhook         = proto_perl->Ilockhook;
14271     PL_unlockhook       = proto_perl->Iunlockhook;
14272     PL_threadhook       = proto_perl->Ithreadhook;
14273     PL_destroyhook      = proto_perl->Idestroyhook;
14274     PL_signalhook       = proto_perl->Isignalhook;
14275
14276     PL_globhook         = proto_perl->Iglobhook;
14277
14278     /* swatch cache */
14279     PL_last_swash_hv    = NULL; /* reinits on demand */
14280     PL_last_swash_klen  = 0;
14281     PL_last_swash_key[0]= '\0';
14282     PL_last_swash_tmps  = (U8*)NULL;
14283     PL_last_swash_slen  = 0;
14284
14285     PL_srand_called     = proto_perl->Isrand_called;
14286     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14287
14288     if (flags & CLONEf_COPY_STACKS) {
14289         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14290         PL_tmps_ix              = proto_perl->Itmps_ix;
14291         PL_tmps_max             = proto_perl->Itmps_max;
14292         PL_tmps_floor           = proto_perl->Itmps_floor;
14293
14294         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14295          * NOTE: unlike the others! */
14296         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14297         PL_scopestack_max       = proto_perl->Iscopestack_max;
14298
14299         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14300          * NOTE: unlike the others! */
14301         PL_savestack_ix         = proto_perl->Isavestack_ix;
14302         PL_savestack_max        = proto_perl->Isavestack_max;
14303     }
14304
14305     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14306     PL_top_env          = &PL_start_env;
14307
14308     PL_op               = proto_perl->Iop;
14309
14310     PL_Sv               = NULL;
14311     PL_Xpv              = (XPV*)NULL;
14312     my_perl->Ina        = proto_perl->Ina;
14313
14314     PL_statbuf          = proto_perl->Istatbuf;
14315     PL_statcache        = proto_perl->Istatcache;
14316
14317 #ifndef NO_TAINT_SUPPORT
14318     PL_tainted          = proto_perl->Itainted;
14319 #else
14320     PL_tainted          = FALSE;
14321 #endif
14322     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14323
14324     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14325
14326     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14327     PL_restartop        = proto_perl->Irestartop;
14328     PL_in_eval          = proto_perl->Iin_eval;
14329     PL_delaymagic       = proto_perl->Idelaymagic;
14330     PL_phase            = proto_perl->Iphase;
14331     PL_localizing       = proto_perl->Ilocalizing;
14332
14333     PL_hv_fetch_ent_mh  = NULL;
14334     PL_modcount         = proto_perl->Imodcount;
14335     PL_lastgotoprobe    = NULL;
14336     PL_dumpindent       = proto_perl->Idumpindent;
14337
14338     PL_efloatbuf        = NULL;         /* reinits on demand */
14339     PL_efloatsize       = 0;                    /* reinits on demand */
14340
14341     /* regex stuff */
14342
14343     PL_colorset         = 0;            /* reinits PL_colors[] */
14344     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14345
14346     /* Pluggable optimizer */
14347     PL_peepp            = proto_perl->Ipeepp;
14348     PL_rpeepp           = proto_perl->Irpeepp;
14349     /* op_free() hook */
14350     PL_opfreehook       = proto_perl->Iopfreehook;
14351
14352 #ifdef USE_REENTRANT_API
14353     /* XXX: things like -Dm will segfault here in perlio, but doing
14354      *  PERL_SET_CONTEXT(proto_perl);
14355      * breaks too many other things
14356      */
14357     Perl_reentrant_init(aTHX);
14358 #endif
14359
14360     /* create SV map for pointer relocation */
14361     PL_ptr_table = ptr_table_new();
14362
14363     /* initialize these special pointers as early as possible */
14364     init_constants();
14365     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14366     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14367     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14368
14369     /* create (a non-shared!) shared string table */
14370     PL_strtab           = newHV();
14371     HvSHAREKEYS_off(PL_strtab);
14372     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14373     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14374
14375     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14376
14377     /* This PV will be free'd special way so must set it same way op.c does */
14378     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14379     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14380
14381     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14382     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14383     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14384     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14385
14386     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14387     /* This makes no difference to the implementation, as it always pushes
14388        and shifts pointers to other SVs without changing their reference
14389        count, with the array becoming empty before it is freed. However, it
14390        makes it conceptually clear what is going on, and will avoid some
14391        work inside av.c, filling slots between AvFILL() and AvMAX() with
14392        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14393     AvREAL_off(param->stashes);
14394
14395     if (!(flags & CLONEf_COPY_STACKS)) {
14396         param->unreferenced = newAV();
14397     }
14398
14399 #ifdef PERLIO_LAYERS
14400     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14401     PerlIO_clone(aTHX_ proto_perl, param);
14402 #endif
14403
14404     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14405     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14406     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14407     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14408     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14409     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14410
14411     /* switches */
14412     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14413     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
14414     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14415     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14416
14417     /* magical thingies */
14418
14419     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14420
14421     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14422     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14423     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14424
14425    
14426     /* Clone the regex array */
14427     /* ORANGE FIXME for plugins, probably in the SV dup code.
14428        newSViv(PTR2IV(CALLREGDUPE(
14429        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14430     */
14431     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14432     PL_regex_pad = AvARRAY(PL_regex_padav);
14433
14434     PL_stashpadmax      = proto_perl->Istashpadmax;
14435     PL_stashpadix       = proto_perl->Istashpadix ;
14436     Newx(PL_stashpad, PL_stashpadmax, HV *);
14437     {
14438         PADOFFSET o = 0;
14439         for (; o < PL_stashpadmax; ++o)
14440             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14441     }
14442
14443     /* shortcuts to various I/O objects */
14444     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14445     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14446     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14447     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14448     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14449     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14450     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14451
14452     /* shortcuts to regexp stuff */
14453     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14454
14455     /* shortcuts to misc objects */
14456     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14457
14458     /* shortcuts to debugging objects */
14459     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14460     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14461     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14462     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14463     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14464     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14465
14466     /* symbol tables */
14467     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14468     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14469     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14470     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14471     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14472
14473     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14474     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14475     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14476     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14477     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14478     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14479     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14480     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14481
14482     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14483
14484     /* subprocess state */
14485     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14486
14487     if (proto_perl->Iop_mask)
14488         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14489     else
14490         PL_op_mask      = NULL;
14491     /* PL_asserting        = proto_perl->Iasserting; */
14492
14493     /* current interpreter roots */
14494     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14495     OP_REFCNT_LOCK;
14496     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14497     OP_REFCNT_UNLOCK;
14498
14499     /* runtime control stuff */
14500     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14501
14502     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14503
14504     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14505
14506     /* interpreter atexit processing */
14507     PL_exitlistlen      = proto_perl->Iexitlistlen;
14508     if (PL_exitlistlen) {
14509         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14510         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14511     }
14512     else
14513         PL_exitlist     = (PerlExitListEntry*)NULL;
14514
14515     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14516     if (PL_my_cxt_size) {
14517         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14518         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14519 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14520         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14521         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14522 #endif
14523     }
14524     else {
14525         PL_my_cxt_list  = (void**)NULL;
14526 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14527         PL_my_cxt_keys  = (const char**)NULL;
14528 #endif
14529     }
14530     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14531     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14532     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14533     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14534
14535     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14536
14537     PAD_CLONE_VARS(proto_perl, param);
14538
14539 #ifdef HAVE_INTERP_INTERN
14540     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14541 #endif
14542
14543     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14544
14545 #ifdef PERL_USES_PL_PIDSTATUS
14546     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14547 #endif
14548     PL_osname           = SAVEPV(proto_perl->Iosname);
14549     PL_parser           = parser_dup(proto_perl->Iparser, param);
14550
14551     /* XXX this only works if the saved cop has already been cloned */
14552     if (proto_perl->Iparser) {
14553         PL_parser->saved_curcop = (COP*)any_dup(
14554                                     proto_perl->Iparser->saved_curcop,
14555                                     proto_perl);
14556     }
14557
14558     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14559
14560 #ifdef USE_LOCALE_COLLATE
14561     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14562 #endif /* USE_LOCALE_COLLATE */
14563
14564 #ifdef USE_LOCALE_NUMERIC
14565     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14566     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14567 #endif /* !USE_LOCALE_NUMERIC */
14568
14569     /* Unicode inversion lists */
14570     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14571     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14572     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14573     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14574
14575     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14576     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14577
14578     /* utf8 character class swashes */
14579     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14580         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14581     }
14582     for (i = 0; i < POSIX_CC_COUNT; i++) {
14583         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14584     }
14585     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14586     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
14587     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
14588     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14589     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14590     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14591     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14592     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14593     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14594     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14595     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14596     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14597     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14598     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14599     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14600     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14601
14602     if (proto_perl->Ipsig_pend) {
14603         Newxz(PL_psig_pend, SIG_SIZE, int);
14604     }
14605     else {
14606         PL_psig_pend    = (int*)NULL;
14607     }
14608
14609     if (proto_perl->Ipsig_name) {
14610         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14611         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14612                             param);
14613         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14614     }
14615     else {
14616         PL_psig_ptr     = (SV**)NULL;
14617         PL_psig_name    = (SV**)NULL;
14618     }
14619
14620     if (flags & CLONEf_COPY_STACKS) {
14621         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14622         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14623                             PL_tmps_ix+1, param);
14624
14625         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14626         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14627         Newxz(PL_markstack, i, I32);
14628         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14629                                                   - proto_perl->Imarkstack);
14630         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14631                                                   - proto_perl->Imarkstack);
14632         Copy(proto_perl->Imarkstack, PL_markstack,
14633              PL_markstack_ptr - PL_markstack + 1, I32);
14634
14635         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14636          * NOTE: unlike the others! */
14637         Newxz(PL_scopestack, PL_scopestack_max, I32);
14638         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14639
14640 #ifdef DEBUGGING
14641         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14642         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14643 #endif
14644         /* reset stack AV to correct length before its duped via
14645          * PL_curstackinfo */
14646         AvFILLp(proto_perl->Icurstack) =
14647                             proto_perl->Istack_sp - proto_perl->Istack_base;
14648
14649         /* NOTE: si_dup() looks at PL_markstack */
14650         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14651
14652         /* PL_curstack          = PL_curstackinfo->si_stack; */
14653         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14654         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14655
14656         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14657         PL_stack_base           = AvARRAY(PL_curstack);
14658         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14659                                                    - proto_perl->Istack_base);
14660         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14661
14662         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14663         PL_savestack            = ss_dup(proto_perl, param);
14664     }
14665     else {
14666         init_stacks();
14667         ENTER;                  /* perl_destruct() wants to LEAVE; */
14668     }
14669
14670     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14671     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14672
14673     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14674     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14675     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14676     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14677     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14678     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14679
14680     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14681
14682     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14683     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14684     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14685
14686     PL_stashcache       = newHV();
14687
14688     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14689                                             proto_perl->Iwatchaddr);
14690     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14691     if (PL_debug && PL_watchaddr) {
14692         PerlIO_printf(Perl_debug_log,
14693           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14694           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14695           PTR2UV(PL_watchok));
14696     }
14697
14698     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14699     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14700     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14701
14702     /* Call the ->CLONE method, if it exists, for each of the stashes
14703        identified by sv_dup() above.
14704     */
14705     while(av_tindex(param->stashes) != -1) {
14706         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14707         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14708         if (cloner && GvCV(cloner)) {
14709             dSP;
14710             ENTER;
14711             SAVETMPS;
14712             PUSHMARK(SP);
14713             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14714             PUTBACK;
14715             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14716             FREETMPS;
14717             LEAVE;
14718         }
14719     }
14720
14721     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14722         ptr_table_free(PL_ptr_table);
14723         PL_ptr_table = NULL;
14724     }
14725
14726     if (!(flags & CLONEf_COPY_STACKS)) {
14727         unreferenced_to_tmp_stack(param->unreferenced);
14728     }
14729
14730     SvREFCNT_dec(param->stashes);
14731
14732     /* orphaned? eg threads->new inside BEGIN or use */
14733     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14734         SvREFCNT_inc_simple_void(PL_compcv);
14735         SAVEFREESV(PL_compcv);
14736     }
14737
14738     return my_perl;
14739 }
14740
14741 static void
14742 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14743 {
14744     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14745     
14746     if (AvFILLp(unreferenced) > -1) {
14747         SV **svp = AvARRAY(unreferenced);
14748         SV **const last = svp + AvFILLp(unreferenced);
14749         SSize_t count = 0;
14750
14751         do {
14752             if (SvREFCNT(*svp) == 1)
14753                 ++count;
14754         } while (++svp <= last);
14755
14756         EXTEND_MORTAL(count);
14757         svp = AvARRAY(unreferenced);
14758
14759         do {
14760             if (SvREFCNT(*svp) == 1) {
14761                 /* Our reference is the only one to this SV. This means that
14762                    in this thread, the scalar effectively has a 0 reference.
14763                    That doesn't work (cleanup never happens), so donate our
14764                    reference to it onto the save stack. */
14765                 PL_tmps_stack[++PL_tmps_ix] = *svp;
14766             } else {
14767                 /* As an optimisation, because we are already walking the
14768                    entire array, instead of above doing either
14769                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
14770                    release our reference to the scalar, so that at the end of
14771                    the array owns zero references to the scalars it happens to
14772                    point to. We are effectively converting the array from
14773                    AvREAL() on to AvREAL() off. This saves the av_clear()
14774                    (triggered by the SvREFCNT_dec(unreferenced) below) from
14775                    walking the array a second time.  */
14776                 SvREFCNT_dec(*svp);
14777             }
14778
14779         } while (++svp <= last);
14780         AvREAL_off(unreferenced);
14781     }
14782     SvREFCNT_dec_NN(unreferenced);
14783 }
14784
14785 void
14786 Perl_clone_params_del(CLONE_PARAMS *param)
14787 {
14788     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
14789        happy: */
14790     PerlInterpreter *const to = param->new_perl;
14791     dTHXa(to);
14792     PerlInterpreter *const was = PERL_GET_THX;
14793
14794     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
14795
14796     if (was != to) {
14797         PERL_SET_THX(to);
14798     }
14799
14800     SvREFCNT_dec(param->stashes);
14801     if (param->unreferenced)
14802         unreferenced_to_tmp_stack(param->unreferenced);
14803
14804     Safefree(param);
14805
14806     if (was != to) {
14807         PERL_SET_THX(was);
14808     }
14809 }
14810
14811 CLONE_PARAMS *
14812 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
14813 {
14814     dVAR;
14815     /* Need to play this game, as newAV() can call safesysmalloc(), and that
14816        does a dTHX; to get the context from thread local storage.
14817        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
14818        a version that passes in my_perl.  */
14819     PerlInterpreter *const was = PERL_GET_THX;
14820     CLONE_PARAMS *param;
14821
14822     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
14823
14824     if (was != to) {
14825         PERL_SET_THX(to);
14826     }
14827
14828     /* Given that we've set the context, we can do this unshared.  */
14829     Newx(param, 1, CLONE_PARAMS);
14830
14831     param->flags = 0;
14832     param->proto_perl = from;
14833     param->new_perl = to;
14834     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
14835     AvREAL_off(param->stashes);
14836     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
14837
14838     if (was != to) {
14839         PERL_SET_THX(was);
14840     }
14841     return param;
14842 }
14843
14844 #endif /* USE_ITHREADS */
14845
14846 void
14847 Perl_init_constants(pTHX)
14848 {
14849     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
14850     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
14851     SvANY(&PL_sv_undef)         = NULL;
14852
14853     SvANY(&PL_sv_no)            = new_XPVNV();
14854     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
14855     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
14856                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14857                                   |SVp_POK|SVf_POK;
14858
14859     SvANY(&PL_sv_yes)           = new_XPVNV();
14860     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
14861     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
14862                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14863                                   |SVp_POK|SVf_POK;
14864
14865     SvPV_set(&PL_sv_no, (char*)PL_No);
14866     SvCUR_set(&PL_sv_no, 0);
14867     SvLEN_set(&PL_sv_no, 0);
14868     SvIV_set(&PL_sv_no, 0);
14869     SvNV_set(&PL_sv_no, 0);
14870
14871     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
14872     SvCUR_set(&PL_sv_yes, 1);
14873     SvLEN_set(&PL_sv_yes, 0);
14874     SvIV_set(&PL_sv_yes, 1);
14875     SvNV_set(&PL_sv_yes, 1);
14876 }
14877
14878 /*
14879 =head1 Unicode Support
14880
14881 =for apidoc sv_recode_to_utf8
14882
14883 The encoding is assumed to be an Encode object, on entry the PV
14884 of the sv is assumed to be octets in that encoding, and the sv
14885 will be converted into Unicode (and UTF-8).
14886
14887 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14888 is not a reference, nothing is done to the sv.  If the encoding is not
14889 an C<Encode::XS> Encoding object, bad things will happen.
14890 (See F<lib/encoding.pm> and L<Encode>.)
14891
14892 The PV of the sv is returned.
14893
14894 =cut */
14895
14896 char *
14897 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14898 {
14899     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14900
14901     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14902         SV *uni;
14903         STRLEN len;
14904         const char *s;
14905         dSP;
14906         SV *nsv = sv;
14907         ENTER;
14908         PUSHSTACK;
14909         SAVETMPS;
14910         if (SvPADTMP(nsv)) {
14911             nsv = sv_newmortal();
14912             SvSetSV_nosteal(nsv, sv);
14913         }
14914         PUSHMARK(sp);
14915         EXTEND(SP, 3);
14916         PUSHs(encoding);
14917         PUSHs(nsv);
14918 /*
14919   NI-S 2002/07/09
14920   Passing sv_yes is wrong - it needs to be or'ed set of constants
14921   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14922   remove converted chars from source.
14923
14924   Both will default the value - let them.
14925
14926         XPUSHs(&PL_sv_yes);
14927 */
14928         PUTBACK;
14929         call_method("decode", G_SCALAR);
14930         SPAGAIN;
14931         uni = POPs;
14932         PUTBACK;
14933         s = SvPV_const(uni, len);
14934         if (s != SvPVX_const(sv)) {
14935             SvGROW(sv, len + 1);
14936             Move(s, SvPVX(sv), len + 1, char);
14937             SvCUR_set(sv, len);
14938         }
14939         FREETMPS;
14940         POPSTACK;
14941         LEAVE;
14942         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14943             /* clear pos and any utf8 cache */
14944             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14945             if (mg)
14946                 mg->mg_len = -1;
14947             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14948                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14949         }
14950         SvUTF8_on(sv);
14951         return SvPVX(sv);
14952     }
14953     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14954 }
14955
14956 /*
14957 =for apidoc sv_cat_decode
14958
14959 The encoding is assumed to be an Encode object, the PV of the ssv is
14960 assumed to be octets in that encoding and decoding the input starts
14961 from the position which (PV + *offset) pointed to.  The dsv will be
14962 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14963 when the string tstr appears in decoding output or the input ends on
14964 the PV of the ssv.  The value which the offset points will be modified
14965 to the last input position on the ssv.
14966
14967 Returns TRUE if the terminator was found, else returns FALSE.
14968
14969 =cut */
14970
14971 bool
14972 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14973                    SV *ssv, int *offset, char *tstr, int tlen)
14974 {
14975     bool ret = FALSE;
14976
14977     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14978
14979     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14980         SV *offsv;
14981         dSP;
14982         ENTER;
14983         SAVETMPS;
14984         PUSHMARK(sp);
14985         EXTEND(SP, 6);
14986         PUSHs(encoding);
14987         PUSHs(dsv);
14988         PUSHs(ssv);
14989         offsv = newSViv(*offset);
14990         mPUSHs(offsv);
14991         mPUSHp(tstr, tlen);
14992         PUTBACK;
14993         call_method("cat_decode", G_SCALAR);
14994         SPAGAIN;
14995         ret = SvTRUE(TOPs);
14996         *offset = SvIV(offsv);
14997         PUTBACK;
14998         FREETMPS;
14999         LEAVE;
15000     }
15001     else
15002         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15003     return ret;
15004
15005 }
15006
15007 /* ---------------------------------------------------------------------
15008  *
15009  * support functions for report_uninit()
15010  */
15011
15012 /* the maxiumum size of array or hash where we will scan looking
15013  * for the undefined element that triggered the warning */
15014
15015 #define FUV_MAX_SEARCH_SIZE 1000
15016
15017 /* Look for an entry in the hash whose value has the same SV as val;
15018  * If so, return a mortal copy of the key. */
15019
15020 STATIC SV*
15021 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15022 {
15023     dVAR;
15024     HE **array;
15025     I32 i;
15026
15027     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15028
15029     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15030                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15031         return NULL;
15032
15033     array = HvARRAY(hv);
15034
15035     for (i=HvMAX(hv); i>=0; i--) {
15036         HE *entry;
15037         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15038             if (HeVAL(entry) != val)
15039                 continue;
15040             if (    HeVAL(entry) == &PL_sv_undef ||
15041                     HeVAL(entry) == &PL_sv_placeholder)
15042                 continue;
15043             if (!HeKEY(entry))
15044                 return NULL;
15045             if (HeKLEN(entry) == HEf_SVKEY)
15046                 return sv_mortalcopy(HeKEY_sv(entry));
15047             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15048         }
15049     }
15050     return NULL;
15051 }
15052
15053 /* Look for an entry in the array whose value has the same SV as val;
15054  * If so, return the index, otherwise return -1. */
15055
15056 STATIC I32
15057 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15058 {
15059     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15060
15061     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15062                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15063         return -1;
15064
15065     if (val != &PL_sv_undef) {
15066         SV ** const svp = AvARRAY(av);
15067         I32 i;
15068
15069         for (i=AvFILLp(av); i>=0; i--)
15070             if (svp[i] == val)
15071                 return i;
15072     }
15073     return -1;
15074 }
15075
15076 /* varname(): return the name of a variable, optionally with a subscript.
15077  * If gv is non-zero, use the name of that global, along with gvtype (one
15078  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15079  * targ.  Depending on the value of the subscript_type flag, return:
15080  */
15081
15082 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15083 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15084 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15085 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15086
15087 SV*
15088 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15089         const SV *const keyname, I32 aindex, int subscript_type)
15090 {
15091
15092     SV * const name = sv_newmortal();
15093     if (gv && isGV(gv)) {
15094         char buffer[2];
15095         buffer[0] = gvtype;
15096         buffer[1] = 0;
15097
15098         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15099
15100         gv_fullname4(name, gv, buffer, 0);
15101
15102         if ((unsigned int)SvPVX(name)[1] <= 26) {
15103             buffer[0] = '^';
15104             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15105
15106             /* Swap the 1 unprintable control character for the 2 byte pretty
15107                version - ie substr($name, 1, 1) = $buffer; */
15108             sv_insert(name, 1, 1, buffer, 2);
15109         }
15110     }
15111     else {
15112         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15113         SV *sv;
15114         AV *av;
15115
15116         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15117
15118         if (!cv || !CvPADLIST(cv))
15119             return NULL;
15120         av = *PadlistARRAY(CvPADLIST(cv));
15121         sv = *av_fetch(av, targ, FALSE);
15122         sv_setsv_flags(name, sv, 0);
15123     }
15124
15125     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15126         SV * const sv = newSV(0);
15127         *SvPVX(name) = '$';
15128         Perl_sv_catpvf(aTHX_ name, "{%s}",
15129             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15130                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15131         SvREFCNT_dec_NN(sv);
15132     }
15133     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15134         *SvPVX(name) = '$';
15135         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15136     }
15137     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15138         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15139         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15140     }
15141
15142     return name;
15143 }
15144
15145
15146 /*
15147 =for apidoc find_uninit_var
15148
15149 Find the name of the undefined variable (if any) that caused the operator
15150 to issue a "Use of uninitialized value" warning.
15151 If match is true, only return a name if its value matches uninit_sv.
15152 So roughly speaking, if a unary operator (such as OP_COS) generates a
15153 warning, then following the direct child of the op may yield an
15154 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15155 other hand, with OP_ADD there are two branches to follow, so we only print
15156 the variable name if we get an exact match.
15157
15158 The name is returned as a mortal SV.
15159
15160 Assumes that PL_op is the op that originally triggered the error, and that
15161 PL_comppad/PL_curpad points to the currently executing pad.
15162
15163 =cut
15164 */
15165
15166 STATIC SV *
15167 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15168                   bool match)
15169 {
15170     dVAR;
15171     SV *sv;
15172     const GV *gv;
15173     const OP *o, *o2, *kid;
15174
15175     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15176                             uninit_sv == &PL_sv_placeholder)))
15177         return NULL;
15178
15179     switch (obase->op_type) {
15180
15181     case OP_RV2AV:
15182     case OP_RV2HV:
15183     case OP_PADAV:
15184     case OP_PADHV:
15185       {
15186         const bool pad  = (    obase->op_type == OP_PADAV
15187                             || obase->op_type == OP_PADHV
15188                             || obase->op_type == OP_PADRANGE
15189                           );
15190
15191         const bool hash = (    obase->op_type == OP_PADHV
15192                             || obase->op_type == OP_RV2HV
15193                             || (obase->op_type == OP_PADRANGE
15194                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15195                           );
15196         I32 index = 0;
15197         SV *keysv = NULL;
15198         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15199
15200         if (pad) { /* @lex, %lex */
15201             sv = PAD_SVl(obase->op_targ);
15202             gv = NULL;
15203         }
15204         else {
15205             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15206             /* @global, %global */
15207                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15208                 if (!gv)
15209                     break;
15210                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15211             }
15212             else if (obase == PL_op) /* @{expr}, %{expr} */
15213                 return find_uninit_var(cUNOPx(obase)->op_first,
15214                                                     uninit_sv, match);
15215             else /* @{expr}, %{expr} as a sub-expression */
15216                 return NULL;
15217         }
15218
15219         /* attempt to find a match within the aggregate */
15220         if (hash) {
15221             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15222             if (keysv)
15223                 subscript_type = FUV_SUBSCRIPT_HASH;
15224         }
15225         else {
15226             index = find_array_subscript((const AV *)sv, uninit_sv);
15227             if (index >= 0)
15228                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15229         }
15230
15231         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15232             break;
15233
15234         return varname(gv, hash ? '%' : '@', obase->op_targ,
15235                                     keysv, index, subscript_type);
15236       }
15237
15238     case OP_RV2SV:
15239         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15240             /* $global */
15241             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15242             if (!gv || !GvSTASH(gv))
15243                 break;
15244             if (match && (GvSV(gv) != uninit_sv))
15245                 break;
15246             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15247         }
15248         /* ${expr} */
15249         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
15250
15251     case OP_PADSV:
15252         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15253             break;
15254         return varname(NULL, '$', obase->op_targ,
15255                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15256
15257     case OP_GVSV:
15258         gv = cGVOPx_gv(obase);
15259         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15260             break;
15261         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15262
15263     case OP_AELEMFAST_LEX:
15264         if (match) {
15265             SV **svp;
15266             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15267             if (!av || SvRMAGICAL(av))
15268                 break;
15269             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15270             if (!svp || *svp != uninit_sv)
15271                 break;
15272         }
15273         return varname(NULL, '$', obase->op_targ,
15274                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15275     case OP_AELEMFAST:
15276         {
15277             gv = cGVOPx_gv(obase);
15278             if (!gv)
15279                 break;
15280             if (match) {
15281                 SV **svp;
15282                 AV *const av = GvAV(gv);
15283                 if (!av || SvRMAGICAL(av))
15284                     break;
15285                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15286                 if (!svp || *svp != uninit_sv)
15287                     break;
15288             }
15289             return varname(gv, '$', 0,
15290                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15291         }
15292         NOT_REACHED; /* NOTREACHED */
15293
15294     case OP_EXISTS:
15295         o = cUNOPx(obase)->op_first;
15296         if (!o || o->op_type != OP_NULL ||
15297                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15298             break;
15299         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
15300
15301     case OP_AELEM:
15302     case OP_HELEM:
15303     {
15304         bool negate = FALSE;
15305
15306         if (PL_op == obase)
15307             /* $a[uninit_expr] or $h{uninit_expr} */
15308             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
15309
15310         gv = NULL;
15311         o = cBINOPx(obase)->op_first;
15312         kid = cBINOPx(obase)->op_last;
15313
15314         /* get the av or hv, and optionally the gv */
15315         sv = NULL;
15316         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15317             sv = PAD_SV(o->op_targ);
15318         }
15319         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15320                 && cUNOPo->op_first->op_type == OP_GV)
15321         {
15322             gv = cGVOPx_gv(cUNOPo->op_first);
15323             if (!gv)
15324                 break;
15325             sv = o->op_type
15326                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15327         }
15328         if (!sv)
15329             break;
15330
15331         if (kid && kid->op_type == OP_NEGATE) {
15332             negate = TRUE;
15333             kid = cUNOPx(kid)->op_first;
15334         }
15335
15336         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15337             /* index is constant */
15338             SV* kidsv;
15339             if (negate) {
15340                 kidsv = sv_2mortal(newSVpvs("-"));
15341                 sv_catsv(kidsv, cSVOPx_sv(kid));
15342             }
15343             else
15344                 kidsv = cSVOPx_sv(kid);
15345             if (match) {
15346                 if (SvMAGICAL(sv))
15347                     break;
15348                 if (obase->op_type == OP_HELEM) {
15349                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15350                     if (!he || HeVAL(he) != uninit_sv)
15351                         break;
15352                 }
15353                 else {
15354                     SV * const  opsv = cSVOPx_sv(kid);
15355                     const IV  opsviv = SvIV(opsv);
15356                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15357                         negate ? - opsviv : opsviv,
15358                         FALSE);
15359                     if (!svp || *svp != uninit_sv)
15360                         break;
15361                 }
15362             }
15363             if (obase->op_type == OP_HELEM)
15364                 return varname(gv, '%', o->op_targ,
15365                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15366             else
15367                 return varname(gv, '@', o->op_targ, NULL,
15368                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15369                     FUV_SUBSCRIPT_ARRAY);
15370         }
15371         else  {
15372             /* index is an expression;
15373              * attempt to find a match within the aggregate */
15374             if (obase->op_type == OP_HELEM) {
15375                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15376                 if (keysv)
15377                     return varname(gv, '%', o->op_targ,
15378                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15379             }
15380             else {
15381                 const I32 index
15382                     = find_array_subscript((const AV *)sv, uninit_sv);
15383                 if (index >= 0)
15384                     return varname(gv, '@', o->op_targ,
15385                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15386             }
15387             if (match)
15388                 break;
15389             return varname(gv,
15390                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15391                 ? '@' : '%',
15392                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15393         }
15394         NOT_REACHED; /* NOTREACHED */
15395     }
15396
15397     case OP_AASSIGN:
15398         /* only examine RHS */
15399         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
15400
15401     case OP_OPEN:
15402         o = cUNOPx(obase)->op_first;
15403         if (   o->op_type == OP_PUSHMARK
15404            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15405         )
15406             o = OP_SIBLING(o);
15407
15408         if (!OP_HAS_SIBLING(o)) {
15409             /* one-arg version of open is highly magical */
15410
15411             if (o->op_type == OP_GV) { /* open FOO; */
15412                 gv = cGVOPx_gv(o);
15413                 if (match && GvSV(gv) != uninit_sv)
15414                     break;
15415                 return varname(gv, '$', 0,
15416                             NULL, 0, FUV_SUBSCRIPT_NONE);
15417             }
15418             /* other possibilities not handled are:
15419              * open $x; or open my $x;  should return '${*$x}'
15420              * open expr;               should return '$'.expr ideally
15421              */
15422              break;
15423         }
15424         goto do_op;
15425
15426     /* ops where $_ may be an implicit arg */
15427     case OP_TRANS:
15428     case OP_TRANSR:
15429     case OP_SUBST:
15430     case OP_MATCH:
15431         if ( !(obase->op_flags & OPf_STACKED)) {
15432             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
15433                                  ? PAD_SVl(obase->op_targ)
15434                                  : DEFSV))
15435             {
15436                 sv = sv_newmortal();
15437                 sv_setpvs(sv, "$_");
15438                 return sv;
15439             }
15440         }
15441         goto do_op;
15442
15443     case OP_PRTF:
15444     case OP_PRINT:
15445     case OP_SAY:
15446         match = 1; /* print etc can return undef on defined args */
15447         /* skip filehandle as it can't produce 'undef' warning  */
15448         o = cUNOPx(obase)->op_first;
15449         if ((obase->op_flags & OPf_STACKED)
15450             &&
15451                (   o->op_type == OP_PUSHMARK
15452                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15453             o = OP_SIBLING(OP_SIBLING(o));
15454         goto do_op2;
15455
15456
15457     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15458     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15459
15460         /* the following ops are capable of returning PL_sv_undef even for
15461          * defined arg(s) */
15462
15463     case OP_BACKTICK:
15464     case OP_PIPE_OP:
15465     case OP_FILENO:
15466     case OP_BINMODE:
15467     case OP_TIED:
15468     case OP_GETC:
15469     case OP_SYSREAD:
15470     case OP_SEND:
15471     case OP_IOCTL:
15472     case OP_SOCKET:
15473     case OP_SOCKPAIR:
15474     case OP_BIND:
15475     case OP_CONNECT:
15476     case OP_LISTEN:
15477     case OP_ACCEPT:
15478     case OP_SHUTDOWN:
15479     case OP_SSOCKOPT:
15480     case OP_GETPEERNAME:
15481     case OP_FTRREAD:
15482     case OP_FTRWRITE:
15483     case OP_FTREXEC:
15484     case OP_FTROWNED:
15485     case OP_FTEREAD:
15486     case OP_FTEWRITE:
15487     case OP_FTEEXEC:
15488     case OP_FTEOWNED:
15489     case OP_FTIS:
15490     case OP_FTZERO:
15491     case OP_FTSIZE:
15492     case OP_FTFILE:
15493     case OP_FTDIR:
15494     case OP_FTLINK:
15495     case OP_FTPIPE:
15496     case OP_FTSOCK:
15497     case OP_FTBLK:
15498     case OP_FTCHR:
15499     case OP_FTTTY:
15500     case OP_FTSUID:
15501     case OP_FTSGID:
15502     case OP_FTSVTX:
15503     case OP_FTTEXT:
15504     case OP_FTBINARY:
15505     case OP_FTMTIME:
15506     case OP_FTATIME:
15507     case OP_FTCTIME:
15508     case OP_READLINK:
15509     case OP_OPEN_DIR:
15510     case OP_READDIR:
15511     case OP_TELLDIR:
15512     case OP_SEEKDIR:
15513     case OP_REWINDDIR:
15514     case OP_CLOSEDIR:
15515     case OP_GMTIME:
15516     case OP_ALARM:
15517     case OP_SEMGET:
15518     case OP_GETLOGIN:
15519     case OP_UNDEF:
15520     case OP_SUBSTR:
15521     case OP_AEACH:
15522     case OP_EACH:
15523     case OP_SORT:
15524     case OP_CALLER:
15525     case OP_DOFILE:
15526     case OP_PROTOTYPE:
15527     case OP_NCMP:
15528     case OP_SMARTMATCH:
15529     case OP_UNPACK:
15530     case OP_SYSOPEN:
15531     case OP_SYSSEEK:
15532         match = 1;
15533         goto do_op;
15534
15535     case OP_ENTERSUB:
15536     case OP_GOTO:
15537         /* XXX tmp hack: these two may call an XS sub, and currently
15538           XS subs don't have a SUB entry on the context stack, so CV and
15539           pad determination goes wrong, and BAD things happen. So, just
15540           don't try to determine the value under those circumstances.
15541           Need a better fix at dome point. DAPM 11/2007 */
15542         break;
15543
15544     case OP_FLIP:
15545     case OP_FLOP:
15546     {
15547         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
15548         if (gv && GvSV(gv) == uninit_sv)
15549             return newSVpvs_flags("$.", SVs_TEMP);
15550         goto do_op;
15551     }
15552
15553     case OP_POS:
15554         /* def-ness of rval pos() is independent of the def-ness of its arg */
15555         if ( !(obase->op_flags & OPf_MOD))
15556             break;
15557
15558     case OP_SCHOMP:
15559     case OP_CHOMP:
15560         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
15561             return newSVpvs_flags("${$/}", SVs_TEMP);
15562         /* FALLTHROUGH */
15563
15564     default:
15565     do_op:
15566         if (!(obase->op_flags & OPf_KIDS))
15567             break;
15568         o = cUNOPx(obase)->op_first;
15569         
15570     do_op2:
15571         if (!o)
15572             break;
15573
15574         /* This loop checks all the kid ops, skipping any that cannot pos-
15575          * sibly be responsible for the uninitialized value; i.e., defined
15576          * constants and ops that return nothing.  If there is only one op
15577          * left that is not skipped, then we *know* it is responsible for
15578          * the uninitialized value.  If there is more than one op left, we
15579          * have to look for an exact match in the while() loop below.
15580          * Note that we skip padrange, because the individual pad ops that
15581          * it replaced are still in the tree, so we work on them instead.
15582          */
15583         o2 = NULL;
15584         for (kid=o; kid; kid = OP_SIBLING(kid)) {
15585             const OPCODE type = kid->op_type;
15586             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
15587               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
15588               || (type == OP_PUSHMARK)
15589               || (type == OP_PADRANGE)
15590             )
15591             continue;
15592
15593             if (o2) { /* more than one found */
15594                 o2 = NULL;
15595                 break;
15596             }
15597             o2 = kid;
15598         }
15599         if (o2)
15600             return find_uninit_var(o2, uninit_sv, match);
15601
15602         /* scan all args */
15603         while (o) {
15604             sv = find_uninit_var(o, uninit_sv, 1);
15605             if (sv)
15606                 return sv;
15607             o = OP_SIBLING(o);
15608         }
15609         break;
15610     }
15611     return NULL;
15612 }
15613
15614
15615 /*
15616 =for apidoc report_uninit
15617
15618 Print appropriate "Use of uninitialized variable" warning.
15619
15620 =cut
15621 */
15622
15623 void
15624 Perl_report_uninit(pTHX_ const SV *uninit_sv)
15625 {
15626     if (PL_op) {
15627         SV* varname = NULL;
15628         if (uninit_sv && PL_curpad) {
15629             varname = find_uninit_var(PL_op, uninit_sv,0);
15630             if (varname)
15631                 sv_insert(varname, 0, 0, " ", 1);
15632         }
15633         /* PL_warn_uninit_sv is constant */
15634         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15635         /* diag_listed_as: Use of uninitialized value%s */
15636         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
15637                 SVfARG(varname ? varname : &PL_sv_no),
15638                 " in ", OP_DESC(PL_op));
15639         GCC_DIAG_RESTORE;
15640     }
15641     else {
15642         /* PL_warn_uninit is constant */
15643         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15644         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
15645                     "", "", "");
15646         GCC_DIAG_RESTORE;
15647     }
15648 }
15649
15650 /*
15651  * Local variables:
15652  * c-indentation-style: bsd
15653  * c-basic-offset: 4
15654  * indent-tabs-mode: nil
15655  * End:
15656  *
15657  * ex: set ts=8 sts=4 sw=4 et:
15658  */