This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
op.c: ck_rvconst: Inline the noexpand var
[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 (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2232                 SvIV_set(sv, I_V(SvNVX(sv)));
2233                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2234                     SvIOK_on(sv);
2235                 } else {
2236                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2237                 }
2238                 /* UV will not work better than IV */
2239             } else {
2240                 if (SvNVX(sv) > (NV)UV_MAX) {
2241                     SvIsUV_on(sv);
2242                     /* Integer is inaccurate. NOK, IOKp, is UV */
2243                     SvUV_set(sv, UV_MAX);
2244                 } else {
2245                     SvUV_set(sv, U_V(SvNVX(sv)));
2246                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2247                        NV preservse UV so can do correct comparison.  */
2248                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2249                         SvIOK_on(sv);
2250                     } else {
2251                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2252                     }
2253                 }
2254                 SvIsUV_on(sv);
2255             }
2256 #else /* NV_PRESERVES_UV */
2257             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2258                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2259                 /* The IV/UV slot will have been set from value returned by
2260                    grok_number above.  The NV slot has just been set using
2261                    Atof.  */
2262                 SvNOK_on(sv);
2263                 assert (SvIOKp(sv));
2264             } else {
2265                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2266                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2267                     /* Small enough to preserve all bits. */
2268                     (void)SvIOKp_on(sv);
2269                     SvNOK_on(sv);
2270                     SvIV_set(sv, I_V(SvNVX(sv)));
2271                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2272                         SvIOK_on(sv);
2273                     /* Assumption: first non-preserved integer is < IV_MAX,
2274                        this NV is in the preserved range, therefore: */
2275                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2276                           < (UV)IV_MAX)) {
2277                         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);
2278                     }
2279                 } else {
2280                     /* IN_UV NOT_INT
2281                          0      0       already failed to read UV.
2282                          0      1       already failed to read UV.
2283                          1      0       you won't get here in this case. IV/UV
2284                                         slot set, public IOK, Atof() unneeded.
2285                          1      1       already read UV.
2286                        so there's no point in sv_2iuv_non_preserve() attempting
2287                        to use atol, strtol, strtoul etc.  */
2288 #  ifdef DEBUGGING
2289                     sv_2iuv_non_preserve (sv, numtype);
2290 #  else
2291                     sv_2iuv_non_preserve (sv);
2292 #  endif
2293                 }
2294             }
2295 #endif /* NV_PRESERVES_UV */
2296         /* It might be more code efficient to go through the entire logic above
2297            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2298            gets complex and potentially buggy, so more programmer efficient
2299            to do it this way, by turning off the public flags:  */
2300         if (!numtype)
2301             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2302         }
2303     }
2304     else  {
2305         if (isGV_with_GP(sv))
2306             return glob_2number(MUTABLE_GV(sv));
2307
2308         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2309                 report_uninit(sv);
2310         if (SvTYPE(sv) < SVt_IV)
2311             /* Typically the caller expects that sv_any is not NULL now.  */
2312             sv_upgrade(sv, SVt_IV);
2313         /* Return 0 from the caller.  */
2314         return TRUE;
2315     }
2316     return FALSE;
2317 }
2318
2319 /*
2320 =for apidoc sv_2iv_flags
2321
2322 Return the integer value of an SV, doing any necessary string
2323 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2324 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2325
2326 =cut
2327 */
2328
2329 IV
2330 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2331 {
2332     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2333
2334     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2335          && SvTYPE(sv) != SVt_PVFM);
2336
2337     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2338         mg_get(sv);
2339
2340     if (SvROK(sv)) {
2341         if (SvAMAGIC(sv)) {
2342             SV * tmpstr;
2343             if (flags & SV_SKIP_OVERLOAD)
2344                 return 0;
2345             tmpstr = AMG_CALLunary(sv, numer_amg);
2346             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2347                 return SvIV(tmpstr);
2348             }
2349         }
2350         return PTR2IV(SvRV(sv));
2351     }
2352
2353     if (SvVALID(sv) || isREGEXP(sv)) {
2354         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2355            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2356            In practice they are extremely unlikely to actually get anywhere
2357            accessible by user Perl code - the only way that I'm aware of is when
2358            a constant subroutine which is used as the second argument to index.
2359
2360            Regexps have no SvIVX and SvNVX fields.
2361         */
2362         assert(isREGEXP(sv) || SvPOKp(sv));
2363         {
2364             UV value;
2365             const char * const ptr =
2366                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2367             const int numtype
2368                 = grok_number(ptr, SvCUR(sv), &value);
2369
2370             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2371                 == IS_NUMBER_IN_UV) {
2372                 /* It's definitely an integer */
2373                 if (numtype & IS_NUMBER_NEG) {
2374                     if (value < (UV)IV_MIN)
2375                         return -(IV)value;
2376                 } else {
2377                     if (value < (UV)IV_MAX)
2378                         return (IV)value;
2379                 }
2380             }
2381             if (!numtype) {
2382                 if (ckWARN(WARN_NUMERIC))
2383                     not_a_number(sv);
2384             }
2385             return I_V(Atof(ptr));
2386         }
2387     }
2388
2389     if (SvTHINKFIRST(sv)) {
2390 #ifdef PERL_OLD_COPY_ON_WRITE
2391         if (SvIsCOW(sv)) {
2392             sv_force_normal_flags(sv, 0);
2393         }
2394 #endif
2395         if (SvREADONLY(sv) && !SvOK(sv)) {
2396             if (ckWARN(WARN_UNINITIALIZED))
2397                 report_uninit(sv);
2398             return 0;
2399         }
2400     }
2401
2402     if (!SvIOKp(sv)) {
2403         if (S_sv_2iuv_common(aTHX_ sv))
2404             return 0;
2405     }
2406
2407     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2408         PTR2UV(sv),SvIVX(sv)));
2409     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2410 }
2411
2412 /*
2413 =for apidoc sv_2uv_flags
2414
2415 Return the unsigned integer value of an SV, doing any necessary string
2416 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2417 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2418
2419 =cut
2420 */
2421
2422 UV
2423 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2424 {
2425     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2426
2427     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2428         mg_get(sv);
2429
2430     if (SvROK(sv)) {
2431         if (SvAMAGIC(sv)) {
2432             SV *tmpstr;
2433             if (flags & SV_SKIP_OVERLOAD)
2434                 return 0;
2435             tmpstr = AMG_CALLunary(sv, numer_amg);
2436             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2437                 return SvUV(tmpstr);
2438             }
2439         }
2440         return PTR2UV(SvRV(sv));
2441     }
2442
2443     if (SvVALID(sv) || isREGEXP(sv)) {
2444         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2445            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2446            Regexps have no SvIVX and SvNVX fields. */
2447         assert(isREGEXP(sv) || SvPOKp(sv));
2448         {
2449             UV value;
2450             const char * const ptr =
2451                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2452             const int numtype
2453                 = grok_number(ptr, SvCUR(sv), &value);
2454
2455             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2456                 == IS_NUMBER_IN_UV) {
2457                 /* It's definitely an integer */
2458                 if (!(numtype & IS_NUMBER_NEG))
2459                     return value;
2460             }
2461             if (!numtype) {
2462                 if (ckWARN(WARN_NUMERIC))
2463                     not_a_number(sv);
2464             }
2465             return U_V(Atof(ptr));
2466         }
2467     }
2468
2469     if (SvTHINKFIRST(sv)) {
2470 #ifdef PERL_OLD_COPY_ON_WRITE
2471         if (SvIsCOW(sv)) {
2472             sv_force_normal_flags(sv, 0);
2473         }
2474 #endif
2475         if (SvREADONLY(sv) && !SvOK(sv)) {
2476             if (ckWARN(WARN_UNINITIALIZED))
2477                 report_uninit(sv);
2478             return 0;
2479         }
2480     }
2481
2482     if (!SvIOKp(sv)) {
2483         if (S_sv_2iuv_common(aTHX_ sv))
2484             return 0;
2485     }
2486
2487     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2488                           PTR2UV(sv),SvUVX(sv)));
2489     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2490 }
2491
2492 /*
2493 =for apidoc sv_2nv_flags
2494
2495 Return the num value of an SV, doing any necessary string or integer
2496 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2497 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2498
2499 =cut
2500 */
2501
2502 NV
2503 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2504 {
2505     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2506
2507     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2508          && SvTYPE(sv) != SVt_PVFM);
2509     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2510         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2511            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2512            Regexps have no SvIVX and SvNVX fields.  */
2513         const char *ptr;
2514         if (flags & SV_GMAGIC)
2515             mg_get(sv);
2516         if (SvNOKp(sv))
2517             return SvNVX(sv);
2518         if (SvPOKp(sv) && !SvIOKp(sv)) {
2519             ptr = SvPVX_const(sv);
2520           grokpv:
2521             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2522                 !grok_number(ptr, SvCUR(sv), NULL))
2523                 not_a_number(sv);
2524             return Atof(ptr);
2525         }
2526         if (SvIOKp(sv)) {
2527             if (SvIsUV(sv))
2528                 return (NV)SvUVX(sv);
2529             else
2530                 return (NV)SvIVX(sv);
2531         }
2532         if (SvROK(sv)) {
2533             goto return_rok;
2534         }
2535         if (isREGEXP(sv)) {
2536             ptr = RX_WRAPPED((REGEXP *)sv);
2537             goto grokpv;
2538         }
2539         assert(SvTYPE(sv) >= SVt_PVMG);
2540         /* This falls through to the report_uninit near the end of the
2541            function. */
2542     } else if (SvTHINKFIRST(sv)) {
2543         if (SvROK(sv)) {
2544         return_rok:
2545             if (SvAMAGIC(sv)) {
2546                 SV *tmpstr;
2547                 if (flags & SV_SKIP_OVERLOAD)
2548                     return 0;
2549                 tmpstr = AMG_CALLunary(sv, numer_amg);
2550                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2551                     return SvNV(tmpstr);
2552                 }
2553             }
2554             return PTR2NV(SvRV(sv));
2555         }
2556 #ifdef PERL_OLD_COPY_ON_WRITE
2557         if (SvIsCOW(sv)) {
2558             sv_force_normal_flags(sv, 0);
2559         }
2560 #endif
2561         if (SvREADONLY(sv) && !SvOK(sv)) {
2562             if (ckWARN(WARN_UNINITIALIZED))
2563                 report_uninit(sv);
2564             return 0.0;
2565         }
2566     }
2567     if (SvTYPE(sv) < SVt_NV) {
2568         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2569         sv_upgrade(sv, SVt_NV);
2570         DEBUG_c({
2571             STORE_NUMERIC_LOCAL_SET_STANDARD();
2572             PerlIO_printf(Perl_debug_log,
2573                           "0x%"UVxf" num(%" NVgf ")\n",
2574                           PTR2UV(sv), SvNVX(sv));
2575             RESTORE_NUMERIC_LOCAL();
2576         });
2577     }
2578     else if (SvTYPE(sv) < SVt_PVNV)
2579         sv_upgrade(sv, SVt_PVNV);
2580     if (SvNOKp(sv)) {
2581         return SvNVX(sv);
2582     }
2583     if (SvIOKp(sv)) {
2584         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2585 #ifdef NV_PRESERVES_UV
2586         if (SvIOK(sv))
2587             SvNOK_on(sv);
2588         else
2589             SvNOKp_on(sv);
2590 #else
2591         /* Only set the public NV OK flag if this NV preserves the IV  */
2592         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2593         if (SvIOK(sv) &&
2594             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2595                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2596             SvNOK_on(sv);
2597         else
2598             SvNOKp_on(sv);
2599 #endif
2600     }
2601     else if (SvPOKp(sv)) {
2602         UV value;
2603         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2604         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2605             not_a_number(sv);
2606 #ifdef NV_PRESERVES_UV
2607         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2608             == IS_NUMBER_IN_UV) {
2609             /* It's definitely an integer */
2610             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2611         } else
2612             SvNV_set(sv, Atof(SvPVX_const(sv)));
2613         if (numtype)
2614             SvNOK_on(sv);
2615         else
2616             SvNOKp_on(sv);
2617 #else
2618         SvNV_set(sv, Atof(SvPVX_const(sv)));
2619         /* Only set the public NV OK flag if this NV preserves the value in
2620            the PV at least as well as an IV/UV would.
2621            Not sure how to do this 100% reliably. */
2622         /* if that shift count is out of range then Configure's test is
2623            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2624            UV_BITS */
2625         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2626             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2627             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2628         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2629             /* Can't use strtol etc to convert this string, so don't try.
2630                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2631             SvNOK_on(sv);
2632         } else {
2633             /* value has been set.  It may not be precise.  */
2634             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2635                 /* 2s complement assumption for (UV)IV_MIN  */
2636                 SvNOK_on(sv); /* Integer is too negative.  */
2637             } else {
2638                 SvNOKp_on(sv);
2639                 SvIOKp_on(sv);
2640
2641                 if (numtype & IS_NUMBER_NEG) {
2642                     SvIV_set(sv, -(IV)value);
2643                 } else if (value <= (UV)IV_MAX) {
2644                     SvIV_set(sv, (IV)value);
2645                 } else {
2646                     SvUV_set(sv, value);
2647                     SvIsUV_on(sv);
2648                 }
2649
2650                 if (numtype & IS_NUMBER_NOT_INT) {
2651                     /* I believe that even if the original PV had decimals,
2652                        they are lost beyond the limit of the FP precision.
2653                        However, neither is canonical, so both only get p
2654                        flags.  NWC, 2000/11/25 */
2655                     /* Both already have p flags, so do nothing */
2656                 } else {
2657                     const NV nv = SvNVX(sv);
2658                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2659                         if (SvIVX(sv) == I_V(nv)) {
2660                             SvNOK_on(sv);
2661                         } else {
2662                             /* It had no "." so it must be integer.  */
2663                         }
2664                         SvIOK_on(sv);
2665                     } else {
2666                         /* between IV_MAX and NV(UV_MAX).
2667                            Could be slightly > UV_MAX */
2668
2669                         if (numtype & IS_NUMBER_NOT_INT) {
2670                             /* UV and NV both imprecise.  */
2671                         } else {
2672                             const UV nv_as_uv = U_V(nv);
2673
2674                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2675                                 SvNOK_on(sv);
2676                             }
2677                             SvIOK_on(sv);
2678                         }
2679                     }
2680                 }
2681             }
2682         }
2683         /* It might be more code efficient to go through the entire logic above
2684            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2685            gets complex and potentially buggy, so more programmer efficient
2686            to do it this way, by turning off the public flags:  */
2687         if (!numtype)
2688             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2689 #endif /* NV_PRESERVES_UV */
2690     }
2691     else  {
2692         if (isGV_with_GP(sv)) {
2693             glob_2number(MUTABLE_GV(sv));
2694             return 0.0;
2695         }
2696
2697         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2698             report_uninit(sv);
2699         assert (SvTYPE(sv) >= SVt_NV);
2700         /* Typically the caller expects that sv_any is not NULL now.  */
2701         /* XXX Ilya implies that this is a bug in callers that assume this
2702            and ideally should be fixed.  */
2703         return 0.0;
2704     }
2705     DEBUG_c({
2706         STORE_NUMERIC_LOCAL_SET_STANDARD();
2707         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2708                       PTR2UV(sv), SvNVX(sv));
2709         RESTORE_NUMERIC_LOCAL();
2710     });
2711     return SvNVX(sv);
2712 }
2713
2714 /*
2715 =for apidoc sv_2num
2716
2717 Return an SV with the numeric value of the source SV, doing any necessary
2718 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2719 access this function.
2720
2721 =cut
2722 */
2723
2724 SV *
2725 Perl_sv_2num(pTHX_ SV *const sv)
2726 {
2727     PERL_ARGS_ASSERT_SV_2NUM;
2728
2729     if (!SvROK(sv))
2730         return sv;
2731     if (SvAMAGIC(sv)) {
2732         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2733         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2734         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2735             return sv_2num(tmpsv);
2736     }
2737     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2738 }
2739
2740 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2741  * UV as a string towards the end of buf, and return pointers to start and
2742  * end of it.
2743  *
2744  * We assume that buf is at least TYPE_CHARS(UV) long.
2745  */
2746
2747 static char *
2748 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2749 {
2750     char *ptr = buf + TYPE_CHARS(UV);
2751     char * const ebuf = ptr;
2752     int sign;
2753
2754     PERL_ARGS_ASSERT_UIV_2BUF;
2755
2756     if (is_uv)
2757         sign = 0;
2758     else if (iv >= 0) {
2759         uv = iv;
2760         sign = 0;
2761     } else {
2762         uv = -iv;
2763         sign = 1;
2764     }
2765     do {
2766         *--ptr = '0' + (char)(uv % 10);
2767     } while (uv /= 10);
2768     if (sign)
2769         *--ptr = '-';
2770     *peob = ebuf;
2771     return ptr;
2772 }
2773
2774 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2775  * infinity or a not-a-number, writes the appropriate strings to the
2776  * buffer, including a zero byte.  On success returns the written length,
2777  * excluding the zero byte, on failure (not an infinity, not a nan, or the
2778  * maxlen too small) returns zero. */
2779 STATIC size_t
2780 S_infnan_2pv(NV nv, char* buffer, size_t maxlen) {
2781     if (maxlen < 4) /* "Inf\0", "NaN\0" */
2782         return 0;
2783     else {
2784         char* s = buffer;
2785         if (Perl_isinf(nv)) {
2786             if (nv < 0) {
2787                 if (maxlen < 5) /* "-Inf\0"  */
2788                     return 0;
2789                 *s++ = '-';
2790             }
2791             *s++ = 'I';
2792             *s++ = 'n';
2793             *s++ = 'f';
2794         }
2795         else if (Perl_isnan(nv)) {
2796             *s++ = 'N';
2797             *s++ = 'a';
2798             *s++ = 'N';
2799             /* XXX optionally output the payload mantissa bits as
2800              * "(unsigned)" (to match the nan("...") C99 function,
2801              * or maybe as "(0xhhh...)"  would make more sense...
2802              * provide a format string so that the user can decide?
2803              * NOTE: would affect the maxlen and assert() logic.*/
2804         }
2805         else
2806             return 0;
2807         assert((s == buffer + 3) || (s == buffer + 4));
2808         *s++ = 0;
2809         return s - buffer - 1; /* -1: excluding the zero byte */
2810     }
2811 }
2812
2813 /*
2814 =for apidoc sv_2pv_flags
2815
2816 Returns a pointer to the string value of an SV, and sets *lp to its length.
2817 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2818 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2819 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2820
2821 =cut
2822 */
2823
2824 char *
2825 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2826 {
2827     char *s;
2828
2829     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2830
2831     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2832          && SvTYPE(sv) != SVt_PVFM);
2833     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2834         mg_get(sv);
2835     if (SvROK(sv)) {
2836         if (SvAMAGIC(sv)) {
2837             SV *tmpstr;
2838             if (flags & SV_SKIP_OVERLOAD)
2839                 return NULL;
2840             tmpstr = AMG_CALLunary(sv, string_amg);
2841             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2842             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2843                 /* Unwrap this:  */
2844                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2845                  */
2846
2847                 char *pv;
2848                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2849                     if (flags & SV_CONST_RETURN) {
2850                         pv = (char *) SvPVX_const(tmpstr);
2851                     } else {
2852                         pv = (flags & SV_MUTABLE_RETURN)
2853                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2854                     }
2855                     if (lp)
2856                         *lp = SvCUR(tmpstr);
2857                 } else {
2858                     pv = sv_2pv_flags(tmpstr, lp, flags);
2859                 }
2860                 if (SvUTF8(tmpstr))
2861                     SvUTF8_on(sv);
2862                 else
2863                     SvUTF8_off(sv);
2864                 return pv;
2865             }
2866         }
2867         {
2868             STRLEN len;
2869             char *retval;
2870             char *buffer;
2871             SV *const referent = SvRV(sv);
2872
2873             if (!referent) {
2874                 len = 7;
2875                 retval = buffer = savepvn("NULLREF", len);
2876             } else if (SvTYPE(referent) == SVt_REGEXP &&
2877                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2878                         amagic_is_enabled(string_amg))) {
2879                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2880
2881                 assert(re);
2882                         
2883                 /* If the regex is UTF-8 we want the containing scalar to
2884                    have an UTF-8 flag too */
2885                 if (RX_UTF8(re))
2886                     SvUTF8_on(sv);
2887                 else
2888                     SvUTF8_off(sv);     
2889
2890                 if (lp)
2891                     *lp = RX_WRAPLEN(re);
2892  
2893                 return RX_WRAPPED(re);
2894             } else {
2895                 const char *const typestr = sv_reftype(referent, 0);
2896                 const STRLEN typelen = strlen(typestr);
2897                 UV addr = PTR2UV(referent);
2898                 const char *stashname = NULL;
2899                 STRLEN stashnamelen = 0; /* hush, gcc */
2900                 const char *buffer_end;
2901
2902                 if (SvOBJECT(referent)) {
2903                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2904
2905                     if (name) {
2906                         stashname = HEK_KEY(name);
2907                         stashnamelen = HEK_LEN(name);
2908
2909                         if (HEK_UTF8(name)) {
2910                             SvUTF8_on(sv);
2911                         } else {
2912                             SvUTF8_off(sv);
2913                         }
2914                     } else {
2915                         stashname = "__ANON__";
2916                         stashnamelen = 8;
2917                     }
2918                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2919                         + 2 * sizeof(UV) + 2 /* )\0 */;
2920                 } else {
2921                     len = typelen + 3 /* (0x */
2922                         + 2 * sizeof(UV) + 2 /* )\0 */;
2923                 }
2924
2925                 Newx(buffer, len, char);
2926                 buffer_end = retval = buffer + len;
2927
2928                 /* Working backwards  */
2929                 *--retval = '\0';
2930                 *--retval = ')';
2931                 do {
2932                     *--retval = PL_hexdigit[addr & 15];
2933                 } while (addr >>= 4);
2934                 *--retval = 'x';
2935                 *--retval = '0';
2936                 *--retval = '(';
2937
2938                 retval -= typelen;
2939                 memcpy(retval, typestr, typelen);
2940
2941                 if (stashname) {
2942                     *--retval = '=';
2943                     retval -= stashnamelen;
2944                     memcpy(retval, stashname, stashnamelen);
2945                 }
2946                 /* retval may not necessarily have reached the start of the
2947                    buffer here.  */
2948                 assert (retval >= buffer);
2949
2950                 len = buffer_end - retval - 1; /* -1 for that \0  */
2951             }
2952             if (lp)
2953                 *lp = len;
2954             SAVEFREEPV(buffer);
2955             return retval;
2956         }
2957     }
2958
2959     if (SvPOKp(sv)) {
2960         if (lp)
2961             *lp = SvCUR(sv);
2962         if (flags & SV_MUTABLE_RETURN)
2963             return SvPVX_mutable(sv);
2964         if (flags & SV_CONST_RETURN)
2965             return (char *)SvPVX_const(sv);
2966         return SvPVX(sv);
2967     }
2968
2969     if (SvIOK(sv)) {
2970         /* I'm assuming that if both IV and NV are equally valid then
2971            converting the IV is going to be more efficient */
2972         const U32 isUIOK = SvIsUV(sv);
2973         char buf[TYPE_CHARS(UV)];
2974         char *ebuf, *ptr;
2975         STRLEN len;
2976
2977         if (SvTYPE(sv) < SVt_PVIV)
2978             sv_upgrade(sv, SVt_PVIV);
2979         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2980         len = ebuf - ptr;
2981         /* inlined from sv_setpvn */
2982         s = SvGROW_mutable(sv, len + 1);
2983         Move(ptr, s, len, char);
2984         s += len;
2985         *s = '\0';
2986         SvPOK_on(sv);
2987     }
2988     else if (SvNOK(sv)) {
2989         if (SvTYPE(sv) < SVt_PVNV)
2990             sv_upgrade(sv, SVt_PVNV);
2991         if (SvNVX(sv) == 0.0) {
2992             s = SvGROW_mutable(sv, 2);
2993             *s++ = '0';
2994             *s = '\0';
2995         } else {
2996             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2997             STRLEN size = NV_DIG + 20;
2998             STRLEN len;
2999             s = SvGROW_mutable(sv, size);
3000
3001             len = S_infnan_2pv(SvNVX(sv), s, size);
3002             if (len > 0)
3003                 s += len;
3004             else {
3005                 dSAVE_ERRNO;
3006                 /* some Xenix systems wipe out errno here */
3007
3008 #ifndef USE_LOCALE_NUMERIC
3009                 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3010                 SvPOK_on(sv);
3011 #else
3012                 {
3013                     DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3014                     PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3015
3016                     /* If the radix character is UTF-8, and actually is in the
3017                      * output, turn on the UTF-8 flag for the scalar */
3018                     if (PL_numeric_local
3019                         && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
3020                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3021                         {
3022                             SvUTF8_on(sv);
3023                         }
3024                     RESTORE_LC_NUMERIC();
3025                 }
3026
3027                 /* We don't call SvPOK_on(), because it may come to
3028                  * pass that the locale changes so that the
3029                  * stringification we just did is no longer correct.  We
3030                  * will have to re-stringify every time it is needed */
3031 #endif
3032                 RESTORE_ERRNO;
3033             }
3034             while (*s) s++;
3035         }
3036     }
3037     else if (isGV_with_GP(sv)) {
3038         GV *const gv = MUTABLE_GV(sv);
3039         SV *const buffer = sv_newmortal();
3040
3041         gv_efullname3(buffer, gv, "*");
3042
3043         assert(SvPOK(buffer));
3044         if (SvUTF8(buffer))
3045             SvUTF8_on(sv);
3046         if (lp)
3047             *lp = SvCUR(buffer);
3048         return SvPVX(buffer);
3049     }
3050     else if (isREGEXP(sv)) {
3051         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3052         return RX_WRAPPED((REGEXP *)sv);
3053     }
3054     else {
3055         if (lp)
3056             *lp = 0;
3057         if (flags & SV_UNDEF_RETURNS_NULL)
3058             return NULL;
3059         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3060             report_uninit(sv);
3061         /* Typically the caller expects that sv_any is not NULL now.  */
3062         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3063             sv_upgrade(sv, SVt_PV);
3064         return (char *)"";
3065     }
3066
3067     {
3068         const STRLEN len = s - SvPVX_const(sv);
3069         if (lp) 
3070             *lp = len;
3071         SvCUR_set(sv, len);
3072     }
3073     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3074                           PTR2UV(sv),SvPVX_const(sv)));
3075     if (flags & SV_CONST_RETURN)
3076         return (char *)SvPVX_const(sv);
3077     if (flags & SV_MUTABLE_RETURN)
3078         return SvPVX_mutable(sv);
3079     return SvPVX(sv);
3080 }
3081
3082 /*
3083 =for apidoc sv_copypv
3084
3085 Copies a stringified representation of the source SV into the
3086 destination SV.  Automatically performs any necessary mg_get and
3087 coercion of numeric values into strings.  Guaranteed to preserve
3088 UTF8 flag even from overloaded objects.  Similar in nature to
3089 sv_2pv[_flags] but operates directly on an SV instead of just the
3090 string.  Mostly uses sv_2pv_flags to do its work, except when that
3091 would lose the UTF-8'ness of the PV.
3092
3093 =for apidoc sv_copypv_nomg
3094
3095 Like sv_copypv, but doesn't invoke get magic first.
3096
3097 =for apidoc sv_copypv_flags
3098
3099 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3100 include SV_GMAGIC.
3101
3102 =cut
3103 */
3104
3105 void
3106 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3107 {
3108     PERL_ARGS_ASSERT_SV_COPYPV;
3109
3110     sv_copypv_flags(dsv, ssv, 0);
3111 }
3112
3113 void
3114 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3115 {
3116     STRLEN len;
3117     const char *s;
3118
3119     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3120
3121     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3122         mg_get(ssv);
3123     s = SvPV_nomg_const(ssv,len);
3124     sv_setpvn(dsv,s,len);
3125     if (SvUTF8(ssv))
3126         SvUTF8_on(dsv);
3127     else
3128         SvUTF8_off(dsv);
3129 }
3130
3131 /*
3132 =for apidoc sv_2pvbyte
3133
3134 Return a pointer to the byte-encoded representation of the SV, and set *lp
3135 to its length.  May cause the SV to be downgraded from UTF-8 as a
3136 side-effect.
3137
3138 Usually accessed via the C<SvPVbyte> macro.
3139
3140 =cut
3141 */
3142
3143 char *
3144 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3145 {
3146     PERL_ARGS_ASSERT_SV_2PVBYTE;
3147
3148     SvGETMAGIC(sv);
3149     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3150      || isGV_with_GP(sv) || SvROK(sv)) {
3151         SV *sv2 = sv_newmortal();
3152         sv_copypv_nomg(sv2,sv);
3153         sv = sv2;
3154     }
3155     sv_utf8_downgrade(sv,0);
3156     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3157 }
3158
3159 /*
3160 =for apidoc sv_2pvutf8
3161
3162 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3163 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3164
3165 Usually accessed via the C<SvPVutf8> macro.
3166
3167 =cut
3168 */
3169
3170 char *
3171 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3172 {
3173     PERL_ARGS_ASSERT_SV_2PVUTF8;
3174
3175     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3176      || isGV_with_GP(sv) || SvROK(sv))
3177         sv = sv_mortalcopy(sv);
3178     else
3179         SvGETMAGIC(sv);
3180     sv_utf8_upgrade_nomg(sv);
3181     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3182 }
3183
3184
3185 /*
3186 =for apidoc sv_2bool
3187
3188 This macro is only used by sv_true() or its macro equivalent, and only if
3189 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3190 It calls sv_2bool_flags with the SV_GMAGIC flag.
3191
3192 =for apidoc sv_2bool_flags
3193
3194 This function is only used by sv_true() and friends,  and only if
3195 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3196 contain SV_GMAGIC, then it does an mg_get() first.
3197
3198
3199 =cut
3200 */
3201
3202 bool
3203 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3204 {
3205     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3206
3207     restart:
3208     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3209
3210     if (!SvOK(sv))
3211         return 0;
3212     if (SvROK(sv)) {
3213         if (SvAMAGIC(sv)) {
3214             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3215             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3216                 bool svb;
3217                 sv = tmpsv;
3218                 if(SvGMAGICAL(sv)) {
3219                     flags = SV_GMAGIC;
3220                     goto restart; /* call sv_2bool */
3221                 }
3222                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3223                 else if(!SvOK(sv)) {
3224                     svb = 0;
3225                 }
3226                 else if(SvPOK(sv)) {
3227                     svb = SvPVXtrue(sv);
3228                 }
3229                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3230                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3231                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3232                 }
3233                 else {
3234                     flags = 0;
3235                     goto restart; /* call sv_2bool_nomg */
3236                 }
3237                 return cBOOL(svb);
3238             }
3239         }
3240         return SvRV(sv) != 0;
3241     }
3242     if (isREGEXP(sv))
3243         return
3244           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3245     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3246 }
3247
3248 /*
3249 =for apidoc sv_utf8_upgrade
3250
3251 Converts the PV of an SV to its UTF-8-encoded form.
3252 Forces the SV to string form if it is not already.
3253 Will C<mg_get> on C<sv> if appropriate.
3254 Always sets the SvUTF8 flag to avoid future validity checks even
3255 if the whole string is the same in UTF-8 as not.
3256 Returns the number of bytes in the converted string
3257
3258 This is not a general purpose byte encoding to Unicode interface:
3259 use the Encode extension for that.
3260
3261 =for apidoc sv_utf8_upgrade_nomg
3262
3263 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3264
3265 =for apidoc sv_utf8_upgrade_flags
3266
3267 Converts the PV of an SV to its UTF-8-encoded form.
3268 Forces the SV to string form if it is not already.
3269 Always sets the SvUTF8 flag to avoid future validity checks even
3270 if all the bytes are invariant in UTF-8.
3271 If C<flags> has C<SV_GMAGIC> bit set,
3272 will C<mg_get> on C<sv> if appropriate, else not.
3273
3274 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3275 will expand when converted to UTF-8, and skips the extra work of checking for
3276 that.  Typically this flag is used by a routine that has already parsed the
3277 string and found such characters, and passes this information on so that the
3278 work doesn't have to be repeated.
3279
3280 Returns the number of bytes in the converted string.
3281
3282 This is not a general purpose byte encoding to Unicode interface:
3283 use the Encode extension for that.
3284
3285 =for apidoc sv_utf8_upgrade_flags_grow
3286
3287 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3288 the number of unused bytes the string of 'sv' is guaranteed to have free after
3289 it upon return.  This allows the caller to reserve extra space that it intends
3290 to fill, to avoid extra grows.
3291
3292 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3293 are implemented in terms of this function.
3294
3295 Returns the number of bytes in the converted string (not including the spares).
3296
3297 =cut
3298
3299 (One might think that the calling routine could pass in the position of the
3300 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3301 have to be found again.  But that is not the case, because typically when the
3302 caller is likely to use this flag, it won't be calling this routine unless it
3303 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3304 and just use bytes.  But some things that do fit into a byte are variants in
3305 utf8, and the caller may not have been keeping track of these.)
3306
3307 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3308 C<NUL> isn't guaranteed due to having other routines do the work in some input
3309 cases, or if the input is already flagged as being in utf8.
3310
3311 The speed of this could perhaps be improved for many cases if someone wanted to
3312 write a fast function that counts the number of variant characters in a string,
3313 especially if it could return the position of the first one.
3314
3315 */
3316
3317 STRLEN
3318 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3319 {
3320     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3321
3322     if (sv == &PL_sv_undef)
3323         return 0;
3324     if (!SvPOK_nog(sv)) {
3325         STRLEN len = 0;
3326         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3327             (void) sv_2pv_flags(sv,&len, flags);
3328             if (SvUTF8(sv)) {
3329                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3330                 return len;
3331             }
3332         } else {
3333             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3334         }
3335     }
3336
3337     if (SvUTF8(sv)) {
3338         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3339         return SvCUR(sv);
3340     }
3341
3342     if (SvIsCOW(sv)) {
3343         S_sv_uncow(aTHX_ sv, 0);
3344     }
3345
3346     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3347         sv_recode_to_utf8(sv, PL_encoding);
3348         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3349         return SvCUR(sv);
3350     }
3351
3352     if (SvCUR(sv) == 0) {
3353         if (extra) SvGROW(sv, extra);
3354     } else { /* Assume Latin-1/EBCDIC */
3355         /* This function could be much more efficient if we
3356          * had a FLAG in SVs to signal if there are any variant
3357          * chars in the PV.  Given that there isn't such a flag
3358          * make the loop as fast as possible (although there are certainly ways
3359          * to speed this up, eg. through vectorization) */
3360         U8 * s = (U8 *) SvPVX_const(sv);
3361         U8 * e = (U8 *) SvEND(sv);
3362         U8 *t = s;
3363         STRLEN two_byte_count = 0;
3364         
3365         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3366
3367         /* See if really will need to convert to utf8.  We mustn't rely on our
3368          * incoming SV being well formed and having a trailing '\0', as certain
3369          * code in pp_formline can send us partially built SVs. */
3370
3371         while (t < e) {
3372             const U8 ch = *t++;
3373             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3374
3375             t--;    /* t already incremented; re-point to first variant */
3376             two_byte_count = 1;
3377             goto must_be_utf8;
3378         }
3379
3380         /* utf8 conversion not needed because all are invariants.  Mark as
3381          * UTF-8 even if no variant - saves scanning loop */
3382         SvUTF8_on(sv);
3383         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3384         return SvCUR(sv);
3385
3386 must_be_utf8:
3387
3388         /* Here, the string should be converted to utf8, either because of an
3389          * input flag (two_byte_count = 0), or because a character that
3390          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3391          * the beginning of the string (if we didn't examine anything), or to
3392          * the first variant.  In either case, everything from s to t - 1 will
3393          * occupy only 1 byte each on output.
3394          *
3395          * There are two main ways to convert.  One is to create a new string
3396          * and go through the input starting from the beginning, appending each
3397          * converted value onto the new string as we go along.  It's probably
3398          * best to allocate enough space in the string for the worst possible
3399          * case rather than possibly running out of space and having to
3400          * reallocate and then copy what we've done so far.  Since everything
3401          * from s to t - 1 is invariant, the destination can be initialized
3402          * with these using a fast memory copy
3403          *
3404          * The other way is to figure out exactly how big the string should be
3405          * by parsing the entire input.  Then you don't have to make it big
3406          * enough to handle the worst possible case, and more importantly, if
3407          * the string you already have is large enough, you don't have to
3408          * allocate a new string, you can copy the last character in the input
3409          * string to the final position(s) that will be occupied by the
3410          * converted string and go backwards, stopping at t, since everything
3411          * before that is invariant.
3412          *
3413          * There are advantages and disadvantages to each method.
3414          *
3415          * In the first method, we can allocate a new string, do the memory
3416          * copy from the s to t - 1, and then proceed through the rest of the
3417          * string byte-by-byte.
3418          *
3419          * In the second method, we proceed through the rest of the input
3420          * string just calculating how big the converted string will be.  Then
3421          * there are two cases:
3422          *  1)  if the string has enough extra space to handle the converted
3423          *      value.  We go backwards through the string, converting until we
3424          *      get to the position we are at now, and then stop.  If this
3425          *      position is far enough along in the string, this method is
3426          *      faster than the other method.  If the memory copy were the same
3427          *      speed as the byte-by-byte loop, that position would be about
3428          *      half-way, as at the half-way mark, parsing to the end and back
3429          *      is one complete string's parse, the same amount as starting
3430          *      over and going all the way through.  Actually, it would be
3431          *      somewhat less than half-way, as it's faster to just count bytes
3432          *      than to also copy, and we don't have the overhead of allocating
3433          *      a new string, changing the scalar to use it, and freeing the
3434          *      existing one.  But if the memory copy is fast, the break-even
3435          *      point is somewhere after half way.  The counting loop could be
3436          *      sped up by vectorization, etc, to move the break-even point
3437          *      further towards the beginning.
3438          *  2)  if the string doesn't have enough space to handle the converted
3439          *      value.  A new string will have to be allocated, and one might
3440          *      as well, given that, start from the beginning doing the first
3441          *      method.  We've spent extra time parsing the string and in
3442          *      exchange all we've gotten is that we know precisely how big to
3443          *      make the new one.  Perl is more optimized for time than space,
3444          *      so this case is a loser.
3445          * So what I've decided to do is not use the 2nd method unless it is
3446          * guaranteed that a new string won't have to be allocated, assuming
3447          * the worst case.  I also decided not to put any more conditions on it
3448          * than this, for now.  It seems likely that, since the worst case is
3449          * twice as big as the unknown portion of the string (plus 1), we won't
3450          * be guaranteed enough space, causing us to go to the first method,
3451          * unless the string is short, or the first variant character is near
3452          * the end of it.  In either of these cases, it seems best to use the
3453          * 2nd method.  The only circumstance I can think of where this would
3454          * be really slower is if the string had once had much more data in it
3455          * than it does now, but there is still a substantial amount in it  */
3456
3457         {
3458             STRLEN invariant_head = t - s;
3459             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3460             if (SvLEN(sv) < size) {
3461
3462                 /* Here, have decided to allocate a new string */
3463
3464                 U8 *dst;
3465                 U8 *d;
3466
3467                 Newx(dst, size, U8);
3468
3469                 /* If no known invariants at the beginning of the input string,
3470                  * set so starts from there.  Otherwise, can use memory copy to
3471                  * get up to where we are now, and then start from here */
3472
3473                 if (invariant_head == 0) {
3474                     d = dst;
3475                 } else {
3476                     Copy(s, dst, invariant_head, char);
3477                     d = dst + invariant_head;
3478                 }
3479
3480                 while (t < e) {
3481                     append_utf8_from_native_byte(*t, &d);
3482                     t++;
3483                 }
3484                 *d = '\0';
3485                 SvPV_free(sv); /* No longer using pre-existing string */
3486                 SvPV_set(sv, (char*)dst);
3487                 SvCUR_set(sv, d - dst);
3488                 SvLEN_set(sv, size);
3489             } else {
3490
3491                 /* Here, have decided to get the exact size of the string.
3492                  * Currently this happens only when we know that there is
3493                  * guaranteed enough space to fit the converted string, so
3494                  * don't have to worry about growing.  If two_byte_count is 0,
3495                  * then t points to the first byte of the string which hasn't
3496                  * been examined yet.  Otherwise two_byte_count is 1, and t
3497                  * points to the first byte in the string that will expand to
3498                  * two.  Depending on this, start examining at t or 1 after t.
3499                  * */
3500
3501                 U8 *d = t + two_byte_count;
3502
3503
3504                 /* Count up the remaining bytes that expand to two */
3505
3506                 while (d < e) {
3507                     const U8 chr = *d++;
3508                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3509                 }
3510
3511                 /* The string will expand by just the number of bytes that
3512                  * occupy two positions.  But we are one afterwards because of
3513                  * the increment just above.  This is the place to put the
3514                  * trailing NUL, and to set the length before we decrement */
3515
3516                 d += two_byte_count;
3517                 SvCUR_set(sv, d - s);
3518                 *d-- = '\0';
3519
3520
3521                 /* Having decremented d, it points to the position to put the
3522                  * very last byte of the expanded string.  Go backwards through
3523                  * the string, copying and expanding as we go, stopping when we
3524                  * get to the part that is invariant the rest of the way down */
3525
3526                 e--;
3527                 while (e >= t) {
3528                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3529                         *d-- = *e;
3530                     } else {
3531                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3532                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3533                     }
3534                     e--;
3535                 }
3536             }
3537
3538             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3539                 /* Update pos. We do it at the end rather than during
3540                  * the upgrade, to avoid slowing down the common case
3541                  * (upgrade without pos).
3542                  * pos can be stored as either bytes or characters.  Since
3543                  * this was previously a byte string we can just turn off
3544                  * the bytes flag. */
3545                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3546                 if (mg) {
3547                     mg->mg_flags &= ~MGf_BYTES;
3548                 }
3549                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3550                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3551             }
3552         }
3553     }
3554
3555     /* Mark as UTF-8 even if no variant - saves scanning loop */
3556     SvUTF8_on(sv);
3557     return SvCUR(sv);
3558 }
3559
3560 /*
3561 =for apidoc sv_utf8_downgrade
3562
3563 Attempts to convert the PV of an SV from characters to bytes.
3564 If the PV contains a character that cannot fit
3565 in a byte, this conversion will fail;
3566 in this case, either returns false or, if C<fail_ok> is not
3567 true, croaks.
3568
3569 This is not a general purpose Unicode to byte encoding interface:
3570 use the Encode extension for that.
3571
3572 =cut
3573 */
3574
3575 bool
3576 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3577 {
3578     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3579
3580     if (SvPOKp(sv) && SvUTF8(sv)) {
3581         if (SvCUR(sv)) {
3582             U8 *s;
3583             STRLEN len;
3584             int mg_flags = SV_GMAGIC;
3585
3586             if (SvIsCOW(sv)) {
3587                 S_sv_uncow(aTHX_ sv, 0);
3588             }
3589             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3590                 /* update pos */
3591                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3592                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3593                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3594                                                 SV_GMAGIC|SV_CONST_RETURN);
3595                         mg_flags = 0; /* sv_pos_b2u does get magic */
3596                 }
3597                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3598                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3599
3600             }
3601             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3602
3603             if (!utf8_to_bytes(s, &len)) {
3604                 if (fail_ok)
3605                     return FALSE;
3606                 else {
3607                     if (PL_op)
3608                         Perl_croak(aTHX_ "Wide character in %s",
3609                                    OP_DESC(PL_op));
3610                     else
3611                         Perl_croak(aTHX_ "Wide character");
3612                 }
3613             }
3614             SvCUR_set(sv, len);
3615         }
3616     }
3617     SvUTF8_off(sv);
3618     return TRUE;
3619 }
3620
3621 /*
3622 =for apidoc sv_utf8_encode
3623
3624 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3625 flag off so that it looks like octets again.
3626
3627 =cut
3628 */
3629
3630 void
3631 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3632 {
3633     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3634
3635     if (SvREADONLY(sv)) {
3636         sv_force_normal_flags(sv, 0);
3637     }
3638     (void) sv_utf8_upgrade(sv);
3639     SvUTF8_off(sv);
3640 }
3641
3642 /*
3643 =for apidoc sv_utf8_decode
3644
3645 If the PV of the SV is an octet sequence in UTF-8
3646 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3647 so that it looks like a character.  If the PV contains only single-byte
3648 characters, the C<SvUTF8> flag stays off.
3649 Scans PV for validity and returns false if the PV is invalid UTF-8.
3650
3651 =cut
3652 */
3653
3654 bool
3655 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3656 {
3657     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3658
3659     if (SvPOKp(sv)) {
3660         const U8 *start, *c;
3661         const U8 *e;
3662
3663         /* The octets may have got themselves encoded - get them back as
3664          * bytes
3665          */
3666         if (!sv_utf8_downgrade(sv, TRUE))
3667             return FALSE;
3668
3669         /* it is actually just a matter of turning the utf8 flag on, but
3670          * we want to make sure everything inside is valid utf8 first.
3671          */
3672         c = start = (const U8 *) SvPVX_const(sv);
3673         if (!is_utf8_string(c, SvCUR(sv)))
3674             return FALSE;
3675         e = (const U8 *) SvEND(sv);
3676         while (c < e) {
3677             const U8 ch = *c++;
3678             if (!UTF8_IS_INVARIANT(ch)) {
3679                 SvUTF8_on(sv);
3680                 break;
3681             }
3682         }
3683         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3684             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3685                    after this, clearing pos.  Does anything on CPAN
3686                    need this? */
3687             /* adjust pos to the start of a UTF8 char sequence */
3688             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3689             if (mg) {
3690                 I32 pos = mg->mg_len;
3691                 if (pos > 0) {
3692                     for (c = start + pos; c > start; c--) {
3693                         if (UTF8_IS_START(*c))
3694                             break;
3695                     }
3696                     mg->mg_len  = c - start;
3697                 }
3698             }
3699             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3700                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3701         }
3702     }
3703     return TRUE;
3704 }
3705
3706 /*
3707 =for apidoc sv_setsv
3708
3709 Copies the contents of the source SV C<ssv> into the destination SV
3710 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3711 function if the source SV needs to be reused.  Does not handle 'set' magic on
3712 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3713 performs a copy-by-value, obliterating any previous content of the
3714 destination.
3715
3716 You probably want to use one of the assortment of wrappers, such as
3717 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3718 C<SvSetMagicSV_nosteal>.
3719
3720 =for apidoc sv_setsv_flags
3721
3722 Copies the contents of the source SV C<ssv> into the destination SV
3723 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3724 function if the source SV needs to be reused.  Does not handle 'set' magic.
3725 Loosely speaking, it performs a copy-by-value, obliterating any previous
3726 content of the destination.
3727 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3728 C<ssv> if appropriate, else not.  If the C<flags>
3729 parameter has the C<SV_NOSTEAL> bit set then the
3730 buffers of temps will not be stolen.  <sv_setsv>
3731 and C<sv_setsv_nomg> are implemented in terms of this function.
3732
3733 You probably want to use one of the assortment of wrappers, such as
3734 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3735 C<SvSetMagicSV_nosteal>.
3736
3737 This is the primary function for copying scalars, and most other
3738 copy-ish functions and macros use this underneath.
3739
3740 =cut
3741 */
3742
3743 static void
3744 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3745 {
3746     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3747     HV *old_stash = NULL;
3748
3749     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3750
3751     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3752         const char * const name = GvNAME(sstr);
3753         const STRLEN len = GvNAMELEN(sstr);
3754         {
3755             if (dtype >= SVt_PV) {
3756                 SvPV_free(dstr);
3757                 SvPV_set(dstr, 0);
3758                 SvLEN_set(dstr, 0);
3759                 SvCUR_set(dstr, 0);
3760             }
3761             SvUPGRADE(dstr, SVt_PVGV);
3762             (void)SvOK_off(dstr);
3763             isGV_with_GP_on(dstr);
3764         }
3765         GvSTASH(dstr) = GvSTASH(sstr);
3766         if (GvSTASH(dstr))
3767             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3768         gv_name_set(MUTABLE_GV(dstr), name, len,
3769                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3770         SvFAKE_on(dstr);        /* can coerce to non-glob */
3771     }
3772
3773     if(GvGP(MUTABLE_GV(sstr))) {
3774         /* If source has method cache entry, clear it */
3775         if(GvCVGEN(sstr)) {
3776             SvREFCNT_dec(GvCV(sstr));
3777             GvCV_set(sstr, NULL);
3778             GvCVGEN(sstr) = 0;
3779         }
3780         /* If source has a real method, then a method is
3781            going to change */
3782         else if(
3783          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3784         ) {
3785             mro_changes = 1;
3786         }
3787     }
3788
3789     /* If dest already had a real method, that's a change as well */
3790     if(
3791         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3792      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3793     ) {
3794         mro_changes = 1;
3795     }
3796
3797     /* We don't need to check the name of the destination if it was not a
3798        glob to begin with. */
3799     if(dtype == SVt_PVGV) {
3800         const char * const name = GvNAME((const GV *)dstr);
3801         if(
3802             strEQ(name,"ISA")
3803          /* The stash may have been detached from the symbol table, so
3804             check its name. */
3805          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3806         )
3807             mro_changes = 2;
3808         else {
3809             const STRLEN len = GvNAMELEN(dstr);
3810             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3811              || (len == 1 && name[0] == ':')) {
3812                 mro_changes = 3;
3813
3814                 /* Set aside the old stash, so we can reset isa caches on
3815                    its subclasses. */
3816                 if((old_stash = GvHV(dstr)))
3817                     /* Make sure we do not lose it early. */
3818                     SvREFCNT_inc_simple_void_NN(
3819                      sv_2mortal((SV *)old_stash)
3820                     );
3821             }
3822         }
3823
3824         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3825     }
3826
3827     gp_free(MUTABLE_GV(dstr));
3828     GvINTRO_off(dstr);          /* one-shot flag */
3829     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3830     if (SvTAINTED(sstr))
3831         SvTAINT(dstr);
3832     if (GvIMPORTED(dstr) != GVf_IMPORTED
3833         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3834         {
3835             GvIMPORTED_on(dstr);
3836         }
3837     GvMULTI_on(dstr);
3838     if(mro_changes == 2) {
3839       if (GvAV((const GV *)sstr)) {
3840         MAGIC *mg;
3841         SV * const sref = (SV *)GvAV((const GV *)dstr);
3842         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3843             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3844                 AV * const ary = newAV();
3845                 av_push(ary, mg->mg_obj); /* takes the refcount */
3846                 mg->mg_obj = (SV *)ary;
3847             }
3848             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3849         }
3850         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3851       }
3852       mro_isa_changed_in(GvSTASH(dstr));
3853     }
3854     else if(mro_changes == 3) {
3855         HV * const stash = GvHV(dstr);
3856         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3857             mro_package_moved(
3858                 stash, old_stash,
3859                 (GV *)dstr, 0
3860             );
3861     }
3862     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3863     if (GvIO(dstr) && dtype == SVt_PVGV) {
3864         DEBUG_o(Perl_deb(aTHX_
3865                         "glob_assign_glob clearing PL_stashcache\n"));
3866         /* It's a cache. It will rebuild itself quite happily.
3867            It's a lot of effort to work out exactly which key (or keys)
3868            might be invalidated by the creation of the this file handle.
3869          */
3870         hv_clear(PL_stashcache);
3871     }
3872     return;
3873 }
3874
3875 static void
3876 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3877 {
3878     SV * const sref = SvRV(sstr);
3879     SV *dref;
3880     const int intro = GvINTRO(dstr);
3881     SV **location;
3882     U8 import_flag = 0;
3883     const U32 stype = SvTYPE(sref);
3884
3885     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3886
3887     if (intro) {
3888         GvINTRO_off(dstr);      /* one-shot flag */
3889         GvLINE(dstr) = CopLINE(PL_curcop);
3890         GvEGV(dstr) = MUTABLE_GV(dstr);
3891     }
3892     GvMULTI_on(dstr);
3893     switch (stype) {
3894     case SVt_PVCV:
3895         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3896         import_flag = GVf_IMPORTED_CV;
3897         goto common;
3898     case SVt_PVHV:
3899         location = (SV **) &GvHV(dstr);
3900         import_flag = GVf_IMPORTED_HV;
3901         goto common;
3902     case SVt_PVAV:
3903         location = (SV **) &GvAV(dstr);
3904         import_flag = GVf_IMPORTED_AV;
3905         goto common;
3906     case SVt_PVIO:
3907         location = (SV **) &GvIOp(dstr);
3908         goto common;
3909     case SVt_PVFM:
3910         location = (SV **) &GvFORM(dstr);
3911         goto common;
3912     default:
3913         location = &GvSV(dstr);
3914         import_flag = GVf_IMPORTED_SV;
3915     common:
3916         if (intro) {
3917             if (stype == SVt_PVCV) {
3918                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3919                 if (GvCVGEN(dstr)) {
3920                     SvREFCNT_dec(GvCV(dstr));
3921                     GvCV_set(dstr, NULL);
3922                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3923                 }
3924             }
3925             /* SAVEt_GVSLOT takes more room on the savestack and has more
3926                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3927                leave_scope needs access to the GV so it can reset method
3928                caches.  We must use SAVEt_GVSLOT whenever the type is
3929                SVt_PVCV, even if the stash is anonymous, as the stash may
3930                gain a name somehow before leave_scope. */
3931             if (stype == SVt_PVCV) {
3932                 /* There is no save_pushptrptrptr.  Creating it for this
3933                    one call site would be overkill.  So inline the ss add
3934                    routines here. */
3935                 dSS_ADD;
3936                 SS_ADD_PTR(dstr);
3937                 SS_ADD_PTR(location);
3938                 SS_ADD_PTR(SvREFCNT_inc(*location));
3939                 SS_ADD_UV(SAVEt_GVSLOT);
3940                 SS_ADD_END(4);
3941             }
3942             else SAVEGENERICSV(*location);
3943         }
3944         dref = *location;
3945         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3946             CV* const cv = MUTABLE_CV(*location);
3947             if (cv) {
3948                 if (!GvCVGEN((const GV *)dstr) &&
3949                     (CvROOT(cv) || CvXSUB(cv)) &&
3950                     /* redundant check that avoids creating the extra SV
3951                        most of the time: */
3952                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3953                     {
3954                         SV * const new_const_sv =
3955                             CvCONST((const CV *)sref)
3956                                  ? cv_const_sv((const CV *)sref)
3957                                  : NULL;
3958                         report_redefined_cv(
3959                            sv_2mortal(Perl_newSVpvf(aTHX_
3960                                 "%"HEKf"::%"HEKf,
3961                                 HEKfARG(
3962                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3963                                 ),
3964                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3965                            )),
3966                            cv,
3967                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3968                         );
3969                     }
3970                 if (!intro)
3971                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3972                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3973                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3974                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3975             }
3976             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3977             GvASSUMECV_on(dstr);
3978             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3979                 if (intro && GvREFCNT(dstr) > 1) {
3980                     /* temporary remove extra savestack's ref */
3981                     --GvREFCNT(dstr);
3982                     gv_method_changed(dstr);
3983                     ++GvREFCNT(dstr);
3984                 }
3985                 else gv_method_changed(dstr);
3986             }
3987         }
3988         *location = SvREFCNT_inc_simple_NN(sref);
3989         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3990             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3991             GvFLAGS(dstr) |= import_flag;
3992         }
3993         if (stype == SVt_PVHV) {
3994             const char * const name = GvNAME((GV*)dstr);
3995             const STRLEN len = GvNAMELEN(dstr);
3996             if (
3997                 (
3998                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3999                 || (len == 1 && name[0] == ':')
4000                 )
4001              && (!dref || HvENAME_get(dref))
4002             ) {
4003                 mro_package_moved(
4004                     (HV *)sref, (HV *)dref,
4005                     (GV *)dstr, 0
4006                 );
4007             }
4008         }
4009         else if (
4010             stype == SVt_PVAV && sref != dref
4011          && strEQ(GvNAME((GV*)dstr), "ISA")
4012          /* The stash may have been detached from the symbol table, so
4013             check its name before doing anything. */
4014          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4015         ) {
4016             MAGIC *mg;
4017             MAGIC * const omg = dref && SvSMAGICAL(dref)
4018                                  ? mg_find(dref, PERL_MAGIC_isa)
4019                                  : NULL;
4020             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4021                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4022                     AV * const ary = newAV();
4023                     av_push(ary, mg->mg_obj); /* takes the refcount */
4024                     mg->mg_obj = (SV *)ary;
4025                 }
4026                 if (omg) {
4027                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4028                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4029                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4030                         while (items--)
4031                             av_push(
4032                              (AV *)mg->mg_obj,
4033                              SvREFCNT_inc_simple_NN(*svp++)
4034                             );
4035                     }
4036                     else
4037                         av_push(
4038                          (AV *)mg->mg_obj,
4039                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4040                         );
4041                 }
4042                 else
4043                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4044             }
4045             else
4046             {
4047                 sv_magic(
4048                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4049                 );
4050                 mg = mg_find(sref, PERL_MAGIC_isa);
4051             }
4052             /* Since the *ISA assignment could have affected more than
4053                one stash, don't call mro_isa_changed_in directly, but let
4054                magic_clearisa do it for us, as it already has the logic for
4055                dealing with globs vs arrays of globs. */
4056             assert(mg);
4057             Perl_magic_clearisa(aTHX_ NULL, mg);
4058         }
4059         else if (stype == SVt_PVIO) {
4060             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4061             /* It's a cache. It will rebuild itself quite happily.
4062                It's a lot of effort to work out exactly which key (or keys)
4063                might be invalidated by the creation of the this file handle.
4064             */
4065             hv_clear(PL_stashcache);
4066         }
4067         break;
4068     }
4069     if (!intro) SvREFCNT_dec(dref);
4070     if (SvTAINTED(sstr))
4071         SvTAINT(dstr);
4072     return;
4073 }
4074
4075
4076
4077
4078 #ifdef PERL_DEBUG_READONLY_COW
4079 # include <sys/mman.h>
4080
4081 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4082 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4083 # endif
4084
4085 void
4086 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4087 {
4088     struct perl_memory_debug_header * const header =
4089         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4090     const MEM_SIZE len = header->size;
4091     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4092 # ifdef PERL_TRACK_MEMPOOL
4093     if (!header->readonly) header->readonly = 1;
4094 # endif
4095     if (mprotect(header, len, PROT_READ))
4096         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4097                          header, len, errno);
4098 }
4099
4100 static void
4101 S_sv_buf_to_rw(pTHX_ SV *sv)
4102 {
4103     struct perl_memory_debug_header * const header =
4104         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4105     const MEM_SIZE len = header->size;
4106     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4107     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4108         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4109                          header, len, errno);
4110 # ifdef PERL_TRACK_MEMPOOL
4111     header->readonly = 0;
4112 # endif
4113 }
4114
4115 #else
4116 # define sv_buf_to_ro(sv)       NOOP
4117 # define sv_buf_to_rw(sv)       NOOP
4118 #endif
4119
4120 void
4121 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4122 {
4123     U32 sflags;
4124     int dtype;
4125     svtype stype;
4126
4127     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4128
4129     if (sstr == dstr)
4130         return;
4131
4132     if (SvIS_FREED(dstr)) {
4133         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4134                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4135     }
4136     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4137     if (!sstr)
4138         sstr = &PL_sv_undef;
4139     if (SvIS_FREED(sstr)) {
4140         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4141                    (void*)sstr, (void*)dstr);
4142     }
4143     stype = SvTYPE(sstr);
4144     dtype = SvTYPE(dstr);
4145
4146     /* There's a lot of redundancy below but we're going for speed here */
4147
4148     switch (stype) {
4149     case SVt_NULL:
4150       undef_sstr:
4151         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4152             (void)SvOK_off(dstr);
4153             return;
4154         }
4155         break;
4156     case SVt_IV:
4157         if (SvIOK(sstr)) {
4158             switch (dtype) {
4159             case SVt_NULL:
4160                 sv_upgrade(dstr, SVt_IV);
4161                 break;
4162             case SVt_NV:
4163             case SVt_PV:
4164                 sv_upgrade(dstr, SVt_PVIV);
4165                 break;
4166             case SVt_PVGV:
4167             case SVt_PVLV:
4168                 goto end_of_first_switch;
4169             }
4170             (void)SvIOK_only(dstr);
4171             SvIV_set(dstr,  SvIVX(sstr));
4172             if (SvIsUV(sstr))
4173                 SvIsUV_on(dstr);
4174             /* SvTAINTED can only be true if the SV has taint magic, which in
4175                turn means that the SV type is PVMG (or greater). This is the
4176                case statement for SVt_IV, so this cannot be true (whatever gcov
4177                may say).  */
4178             assert(!SvTAINTED(sstr));
4179             return;
4180         }
4181         if (!SvROK(sstr))
4182             goto undef_sstr;
4183         if (dtype < SVt_PV && dtype != SVt_IV)
4184             sv_upgrade(dstr, SVt_IV);
4185         break;
4186
4187     case SVt_NV:
4188         if (SvNOK(sstr)) {
4189             switch (dtype) {
4190             case SVt_NULL:
4191             case SVt_IV:
4192                 sv_upgrade(dstr, SVt_NV);
4193                 break;
4194             case SVt_PV:
4195             case SVt_PVIV:
4196                 sv_upgrade(dstr, SVt_PVNV);
4197                 break;
4198             case SVt_PVGV:
4199             case SVt_PVLV:
4200                 goto end_of_first_switch;
4201             }
4202             SvNV_set(dstr, SvNVX(sstr));
4203             (void)SvNOK_only(dstr);
4204             /* SvTAINTED can only be true if the SV has taint magic, which in
4205                turn means that the SV type is PVMG (or greater). This is the
4206                case statement for SVt_NV, so this cannot be true (whatever gcov
4207                may say).  */
4208             assert(!SvTAINTED(sstr));
4209             return;
4210         }
4211         goto undef_sstr;
4212
4213     case SVt_PV:
4214         if (dtype < SVt_PV)
4215             sv_upgrade(dstr, SVt_PV);
4216         break;
4217     case SVt_PVIV:
4218         if (dtype < SVt_PVIV)
4219             sv_upgrade(dstr, SVt_PVIV);
4220         break;
4221     case SVt_PVNV:
4222         if (dtype < SVt_PVNV)
4223             sv_upgrade(dstr, SVt_PVNV);
4224         break;
4225     default:
4226         {
4227         const char * const type = sv_reftype(sstr,0);
4228         if (PL_op)
4229             /* diag_listed_as: Bizarre copy of %s */
4230             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4231         else
4232             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4233         }
4234         NOT_REACHED; /* NOTREACHED */
4235
4236     case SVt_REGEXP:
4237       upgregexp:
4238         if (dtype < SVt_REGEXP)
4239         {
4240             if (dtype >= SVt_PV) {
4241                 SvPV_free(dstr);
4242                 SvPV_set(dstr, 0);
4243                 SvLEN_set(dstr, 0);
4244                 SvCUR_set(dstr, 0);
4245             }
4246             sv_upgrade(dstr, SVt_REGEXP);
4247         }
4248         break;
4249
4250         case SVt_INVLIST:
4251     case SVt_PVLV:
4252     case SVt_PVGV:
4253     case SVt_PVMG:
4254         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4255             mg_get(sstr);
4256             if (SvTYPE(sstr) != stype)
4257                 stype = SvTYPE(sstr);
4258         }
4259         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4260                     glob_assign_glob(dstr, sstr, dtype);
4261                     return;
4262         }
4263         if (stype == SVt_PVLV)
4264         {
4265             if (isREGEXP(sstr)) goto upgregexp;
4266             SvUPGRADE(dstr, SVt_PVNV);
4267         }
4268         else
4269             SvUPGRADE(dstr, (svtype)stype);
4270     }
4271  end_of_first_switch:
4272
4273     /* dstr may have been upgraded.  */
4274     dtype = SvTYPE(dstr);
4275     sflags = SvFLAGS(sstr);
4276
4277     if (dtype == SVt_PVCV) {
4278         /* Assigning to a subroutine sets the prototype.  */
4279         if (SvOK(sstr)) {
4280             STRLEN len;
4281             const char *const ptr = SvPV_const(sstr, len);
4282
4283             SvGROW(dstr, len + 1);
4284             Copy(ptr, SvPVX(dstr), len + 1, char);
4285             SvCUR_set(dstr, len);
4286             SvPOK_only(dstr);
4287             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4288             CvAUTOLOAD_off(dstr);
4289         } else {
4290             SvOK_off(dstr);
4291         }
4292     }
4293     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4294         const char * const type = sv_reftype(dstr,0);
4295         if (PL_op)
4296             /* diag_listed_as: Cannot copy to %s */
4297             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4298         else
4299             Perl_croak(aTHX_ "Cannot copy to %s", type);
4300     } else if (sflags & SVf_ROK) {
4301         if (isGV_with_GP(dstr)
4302             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4303             sstr = SvRV(sstr);
4304             if (sstr == dstr) {
4305                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4306                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4307                 {
4308                     GvIMPORTED_on(dstr);
4309                 }
4310                 GvMULTI_on(dstr);
4311                 return;
4312             }
4313             glob_assign_glob(dstr, sstr, dtype);
4314             return;
4315         }
4316
4317         if (dtype >= SVt_PV) {
4318             if (isGV_with_GP(dstr)) {
4319                 glob_assign_ref(dstr, sstr);
4320                 return;
4321             }
4322             if (SvPVX_const(dstr)) {
4323                 SvPV_free(dstr);
4324                 SvLEN_set(dstr, 0);
4325                 SvCUR_set(dstr, 0);
4326             }
4327         }
4328         (void)SvOK_off(dstr);
4329         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4330         SvFLAGS(dstr) |= sflags & SVf_ROK;
4331         assert(!(sflags & SVp_NOK));
4332         assert(!(sflags & SVp_IOK));
4333         assert(!(sflags & SVf_NOK));
4334         assert(!(sflags & SVf_IOK));
4335     }
4336     else if (isGV_with_GP(dstr)) {
4337         if (!(sflags & SVf_OK)) {
4338             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4339                            "Undefined value assigned to typeglob");
4340         }
4341         else {
4342             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4343             if (dstr != (const SV *)gv) {
4344                 const char * const name = GvNAME((const GV *)dstr);
4345                 const STRLEN len = GvNAMELEN(dstr);
4346                 HV *old_stash = NULL;
4347                 bool reset_isa = FALSE;
4348                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4349                  || (len == 1 && name[0] == ':')) {
4350                     /* Set aside the old stash, so we can reset isa caches
4351                        on its subclasses. */
4352                     if((old_stash = GvHV(dstr))) {
4353                         /* Make sure we do not lose it early. */
4354                         SvREFCNT_inc_simple_void_NN(
4355                          sv_2mortal((SV *)old_stash)
4356                         );
4357                     }
4358                     reset_isa = TRUE;
4359                 }
4360
4361                 if (GvGP(dstr)) {
4362                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4363                     gp_free(MUTABLE_GV(dstr));
4364                 }
4365                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4366
4367                 if (reset_isa) {
4368                     HV * const stash = GvHV(dstr);
4369                     if(
4370                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4371                     )
4372                         mro_package_moved(
4373                          stash, old_stash,
4374                          (GV *)dstr, 0
4375                         );
4376                 }
4377             }
4378         }
4379     }
4380     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4381           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4382         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4383     }
4384     else if (sflags & SVp_POK) {
4385         const STRLEN cur = SvCUR(sstr);
4386         const STRLEN len = SvLEN(sstr);
4387
4388         /*
4389          * We have three basic ways to copy the string:
4390          *
4391          *  1. Swipe
4392          *  2. Copy-on-write
4393          *  3. Actual copy
4394          * 
4395          * Which we choose is based on various factors.  The following
4396          * things are listed in order of speed, fastest to slowest:
4397          *  - Swipe
4398          *  - Copying a short string
4399          *  - Copy-on-write bookkeeping
4400          *  - malloc
4401          *  - Copying a long string
4402          * 
4403          * We swipe the string (steal the string buffer) if the SV on the
4404          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4405          * big win on long strings.  It should be a win on short strings if
4406          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4407          * slow things down, as SvPVX_const(sstr) would have been freed
4408          * soon anyway.
4409          * 
4410          * We also steal the buffer from a PADTMP (operator target) if it
4411          * is â€˜long enough’.  For short strings, a swipe does not help
4412          * here, as it causes more malloc calls the next time the target
4413          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4414          * be allocated it is still not worth swiping PADTMPs for short
4415          * strings, as the savings here are small.
4416          * 
4417          * If the rhs is already flagged as a copy-on-write string and COW
4418          * is possible here, we use copy-on-write and make both SVs share
4419          * the string buffer.
4420          * 
4421          * If the rhs is not flagged as copy-on-write, then we see whether
4422          * it is worth upgrading it to such.  If the lhs already has a buf-
4423          * fer big enough and the string is short, we skip it and fall back
4424          * to method 3, since memcpy is faster for short strings than the
4425          * later bookkeeping overhead that copy-on-write entails.
4426          * 
4427          * If there is no buffer on the left, or the buffer is too small,
4428          * then we use copy-on-write.
4429          */
4430
4431         /* Whichever path we take through the next code, we want this true,
4432            and doing it now facilitates the COW check.  */
4433         (void)SvPOK_only(dstr);
4434
4435         if (
4436                  (              /* Either ... */
4437                                 /* slated for free anyway (and not COW)? */
4438                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4439                                 /* or a swipable TARG */
4440                  || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
4441                        == SVs_PADTMP
4442                                 /* whose buffer is worth stealing */
4443                      && CHECK_COWBUF_THRESHOLD(cur,len)
4444                     )
4445                  ) &&
4446                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4447                  (!(flags & SV_NOSTEAL)) &&
4448                                         /* and we're allowed to steal temps */
4449                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4450                  len)             /* and really is a string */
4451         {       /* Passes the swipe test.  */
4452             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4453                 SvPV_free(dstr);
4454             SvPV_set(dstr, SvPVX_mutable(sstr));
4455             SvLEN_set(dstr, SvLEN(sstr));
4456             SvCUR_set(dstr, SvCUR(sstr));
4457
4458             SvTEMP_off(dstr);
4459             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4460             SvPV_set(sstr, NULL);
4461             SvLEN_set(sstr, 0);
4462             SvCUR_set(sstr, 0);
4463             SvTEMP_off(sstr);
4464         }
4465         else if (flags & SV_COW_SHARED_HASH_KEYS
4466               &&
4467 #ifdef PERL_OLD_COPY_ON_WRITE
4468                  (  sflags & SVf_IsCOW
4469                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4470                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4471                      && SvTYPE(sstr) >= SVt_PVIV && len
4472                     )
4473                  )
4474 #elif defined(PERL_NEW_COPY_ON_WRITE)
4475                  (sflags & SVf_IsCOW
4476                    ? (!len ||
4477                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4478                           /* If this is a regular (non-hek) COW, only so
4479                              many COW "copies" are possible. */
4480                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4481                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4482                      && !(SvFLAGS(dstr) & SVf_BREAK)
4483                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4484                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4485                     ))
4486 #else
4487                  sflags & SVf_IsCOW
4488               && !(SvFLAGS(dstr) & SVf_BREAK)
4489 #endif
4490             ) {
4491             /* Either it's a shared hash key, or it's suitable for
4492                copy-on-write.  */
4493             if (DEBUG_C_TEST) {
4494                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4495                 sv_dump(sstr);
4496                 sv_dump(dstr);
4497             }
4498 #ifdef PERL_ANY_COW
4499             if (!(sflags & SVf_IsCOW)) {
4500                     SvIsCOW_on(sstr);
4501 # ifdef PERL_OLD_COPY_ON_WRITE
4502                     /* Make the source SV into a loop of 1.
4503                        (about to become 2) */
4504                     SV_COW_NEXT_SV_SET(sstr, sstr);
4505 # else
4506                     CowREFCNT(sstr) = 0;
4507 # endif
4508             }
4509 #endif
4510             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4511                 SvPV_free(dstr);
4512             }
4513
4514 #ifdef PERL_ANY_COW
4515             if (len) {
4516 # ifdef PERL_OLD_COPY_ON_WRITE
4517                     assert (SvTYPE(dstr) >= SVt_PVIV);
4518                     /* SvIsCOW_normal */
4519                     /* splice us in between source and next-after-source.  */
4520                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4521                     SV_COW_NEXT_SV_SET(sstr, dstr);
4522 # else
4523                     if (sflags & SVf_IsCOW) {
4524                         sv_buf_to_rw(sstr);
4525                     }
4526                     CowREFCNT(sstr)++;
4527 # endif
4528                     SvPV_set(dstr, SvPVX_mutable(sstr));
4529                     sv_buf_to_ro(sstr);
4530             } else
4531 #endif
4532             {
4533                     /* SvIsCOW_shared_hash */
4534                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4535                                           "Copy on write: Sharing hash\n"));
4536
4537                     assert (SvTYPE(dstr) >= SVt_PV);
4538                     SvPV_set(dstr,
4539                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4540             }
4541             SvLEN_set(dstr, len);
4542             SvCUR_set(dstr, cur);
4543             SvIsCOW_on(dstr);
4544         } else {
4545             /* Failed the swipe test, and we cannot do copy-on-write either.
4546                Have to copy the string.  */
4547             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4548             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4549             SvCUR_set(dstr, cur);
4550             *SvEND(dstr) = '\0';
4551         }
4552         if (sflags & SVp_NOK) {
4553             SvNV_set(dstr, SvNVX(sstr));
4554         }
4555         if (sflags & SVp_IOK) {
4556             SvIV_set(dstr, SvIVX(sstr));
4557             /* Must do this otherwise some other overloaded use of 0x80000000
4558                gets confused. I guess SVpbm_VALID */
4559             if (sflags & SVf_IVisUV)
4560                 SvIsUV_on(dstr);
4561         }
4562         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4563         {
4564             const MAGIC * const smg = SvVSTRING_mg(sstr);
4565             if (smg) {
4566                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4567                          smg->mg_ptr, smg->mg_len);
4568                 SvRMAGICAL_on(dstr);
4569             }
4570         }
4571     }
4572     else if (sflags & (SVp_IOK|SVp_NOK)) {
4573         (void)SvOK_off(dstr);
4574         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4575         if (sflags & SVp_IOK) {
4576             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4577             SvIV_set(dstr, SvIVX(sstr));
4578         }
4579         if (sflags & SVp_NOK) {
4580             SvNV_set(dstr, SvNVX(sstr));
4581         }
4582     }
4583     else {
4584         if (isGV_with_GP(sstr)) {
4585             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4586         }
4587         else
4588             (void)SvOK_off(dstr);
4589     }
4590     if (SvTAINTED(sstr))
4591         SvTAINT(dstr);
4592 }
4593
4594 /*
4595 =for apidoc sv_setsv_mg
4596
4597 Like C<sv_setsv>, but also handles 'set' magic.
4598
4599 =cut
4600 */
4601
4602 void
4603 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4604 {
4605     PERL_ARGS_ASSERT_SV_SETSV_MG;
4606
4607     sv_setsv(dstr,sstr);
4608     SvSETMAGIC(dstr);
4609 }
4610
4611 #ifdef PERL_ANY_COW
4612 # ifdef PERL_OLD_COPY_ON_WRITE
4613 #  define SVt_COW SVt_PVIV
4614 # else
4615 #  define SVt_COW SVt_PV
4616 # endif
4617 SV *
4618 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4619 {
4620     STRLEN cur = SvCUR(sstr);
4621     STRLEN len = SvLEN(sstr);
4622     char *new_pv;
4623 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4624     const bool already = cBOOL(SvIsCOW(sstr));
4625 #endif
4626
4627     PERL_ARGS_ASSERT_SV_SETSV_COW;
4628
4629     if (DEBUG_C_TEST) {
4630         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4631                       (void*)sstr, (void*)dstr);
4632         sv_dump(sstr);
4633         if (dstr)
4634                     sv_dump(dstr);
4635     }
4636
4637     if (dstr) {
4638         if (SvTHINKFIRST(dstr))
4639             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4640         else if (SvPVX_const(dstr))
4641             Safefree(SvPVX_mutable(dstr));
4642     }
4643     else
4644         new_SV(dstr);
4645     SvUPGRADE(dstr, SVt_COW);
4646
4647     assert (SvPOK(sstr));
4648     assert (SvPOKp(sstr));
4649 # ifdef PERL_OLD_COPY_ON_WRITE
4650     assert (!SvIOK(sstr));
4651     assert (!SvIOKp(sstr));
4652     assert (!SvNOK(sstr));
4653     assert (!SvNOKp(sstr));
4654 # endif
4655
4656     if (SvIsCOW(sstr)) {
4657
4658         if (SvLEN(sstr) == 0) {
4659             /* source is a COW shared hash key.  */
4660             DEBUG_C(PerlIO_printf(Perl_debug_log,
4661                                   "Fast copy on write: Sharing hash\n"));
4662             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4663             goto common_exit;
4664         }
4665 # ifdef PERL_OLD_COPY_ON_WRITE
4666         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4667 # else
4668         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4669         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4670 # endif
4671     } else {
4672         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4673         SvUPGRADE(sstr, SVt_COW);
4674         SvIsCOW_on(sstr);
4675         DEBUG_C(PerlIO_printf(Perl_debug_log,
4676                               "Fast copy on write: Converting sstr to COW\n"));
4677 # ifdef PERL_OLD_COPY_ON_WRITE
4678         SV_COW_NEXT_SV_SET(dstr, sstr);
4679 # else
4680         CowREFCNT(sstr) = 0;    
4681 # endif
4682     }
4683 # ifdef PERL_OLD_COPY_ON_WRITE
4684     SV_COW_NEXT_SV_SET(sstr, dstr);
4685 # else
4686 #  ifdef PERL_DEBUG_READONLY_COW
4687     if (already) sv_buf_to_rw(sstr);
4688 #  endif
4689     CowREFCNT(sstr)++;  
4690 # endif
4691     new_pv = SvPVX_mutable(sstr);
4692     sv_buf_to_ro(sstr);
4693
4694   common_exit:
4695     SvPV_set(dstr, new_pv);
4696     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4697     if (SvUTF8(sstr))
4698         SvUTF8_on(dstr);
4699     SvLEN_set(dstr, len);
4700     SvCUR_set(dstr, cur);
4701     if (DEBUG_C_TEST) {
4702         sv_dump(dstr);
4703     }
4704     return dstr;
4705 }
4706 #endif
4707
4708 /*
4709 =for apidoc sv_setpvn
4710
4711 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4712 The C<len> parameter indicates the number of
4713 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4714 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4715
4716 =cut
4717 */
4718
4719 void
4720 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4721 {
4722     char *dptr;
4723
4724     PERL_ARGS_ASSERT_SV_SETPVN;
4725
4726     SV_CHECK_THINKFIRST_COW_DROP(sv);
4727     if (!ptr) {
4728         (void)SvOK_off(sv);
4729         return;
4730     }
4731     else {
4732         /* len is STRLEN which is unsigned, need to copy to signed */
4733         const IV iv = len;
4734         if (iv < 0)
4735             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4736                        IVdf, iv);
4737     }
4738     SvUPGRADE(sv, SVt_PV);
4739
4740     dptr = SvGROW(sv, len + 1);
4741     Move(ptr,dptr,len,char);
4742     dptr[len] = '\0';
4743     SvCUR_set(sv, len);
4744     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4745     SvTAINT(sv);
4746     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4747 }
4748
4749 /*
4750 =for apidoc sv_setpvn_mg
4751
4752 Like C<sv_setpvn>, but also handles 'set' magic.
4753
4754 =cut
4755 */
4756
4757 void
4758 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4759 {
4760     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4761
4762     sv_setpvn(sv,ptr,len);
4763     SvSETMAGIC(sv);
4764 }
4765
4766 /*
4767 =for apidoc sv_setpv
4768
4769 Copies a string into an SV.  The string must be terminated with a C<NUL>
4770 character.
4771 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4772
4773 =cut
4774 */
4775
4776 void
4777 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4778 {
4779     STRLEN len;
4780
4781     PERL_ARGS_ASSERT_SV_SETPV;
4782
4783     SV_CHECK_THINKFIRST_COW_DROP(sv);
4784     if (!ptr) {
4785         (void)SvOK_off(sv);
4786         return;
4787     }
4788     len = strlen(ptr);
4789     SvUPGRADE(sv, SVt_PV);
4790
4791     SvGROW(sv, len + 1);
4792     Move(ptr,SvPVX(sv),len+1,char);
4793     SvCUR_set(sv, len);
4794     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4795     SvTAINT(sv);
4796     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4797 }
4798
4799 /*
4800 =for apidoc sv_setpv_mg
4801
4802 Like C<sv_setpv>, but also handles 'set' magic.
4803
4804 =cut
4805 */
4806
4807 void
4808 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4809 {
4810     PERL_ARGS_ASSERT_SV_SETPV_MG;
4811
4812     sv_setpv(sv,ptr);
4813     SvSETMAGIC(sv);
4814 }
4815
4816 void
4817 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4818 {
4819     PERL_ARGS_ASSERT_SV_SETHEK;
4820
4821     if (!hek) {
4822         return;
4823     }
4824
4825     if (HEK_LEN(hek) == HEf_SVKEY) {
4826         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4827         return;
4828     } else {
4829         const int flags = HEK_FLAGS(hek);
4830         if (flags & HVhek_WASUTF8) {
4831             STRLEN utf8_len = HEK_LEN(hek);
4832             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4833             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4834             SvUTF8_on(sv);
4835             return;
4836         } else if (flags & HVhek_UNSHARED) {
4837             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4838             if (HEK_UTF8(hek))
4839                 SvUTF8_on(sv);
4840             else SvUTF8_off(sv);
4841             return;
4842         }
4843         {
4844             SV_CHECK_THINKFIRST_COW_DROP(sv);
4845             SvUPGRADE(sv, SVt_PV);
4846             SvPV_free(sv);
4847             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4848             SvCUR_set(sv, HEK_LEN(hek));
4849             SvLEN_set(sv, 0);
4850             SvIsCOW_on(sv);
4851             SvPOK_on(sv);
4852             if (HEK_UTF8(hek))
4853                 SvUTF8_on(sv);
4854             else SvUTF8_off(sv);
4855             return;
4856         }
4857     }
4858 }
4859
4860
4861 /*
4862 =for apidoc sv_usepvn_flags
4863
4864 Tells an SV to use C<ptr> to find its string value.  Normally the
4865 string is stored inside the SV, but sv_usepvn allows the SV to use an
4866 outside string.  The C<ptr> should point to memory that was allocated
4867 by L<Newx|perlclib/Memory Management and String Handling>. It must be
4868 the start of a Newx-ed block of memory, and not a pointer to the
4869 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4870 and not be from a non-Newx memory allocator like C<malloc>. The
4871 string length, C<len>, must be supplied.  By default this function
4872 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4873 so that pointer should not be freed or used by the programmer after
4874 giving it to sv_usepvn, and neither should any pointers from "behind"
4875 that pointer (e.g. ptr + 1) be used.
4876
4877 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4878 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4879 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4880 C<len>, and already meets the requirements for storing in C<SvPVX>).
4881
4882 =cut
4883 */
4884
4885 void
4886 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4887 {
4888     STRLEN allocate;
4889
4890     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4891
4892     SV_CHECK_THINKFIRST_COW_DROP(sv);
4893     SvUPGRADE(sv, SVt_PV);
4894     if (!ptr) {
4895         (void)SvOK_off(sv);
4896         if (flags & SV_SMAGIC)
4897             SvSETMAGIC(sv);
4898         return;
4899     }
4900     if (SvPVX_const(sv))
4901         SvPV_free(sv);
4902
4903 #ifdef DEBUGGING
4904     if (flags & SV_HAS_TRAILING_NUL)
4905         assert(ptr[len] == '\0');
4906 #endif
4907
4908     allocate = (flags & SV_HAS_TRAILING_NUL)
4909         ? len + 1 :
4910 #ifdef Perl_safesysmalloc_size
4911         len + 1;
4912 #else 
4913         PERL_STRLEN_ROUNDUP(len + 1);
4914 #endif
4915     if (flags & SV_HAS_TRAILING_NUL) {
4916         /* It's long enough - do nothing.
4917            Specifically Perl_newCONSTSUB is relying on this.  */
4918     } else {
4919 #ifdef DEBUGGING
4920         /* Force a move to shake out bugs in callers.  */
4921         char *new_ptr = (char*)safemalloc(allocate);
4922         Copy(ptr, new_ptr, len, char);
4923         PoisonFree(ptr,len,char);
4924         Safefree(ptr);
4925         ptr = new_ptr;
4926 #else
4927         ptr = (char*) saferealloc (ptr, allocate);
4928 #endif
4929     }
4930 #ifdef Perl_safesysmalloc_size
4931     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4932 #else
4933     SvLEN_set(sv, allocate);
4934 #endif
4935     SvCUR_set(sv, len);
4936     SvPV_set(sv, ptr);
4937     if (!(flags & SV_HAS_TRAILING_NUL)) {
4938         ptr[len] = '\0';
4939     }
4940     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4941     SvTAINT(sv);
4942     if (flags & SV_SMAGIC)
4943         SvSETMAGIC(sv);
4944 }
4945
4946 #ifdef PERL_OLD_COPY_ON_WRITE
4947 /* Need to do this *after* making the SV normal, as we need the buffer
4948    pointer to remain valid until after we've copied it.  If we let go too early,
4949    another thread could invalidate it by unsharing last of the same hash key
4950    (which it can do by means other than releasing copy-on-write Svs)
4951    or by changing the other copy-on-write SVs in the loop.  */
4952 STATIC void
4953 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4954 {
4955     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4956
4957     { /* this SV was SvIsCOW_normal(sv) */
4958          /* we need to find the SV pointing to us.  */
4959         SV *current = SV_COW_NEXT_SV(after);
4960
4961         if (current == sv) {
4962             /* The SV we point to points back to us (there were only two of us
4963                in the loop.)
4964                Hence other SV is no longer copy on write either.  */
4965             SvIsCOW_off(after);
4966             sv_buf_to_rw(after);
4967         } else {
4968             /* We need to follow the pointers around the loop.  */
4969             SV *next;
4970             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4971                 assert (next);
4972                 current = next;
4973                  /* don't loop forever if the structure is bust, and we have
4974                     a pointer into a closed loop.  */
4975                 assert (current != after);
4976                 assert (SvPVX_const(current) == pvx);
4977             }
4978             /* Make the SV before us point to the SV after us.  */
4979             SV_COW_NEXT_SV_SET(current, after);
4980         }
4981     }
4982 }
4983 #endif
4984 /*
4985 =for apidoc sv_force_normal_flags
4986
4987 Undo various types of fakery on an SV, where fakery means
4988 "more than" a string: if the PV is a shared string, make
4989 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4990 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4991 we do the copy, and is also used locally; if this is a
4992 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4993 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4994 SvPOK_off rather than making a copy.  (Used where this
4995 scalar is about to be set to some other value.)  In addition,
4996 the C<flags> parameter gets passed to C<sv_unref_flags()>
4997 when unreffing.  C<sv_force_normal> calls this function
4998 with flags set to 0.
4999
5000 This function is expected to be used to signal to perl that this SV is
5001 about to be written to, and any extra book-keeping needs to be taken care
5002 of.  Hence, it croaks on read-only values.
5003
5004 =cut
5005 */
5006
5007 static void
5008 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5009 {
5010     assert(SvIsCOW(sv));
5011     {
5012 #ifdef PERL_ANY_COW
5013         const char * const pvx = SvPVX_const(sv);
5014         const STRLEN len = SvLEN(sv);
5015         const STRLEN cur = SvCUR(sv);
5016 # ifdef PERL_OLD_COPY_ON_WRITE
5017         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5018            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5019            we'll fail an assertion.  */
5020         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5021 # endif
5022
5023         if (DEBUG_C_TEST) {
5024                 PerlIO_printf(Perl_debug_log,
5025                               "Copy on write: Force normal %ld\n",
5026                               (long) flags);
5027                 sv_dump(sv);
5028         }
5029         SvIsCOW_off(sv);
5030 # ifdef PERL_NEW_COPY_ON_WRITE
5031         if (len && CowREFCNT(sv) == 0)
5032             /* We own the buffer ourselves. */
5033             sv_buf_to_rw(sv);
5034         else
5035 # endif
5036         {
5037                 
5038             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5039 # ifdef PERL_NEW_COPY_ON_WRITE
5040             /* Must do this first, since the macro uses SvPVX. */
5041             if (len) {
5042                 sv_buf_to_rw(sv);
5043                 CowREFCNT(sv)--;
5044                 sv_buf_to_ro(sv);
5045             }
5046 # endif
5047             SvPV_set(sv, NULL);
5048             SvCUR_set(sv, 0);
5049             SvLEN_set(sv, 0);
5050             if (flags & SV_COW_DROP_PV) {
5051                 /* OK, so we don't need to copy our buffer.  */
5052                 SvPOK_off(sv);
5053             } else {
5054                 SvGROW(sv, cur + 1);
5055                 Move(pvx,SvPVX(sv),cur,char);
5056                 SvCUR_set(sv, cur);
5057                 *SvEND(sv) = '\0';
5058             }
5059             if (len) {
5060 # ifdef PERL_OLD_COPY_ON_WRITE
5061                 sv_release_COW(sv, pvx, next);
5062 # endif
5063             } else {
5064                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5065             }
5066             if (DEBUG_C_TEST) {
5067                 sv_dump(sv);
5068             }
5069         }
5070 #else
5071             const char * const pvx = SvPVX_const(sv);
5072             const STRLEN len = SvCUR(sv);
5073             SvIsCOW_off(sv);
5074             SvPV_set(sv, NULL);
5075             SvLEN_set(sv, 0);
5076             if (flags & SV_COW_DROP_PV) {
5077                 /* OK, so we don't need to copy our buffer.  */
5078                 SvPOK_off(sv);
5079             } else {
5080                 SvGROW(sv, len + 1);
5081                 Move(pvx,SvPVX(sv),len,char);
5082                 *SvEND(sv) = '\0';
5083             }
5084             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5085 #endif
5086     }
5087 }
5088
5089 void
5090 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5091 {
5092     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5093
5094     if (SvREADONLY(sv))
5095         Perl_croak_no_modify();
5096     else if (SvIsCOW(sv))
5097         S_sv_uncow(aTHX_ sv, flags);
5098     if (SvROK(sv))
5099         sv_unref_flags(sv, flags);
5100     else if (SvFAKE(sv) && isGV_with_GP(sv))
5101         sv_unglob(sv, flags);
5102     else if (SvFAKE(sv) && isREGEXP(sv)) {
5103         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5104            to sv_unglob. We only need it here, so inline it.  */
5105         const bool islv = SvTYPE(sv) == SVt_PVLV;
5106         const svtype new_type =
5107           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5108         SV *const temp = newSV_type(new_type);
5109         regexp *const temp_p = ReANY((REGEXP *)sv);
5110
5111         if (new_type == SVt_PVMG) {
5112             SvMAGIC_set(temp, SvMAGIC(sv));
5113             SvMAGIC_set(sv, NULL);
5114             SvSTASH_set(temp, SvSTASH(sv));
5115             SvSTASH_set(sv, NULL);
5116         }
5117         if (!islv) SvCUR_set(temp, SvCUR(sv));
5118         /* Remember that SvPVX is in the head, not the body.  But
5119            RX_WRAPPED is in the body. */
5120         assert(ReANY((REGEXP *)sv)->mother_re);
5121         /* Their buffer is already owned by someone else. */
5122         if (flags & SV_COW_DROP_PV) {
5123             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5124                zeroed body.  For SVt_PVLV, it should have been set to 0
5125                before turning into a regexp. */
5126             assert(!SvLEN(islv ? sv : temp));
5127             sv->sv_u.svu_pv = 0;
5128         }
5129         else {
5130             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5131             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5132             SvPOK_on(sv);
5133         }
5134
5135         /* Now swap the rest of the bodies. */
5136
5137         SvFAKE_off(sv);
5138         if (!islv) {
5139             SvFLAGS(sv) &= ~SVTYPEMASK;
5140             SvFLAGS(sv) |= new_type;
5141             SvANY(sv) = SvANY(temp);
5142         }
5143
5144         SvFLAGS(temp) &= ~(SVTYPEMASK);
5145         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5146         SvANY(temp) = temp_p;
5147         temp->sv_u.svu_rx = (regexp *)temp_p;
5148
5149         SvREFCNT_dec_NN(temp);
5150     }
5151     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5152 }
5153
5154 /*
5155 =for apidoc sv_chop
5156
5157 Efficient removal of characters from the beginning of the string buffer.
5158 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5159 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5160 character of the adjusted string.  Uses the "OOK hack".  On return, only
5161 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5162
5163 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5164 refer to the same chunk of data.
5165
5166 The unfortunate similarity of this function's name to that of Perl's C<chop>
5167 operator is strictly coincidental.  This function works from the left;
5168 C<chop> works from the right.
5169
5170 =cut
5171 */
5172
5173 void
5174 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5175 {
5176     STRLEN delta;
5177     STRLEN old_delta;
5178     U8 *p;
5179 #ifdef DEBUGGING
5180     const U8 *evacp;
5181     STRLEN evacn;
5182 #endif
5183     STRLEN max_delta;
5184
5185     PERL_ARGS_ASSERT_SV_CHOP;
5186
5187     if (!ptr || !SvPOKp(sv))
5188         return;
5189     delta = ptr - SvPVX_const(sv);
5190     if (!delta) {
5191         /* Nothing to do.  */
5192         return;
5193     }
5194     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5195     if (delta > max_delta)
5196         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5197                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5198     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5199     SV_CHECK_THINKFIRST(sv);
5200     SvPOK_only_UTF8(sv);
5201
5202     if (!SvOOK(sv)) {
5203         if (!SvLEN(sv)) { /* make copy of shared string */
5204             const char *pvx = SvPVX_const(sv);
5205             const STRLEN len = SvCUR(sv);
5206             SvGROW(sv, len + 1);
5207             Move(pvx,SvPVX(sv),len,char);
5208             *SvEND(sv) = '\0';
5209         }
5210         SvOOK_on(sv);
5211         old_delta = 0;
5212     } else {
5213         SvOOK_offset(sv, old_delta);
5214     }
5215     SvLEN_set(sv, SvLEN(sv) - delta);
5216     SvCUR_set(sv, SvCUR(sv) - delta);
5217     SvPV_set(sv, SvPVX(sv) + delta);
5218
5219     p = (U8 *)SvPVX_const(sv);
5220
5221 #ifdef DEBUGGING
5222     /* how many bytes were evacuated?  we will fill them with sentinel
5223        bytes, except for the part holding the new offset of course. */
5224     evacn = delta;
5225     if (old_delta)
5226         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5227     assert(evacn);
5228     assert(evacn <= delta + old_delta);
5229     evacp = p - evacn;
5230 #endif
5231
5232     /* This sets 'delta' to the accumulated value of all deltas so far */
5233     delta += old_delta;
5234     assert(delta);
5235
5236     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5237      * the string; otherwise store a 0 byte there and store 'delta' just prior
5238      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5239      * portion of the chopped part of the string */
5240     if (delta < 0x100) {
5241         *--p = (U8) delta;
5242     } else {
5243         *--p = 0;
5244         p -= sizeof(STRLEN);
5245         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5246     }
5247
5248 #ifdef DEBUGGING
5249     /* Fill the preceding buffer with sentinals to verify that no-one is
5250        using it.  */
5251     while (p > evacp) {
5252         --p;
5253         *p = (U8)PTR2UV(p);
5254     }
5255 #endif
5256 }
5257
5258 /*
5259 =for apidoc sv_catpvn
5260
5261 Concatenates the string onto the end of the string which is in the SV.  The
5262 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5263 status set, then the bytes appended should be valid UTF-8.
5264 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5265
5266 =for apidoc sv_catpvn_flags
5267
5268 Concatenates the string onto the end of the string which is in the SV.  The
5269 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5270 status set, then the bytes appended should be valid UTF-8.
5271 If C<flags> has the C<SV_SMAGIC> bit set, will
5272 C<mg_set> on C<dsv> afterwards if appropriate.
5273 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5274 in terms of this function.
5275
5276 =cut
5277 */
5278
5279 void
5280 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5281 {
5282     STRLEN dlen;
5283     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5284
5285     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5286     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5287
5288     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5289       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5290          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5291          dlen = SvCUR(dsv);
5292       }
5293       else SvGROW(dsv, dlen + slen + 1);
5294       if (sstr == dstr)
5295         sstr = SvPVX_const(dsv);
5296       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5297       SvCUR_set(dsv, SvCUR(dsv) + slen);
5298     }
5299     else {
5300         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5301         const char * const send = sstr + slen;
5302         U8 *d;
5303
5304         /* Something this code does not account for, which I think is
5305            impossible; it would require the same pv to be treated as
5306            bytes *and* utf8, which would indicate a bug elsewhere. */
5307         assert(sstr != dstr);
5308
5309         SvGROW(dsv, dlen + slen * 2 + 1);
5310         d = (U8 *)SvPVX(dsv) + dlen;
5311
5312         while (sstr < send) {
5313             append_utf8_from_native_byte(*sstr, &d);
5314             sstr++;
5315         }
5316         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5317     }
5318     *SvEND(dsv) = '\0';
5319     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5320     SvTAINT(dsv);
5321     if (flags & SV_SMAGIC)
5322         SvSETMAGIC(dsv);
5323 }
5324
5325 /*
5326 =for apidoc sv_catsv
5327
5328 Concatenates the string from SV C<ssv> onto the end of the string in SV
5329 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5330 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5331 C<sv_catsv_nomg>.
5332
5333 =for apidoc sv_catsv_flags
5334
5335 Concatenates the string from SV C<ssv> onto the end of the string in SV
5336 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5337 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5338 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5339 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5340 and C<sv_catsv_mg> are implemented in terms of this function.
5341
5342 =cut */
5343
5344 void
5345 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5346 {
5347     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5348
5349     if (ssv) {
5350         STRLEN slen;
5351         const char *spv = SvPV_flags_const(ssv, slen, flags);
5352         if (spv) {
5353             if (flags & SV_GMAGIC)
5354                 SvGETMAGIC(dsv);
5355             sv_catpvn_flags(dsv, spv, slen,
5356                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5357             if (flags & SV_SMAGIC)
5358                 SvSETMAGIC(dsv);
5359         }
5360     }
5361 }
5362
5363 /*
5364 =for apidoc sv_catpv
5365
5366 Concatenates the C<NUL>-terminated string onto the end of the string which is
5367 in the SV.
5368 If the SV has the UTF-8 status set, then the bytes appended should be
5369 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5370
5371 =cut */
5372
5373 void
5374 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5375 {
5376     STRLEN len;
5377     STRLEN tlen;
5378     char *junk;
5379
5380     PERL_ARGS_ASSERT_SV_CATPV;
5381
5382     if (!ptr)
5383         return;
5384     junk = SvPV_force(sv, tlen);
5385     len = strlen(ptr);
5386     SvGROW(sv, tlen + len + 1);
5387     if (ptr == junk)
5388         ptr = SvPVX_const(sv);
5389     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5390     SvCUR_set(sv, SvCUR(sv) + len);
5391     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5392     SvTAINT(sv);
5393 }
5394
5395 /*
5396 =for apidoc sv_catpv_flags
5397
5398 Concatenates the C<NUL>-terminated string onto the end of the string which is
5399 in the SV.
5400 If the SV has the UTF-8 status set, then the bytes appended should
5401 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5402 on the modified SV if appropriate.
5403
5404 =cut
5405 */
5406
5407 void
5408 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5409 {
5410     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5411     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5412 }
5413
5414 /*
5415 =for apidoc sv_catpv_mg
5416
5417 Like C<sv_catpv>, but also handles 'set' magic.
5418
5419 =cut
5420 */
5421
5422 void
5423 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5424 {
5425     PERL_ARGS_ASSERT_SV_CATPV_MG;
5426
5427     sv_catpv(sv,ptr);
5428     SvSETMAGIC(sv);
5429 }
5430
5431 /*
5432 =for apidoc newSV
5433
5434 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5435 bytes of preallocated string space the SV should have.  An extra byte for a
5436 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5437 space is allocated.)  The reference count for the new SV is set to 1.
5438
5439 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5440 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5441 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5442 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5443 modules supporting older perls.
5444
5445 =cut
5446 */
5447
5448 SV *
5449 Perl_newSV(pTHX_ const STRLEN len)
5450 {
5451     SV *sv;
5452
5453     new_SV(sv);
5454     if (len) {
5455         sv_upgrade(sv, SVt_PV);
5456         SvGROW(sv, len + 1);
5457     }
5458     return sv;
5459 }
5460 /*
5461 =for apidoc sv_magicext
5462
5463 Adds magic to an SV, upgrading it if necessary.  Applies the
5464 supplied vtable and returns a pointer to the magic added.
5465
5466 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5467 In particular, you can add magic to SvREADONLY SVs, and add more than
5468 one instance of the same 'how'.
5469
5470 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5471 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5472 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5473 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5474
5475 (This is now used as a subroutine by C<sv_magic>.)
5476
5477 =cut
5478 */
5479 MAGIC * 
5480 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5481                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5482 {
5483     MAGIC* mg;
5484
5485     PERL_ARGS_ASSERT_SV_MAGICEXT;
5486
5487     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5488
5489     SvUPGRADE(sv, SVt_PVMG);
5490     Newxz(mg, 1, MAGIC);
5491     mg->mg_moremagic = SvMAGIC(sv);
5492     SvMAGIC_set(sv, mg);
5493
5494     /* Sometimes a magic contains a reference loop, where the sv and
5495        object refer to each other.  To prevent a reference loop that
5496        would prevent such objects being freed, we look for such loops
5497        and if we find one we avoid incrementing the object refcount.
5498
5499        Note we cannot do this to avoid self-tie loops as intervening RV must
5500        have its REFCNT incremented to keep it in existence.
5501
5502     */
5503     if (!obj || obj == sv ||
5504         how == PERL_MAGIC_arylen ||
5505         how == PERL_MAGIC_symtab ||
5506         (SvTYPE(obj) == SVt_PVGV &&
5507             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5508              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5509              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5510     {
5511         mg->mg_obj = obj;
5512     }
5513     else {
5514         mg->mg_obj = SvREFCNT_inc_simple(obj);
5515         mg->mg_flags |= MGf_REFCOUNTED;
5516     }
5517
5518     /* Normal self-ties simply pass a null object, and instead of
5519        using mg_obj directly, use the SvTIED_obj macro to produce a
5520        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5521        with an RV obj pointing to the glob containing the PVIO.  In
5522        this case, to avoid a reference loop, we need to weaken the
5523        reference.
5524     */
5525
5526     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5527         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5528     {
5529       sv_rvweaken(obj);
5530     }
5531
5532     mg->mg_type = how;
5533     mg->mg_len = namlen;
5534     if (name) {
5535         if (namlen > 0)
5536             mg->mg_ptr = savepvn(name, namlen);
5537         else if (namlen == HEf_SVKEY) {
5538             /* Yes, this is casting away const. This is only for the case of
5539                HEf_SVKEY. I think we need to document this aberation of the
5540                constness of the API, rather than making name non-const, as
5541                that change propagating outwards a long way.  */
5542             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5543         } else
5544             mg->mg_ptr = (char *) name;
5545     }
5546     mg->mg_virtual = (MGVTBL *) vtable;
5547
5548     mg_magical(sv);
5549     return mg;
5550 }
5551
5552 MAGIC *
5553 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5554 {
5555     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5556     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5557         /* This sv is only a delegate.  //g magic must be attached to
5558            its target. */
5559         vivify_defelem(sv);
5560         sv = LvTARG(sv);
5561     }
5562 #ifdef PERL_OLD_COPY_ON_WRITE
5563     if (SvIsCOW(sv))
5564         sv_force_normal_flags(sv, 0);
5565 #endif
5566     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5567                        &PL_vtbl_mglob, 0, 0);
5568 }
5569
5570 /*
5571 =for apidoc sv_magic
5572
5573 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5574 necessary, then adds a new magic item of type C<how> to the head of the
5575 magic list.
5576
5577 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5578 handling of the C<name> and C<namlen> arguments.
5579
5580 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5581 to add more than one instance of the same 'how'.
5582
5583 =cut
5584 */
5585
5586 void
5587 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5588              const char *const name, const I32 namlen)
5589 {
5590     const MGVTBL *vtable;
5591     MAGIC* mg;
5592     unsigned int flags;
5593     unsigned int vtable_index;
5594
5595     PERL_ARGS_ASSERT_SV_MAGIC;
5596
5597     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5598         || ((flags = PL_magic_data[how]),
5599             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5600             > magic_vtable_max))
5601         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5602
5603     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5604        Useful for attaching extension internal data to perl vars.
5605        Note that multiple extensions may clash if magical scalars
5606        etc holding private data from one are passed to another. */
5607
5608     vtable = (vtable_index == magic_vtable_max)
5609         ? NULL : PL_magic_vtables + vtable_index;
5610
5611 #ifdef PERL_OLD_COPY_ON_WRITE
5612     if (SvIsCOW(sv))
5613         sv_force_normal_flags(sv, 0);
5614 #endif
5615     if (SvREADONLY(sv)) {
5616         if (
5617             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5618            )
5619         {
5620             Perl_croak_no_modify();
5621         }
5622     }
5623     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5624         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5625             /* sv_magic() refuses to add a magic of the same 'how' as an
5626                existing one
5627              */
5628             if (how == PERL_MAGIC_taint)
5629                 mg->mg_len |= 1;
5630             return;
5631         }
5632     }
5633
5634     /* Force pos to be stored as characters, not bytes. */
5635     if (SvMAGICAL(sv) && DO_UTF8(sv)
5636       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5637       && mg->mg_len != -1
5638       && mg->mg_flags & MGf_BYTES) {
5639         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5640                                                SV_CONST_RETURN);
5641         mg->mg_flags &= ~MGf_BYTES;
5642     }
5643
5644     /* Rest of work is done else where */
5645     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5646
5647     switch (how) {
5648     case PERL_MAGIC_taint:
5649         mg->mg_len = 1;
5650         break;
5651     case PERL_MAGIC_ext:
5652     case PERL_MAGIC_dbfile:
5653         SvRMAGICAL_on(sv);
5654         break;
5655     }
5656 }
5657
5658 static int
5659 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5660 {
5661     MAGIC* mg;
5662     MAGIC** mgp;
5663
5664     assert(flags <= 1);
5665
5666     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5667         return 0;
5668     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5669     for (mg = *mgp; mg; mg = *mgp) {
5670         const MGVTBL* const virt = mg->mg_virtual;
5671         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5672             *mgp = mg->mg_moremagic;
5673             if (virt && virt->svt_free)
5674                 virt->svt_free(aTHX_ sv, mg);
5675             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5676                 if (mg->mg_len > 0)
5677                     Safefree(mg->mg_ptr);
5678                 else if (mg->mg_len == HEf_SVKEY)
5679                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5680                 else if (mg->mg_type == PERL_MAGIC_utf8)
5681                     Safefree(mg->mg_ptr);
5682             }
5683             if (mg->mg_flags & MGf_REFCOUNTED)
5684                 SvREFCNT_dec(mg->mg_obj);
5685             Safefree(mg);
5686         }
5687         else
5688             mgp = &mg->mg_moremagic;
5689     }
5690     if (SvMAGIC(sv)) {
5691         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5692             mg_magical(sv);     /*    else fix the flags now */
5693     }
5694     else {
5695         SvMAGICAL_off(sv);
5696         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5697     }
5698     return 0;
5699 }
5700
5701 /*
5702 =for apidoc sv_unmagic
5703
5704 Removes all magic of type C<type> from an SV.
5705
5706 =cut
5707 */
5708
5709 int
5710 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5711 {
5712     PERL_ARGS_ASSERT_SV_UNMAGIC;
5713     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5714 }
5715
5716 /*
5717 =for apidoc sv_unmagicext
5718
5719 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5720
5721 =cut
5722 */
5723
5724 int
5725 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5726 {
5727     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5728     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5729 }
5730
5731 /*
5732 =for apidoc sv_rvweaken
5733
5734 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5735 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5736 push a back-reference to this RV onto the array of backreferences
5737 associated with that magic.  If the RV is magical, set magic will be
5738 called after the RV is cleared.
5739
5740 =cut
5741 */
5742
5743 SV *
5744 Perl_sv_rvweaken(pTHX_ SV *const sv)
5745 {
5746     SV *tsv;
5747
5748     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5749
5750     if (!SvOK(sv))  /* let undefs pass */
5751         return sv;
5752     if (!SvROK(sv))
5753         Perl_croak(aTHX_ "Can't weaken a nonreference");
5754     else if (SvWEAKREF(sv)) {
5755         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5756         return sv;
5757     }
5758     else if (SvREADONLY(sv)) croak_no_modify();
5759     tsv = SvRV(sv);
5760     Perl_sv_add_backref(aTHX_ tsv, sv);
5761     SvWEAKREF_on(sv);
5762     SvREFCNT_dec_NN(tsv);
5763     return sv;
5764 }
5765
5766 /* Give tsv backref magic if it hasn't already got it, then push a
5767  * back-reference to sv onto the array associated with the backref magic.
5768  *
5769  * As an optimisation, if there's only one backref and it's not an AV,
5770  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5771  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5772  * active.)
5773  */
5774
5775 /* A discussion about the backreferences array and its refcount:
5776  *
5777  * The AV holding the backreferences is pointed to either as the mg_obj of
5778  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5779  * xhv_backreferences field. The array is created with a refcount
5780  * of 2. This means that if during global destruction the array gets
5781  * picked on before its parent to have its refcount decremented by the
5782  * random zapper, it won't actually be freed, meaning it's still there for
5783  * when its parent gets freed.
5784  *
5785  * When the parent SV is freed, the extra ref is killed by
5786  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5787  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5788  *
5789  * When a single backref SV is stored directly, it is not reference
5790  * counted.
5791  */
5792
5793 void
5794 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5795 {
5796     SV **svp;
5797     AV *av = NULL;
5798     MAGIC *mg = NULL;
5799
5800     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5801
5802     /* find slot to store array or singleton backref */
5803
5804     if (SvTYPE(tsv) == SVt_PVHV) {
5805         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5806     } else {
5807         if (SvMAGICAL(tsv))
5808             mg = mg_find(tsv, PERL_MAGIC_backref);
5809         if (!mg)
5810             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5811         svp = &(mg->mg_obj);
5812     }
5813
5814     /* create or retrieve the array */
5815
5816     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5817         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5818     ) {
5819         /* create array */
5820         if (mg)
5821             mg->mg_flags |= MGf_REFCOUNTED;
5822         av = newAV();
5823         AvREAL_off(av);
5824         SvREFCNT_inc_simple_void_NN(av);
5825         /* av now has a refcnt of 2; see discussion above */
5826         av_extend(av, *svp ? 2 : 1);
5827         if (*svp) {
5828             /* move single existing backref to the array */
5829             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5830         }
5831         *svp = (SV*)av;
5832     }
5833     else {
5834         av = MUTABLE_AV(*svp);
5835         if (!av) {
5836             /* optimisation: store single backref directly in HvAUX or mg_obj */
5837             *svp = sv;
5838             return;
5839         }
5840         assert(SvTYPE(av) == SVt_PVAV);
5841         if (AvFILLp(av) >= AvMAX(av)) {
5842             av_extend(av, AvFILLp(av)+1);
5843         }
5844     }
5845     /* push new backref */
5846     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5847 }
5848
5849 /* delete a back-reference to ourselves from the backref magic associated
5850  * with the SV we point to.
5851  */
5852
5853 void
5854 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5855 {
5856     SV **svp = NULL;
5857
5858     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5859
5860     if (SvTYPE(tsv) == SVt_PVHV) {
5861         if (SvOOK(tsv))
5862             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5863     }
5864     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5865         /* It's possible for the the last (strong) reference to tsv to have
5866            become freed *before* the last thing holding a weak reference.
5867            If both survive longer than the backreferences array, then when
5868            the referent's reference count drops to 0 and it is freed, it's
5869            not able to chase the backreferences, so they aren't NULLed.
5870
5871            For example, a CV holds a weak reference to its stash. If both the
5872            CV and the stash survive longer than the backreferences array,
5873            and the CV gets picked for the SvBREAK() treatment first,
5874            *and* it turns out that the stash is only being kept alive because
5875            of an our variable in the pad of the CV, then midway during CV
5876            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5877            It ends up pointing to the freed HV. Hence it's chased in here, and
5878            if this block wasn't here, it would hit the !svp panic just below.
5879
5880            I don't believe that "better" destruction ordering is going to help
5881            here - during global destruction there's always going to be the
5882            chance that something goes out of order. We've tried to make it
5883            foolproof before, and it only resulted in evolutionary pressure on
5884            fools. Which made us look foolish for our hubris. :-(
5885         */
5886         return;
5887     }
5888     else {
5889         MAGIC *const mg
5890             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5891         svp =  mg ? &(mg->mg_obj) : NULL;
5892     }
5893
5894     if (!svp)
5895         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5896     if (!*svp) {
5897         /* It's possible that sv is being freed recursively part way through the
5898            freeing of tsv. If this happens, the backreferences array of tsv has
5899            already been freed, and so svp will be NULL. If this is the case,
5900            we should not panic. Instead, nothing needs doing, so return.  */
5901         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5902             return;
5903         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5904                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5905     }
5906
5907     if (SvTYPE(*svp) == SVt_PVAV) {
5908 #ifdef DEBUGGING
5909         int count = 1;
5910 #endif
5911         AV * const av = (AV*)*svp;
5912         SSize_t fill;
5913         assert(!SvIS_FREED(av));
5914         fill = AvFILLp(av);
5915         assert(fill > -1);
5916         svp = AvARRAY(av);
5917         /* for an SV with N weak references to it, if all those
5918          * weak refs are deleted, then sv_del_backref will be called
5919          * N times and O(N^2) compares will be done within the backref
5920          * array. To ameliorate this potential slowness, we:
5921          * 1) make sure this code is as tight as possible;
5922          * 2) when looking for SV, look for it at both the head and tail of the
5923          *    array first before searching the rest, since some create/destroy
5924          *    patterns will cause the backrefs to be freed in order.
5925          */
5926         if (*svp == sv) {
5927             AvARRAY(av)++;
5928             AvMAX(av)--;
5929         }
5930         else {
5931             SV **p = &svp[fill];
5932             SV *const topsv = *p;
5933             if (topsv != sv) {
5934 #ifdef DEBUGGING
5935                 count = 0;
5936 #endif
5937                 while (--p > svp) {
5938                     if (*p == sv) {
5939                         /* We weren't the last entry.
5940                            An unordered list has this property that you
5941                            can take the last element off the end to fill
5942                            the hole, and it's still an unordered list :-)
5943                         */
5944                         *p = topsv;
5945 #ifdef DEBUGGING
5946                         count++;
5947 #else
5948                         break; /* should only be one */
5949 #endif
5950                     }
5951                 }
5952             }
5953         }
5954         assert(count ==1);
5955         AvFILLp(av) = fill-1;
5956     }
5957     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5958         /* freed AV; skip */
5959     }
5960     else {
5961         /* optimisation: only a single backref, stored directly */
5962         if (*svp != sv)
5963             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
5964                        (void*)*svp, (void*)sv);
5965         *svp = NULL;
5966     }
5967
5968 }
5969
5970 void
5971 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5972 {
5973     SV **svp;
5974     SV **last;
5975     bool is_array;
5976
5977     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5978
5979     if (!av)
5980         return;
5981
5982     /* after multiple passes through Perl_sv_clean_all() for a thingy
5983      * that has badly leaked, the backref array may have gotten freed,
5984      * since we only protect it against 1 round of cleanup */
5985     if (SvIS_FREED(av)) {
5986         if (PL_in_clean_all) /* All is fair */
5987             return;
5988         Perl_croak(aTHX_
5989                    "panic: magic_killbackrefs (freed backref AV/SV)");
5990     }
5991
5992
5993     is_array = (SvTYPE(av) == SVt_PVAV);
5994     if (is_array) {
5995         assert(!SvIS_FREED(av));
5996         svp = AvARRAY(av);
5997         if (svp)
5998             last = svp + AvFILLp(av);
5999     }
6000     else {
6001         /* optimisation: only a single backref, stored directly */
6002         svp = (SV**)&av;
6003         last = svp;
6004     }
6005
6006     if (svp) {
6007         while (svp <= last) {
6008             if (*svp) {
6009                 SV *const referrer = *svp;
6010                 if (SvWEAKREF(referrer)) {
6011                     /* XXX Should we check that it hasn't changed? */
6012                     assert(SvROK(referrer));
6013                     SvRV_set(referrer, 0);
6014                     SvOK_off(referrer);
6015                     SvWEAKREF_off(referrer);
6016                     SvSETMAGIC(referrer);
6017                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6018                            SvTYPE(referrer) == SVt_PVLV) {
6019                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6020                     /* You lookin' at me?  */
6021                     assert(GvSTASH(referrer));
6022                     assert(GvSTASH(referrer) == (const HV *)sv);
6023                     GvSTASH(referrer) = 0;
6024                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6025                            SvTYPE(referrer) == SVt_PVFM) {
6026                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6027                         /* You lookin' at me?  */
6028                         assert(CvSTASH(referrer));
6029                         assert(CvSTASH(referrer) == (const HV *)sv);
6030                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6031                     }
6032                     else {
6033                         assert(SvTYPE(sv) == SVt_PVGV);
6034                         /* You lookin' at me?  */
6035                         assert(CvGV(referrer));
6036                         assert(CvGV(referrer) == (const GV *)sv);
6037                         anonymise_cv_maybe(MUTABLE_GV(sv),
6038                                                 MUTABLE_CV(referrer));
6039                     }
6040
6041                 } else {
6042                     Perl_croak(aTHX_
6043                                "panic: magic_killbackrefs (flags=%"UVxf")",
6044                                (UV)SvFLAGS(referrer));
6045                 }
6046
6047                 if (is_array)
6048                     *svp = NULL;
6049             }
6050             svp++;
6051         }
6052     }
6053     if (is_array) {
6054         AvFILLp(av) = -1;
6055         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6056     }
6057     return;
6058 }
6059
6060 /*
6061 =for apidoc sv_insert
6062
6063 Inserts a string at the specified offset/length within the SV.  Similar to
6064 the Perl substr() function.  Handles get magic.
6065
6066 =for apidoc sv_insert_flags
6067
6068 Same as C<sv_insert>, but the extra C<flags> are passed to the
6069 C<SvPV_force_flags> that applies to C<bigstr>.
6070
6071 =cut
6072 */
6073
6074 void
6075 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6076 {
6077     char *big;
6078     char *mid;
6079     char *midend;
6080     char *bigend;
6081     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6082     STRLEN curlen;
6083
6084     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6085
6086     if (!bigstr)
6087         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6088     SvPV_force_flags(bigstr, curlen, flags);
6089     (void)SvPOK_only_UTF8(bigstr);
6090     if (offset + len > curlen) {
6091         SvGROW(bigstr, offset+len+1);
6092         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6093         SvCUR_set(bigstr, offset+len);
6094     }
6095
6096     SvTAINT(bigstr);
6097     i = littlelen - len;
6098     if (i > 0) {                        /* string might grow */
6099         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6100         mid = big + offset + len;
6101         midend = bigend = big + SvCUR(bigstr);
6102         bigend += i;
6103         *bigend = '\0';
6104         while (midend > mid)            /* shove everything down */
6105             *--bigend = *--midend;
6106         Move(little,big+offset,littlelen,char);
6107         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6108         SvSETMAGIC(bigstr);
6109         return;
6110     }
6111     else if (i == 0) {
6112         Move(little,SvPVX(bigstr)+offset,len,char);
6113         SvSETMAGIC(bigstr);
6114         return;
6115     }
6116
6117     big = SvPVX(bigstr);
6118     mid = big + offset;
6119     midend = mid + len;
6120     bigend = big + SvCUR(bigstr);
6121
6122     if (midend > bigend)
6123         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6124                    midend, bigend);
6125
6126     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6127         if (littlelen) {
6128             Move(little, mid, littlelen,char);
6129             mid += littlelen;
6130         }
6131         i = bigend - midend;
6132         if (i > 0) {
6133             Move(midend, mid, i,char);
6134             mid += i;
6135         }
6136         *mid = '\0';
6137         SvCUR_set(bigstr, mid - big);
6138     }
6139     else if ((i = mid - big)) { /* faster from front */
6140         midend -= littlelen;
6141         mid = midend;
6142         Move(big, midend - i, i, char);
6143         sv_chop(bigstr,midend-i);
6144         if (littlelen)
6145             Move(little, mid, littlelen,char);
6146     }
6147     else if (littlelen) {
6148         midend -= littlelen;
6149         sv_chop(bigstr,midend);
6150         Move(little,midend,littlelen,char);
6151     }
6152     else {
6153         sv_chop(bigstr,midend);
6154     }
6155     SvSETMAGIC(bigstr);
6156 }
6157
6158 /*
6159 =for apidoc sv_replace
6160
6161 Make the first argument a copy of the second, then delete the original.
6162 The target SV physically takes over ownership of the body of the source SV
6163 and inherits its flags; however, the target keeps any magic it owns,
6164 and any magic in the source is discarded.
6165 Note that this is a rather specialist SV copying operation; most of the
6166 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6167
6168 =cut
6169 */
6170
6171 void
6172 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6173 {
6174     const U32 refcnt = SvREFCNT(sv);
6175
6176     PERL_ARGS_ASSERT_SV_REPLACE;
6177
6178     SV_CHECK_THINKFIRST_COW_DROP(sv);
6179     if (SvREFCNT(nsv) != 1) {
6180         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6181                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6182     }
6183     if (SvMAGICAL(sv)) {
6184         if (SvMAGICAL(nsv))
6185             mg_free(nsv);
6186         else
6187             sv_upgrade(nsv, SVt_PVMG);
6188         SvMAGIC_set(nsv, SvMAGIC(sv));
6189         SvFLAGS(nsv) |= SvMAGICAL(sv);
6190         SvMAGICAL_off(sv);
6191         SvMAGIC_set(sv, NULL);
6192     }
6193     SvREFCNT(sv) = 0;
6194     sv_clear(sv);
6195     assert(!SvREFCNT(sv));
6196 #ifdef DEBUG_LEAKING_SCALARS
6197     sv->sv_flags  = nsv->sv_flags;
6198     sv->sv_any    = nsv->sv_any;
6199     sv->sv_refcnt = nsv->sv_refcnt;
6200     sv->sv_u      = nsv->sv_u;
6201 #else
6202     StructCopy(nsv,sv,SV);
6203 #endif
6204     if(SvTYPE(sv) == SVt_IV) {
6205         SvANY(sv)
6206             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6207     }
6208         
6209
6210 #ifdef PERL_OLD_COPY_ON_WRITE
6211     if (SvIsCOW_normal(nsv)) {
6212         /* We need to follow the pointers around the loop to make the
6213            previous SV point to sv, rather than nsv.  */
6214         SV *next;
6215         SV *current = nsv;
6216         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6217             assert(next);
6218             current = next;
6219             assert(SvPVX_const(current) == SvPVX_const(nsv));
6220         }
6221         /* Make the SV before us point to the SV after us.  */
6222         if (DEBUG_C_TEST) {
6223             PerlIO_printf(Perl_debug_log, "previous is\n");
6224             sv_dump(current);
6225             PerlIO_printf(Perl_debug_log,
6226                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6227                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6228         }
6229         SV_COW_NEXT_SV_SET(current, sv);
6230     }
6231 #endif
6232     SvREFCNT(sv) = refcnt;
6233     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6234     SvREFCNT(nsv) = 0;
6235     del_SV(nsv);
6236 }
6237
6238 /* We're about to free a GV which has a CV that refers back to us.
6239  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6240  * field) */
6241
6242 STATIC void
6243 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6244 {
6245     SV *gvname;
6246     GV *anongv;
6247
6248     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6249
6250     /* be assertive! */
6251     assert(SvREFCNT(gv) == 0);
6252     assert(isGV(gv) && isGV_with_GP(gv));
6253     assert(GvGP(gv));
6254     assert(!CvANON(cv));
6255     assert(CvGV(cv) == gv);
6256     assert(!CvNAMED(cv));
6257
6258     /* will the CV shortly be freed by gp_free() ? */
6259     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6260         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6261         return;
6262     }
6263
6264     /* if not, anonymise: */
6265     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6266                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6267                     : newSVpvn_flags( "__ANON__", 8, 0 );
6268     sv_catpvs(gvname, "::__ANON__");
6269     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6270     SvREFCNT_dec_NN(gvname);
6271
6272     CvANON_on(cv);
6273     CvCVGV_RC_on(cv);
6274     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6275 }
6276
6277
6278 /*
6279 =for apidoc sv_clear
6280
6281 Clear an SV: call any destructors, free up any memory used by the body,
6282 and free the body itself.  The SV's head is I<not> freed, although
6283 its type is set to all 1's so that it won't inadvertently be assumed
6284 to be live during global destruction etc.
6285 This function should only be called when REFCNT is zero.  Most of the time
6286 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6287 instead.
6288
6289 =cut
6290 */
6291
6292 void
6293 Perl_sv_clear(pTHX_ SV *const orig_sv)
6294 {
6295     dVAR;
6296     HV *stash;
6297     U32 type;
6298     const struct body_details *sv_type_details;
6299     SV* iter_sv = NULL;
6300     SV* next_sv = NULL;
6301     SV *sv = orig_sv;
6302     STRLEN hash_index;
6303
6304     PERL_ARGS_ASSERT_SV_CLEAR;
6305
6306     /* within this loop, sv is the SV currently being freed, and
6307      * iter_sv is the most recent AV or whatever that's being iterated
6308      * over to provide more SVs */
6309
6310     while (sv) {
6311
6312         type = SvTYPE(sv);
6313
6314         assert(SvREFCNT(sv) == 0);
6315         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6316
6317         if (type <= SVt_IV) {
6318             /* See the comment in sv.h about the collusion between this
6319              * early return and the overloading of the NULL slots in the
6320              * size table.  */
6321             if (SvROK(sv))
6322                 goto free_rv;
6323             SvFLAGS(sv) &= SVf_BREAK;
6324             SvFLAGS(sv) |= SVTYPEMASK;
6325             goto free_head;
6326         }
6327
6328         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6329
6330         if (type >= SVt_PVMG) {
6331             if (SvOBJECT(sv)) {
6332                 if (!curse(sv, 1)) goto get_next_sv;
6333                 type = SvTYPE(sv); /* destructor may have changed it */
6334             }
6335             /* Free back-references before magic, in case the magic calls
6336              * Perl code that has weak references to sv. */
6337             if (type == SVt_PVHV) {
6338                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6339                 if (SvMAGIC(sv))
6340                     mg_free(sv);
6341             }
6342             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6343                 SvREFCNT_dec(SvOURSTASH(sv));
6344             }
6345             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6346                 assert(!SvMAGICAL(sv));
6347             } else if (SvMAGIC(sv)) {
6348                 /* Free back-references before other types of magic. */
6349                 sv_unmagic(sv, PERL_MAGIC_backref);
6350                 mg_free(sv);
6351             }
6352             SvMAGICAL_off(sv);
6353             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6354                 SvREFCNT_dec(SvSTASH(sv));
6355         }
6356         switch (type) {
6357             /* case SVt_INVLIST: */
6358         case SVt_PVIO:
6359             if (IoIFP(sv) &&
6360                 IoIFP(sv) != PerlIO_stdin() &&
6361                 IoIFP(sv) != PerlIO_stdout() &&
6362                 IoIFP(sv) != PerlIO_stderr() &&
6363                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6364             {
6365                 io_close(MUTABLE_IO(sv), FALSE);
6366             }
6367             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6368                 PerlDir_close(IoDIRP(sv));
6369             IoDIRP(sv) = (DIR*)NULL;
6370             Safefree(IoTOP_NAME(sv));
6371             Safefree(IoFMT_NAME(sv));
6372             Safefree(IoBOTTOM_NAME(sv));
6373             if ((const GV *)sv == PL_statgv)
6374                 PL_statgv = NULL;
6375             goto freescalar;
6376         case SVt_REGEXP:
6377             /* FIXME for plugins */
6378           freeregexp:
6379             pregfree2((REGEXP*) sv);
6380             goto freescalar;
6381         case SVt_PVCV:
6382         case SVt_PVFM:
6383             cv_undef(MUTABLE_CV(sv));
6384             /* If we're in a stash, we don't own a reference to it.
6385              * However it does have a back reference to us, which needs to
6386              * be cleared.  */
6387             if ((stash = CvSTASH(sv)))
6388                 sv_del_backref(MUTABLE_SV(stash), sv);
6389             goto freescalar;
6390         case SVt_PVHV:
6391             if (PL_last_swash_hv == (const HV *)sv) {
6392                 PL_last_swash_hv = NULL;
6393             }
6394             if (HvTOTALKEYS((HV*)sv) > 0) {
6395                 const char *name;
6396                 /* this statement should match the one at the beginning of
6397                  * hv_undef_flags() */
6398                 if (   PL_phase != PERL_PHASE_DESTRUCT
6399                     && (name = HvNAME((HV*)sv)))
6400                 {
6401                     if (PL_stashcache) {
6402                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6403                                      SVfARG(sv)));
6404                         (void)hv_deletehek(PL_stashcache,
6405                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6406                     }
6407                     hv_name_set((HV*)sv, NULL, 0, 0);
6408                 }
6409
6410                 /* save old iter_sv in unused SvSTASH field */
6411                 assert(!SvOBJECT(sv));
6412                 SvSTASH(sv) = (HV*)iter_sv;
6413                 iter_sv = sv;
6414
6415                 /* save old hash_index in unused SvMAGIC field */
6416                 assert(!SvMAGICAL(sv));
6417                 assert(!SvMAGIC(sv));
6418                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6419                 hash_index = 0;
6420
6421                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6422                 goto get_next_sv; /* process this new sv */
6423             }
6424             /* free empty hash */
6425             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6426             assert(!HvARRAY((HV*)sv));
6427             break;
6428         case SVt_PVAV:
6429             {
6430                 AV* av = MUTABLE_AV(sv);
6431                 if (PL_comppad == av) {
6432                     PL_comppad = NULL;
6433                     PL_curpad = NULL;
6434                 }
6435                 if (AvREAL(av) && AvFILLp(av) > -1) {
6436                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6437                     /* save old iter_sv in top-most slot of AV,
6438                      * and pray that it doesn't get wiped in the meantime */
6439                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6440                     iter_sv = sv;
6441                     goto get_next_sv; /* process this new sv */
6442                 }
6443                 Safefree(AvALLOC(av));
6444             }
6445
6446             break;
6447         case SVt_PVLV:
6448             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6449                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6450                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6451                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6452             }
6453             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6454                 SvREFCNT_dec(LvTARG(sv));
6455             if (isREGEXP(sv)) goto freeregexp;
6456         case SVt_PVGV:
6457             if (isGV_with_GP(sv)) {
6458                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6459                    && HvENAME_get(stash))
6460                     mro_method_changed_in(stash);
6461                 gp_free(MUTABLE_GV(sv));
6462                 if (GvNAME_HEK(sv))
6463                     unshare_hek(GvNAME_HEK(sv));
6464                 /* If we're in a stash, we don't own a reference to it.
6465                  * However it does have a back reference to us, which
6466                  * needs to be cleared.  */
6467                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6468                         sv_del_backref(MUTABLE_SV(stash), sv);
6469             }
6470             /* FIXME. There are probably more unreferenced pointers to SVs
6471              * in the interpreter struct that we should check and tidy in
6472              * a similar fashion to this:  */
6473             /* See also S_sv_unglob, which does the same thing. */
6474             if ((const GV *)sv == PL_last_in_gv)
6475                 PL_last_in_gv = NULL;
6476             else if ((const GV *)sv == PL_statgv)
6477                 PL_statgv = NULL;
6478             else if ((const GV *)sv == PL_stderrgv)
6479                 PL_stderrgv = NULL;
6480         case SVt_PVMG:
6481         case SVt_PVNV:
6482         case SVt_PVIV:
6483         case SVt_INVLIST:
6484         case SVt_PV:
6485           freescalar:
6486             /* Don't bother with SvOOK_off(sv); as we're only going to
6487              * free it.  */
6488             if (SvOOK(sv)) {
6489                 STRLEN offset;
6490                 SvOOK_offset(sv, offset);
6491                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6492                 /* Don't even bother with turning off the OOK flag.  */
6493             }
6494             if (SvROK(sv)) {
6495             free_rv:
6496                 {
6497                     SV * const target = SvRV(sv);
6498                     if (SvWEAKREF(sv))
6499                         sv_del_backref(target, sv);
6500                     else
6501                         next_sv = target;
6502                 }
6503             }
6504 #ifdef PERL_ANY_COW
6505             else if (SvPVX_const(sv)
6506                      && !(SvTYPE(sv) == SVt_PVIO
6507                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6508             {
6509                 if (SvIsCOW(sv)) {
6510                     if (DEBUG_C_TEST) {
6511                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6512                         sv_dump(sv);
6513                     }
6514                     if (SvLEN(sv)) {
6515 # ifdef PERL_OLD_COPY_ON_WRITE
6516                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6517 # else
6518                         if (CowREFCNT(sv)) {
6519                             sv_buf_to_rw(sv);
6520                             CowREFCNT(sv)--;
6521                             sv_buf_to_ro(sv);
6522                             SvLEN_set(sv, 0);
6523                         }
6524 # endif
6525                     } else {
6526                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6527                     }
6528
6529                 }
6530 # ifdef PERL_OLD_COPY_ON_WRITE
6531                 else
6532 # endif
6533                 if (SvLEN(sv)) {
6534                     Safefree(SvPVX_mutable(sv));
6535                 }
6536             }
6537 #else
6538             else if (SvPVX_const(sv) && SvLEN(sv)
6539                      && !(SvTYPE(sv) == SVt_PVIO
6540                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6541                 Safefree(SvPVX_mutable(sv));
6542             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6543                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6544             }
6545 #endif
6546             break;
6547         case SVt_NV:
6548             break;
6549         }
6550
6551       free_body:
6552
6553         SvFLAGS(sv) &= SVf_BREAK;
6554         SvFLAGS(sv) |= SVTYPEMASK;
6555
6556         sv_type_details = bodies_by_type + type;
6557         if (sv_type_details->arena) {
6558             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6559                      &PL_body_roots[type]);
6560         }
6561         else if (sv_type_details->body_size) {
6562             safefree(SvANY(sv));
6563         }
6564
6565       free_head:
6566         /* caller is responsible for freeing the head of the original sv */
6567         if (sv != orig_sv && !SvREFCNT(sv))
6568             del_SV(sv);
6569
6570         /* grab and free next sv, if any */
6571       get_next_sv:
6572         while (1) {
6573             sv = NULL;
6574             if (next_sv) {
6575                 sv = next_sv;
6576                 next_sv = NULL;
6577             }
6578             else if (!iter_sv) {
6579                 break;
6580             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6581                 AV *const av = (AV*)iter_sv;
6582                 if (AvFILLp(av) > -1) {
6583                     sv = AvARRAY(av)[AvFILLp(av)--];
6584                 }
6585                 else { /* no more elements of current AV to free */
6586                     sv = iter_sv;
6587                     type = SvTYPE(sv);
6588                     /* restore previous value, squirrelled away */
6589                     iter_sv = AvARRAY(av)[AvMAX(av)];
6590                     Safefree(AvALLOC(av));
6591                     goto free_body;
6592                 }
6593             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6594                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6595                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6596                     /* no more elements of current HV to free */
6597                     sv = iter_sv;
6598                     type = SvTYPE(sv);
6599                     /* Restore previous values of iter_sv and hash_index,
6600                      * squirrelled away */
6601                     assert(!SvOBJECT(sv));
6602                     iter_sv = (SV*)SvSTASH(sv);
6603                     assert(!SvMAGICAL(sv));
6604                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6605 #ifdef DEBUGGING
6606                     /* perl -DA does not like rubbish in SvMAGIC. */
6607                     SvMAGIC_set(sv, 0);
6608 #endif
6609
6610                     /* free any remaining detritus from the hash struct */
6611                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6612                     assert(!HvARRAY((HV*)sv));
6613                     goto free_body;
6614                 }
6615             }
6616
6617             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6618
6619             if (!sv)
6620                 continue;
6621             if (!SvREFCNT(sv)) {
6622                 sv_free(sv);
6623                 continue;
6624             }
6625             if (--(SvREFCNT(sv)))
6626                 continue;
6627 #ifdef DEBUGGING
6628             if (SvTEMP(sv)) {
6629                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6630                          "Attempt to free temp prematurely: SV 0x%"UVxf
6631                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6632                 continue;
6633             }
6634 #endif
6635             if (SvIMMORTAL(sv)) {
6636                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6637                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6638                 continue;
6639             }
6640             break;
6641         } /* while 1 */
6642
6643     } /* while sv */
6644 }
6645
6646 /* This routine curses the sv itself, not the object referenced by sv. So
6647    sv does not have to be ROK. */
6648
6649 static bool
6650 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6651     PERL_ARGS_ASSERT_CURSE;
6652     assert(SvOBJECT(sv));
6653
6654     if (PL_defstash &&  /* Still have a symbol table? */
6655         SvDESTROYABLE(sv))
6656     {
6657         dSP;
6658         HV* stash;
6659         do {
6660           stash = SvSTASH(sv);
6661           assert(SvTYPE(stash) == SVt_PVHV);
6662           if (HvNAME(stash)) {
6663             CV* destructor = NULL;
6664             assert (SvOOK(stash));
6665             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6666             if (!destructor || HvMROMETA(stash)->destroy_gen
6667                                 != PL_sub_generation)
6668             {
6669                 GV * const gv =
6670                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6671                 if (gv) destructor = GvCV(gv);
6672                 if (!SvOBJECT(stash))
6673                 {
6674                     SvSTASH(stash) =
6675                         destructor ? (HV *)destructor : ((HV *)0)+1;
6676                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6677                         PL_sub_generation;
6678                 }
6679             }
6680             assert(!destructor || destructor == ((CV *)0)+1
6681                 || SvTYPE(destructor) == SVt_PVCV);
6682             if (destructor && destructor != ((CV *)0)+1
6683                 /* A constant subroutine can have no side effects, so
6684                    don't bother calling it.  */
6685                 && !CvCONST(destructor)
6686                 /* Don't bother calling an empty destructor or one that
6687                    returns immediately. */
6688                 && (CvISXSUB(destructor)
6689                 || (CvSTART(destructor)
6690                     && (CvSTART(destructor)->op_next->op_type
6691                                         != OP_LEAVESUB)
6692                     && (CvSTART(destructor)->op_next->op_type
6693                                         != OP_PUSHMARK
6694                         || CvSTART(destructor)->op_next->op_next->op_type
6695                                         != OP_RETURN
6696                        )
6697                    ))
6698                )
6699             {
6700                 SV* const tmpref = newRV(sv);
6701                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6702                 ENTER;
6703                 PUSHSTACKi(PERLSI_DESTROY);
6704                 EXTEND(SP, 2);
6705                 PUSHMARK(SP);
6706                 PUSHs(tmpref);
6707                 PUTBACK;
6708                 call_sv(MUTABLE_SV(destructor),
6709                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6710                 POPSTACK;
6711                 SPAGAIN;
6712                 LEAVE;
6713                 if(SvREFCNT(tmpref) < 2) {
6714                     /* tmpref is not kept alive! */
6715                     SvREFCNT(sv)--;
6716                     SvRV_set(tmpref, NULL);
6717                     SvROK_off(tmpref);
6718                 }
6719                 SvREFCNT_dec_NN(tmpref);
6720             }
6721           }
6722         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6723
6724
6725         if (check_refcnt && SvREFCNT(sv)) {
6726             if (PL_in_clean_objs)
6727                 Perl_croak(aTHX_
6728                   "DESTROY created new reference to dead object '%"HEKf"'",
6729                    HEKfARG(HvNAME_HEK(stash)));
6730             /* DESTROY gave object new lease on life */
6731             return FALSE;
6732         }
6733     }
6734
6735     if (SvOBJECT(sv)) {
6736         HV * const stash = SvSTASH(sv);
6737         /* Curse before freeing the stash, as freeing the stash could cause
6738            a recursive call into S_curse. */
6739         SvOBJECT_off(sv);       /* Curse the object. */
6740         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6741         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6742     }
6743     return TRUE;
6744 }
6745
6746 /*
6747 =for apidoc sv_newref
6748
6749 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6750 instead.
6751
6752 =cut
6753 */
6754
6755 SV *
6756 Perl_sv_newref(pTHX_ SV *const sv)
6757 {
6758     PERL_UNUSED_CONTEXT;
6759     if (sv)
6760         (SvREFCNT(sv))++;
6761     return sv;
6762 }
6763
6764 /*
6765 =for apidoc sv_free
6766
6767 Decrement an SV's reference count, and if it drops to zero, call
6768 C<sv_clear> to invoke destructors and free up any memory used by
6769 the body; finally, deallocate the SV's head itself.
6770 Normally called via a wrapper macro C<SvREFCNT_dec>.
6771
6772 =cut
6773 */
6774
6775 void
6776 Perl_sv_free(pTHX_ SV *const sv)
6777 {
6778     SvREFCNT_dec(sv);
6779 }
6780
6781
6782 /* Private helper function for SvREFCNT_dec().
6783  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6784
6785 void
6786 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6787 {
6788     dVAR;
6789
6790     PERL_ARGS_ASSERT_SV_FREE2;
6791
6792     if (LIKELY( rc == 1 )) {
6793         /* normal case */
6794         SvREFCNT(sv) = 0;
6795
6796 #ifdef DEBUGGING
6797         if (SvTEMP(sv)) {
6798             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6799                              "Attempt to free temp prematurely: SV 0x%"UVxf
6800                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6801             return;
6802         }
6803 #endif
6804         if (SvIMMORTAL(sv)) {
6805             /* make sure SvREFCNT(sv)==0 happens very seldom */
6806             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6807             return;
6808         }
6809         sv_clear(sv);
6810         if (! SvREFCNT(sv)) /* may have have been resurrected */
6811             del_SV(sv);
6812         return;
6813     }
6814
6815     /* handle exceptional cases */
6816
6817     assert(rc == 0);
6818
6819     if (SvFLAGS(sv) & SVf_BREAK)
6820         /* this SV's refcnt has been artificially decremented to
6821          * trigger cleanup */
6822         return;
6823     if (PL_in_clean_all) /* All is fair */
6824         return;
6825     if (SvIMMORTAL(sv)) {
6826         /* make sure SvREFCNT(sv)==0 happens very seldom */
6827         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6828         return;
6829     }
6830     if (ckWARN_d(WARN_INTERNAL)) {
6831 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6832         Perl_dump_sv_child(aTHX_ sv);
6833 #else
6834     #ifdef DEBUG_LEAKING_SCALARS
6835         sv_dump(sv);
6836     #endif
6837 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6838         if (PL_warnhook == PERL_WARNHOOK_FATAL
6839             || ckDEAD(packWARN(WARN_INTERNAL))) {
6840             /* Don't let Perl_warner cause us to escape our fate:  */
6841             abort();
6842         }
6843 #endif
6844         /* This may not return:  */
6845         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6846                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6847                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6848 #endif
6849     }
6850 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6851     abort();
6852 #endif
6853
6854 }
6855
6856
6857 /*
6858 =for apidoc sv_len
6859
6860 Returns the length of the string in the SV.  Handles magic and type
6861 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6862 gives raw access to the xpv_cur slot.
6863
6864 =cut
6865 */
6866
6867 STRLEN
6868 Perl_sv_len(pTHX_ SV *const sv)
6869 {
6870     STRLEN len;
6871
6872     if (!sv)
6873         return 0;
6874
6875     (void)SvPV_const(sv, len);
6876     return len;
6877 }
6878
6879 /*
6880 =for apidoc sv_len_utf8
6881
6882 Returns the number of characters in the string in an SV, counting wide
6883 UTF-8 bytes as a single character.  Handles magic and type coercion.
6884
6885 =cut
6886 */
6887
6888 /*
6889  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6890  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6891  * (Note that the mg_len is not the length of the mg_ptr field.
6892  * This allows the cache to store the character length of the string without
6893  * needing to malloc() extra storage to attach to the mg_ptr.)
6894  *
6895  */
6896
6897 STRLEN
6898 Perl_sv_len_utf8(pTHX_ SV *const sv)
6899 {
6900     if (!sv)
6901         return 0;
6902
6903     SvGETMAGIC(sv);
6904     return sv_len_utf8_nomg(sv);
6905 }
6906
6907 STRLEN
6908 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6909 {
6910     STRLEN len;
6911     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6912
6913     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6914
6915     if (PL_utf8cache && SvUTF8(sv)) {
6916             STRLEN ulen;
6917             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6918
6919             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6920                 if (mg->mg_len != -1)
6921                     ulen = mg->mg_len;
6922                 else {
6923                     /* We can use the offset cache for a headstart.
6924                        The longer value is stored in the first pair.  */
6925                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6926
6927                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6928                                                        s + len);
6929                 }
6930                 
6931                 if (PL_utf8cache < 0) {
6932                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6933                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6934                 }
6935             }
6936             else {
6937                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6938                 utf8_mg_len_cache_update(sv, &mg, ulen);
6939             }
6940             return ulen;
6941     }
6942     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6943 }
6944
6945 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6946    offset.  */
6947 static STRLEN
6948 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6949                       STRLEN *const uoffset_p, bool *const at_end)
6950 {
6951     const U8 *s = start;
6952     STRLEN uoffset = *uoffset_p;
6953
6954     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6955
6956     while (s < send && uoffset) {
6957         --uoffset;
6958         s += UTF8SKIP(s);
6959     }
6960     if (s == send) {
6961         *at_end = TRUE;
6962     }
6963     else if (s > send) {
6964         *at_end = TRUE;
6965         /* This is the existing behaviour. Possibly it should be a croak, as
6966            it's actually a bounds error  */
6967         s = send;
6968     }
6969     *uoffset_p -= uoffset;
6970     return s - start;
6971 }
6972
6973 /* Given the length of the string in both bytes and UTF-8 characters, decide
6974    whether to walk forwards or backwards to find the byte corresponding to
6975    the passed in UTF-8 offset.  */
6976 static STRLEN
6977 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6978                     STRLEN uoffset, const STRLEN uend)
6979 {
6980     STRLEN backw = uend - uoffset;
6981
6982     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6983
6984     if (uoffset < 2 * backw) {
6985         /* The assumption is that going forwards is twice the speed of going
6986            forward (that's where the 2 * backw comes from).
6987            (The real figure of course depends on the UTF-8 data.)  */
6988         const U8 *s = start;
6989
6990         while (s < send && uoffset--)
6991             s += UTF8SKIP(s);
6992         assert (s <= send);
6993         if (s > send)
6994             s = send;
6995         return s - start;
6996     }
6997
6998     while (backw--) {
6999         send--;
7000         while (UTF8_IS_CONTINUATION(*send))
7001             send--;
7002     }
7003     return send - start;
7004 }
7005
7006 /* For the string representation of the given scalar, find the byte
7007    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7008    give another position in the string, *before* the sought offset, which
7009    (which is always true, as 0, 0 is a valid pair of positions), which should
7010    help reduce the amount of linear searching.
7011    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7012    will be used to reduce the amount of linear searching. The cache will be
7013    created if necessary, and the found value offered to it for update.  */
7014 static STRLEN
7015 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7016                     const U8 *const send, STRLEN uoffset,
7017                     STRLEN uoffset0, STRLEN boffset0)
7018 {
7019     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7020     bool found = FALSE;
7021     bool at_end = FALSE;
7022
7023     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7024
7025     assert (uoffset >= uoffset0);
7026
7027     if (!uoffset)
7028         return 0;
7029
7030     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7031         && PL_utf8cache
7032         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7033                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7034         if ((*mgp)->mg_ptr) {
7035             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7036             if (cache[0] == uoffset) {
7037                 /* An exact match. */
7038                 return cache[1];
7039             }
7040             if (cache[2] == uoffset) {
7041                 /* An exact match. */
7042                 return cache[3];
7043             }
7044
7045             if (cache[0] < uoffset) {
7046                 /* The cache already knows part of the way.   */
7047                 if (cache[0] > uoffset0) {
7048                     /* The cache knows more than the passed in pair  */
7049                     uoffset0 = cache[0];
7050                     boffset0 = cache[1];
7051                 }
7052                 if ((*mgp)->mg_len != -1) {
7053                     /* And we know the end too.  */
7054                     boffset = boffset0
7055                         + sv_pos_u2b_midway(start + boffset0, send,
7056                                               uoffset - uoffset0,
7057                                               (*mgp)->mg_len - uoffset0);
7058                 } else {
7059                     uoffset -= uoffset0;
7060                     boffset = boffset0
7061                         + sv_pos_u2b_forwards(start + boffset0,
7062                                               send, &uoffset, &at_end);
7063                     uoffset += uoffset0;
7064                 }
7065             }
7066             else if (cache[2] < uoffset) {
7067                 /* We're between the two cache entries.  */
7068                 if (cache[2] > uoffset0) {
7069                     /* and the cache knows more than the passed in pair  */
7070                     uoffset0 = cache[2];
7071                     boffset0 = cache[3];
7072                 }
7073
7074                 boffset = boffset0
7075                     + sv_pos_u2b_midway(start + boffset0,
7076                                           start + cache[1],
7077                                           uoffset - uoffset0,
7078                                           cache[0] - uoffset0);
7079             } else {
7080                 boffset = boffset0
7081                     + sv_pos_u2b_midway(start + boffset0,
7082                                           start + cache[3],
7083                                           uoffset - uoffset0,
7084                                           cache[2] - uoffset0);
7085             }
7086             found = TRUE;
7087         }
7088         else if ((*mgp)->mg_len != -1) {
7089             /* If we can take advantage of a passed in offset, do so.  */
7090             /* In fact, offset0 is either 0, or less than offset, so don't
7091                need to worry about the other possibility.  */
7092             boffset = boffset0
7093                 + sv_pos_u2b_midway(start + boffset0, send,
7094                                       uoffset - uoffset0,
7095                                       (*mgp)->mg_len - uoffset0);
7096             found = TRUE;
7097         }
7098     }
7099
7100     if (!found || PL_utf8cache < 0) {
7101         STRLEN real_boffset;
7102         uoffset -= uoffset0;
7103         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7104                                                       send, &uoffset, &at_end);
7105         uoffset += uoffset0;
7106
7107         if (found && PL_utf8cache < 0)
7108             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7109                                        real_boffset, sv);
7110         boffset = real_boffset;
7111     }
7112
7113     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7114         if (at_end)
7115             utf8_mg_len_cache_update(sv, mgp, uoffset);
7116         else
7117             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7118     }
7119     return boffset;
7120 }
7121
7122
7123 /*
7124 =for apidoc sv_pos_u2b_flags
7125
7126 Converts the offset from a count of UTF-8 chars from
7127 the start of the string, to a count of the equivalent number of bytes; if
7128 lenp is non-zero, it does the same to lenp, but this time starting from
7129 the offset, rather than from the start
7130 of the string.  Handles type coercion.
7131 I<flags> is passed to C<SvPV_flags>, and usually should be
7132 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7133
7134 =cut
7135 */
7136
7137 /*
7138  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7139  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7140  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7141  *
7142  */
7143
7144 STRLEN
7145 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7146                       U32 flags)
7147 {
7148     const U8 *start;
7149     STRLEN len;
7150     STRLEN boffset;
7151
7152     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7153
7154     start = (U8*)SvPV_flags(sv, len, flags);
7155     if (len) {
7156         const U8 * const send = start + len;
7157         MAGIC *mg = NULL;
7158         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7159
7160         if (lenp
7161             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7162                         is 0, and *lenp is already set to that.  */) {
7163             /* Convert the relative offset to absolute.  */
7164             const STRLEN uoffset2 = uoffset + *lenp;
7165             const STRLEN boffset2
7166                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7167                                       uoffset, boffset) - boffset;
7168
7169             *lenp = boffset2;
7170         }
7171     } else {
7172         if (lenp)
7173             *lenp = 0;
7174         boffset = 0;
7175     }
7176
7177     return boffset;
7178 }
7179
7180 /*
7181 =for apidoc sv_pos_u2b
7182
7183 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7184 the start of the string, to a count of the equivalent number of bytes; if
7185 lenp is non-zero, it does the same to lenp, but this time starting from
7186 the offset, rather than from the start of the string.  Handles magic and
7187 type coercion.
7188
7189 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7190 than 2Gb.
7191
7192 =cut
7193 */
7194
7195 /*
7196  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7197  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7198  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7199  *
7200  */
7201
7202 /* This function is subject to size and sign problems */
7203
7204 void
7205 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7206 {
7207     PERL_ARGS_ASSERT_SV_POS_U2B;
7208
7209     if (lenp) {
7210         STRLEN ulen = (STRLEN)*lenp;
7211         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7212                                          SV_GMAGIC|SV_CONST_RETURN);
7213         *lenp = (I32)ulen;
7214     } else {
7215         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7216                                          SV_GMAGIC|SV_CONST_RETURN);
7217     }
7218 }
7219
7220 static void
7221 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7222                            const STRLEN ulen)
7223 {
7224     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7225     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7226         return;
7227
7228     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7229                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7230         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7231     }
7232     assert(*mgp);
7233
7234     (*mgp)->mg_len = ulen;
7235 }
7236
7237 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7238    byte length pairing. The (byte) length of the total SV is passed in too,
7239    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7240    may not have updated SvCUR, so we can't rely on reading it directly.
7241
7242    The proffered utf8/byte length pairing isn't used if the cache already has
7243    two pairs, and swapping either for the proffered pair would increase the
7244    RMS of the intervals between known byte offsets.
7245
7246    The cache itself consists of 4 STRLEN values
7247    0: larger UTF-8 offset
7248    1: corresponding byte offset
7249    2: smaller UTF-8 offset
7250    3: corresponding byte offset
7251
7252    Unused cache pairs have the value 0, 0.
7253    Keeping the cache "backwards" means that the invariant of
7254    cache[0] >= cache[2] is maintained even with empty slots, which means that
7255    the code that uses it doesn't need to worry if only 1 entry has actually
7256    been set to non-zero.  It also makes the "position beyond the end of the
7257    cache" logic much simpler, as the first slot is always the one to start
7258    from.   
7259 */
7260 static void
7261 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7262                            const STRLEN utf8, const STRLEN blen)
7263 {
7264     STRLEN *cache;
7265
7266     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7267
7268     if (SvREADONLY(sv))
7269         return;
7270
7271     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7272                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7273         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7274                            0);
7275         (*mgp)->mg_len = -1;
7276     }
7277     assert(*mgp);
7278
7279     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7280         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7281         (*mgp)->mg_ptr = (char *) cache;
7282     }
7283     assert(cache);
7284
7285     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7286         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7287            a pointer.  Note that we no longer cache utf8 offsets on refer-
7288            ences, but this check is still a good idea, for robustness.  */
7289         const U8 *start = (const U8 *) SvPVX_const(sv);
7290         const STRLEN realutf8 = utf8_length(start, start + byte);
7291
7292         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7293                                    sv);
7294     }
7295
7296     /* Cache is held with the later position first, to simplify the code
7297        that deals with unbounded ends.  */
7298        
7299     ASSERT_UTF8_CACHE(cache);
7300     if (cache[1] == 0) {
7301         /* Cache is totally empty  */
7302         cache[0] = utf8;
7303         cache[1] = byte;
7304     } else if (cache[3] == 0) {
7305         if (byte > cache[1]) {
7306             /* New one is larger, so goes first.  */
7307             cache[2] = cache[0];
7308             cache[3] = cache[1];
7309             cache[0] = utf8;
7310             cache[1] = byte;
7311         } else {
7312             cache[2] = utf8;
7313             cache[3] = byte;
7314         }
7315     } else {
7316 #define THREEWAY_SQUARE(a,b,c,d) \
7317             ((float)((d) - (c))) * ((float)((d) - (c))) \
7318             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7319                + ((float)((b) - (a))) * ((float)((b) - (a)))
7320
7321         /* Cache has 2 slots in use, and we know three potential pairs.
7322            Keep the two that give the lowest RMS distance. Do the
7323            calculation in bytes simply because we always know the byte
7324            length.  squareroot has the same ordering as the positive value,
7325            so don't bother with the actual square root.  */
7326         if (byte > cache[1]) {
7327             /* New position is after the existing pair of pairs.  */
7328             const float keep_earlier
7329                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7330             const float keep_later
7331                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7332
7333             if (keep_later < keep_earlier) {
7334                 cache[2] = cache[0];
7335                 cache[3] = cache[1];
7336                 cache[0] = utf8;
7337                 cache[1] = byte;
7338             }
7339             else {
7340                 cache[0] = utf8;
7341                 cache[1] = byte;
7342             }
7343         }
7344         else if (byte > cache[3]) {
7345             /* New position is between the existing pair of pairs.  */
7346             const float keep_earlier
7347                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7348             const float keep_later
7349                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7350
7351             if (keep_later < keep_earlier) {
7352                 cache[2] = utf8;
7353                 cache[3] = byte;
7354             }
7355             else {
7356                 cache[0] = utf8;
7357                 cache[1] = byte;
7358             }
7359         }
7360         else {
7361             /* New position is before the existing pair of pairs.  */
7362             const float keep_earlier
7363                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7364             const float keep_later
7365                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7366
7367             if (keep_later < keep_earlier) {
7368                 cache[2] = utf8;
7369                 cache[3] = byte;
7370             }
7371             else {
7372                 cache[0] = cache[2];
7373                 cache[1] = cache[3];
7374                 cache[2] = utf8;
7375                 cache[3] = byte;
7376             }
7377         }
7378     }
7379     ASSERT_UTF8_CACHE(cache);
7380 }
7381
7382 /* We already know all of the way, now we may be able to walk back.  The same
7383    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7384    backward is half the speed of walking forward. */
7385 static STRLEN
7386 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7387                     const U8 *end, STRLEN endu)
7388 {
7389     const STRLEN forw = target - s;
7390     STRLEN backw = end - target;
7391
7392     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7393
7394     if (forw < 2 * backw) {
7395         return utf8_length(s, target);
7396     }
7397
7398     while (end > target) {
7399         end--;
7400         while (UTF8_IS_CONTINUATION(*end)) {
7401             end--;
7402         }
7403         endu--;
7404     }
7405     return endu;
7406 }
7407
7408 /*
7409 =for apidoc sv_pos_b2u_flags
7410
7411 Converts the offset from a count of bytes from the start of the string, to
7412 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7413 I<flags> is passed to C<SvPV_flags>, and usually should be
7414 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7415
7416 =cut
7417 */
7418
7419 /*
7420  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7421  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7422  * and byte offsets.
7423  *
7424  */
7425 STRLEN
7426 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7427 {
7428     const U8* s;
7429     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7430     STRLEN blen;
7431     MAGIC* mg = NULL;
7432     const U8* send;
7433     bool found = FALSE;
7434
7435     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7436
7437     s = (const U8*)SvPV_flags(sv, blen, flags);
7438
7439     if (blen < offset)
7440         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7441                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7442
7443     send = s + offset;
7444
7445     if (!SvREADONLY(sv)
7446         && PL_utf8cache
7447         && SvTYPE(sv) >= SVt_PVMG
7448         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7449     {
7450         if (mg->mg_ptr) {
7451             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7452             if (cache[1] == offset) {
7453                 /* An exact match. */
7454                 return cache[0];
7455             }
7456             if (cache[3] == offset) {
7457                 /* An exact match. */
7458                 return cache[2];
7459             }
7460
7461             if (cache[1] < offset) {
7462                 /* We already know part of the way. */
7463                 if (mg->mg_len != -1) {
7464                     /* Actually, we know the end too.  */
7465                     len = cache[0]
7466                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7467                                               s + blen, mg->mg_len - cache[0]);
7468                 } else {
7469                     len = cache[0] + utf8_length(s + cache[1], send);
7470                 }
7471             }
7472             else if (cache[3] < offset) {
7473                 /* We're between the two cached pairs, so we do the calculation
7474                    offset by the byte/utf-8 positions for the earlier pair,
7475                    then add the utf-8 characters from the string start to
7476                    there.  */
7477                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7478                                           s + cache[1], cache[0] - cache[2])
7479                     + cache[2];
7480
7481             }
7482             else { /* cache[3] > offset */
7483                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7484                                           cache[2]);
7485
7486             }
7487             ASSERT_UTF8_CACHE(cache);
7488             found = TRUE;
7489         } else if (mg->mg_len != -1) {
7490             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7491             found = TRUE;
7492         }
7493     }
7494     if (!found || PL_utf8cache < 0) {
7495         const STRLEN real_len = utf8_length(s, send);
7496
7497         if (found && PL_utf8cache < 0)
7498             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7499         len = real_len;
7500     }
7501
7502     if (PL_utf8cache) {
7503         if (blen == offset)
7504             utf8_mg_len_cache_update(sv, &mg, len);
7505         else
7506             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7507     }
7508
7509     return len;
7510 }
7511
7512 /*
7513 =for apidoc sv_pos_b2u
7514
7515 Converts the value pointed to by offsetp from a count of bytes from the
7516 start of the string, to a count of the equivalent number of UTF-8 chars.
7517 Handles magic and type coercion.
7518
7519 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7520 longer than 2Gb.
7521
7522 =cut
7523 */
7524
7525 /*
7526  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7527  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7528  * byte offsets.
7529  *
7530  */
7531 void
7532 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7533 {
7534     PERL_ARGS_ASSERT_SV_POS_B2U;
7535
7536     if (!sv)
7537         return;
7538
7539     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7540                                      SV_GMAGIC|SV_CONST_RETURN);
7541 }
7542
7543 static void
7544 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7545                              STRLEN real, SV *const sv)
7546 {
7547     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7548
7549     /* As this is debugging only code, save space by keeping this test here,
7550        rather than inlining it in all the callers.  */
7551     if (from_cache == real)
7552         return;
7553
7554     /* Need to turn the assertions off otherwise we may recurse infinitely
7555        while printing error messages.  */
7556     SAVEI8(PL_utf8cache);
7557     PL_utf8cache = 0;
7558     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7559                func, (UV) from_cache, (UV) real, SVfARG(sv));
7560 }
7561
7562 /*
7563 =for apidoc sv_eq
7564
7565 Returns a boolean indicating whether the strings in the two SVs are
7566 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7567 coerce its args to strings if necessary.
7568
7569 =for apidoc sv_eq_flags
7570
7571 Returns a boolean indicating whether the strings in the two SVs are
7572 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7573 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7574
7575 =cut
7576 */
7577
7578 I32
7579 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7580 {
7581     const char *pv1;
7582     STRLEN cur1;
7583     const char *pv2;
7584     STRLEN cur2;
7585     I32  eq     = 0;
7586     SV* svrecode = NULL;
7587
7588     if (!sv1) {
7589         pv1 = "";
7590         cur1 = 0;
7591     }
7592     else {
7593         /* if pv1 and pv2 are the same, second SvPV_const call may
7594          * invalidate pv1 (if we are handling magic), so we may need to
7595          * make a copy */
7596         if (sv1 == sv2 && flags & SV_GMAGIC
7597          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7598             pv1 = SvPV_const(sv1, cur1);
7599             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7600         }
7601         pv1 = SvPV_flags_const(sv1, cur1, flags);
7602     }
7603
7604     if (!sv2){
7605         pv2 = "";
7606         cur2 = 0;
7607     }
7608     else
7609         pv2 = SvPV_flags_const(sv2, cur2, flags);
7610
7611     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7612         /* Differing utf8ness.
7613          * Do not UTF8size the comparands as a side-effect. */
7614          if (PL_encoding) {
7615               if (SvUTF8(sv1)) {
7616                    svrecode = newSVpvn(pv2, cur2);
7617                    sv_recode_to_utf8(svrecode, PL_encoding);
7618                    pv2 = SvPV_const(svrecode, cur2);
7619               }
7620               else {
7621                    svrecode = newSVpvn(pv1, cur1);
7622                    sv_recode_to_utf8(svrecode, PL_encoding);
7623                    pv1 = SvPV_const(svrecode, cur1);
7624               }
7625               /* Now both are in UTF-8. */
7626               if (cur1 != cur2) {
7627                    SvREFCNT_dec_NN(svrecode);
7628                    return FALSE;
7629               }
7630          }
7631          else {
7632               if (SvUTF8(sv1)) {
7633                   /* sv1 is the UTF-8 one  */
7634                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7635                                         (const U8*)pv1, cur1) == 0;
7636               }
7637               else {
7638                   /* sv2 is the UTF-8 one  */
7639                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7640                                         (const U8*)pv2, cur2) == 0;
7641               }
7642          }
7643     }
7644
7645     if (cur1 == cur2)
7646         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7647         
7648     SvREFCNT_dec(svrecode);
7649
7650     return eq;
7651 }
7652
7653 /*
7654 =for apidoc sv_cmp
7655
7656 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7657 string in C<sv1> is less than, equal to, or greater than the string in
7658 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7659 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7660
7661 =for apidoc sv_cmp_flags
7662
7663 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7664 string in C<sv1> is less than, equal to, or greater than the string in
7665 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7666 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7667 also C<sv_cmp_locale_flags>.
7668
7669 =cut
7670 */
7671
7672 I32
7673 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7674 {
7675     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7676 }
7677
7678 I32
7679 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7680                   const U32 flags)
7681 {
7682     STRLEN cur1, cur2;
7683     const char *pv1, *pv2;
7684     I32  cmp;
7685     SV *svrecode = NULL;
7686
7687     if (!sv1) {
7688         pv1 = "";
7689         cur1 = 0;
7690     }
7691     else
7692         pv1 = SvPV_flags_const(sv1, cur1, flags);
7693
7694     if (!sv2) {
7695         pv2 = "";
7696         cur2 = 0;
7697     }
7698     else
7699         pv2 = SvPV_flags_const(sv2, cur2, flags);
7700
7701     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7702         /* Differing utf8ness.
7703          * Do not UTF8size the comparands as a side-effect. */
7704         if (SvUTF8(sv1)) {
7705             if (PL_encoding) {
7706                  svrecode = newSVpvn(pv2, cur2);
7707                  sv_recode_to_utf8(svrecode, PL_encoding);
7708                  pv2 = SvPV_const(svrecode, cur2);
7709             }
7710             else {
7711                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7712                                                    (const U8*)pv1, cur1);
7713                 return retval ? retval < 0 ? -1 : +1 : 0;
7714             }
7715         }
7716         else {
7717             if (PL_encoding) {
7718                  svrecode = newSVpvn(pv1, cur1);
7719                  sv_recode_to_utf8(svrecode, PL_encoding);
7720                  pv1 = SvPV_const(svrecode, cur1);
7721             }
7722             else {
7723                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7724                                                   (const U8*)pv2, cur2);
7725                 return retval ? retval < 0 ? -1 : +1 : 0;
7726             }
7727         }
7728     }
7729
7730     if (!cur1) {
7731         cmp = cur2 ? -1 : 0;
7732     } else if (!cur2) {
7733         cmp = 1;
7734     } else {
7735         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7736
7737         if (retval) {
7738             cmp = retval < 0 ? -1 : 1;
7739         } else if (cur1 == cur2) {
7740             cmp = 0;
7741         } else {
7742             cmp = cur1 < cur2 ? -1 : 1;
7743         }
7744     }
7745
7746     SvREFCNT_dec(svrecode);
7747
7748     return cmp;
7749 }
7750
7751 /*
7752 =for apidoc sv_cmp_locale
7753
7754 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7755 'use bytes' aware, handles get magic, and will coerce its args to strings
7756 if necessary.  See also C<sv_cmp>.
7757
7758 =for apidoc sv_cmp_locale_flags
7759
7760 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7761 'use bytes' aware and will coerce its args to strings if necessary.  If the
7762 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7763
7764 =cut
7765 */
7766
7767 I32
7768 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7769 {
7770     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7771 }
7772
7773 I32
7774 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7775                          const U32 flags)
7776 {
7777 #ifdef USE_LOCALE_COLLATE
7778
7779     char *pv1, *pv2;
7780     STRLEN len1, len2;
7781     I32 retval;
7782
7783     if (PL_collation_standard)
7784         goto raw_compare;
7785
7786     len1 = 0;
7787     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7788     len2 = 0;
7789     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7790
7791     if (!pv1 || !len1) {
7792         if (pv2 && len2)
7793             return -1;
7794         else
7795             goto raw_compare;
7796     }
7797     else {
7798         if (!pv2 || !len2)
7799             return 1;
7800     }
7801
7802     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7803
7804     if (retval)
7805         return retval < 0 ? -1 : 1;
7806
7807     /*
7808      * When the result of collation is equality, that doesn't mean
7809      * that there are no differences -- some locales exclude some
7810      * characters from consideration.  So to avoid false equalities,
7811      * we use the raw string as a tiebreaker.
7812      */
7813
7814   raw_compare:
7815     /* FALLTHROUGH */
7816
7817 #else
7818     PERL_UNUSED_ARG(flags);
7819 #endif /* USE_LOCALE_COLLATE */
7820
7821     return sv_cmp(sv1, sv2);
7822 }
7823
7824
7825 #ifdef USE_LOCALE_COLLATE
7826
7827 /*
7828 =for apidoc sv_collxfrm
7829
7830 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7831 C<sv_collxfrm_flags>.
7832
7833 =for apidoc sv_collxfrm_flags
7834
7835 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7836 flags contain SV_GMAGIC, it handles get-magic.
7837
7838 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7839 scalar data of the variable, but transformed to such a format that a normal
7840 memory comparison can be used to compare the data according to the locale
7841 settings.
7842
7843 =cut
7844 */
7845
7846 char *
7847 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7848 {
7849     MAGIC *mg;
7850
7851     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7852
7853     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7854     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7855         const char *s;
7856         char *xf;
7857         STRLEN len, xlen;
7858
7859         if (mg)
7860             Safefree(mg->mg_ptr);
7861         s = SvPV_flags_const(sv, len, flags);
7862         if ((xf = mem_collxfrm(s, len, &xlen))) {
7863             if (! mg) {
7864 #ifdef PERL_OLD_COPY_ON_WRITE
7865                 if (SvIsCOW(sv))
7866                     sv_force_normal_flags(sv, 0);
7867 #endif
7868                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7869                                  0, 0);
7870                 assert(mg);
7871             }
7872             mg->mg_ptr = xf;
7873             mg->mg_len = xlen;
7874         }
7875         else {
7876             if (mg) {
7877                 mg->mg_ptr = NULL;
7878                 mg->mg_len = -1;
7879             }
7880         }
7881     }
7882     if (mg && mg->mg_ptr) {
7883         *nxp = mg->mg_len;
7884         return mg->mg_ptr + sizeof(PL_collation_ix);
7885     }
7886     else {
7887         *nxp = 0;
7888         return NULL;
7889     }
7890 }
7891
7892 #endif /* USE_LOCALE_COLLATE */
7893
7894 static char *
7895 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7896 {
7897     SV * const tsv = newSV(0);
7898     ENTER;
7899     SAVEFREESV(tsv);
7900     sv_gets(tsv, fp, 0);
7901     sv_utf8_upgrade_nomg(tsv);
7902     SvCUR_set(sv,append);
7903     sv_catsv(sv,tsv);
7904     LEAVE;
7905     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7906 }
7907
7908 static char *
7909 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7910 {
7911     SSize_t bytesread;
7912     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7913       /* Grab the size of the record we're getting */
7914     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7915     
7916     /* Go yank in */
7917 #ifdef __VMS
7918     int fd;
7919     Stat_t st;
7920
7921     /* With a true, record-oriented file on VMS, we need to use read directly
7922      * to ensure that we respect RMS record boundaries.  The user is responsible
7923      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7924      * record size) field.  N.B. This is likely to produce invalid results on
7925      * varying-width character data when a record ends mid-character.
7926      */
7927     fd = PerlIO_fileno(fp);
7928     if (fd != -1
7929         && PerlLIO_fstat(fd, &st) == 0
7930         && (st.st_fab_rfm == FAB$C_VAR
7931             || st.st_fab_rfm == FAB$C_VFC
7932             || st.st_fab_rfm == FAB$C_FIX)) {
7933
7934         bytesread = PerlLIO_read(fd, buffer, recsize);
7935     }
7936     else /* in-memory file from PerlIO::Scalar
7937           * or not a record-oriented file
7938           */
7939 #endif
7940     {
7941         bytesread = PerlIO_read(fp, buffer, recsize);
7942
7943         /* At this point, the logic in sv_get() means that sv will
7944            be treated as utf-8 if the handle is utf8.
7945         */
7946         if (PerlIO_isutf8(fp) && bytesread > 0) {
7947             char *bend = buffer + bytesread;
7948             char *bufp = buffer;
7949             size_t charcount = 0;
7950             bool charstart = TRUE;
7951             STRLEN skip = 0;
7952
7953             while (charcount < recsize) {
7954                 /* count accumulated characters */
7955                 while (bufp < bend) {
7956                     if (charstart) {
7957                         skip = UTF8SKIP(bufp);
7958                     }
7959                     if (bufp + skip > bend) {
7960                         /* partial at the end */
7961                         charstart = FALSE;
7962                         break;
7963                     }
7964                     else {
7965                         ++charcount;
7966                         bufp += skip;
7967                         charstart = TRUE;
7968                     }
7969                 }
7970
7971                 if (charcount < recsize) {
7972                     STRLEN readsize;
7973                     STRLEN bufp_offset = bufp - buffer;
7974                     SSize_t morebytesread;
7975
7976                     /* originally I read enough to fill any incomplete
7977                        character and the first byte of the next
7978                        character if needed, but if there's many
7979                        multi-byte encoded characters we're going to be
7980                        making a read call for every character beyond
7981                        the original read size.
7982
7983                        So instead, read the rest of the character if
7984                        any, and enough bytes to match at least the
7985                        start bytes for each character we're going to
7986                        read.
7987                     */
7988                     if (charstart)
7989                         readsize = recsize - charcount;
7990                     else 
7991                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7992                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7993                     bend = buffer + bytesread;
7994                     morebytesread = PerlIO_read(fp, bend, readsize);
7995                     if (morebytesread <= 0) {
7996                         /* we're done, if we still have incomplete
7997                            characters the check code in sv_gets() will
7998                            warn about them.
7999
8000                            I'd originally considered doing
8001                            PerlIO_ungetc() on all but the lead
8002                            character of the incomplete character, but
8003                            read() doesn't do that, so I don't.
8004                         */
8005                         break;
8006                     }
8007
8008                     /* prepare to scan some more */
8009                     bytesread += morebytesread;
8010                     bend = buffer + bytesread;
8011                     bufp = buffer + bufp_offset;
8012                 }
8013             }
8014         }
8015     }
8016
8017     if (bytesread < 0)
8018         bytesread = 0;
8019     SvCUR_set(sv, bytesread + append);
8020     buffer[bytesread] = '\0';
8021     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8022 }
8023
8024 /*
8025 =for apidoc sv_gets
8026
8027 Get a line from the filehandle and store it into the SV, optionally
8028 appending to the currently-stored string.  If C<append> is not 0, the
8029 line is appended to the SV instead of overwriting it.  C<append> should
8030 be set to the byte offset that the appended string should start at
8031 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8032
8033 =cut
8034 */
8035
8036 char *
8037 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8038 {
8039     const char *rsptr;
8040     STRLEN rslen;
8041     STDCHAR rslast;
8042     STDCHAR *bp;
8043     SSize_t cnt;
8044     int i = 0;
8045     int rspara = 0;
8046
8047     PERL_ARGS_ASSERT_SV_GETS;
8048
8049     if (SvTHINKFIRST(sv))
8050         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8051     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8052        from <>.
8053        However, perlbench says it's slower, because the existing swipe code
8054        is faster than copy on write.
8055        Swings and roundabouts.  */
8056     SvUPGRADE(sv, SVt_PV);
8057
8058     if (append) {
8059         /* line is going to be appended to the existing buffer in the sv */
8060         if (PerlIO_isutf8(fp)) {
8061             if (!SvUTF8(sv)) {
8062                 sv_utf8_upgrade_nomg(sv);
8063                 sv_pos_u2b(sv,&append,0);
8064             }
8065         } else if (SvUTF8(sv)) {
8066             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8067         }
8068     }
8069
8070     SvPOK_only(sv);
8071     if (!append) {
8072         /* not appending - "clear" the string by setting SvCUR to 0,
8073          * the pv is still avaiable. */
8074         SvCUR_set(sv,0);
8075     }
8076     if (PerlIO_isutf8(fp))
8077         SvUTF8_on(sv);
8078
8079     if (IN_PERL_COMPILETIME) {
8080         /* we always read code in line mode */
8081         rsptr = "\n";
8082         rslen = 1;
8083     }
8084     else if (RsSNARF(PL_rs)) {
8085         /* If it is a regular disk file use size from stat() as estimate
8086            of amount we are going to read -- may result in mallocing
8087            more memory than we really need if the layers below reduce
8088            the size we read (e.g. CRLF or a gzip layer).
8089          */
8090         Stat_t st;
8091         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8092             const Off_t offset = PerlIO_tell(fp);
8093             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8094 #ifdef PERL_NEW_COPY_ON_WRITE
8095                 /* Add an extra byte for the sake of copy-on-write's
8096                  * buffer reference count. */
8097                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8098 #else
8099                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8100 #endif
8101             }
8102         }
8103         rsptr = NULL;
8104         rslen = 0;
8105     }
8106     else if (RsRECORD(PL_rs)) {
8107         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8108     }
8109     else if (RsPARA(PL_rs)) {
8110         rsptr = "\n\n";
8111         rslen = 2;
8112         rspara = 1;
8113     }
8114     else {
8115         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8116         if (PerlIO_isutf8(fp)) {
8117             rsptr = SvPVutf8(PL_rs, rslen);
8118         }
8119         else {
8120             if (SvUTF8(PL_rs)) {
8121                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8122                     Perl_croak(aTHX_ "Wide character in $/");
8123                 }
8124             }
8125             /* extract the raw pointer to the record separator */
8126             rsptr = SvPV_const(PL_rs, rslen);
8127         }
8128     }
8129
8130     /* rslast is the last character in the record separator
8131      * note we don't use rslast except when rslen is true, so the
8132      * null assign is a placeholder. */
8133     rslast = rslen ? rsptr[rslen - 1] : '\0';
8134
8135     if (rspara) {               /* have to do this both before and after */
8136         do {                    /* to make sure file boundaries work right */
8137             if (PerlIO_eof(fp))
8138                 return 0;
8139             i = PerlIO_getc(fp);
8140             if (i != '\n') {
8141                 if (i == -1)
8142                     return 0;
8143                 PerlIO_ungetc(fp,i);
8144                 break;
8145             }
8146         } while (i != EOF);
8147     }
8148
8149     /* See if we know enough about I/O mechanism to cheat it ! */
8150
8151     /* This used to be #ifdef test - it is made run-time test for ease
8152        of abstracting out stdio interface. One call should be cheap
8153        enough here - and may even be a macro allowing compile
8154        time optimization.
8155      */
8156
8157     if (PerlIO_fast_gets(fp)) {
8158     /*
8159      * We can do buffer based IO operations on this filehandle.
8160      *
8161      * This means we can bypass a lot of subcalls and process
8162      * the buffer directly, it also means we know the upper bound
8163      * on the amount of data we might read of the current buffer
8164      * into our sv. Knowing this allows us to preallocate the pv
8165      * to be able to hold that maximum, which allows us to simplify
8166      * a lot of logic. */
8167
8168     /*
8169      * We're going to steal some values from the stdio struct
8170      * and put EVERYTHING in the innermost loop into registers.
8171      */
8172     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8173     STRLEN bpx;         /* length of the data in the target sv
8174                            used to fix pointers after a SvGROW */
8175     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8176                            of data left in the read-ahead buffer.
8177                            If 0 then the pv buffer can hold the full
8178                            amount left, otherwise this is the amount it
8179                            can hold. */
8180
8181 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8182     /* An ungetc()d char is handled separately from the regular
8183      * buffer, so we getc() it back out and stuff it in the buffer.
8184      */
8185     i = PerlIO_getc(fp);
8186     if (i == EOF) return 0;
8187     *(--((*fp)->_ptr)) = (unsigned char) i;
8188     (*fp)->_cnt++;
8189 #endif
8190
8191     /* Here is some breathtakingly efficient cheating */
8192
8193     /* When you read the following logic resist the urge to think
8194      * of record separators that are 1 byte long. They are an
8195      * uninteresting special (simple) case.
8196      *
8197      * Instead think of record separators which are at least 2 bytes
8198      * long, and keep in mind that we need to deal with such
8199      * separators when they cross a read-ahead buffer boundary.
8200      *
8201      * Also consider that we need to gracefully deal with separators
8202      * that may be longer than a single read ahead buffer.
8203      *
8204      * Lastly do not forget we want to copy the delimiter as well. We
8205      * are copying all data in the file _up_to_and_including_ the separator
8206      * itself.
8207      *
8208      * Now that you have all that in mind here is what is happening below:
8209      *
8210      * 1. When we first enter the loop we do some memory book keeping to see
8211      * how much free space there is in the target SV. (This sub assumes that
8212      * it is operating on the same SV most of the time via $_ and that it is
8213      * going to be able to reuse the same pv buffer each call.) If there is
8214      * "enough" room then we set "shortbuffered" to how much space there is
8215      * and start reading forward.
8216      *
8217      * 2. When we scan forward we copy from the read-ahead buffer to the target
8218      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8219      * and the end of the of pv, as well as for the "rslast", which is the last
8220      * char of the separator.
8221      *
8222      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8223      * (which has a "complete" record up to the point we saw rslast) and check
8224      * it to see if it matches the separator. If it does we are done. If it doesn't
8225      * we continue on with the scan/copy.
8226      *
8227      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8228      * the IO system to read the next buffer. We do this by doing a getc(), which
8229      * returns a single char read (or EOF), and prefills the buffer, and also
8230      * allows us to find out how full the buffer is.  We use this information to
8231      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8232      * the returned single char into the target sv, and then go back into scan
8233      * forward mode.
8234      *
8235      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8236      * remaining space in the read-buffer.
8237      *
8238      * Note that this code despite its twisty-turny nature is pretty darn slick.
8239      * It manages single byte separators, multi-byte cross boundary separators,
8240      * and cross-read-buffer separators cleanly and efficiently at the cost
8241      * of potentially greatly overallocating the target SV.
8242      *
8243      * Yves
8244      */
8245
8246
8247     /* get the number of bytes remaining in the read-ahead buffer
8248      * on first call on a given fp this will return 0.*/
8249     cnt = PerlIO_get_cnt(fp);
8250
8251     /* make sure we have the room */
8252     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8253         /* Not room for all of it
8254            if we are looking for a separator and room for some
8255          */
8256         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8257             /* just process what we have room for */
8258             shortbuffered = cnt - SvLEN(sv) + append + 1;
8259             cnt -= shortbuffered;
8260         }
8261         else {
8262             /* ensure that the target sv has enough room to hold
8263              * the rest of the read-ahead buffer */
8264             shortbuffered = 0;
8265             /* remember that cnt can be negative */
8266             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8267         }
8268     }
8269     else {
8270         /* we have enough room to hold the full buffer, lets scream */
8271         shortbuffered = 0;
8272     }
8273
8274     /* extract the pointer to sv's string buffer, offset by append as necessary */
8275     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8276     /* extract the point to the read-ahead buffer */
8277     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8278
8279     /* some trace debug output */
8280     DEBUG_P(PerlIO_printf(Perl_debug_log,
8281         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8282     DEBUG_P(PerlIO_printf(Perl_debug_log,
8283         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8284          UVuf"\n",
8285                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8286                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8287
8288     for (;;) {
8289       screamer:
8290         /* if there is stuff left in the read-ahead buffer */
8291         if (cnt > 0) {
8292             /* if there is a separator */
8293             if (rslen) {
8294                 /* loop until we hit the end of the read-ahead buffer */
8295                 while (cnt > 0) {                    /* this     |  eat */
8296                     /* scan forward copying and searching for rslast as we go */
8297                     cnt--;
8298                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8299                         goto thats_all_folks;        /* screams  |  sed :-) */
8300                 }
8301             }
8302             else {
8303                 /* no separator, slurp the full buffer */
8304                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8305                 bp += cnt;                           /* screams  |  dust */
8306                 ptr += cnt;                          /* louder   |  sed :-) */
8307                 cnt = 0;
8308                 assert (!shortbuffered);
8309                 goto cannot_be_shortbuffered;
8310             }
8311         }
8312         
8313         if (shortbuffered) {            /* oh well, must extend */
8314             /* we didnt have enough room to fit the line into the target buffer
8315              * so we must extend the target buffer and keep going */
8316             cnt = shortbuffered;
8317             shortbuffered = 0;
8318             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8319             SvCUR_set(sv, bpx);
8320             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8321             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8322             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8323             continue;
8324         }
8325
8326     cannot_be_shortbuffered:
8327         /* we need to refill the read-ahead buffer if possible */
8328
8329         DEBUG_P(PerlIO_printf(Perl_debug_log,
8330                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8331                               PTR2UV(ptr),(IV)cnt));
8332         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8333
8334         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8335            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8336             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8337             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8338
8339         /*
8340             call PerlIO_getc() to let it prefill the lookahead buffer
8341
8342             This used to call 'filbuf' in stdio form, but as that behaves like
8343             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8344             another abstraction.
8345
8346             Note we have to deal with the char in 'i' if we are not at EOF
8347         */
8348         i   = PerlIO_getc(fp);          /* get more characters */
8349
8350         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8351            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8352             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8353             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8354
8355         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8356         cnt = PerlIO_get_cnt(fp);
8357         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8358         DEBUG_P(PerlIO_printf(Perl_debug_log,
8359             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8360             PTR2UV(ptr),(IV)cnt));
8361
8362         if (i == EOF)                   /* all done for ever? */
8363             goto thats_really_all_folks;
8364
8365         /* make sure we have enough space in the target sv */
8366         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8367         SvCUR_set(sv, bpx);
8368         SvGROW(sv, bpx + cnt + 2);
8369         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8370
8371         /* copy of the char we got from getc() */
8372         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8373
8374         /* make sure we deal with the i being the last character of a separator */
8375         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8376             goto thats_all_folks;
8377     }
8378
8379 thats_all_folks:
8380     /* check if we have actually found the separator - only really applies
8381      * when rslen > 1 */
8382     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8383           memNE((char*)bp - rslen, rsptr, rslen))
8384         goto screamer;                          /* go back to the fray */
8385 thats_really_all_folks:
8386     if (shortbuffered)
8387         cnt += shortbuffered;
8388         DEBUG_P(PerlIO_printf(Perl_debug_log,
8389              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8390     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8391     DEBUG_P(PerlIO_printf(Perl_debug_log,
8392         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8393         "\n",
8394         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8395         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8396     *bp = '\0';
8397     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8398     DEBUG_P(PerlIO_printf(Perl_debug_log,
8399         "Screamer: done, len=%ld, string=|%.*s|\n",
8400         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8401     }
8402    else
8403     {
8404        /*The big, slow, and stupid way. */
8405 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8406         STDCHAR *buf = NULL;
8407         Newx(buf, 8192, STDCHAR);
8408         assert(buf);
8409 #else
8410         STDCHAR buf[8192];
8411 #endif
8412
8413 screamer2:
8414         if (rslen) {
8415             const STDCHAR * const bpe = buf + sizeof(buf);
8416             bp = buf;
8417             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8418                 ; /* keep reading */
8419             cnt = bp - buf;
8420         }
8421         else {
8422             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8423             /* Accommodate broken VAXC compiler, which applies U8 cast to
8424              * both args of ?: operator, causing EOF to change into 255
8425              */
8426             if (cnt > 0)
8427                  i = (U8)buf[cnt - 1];
8428             else
8429                  i = EOF;
8430         }
8431
8432         if (cnt < 0)
8433             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8434         if (append)
8435             sv_catpvn_nomg(sv, (char *) buf, cnt);
8436         else
8437             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8438
8439         if (i != EOF &&                 /* joy */
8440             (!rslen ||
8441              SvCUR(sv) < rslen ||
8442              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8443         {
8444             append = -1;
8445             /*
8446              * If we're reading from a TTY and we get a short read,
8447              * indicating that the user hit his EOF character, we need
8448              * to notice it now, because if we try to read from the TTY
8449              * again, the EOF condition will disappear.
8450              *
8451              * The comparison of cnt to sizeof(buf) is an optimization
8452              * that prevents unnecessary calls to feof().
8453              *
8454              * - jik 9/25/96
8455              */
8456             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8457                 goto screamer2;
8458         }
8459
8460 #ifdef USE_HEAP_INSTEAD_OF_STACK
8461         Safefree(buf);
8462 #endif
8463     }
8464
8465     if (rspara) {               /* have to do this both before and after */
8466         while (i != EOF) {      /* to make sure file boundaries work right */
8467             i = PerlIO_getc(fp);
8468             if (i != '\n') {
8469                 PerlIO_ungetc(fp,i);
8470                 break;
8471             }
8472         }
8473     }
8474
8475     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8476 }
8477
8478 /*
8479 =for apidoc sv_inc
8480
8481 Auto-increment of the value in the SV, doing string to numeric conversion
8482 if necessary.  Handles 'get' magic and operator overloading.
8483
8484 =cut
8485 */
8486
8487 void
8488 Perl_sv_inc(pTHX_ SV *const sv)
8489 {
8490     if (!sv)
8491         return;
8492     SvGETMAGIC(sv);
8493     sv_inc_nomg(sv);
8494 }
8495
8496 /*
8497 =for apidoc sv_inc_nomg
8498
8499 Auto-increment of the value in the SV, doing string to numeric conversion
8500 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8501
8502 =cut
8503 */
8504
8505 void
8506 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8507 {
8508     char *d;
8509     int flags;
8510
8511     if (!sv)
8512         return;
8513     if (SvTHINKFIRST(sv)) {
8514         if (SvREADONLY(sv)) {
8515                 Perl_croak_no_modify();
8516         }
8517         if (SvROK(sv)) {
8518             IV i;
8519             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8520                 return;
8521             i = PTR2IV(SvRV(sv));
8522             sv_unref(sv);
8523             sv_setiv(sv, i);
8524         }
8525         else sv_force_normal_flags(sv, 0);
8526     }
8527     flags = SvFLAGS(sv);
8528     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8529         /* It's (privately or publicly) a float, but not tested as an
8530            integer, so test it to see. */
8531         (void) SvIV(sv);
8532         flags = SvFLAGS(sv);
8533     }
8534     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8535         /* It's publicly an integer, or privately an integer-not-float */
8536 #ifdef PERL_PRESERVE_IVUV
8537       oops_its_int:
8538 #endif
8539         if (SvIsUV(sv)) {
8540             if (SvUVX(sv) == UV_MAX)
8541                 sv_setnv(sv, UV_MAX_P1);
8542             else
8543                 (void)SvIOK_only_UV(sv);
8544                 SvUV_set(sv, SvUVX(sv) + 1);
8545         } else {
8546             if (SvIVX(sv) == IV_MAX)
8547                 sv_setuv(sv, (UV)IV_MAX + 1);
8548             else {
8549                 (void)SvIOK_only(sv);
8550                 SvIV_set(sv, SvIVX(sv) + 1);
8551             }   
8552         }
8553         return;
8554     }
8555     if (flags & SVp_NOK) {
8556         const NV was = SvNVX(sv);
8557         if (NV_OVERFLOWS_INTEGERS_AT &&
8558             was >= NV_OVERFLOWS_INTEGERS_AT) {
8559             /* diag_listed_as: Lost precision when %s %f by 1 */
8560             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8561                            "Lost precision when incrementing %" NVff " by 1",
8562                            was);
8563         }
8564         (void)SvNOK_only(sv);
8565         SvNV_set(sv, was + 1.0);
8566         return;
8567     }
8568
8569     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8570         if ((flags & SVTYPEMASK) < SVt_PVIV)
8571             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8572         (void)SvIOK_only(sv);
8573         SvIV_set(sv, 1);
8574         return;
8575     }
8576     d = SvPVX(sv);
8577     while (isALPHA(*d)) d++;
8578     while (isDIGIT(*d)) d++;
8579     if (d < SvEND(sv)) {
8580         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8581 #ifdef PERL_PRESERVE_IVUV
8582         /* Got to punt this as an integer if needs be, but we don't issue
8583            warnings. Probably ought to make the sv_iv_please() that does
8584            the conversion if possible, and silently.  */
8585         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8586             /* Need to try really hard to see if it's an integer.
8587                9.22337203685478e+18 is an integer.
8588                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8589                so $a="9.22337203685478e+18"; $a+0; $a++
8590                needs to be the same as $a="9.22337203685478e+18"; $a++
8591                or we go insane. */
8592         
8593             (void) sv_2iv(sv);
8594             if (SvIOK(sv))
8595                 goto oops_its_int;
8596
8597             /* sv_2iv *should* have made this an NV */
8598             if (flags & SVp_NOK) {
8599                 (void)SvNOK_only(sv);
8600                 SvNV_set(sv, SvNVX(sv) + 1.0);
8601                 return;
8602             }
8603             /* I don't think we can get here. Maybe I should assert this
8604                And if we do get here I suspect that sv_setnv will croak. NWC
8605                Fall through. */
8606             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8607                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8608         }
8609 #endif /* PERL_PRESERVE_IVUV */
8610         if (!numtype && ckWARN(WARN_NUMERIC))
8611             not_incrementable(sv);
8612         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8613         return;
8614     }
8615     d--;
8616     while (d >= SvPVX_const(sv)) {
8617         if (isDIGIT(*d)) {
8618             if (++*d <= '9')
8619                 return;
8620             *(d--) = '0';
8621         }
8622         else {
8623 #ifdef EBCDIC
8624             /* MKS: The original code here died if letters weren't consecutive.
8625              * at least it didn't have to worry about non-C locales.  The
8626              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8627              * arranged in order (although not consecutively) and that only
8628              * [A-Za-z] are accepted by isALPHA in the C locale.
8629              */
8630             if (isALPHA_FOLD_NE(*d, 'z')) {
8631                 do { ++*d; } while (!isALPHA(*d));
8632                 return;
8633             }
8634             *(d--) -= 'z' - 'a';
8635 #else
8636             ++*d;
8637             if (isALPHA(*d))
8638                 return;
8639             *(d--) -= 'z' - 'a' + 1;
8640 #endif
8641         }
8642     }
8643     /* oh,oh, the number grew */
8644     SvGROW(sv, SvCUR(sv) + 2);
8645     SvCUR_set(sv, SvCUR(sv) + 1);
8646     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8647         *d = d[-1];
8648     if (isDIGIT(d[1]))
8649         *d = '1';
8650     else
8651         *d = d[1];
8652 }
8653
8654 /*
8655 =for apidoc sv_dec
8656
8657 Auto-decrement of the value in the SV, doing string to numeric conversion
8658 if necessary.  Handles 'get' magic and operator overloading.
8659
8660 =cut
8661 */
8662
8663 void
8664 Perl_sv_dec(pTHX_ SV *const sv)
8665 {
8666     if (!sv)
8667         return;
8668     SvGETMAGIC(sv);
8669     sv_dec_nomg(sv);
8670 }
8671
8672 /*
8673 =for apidoc sv_dec_nomg
8674
8675 Auto-decrement of the value in the SV, doing string to numeric conversion
8676 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8677
8678 =cut
8679 */
8680
8681 void
8682 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8683 {
8684     int flags;
8685
8686     if (!sv)
8687         return;
8688     if (SvTHINKFIRST(sv)) {
8689         if (SvREADONLY(sv)) {
8690                 Perl_croak_no_modify();
8691         }
8692         if (SvROK(sv)) {
8693             IV i;
8694             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8695                 return;
8696             i = PTR2IV(SvRV(sv));
8697             sv_unref(sv);
8698             sv_setiv(sv, i);
8699         }
8700         else sv_force_normal_flags(sv, 0);
8701     }
8702     /* Unlike sv_inc we don't have to worry about string-never-numbers
8703        and keeping them magic. But we mustn't warn on punting */
8704     flags = SvFLAGS(sv);
8705     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8706         /* It's publicly an integer, or privately an integer-not-float */
8707 #ifdef PERL_PRESERVE_IVUV
8708       oops_its_int:
8709 #endif
8710         if (SvIsUV(sv)) {
8711             if (SvUVX(sv) == 0) {
8712                 (void)SvIOK_only(sv);
8713                 SvIV_set(sv, -1);
8714             }
8715             else {
8716                 (void)SvIOK_only_UV(sv);
8717                 SvUV_set(sv, SvUVX(sv) - 1);
8718             }   
8719         } else {
8720             if (SvIVX(sv) == IV_MIN) {
8721                 sv_setnv(sv, (NV)IV_MIN);
8722                 goto oops_its_num;
8723             }
8724             else {
8725                 (void)SvIOK_only(sv);
8726                 SvIV_set(sv, SvIVX(sv) - 1);
8727             }   
8728         }
8729         return;
8730     }
8731     if (flags & SVp_NOK) {
8732     oops_its_num:
8733         {
8734             const NV was = SvNVX(sv);
8735             if (NV_OVERFLOWS_INTEGERS_AT &&
8736                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8737                 /* diag_listed_as: Lost precision when %s %f by 1 */
8738                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8739                                "Lost precision when decrementing %" NVff " by 1",
8740                                was);
8741             }
8742             (void)SvNOK_only(sv);
8743             SvNV_set(sv, was - 1.0);
8744             return;
8745         }
8746     }
8747     if (!(flags & SVp_POK)) {
8748         if ((flags & SVTYPEMASK) < SVt_PVIV)
8749             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8750         SvIV_set(sv, -1);
8751         (void)SvIOK_only(sv);
8752         return;
8753     }
8754 #ifdef PERL_PRESERVE_IVUV
8755     {
8756         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8757         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8758             /* Need to try really hard to see if it's an integer.
8759                9.22337203685478e+18 is an integer.
8760                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8761                so $a="9.22337203685478e+18"; $a+0; $a--
8762                needs to be the same as $a="9.22337203685478e+18"; $a--
8763                or we go insane. */
8764         
8765             (void) sv_2iv(sv);
8766             if (SvIOK(sv))
8767                 goto oops_its_int;
8768
8769             /* sv_2iv *should* have made this an NV */
8770             if (flags & SVp_NOK) {
8771                 (void)SvNOK_only(sv);
8772                 SvNV_set(sv, SvNVX(sv) - 1.0);
8773                 return;
8774             }
8775             /* I don't think we can get here. Maybe I should assert this
8776                And if we do get here I suspect that sv_setnv will croak. NWC
8777                Fall through. */
8778             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8779                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8780         }
8781     }
8782 #endif /* PERL_PRESERVE_IVUV */
8783     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8784 }
8785
8786 /* this define is used to eliminate a chunk of duplicated but shared logic
8787  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8788  * used anywhere but here - yves
8789  */
8790 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8791     STMT_START {      \
8792         EXTEND_MORTAL(1); \
8793         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8794     } STMT_END
8795
8796 /*
8797 =for apidoc sv_mortalcopy
8798
8799 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8800 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8801 explicit call to FREETMPS, or by an implicit call at places such as
8802 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8803
8804 =cut
8805 */
8806
8807 /* Make a string that will exist for the duration of the expression
8808  * evaluation.  Actually, it may have to last longer than that, but
8809  * hopefully we won't free it until it has been assigned to a
8810  * permanent location. */
8811
8812 SV *
8813 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8814 {
8815     SV *sv;
8816
8817     if (flags & SV_GMAGIC)
8818         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8819     new_SV(sv);
8820     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8821     PUSH_EXTEND_MORTAL__SV_C(sv);
8822     SvTEMP_on(sv);
8823     return sv;
8824 }
8825
8826 /*
8827 =for apidoc sv_newmortal
8828
8829 Creates a new null SV which is mortal.  The reference count of the SV is
8830 set to 1.  It will be destroyed "soon", either by an explicit call to
8831 FREETMPS, or by an implicit call at places such as statement boundaries.
8832 See also C<sv_mortalcopy> and C<sv_2mortal>.
8833
8834 =cut
8835 */
8836
8837 SV *
8838 Perl_sv_newmortal(pTHX)
8839 {
8840     SV *sv;
8841
8842     new_SV(sv);
8843     SvFLAGS(sv) = SVs_TEMP;
8844     PUSH_EXTEND_MORTAL__SV_C(sv);
8845     return sv;
8846 }
8847
8848
8849 /*
8850 =for apidoc newSVpvn_flags
8851
8852 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8853 characters) into it.  The reference count for the
8854 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8855 string.  You are responsible for ensuring that the source string is at least
8856 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8857 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8858 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8859 returning.  If C<SVf_UTF8> is set, C<s>
8860 is considered to be in UTF-8 and the
8861 C<SVf_UTF8> flag will be set on the new SV.
8862 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8863
8864     #define newSVpvn_utf8(s, len, u)                    \
8865         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8866
8867 =cut
8868 */
8869
8870 SV *
8871 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8872 {
8873     SV *sv;
8874
8875     /* All the flags we don't support must be zero.
8876        And we're new code so I'm going to assert this from the start.  */
8877     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8878     new_SV(sv);
8879     sv_setpvn(sv,s,len);
8880
8881     /* This code used to do a sv_2mortal(), however we now unroll the call to
8882      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8883      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8884      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8885      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8886      * means that we eliminate quite a few steps than it looks - Yves
8887      * (explaining patch by gfx) */
8888
8889     SvFLAGS(sv) |= flags;
8890
8891     if(flags & SVs_TEMP){
8892         PUSH_EXTEND_MORTAL__SV_C(sv);
8893     }
8894
8895     return sv;
8896 }
8897
8898 /*
8899 =for apidoc sv_2mortal
8900
8901 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8902 by an explicit call to FREETMPS, or by an implicit call at places such as
8903 statement boundaries.  SvTEMP() is turned on which means that the SV's
8904 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8905 and C<sv_mortalcopy>.
8906
8907 =cut
8908 */
8909
8910 SV *
8911 Perl_sv_2mortal(pTHX_ SV *const sv)
8912 {
8913     dVAR;
8914     if (!sv)
8915         return NULL;
8916     if (SvIMMORTAL(sv))
8917         return sv;
8918     PUSH_EXTEND_MORTAL__SV_C(sv);
8919     SvTEMP_on(sv);
8920     return sv;
8921 }
8922
8923 /*
8924 =for apidoc newSVpv
8925
8926 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8927 characters) into it.  The reference count for the
8928 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8929 strlen(), (which means if you use this option, that C<s> can't have embedded
8930 C<NUL> characters and has to have a terminating C<NUL> byte).
8931
8932 For efficiency, consider using C<newSVpvn> instead.
8933
8934 =cut
8935 */
8936
8937 SV *
8938 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8939 {
8940     SV *sv;
8941
8942     new_SV(sv);
8943     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8944     return sv;
8945 }
8946
8947 /*
8948 =for apidoc newSVpvn
8949
8950 Creates a new SV and copies a string into it, which may contain C<NUL> characters
8951 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8952 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8953 are responsible for ensuring that the source buffer is at least
8954 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8955 undefined.
8956
8957 =cut
8958 */
8959
8960 SV *
8961 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8962 {
8963     SV *sv;
8964     new_SV(sv);
8965     sv_setpvn(sv,buffer,len);
8966     return sv;
8967 }
8968
8969 /*
8970 =for apidoc newSVhek
8971
8972 Creates a new SV from the hash key structure.  It will generate scalars that
8973 point to the shared string table where possible.  Returns a new (undefined)
8974 SV if the hek is NULL.
8975
8976 =cut
8977 */
8978
8979 SV *
8980 Perl_newSVhek(pTHX_ const HEK *const hek)
8981 {
8982     if (!hek) {
8983         SV *sv;
8984
8985         new_SV(sv);
8986         return sv;
8987     }
8988
8989     if (HEK_LEN(hek) == HEf_SVKEY) {
8990         return newSVsv(*(SV**)HEK_KEY(hek));
8991     } else {
8992         const int flags = HEK_FLAGS(hek);
8993         if (flags & HVhek_WASUTF8) {
8994             /* Trouble :-)
8995                Andreas would like keys he put in as utf8 to come back as utf8
8996             */
8997             STRLEN utf8_len = HEK_LEN(hek);
8998             SV * const sv = newSV_type(SVt_PV);
8999             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9000             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9001             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9002             SvUTF8_on (sv);
9003             return sv;
9004         } else if (flags & HVhek_UNSHARED) {
9005             /* A hash that isn't using shared hash keys has to have
9006                the flag in every key so that we know not to try to call
9007                share_hek_hek on it.  */
9008
9009             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9010             if (HEK_UTF8(hek))
9011                 SvUTF8_on (sv);
9012             return sv;
9013         }
9014         /* This will be overwhelminly the most common case.  */
9015         {
9016             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9017                more efficient than sharepvn().  */
9018             SV *sv;
9019
9020             new_SV(sv);
9021             sv_upgrade(sv, SVt_PV);
9022             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9023             SvCUR_set(sv, HEK_LEN(hek));
9024             SvLEN_set(sv, 0);
9025             SvIsCOW_on(sv);
9026             SvPOK_on(sv);
9027             if (HEK_UTF8(hek))
9028                 SvUTF8_on(sv);
9029             return sv;
9030         }
9031     }
9032 }
9033
9034 /*
9035 =for apidoc newSVpvn_share
9036
9037 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9038 table.  If the string does not already exist in the table, it is
9039 created first.  Turns on the SvIsCOW flag (or READONLY
9040 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9041 is non-zero, that value is used; otherwise the hash is computed.
9042 The string's hash can later be retrieved from the SV
9043 with the C<SvSHARED_HASH()> macro.  The idea here is
9044 that as the string table is used for shared hash keys these strings will have
9045 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9046
9047 =cut
9048 */
9049
9050 SV *
9051 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9052 {
9053     dVAR;
9054     SV *sv;
9055     bool is_utf8 = FALSE;
9056     const char *const orig_src = src;
9057
9058     if (len < 0) {
9059         STRLEN tmplen = -len;
9060         is_utf8 = TRUE;
9061         /* See the note in hv.c:hv_fetch() --jhi */
9062         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9063         len = tmplen;
9064     }
9065     if (!hash)
9066         PERL_HASH(hash, src, len);
9067     new_SV(sv);
9068     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9069        changes here, update it there too.  */
9070     sv_upgrade(sv, SVt_PV);
9071     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9072     SvCUR_set(sv, len);
9073     SvLEN_set(sv, 0);
9074     SvIsCOW_on(sv);
9075     SvPOK_on(sv);
9076     if (is_utf8)
9077         SvUTF8_on(sv);
9078     if (src != orig_src)
9079         Safefree(src);
9080     return sv;
9081 }
9082
9083 /*
9084 =for apidoc newSVpv_share
9085
9086 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9087 string/length pair.
9088
9089 =cut
9090 */
9091
9092 SV *
9093 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9094 {
9095     return newSVpvn_share(src, strlen(src), hash);
9096 }
9097
9098 #if defined(PERL_IMPLICIT_CONTEXT)
9099
9100 /* pTHX_ magic can't cope with varargs, so this is a no-context
9101  * version of the main function, (which may itself be aliased to us).
9102  * Don't access this version directly.
9103  */
9104
9105 SV *
9106 Perl_newSVpvf_nocontext(const char *const pat, ...)
9107 {
9108     dTHX;
9109     SV *sv;
9110     va_list args;
9111
9112     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9113
9114     va_start(args, pat);
9115     sv = vnewSVpvf(pat, &args);
9116     va_end(args);
9117     return sv;
9118 }
9119 #endif
9120
9121 /*
9122 =for apidoc newSVpvf
9123
9124 Creates a new SV and initializes it with the string formatted like
9125 C<sprintf>.
9126
9127 =cut
9128 */
9129
9130 SV *
9131 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9132 {
9133     SV *sv;
9134     va_list args;
9135
9136     PERL_ARGS_ASSERT_NEWSVPVF;
9137
9138     va_start(args, pat);
9139     sv = vnewSVpvf(pat, &args);
9140     va_end(args);
9141     return sv;
9142 }
9143
9144 /* backend for newSVpvf() and newSVpvf_nocontext() */
9145
9146 SV *
9147 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9148 {
9149     SV *sv;
9150
9151     PERL_ARGS_ASSERT_VNEWSVPVF;
9152
9153     new_SV(sv);
9154     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9155     return sv;
9156 }
9157
9158 /*
9159 =for apidoc newSVnv
9160
9161 Creates a new SV and copies a floating point value into it.
9162 The reference count for the SV is set to 1.
9163
9164 =cut
9165 */
9166
9167 SV *
9168 Perl_newSVnv(pTHX_ const NV n)
9169 {
9170     SV *sv;
9171
9172     new_SV(sv);
9173     sv_setnv(sv,n);
9174     return sv;
9175 }
9176
9177 /*
9178 =for apidoc newSViv
9179
9180 Creates a new SV and copies an integer into it.  The reference count for the
9181 SV is set to 1.
9182
9183 =cut
9184 */
9185
9186 SV *
9187 Perl_newSViv(pTHX_ const IV i)
9188 {
9189     SV *sv;
9190
9191     new_SV(sv);
9192     sv_setiv(sv,i);
9193     return sv;
9194 }
9195
9196 /*
9197 =for apidoc newSVuv
9198
9199 Creates a new SV and copies an unsigned integer into it.
9200 The reference count for the SV is set to 1.
9201
9202 =cut
9203 */
9204
9205 SV *
9206 Perl_newSVuv(pTHX_ const UV u)
9207 {
9208     SV *sv;
9209
9210     new_SV(sv);
9211     sv_setuv(sv,u);
9212     return sv;
9213 }
9214
9215 /*
9216 =for apidoc newSV_type
9217
9218 Creates a new SV, of the type specified.  The reference count for the new SV
9219 is set to 1.
9220
9221 =cut
9222 */
9223
9224 SV *
9225 Perl_newSV_type(pTHX_ const svtype type)
9226 {
9227     SV *sv;
9228
9229     new_SV(sv);
9230     sv_upgrade(sv, type);
9231     return sv;
9232 }
9233
9234 /*
9235 =for apidoc newRV_noinc
9236
9237 Creates an RV wrapper for an SV.  The reference count for the original
9238 SV is B<not> incremented.
9239
9240 =cut
9241 */
9242
9243 SV *
9244 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9245 {
9246     SV *sv = newSV_type(SVt_IV);
9247
9248     PERL_ARGS_ASSERT_NEWRV_NOINC;
9249
9250     SvTEMP_off(tmpRef);
9251     SvRV_set(sv, tmpRef);
9252     SvROK_on(sv);
9253     return sv;
9254 }
9255
9256 /* newRV_inc is the official function name to use now.
9257  * newRV_inc is in fact #defined to newRV in sv.h
9258  */
9259
9260 SV *
9261 Perl_newRV(pTHX_ SV *const sv)
9262 {
9263     PERL_ARGS_ASSERT_NEWRV;
9264
9265     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9266 }
9267
9268 /*
9269 =for apidoc newSVsv
9270
9271 Creates a new SV which is an exact duplicate of the original SV.
9272 (Uses C<sv_setsv>.)
9273
9274 =cut
9275 */
9276
9277 SV *
9278 Perl_newSVsv(pTHX_ SV *const old)
9279 {
9280     SV *sv;
9281
9282     if (!old)
9283         return NULL;
9284     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9285         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9286         return NULL;
9287     }
9288     /* Do this here, otherwise we leak the new SV if this croaks. */
9289     SvGETMAGIC(old);
9290     new_SV(sv);
9291     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9292        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9293     sv_setsv_flags(sv, old, SV_NOSTEAL);
9294     return sv;
9295 }
9296
9297 /*
9298 =for apidoc sv_reset
9299
9300 Underlying implementation for the C<reset> Perl function.
9301 Note that the perl-level function is vaguely deprecated.
9302
9303 =cut
9304 */
9305
9306 void
9307 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9308 {
9309     PERL_ARGS_ASSERT_SV_RESET;
9310
9311     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9312 }
9313
9314 void
9315 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9316 {
9317     char todo[PERL_UCHAR_MAX+1];
9318     const char *send;
9319
9320     if (!stash || SvTYPE(stash) != SVt_PVHV)
9321         return;
9322
9323     if (!s) {           /* reset ?? searches */
9324         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9325         if (mg) {
9326             const U32 count = mg->mg_len / sizeof(PMOP**);
9327             PMOP **pmp = (PMOP**) mg->mg_ptr;
9328             PMOP *const *const end = pmp + count;
9329
9330             while (pmp < end) {
9331 #ifdef USE_ITHREADS
9332                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9333 #else
9334                 (*pmp)->op_pmflags &= ~PMf_USED;
9335 #endif
9336                 ++pmp;
9337             }
9338         }
9339         return;
9340     }
9341
9342     /* reset variables */
9343
9344     if (!HvARRAY(stash))
9345         return;
9346
9347     Zero(todo, 256, char);
9348     send = s + len;
9349     while (s < send) {
9350         I32 max;
9351         I32 i = (unsigned char)*s;
9352         if (s[1] == '-') {
9353             s += 2;
9354         }
9355         max = (unsigned char)*s++;
9356         for ( ; i <= max; i++) {
9357             todo[i] = 1;
9358         }
9359         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9360             HE *entry;
9361             for (entry = HvARRAY(stash)[i];
9362                  entry;
9363                  entry = HeNEXT(entry))
9364             {
9365                 GV *gv;
9366                 SV *sv;
9367
9368                 if (!todo[(U8)*HeKEY(entry)])
9369                     continue;
9370                 gv = MUTABLE_GV(HeVAL(entry));
9371                 sv = GvSV(gv);
9372                 if (sv && !SvREADONLY(sv)) {
9373                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9374                     if (!isGV(sv)) SvOK_off(sv);
9375                 }
9376                 if (GvAV(gv)) {
9377                     av_clear(GvAV(gv));
9378                 }
9379                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9380                     hv_clear(GvHV(gv));
9381                 }
9382             }
9383         }
9384     }
9385 }
9386
9387 /*
9388 =for apidoc sv_2io
9389
9390 Using various gambits, try to get an IO from an SV: the IO slot if its a
9391 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9392 named after the PV if we're a string.
9393
9394 'Get' magic is ignored on the sv passed in, but will be called on
9395 C<SvRV(sv)> if sv is an RV.
9396
9397 =cut
9398 */
9399
9400 IO*
9401 Perl_sv_2io(pTHX_ SV *const sv)
9402 {
9403     IO* io;
9404     GV* gv;
9405
9406     PERL_ARGS_ASSERT_SV_2IO;
9407
9408     switch (SvTYPE(sv)) {
9409     case SVt_PVIO:
9410         io = MUTABLE_IO(sv);
9411         break;
9412     case SVt_PVGV:
9413     case SVt_PVLV:
9414         if (isGV_with_GP(sv)) {
9415             gv = MUTABLE_GV(sv);
9416             io = GvIO(gv);
9417             if (!io)
9418                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9419                                     HEKfARG(GvNAME_HEK(gv)));
9420             break;
9421         }
9422         /* FALLTHROUGH */
9423     default:
9424         if (!SvOK(sv))
9425             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9426         if (SvROK(sv)) {
9427             SvGETMAGIC(SvRV(sv));
9428             return sv_2io(SvRV(sv));
9429         }
9430         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9431         if (gv)
9432             io = GvIO(gv);
9433         else
9434             io = 0;
9435         if (!io) {
9436             SV *newsv = sv;
9437             if (SvGMAGICAL(sv)) {
9438                 newsv = sv_newmortal();
9439                 sv_setsv_nomg(newsv, sv);
9440             }
9441             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9442         }
9443         break;
9444     }
9445     return io;
9446 }
9447
9448 /*
9449 =for apidoc sv_2cv
9450
9451 Using various gambits, try to get a CV from an SV; in addition, try if
9452 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9453 The flags in C<lref> are passed to gv_fetchsv.
9454
9455 =cut
9456 */
9457
9458 CV *
9459 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9460 {
9461     GV *gv = NULL;
9462     CV *cv = NULL;
9463
9464     PERL_ARGS_ASSERT_SV_2CV;
9465
9466     if (!sv) {
9467         *st = NULL;
9468         *gvp = NULL;
9469         return NULL;
9470     }
9471     switch (SvTYPE(sv)) {
9472     case SVt_PVCV:
9473         *st = CvSTASH(sv);
9474         *gvp = NULL;
9475         return MUTABLE_CV(sv);
9476     case SVt_PVHV:
9477     case SVt_PVAV:
9478         *st = NULL;
9479         *gvp = NULL;
9480         return NULL;
9481     default:
9482         SvGETMAGIC(sv);
9483         if (SvROK(sv)) {
9484             if (SvAMAGIC(sv))
9485                 sv = amagic_deref_call(sv, to_cv_amg);
9486
9487             sv = SvRV(sv);
9488             if (SvTYPE(sv) == SVt_PVCV) {
9489                 cv = MUTABLE_CV(sv);
9490                 *gvp = NULL;
9491                 *st = CvSTASH(cv);
9492                 return cv;
9493             }
9494             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9495                 gv = MUTABLE_GV(sv);
9496             else
9497                 Perl_croak(aTHX_ "Not a subroutine reference");
9498         }
9499         else if (isGV_with_GP(sv)) {
9500             gv = MUTABLE_GV(sv);
9501         }
9502         else {
9503             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9504         }
9505         *gvp = gv;
9506         if (!gv) {
9507             *st = NULL;
9508             return NULL;
9509         }
9510         /* Some flags to gv_fetchsv mean don't really create the GV  */
9511         if (!isGV_with_GP(gv)) {
9512             *st = NULL;
9513             return NULL;
9514         }
9515         *st = GvESTASH(gv);
9516         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9517             /* XXX this is probably not what they think they're getting.
9518              * It has the same effect as "sub name;", i.e. just a forward
9519              * declaration! */
9520             newSTUB(gv,0);
9521         }
9522         return GvCVu(gv);
9523     }
9524 }
9525
9526 /*
9527 =for apidoc sv_true
9528
9529 Returns true if the SV has a true value by Perl's rules.
9530 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9531 instead use an in-line version.
9532
9533 =cut
9534 */
9535
9536 I32
9537 Perl_sv_true(pTHX_ SV *const sv)
9538 {
9539     if (!sv)
9540         return 0;
9541     if (SvPOK(sv)) {
9542         const XPV* const tXpv = (XPV*)SvANY(sv);
9543         if (tXpv &&
9544                 (tXpv->xpv_cur > 1 ||
9545                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9546             return 1;
9547         else
9548             return 0;
9549     }
9550     else {
9551         if (SvIOK(sv))
9552             return SvIVX(sv) != 0;
9553         else {
9554             if (SvNOK(sv))
9555                 return SvNVX(sv) != 0.0;
9556             else
9557                 return sv_2bool(sv);
9558         }
9559     }
9560 }
9561
9562 /*
9563 =for apidoc sv_pvn_force
9564
9565 Get a sensible string out of the SV somehow.
9566 A private implementation of the C<SvPV_force> macro for compilers which
9567 can't cope with complex macro expressions.  Always use the macro instead.
9568
9569 =for apidoc sv_pvn_force_flags
9570
9571 Get a sensible string out of the SV somehow.
9572 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9573 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9574 implemented in terms of this function.
9575 You normally want to use the various wrapper macros instead: see
9576 C<SvPV_force> and C<SvPV_force_nomg>
9577
9578 =cut
9579 */
9580
9581 char *
9582 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9583 {
9584     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9585
9586     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9587     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9588         sv_force_normal_flags(sv, 0);
9589
9590     if (SvPOK(sv)) {
9591         if (lp)
9592             *lp = SvCUR(sv);
9593     }
9594     else {
9595         char *s;
9596         STRLEN len;
9597  
9598         if (SvTYPE(sv) > SVt_PVLV
9599             || isGV_with_GP(sv))
9600             /* diag_listed_as: Can't coerce %s to %s in %s */
9601             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9602                 OP_DESC(PL_op));
9603         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9604         if (!s) {
9605           s = (char *)"";
9606         }
9607         if (lp)
9608             *lp = len;
9609
9610         if (SvTYPE(sv) < SVt_PV ||
9611             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9612             if (SvROK(sv))
9613                 sv_unref(sv);
9614             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9615             SvGROW(sv, len + 1);
9616             Move(s,SvPVX(sv),len,char);
9617             SvCUR_set(sv, len);
9618             SvPVX(sv)[len] = '\0';
9619         }
9620         if (!SvPOK(sv)) {
9621             SvPOK_on(sv);               /* validate pointer */
9622             SvTAINT(sv);
9623             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9624                                   PTR2UV(sv),SvPVX_const(sv)));
9625         }
9626     }
9627     (void)SvPOK_only_UTF8(sv);
9628     return SvPVX_mutable(sv);
9629 }
9630
9631 /*
9632 =for apidoc sv_pvbyten_force
9633
9634 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9635 instead.
9636
9637 =cut
9638 */
9639
9640 char *
9641 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9642 {
9643     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9644
9645     sv_pvn_force(sv,lp);
9646     sv_utf8_downgrade(sv,0);
9647     *lp = SvCUR(sv);
9648     return SvPVX(sv);
9649 }
9650
9651 /*
9652 =for apidoc sv_pvutf8n_force
9653
9654 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9655 instead.
9656
9657 =cut
9658 */
9659
9660 char *
9661 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9662 {
9663     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9664
9665     sv_pvn_force(sv,0);
9666     sv_utf8_upgrade_nomg(sv);
9667     *lp = SvCUR(sv);
9668     return SvPVX(sv);
9669 }
9670
9671 /*
9672 =for apidoc sv_reftype
9673
9674 Returns a string describing what the SV is a reference to.
9675
9676 =cut
9677 */
9678
9679 const char *
9680 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9681 {
9682     PERL_ARGS_ASSERT_SV_REFTYPE;
9683     if (ob && SvOBJECT(sv)) {
9684         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9685     }
9686     else {
9687         /* WARNING - There is code, for instance in mg.c, that assumes that
9688          * the only reason that sv_reftype(sv,0) would return a string starting
9689          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9690          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9691          * this routine inside other subs, and it saves time.
9692          * Do not change this assumption without searching for "dodgy type check" in
9693          * the code.
9694          * - Yves */
9695         switch (SvTYPE(sv)) {
9696         case SVt_NULL:
9697         case SVt_IV:
9698         case SVt_NV:
9699         case SVt_PV:
9700         case SVt_PVIV:
9701         case SVt_PVNV:
9702         case SVt_PVMG:
9703                                 if (SvVOK(sv))
9704                                     return "VSTRING";
9705                                 if (SvROK(sv))
9706                                     return "REF";
9707                                 else
9708                                     return "SCALAR";
9709
9710         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9711                                 /* tied lvalues should appear to be
9712                                  * scalars for backwards compatibility */
9713                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9714                                     ? "SCALAR" : "LVALUE");
9715         case SVt_PVAV:          return "ARRAY";
9716         case SVt_PVHV:          return "HASH";
9717         case SVt_PVCV:          return "CODE";
9718         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9719                                     ? "GLOB" : "SCALAR");
9720         case SVt_PVFM:          return "FORMAT";
9721         case SVt_PVIO:          return "IO";
9722         case SVt_INVLIST:       return "INVLIST";
9723         case SVt_REGEXP:        return "REGEXP";
9724         default:                return "UNKNOWN";
9725         }
9726     }
9727 }
9728
9729 /*
9730 =for apidoc sv_ref
9731
9732 Returns a SV describing what the SV passed in is a reference to.
9733
9734 =cut
9735 */
9736
9737 SV *
9738 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9739 {
9740     PERL_ARGS_ASSERT_SV_REF;
9741
9742     if (!dst)
9743         dst = sv_newmortal();
9744
9745     if (ob && SvOBJECT(sv)) {
9746         HvNAME_get(SvSTASH(sv))
9747                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9748                     : sv_setpvn(dst, "__ANON__", 8);
9749     }
9750     else {
9751         const char * reftype = sv_reftype(sv, 0);
9752         sv_setpv(dst, reftype);
9753     }
9754     return dst;
9755 }
9756
9757 /*
9758 =for apidoc sv_isobject
9759
9760 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9761 object.  If the SV is not an RV, or if the object is not blessed, then this
9762 will return false.
9763
9764 =cut
9765 */
9766
9767 int
9768 Perl_sv_isobject(pTHX_ SV *sv)
9769 {
9770     if (!sv)
9771         return 0;
9772     SvGETMAGIC(sv);
9773     if (!SvROK(sv))
9774         return 0;
9775     sv = SvRV(sv);
9776     if (!SvOBJECT(sv))
9777         return 0;
9778     return 1;
9779 }
9780
9781 /*
9782 =for apidoc sv_isa
9783
9784 Returns a boolean indicating whether the SV is blessed into the specified
9785 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9786 an inheritance relationship.
9787
9788 =cut
9789 */
9790
9791 int
9792 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9793 {
9794     const char *hvname;
9795
9796     PERL_ARGS_ASSERT_SV_ISA;
9797
9798     if (!sv)
9799         return 0;
9800     SvGETMAGIC(sv);
9801     if (!SvROK(sv))
9802         return 0;
9803     sv = SvRV(sv);
9804     if (!SvOBJECT(sv))
9805         return 0;
9806     hvname = HvNAME_get(SvSTASH(sv));
9807     if (!hvname)
9808         return 0;
9809
9810     return strEQ(hvname, name);
9811 }
9812
9813 /*
9814 =for apidoc newSVrv
9815
9816 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9817 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9818 SV will be blessed in the specified package.  The new SV is returned and its
9819 reference count is 1.  The reference count 1 is owned by C<rv>.
9820
9821 =cut
9822 */
9823
9824 SV*
9825 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9826 {
9827     SV *sv;
9828
9829     PERL_ARGS_ASSERT_NEWSVRV;
9830
9831     new_SV(sv);
9832
9833     SV_CHECK_THINKFIRST_COW_DROP(rv);
9834
9835     if (SvTYPE(rv) >= SVt_PVMG) {
9836         const U32 refcnt = SvREFCNT(rv);
9837         SvREFCNT(rv) = 0;
9838         sv_clear(rv);
9839         SvFLAGS(rv) = 0;
9840         SvREFCNT(rv) = refcnt;
9841
9842         sv_upgrade(rv, SVt_IV);
9843     } else if (SvROK(rv)) {
9844         SvREFCNT_dec(SvRV(rv));
9845     } else {
9846         prepare_SV_for_RV(rv);
9847     }
9848
9849     SvOK_off(rv);
9850     SvRV_set(rv, sv);
9851     SvROK_on(rv);
9852
9853     if (classname) {
9854         HV* const stash = gv_stashpv(classname, GV_ADD);
9855         (void)sv_bless(rv, stash);
9856     }
9857     return sv;
9858 }
9859
9860 SV *
9861 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9862 {
9863     SV * const lv = newSV_type(SVt_PVLV);
9864     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9865     LvTYPE(lv) = 'y';
9866     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9867     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9868     LvSTARGOFF(lv) = ix;
9869     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9870     return lv;
9871 }
9872
9873 /*
9874 =for apidoc sv_setref_pv
9875
9876 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9877 argument will be upgraded to an RV.  That RV will be modified to point to
9878 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9879 into the SV.  The C<classname> argument indicates the package for the
9880 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9881 will have a reference count of 1, and the RV will be returned.
9882
9883 Do not use with other Perl types such as HV, AV, SV, CV, because those
9884 objects will become corrupted by the pointer copy process.
9885
9886 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9887
9888 =cut
9889 */
9890
9891 SV*
9892 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9893 {
9894     PERL_ARGS_ASSERT_SV_SETREF_PV;
9895
9896     if (!pv) {
9897         sv_setsv(rv, &PL_sv_undef);
9898         SvSETMAGIC(rv);
9899     }
9900     else
9901         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9902     return rv;
9903 }
9904
9905 /*
9906 =for apidoc sv_setref_iv
9907
9908 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9909 argument will be upgraded to an RV.  That RV will be modified to point to
9910 the new SV.  The C<classname> argument indicates the package for the
9911 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9912 will have a reference count of 1, and the RV will be returned.
9913
9914 =cut
9915 */
9916
9917 SV*
9918 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9919 {
9920     PERL_ARGS_ASSERT_SV_SETREF_IV;
9921
9922     sv_setiv(newSVrv(rv,classname), iv);
9923     return rv;
9924 }
9925
9926 /*
9927 =for apidoc sv_setref_uv
9928
9929 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9930 argument will be upgraded to an RV.  That RV will be modified to point to
9931 the new SV.  The C<classname> argument indicates the package for the
9932 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9933 will have a reference count of 1, and the RV will be returned.
9934
9935 =cut
9936 */
9937
9938 SV*
9939 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9940 {
9941     PERL_ARGS_ASSERT_SV_SETREF_UV;
9942
9943     sv_setuv(newSVrv(rv,classname), uv);
9944     return rv;
9945 }
9946
9947 /*
9948 =for apidoc sv_setref_nv
9949
9950 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9951 argument will be upgraded to an RV.  That RV will be modified to point to
9952 the new SV.  The C<classname> argument indicates the package for the
9953 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9954 will have a reference count of 1, and the RV will be returned.
9955
9956 =cut
9957 */
9958
9959 SV*
9960 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9961 {
9962     PERL_ARGS_ASSERT_SV_SETREF_NV;
9963
9964     sv_setnv(newSVrv(rv,classname), nv);
9965     return rv;
9966 }
9967
9968 /*
9969 =for apidoc sv_setref_pvn
9970
9971 Copies a string into a new SV, optionally blessing the SV.  The length of the
9972 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9973 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9974 argument indicates the package for the blessing.  Set C<classname> to
9975 C<NULL> to avoid the blessing.  The new SV will have a reference count
9976 of 1, and the RV will be returned.
9977
9978 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9979
9980 =cut
9981 */
9982
9983 SV*
9984 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9985                    const char *const pv, const STRLEN n)
9986 {
9987     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9988
9989     sv_setpvn(newSVrv(rv,classname), pv, n);
9990     return rv;
9991 }
9992
9993 /*
9994 =for apidoc sv_bless
9995
9996 Blesses an SV into a specified package.  The SV must be an RV.  The package
9997 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9998 of the SV is unaffected.
9999
10000 =cut
10001 */
10002
10003 SV*
10004 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10005 {
10006     SV *tmpRef;
10007     HV *oldstash = NULL;
10008
10009     PERL_ARGS_ASSERT_SV_BLESS;
10010
10011     SvGETMAGIC(sv);
10012     if (!SvROK(sv))
10013         Perl_croak(aTHX_ "Can't bless non-reference value");
10014     tmpRef = SvRV(sv);
10015     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
10016         if (SvREADONLY(tmpRef))
10017             Perl_croak_no_modify();
10018         if (SvOBJECT(tmpRef)) {
10019             oldstash = SvSTASH(tmpRef);
10020         }
10021     }
10022     SvOBJECT_on(tmpRef);
10023     SvUPGRADE(tmpRef, SVt_PVMG);
10024     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10025     SvREFCNT_dec(oldstash);
10026
10027     if(SvSMAGICAL(tmpRef))
10028         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10029             mg_set(tmpRef);
10030
10031
10032
10033     return sv;
10034 }
10035
10036 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10037  * as it is after unglobbing it.
10038  */
10039
10040 PERL_STATIC_INLINE void
10041 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10042 {
10043     void *xpvmg;
10044     HV *stash;
10045     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10046
10047     PERL_ARGS_ASSERT_SV_UNGLOB;
10048
10049     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10050     SvFAKE_off(sv);
10051     if (!(flags & SV_COW_DROP_PV))
10052         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10053
10054     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10055     if (GvGP(sv)) {
10056         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10057            && HvNAME_get(stash))
10058             mro_method_changed_in(stash);
10059         gp_free(MUTABLE_GV(sv));
10060     }
10061     if (GvSTASH(sv)) {
10062         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10063         GvSTASH(sv) = NULL;
10064     }
10065     GvMULTI_off(sv);
10066     if (GvNAME_HEK(sv)) {
10067         unshare_hek(GvNAME_HEK(sv));
10068     }
10069     isGV_with_GP_off(sv);
10070
10071     if(SvTYPE(sv) == SVt_PVGV) {
10072         /* need to keep SvANY(sv) in the right arena */
10073         xpvmg = new_XPVMG();
10074         StructCopy(SvANY(sv), xpvmg, XPVMG);
10075         del_XPVGV(SvANY(sv));
10076         SvANY(sv) = xpvmg;
10077
10078         SvFLAGS(sv) &= ~SVTYPEMASK;
10079         SvFLAGS(sv) |= SVt_PVMG;
10080     }
10081
10082     /* Intentionally not calling any local SET magic, as this isn't so much a
10083        set operation as merely an internal storage change.  */
10084     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10085     else sv_setsv_flags(sv, temp, 0);
10086
10087     if ((const GV *)sv == PL_last_in_gv)
10088         PL_last_in_gv = NULL;
10089     else if ((const GV *)sv == PL_statgv)
10090         PL_statgv = NULL;
10091 }
10092
10093 /*
10094 =for apidoc sv_unref_flags
10095
10096 Unsets the RV status of the SV, and decrements the reference count of
10097 whatever was being referenced by the RV.  This can almost be thought of
10098 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10099 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10100 (otherwise the decrementing is conditional on the reference count being
10101 different from one or the reference being a readonly SV).
10102 See C<SvROK_off>.
10103
10104 =cut
10105 */
10106
10107 void
10108 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10109 {
10110     SV* const target = SvRV(ref);
10111
10112     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10113
10114     if (SvWEAKREF(ref)) {
10115         sv_del_backref(target, ref);
10116         SvWEAKREF_off(ref);
10117         SvRV_set(ref, NULL);
10118         return;
10119     }
10120     SvRV_set(ref, NULL);
10121     SvROK_off(ref);
10122     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10123        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10124     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10125         SvREFCNT_dec_NN(target);
10126     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10127         sv_2mortal(target);     /* Schedule for freeing later */
10128 }
10129
10130 /*
10131 =for apidoc sv_untaint
10132
10133 Untaint an SV.  Use C<SvTAINTED_off> instead.
10134
10135 =cut
10136 */
10137
10138 void
10139 Perl_sv_untaint(pTHX_ SV *const sv)
10140 {
10141     PERL_ARGS_ASSERT_SV_UNTAINT;
10142     PERL_UNUSED_CONTEXT;
10143
10144     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10145         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10146         if (mg)
10147             mg->mg_len &= ~1;
10148     }
10149 }
10150
10151 /*
10152 =for apidoc sv_tainted
10153
10154 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10155
10156 =cut
10157 */
10158
10159 bool
10160 Perl_sv_tainted(pTHX_ SV *const sv)
10161 {
10162     PERL_ARGS_ASSERT_SV_TAINTED;
10163     PERL_UNUSED_CONTEXT;
10164
10165     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10166         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10167         if (mg && (mg->mg_len & 1) )
10168             return TRUE;
10169     }
10170     return FALSE;
10171 }
10172
10173 /*
10174 =for apidoc sv_setpviv
10175
10176 Copies an integer into the given SV, also updating its string value.
10177 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10178
10179 =cut
10180 */
10181
10182 void
10183 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10184 {
10185     char buf[TYPE_CHARS(UV)];
10186     char *ebuf;
10187     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10188
10189     PERL_ARGS_ASSERT_SV_SETPVIV;
10190
10191     sv_setpvn(sv, ptr, ebuf - ptr);
10192 }
10193
10194 /*
10195 =for apidoc sv_setpviv_mg
10196
10197 Like C<sv_setpviv>, but also handles 'set' magic.
10198
10199 =cut
10200 */
10201
10202 void
10203 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10204 {
10205     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10206
10207     sv_setpviv(sv, iv);
10208     SvSETMAGIC(sv);
10209 }
10210
10211 #if defined(PERL_IMPLICIT_CONTEXT)
10212
10213 /* pTHX_ magic can't cope with varargs, so this is a no-context
10214  * version of the main function, (which may itself be aliased to us).
10215  * Don't access this version directly.
10216  */
10217
10218 void
10219 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10220 {
10221     dTHX;
10222     va_list args;
10223
10224     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10225
10226     va_start(args, pat);
10227     sv_vsetpvf(sv, pat, &args);
10228     va_end(args);
10229 }
10230
10231 /* pTHX_ magic can't cope with varargs, so this is a no-context
10232  * version of the main function, (which may itself be aliased to us).
10233  * Don't access this version directly.
10234  */
10235
10236 void
10237 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10238 {
10239     dTHX;
10240     va_list args;
10241
10242     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10243
10244     va_start(args, pat);
10245     sv_vsetpvf_mg(sv, pat, &args);
10246     va_end(args);
10247 }
10248 #endif
10249
10250 /*
10251 =for apidoc sv_setpvf
10252
10253 Works like C<sv_catpvf> but copies the text into the SV instead of
10254 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10255
10256 =cut
10257 */
10258
10259 void
10260 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10261 {
10262     va_list args;
10263
10264     PERL_ARGS_ASSERT_SV_SETPVF;
10265
10266     va_start(args, pat);
10267     sv_vsetpvf(sv, pat, &args);
10268     va_end(args);
10269 }
10270
10271 /*
10272 =for apidoc sv_vsetpvf
10273
10274 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10275 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10276
10277 Usually used via its frontend C<sv_setpvf>.
10278
10279 =cut
10280 */
10281
10282 void
10283 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10284 {
10285     PERL_ARGS_ASSERT_SV_VSETPVF;
10286
10287     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10288 }
10289
10290 /*
10291 =for apidoc sv_setpvf_mg
10292
10293 Like C<sv_setpvf>, but also handles 'set' magic.
10294
10295 =cut
10296 */
10297
10298 void
10299 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10300 {
10301     va_list args;
10302
10303     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10304
10305     va_start(args, pat);
10306     sv_vsetpvf_mg(sv, pat, &args);
10307     va_end(args);
10308 }
10309
10310 /*
10311 =for apidoc sv_vsetpvf_mg
10312
10313 Like C<sv_vsetpvf>, but also handles 'set' magic.
10314
10315 Usually used via its frontend C<sv_setpvf_mg>.
10316
10317 =cut
10318 */
10319
10320 void
10321 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10322 {
10323     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10324
10325     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10326     SvSETMAGIC(sv);
10327 }
10328
10329 #if defined(PERL_IMPLICIT_CONTEXT)
10330
10331 /* pTHX_ magic can't cope with varargs, so this is a no-context
10332  * version of the main function, (which may itself be aliased to us).
10333  * Don't access this version directly.
10334  */
10335
10336 void
10337 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10338 {
10339     dTHX;
10340     va_list args;
10341
10342     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10343
10344     va_start(args, pat);
10345     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10346     va_end(args);
10347 }
10348
10349 /* pTHX_ magic can't cope with varargs, so this is a no-context
10350  * version of the main function, (which may itself be aliased to us).
10351  * Don't access this version directly.
10352  */
10353
10354 void
10355 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10356 {
10357     dTHX;
10358     va_list args;
10359
10360     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10361
10362     va_start(args, pat);
10363     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10364     SvSETMAGIC(sv);
10365     va_end(args);
10366 }
10367 #endif
10368
10369 /*
10370 =for apidoc sv_catpvf
10371
10372 Processes its arguments like C<sprintf> and appends the formatted
10373 output to an SV.  If the appended data contains "wide" characters
10374 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10375 and characters >255 formatted with %c), the original SV might get
10376 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10377 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10378 valid UTF-8; if the original SV was bytes, the pattern should be too.
10379
10380 =cut */
10381
10382 void
10383 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10384 {
10385     va_list args;
10386
10387     PERL_ARGS_ASSERT_SV_CATPVF;
10388
10389     va_start(args, pat);
10390     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10391     va_end(args);
10392 }
10393
10394 /*
10395 =for apidoc sv_vcatpvf
10396
10397 Processes its arguments like C<vsprintf> and appends the formatted output
10398 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10399
10400 Usually used via its frontend C<sv_catpvf>.
10401
10402 =cut
10403 */
10404
10405 void
10406 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10407 {
10408     PERL_ARGS_ASSERT_SV_VCATPVF;
10409
10410     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10411 }
10412
10413 /*
10414 =for apidoc sv_catpvf_mg
10415
10416 Like C<sv_catpvf>, but also handles 'set' magic.
10417
10418 =cut
10419 */
10420
10421 void
10422 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10423 {
10424     va_list args;
10425
10426     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10427
10428     va_start(args, pat);
10429     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10430     SvSETMAGIC(sv);
10431     va_end(args);
10432 }
10433
10434 /*
10435 =for apidoc sv_vcatpvf_mg
10436
10437 Like C<sv_vcatpvf>, but also handles 'set' magic.
10438
10439 Usually used via its frontend C<sv_catpvf_mg>.
10440
10441 =cut
10442 */
10443
10444 void
10445 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10446 {
10447     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10448
10449     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10450     SvSETMAGIC(sv);
10451 }
10452
10453 /*
10454 =for apidoc sv_vsetpvfn
10455
10456 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10457 appending it.
10458
10459 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10460
10461 =cut
10462 */
10463
10464 void
10465 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10466                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10467 {
10468     PERL_ARGS_ASSERT_SV_VSETPVFN;
10469
10470     sv_setpvs(sv, "");
10471     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10472 }
10473
10474
10475 /*
10476  * Warn of missing argument to sprintf, and then return a defined value
10477  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10478  */
10479 STATIC SV*
10480 S_vcatpvfn_missing_argument(pTHX) {
10481     if (ckWARN(WARN_MISSING)) {
10482         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10483                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10484     }
10485     return &PL_sv_no;
10486 }
10487
10488
10489 STATIC I32
10490 S_expect_number(pTHX_ char **const pattern)
10491 {
10492     I32 var = 0;
10493
10494     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10495
10496     switch (**pattern) {
10497     case '1': case '2': case '3':
10498     case '4': case '5': case '6':
10499     case '7': case '8': case '9':
10500         var = *(*pattern)++ - '0';
10501         while (isDIGIT(**pattern)) {
10502             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10503             if (tmp < var)
10504                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10505             var = tmp;
10506         }
10507     }
10508     return var;
10509 }
10510
10511 STATIC char *
10512 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10513 {
10514     const int neg = nv < 0;
10515     UV uv;
10516
10517     PERL_ARGS_ASSERT_F0CONVERT;
10518
10519     if (neg)
10520         nv = -nv;
10521     if (nv < UV_MAX) {
10522         char *p = endbuf;
10523         nv += 0.5;
10524         uv = (UV)nv;
10525         if (uv & 1 && uv == nv)
10526             uv--;                       /* Round to even */
10527         do {
10528             const unsigned dig = uv % 10;
10529             *--p = '0' + dig;
10530         } while (uv /= 10);
10531         if (neg)
10532             *--p = '-';
10533         *len = endbuf - p;
10534         return p;
10535     }
10536     return NULL;
10537 }
10538
10539
10540 /*
10541 =for apidoc sv_vcatpvfn
10542
10543 =for apidoc sv_vcatpvfn_flags
10544
10545 Processes its arguments like C<vsprintf> and appends the formatted output
10546 to an SV.  Uses an array of SVs if the C style variable argument list is
10547 missing (NULL).  When running with taint checks enabled, indicates via
10548 C<maybe_tainted> if results are untrustworthy (often due to the use of
10549 locales).
10550
10551 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10552
10553 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10554
10555 =cut
10556 */
10557
10558 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10559                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10560                         vec_utf8 = DO_UTF8(vecsv);
10561
10562 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10563
10564 void
10565 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10566                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10567 {
10568     PERL_ARGS_ASSERT_SV_VCATPVFN;
10569
10570     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10571 }
10572
10573 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \
10574     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10575     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
10576 #  define LONGDOUBLE_LITTLE_ENDIAN
10577 #endif
10578
10579 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \
10580     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \
10581     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10582 #  define LONGDOUBLE_BIG_ENDIAN
10583 #endif
10584
10585 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10586     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10587 #  define LONGDOUBLE_X86_80_BIT
10588 #endif
10589
10590 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \
10591     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10592 #  define LONGDOUBLE_DOUBLEDOUBLE
10593 #  define DOUBLEDOUBLE_MAXBITS 1028
10594 #endif
10595
10596 #ifdef LONGDOUBLE_X86_80_BIT
10597 #  undef LONGDOUBLE_HAS_IMPLICIT_BIT
10598 #else
10599 #  define LONGDOUBLE_HAS_IMPLICIT_BIT
10600 #endif
10601
10602 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10603 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10604  * of 4 bits); 1 for the implicit 1, and at most 1028 bits of mantissa,
10605  * four bits per xdigit. */
10606 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
10607 #else
10608 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10609  * of 4 bits); 1 for the implicit 1, and at most 128 bits of mantissa,
10610  * four bits per xdigit. */
10611 #  define VHEX_SIZE (1+128/4)
10612 #endif
10613
10614 /* If we do not have a known long double format, (including not using
10615  * long doubles, or long doubles being equal to doubles) then we will
10616  * fall back to the ldexp/frexp route, with which we can retrieve at
10617  * most as many bits as our widest unsigned integer type is.  We try
10618  * to get a 64-bit unsigned integer even if we are not having 64-bit
10619  * UV. */
10620 #if defined(HAS_QUAD) && defined(Uquad_t)
10621 #  define MANTISSATYPE Uquad_t
10622 #  define MANTISSASIZE 8
10623 #else
10624 #  define MANTISSATYPE UV /* May lose precision if UVSIZE is not 8. */
10625 #  define MANTISSASIZE UVSIZE
10626 #endif
10627
10628 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10629  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10630  * are being extracted from (either directly from the long double in-memory
10631  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10632  * is used to update the exponent.  vhex is the pointer to the beginning
10633  * of the output buffer (of VHEX_SIZE).
10634  *
10635  * The tricky part is that S_hextract() needs to be called twice:
10636  * the first time with vend as NULL, and the second time with vend as
10637  * the pointer returned by the first call.  What happens is that on
10638  * the first round the output size is computed, and the intended
10639  * extraction sanity checked.  On the second round the actual output
10640  * (the extraction of the hexadecimal values) takes place.
10641  * Sanity failures cause fatal failures during both rounds. */
10642 STATIC U8*
10643 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10644 {
10645     U8* v = vhex;
10646     int ix;
10647     int ixmin = 0, ixmax = 0;
10648
10649     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10650      * and elsewhere. */
10651
10652     /* These macros are just to reduce typos, they have multiple
10653      * repetitions below, but usually only one (or sometimes two)
10654      * of them is really being used. */
10655     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10656 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10657 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10658 #define HEXTRACT_OUTPUT(ix) \
10659     STMT_START { \
10660         HEXTRACT_OUTPUT_HI(ix); \
10661         HEXTRACT_OUTPUT_LO(ix); \
10662     } STMT_END
10663 #define HEXTRACT_COUNT(ix, c) \
10664     STMT_START { \
10665       v += c; \
10666       if (ix < ixmin) \
10667         ixmin = ix; \
10668       else if (ix > ixmax) \
10669         ixmax = ix; \
10670     } STMT_END
10671 #ifdef LONGDOUBLE_HAS_IMPLICIT_BIT
10672 #  define HEXTRACT_IMPLICIT_BIT(nv) \
10673     if (nv != 0.0 && vend) \
10674       *v++ = 1; \
10675     else \
10676       v++;
10677 #else
10678 #  undef HEXTRACT_IMPLICIT_BIT
10679 #endif
10680
10681     /* First see if we are using long doubles. */
10682 #if NVSIZE > DOUBLESIZE && LONG_DOUBLEKIND != LONG_DOUBLE_IS_DOUBLE
10683     const U8* nvp = (const U8*)(&nv);
10684 #  ifdef LONGDOUBLE_DOUBLEDOUBLE
10685 #    define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/8)
10686 #  else
10687 #    define HEXTRACTSIZE NVSIZE
10688 #  endif
10689     const U8* vmaxend = vhex + 2 * HEXTRACTSIZE + 1;
10690     (void)Perl_frexp(PERL_ABS(nv), exponent);
10691     if (vend && (vend <= vhex || vend > vmaxend))
10692         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10693 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10694     /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10695      * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10696     /* The bytes 13..0 are the mantissa/fraction,
10697      * the 15,14 are the sign+exponent. */
10698     HEXTRACT_IMPLICIT_BIT(nv);
10699     for (ix = 13; ix >= 0; ix--) {
10700         if (vend)
10701             HEXTRACT_OUTPUT(ix);
10702         else
10703             HEXTRACT_COUNT(ix, 2);
10704     }
10705 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10706     /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10707      * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10708     /* The bytes 2..15 are the mantissa/fraction,
10709      * the 0,1 are the sign+exponent. */
10710     HEXTRACT_IMPLICIT_BIT(nv);
10711     for (ix = 2; ix <= 15; ix++) {
10712         if (vend)
10713             HEXTRACT_OUTPUT(ix);
10714         else
10715             HEXTRACT_COUNT(ix, 2);
10716     }
10717 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10718     /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10719      * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10720      * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10721      * meaning that 2 or 6 bytes are empty padding. */
10722     /* The bytes 7..0 are the mantissa/fraction */
10723     /* There explicitly is *no* implicit bit in this case. */
10724     for (ix = 7; ix >= 0; ix--) {
10725         if (vend)
10726             HEXTRACT_OUTPUT(ix);
10727         else
10728             HEXTRACT_COUNT(ix, 2);
10729     }
10730 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10731     /* Does this format ever happen? (Wikipedia says the Motorola
10732      * 6888x math coprocessors used format _like_ this but padded
10733      * to 96 bits with 16 unused bits between the exponent and the
10734      * mantissa.) */
10735     /* There explicitly is *no* implicit bit in this case. */
10736     for (ix = 0; ix < 8; ix++) {
10737         if (vend)
10738             HEXTRACT_OUTPUT(ix);
10739         else
10740             HEXTRACT_COUNT(ix, 2);
10741     }
10742 #  elif defined(LONGDOUBLE_DOUBLEDOUBLE)
10743     /* The little-endian double-double is used .. somewhere?
10744      *
10745      * The big endian double-double is used in e.g. PPC/Power (AIX)
10746      * and MIPS (SGI).
10747      *
10748      * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10749      * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
10750      * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
10751      *
10752      * With the double-double format the bytewise extraction we use
10753      * for the other long double formats doesn't work, we must extract
10754      * the values bit by bit. */
10755
10756     if (nv == (NV)0.0) {
10757         if (vend)
10758             *v++ = 0;
10759         else
10760             v++;
10761         *exponent = 0;
10762     }
10763     else {
10764         NV d = nv < 0 ? -nv : nv;
10765         NV e = (NV)1.0;
10766         U8 ha = 0x0; /* hexvalue accumulator */
10767         U8 hd = 0x8; /* hexvalue digit */
10768
10769         *exponent = 1;
10770
10771         while (e > d) {
10772             e *= (NV)0.5;
10773             (*exponent)--;
10774         }
10775         /* Now d >= e */
10776
10777         while (d >= e + e) {
10778             e += e;
10779             (*exponent)++;
10780         }
10781         /* Now e <= d < 2*e */
10782
10783         /* First extract the leading hexdigit (the implicit bit). */
10784         if (d >= e) {
10785             d -= e;
10786             if (vend)
10787                 *v++ = 1;
10788             else
10789                 v++;
10790         }
10791         else {
10792             if (vend)
10793                 *v++ = 0;
10794             else
10795                 v++;
10796         }
10797         e *= (NV)0.5;
10798
10799         /* Then extract the remaining hexdigits. */
10800         while (d > (NV)0.0) {
10801             if (d >= e) {
10802                 ha |= hd;
10803                 d -= e;
10804             }
10805             if (hd == 1) {
10806                 /* Output or count in groups of four bits,
10807                  * that is, when the hexdigit is down to one. */
10808                 if (vend)
10809                     *v++ = ha;
10810                 else
10811                     v++;
10812                 /* Reset the hexvalue. */
10813                 ha = 0x0;
10814                 hd = 0x8;
10815             }
10816             else 
10817                 hd >>= 1;
10818             e *= (NV)0.5;
10819         }
10820
10821         /* Flush possible pending hexvalue. */
10822         if (ha) {
10823             if (vend)
10824                 *v++ = ha;
10825             else
10826                 v++;
10827         }
10828     }
10829 #  else
10830     Perl_croak(aTHX_
10831                "Hexadecimal float: unsupported long double format");
10832 #  endif
10833 #else
10834     /* If not using long doubles (or if the long double format is
10835      * known but not yet supported), try to retrieve the mantissa bits
10836      * via frexp+ldexp. */
10837
10838     NV norm = Perl_frexp(PERL_ABS(nv), exponent);
10839     /* Theoretically we have all the bytes [0, MANTISSASIZE-1] to
10840      * inspect; but in practice we don't want the leading nybbles that
10841      * are zero.  With the common IEEE 754 value for NV_MANT_DIG being
10842      * 53, we want the limit byte to be (int)((53-1)/8) == 6.
10843      *
10844      * Note that this is _not_ inspecting the in-memory format of the
10845      * nv (as opposed to the long double method), but instead the UV
10846      * retrieved with the frexp+ldexp invocation. */
10847 #  if MANTISSASIZE * 8 > NV_MANT_DIG
10848     MANTISSATYPE mantissa = (MANTISSATYPE)Perl_ldexp(norm, NV_MANT_DIG);
10849     int limit_byte = (NV_MANT_DIG - 1) / 8;
10850 #  else
10851     /* There will be low-order precision loss.  Try to salvage as many
10852      * bits as possible.  Will truncate, not round. */
10853     MANTISSATYPE mantissa =
10854     Perl_ldexp(norm,
10855                /* The highest possible shift by two that fits in the
10856                 * mantissa and is aligned (by four) the same was as
10857                 * NV_MANT_DIG. */
10858                MANTISSASIZE * 8 - (4 - NV_MANT_DIG % 4));
10859     int limit_byte = MANTISSASIZE - 1;
10860 #  endif
10861     const U8* nvp = (const U8*)(&mantissa);
10862 #  define HEXTRACTSIZE MANTISSASIZE
10863     /* We make here the wild assumption that the endianness of doubles
10864      * is similar to the endianness of integers, and that there is no
10865      * middle-endianness.  This may come back to haunt us (the rumor
10866      * has it that ARM can be quite haunted).
10867      *
10868      * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10869      * bytes, since we might need to handle printf precision, and also
10870      * insert the radix.
10871      */
10872 #  if BYTEORDER == 0x12345678 || BYTEORDER == 0x1234 || \
10873      defined(LONGDOUBLEKIND_LITTLE_ENDIAN)
10874     /* Little endian. */
10875     for (ix = limit_byte; ix >= 0; ix--) {
10876         if (vend)
10877             HEXTRACT_OUTPUT(ix);
10878         else
10879             HEXTRACT_COUNT(ix, 2);
10880     }
10881 #  else
10882     /* Big endian. */
10883     for (ix = MANTISSASIZE - 1 - limit_byte; ix < MANTISSASIZE; ix++) {
10884         if (vend)
10885             HEXTRACT_OUTPUT(ix);
10886         else
10887             HEXTRACT_COUNT(ix, 2);
10888     }
10889 #  endif
10890     /* If there are not enough bits in MANTISSATYPE, we couldn't get
10891      * all of them, issue a warning.
10892      *
10893      * Note that NV_PRESERVES_UV_BITS would not help here, it is the
10894      * wrong way around. */
10895 #  if NV_MANT_DIG > MANTISSASIZE * 8
10896     Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
10897                    "Hexadecimal float: precision loss");
10898 #  endif
10899 #endif
10900     /* Croak for various reasons: if the output pointer escaped the
10901      * output buffer, if the extraction index escaped the extraction
10902      * buffer, or if the ending output pointer didn't match the
10903      * previously computed value. */
10904     if (v <= vhex || v - vhex >= VHEX_SIZE ||
10905         /* For double-double the ixmin and ixmax stay at zero,
10906          * which is convenient since the HEXTRACTSIZE is tricky
10907          * for double-double. */
10908         ixmin < 0 || ixmax >= HEXTRACTSIZE ||
10909         (vend && v != vend))
10910         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10911     return v;
10912 }
10913
10914 void
10915 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10916                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10917                        const U32 flags)
10918 {
10919     char *p;
10920     char *q;
10921     const char *patend;
10922     STRLEN origlen;
10923     I32 svix = 0;
10924     static const char nullstr[] = "(null)";
10925     SV *argsv = NULL;
10926     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10927     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10928     SV *nsv = NULL;
10929     /* Times 4: a decimal digit takes more than 3 binary digits.
10930      * NV_DIG: mantissa takes than many decimal digits.
10931      * Plus 32: Playing safe. */
10932     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10933     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
10934     bool hexfp = FALSE; /* hexadecimal floating point? */
10935
10936     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
10937
10938     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10939     PERL_UNUSED_ARG(maybe_tainted);
10940
10941     if (flags & SV_GMAGIC)
10942         SvGETMAGIC(sv);
10943
10944     /* no matter what, this is a string now */
10945     (void)SvPV_force_nomg(sv, origlen);
10946
10947     /* special-case "", "%s", and "%-p" (SVf - see below) */
10948     if (patlen == 0) {
10949         if (svmax && ckWARN(WARN_REDUNDANT))
10950             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10951                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10952         return;
10953     }
10954     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10955         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10956             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10957                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10958
10959         if (args) {
10960             const char * const s = va_arg(*args, char*);
10961             sv_catpv_nomg(sv, s ? s : nullstr);
10962         }
10963         else if (svix < svmax) {
10964             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10965             SvGETMAGIC(*svargs);
10966             sv_catsv_nomg(sv, *svargs);
10967         }
10968         else
10969             S_vcatpvfn_missing_argument(aTHX);
10970         return;
10971     }
10972     if (args && patlen == 3 && pat[0] == '%' &&
10973                 pat[1] == '-' && pat[2] == 'p') {
10974         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10975             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10976                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10977         argsv = MUTABLE_SV(va_arg(*args, void*));
10978         sv_catsv_nomg(sv, argsv);
10979         return;
10980     }
10981
10982 #ifndef USE_LONG_DOUBLE
10983     /* special-case "%.<number>[gf]" */
10984     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10985          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10986         unsigned digits = 0;
10987         const char *pp;
10988
10989         pp = pat + 2;
10990         while (*pp >= '0' && *pp <= '9')
10991             digits = 10 * digits + (*pp++ - '0');
10992
10993         /* XXX: Why do this `svix < svmax` test? Couldn't we just
10994            format the first argument and WARN_REDUNDANT if svmax > 1?
10995            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
10996         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10997             const NV nv = SvNV(*svargs);
10998             if (*pp == 'g') {
10999                 /* Add check for digits != 0 because it seems that some
11000                    gconverts are buggy in this case, and we don't yet have
11001                    a Configure test for this.  */
11002                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11003                      /* 0, point, slack */
11004                     STORE_LC_NUMERIC_SET_TO_NEEDED();
11005                     PERL_UNUSED_RESULT(Gconvert(nv, (int)digits, 0, ebuf));
11006                     sv_catpv_nomg(sv, ebuf);
11007                     if (*ebuf)  /* May return an empty string for digits==0 */
11008                         return;
11009                 }
11010             } else if (!digits) {
11011                 STRLEN l;
11012
11013                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11014                     sv_catpvn_nomg(sv, p, l);
11015                     return;
11016                 }
11017             }
11018         }
11019     }
11020 #endif /* !USE_LONG_DOUBLE */
11021
11022     if (!args && svix < svmax && DO_UTF8(*svargs))
11023         has_utf8 = TRUE;
11024
11025     patend = (char*)pat + patlen;
11026     for (p = (char*)pat; p < patend; p = q) {
11027         bool alt = FALSE;
11028         bool left = FALSE;
11029         bool vectorize = FALSE;
11030         bool vectorarg = FALSE;
11031         bool vec_utf8 = FALSE;
11032         char fill = ' ';
11033         char plus = 0;
11034         char intsize = 0;
11035         STRLEN width = 0;
11036         STRLEN zeros = 0;
11037         bool has_precis = FALSE;
11038         STRLEN precis = 0;
11039         const I32 osvix = svix;
11040         bool is_utf8 = FALSE;  /* is this item utf8?   */
11041 #ifdef HAS_LDBL_SPRINTF_BUG
11042         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11043            with sfio - Allen <allens@cpan.org> */
11044         bool fix_ldbl_sprintf_bug = FALSE;
11045 #endif
11046
11047         char esignbuf[4];
11048         U8 utf8buf[UTF8_MAXBYTES+1];
11049         STRLEN esignlen = 0;
11050
11051         const char *eptr = NULL;
11052         const char *fmtstart;
11053         STRLEN elen = 0;
11054         SV *vecsv = NULL;
11055         const U8 *vecstr = NULL;
11056         STRLEN veclen = 0;
11057         char c = 0;
11058         int i;
11059         unsigned base = 0;
11060         IV iv = 0;
11061         UV uv = 0;
11062         /* We need a long double target in case HAS_LONG_DOUBLE,
11063          * even without USE_LONG_DOUBLE, so that we can printf with
11064          * long double formats, even without NV being long double.
11065          * But we call the target 'fv' instead of 'nv', since most of
11066          * the time it is not (most compilers these days recognize
11067          * "long double", even if only as a synonym for "double").
11068         */
11069 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
11070         long double fv;
11071 #  define FV_ISFINITE(x) Perl_isfinitel(x)
11072 #  define FV_GF PERL_PRIgldbl
11073 #else
11074         NV fv;
11075 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11076 #  define FV_GF NVgf
11077 #endif
11078         STRLEN have;
11079         STRLEN need;
11080         STRLEN gap;
11081         const char *dotstr = ".";
11082         STRLEN dotstrlen = 1;
11083         I32 efix = 0; /* explicit format parameter index */
11084         I32 ewix = 0; /* explicit width index */
11085         I32 epix = 0; /* explicit precision index */
11086         I32 evix = 0; /* explicit vector index */
11087         bool asterisk = FALSE;
11088         bool infnan = FALSE;
11089
11090         /* echo everything up to the next format specification */
11091         for (q = p; q < patend && *q != '%'; ++q) ;
11092         if (q > p) {
11093             if (has_utf8 && !pat_utf8)
11094                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11095             else
11096                 sv_catpvn_nomg(sv, p, q - p);
11097             p = q;
11098         }
11099         if (q++ >= patend)
11100             break;
11101
11102         fmtstart = q;
11103
11104 /*
11105     We allow format specification elements in this order:
11106         \d+\$              explicit format parameter index
11107         [-+ 0#]+           flags
11108         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11109         0                  flag (as above): repeated to allow "v02"     
11110         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11111         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11112         [hlqLV]            size
11113     [%bcdefginopsuxDFOUX] format (mandatory)
11114 */
11115
11116         if (args) {
11117 /*  
11118         As of perl5.9.3, printf format checking is on by default.
11119         Internally, perl uses %p formats to provide an escape to
11120         some extended formatting.  This block deals with those
11121         extensions: if it does not match, (char*)q is reset and
11122         the normal format processing code is used.
11123
11124         Currently defined extensions are:
11125                 %p              include pointer address (standard)      
11126                 %-p     (SVf)   include an SV (previously %_)
11127                 %-<num>p        include an SV with precision <num>      
11128                 %2p             include a HEK
11129                 %3p             include a HEK with precision of 256
11130                 %4p             char* preceded by utf8 flag and length
11131                 %<num>p         (where num is 1 or > 4) reserved for future
11132                                 extensions
11133
11134         Robin Barker 2005-07-14 (but modified since)
11135
11136                 %1p     (VDf)   removed.  RMB 2007-10-19
11137 */
11138             char* r = q; 
11139             bool sv = FALSE;    
11140             STRLEN n = 0;
11141             if (*q == '-')
11142                 sv = *q++;
11143             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11144                 /* The argument has already gone through cBOOL, so the cast
11145                    is safe. */
11146                 is_utf8 = (bool)va_arg(*args, int);
11147                 elen = va_arg(*args, UV);
11148                 eptr = va_arg(*args, char *);
11149                 q += sizeof(UTF8f)-1;
11150                 goto string;
11151             }
11152             n = expect_number(&q);
11153             if (*q++ == 'p') {
11154                 if (sv) {                       /* SVf */
11155                     if (n) {
11156                         precis = n;
11157                         has_precis = TRUE;
11158                     }
11159                     argsv = MUTABLE_SV(va_arg(*args, void*));
11160                     eptr = SvPV_const(argsv, elen);
11161                     if (DO_UTF8(argsv))
11162                         is_utf8 = TRUE;
11163                     goto string;
11164                 }
11165                 else if (n==2 || n==3) {        /* HEKf */
11166                     HEK * const hek = va_arg(*args, HEK *);
11167                     eptr = HEK_KEY(hek);
11168                     elen = HEK_LEN(hek);
11169                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11170                     if (n==3) precis = 256, has_precis = TRUE;
11171                     goto string;
11172                 }
11173                 else if (n) {
11174                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11175                                      "internal %%<num>p might conflict with future printf extensions");
11176                 }
11177             }
11178             q = r; 
11179         }
11180
11181         if ( (width = expect_number(&q)) ) {
11182             if (*q == '$') {
11183                 ++q;
11184                 efix = width;
11185                 if (!no_redundant_warning)
11186                     /* I've forgotten if it's a better
11187                        micro-optimization to always set this or to
11188                        only set it if it's unset */
11189                     no_redundant_warning = TRUE;
11190             } else {
11191                 goto gotwidth;
11192             }
11193         }
11194
11195         /* FLAGS */
11196
11197         while (*q) {
11198             switch (*q) {
11199             case ' ':
11200             case '+':
11201                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11202                     q++;
11203                 else
11204                     plus = *q++;
11205                 continue;
11206
11207             case '-':
11208                 left = TRUE;
11209                 q++;
11210                 continue;
11211
11212             case '0':
11213                 fill = *q++;
11214                 continue;
11215
11216             case '#':
11217                 alt = TRUE;
11218                 q++;
11219                 continue;
11220
11221             default:
11222                 break;
11223             }
11224             break;
11225         }
11226
11227       tryasterisk:
11228         if (*q == '*') {
11229             q++;
11230             if ( (ewix = expect_number(&q)) )
11231                 if (*q++ != '$')
11232                     goto unknown;
11233             asterisk = TRUE;
11234         }
11235         if (*q == 'v') {
11236             q++;
11237             if (vectorize)
11238                 goto unknown;
11239             if ((vectorarg = asterisk)) {
11240                 evix = ewix;
11241                 ewix = 0;
11242                 asterisk = FALSE;
11243             }
11244             vectorize = TRUE;
11245             goto tryasterisk;
11246         }
11247
11248         if (!asterisk)
11249         {
11250             if( *q == '0' )
11251                 fill = *q++;
11252             width = expect_number(&q);
11253         }
11254
11255         if (vectorize && vectorarg) {
11256             /* vectorizing, but not with the default "." */
11257             if (args)
11258                 vecsv = va_arg(*args, SV*);
11259             else if (evix) {
11260                 vecsv = (evix > 0 && evix <= svmax)
11261                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11262             } else {
11263                 vecsv = svix < svmax
11264                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11265             }
11266             dotstr = SvPV_const(vecsv, dotstrlen);
11267             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11268                bad with tied or overloaded values that return UTF8.  */
11269             if (DO_UTF8(vecsv))
11270                 is_utf8 = TRUE;
11271             else if (has_utf8) {
11272                 vecsv = sv_mortalcopy(vecsv);
11273                 sv_utf8_upgrade(vecsv);
11274                 dotstr = SvPV_const(vecsv, dotstrlen);
11275                 is_utf8 = TRUE;
11276             }               
11277         }
11278
11279         if (asterisk) {
11280             if (args)
11281                 i = va_arg(*args, int);
11282             else
11283                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11284                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11285             left |= (i < 0);
11286             width = (i < 0) ? -i : i;
11287         }
11288       gotwidth:
11289
11290         /* PRECISION */
11291
11292         if (*q == '.') {
11293             q++;
11294             if (*q == '*') {
11295                 q++;
11296                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11297                     goto unknown;
11298                 /* XXX: todo, support specified precision parameter */
11299                 if (epix)
11300                     goto unknown;
11301                 if (args)
11302                     i = va_arg(*args, int);
11303                 else
11304                     i = (ewix ? ewix <= svmax : svix < svmax)
11305                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11306                 precis = i;
11307                 has_precis = !(i < 0);
11308             }
11309             else {
11310                 precis = 0;
11311                 while (isDIGIT(*q))
11312                     precis = precis * 10 + (*q++ - '0');
11313                 has_precis = TRUE;
11314             }
11315         }
11316
11317         if (vectorize) {
11318             if (args) {
11319                 VECTORIZE_ARGS
11320             }
11321             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11322                 vecsv = svargs[efix ? efix-1 : svix++];
11323                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11324                 vec_utf8 = DO_UTF8(vecsv);
11325
11326                 /* if this is a version object, we need to convert
11327                  * back into v-string notation and then let the
11328                  * vectorize happen normally
11329                  */
11330                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11331                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11332                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11333                         "vector argument not supported with alpha versions");
11334                         goto vdblank;
11335                     }
11336                     vecsv = sv_newmortal();
11337                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11338                                  vecsv);
11339                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11340                     vec_utf8 = DO_UTF8(vecsv);
11341                 }
11342             }
11343             else {
11344               vdblank:
11345                 vecstr = (U8*)"";
11346                 veclen = 0;
11347             }
11348         }
11349
11350         /* SIZE */
11351
11352         switch (*q) {
11353 #ifdef WIN32
11354         case 'I':                       /* Ix, I32x, and I64x */
11355 #  ifdef USE_64_BIT_INT
11356             if (q[1] == '6' && q[2] == '4') {
11357                 q += 3;
11358                 intsize = 'q';
11359                 break;
11360             }
11361 #  endif
11362             if (q[1] == '3' && q[2] == '2') {
11363                 q += 3;
11364                 break;
11365             }
11366 #  ifdef USE_64_BIT_INT
11367             intsize = 'q';
11368 #  endif
11369             q++;
11370             break;
11371 #endif
11372 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11373         case 'L':                       /* Ld */
11374             /* FALLTHROUGH */
11375 #if IVSIZE >= 8
11376         case 'q':                       /* qd */
11377 #endif
11378             intsize = 'q';
11379             q++;
11380             break;
11381 #endif
11382         case 'l':
11383             ++q;
11384 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11385             if (*q == 'l') {    /* lld, llf */
11386                 intsize = 'q';
11387                 ++q;
11388             }
11389             else
11390 #endif
11391                 intsize = 'l';
11392             break;
11393         case 'h':
11394             if (*++q == 'h') {  /* hhd, hhu */
11395                 intsize = 'c';
11396                 ++q;
11397             }
11398             else
11399                 intsize = 'h';
11400             break;
11401         case 'V':
11402         case 'z':
11403         case 't':
11404 #ifdef I_STDINT
11405         case 'j':
11406 #endif
11407             intsize = *q++;
11408             break;
11409         }
11410
11411         /* CONVERSION */
11412
11413         if (*q == '%') {
11414             eptr = q++;
11415             elen = 1;
11416             if (vectorize) {
11417                 c = '%';
11418                 goto unknown;
11419             }
11420             goto string;
11421         }
11422
11423         if (!vectorize && !args) {
11424             if (efix) {
11425                 const I32 i = efix-1;
11426                 argsv = (i >= 0 && i < svmax)
11427                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11428             } else {
11429                 argsv = (svix >= 0 && svix < svmax)
11430                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11431             }
11432         }
11433
11434         if (argsv && SvNOK(argsv)) {
11435             /* XXX va_arg(*args) case? */
11436             infnan = Perl_isinfnan(SvNV(argsv));
11437         }
11438
11439         switch (c = *q++) {
11440
11441             /* STRINGS */
11442
11443         case 'c':
11444             if (vectorize)
11445                 goto unknown;
11446             uv = (args) ? va_arg(*args, int) :
11447                 infnan ? UNICODE_REPLACEMENT : SvIV(argsv);
11448             if ((uv > 255 ||
11449                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11450                 && !IN_BYTES) {
11451                 eptr = (char*)utf8buf;
11452                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11453                 is_utf8 = TRUE;
11454             }
11455             else {
11456                 c = (char)uv;
11457                 eptr = &c;
11458                 elen = 1;
11459             }
11460             goto string;
11461
11462         case 's':
11463             if (vectorize)
11464                 goto unknown;
11465             if (args) {
11466                 eptr = va_arg(*args, char*);
11467                 if (eptr)
11468                     elen = strlen(eptr);
11469                 else {
11470                     eptr = (char *)nullstr;
11471                     elen = sizeof nullstr - 1;
11472                 }
11473             }
11474             else {
11475                 eptr = SvPV_const(argsv, elen);
11476                 if (DO_UTF8(argsv)) {
11477                     STRLEN old_precis = precis;
11478                     if (has_precis && precis < elen) {
11479                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11480                         STRLEN p = precis > ulen ? ulen : precis;
11481                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11482                                                         /* sticks at end */
11483                     }
11484                     if (width) { /* fudge width (can't fudge elen) */
11485                         if (has_precis && precis < elen)
11486                             width += precis - old_precis;
11487                         else
11488                             width +=
11489                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11490                     }
11491                     is_utf8 = TRUE;
11492                 }
11493             }
11494
11495         string:
11496             if (has_precis && precis < elen)
11497                 elen = precis;
11498             break;
11499
11500             /* INTEGERS */
11501
11502         case 'p':
11503             if (infnan) {
11504                 c = 'g';
11505                 goto floating_point;
11506             }
11507             if (alt || vectorize)
11508                 goto unknown;
11509             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11510             base = 16;
11511             goto integer;
11512
11513         case 'D':
11514 #ifdef IV_IS_QUAD
11515             intsize = 'q';
11516 #else
11517             intsize = 'l';
11518 #endif
11519             /* FALLTHROUGH */
11520         case 'd':
11521         case 'i':
11522             if (infnan) {
11523                 c = 'g';
11524                 goto floating_point;
11525             }
11526             if (vectorize) {
11527                 STRLEN ulen;
11528                 if (!veclen)
11529                     continue;
11530                 if (vec_utf8)
11531                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11532                                         UTF8_ALLOW_ANYUV);
11533                 else {
11534                     uv = *vecstr;
11535                     ulen = 1;
11536                 }
11537                 vecstr += ulen;
11538                 veclen -= ulen;
11539                 if (plus)
11540                      esignbuf[esignlen++] = plus;
11541             }
11542             else if (args) {
11543                 switch (intsize) {
11544                 case 'c':       iv = (char)va_arg(*args, int); break;
11545                 case 'h':       iv = (short)va_arg(*args, int); break;
11546                 case 'l':       iv = va_arg(*args, long); break;
11547                 case 'V':       iv = va_arg(*args, IV); break;
11548                 case 'z':       iv = va_arg(*args, SSize_t); break;
11549 #ifdef HAS_PTRDIFF_T
11550                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11551 #endif
11552                 default:        iv = va_arg(*args, int); break;
11553 #ifdef I_STDINT
11554                 case 'j':       iv = va_arg(*args, intmax_t); break;
11555 #endif
11556                 case 'q':
11557 #if IVSIZE >= 8
11558                                 iv = va_arg(*args, Quad_t); break;
11559 #else
11560                                 goto unknown;
11561 #endif
11562                 }
11563             }
11564             else {
11565                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
11566                 switch (intsize) {
11567                 case 'c':       iv = (char)tiv; break;
11568                 case 'h':       iv = (short)tiv; break;
11569                 case 'l':       iv = (long)tiv; break;
11570                 case 'V':
11571                 default:        iv = tiv; break;
11572                 case 'q':
11573 #if IVSIZE >= 8
11574                                 iv = (Quad_t)tiv; break;
11575 #else
11576                                 goto unknown;
11577 #endif
11578                 }
11579             }
11580             if ( !vectorize )   /* we already set uv above */
11581             {
11582                 if (iv >= 0) {
11583                     uv = iv;
11584                     if (plus)
11585                         esignbuf[esignlen++] = plus;
11586                 }
11587                 else {
11588                     uv = -iv;
11589                     esignbuf[esignlen++] = '-';
11590                 }
11591             }
11592             base = 10;
11593             goto integer;
11594
11595         case 'U':
11596 #ifdef IV_IS_QUAD
11597             intsize = 'q';
11598 #else
11599             intsize = 'l';
11600 #endif
11601             /* FALLTHROUGH */
11602         case 'u':
11603             base = 10;
11604             goto uns_integer;
11605
11606         case 'B':
11607         case 'b':
11608             base = 2;
11609             goto uns_integer;
11610
11611         case 'O':
11612 #ifdef IV_IS_QUAD
11613             intsize = 'q';
11614 #else
11615             intsize = 'l';
11616 #endif
11617             /* FALLTHROUGH */
11618         case 'o':
11619             base = 8;
11620             goto uns_integer;
11621
11622         case 'X':
11623         case 'x':
11624             base = 16;
11625
11626         uns_integer:
11627             if (infnan) {
11628                 c = 'g';
11629                 goto floating_point;
11630             }
11631             if (vectorize) {
11632                 STRLEN ulen;
11633         vector:
11634                 if (!veclen)
11635                     continue;
11636                 if (vec_utf8)
11637                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11638                                         UTF8_ALLOW_ANYUV);
11639                 else {
11640                     uv = *vecstr;
11641                     ulen = 1;
11642                 }
11643                 vecstr += ulen;
11644                 veclen -= ulen;
11645             }
11646             else if (args) {
11647                 switch (intsize) {
11648                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11649                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11650                 case 'l':  uv = va_arg(*args, unsigned long); break;
11651                 case 'V':  uv = va_arg(*args, UV); break;
11652                 case 'z':  uv = va_arg(*args, Size_t); break;
11653 #ifdef HAS_PTRDIFF_T
11654                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11655 #endif
11656 #ifdef I_STDINT
11657                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11658 #endif
11659                 default:   uv = va_arg(*args, unsigned); break;
11660                 case 'q':
11661 #if IVSIZE >= 8
11662                            uv = va_arg(*args, Uquad_t); break;
11663 #else
11664                            goto unknown;
11665 #endif
11666                 }
11667             }
11668             else {
11669                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11670                 switch (intsize) {
11671                 case 'c':       uv = (unsigned char)tuv; break;
11672                 case 'h':       uv = (unsigned short)tuv; break;
11673                 case 'l':       uv = (unsigned long)tuv; break;
11674                 case 'V':
11675                 default:        uv = tuv; break;
11676                 case 'q':
11677 #if IVSIZE >= 8
11678                                 uv = (Uquad_t)tuv; break;
11679 #else
11680                                 goto unknown;
11681 #endif
11682                 }
11683             }
11684
11685         integer:
11686             {
11687                 char *ptr = ebuf + sizeof ebuf;
11688                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11689                 unsigned dig;
11690                 zeros = 0;
11691
11692                 switch (base) {
11693                 case 16:
11694                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11695                     do {
11696                         dig = uv & 15;
11697                         *--ptr = p[dig];
11698                     } while (uv >>= 4);
11699                     if (tempalt) {
11700                         esignbuf[esignlen++] = '0';
11701                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11702                     }
11703                     break;
11704                 case 8:
11705                     do {
11706                         dig = uv & 7;
11707                         *--ptr = '0' + dig;
11708                     } while (uv >>= 3);
11709                     if (alt && *ptr != '0')
11710                         *--ptr = '0';
11711                     break;
11712                 case 2:
11713                     do {
11714                         dig = uv & 1;
11715                         *--ptr = '0' + dig;
11716                     } while (uv >>= 1);
11717                     if (tempalt) {
11718                         esignbuf[esignlen++] = '0';
11719                         esignbuf[esignlen++] = c;
11720                     }
11721                     break;
11722                 default:                /* it had better be ten or less */
11723                     do {
11724                         dig = uv % base;
11725                         *--ptr = '0' + dig;
11726                     } while (uv /= base);
11727                     break;
11728                 }
11729                 elen = (ebuf + sizeof ebuf) - ptr;
11730                 eptr = ptr;
11731                 if (has_precis) {
11732                     if (precis > elen)
11733                         zeros = precis - elen;
11734                     else if (precis == 0 && elen == 1 && *eptr == '0'
11735                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11736                         elen = 0;
11737
11738                 /* a precision nullifies the 0 flag. */
11739                     if (fill == '0')
11740                         fill = ' ';
11741                 }
11742             }
11743             break;
11744
11745             /* FLOATING POINT */
11746
11747         floating_point:
11748
11749         case 'F':
11750             c = 'f';            /* maybe %F isn't supported here */
11751             /* FALLTHROUGH */
11752         case 'e': case 'E':
11753         case 'f':
11754         case 'g': case 'G':
11755         case 'a': case 'A':
11756             if (vectorize)
11757                 goto unknown;
11758
11759             /* This is evil, but floating point is even more evil */
11760
11761             /* for SV-style calling, we can only get NV
11762                for C-style calling, we assume %f is double;
11763                for simplicity we allow any of %Lf, %llf, %qf for long double
11764             */
11765             switch (intsize) {
11766             case 'V':
11767 #if defined(USE_LONG_DOUBLE)
11768                 intsize = 'q';
11769 #endif
11770                 break;
11771 /* [perl #20339] - we should accept and ignore %lf rather than die */
11772             case 'l':
11773                 /* FALLTHROUGH */
11774             default:
11775 #if defined(USE_LONG_DOUBLE)
11776                 intsize = args ? 0 : 'q';
11777 #endif
11778                 break;
11779             case 'q':
11780 #if defined(HAS_LONG_DOUBLE)
11781                 break;
11782 #else
11783                 /* FALLTHROUGH */
11784 #endif
11785             case 'c':
11786             case 'h':
11787             case 'z':
11788             case 't':
11789             case 'j':
11790                 goto unknown;
11791             }
11792
11793             /* Now we need (long double) if intsize == 'q', else (double). */
11794             if (args) {
11795                 /* Note: do not pull NVs off the va_list with va_arg()
11796                  * (pull doubles instead) because if you have a build
11797                  * with long doubles, you would always be pulling long
11798                  * doubles, which would badly break anyone using only
11799                  * doubles (i.e. the majority of builds). In other
11800                  * words, you cannot mix doubles and long doubles.
11801                  * The only case where you can pull off long doubles
11802                  * is when the format specifier explicitly asks so with
11803                  * e.g. "%Lg". */
11804 #if LONG_DOUBLESIZE > DOUBLESIZE
11805                 fv = intsize == 'q' ?
11806                     va_arg(*args, long double) : va_arg(*args, double);
11807 #else
11808                 fv = va_arg(*args, double);
11809 #endif
11810             }
11811             else
11812                 fv = SvNV(argsv);
11813
11814             need = 0;
11815             /* frexp() (or frexpl) has some unspecified behaviour for
11816              * nan/inf/-inf, so let's avoid calling that on non-finites. */
11817             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
11818                 i = PERL_INT_MIN;
11819                 (void)Perl_frexp((NV)fv, &i);
11820                 if (i == PERL_INT_MIN)
11821                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
11822                 /* Do not set hexfp earlier since we want to printf
11823                  * Inf/NaN for Inf/NaN, not their hexfp. */
11824                 hexfp = isALPHA_FOLD_EQ(c, 'a');
11825                 if (UNLIKELY(hexfp)) {
11826                     /* This seriously overshoots in most cases, but
11827                      * better the undershooting.  Firstly, all bytes
11828                      * of the NV are not mantissa, some of them are
11829                      * exponent.  Secondly, for the reasonably common
11830                      * long doubles case, the "80-bit extended", two
11831                      * or six bytes of the NV are unused. */
11832                     need +=
11833                         (fv < 0) ? 1 : 0 + /* possible unary minus */
11834                         2 + /* "0x" */
11835                         1 + /* the very unlikely carry */
11836                         1 + /* "1" */
11837                         1 + /* "." */
11838                         2 * NVSIZE + /* 2 hexdigits for each byte */
11839                         2 + /* "p+" */
11840                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
11841                         1;   /* \0 */
11842 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11843                     /* However, for the "double double", we need more.
11844                      * Since each double has their own exponent, the
11845                      * doubles may float (haha) rather far from each
11846                      * other, and the number of required bits is much
11847                      * larger, up to total of 1028 bits.  (NOTE: this
11848                      * is not actually implemented properly yet,
11849                      * we are using just the first double, see
11850                      * S_hextract() for details.  But let's prepare
11851                      * for the future.) */
11852
11853                     /* 2 hexdigits for each byte. */ 
11854                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
11855                     /* the size for the exponent already added */
11856 #endif
11857 #ifdef USE_LOCALE_NUMERIC
11858                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11859                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
11860                             need += SvLEN(PL_numeric_radix_sv);
11861                         RESTORE_LC_NUMERIC();
11862 #endif
11863                 }
11864                 else if (i > 0) {
11865                     need = BIT_DIGITS(i);
11866                 } /* if i < 0, the number of digits is hard to predict. */
11867             }
11868             need += has_precis ? precis : 6; /* known default */
11869
11870             if (need < width)
11871                 need = width;
11872
11873 #ifdef HAS_LDBL_SPRINTF_BUG
11874             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11875                with sfio - Allen <allens@cpan.org> */
11876
11877 #  ifdef DBL_MAX
11878 #    define MY_DBL_MAX DBL_MAX
11879 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11880 #    if DOUBLESIZE >= 8
11881 #      define MY_DBL_MAX 1.7976931348623157E+308L
11882 #    else
11883 #      define MY_DBL_MAX 3.40282347E+38L
11884 #    endif
11885 #  endif
11886
11887 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11888 #    define MY_DBL_MAX_BUG 1L
11889 #  else
11890 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11891 #  endif
11892
11893 #  ifdef DBL_MIN
11894 #    define MY_DBL_MIN DBL_MIN
11895 #  else  /* XXX guessing! -Allen */
11896 #    if DOUBLESIZE >= 8
11897 #      define MY_DBL_MIN 2.2250738585072014E-308L
11898 #    else
11899 #      define MY_DBL_MIN 1.17549435E-38L
11900 #    endif
11901 #  endif
11902
11903             if ((intsize == 'q') && (c == 'f') &&
11904                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
11905                 (need < DBL_DIG)) {
11906                 /* it's going to be short enough that
11907                  * long double precision is not needed */
11908
11909                 if ((fv <= 0L) && (fv >= -0L))
11910                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11911                 else {
11912                     /* would use Perl_fp_class as a double-check but not
11913                      * functional on IRIX - see perl.h comments */
11914
11915                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
11916                         /* It's within the range that a double can represent */
11917 #if defined(DBL_MAX) && !defined(DBL_MIN)
11918                         if ((fv >= ((long double)1/DBL_MAX)) ||
11919                             (fv <= (-(long double)1/DBL_MAX)))
11920 #endif
11921                         fix_ldbl_sprintf_bug = TRUE;
11922                     }
11923                 }
11924                 if (fix_ldbl_sprintf_bug == TRUE) {
11925                     double temp;
11926
11927                     intsize = 0;
11928                     temp = (double)fv;
11929                     fv = (NV)temp;
11930                 }
11931             }
11932
11933 #  undef MY_DBL_MAX
11934 #  undef MY_DBL_MAX_BUG
11935 #  undef MY_DBL_MIN
11936
11937 #endif /* HAS_LDBL_SPRINTF_BUG */
11938
11939             need += 20; /* fudge factor */
11940             if (PL_efloatsize < need) {
11941                 Safefree(PL_efloatbuf);
11942                 PL_efloatsize = need + 20; /* more fudge */
11943                 Newx(PL_efloatbuf, PL_efloatsize, char);
11944                 PL_efloatbuf[0] = '\0';
11945             }
11946
11947             if ( !(width || left || plus || alt) && fill != '0'
11948                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11949                 /* See earlier comment about buggy Gconvert when digits,
11950                    aka precis is 0  */
11951                 if ( c == 'g' && precis ) {
11952                     STORE_LC_NUMERIC_SET_TO_NEEDED();
11953                     PERL_UNUSED_RESULT(Gconvert((NV)fv, (int)precis, 0, PL_efloatbuf));
11954                     /* May return an empty string for digits==0 */
11955                     if (*PL_efloatbuf) {
11956                         elen = strlen(PL_efloatbuf);
11957                         goto float_converted;
11958                     }
11959                 } else if ( c == 'f' && !precis ) {
11960                     if ((eptr = F0convert(fv, ebuf + sizeof ebuf, &elen)))
11961                         break;
11962                 }
11963             }
11964
11965             if (UNLIKELY(hexfp)) {
11966                 /* Hexadecimal floating point. */
11967                 char* p = PL_efloatbuf;
11968                 U8 vhex[VHEX_SIZE];
11969                 U8* v = vhex; /* working pointer to vhex */
11970                 U8* vend; /* pointer to one beyond last digit of vhex */
11971                 U8* vfnz = NULL; /* first non-zero */
11972                 const bool lower = (c == 'a');
11973                 /* At output the values of vhex (up to vend) will
11974                  * be mapped through the xdig to get the actual
11975                  * human-readable xdigits. */
11976                 const char* xdig = PL_hexdigit;
11977                 int zerotail = 0; /* how many extra zeros to append */
11978                 int exponent = 0; /* exponent of the floating point input */
11979
11980                 /* XXX: denormals, NaN, Inf.
11981                  *
11982                  * For example with denormals, (assuming the vanilla
11983                  * 64-bit double): the exponent is zero. 1xp-1074 is
11984                  * the smallest denormal and the smallest double, it
11985                  * should be output as 0x0.0000000000001p-1022 to
11986                  * match its internal structure. */
11987
11988                 /* Note: fv can be (and often is) long double.
11989                  * Here it is implicitly cast to NV. */
11990                 vend = S_hextract(aTHX_ fv, &exponent, vhex, NULL);
11991                 S_hextract(aTHX_ fv, &exponent, vhex, vend);
11992
11993 #if NVSIZE > DOUBLESIZE
11994 #  ifdef LONGDOUBLE_HAS_IMPLICIT_BIT
11995                 exponent--;
11996 #  else
11997                 exponent -= 4;
11998 #  endif
11999 #endif
12000
12001                 if (fv < 0)
12002                     *p++ = '-';
12003                 else if (plus)
12004                     *p++ = plus;
12005                 *p++ = '0';
12006                 if (lower) {
12007                     *p++ = 'x';
12008                 }
12009                 else {
12010                     *p++ = 'X';
12011                     xdig += 16; /* Use uppercase hex. */
12012                 }
12013
12014                 /* Find the first non-zero xdigit. */
12015                 for (v = vhex; v < vend; v++) {
12016                     if (*v) {
12017                         vfnz = v;
12018                         break;
12019                     }
12020                 }
12021
12022                 if (vfnz) {
12023                     U8* vlnz = NULL; /* The last non-zero. */
12024
12025                     /* Find the last non-zero xdigit. */
12026                     for (v = vend - 1; v >= vhex; v--) {
12027                         if (*v) {
12028                             vlnz = v;
12029                             break;
12030                         }
12031                     }
12032
12033 #if NVSIZE == DOUBLESIZE
12034                     exponent--;
12035 #endif
12036
12037                     if (precis > 0) {
12038                         v = vhex + precis + 1;
12039                         if (v < vend) {
12040                             /* Round away from zero: if the tail
12041                              * beyond the precis xdigits is equal to
12042                              * or greater than 0x8000... */
12043                             bool round = *v > 0x8;
12044                             if (!round && *v == 0x8) {
12045                                 for (v++; v < vend; v++) {
12046                                     if (*v) {
12047                                         round = TRUE;
12048                                         break;
12049                                     }
12050                                 }
12051                             }
12052                             if (round) {
12053                                 for (v = vhex + precis; v >= vhex; v--) {
12054                                     if (*v < 0xF) {
12055                                         (*v)++;
12056                                         break;
12057                                     }
12058                                     *v = 0;
12059                                     if (v == vhex) {
12060                                         /* If the carry goes all the way to
12061                                          * the front, we need to output
12062                                          * a single '1'. This goes against
12063                                          * the "xdigit and then radix"
12064                                          * but since this is "cannot happen"
12065                                          * category, that is probably good. */
12066                                         *p++ = xdig[1];
12067                                     }
12068                                 }
12069                             }
12070                             /* The new effective "last non zero". */
12071                             vlnz = vhex + precis;
12072                         }
12073                         else {
12074                             zerotail = precis - (vlnz - vhex);
12075                         }
12076                     }
12077
12078                     v = vhex;
12079                     *p++ = xdig[*v++];
12080
12081                     /* The radix is always output after the first
12082                      * non-zero xdigit, or if alt.  */
12083                     if (vfnz < vlnz || alt) {
12084 #ifndef USE_LOCALE_NUMERIC
12085                         *p++ = '.';
12086 #else
12087                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12088                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12089                             STRLEN n;
12090                             const char* r = SvPV(PL_numeric_radix_sv, n);
12091                             Copy(r, p, n, char);
12092                             p += n;
12093                         }
12094                         else {
12095                             *p++ = '.';
12096                         }
12097                         RESTORE_LC_NUMERIC();
12098 #endif
12099                     }
12100
12101                     while (v <= vlnz)
12102                         *p++ = xdig[*v++];
12103
12104                     while (zerotail--)
12105                         *p++ = '0';
12106                 }
12107                 else {
12108                     *p++ = '0';
12109                     exponent = 0;
12110                 }
12111
12112                 elen = p - PL_efloatbuf;
12113                 elen += my_snprintf(p, PL_efloatsize - elen,
12114                                     "%c%+d", lower ? 'p' : 'P',
12115                                     exponent);
12116
12117                 if (elen < width) {
12118                     if (left) {
12119                         /* Pad the back with spaces. */
12120                         memset(PL_efloatbuf + elen, ' ', width - elen);
12121                     }
12122                     else if (fill == '0') {
12123                         /* Insert the zeros between the "0x" and
12124                          * the digits, otherwise we end up with
12125                          * "0000xHHH..." */
12126                         STRLEN nzero = width - elen;
12127                         char* zerox = PL_efloatbuf + 2;
12128                         Move(zerox, zerox + nzero,  elen - 2, char);
12129                         memset(zerox, fill, nzero);
12130                     }
12131                     else {
12132                         /* Move it to the right. */
12133                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12134                              elen, char);
12135                         /* Pad the front with spaces. */
12136                         memset(PL_efloatbuf, ' ', width - elen);
12137                     }
12138                     elen = width;
12139                 }
12140             }
12141             else
12142                 elen = S_infnan_2pv(fv, PL_efloatbuf, PL_efloatsize);
12143             if (elen == 0) {
12144                 char *ptr = ebuf + sizeof ebuf;
12145                 *--ptr = '\0';
12146                 *--ptr = c;
12147                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12148 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12149                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12150                  * not USE_LONG_DOUBLE and NVff.  In other words,
12151                  * this needs to work without USE_LONG_DOUBLE. */
12152                 if (intsize == 'q') {
12153                     /* Copy the one or more characters in a long double
12154                      * format before the 'base' ([efgEFG]) character to
12155                      * the format string. */
12156                     static char const ldblf[] = PERL_PRIfldbl;
12157                     char const *p = ldblf + sizeof(ldblf) - 3;
12158                     while (p >= ldblf) { *--ptr = *p--; }
12159                 }
12160 #endif
12161                 if (has_precis) {
12162                     base = precis;
12163                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12164                     *--ptr = '.';
12165                 }
12166                 if (width) {
12167                     base = width;
12168                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12169                 }
12170                 if (fill == '0')
12171                     *--ptr = fill;
12172                 if (left)
12173                     *--ptr = '-';
12174                 if (plus)
12175                     *--ptr = plus;
12176                 if (alt)
12177                     *--ptr = '#';
12178                 *--ptr = '%';
12179
12180                 /* No taint.  Otherwise we are in the strange situation
12181                  * where printf() taints but print($float) doesn't.
12182                  * --jhi */
12183
12184                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12185
12186                 /* hopefully the above makes ptr a very constrained format
12187                  * that is safe to use, even though it's not literal */
12188                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12189 #if defined(HAS_LONG_DOUBLE)
12190                 elen = ((intsize == 'q')
12191                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12192                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12193 #else
12194                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12195 #endif
12196                 GCC_DIAG_RESTORE;
12197             }
12198
12199         float_converted:
12200             eptr = PL_efloatbuf;
12201             assert((IV)elen > 0); /* here zero elen is bad */
12202
12203 #ifdef USE_LOCALE_NUMERIC
12204             /* If the decimal point character in the string is UTF-8, make the
12205              * output utf8 */
12206             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12207                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12208             {
12209                 is_utf8 = TRUE;
12210             }
12211 #endif
12212
12213             break;
12214
12215             /* SPECIAL */
12216
12217         case 'n':
12218             if (vectorize)
12219                 goto unknown;
12220             i = SvCUR(sv) - origlen;
12221             if (args) {
12222                 switch (intsize) {
12223                 case 'c':       *(va_arg(*args, char*)) = i; break;
12224                 case 'h':       *(va_arg(*args, short*)) = i; break;
12225                 default:        *(va_arg(*args, int*)) = i; break;
12226                 case 'l':       *(va_arg(*args, long*)) = i; break;
12227                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12228                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12229 #ifdef HAS_PTRDIFF_T
12230                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12231 #endif
12232 #ifdef I_STDINT
12233                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12234 #endif
12235                 case 'q':
12236 #if IVSIZE >= 8
12237                                 *(va_arg(*args, Quad_t*)) = i; break;
12238 #else
12239                                 goto unknown;
12240 #endif
12241                 }
12242             }
12243             else
12244                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12245             continue;   /* not "break" */
12246
12247             /* UNKNOWN */
12248
12249         default:
12250       unknown:
12251             if (!args
12252                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12253                 && ckWARN(WARN_PRINTF))
12254             {
12255                 SV * const msg = sv_newmortal();
12256                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12257                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12258                 if (fmtstart < patend) {
12259                     const char * const fmtend = q < patend ? q : patend;
12260                     const char * f;
12261                     sv_catpvs(msg, "\"%");
12262                     for (f = fmtstart; f < fmtend; f++) {
12263                         if (isPRINT(*f)) {
12264                             sv_catpvn_nomg(msg, f, 1);
12265                         } else {
12266                             Perl_sv_catpvf(aTHX_ msg,
12267                                            "\\%03"UVof, (UV)*f & 0xFF);
12268                         }
12269                     }
12270                     sv_catpvs(msg, "\"");
12271                 } else {
12272                     sv_catpvs(msg, "end of string");
12273                 }
12274                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12275             }
12276
12277             /* output mangled stuff ... */
12278             if (c == '\0')
12279                 --q;
12280             eptr = p;
12281             elen = q - p;
12282
12283             /* ... right here, because formatting flags should not apply */
12284             SvGROW(sv, SvCUR(sv) + elen + 1);
12285             p = SvEND(sv);
12286             Copy(eptr, p, elen, char);
12287             p += elen;
12288             *p = '\0';
12289             SvCUR_set(sv, p - SvPVX_const(sv));
12290             svix = osvix;
12291             continue;   /* not "break" */
12292         }
12293
12294         if (is_utf8 != has_utf8) {
12295             if (is_utf8) {
12296                 if (SvCUR(sv))
12297                     sv_utf8_upgrade(sv);
12298             }
12299             else {
12300                 const STRLEN old_elen = elen;
12301                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12302                 sv_utf8_upgrade(nsv);
12303                 eptr = SvPVX_const(nsv);
12304                 elen = SvCUR(nsv);
12305
12306                 if (width) { /* fudge width (can't fudge elen) */
12307                     width += elen - old_elen;
12308                 }
12309                 is_utf8 = TRUE;
12310             }
12311         }
12312
12313         assert((IV)elen >= 0); /* here zero elen is fine */
12314         have = esignlen + zeros + elen;
12315         if (have < zeros)
12316             croak_memory_wrap();
12317
12318         need = (have > width ? have : width);
12319         gap = need - have;
12320
12321         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12322             croak_memory_wrap();
12323         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12324         p = SvEND(sv);
12325         if (esignlen && fill == '0') {
12326             int i;
12327             for (i = 0; i < (int)esignlen; i++)
12328                 *p++ = esignbuf[i];
12329         }
12330         if (gap && !left) {
12331             memset(p, fill, gap);
12332             p += gap;
12333         }
12334         if (esignlen && fill != '0') {
12335             int i;
12336             for (i = 0; i < (int)esignlen; i++)
12337                 *p++ = esignbuf[i];
12338         }
12339         if (zeros) {
12340             int i;
12341             for (i = zeros; i; i--)
12342                 *p++ = '0';
12343         }
12344         if (elen) {
12345             Copy(eptr, p, elen, char);
12346             p += elen;
12347         }
12348         if (gap && left) {
12349             memset(p, ' ', gap);
12350             p += gap;
12351         }
12352         if (vectorize) {
12353             if (veclen) {
12354                 Copy(dotstr, p, dotstrlen, char);
12355                 p += dotstrlen;
12356             }
12357             else
12358                 vectorize = FALSE;              /* done iterating over vecstr */
12359         }
12360         if (is_utf8)
12361             has_utf8 = TRUE;
12362         if (has_utf8)
12363             SvUTF8_on(sv);
12364         *p = '\0';
12365         SvCUR_set(sv, p - SvPVX_const(sv));
12366         if (vectorize) {
12367             esignlen = 0;
12368             goto vector;
12369         }
12370     }
12371
12372     /* Now that we've consumed all our printf format arguments (svix)
12373      * do we have things left on the stack that we didn't use?
12374      */
12375     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12376         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12377                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12378     }
12379
12380     SvTAINT(sv);
12381
12382     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12383                                each iteration. */
12384 }
12385
12386 /* =========================================================================
12387
12388 =head1 Cloning an interpreter
12389
12390 =cut
12391
12392 All the macros and functions in this section are for the private use of
12393 the main function, perl_clone().
12394
12395 The foo_dup() functions make an exact copy of an existing foo thingy.
12396 During the course of a cloning, a hash table is used to map old addresses
12397 to new addresses.  The table is created and manipulated with the
12398 ptr_table_* functions.
12399
12400  * =========================================================================*/
12401
12402
12403 #if defined(USE_ITHREADS)
12404
12405 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12406 #ifndef GpREFCNT_inc
12407 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12408 #endif
12409
12410
12411 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12412    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12413    If this changes, please unmerge ss_dup.
12414    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12415 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12416 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12417 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12418 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12419 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12420 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12421 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12422 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12423 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12424 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12425 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12426 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12427 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12428
12429 /* clone a parser */
12430
12431 yy_parser *
12432 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12433 {
12434     yy_parser *parser;
12435
12436     PERL_ARGS_ASSERT_PARSER_DUP;
12437
12438     if (!proto)
12439         return NULL;
12440
12441     /* look for it in the table first */
12442     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12443     if (parser)
12444         return parser;
12445
12446     /* create anew and remember what it is */
12447     Newxz(parser, 1, yy_parser);
12448     ptr_table_store(PL_ptr_table, proto, parser);
12449
12450     /* XXX these not yet duped */
12451     parser->old_parser = NULL;
12452     parser->stack = NULL;
12453     parser->ps = NULL;
12454     parser->stack_size = 0;
12455     /* XXX parser->stack->state = 0; */
12456
12457     /* XXX eventually, just Copy() most of the parser struct ? */
12458
12459     parser->lex_brackets = proto->lex_brackets;
12460     parser->lex_casemods = proto->lex_casemods;
12461     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12462                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12463     parser->lex_casestack = savepvn(proto->lex_casestack,
12464                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12465     parser->lex_defer   = proto->lex_defer;
12466     parser->lex_dojoin  = proto->lex_dojoin;
12467     parser->lex_formbrack = proto->lex_formbrack;
12468     parser->lex_inpat   = proto->lex_inpat;
12469     parser->lex_inwhat  = proto->lex_inwhat;
12470     parser->lex_op      = proto->lex_op;
12471     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12472     parser->lex_starts  = proto->lex_starts;
12473     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12474     parser->multi_close = proto->multi_close;
12475     parser->multi_open  = proto->multi_open;
12476     parser->multi_start = proto->multi_start;
12477     parser->multi_end   = proto->multi_end;
12478     parser->preambled   = proto->preambled;
12479     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12480     parser->linestr     = sv_dup_inc(proto->linestr, param);
12481     parser->expect      = proto->expect;
12482     parser->copline     = proto->copline;
12483     parser->last_lop_op = proto->last_lop_op;
12484     parser->lex_state   = proto->lex_state;
12485     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12486     /* rsfp_filters entries have fake IoDIRP() */
12487     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12488     parser->in_my       = proto->in_my;
12489     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12490     parser->error_count = proto->error_count;
12491
12492
12493     parser->linestr     = sv_dup_inc(proto->linestr, param);
12494
12495     {
12496         char * const ols = SvPVX(proto->linestr);
12497         char * const ls  = SvPVX(parser->linestr);
12498
12499         parser->bufptr      = ls + (proto->bufptr >= ols ?
12500                                     proto->bufptr -  ols : 0);
12501         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12502                                     proto->oldbufptr -  ols : 0);
12503         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12504                                     proto->oldoldbufptr -  ols : 0);
12505         parser->linestart   = ls + (proto->linestart >= ols ?
12506                                     proto->linestart -  ols : 0);
12507         parser->last_uni    = ls + (proto->last_uni >= ols ?
12508                                     proto->last_uni -  ols : 0);
12509         parser->last_lop    = ls + (proto->last_lop >= ols ?
12510                                     proto->last_lop -  ols : 0);
12511
12512         parser->bufend      = ls + SvCUR(parser->linestr);
12513     }
12514
12515     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12516
12517
12518     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12519     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12520     parser->nexttoke    = proto->nexttoke;
12521
12522     /* XXX should clone saved_curcop here, but we aren't passed
12523      * proto_perl; so do it in perl_clone_using instead */
12524
12525     return parser;
12526 }
12527
12528
12529 /* duplicate a file handle */
12530
12531 PerlIO *
12532 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12533 {
12534     PerlIO *ret;
12535
12536     PERL_ARGS_ASSERT_FP_DUP;
12537     PERL_UNUSED_ARG(type);
12538
12539     if (!fp)
12540         return (PerlIO*)NULL;
12541
12542     /* look for it in the table first */
12543     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12544     if (ret)
12545         return ret;
12546
12547     /* create anew and remember what it is */
12548     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12549     ptr_table_store(PL_ptr_table, fp, ret);
12550     return ret;
12551 }
12552
12553 /* duplicate a directory handle */
12554
12555 DIR *
12556 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12557 {
12558     DIR *ret;
12559
12560 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12561     DIR *pwd;
12562     const Direntry_t *dirent;
12563     char smallbuf[256];
12564     char *name = NULL;
12565     STRLEN len = 0;
12566     long pos;
12567 #endif
12568
12569     PERL_UNUSED_CONTEXT;
12570     PERL_ARGS_ASSERT_DIRP_DUP;
12571
12572     if (!dp)
12573         return (DIR*)NULL;
12574
12575     /* look for it in the table first */
12576     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12577     if (ret)
12578         return ret;
12579
12580 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12581
12582     PERL_UNUSED_ARG(param);
12583
12584     /* create anew */
12585
12586     /* open the current directory (so we can switch back) */
12587     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12588
12589     /* chdir to our dir handle and open the present working directory */
12590     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12591         PerlDir_close(pwd);
12592         return (DIR *)NULL;
12593     }
12594     /* Now we should have two dir handles pointing to the same dir. */
12595
12596     /* Be nice to the calling code and chdir back to where we were. */
12597     /* XXX If this fails, then what? */
12598     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12599
12600     /* We have no need of the pwd handle any more. */
12601     PerlDir_close(pwd);
12602
12603 #ifdef DIRNAMLEN
12604 # define d_namlen(d) (d)->d_namlen
12605 #else
12606 # define d_namlen(d) strlen((d)->d_name)
12607 #endif
12608     /* Iterate once through dp, to get the file name at the current posi-
12609        tion. Then step back. */
12610     pos = PerlDir_tell(dp);
12611     if ((dirent = PerlDir_read(dp))) {
12612         len = d_namlen(dirent);
12613         if (len <= sizeof smallbuf) name = smallbuf;
12614         else Newx(name, len, char);
12615         Move(dirent->d_name, name, len, char);
12616     }
12617     PerlDir_seek(dp, pos);
12618
12619     /* Iterate through the new dir handle, till we find a file with the
12620        right name. */
12621     if (!dirent) /* just before the end */
12622         for(;;) {
12623             pos = PerlDir_tell(ret);
12624             if (PerlDir_read(ret)) continue; /* not there yet */
12625             PerlDir_seek(ret, pos); /* step back */
12626             break;
12627         }
12628     else {
12629         const long pos0 = PerlDir_tell(ret);
12630         for(;;) {
12631             pos = PerlDir_tell(ret);
12632             if ((dirent = PerlDir_read(ret))) {
12633                 if (len == (STRLEN)d_namlen(dirent)
12634                     && memEQ(name, dirent->d_name, len)) {
12635                     /* found it */
12636                     PerlDir_seek(ret, pos); /* step back */
12637                     break;
12638                 }
12639                 /* else we are not there yet; keep iterating */
12640             }
12641             else { /* This is not meant to happen. The best we can do is
12642                       reset the iterator to the beginning. */
12643                 PerlDir_seek(ret, pos0);
12644                 break;
12645             }
12646         }
12647     }
12648 #undef d_namlen
12649
12650     if (name && name != smallbuf)
12651         Safefree(name);
12652 #endif
12653
12654 #ifdef WIN32
12655     ret = win32_dirp_dup(dp, param);
12656 #endif
12657
12658     /* pop it in the pointer table */
12659     if (ret)
12660         ptr_table_store(PL_ptr_table, dp, ret);
12661
12662     return ret;
12663 }
12664
12665 /* duplicate a typeglob */
12666
12667 GP *
12668 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12669 {
12670     GP *ret;
12671
12672     PERL_ARGS_ASSERT_GP_DUP;
12673
12674     if (!gp)
12675         return (GP*)NULL;
12676     /* look for it in the table first */
12677     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12678     if (ret)
12679         return ret;
12680
12681     /* create anew and remember what it is */
12682     Newxz(ret, 1, GP);
12683     ptr_table_store(PL_ptr_table, gp, ret);
12684
12685     /* clone */
12686     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12687        on Newxz() to do this for us.  */
12688     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12689     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12690     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12691     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12692     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12693     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12694     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12695     ret->gp_cvgen       = gp->gp_cvgen;
12696     ret->gp_line        = gp->gp_line;
12697     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12698     return ret;
12699 }
12700
12701 /* duplicate a chain of magic */
12702
12703 MAGIC *
12704 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12705 {
12706     MAGIC *mgret = NULL;
12707     MAGIC **mgprev_p = &mgret;
12708
12709     PERL_ARGS_ASSERT_MG_DUP;
12710
12711     for (; mg; mg = mg->mg_moremagic) {
12712         MAGIC *nmg;
12713
12714         if ((param->flags & CLONEf_JOIN_IN)
12715                 && mg->mg_type == PERL_MAGIC_backref)
12716             /* when joining, we let the individual SVs add themselves to
12717              * backref as needed. */
12718             continue;
12719
12720         Newx(nmg, 1, MAGIC);
12721         *mgprev_p = nmg;
12722         mgprev_p = &(nmg->mg_moremagic);
12723
12724         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12725            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12726            from the original commit adding Perl_mg_dup() - revision 4538.
12727            Similarly there is the annotation "XXX random ptr?" next to the
12728            assignment to nmg->mg_ptr.  */
12729         *nmg = *mg;
12730
12731         /* FIXME for plugins
12732         if (nmg->mg_type == PERL_MAGIC_qr) {
12733             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12734         }
12735         else
12736         */
12737         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12738                           ? nmg->mg_type == PERL_MAGIC_backref
12739                                 /* The backref AV has its reference
12740                                  * count deliberately bumped by 1 */
12741                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12742                                                     nmg->mg_obj, param))
12743                                 : sv_dup_inc(nmg->mg_obj, param)
12744                           : sv_dup(nmg->mg_obj, param);
12745
12746         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12747             if (nmg->mg_len > 0) {
12748                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12749                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12750                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12751                 {
12752                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12753                     sv_dup_inc_multiple((SV**)(namtp->table),
12754                                         (SV**)(namtp->table), NofAMmeth, param);
12755                 }
12756             }
12757             else if (nmg->mg_len == HEf_SVKEY)
12758                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12759         }
12760         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12761             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12762         }
12763     }
12764     return mgret;
12765 }
12766
12767 #endif /* USE_ITHREADS */
12768
12769 struct ptr_tbl_arena {
12770     struct ptr_tbl_arena *next;
12771     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
12772 };
12773
12774 /* create a new pointer-mapping table */
12775
12776 PTR_TBL_t *
12777 Perl_ptr_table_new(pTHX)
12778 {
12779     PTR_TBL_t *tbl;
12780     PERL_UNUSED_CONTEXT;
12781
12782     Newx(tbl, 1, PTR_TBL_t);
12783     tbl->tbl_max        = 511;
12784     tbl->tbl_items      = 0;
12785     tbl->tbl_arena      = NULL;
12786     tbl->tbl_arena_next = NULL;
12787     tbl->tbl_arena_end  = NULL;
12788     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
12789     return tbl;
12790 }
12791
12792 #define PTR_TABLE_HASH(ptr) \
12793   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
12794
12795 /* map an existing pointer using a table */
12796
12797 STATIC PTR_TBL_ENT_t *
12798 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
12799 {
12800     PTR_TBL_ENT_t *tblent;
12801     const UV hash = PTR_TABLE_HASH(sv);
12802
12803     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
12804
12805     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
12806     for (; tblent; tblent = tblent->next) {
12807         if (tblent->oldval == sv)
12808             return tblent;
12809     }
12810     return NULL;
12811 }
12812
12813 void *
12814 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
12815 {
12816     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
12817
12818     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
12819     PERL_UNUSED_CONTEXT;
12820
12821     return tblent ? tblent->newval : NULL;
12822 }
12823
12824 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
12825  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
12826  * the core's typical use of ptr_tables in thread cloning. */
12827
12828 void
12829 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
12830 {
12831     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
12832
12833     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
12834     PERL_UNUSED_CONTEXT;
12835
12836     if (tblent) {
12837         tblent->newval = newsv;
12838     } else {
12839         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
12840
12841         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12842             struct ptr_tbl_arena *new_arena;
12843
12844             Newx(new_arena, 1, struct ptr_tbl_arena);
12845             new_arena->next = tbl->tbl_arena;
12846             tbl->tbl_arena = new_arena;
12847             tbl->tbl_arena_next = new_arena->array;
12848             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
12849         }
12850
12851         tblent = tbl->tbl_arena_next++;
12852
12853         tblent->oldval = oldsv;
12854         tblent->newval = newsv;
12855         tblent->next = tbl->tbl_ary[entry];
12856         tbl->tbl_ary[entry] = tblent;
12857         tbl->tbl_items++;
12858         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12859             ptr_table_split(tbl);
12860     }
12861 }
12862
12863 /* double the hash bucket size of an existing ptr table */
12864
12865 void
12866 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12867 {
12868     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12869     const UV oldsize = tbl->tbl_max + 1;
12870     UV newsize = oldsize * 2;
12871     UV i;
12872
12873     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12874     PERL_UNUSED_CONTEXT;
12875
12876     Renew(ary, newsize, PTR_TBL_ENT_t*);
12877     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12878     tbl->tbl_max = --newsize;
12879     tbl->tbl_ary = ary;
12880     for (i=0; i < oldsize; i++, ary++) {
12881         PTR_TBL_ENT_t **entp = ary;
12882         PTR_TBL_ENT_t *ent = *ary;
12883         PTR_TBL_ENT_t **curentp;
12884         if (!ent)
12885             continue;
12886         curentp = ary + oldsize;
12887         do {
12888             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12889                 *entp = ent->next;
12890                 ent->next = *curentp;
12891                 *curentp = ent;
12892             }
12893             else
12894                 entp = &ent->next;
12895             ent = *entp;
12896         } while (ent);
12897     }
12898 }
12899
12900 /* remove all the entries from a ptr table */
12901 /* Deprecated - will be removed post 5.14 */
12902
12903 void
12904 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12905 {
12906     PERL_UNUSED_CONTEXT;
12907     if (tbl && tbl->tbl_items) {
12908         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12909
12910         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12911
12912         while (arena) {
12913             struct ptr_tbl_arena *next = arena->next;
12914
12915             Safefree(arena);
12916             arena = next;
12917         };
12918
12919         tbl->tbl_items = 0;
12920         tbl->tbl_arena = NULL;
12921         tbl->tbl_arena_next = NULL;
12922         tbl->tbl_arena_end = NULL;
12923     }
12924 }
12925
12926 /* clear and free a ptr table */
12927
12928 void
12929 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12930 {
12931     struct ptr_tbl_arena *arena;
12932
12933     PERL_UNUSED_CONTEXT;
12934
12935     if (!tbl) {
12936         return;
12937     }
12938
12939     arena = tbl->tbl_arena;
12940
12941     while (arena) {
12942         struct ptr_tbl_arena *next = arena->next;
12943
12944         Safefree(arena);
12945         arena = next;
12946     }
12947
12948     Safefree(tbl->tbl_ary);
12949     Safefree(tbl);
12950 }
12951
12952 #if defined(USE_ITHREADS)
12953
12954 void
12955 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12956 {
12957     PERL_ARGS_ASSERT_RVPV_DUP;
12958
12959     assert(!isREGEXP(sstr));
12960     if (SvROK(sstr)) {
12961         if (SvWEAKREF(sstr)) {
12962             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12963             if (param->flags & CLONEf_JOIN_IN) {
12964                 /* if joining, we add any back references individually rather
12965                  * than copying the whole backref array */
12966                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12967             }
12968         }
12969         else
12970             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12971     }
12972     else if (SvPVX_const(sstr)) {
12973         /* Has something there */
12974         if (SvLEN(sstr)) {
12975             /* Normal PV - clone whole allocated space */
12976             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12977             /* sstr may not be that normal, but actually copy on write.
12978                But we are a true, independent SV, so:  */
12979             SvIsCOW_off(dstr);
12980         }
12981         else {
12982             /* Special case - not normally malloced for some reason */
12983             if (isGV_with_GP(sstr)) {
12984                 /* Don't need to do anything here.  */
12985             }
12986             else if ((SvIsCOW(sstr))) {
12987                 /* A "shared" PV - clone it as "shared" PV */
12988                 SvPV_set(dstr,
12989                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12990                                          param)));
12991             }
12992             else {
12993                 /* Some other special case - random pointer */
12994                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12995             }
12996         }
12997     }
12998     else {
12999         /* Copy the NULL */
13000         SvPV_set(dstr, NULL);
13001     }
13002 }
13003
13004 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13005 static SV **
13006 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13007                       SSize_t items, CLONE_PARAMS *const param)
13008 {
13009     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13010
13011     while (items-- > 0) {
13012         *dest++ = sv_dup_inc(*source++, param);
13013     }
13014
13015     return dest;
13016 }
13017
13018 /* duplicate an SV of any type (including AV, HV etc) */
13019
13020 static SV *
13021 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13022 {
13023     dVAR;
13024     SV *dstr;
13025
13026     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13027
13028     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13029 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13030         abort();
13031 #endif
13032         return NULL;
13033     }
13034     /* look for it in the table first */
13035     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13036     if (dstr)
13037         return dstr;
13038
13039     if(param->flags & CLONEf_JOIN_IN) {
13040         /** We are joining here so we don't want do clone
13041             something that is bad **/
13042         if (SvTYPE(sstr) == SVt_PVHV) {
13043             const HEK * const hvname = HvNAME_HEK(sstr);
13044             if (hvname) {
13045                 /** don't clone stashes if they already exist **/
13046                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13047                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13048                 ptr_table_store(PL_ptr_table, sstr, dstr);
13049                 return dstr;
13050             }
13051         }
13052         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13053             HV *stash = GvSTASH(sstr);
13054             const HEK * hvname;
13055             if (stash && (hvname = HvNAME_HEK(stash))) {
13056                 /** don't clone GVs if they already exist **/
13057                 SV **svp;
13058                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13059                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13060                 svp = hv_fetch(
13061                         stash, GvNAME(sstr),
13062                         GvNAMEUTF8(sstr)
13063                             ? -GvNAMELEN(sstr)
13064                             :  GvNAMELEN(sstr),
13065                         0
13066                       );
13067                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13068                     ptr_table_store(PL_ptr_table, sstr, *svp);
13069                     return *svp;
13070                 }
13071             }
13072         }
13073     }
13074
13075     /* create anew and remember what it is */
13076     new_SV(dstr);
13077
13078 #ifdef DEBUG_LEAKING_SCALARS
13079     dstr->sv_debug_optype = sstr->sv_debug_optype;
13080     dstr->sv_debug_line = sstr->sv_debug_line;
13081     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13082     dstr->sv_debug_parent = (SV*)sstr;
13083     FREE_SV_DEBUG_FILE(dstr);
13084     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13085 #endif
13086
13087     ptr_table_store(PL_ptr_table, sstr, dstr);
13088
13089     /* clone */
13090     SvFLAGS(dstr)       = SvFLAGS(sstr);
13091     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13092     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13093
13094 #ifdef DEBUGGING
13095     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13096         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13097                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13098 #endif
13099
13100     /* don't clone objects whose class has asked us not to */
13101     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
13102         SvFLAGS(dstr) = 0;
13103         return dstr;
13104     }
13105
13106     switch (SvTYPE(sstr)) {
13107     case SVt_NULL:
13108         SvANY(dstr)     = NULL;
13109         break;
13110     case SVt_IV:
13111         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
13112         if(SvROK(sstr)) {
13113             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13114         } else {
13115             SvIV_set(dstr, SvIVX(sstr));
13116         }
13117         break;
13118     case SVt_NV:
13119         SvANY(dstr)     = new_XNV();
13120         SvNV_set(dstr, SvNVX(sstr));
13121         break;
13122     default:
13123         {
13124             /* These are all the types that need complex bodies allocating.  */
13125             void *new_body;
13126             const svtype sv_type = SvTYPE(sstr);
13127             const struct body_details *const sv_type_details
13128                 = bodies_by_type + sv_type;
13129
13130             switch (sv_type) {
13131             default:
13132                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13133                 break;
13134
13135             case SVt_PVGV:
13136             case SVt_PVIO:
13137             case SVt_PVFM:
13138             case SVt_PVHV:
13139             case SVt_PVAV:
13140             case SVt_PVCV:
13141             case SVt_PVLV:
13142             case SVt_REGEXP:
13143             case SVt_PVMG:
13144             case SVt_PVNV:
13145             case SVt_PVIV:
13146             case SVt_INVLIST:
13147             case SVt_PV:
13148                 assert(sv_type_details->body_size);
13149                 if (sv_type_details->arena) {
13150                     new_body_inline(new_body, sv_type);
13151                     new_body
13152                         = (void*)((char*)new_body - sv_type_details->offset);
13153                 } else {
13154                     new_body = new_NOARENA(sv_type_details);
13155                 }
13156             }
13157             assert(new_body);
13158             SvANY(dstr) = new_body;
13159
13160 #ifndef PURIFY
13161             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13162                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13163                  sv_type_details->copy, char);
13164 #else
13165             Copy(((char*)SvANY(sstr)),
13166                  ((char*)SvANY(dstr)),
13167                  sv_type_details->body_size + sv_type_details->offset, char);
13168 #endif
13169
13170             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13171                 && !isGV_with_GP(dstr)
13172                 && !isREGEXP(dstr)
13173                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13174                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13175
13176             /* The Copy above means that all the source (unduplicated) pointers
13177                are now in the destination.  We can check the flags and the
13178                pointers in either, but it's possible that there's less cache
13179                missing by always going for the destination.
13180                FIXME - instrument and check that assumption  */
13181             if (sv_type >= SVt_PVMG) {
13182                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
13183                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
13184                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
13185                     NOOP;
13186                 } else if (SvMAGIC(dstr))
13187                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13188                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13189                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13190                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13191             }
13192
13193             /* The cast silences a GCC warning about unhandled types.  */
13194             switch ((int)sv_type) {
13195             case SVt_PV:
13196                 break;
13197             case SVt_PVIV:
13198                 break;
13199             case SVt_PVNV:
13200                 break;
13201             case SVt_PVMG:
13202                 break;
13203             case SVt_REGEXP:
13204               duprex:
13205                 /* FIXME for plugins */
13206                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13207                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13208                 break;
13209             case SVt_PVLV:
13210                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13211                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13212                     LvTARG(dstr) = dstr;
13213                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13214                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13215                 else
13216                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13217                 if (isREGEXP(sstr)) goto duprex;
13218             case SVt_PVGV:
13219                 /* non-GP case already handled above */
13220                 if(isGV_with_GP(sstr)) {
13221                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13222                     /* Don't call sv_add_backref here as it's going to be
13223                        created as part of the magic cloning of the symbol
13224                        table--unless this is during a join and the stash
13225                        is not actually being cloned.  */
13226                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13227                        at the point of this comment.  */
13228                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13229                     if (param->flags & CLONEf_JOIN_IN)
13230                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13231                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13232                     (void)GpREFCNT_inc(GvGP(dstr));
13233                 }
13234                 break;
13235             case SVt_PVIO:
13236                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13237                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13238                     /* I have no idea why fake dirp (rsfps)
13239                        should be treated differently but otherwise
13240                        we end up with leaks -- sky*/
13241                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13242                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13243                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13244                 } else {
13245                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13246                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13247                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13248                     if (IoDIRP(dstr)) {
13249                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13250                     } else {
13251                         NOOP;
13252                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13253                     }
13254                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13255                 }
13256                 if (IoOFP(dstr) == IoIFP(sstr))
13257                     IoOFP(dstr) = IoIFP(dstr);
13258                 else
13259                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13260                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13261                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13262                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13263                 break;
13264             case SVt_PVAV:
13265                 /* avoid cloning an empty array */
13266                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13267                     SV **dst_ary, **src_ary;
13268                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13269
13270                     src_ary = AvARRAY((const AV *)sstr);
13271                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13272                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13273                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13274                     AvALLOC((const AV *)dstr) = dst_ary;
13275                     if (AvREAL((const AV *)sstr)) {
13276                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13277                                                       param);
13278                     }
13279                     else {
13280                         while (items-- > 0)
13281                             *dst_ary++ = sv_dup(*src_ary++, param);
13282                     }
13283                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13284                     while (items-- > 0) {
13285                         *dst_ary++ = &PL_sv_undef;
13286                     }
13287                 }
13288                 else {
13289                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13290                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13291                     AvMAX(  (const AV *)dstr)   = -1;
13292                     AvFILLp((const AV *)dstr)   = -1;
13293                 }
13294                 break;
13295             case SVt_PVHV:
13296                 if (HvARRAY((const HV *)sstr)) {
13297                     STRLEN i = 0;
13298                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13299                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13300                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13301                     char *darray;
13302                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13303                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13304                         char);
13305                     HvARRAY(dstr) = (HE**)darray;
13306                     while (i <= sxhv->xhv_max) {
13307                         const HE * const source = HvARRAY(sstr)[i];
13308                         HvARRAY(dstr)[i] = source
13309                             ? he_dup(source, sharekeys, param) : 0;
13310                         ++i;
13311                     }
13312                     if (SvOOK(sstr)) {
13313                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13314                         struct xpvhv_aux * const daux = HvAUX(dstr);
13315                         /* This flag isn't copied.  */
13316                         SvOOK_on(dstr);
13317
13318                         if (saux->xhv_name_count) {
13319                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13320                             const I32 count
13321                              = saux->xhv_name_count < 0
13322                                 ? -saux->xhv_name_count
13323                                 :  saux->xhv_name_count;
13324                             HEK **shekp = sname + count;
13325                             HEK **dhekp;
13326                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13327                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13328                             while (shekp-- > sname) {
13329                                 dhekp--;
13330                                 *dhekp = hek_dup(*shekp, param);
13331                             }
13332                         }
13333                         else {
13334                             daux->xhv_name_u.xhvnameu_name
13335                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13336                                           param);
13337                         }
13338                         daux->xhv_name_count = saux->xhv_name_count;
13339
13340                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13341                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13342 #ifdef PERL_HASH_RANDOMIZE_KEYS
13343                         daux->xhv_rand = saux->xhv_rand;
13344                         daux->xhv_last_rand = saux->xhv_last_rand;
13345 #endif
13346                         daux->xhv_riter = saux->xhv_riter;
13347                         daux->xhv_eiter = saux->xhv_eiter
13348                             ? he_dup(saux->xhv_eiter,
13349                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13350                         /* backref array needs refcnt=2; see sv_add_backref */
13351                         daux->xhv_backreferences =
13352                             (param->flags & CLONEf_JOIN_IN)
13353                                 /* when joining, we let the individual GVs and
13354                                  * CVs add themselves to backref as
13355                                  * needed. This avoids pulling in stuff
13356                                  * that isn't required, and simplifies the
13357                                  * case where stashes aren't cloned back
13358                                  * if they already exist in the parent
13359                                  * thread */
13360                             ? NULL
13361                             : saux->xhv_backreferences
13362                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13363                                     ? MUTABLE_AV(SvREFCNT_inc(
13364                                           sv_dup_inc((const SV *)
13365                                             saux->xhv_backreferences, param)))
13366                                     : MUTABLE_AV(sv_dup((const SV *)
13367                                             saux->xhv_backreferences, param))
13368                                 : 0;
13369
13370                         daux->xhv_mro_meta = saux->xhv_mro_meta
13371                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13372                             : 0;
13373
13374                         /* Record stashes for possible cloning in Perl_clone(). */
13375                         if (HvNAME(sstr))
13376                             av_push(param->stashes, dstr);
13377                     }
13378                 }
13379                 else
13380                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13381                 break;
13382             case SVt_PVCV:
13383                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13384                     CvDEPTH(dstr) = 0;
13385                 }
13386                 /* FALLTHROUGH */
13387             case SVt_PVFM:
13388                 /* NOTE: not refcounted */
13389                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13390                     hv_dup(CvSTASH(dstr), param);
13391                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13392                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13393                 if (!CvISXSUB(dstr)) {
13394                     OP_REFCNT_LOCK;
13395                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13396                     OP_REFCNT_UNLOCK;
13397                     CvSLABBED_off(dstr);
13398                 } else if (CvCONST(dstr)) {
13399                     CvXSUBANY(dstr).any_ptr =
13400                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13401                 }
13402                 assert(!CvSLABBED(dstr));
13403                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13404                 if (CvNAMED(dstr))
13405                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13406                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13407                 /* don't dup if copying back - CvGV isn't refcounted, so the
13408                  * duped GV may never be freed. A bit of a hack! DAPM */
13409                 else
13410                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13411                     CvCVGV_RC(dstr)
13412                     ? gv_dup_inc(CvGV(sstr), param)
13413                     : (param->flags & CLONEf_JOIN_IN)
13414                         ? NULL
13415                         : gv_dup(CvGV(sstr), param);
13416
13417                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
13418                 CvOUTSIDE(dstr) =
13419                     CvWEAKOUTSIDE(sstr)
13420                     ? cv_dup(    CvOUTSIDE(dstr), param)
13421                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13422                 break;
13423             }
13424         }
13425     }
13426
13427     return dstr;
13428  }
13429
13430 SV *
13431 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13432 {
13433     PERL_ARGS_ASSERT_SV_DUP_INC;
13434     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13435 }
13436
13437 SV *
13438 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13439 {
13440     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13441     PERL_ARGS_ASSERT_SV_DUP;
13442
13443     /* Track every SV that (at least initially) had a reference count of 0.
13444        We need to do this by holding an actual reference to it in this array.
13445        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13446        (akin to the stashes hash, and the perl stack), we come unstuck if
13447        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13448        thread) is manipulated in a CLONE method, because CLONE runs before the
13449        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13450        (and fix things up by giving each a reference via the temps stack).
13451        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13452        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13453        before the walk of unreferenced happens and a reference to that is SV
13454        added to the temps stack. At which point we have the same SV considered
13455        to be in use, and free to be re-used. Not good.
13456     */
13457     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13458         assert(param->unreferenced);
13459         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13460     }
13461
13462     return dstr;
13463 }
13464
13465 /* duplicate a context */
13466
13467 PERL_CONTEXT *
13468 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13469 {
13470     PERL_CONTEXT *ncxs;
13471
13472     PERL_ARGS_ASSERT_CX_DUP;
13473
13474     if (!cxs)
13475         return (PERL_CONTEXT*)NULL;
13476
13477     /* look for it in the table first */
13478     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13479     if (ncxs)
13480         return ncxs;
13481
13482     /* create anew and remember what it is */
13483     Newx(ncxs, max + 1, PERL_CONTEXT);
13484     ptr_table_store(PL_ptr_table, cxs, ncxs);
13485     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13486
13487     while (ix >= 0) {
13488         PERL_CONTEXT * const ncx = &ncxs[ix];
13489         if (CxTYPE(ncx) == CXt_SUBST) {
13490             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13491         }
13492         else {
13493             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13494             switch (CxTYPE(ncx)) {
13495             case CXt_SUB:
13496                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13497                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13498                                            : cv_dup(ncx->blk_sub.cv,param));
13499                 if(CxHASARGS(ncx)){
13500                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13501                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13502                 } else {
13503                     ncx->blk_sub.argarray = NULL;
13504                     ncx->blk_sub.savearray = NULL;
13505                 }
13506                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13507                                            ncx->blk_sub.oldcomppad);
13508                 break;
13509             case CXt_EVAL:
13510                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13511                                                       param);
13512                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13513                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13514                 break;
13515             case CXt_LOOP_LAZYSV:
13516                 ncx->blk_loop.state_u.lazysv.end
13517                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13518                 /* We are taking advantage of av_dup_inc and sv_dup_inc
13519                    actually being the same function, and order equivalence of
13520                    the two unions.
13521                    We can assert the later [but only at run time :-(]  */
13522                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13523                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13524             case CXt_LOOP_FOR:
13525                 ncx->blk_loop.state_u.ary.ary
13526                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13527             case CXt_LOOP_LAZYIV:
13528             case CXt_LOOP_PLAIN:
13529                 if (CxPADLOOP(ncx)) {
13530                     ncx->blk_loop.itervar_u.oldcomppad
13531                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13532                                         ncx->blk_loop.itervar_u.oldcomppad);
13533                 } else {
13534                     ncx->blk_loop.itervar_u.gv
13535                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13536                                     param);
13537                 }
13538                 break;
13539             case CXt_FORMAT:
13540                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13541                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13542                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13543                                                      param);
13544                 break;
13545             case CXt_BLOCK:
13546             case CXt_NULL:
13547             case CXt_WHEN:
13548             case CXt_GIVEN:
13549                 break;
13550             }
13551         }
13552         --ix;
13553     }
13554     return ncxs;
13555 }
13556
13557 /* duplicate a stack info structure */
13558
13559 PERL_SI *
13560 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13561 {
13562     PERL_SI *nsi;
13563
13564     PERL_ARGS_ASSERT_SI_DUP;
13565
13566     if (!si)
13567         return (PERL_SI*)NULL;
13568
13569     /* look for it in the table first */
13570     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13571     if (nsi)
13572         return nsi;
13573
13574     /* create anew and remember what it is */
13575     Newxz(nsi, 1, PERL_SI);
13576     ptr_table_store(PL_ptr_table, si, nsi);
13577
13578     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13579     nsi->si_cxix        = si->si_cxix;
13580     nsi->si_cxmax       = si->si_cxmax;
13581     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13582     nsi->si_type        = si->si_type;
13583     nsi->si_prev        = si_dup(si->si_prev, param);
13584     nsi->si_next        = si_dup(si->si_next, param);
13585     nsi->si_markoff     = si->si_markoff;
13586
13587     return nsi;
13588 }
13589
13590 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13591 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13592 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13593 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13594 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13595 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13596 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13597 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13598 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13599 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13600 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13601 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13602 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13603 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13604 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13605 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13606
13607 /* XXXXX todo */
13608 #define pv_dup_inc(p)   SAVEPV(p)
13609 #define pv_dup(p)       SAVEPV(p)
13610 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13611
13612 /* map any object to the new equivent - either something in the
13613  * ptr table, or something in the interpreter structure
13614  */
13615
13616 void *
13617 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13618 {
13619     void *ret;
13620
13621     PERL_ARGS_ASSERT_ANY_DUP;
13622
13623     if (!v)
13624         return (void*)NULL;
13625
13626     /* look for it in the table first */
13627     ret = ptr_table_fetch(PL_ptr_table, v);
13628     if (ret)
13629         return ret;
13630
13631     /* see if it is part of the interpreter structure */
13632     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13633         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13634     else {
13635         ret = v;
13636     }
13637
13638     return ret;
13639 }
13640
13641 /* duplicate the save stack */
13642
13643 ANY *
13644 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13645 {
13646     dVAR;
13647     ANY * const ss      = proto_perl->Isavestack;
13648     const I32 max       = proto_perl->Isavestack_max;
13649     I32 ix              = proto_perl->Isavestack_ix;
13650     ANY *nss;
13651     const SV *sv;
13652     const GV *gv;
13653     const AV *av;
13654     const HV *hv;
13655     void* ptr;
13656     int intval;
13657     long longval;
13658     GP *gp;
13659     IV iv;
13660     I32 i;
13661     char *c = NULL;
13662     void (*dptr) (void*);
13663     void (*dxptr) (pTHX_ void*);
13664
13665     PERL_ARGS_ASSERT_SS_DUP;
13666
13667     Newxz(nss, max, ANY);
13668
13669     while (ix > 0) {
13670         const UV uv = POPUV(ss,ix);
13671         const U8 type = (U8)uv & SAVE_MASK;
13672
13673         TOPUV(nss,ix) = uv;
13674         switch (type) {
13675         case SAVEt_CLEARSV:
13676         case SAVEt_CLEARPADRANGE:
13677             break;
13678         case SAVEt_HELEM:               /* hash element */
13679             sv = (const SV *)POPPTR(ss,ix);
13680             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13681             /* FALLTHROUGH */
13682         case SAVEt_ITEM:                        /* normal string */
13683         case SAVEt_GVSV:                        /* scalar slot in GV */
13684         case SAVEt_SV:                          /* scalar reference */
13685             sv = (const SV *)POPPTR(ss,ix);
13686             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13687             /* FALLTHROUGH */
13688         case SAVEt_FREESV:
13689         case SAVEt_MORTALIZESV:
13690         case SAVEt_READONLY_OFF:
13691             sv = (const SV *)POPPTR(ss,ix);
13692             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13693             break;
13694         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13695             c = (char*)POPPTR(ss,ix);
13696             TOPPTR(nss,ix) = savesharedpv(c);
13697             ptr = POPPTR(ss,ix);
13698             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13699             break;
13700         case SAVEt_GENERIC_SVREF:               /* generic sv */
13701         case SAVEt_SVREF:                       /* scalar reference */
13702             sv = (const SV *)POPPTR(ss,ix);
13703             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13704             ptr = POPPTR(ss,ix);
13705             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13706             break;
13707         case SAVEt_GVSLOT:              /* any slot in GV */
13708             sv = (const SV *)POPPTR(ss,ix);
13709             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13710             ptr = POPPTR(ss,ix);
13711             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13712             sv = (const SV *)POPPTR(ss,ix);
13713             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13714             break;
13715         case SAVEt_HV:                          /* hash reference */
13716         case SAVEt_AV:                          /* array reference */
13717             sv = (const SV *) POPPTR(ss,ix);
13718             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13719             /* FALLTHROUGH */
13720         case SAVEt_COMPPAD:
13721         case SAVEt_NSTAB:
13722             sv = (const SV *) POPPTR(ss,ix);
13723             TOPPTR(nss,ix) = sv_dup(sv, param);
13724             break;
13725         case SAVEt_INT:                         /* int reference */
13726             ptr = POPPTR(ss,ix);
13727             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13728             intval = (int)POPINT(ss,ix);
13729             TOPINT(nss,ix) = intval;
13730             break;
13731         case SAVEt_LONG:                        /* long reference */
13732             ptr = POPPTR(ss,ix);
13733             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13734             longval = (long)POPLONG(ss,ix);
13735             TOPLONG(nss,ix) = longval;
13736             break;
13737         case SAVEt_I32:                         /* I32 reference */
13738             ptr = POPPTR(ss,ix);
13739             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13740             i = POPINT(ss,ix);
13741             TOPINT(nss,ix) = i;
13742             break;
13743         case SAVEt_IV:                          /* IV reference */
13744         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
13745             ptr = POPPTR(ss,ix);
13746             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13747             iv = POPIV(ss,ix);
13748             TOPIV(nss,ix) = iv;
13749             break;
13750         case SAVEt_HPTR:                        /* HV* reference */
13751         case SAVEt_APTR:                        /* AV* reference */
13752         case SAVEt_SPTR:                        /* SV* reference */
13753             ptr = POPPTR(ss,ix);
13754             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13755             sv = (const SV *)POPPTR(ss,ix);
13756             TOPPTR(nss,ix) = sv_dup(sv, param);
13757             break;
13758         case SAVEt_VPTR:                        /* random* reference */
13759             ptr = POPPTR(ss,ix);
13760             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13761             /* FALLTHROUGH */
13762         case SAVEt_INT_SMALL:
13763         case SAVEt_I32_SMALL:
13764         case SAVEt_I16:                         /* I16 reference */
13765         case SAVEt_I8:                          /* I8 reference */
13766         case SAVEt_BOOL:
13767             ptr = POPPTR(ss,ix);
13768             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13769             break;
13770         case SAVEt_GENERIC_PVREF:               /* generic char* */
13771         case SAVEt_PPTR:                        /* char* reference */
13772             ptr = POPPTR(ss,ix);
13773             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13774             c = (char*)POPPTR(ss,ix);
13775             TOPPTR(nss,ix) = pv_dup(c);
13776             break;
13777         case SAVEt_GP:                          /* scalar reference */
13778             gp = (GP*)POPPTR(ss,ix);
13779             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
13780             (void)GpREFCNT_inc(gp);
13781             gv = (const GV *)POPPTR(ss,ix);
13782             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
13783             break;
13784         case SAVEt_FREEOP:
13785             ptr = POPPTR(ss,ix);
13786             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
13787                 /* these are assumed to be refcounted properly */
13788                 OP *o;
13789                 switch (((OP*)ptr)->op_type) {
13790                 case OP_LEAVESUB:
13791                 case OP_LEAVESUBLV:
13792                 case OP_LEAVEEVAL:
13793                 case OP_LEAVE:
13794                 case OP_SCOPE:
13795                 case OP_LEAVEWRITE:
13796                     TOPPTR(nss,ix) = ptr;
13797                     o = (OP*)ptr;
13798                     OP_REFCNT_LOCK;
13799                     (void) OpREFCNT_inc(o);
13800                     OP_REFCNT_UNLOCK;
13801                     break;
13802                 default:
13803                     TOPPTR(nss,ix) = NULL;
13804                     break;
13805                 }
13806             }
13807             else
13808                 TOPPTR(nss,ix) = NULL;
13809             break;
13810         case SAVEt_FREECOPHH:
13811             ptr = POPPTR(ss,ix);
13812             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
13813             break;
13814         case SAVEt_ADELETE:
13815             av = (const AV *)POPPTR(ss,ix);
13816             TOPPTR(nss,ix) = av_dup_inc(av, param);
13817             i = POPINT(ss,ix);
13818             TOPINT(nss,ix) = i;
13819             break;
13820         case SAVEt_DELETE:
13821             hv = (const HV *)POPPTR(ss,ix);
13822             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13823             i = POPINT(ss,ix);
13824             TOPINT(nss,ix) = i;
13825             /* FALLTHROUGH */
13826         case SAVEt_FREEPV:
13827             c = (char*)POPPTR(ss,ix);
13828             TOPPTR(nss,ix) = pv_dup_inc(c);
13829             break;
13830         case SAVEt_STACK_POS:           /* Position on Perl stack */
13831             i = POPINT(ss,ix);
13832             TOPINT(nss,ix) = i;
13833             break;
13834         case SAVEt_DESTRUCTOR:
13835             ptr = POPPTR(ss,ix);
13836             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13837             dptr = POPDPTR(ss,ix);
13838             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
13839                                         any_dup(FPTR2DPTR(void *, dptr),
13840                                                 proto_perl));
13841             break;
13842         case SAVEt_DESTRUCTOR_X:
13843             ptr = POPPTR(ss,ix);
13844             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13845             dxptr = POPDXPTR(ss,ix);
13846             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
13847                                          any_dup(FPTR2DPTR(void *, dxptr),
13848                                                  proto_perl));
13849             break;
13850         case SAVEt_REGCONTEXT:
13851         case SAVEt_ALLOC:
13852             ix -= uv >> SAVE_TIGHT_SHIFT;
13853             break;
13854         case SAVEt_AELEM:               /* array element */
13855             sv = (const SV *)POPPTR(ss,ix);
13856             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13857             i = POPINT(ss,ix);
13858             TOPINT(nss,ix) = i;
13859             av = (const AV *)POPPTR(ss,ix);
13860             TOPPTR(nss,ix) = av_dup_inc(av, param);
13861             break;
13862         case SAVEt_OP:
13863             ptr = POPPTR(ss,ix);
13864             TOPPTR(nss,ix) = ptr;
13865             break;
13866         case SAVEt_HINTS:
13867             ptr = POPPTR(ss,ix);
13868             ptr = cophh_copy((COPHH*)ptr);
13869             TOPPTR(nss,ix) = ptr;
13870             i = POPINT(ss,ix);
13871             TOPINT(nss,ix) = i;
13872             if (i & HINT_LOCALIZE_HH) {
13873                 hv = (const HV *)POPPTR(ss,ix);
13874                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13875             }
13876             break;
13877         case SAVEt_PADSV_AND_MORTALIZE:
13878             longval = (long)POPLONG(ss,ix);
13879             TOPLONG(nss,ix) = longval;
13880             ptr = POPPTR(ss,ix);
13881             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13882             sv = (const SV *)POPPTR(ss,ix);
13883             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13884             break;
13885         case SAVEt_SET_SVFLAGS:
13886             i = POPINT(ss,ix);
13887             TOPINT(nss,ix) = i;
13888             i = POPINT(ss,ix);
13889             TOPINT(nss,ix) = i;
13890             sv = (const SV *)POPPTR(ss,ix);
13891             TOPPTR(nss,ix) = sv_dup(sv, param);
13892             break;
13893         case SAVEt_COMPILE_WARNINGS:
13894             ptr = POPPTR(ss,ix);
13895             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13896             break;
13897         case SAVEt_PARSER:
13898             ptr = POPPTR(ss,ix);
13899             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13900             break;
13901         default:
13902             Perl_croak(aTHX_
13903                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13904         }
13905     }
13906
13907     return nss;
13908 }
13909
13910
13911 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13912  * flag to the result. This is done for each stash before cloning starts,
13913  * so we know which stashes want their objects cloned */
13914
13915 static void
13916 do_mark_cloneable_stash(pTHX_ SV *const sv)
13917 {
13918     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13919     if (hvname) {
13920         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13921         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13922         if (cloner && GvCV(cloner)) {
13923             dSP;
13924             UV status;
13925
13926             ENTER;
13927             SAVETMPS;
13928             PUSHMARK(SP);
13929             mXPUSHs(newSVhek(hvname));
13930             PUTBACK;
13931             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13932             SPAGAIN;
13933             status = POPu;
13934             PUTBACK;
13935             FREETMPS;
13936             LEAVE;
13937             if (status)
13938                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13939         }
13940     }
13941 }
13942
13943
13944
13945 /*
13946 =for apidoc perl_clone
13947
13948 Create and return a new interpreter by cloning the current one.
13949
13950 perl_clone takes these flags as parameters:
13951
13952 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13953 without it we only clone the data and zero the stacks,
13954 with it we copy the stacks and the new perl interpreter is
13955 ready to run at the exact same point as the previous one.
13956 The pseudo-fork code uses COPY_STACKS while the
13957 threads->create doesn't.
13958
13959 CLONEf_KEEP_PTR_TABLE -
13960 perl_clone keeps a ptr_table with the pointer of the old
13961 variable as a key and the new variable as a value,
13962 this allows it to check if something has been cloned and not
13963 clone it again but rather just use the value and increase the
13964 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13965 the ptr_table using the function
13966 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13967 reason to keep it around is if you want to dup some of your own
13968 variable who are outside the graph perl scans, example of this
13969 code is in threads.xs create.
13970
13971 CLONEf_CLONE_HOST -
13972 This is a win32 thing, it is ignored on unix, it tells perls
13973 win32host code (which is c++) to clone itself, this is needed on
13974 win32 if you want to run two threads at the same time,
13975 if you just want to do some stuff in a separate perl interpreter
13976 and then throw it away and return to the original one,
13977 you don't need to do anything.
13978
13979 =cut
13980 */
13981
13982 /* XXX the above needs expanding by someone who actually understands it ! */
13983 EXTERN_C PerlInterpreter *
13984 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13985
13986 PerlInterpreter *
13987 perl_clone(PerlInterpreter *proto_perl, UV flags)
13988 {
13989    dVAR;
13990 #ifdef PERL_IMPLICIT_SYS
13991
13992     PERL_ARGS_ASSERT_PERL_CLONE;
13993
13994    /* perlhost.h so we need to call into it
13995    to clone the host, CPerlHost should have a c interface, sky */
13996
13997    if (flags & CLONEf_CLONE_HOST) {
13998        return perl_clone_host(proto_perl,flags);
13999    }
14000    return perl_clone_using(proto_perl, flags,
14001                             proto_perl->IMem,
14002                             proto_perl->IMemShared,
14003                             proto_perl->IMemParse,
14004                             proto_perl->IEnv,
14005                             proto_perl->IStdIO,
14006                             proto_perl->ILIO,
14007                             proto_perl->IDir,
14008                             proto_perl->ISock,
14009                             proto_perl->IProc);
14010 }
14011
14012 PerlInterpreter *
14013 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14014                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14015                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14016                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14017                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14018                  struct IPerlProc* ipP)
14019 {
14020     /* XXX many of the string copies here can be optimized if they're
14021      * constants; they need to be allocated as common memory and just
14022      * their pointers copied. */
14023
14024     IV i;
14025     CLONE_PARAMS clone_params;
14026     CLONE_PARAMS* const param = &clone_params;
14027
14028     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14029
14030     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14031 #else           /* !PERL_IMPLICIT_SYS */
14032     IV i;
14033     CLONE_PARAMS clone_params;
14034     CLONE_PARAMS* param = &clone_params;
14035     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14036
14037     PERL_ARGS_ASSERT_PERL_CLONE;
14038 #endif          /* PERL_IMPLICIT_SYS */
14039
14040     /* for each stash, determine whether its objects should be cloned */
14041     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14042     PERL_SET_THX(my_perl);
14043
14044 #ifdef DEBUGGING
14045     PoisonNew(my_perl, 1, PerlInterpreter);
14046     PL_op = NULL;
14047     PL_curcop = NULL;
14048     PL_defstash = NULL; /* may be used by perl malloc() */
14049     PL_markstack = 0;
14050     PL_scopestack = 0;
14051     PL_scopestack_name = 0;
14052     PL_savestack = 0;
14053     PL_savestack_ix = 0;
14054     PL_savestack_max = -1;
14055     PL_sig_pending = 0;
14056     PL_parser = NULL;
14057     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14058 #  ifdef DEBUG_LEAKING_SCALARS
14059     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14060 #  endif
14061 #else   /* !DEBUGGING */
14062     Zero(my_perl, 1, PerlInterpreter);
14063 #endif  /* DEBUGGING */
14064
14065 #ifdef PERL_IMPLICIT_SYS
14066     /* host pointers */
14067     PL_Mem              = ipM;
14068     PL_MemShared        = ipMS;
14069     PL_MemParse         = ipMP;
14070     PL_Env              = ipE;
14071     PL_StdIO            = ipStd;
14072     PL_LIO              = ipLIO;
14073     PL_Dir              = ipD;
14074     PL_Sock             = ipS;
14075     PL_Proc             = ipP;
14076 #endif          /* PERL_IMPLICIT_SYS */
14077
14078
14079     param->flags = flags;
14080     /* Nothing in the core code uses this, but we make it available to
14081        extensions (using mg_dup).  */
14082     param->proto_perl = proto_perl;
14083     /* Likely nothing will use this, but it is initialised to be consistent
14084        with Perl_clone_params_new().  */
14085     param->new_perl = my_perl;
14086     param->unreferenced = NULL;
14087
14088
14089     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14090
14091     PL_body_arenas = NULL;
14092     Zero(&PL_body_roots, 1, PL_body_roots);
14093     
14094     PL_sv_count         = 0;
14095     PL_sv_root          = NULL;
14096     PL_sv_arenaroot     = NULL;
14097
14098     PL_debug            = proto_perl->Idebug;
14099
14100     /* dbargs array probably holds garbage */
14101     PL_dbargs           = NULL;
14102
14103     PL_compiling = proto_perl->Icompiling;
14104
14105     /* pseudo environmental stuff */
14106     PL_origargc         = proto_perl->Iorigargc;
14107     PL_origargv         = proto_perl->Iorigargv;
14108
14109 #ifndef NO_TAINT_SUPPORT
14110     /* Set tainting stuff before PerlIO_debug can possibly get called */
14111     PL_tainting         = proto_perl->Itainting;
14112     PL_taint_warn       = proto_perl->Itaint_warn;
14113 #else
14114     PL_tainting         = FALSE;
14115     PL_taint_warn       = FALSE;
14116 #endif
14117
14118     PL_minus_c          = proto_perl->Iminus_c;
14119
14120     PL_localpatches     = proto_perl->Ilocalpatches;
14121     PL_splitstr         = proto_perl->Isplitstr;
14122     PL_minus_n          = proto_perl->Iminus_n;
14123     PL_minus_p          = proto_perl->Iminus_p;
14124     PL_minus_l          = proto_perl->Iminus_l;
14125     PL_minus_a          = proto_perl->Iminus_a;
14126     PL_minus_E          = proto_perl->Iminus_E;
14127     PL_minus_F          = proto_perl->Iminus_F;
14128     PL_doswitches       = proto_perl->Idoswitches;
14129     PL_dowarn           = proto_perl->Idowarn;
14130 #ifdef PERL_SAWAMPERSAND
14131     PL_sawampersand     = proto_perl->Isawampersand;
14132 #endif
14133     PL_unsafe           = proto_perl->Iunsafe;
14134     PL_perldb           = proto_perl->Iperldb;
14135     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14136     PL_exit_flags       = proto_perl->Iexit_flags;
14137
14138     /* XXX time(&PL_basetime) when asked for? */
14139     PL_basetime         = proto_perl->Ibasetime;
14140
14141     PL_maxsysfd         = proto_perl->Imaxsysfd;
14142     PL_statusvalue      = proto_perl->Istatusvalue;
14143 #ifdef __VMS
14144     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14145 #else
14146     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14147 #endif
14148
14149     /* RE engine related */
14150     PL_regmatch_slab    = NULL;
14151     PL_reg_curpm        = NULL;
14152
14153     PL_sub_generation   = proto_perl->Isub_generation;
14154
14155     /* funky return mechanisms */
14156     PL_forkprocess      = proto_perl->Iforkprocess;
14157
14158     /* internal state */
14159     PL_maxo             = proto_perl->Imaxo;
14160
14161     PL_main_start       = proto_perl->Imain_start;
14162     PL_eval_root        = proto_perl->Ieval_root;
14163     PL_eval_start       = proto_perl->Ieval_start;
14164
14165     PL_filemode         = proto_perl->Ifilemode;
14166     PL_lastfd           = proto_perl->Ilastfd;
14167     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14168     PL_Argv             = NULL;
14169     PL_Cmd              = NULL;
14170     PL_gensym           = proto_perl->Igensym;
14171
14172     PL_laststatval      = proto_perl->Ilaststatval;
14173     PL_laststype        = proto_perl->Ilaststype;
14174     PL_mess_sv          = NULL;
14175
14176     PL_profiledata      = NULL;
14177
14178     PL_generation       = proto_perl->Igeneration;
14179
14180     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14181     PL_in_clean_all     = proto_perl->Iin_clean_all;
14182
14183     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14184     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14185     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14186     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14187     PL_nomemok          = proto_perl->Inomemok;
14188     PL_an               = proto_perl->Ian;
14189     PL_evalseq          = proto_perl->Ievalseq;
14190     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14191     PL_origalen         = proto_perl->Iorigalen;
14192
14193     PL_sighandlerp      = proto_perl->Isighandlerp;
14194
14195     PL_runops           = proto_perl->Irunops;
14196
14197     PL_subline          = proto_perl->Isubline;
14198
14199 #ifdef FCRYPT
14200     PL_cryptseen        = proto_perl->Icryptseen;
14201 #endif
14202
14203 #ifdef USE_LOCALE_COLLATE
14204     PL_collation_ix     = proto_perl->Icollation_ix;
14205     PL_collation_standard       = proto_perl->Icollation_standard;
14206     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14207     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14208 #endif /* USE_LOCALE_COLLATE */
14209
14210 #ifdef USE_LOCALE_NUMERIC
14211     PL_numeric_standard = proto_perl->Inumeric_standard;
14212     PL_numeric_local    = proto_perl->Inumeric_local;
14213 #endif /* !USE_LOCALE_NUMERIC */
14214
14215     /* Did the locale setup indicate UTF-8? */
14216     PL_utf8locale       = proto_perl->Iutf8locale;
14217     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14218     /* Unicode features (see perlrun/-C) */
14219     PL_unicode          = proto_perl->Iunicode;
14220
14221     /* Pre-5.8 signals control */
14222     PL_signals          = proto_perl->Isignals;
14223
14224     /* times() ticks per second */
14225     PL_clocktick        = proto_perl->Iclocktick;
14226
14227     /* Recursion stopper for PerlIO_find_layer */
14228     PL_in_load_module   = proto_perl->Iin_load_module;
14229
14230     /* sort() routine */
14231     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14232
14233     /* Not really needed/useful since the reenrant_retint is "volatile",
14234      * but do it for consistency's sake. */
14235     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14236
14237     /* Hooks to shared SVs and locks. */
14238     PL_sharehook        = proto_perl->Isharehook;
14239     PL_lockhook         = proto_perl->Ilockhook;
14240     PL_unlockhook       = proto_perl->Iunlockhook;
14241     PL_threadhook       = proto_perl->Ithreadhook;
14242     PL_destroyhook      = proto_perl->Idestroyhook;
14243     PL_signalhook       = proto_perl->Isignalhook;
14244
14245     PL_globhook         = proto_perl->Iglobhook;
14246
14247     /* swatch cache */
14248     PL_last_swash_hv    = NULL; /* reinits on demand */
14249     PL_last_swash_klen  = 0;
14250     PL_last_swash_key[0]= '\0';
14251     PL_last_swash_tmps  = (U8*)NULL;
14252     PL_last_swash_slen  = 0;
14253
14254     PL_srand_called     = proto_perl->Isrand_called;
14255     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14256
14257     if (flags & CLONEf_COPY_STACKS) {
14258         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14259         PL_tmps_ix              = proto_perl->Itmps_ix;
14260         PL_tmps_max             = proto_perl->Itmps_max;
14261         PL_tmps_floor           = proto_perl->Itmps_floor;
14262
14263         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14264          * NOTE: unlike the others! */
14265         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14266         PL_scopestack_max       = proto_perl->Iscopestack_max;
14267
14268         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14269          * NOTE: unlike the others! */
14270         PL_savestack_ix         = proto_perl->Isavestack_ix;
14271         PL_savestack_max        = proto_perl->Isavestack_max;
14272     }
14273
14274     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14275     PL_top_env          = &PL_start_env;
14276
14277     PL_op               = proto_perl->Iop;
14278
14279     PL_Sv               = NULL;
14280     PL_Xpv              = (XPV*)NULL;
14281     my_perl->Ina        = proto_perl->Ina;
14282
14283     PL_statbuf          = proto_perl->Istatbuf;
14284     PL_statcache        = proto_perl->Istatcache;
14285
14286 #ifndef NO_TAINT_SUPPORT
14287     PL_tainted          = proto_perl->Itainted;
14288 #else
14289     PL_tainted          = FALSE;
14290 #endif
14291     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14292
14293     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14294
14295     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14296     PL_restartop        = proto_perl->Irestartop;
14297     PL_in_eval          = proto_perl->Iin_eval;
14298     PL_delaymagic       = proto_perl->Idelaymagic;
14299     PL_phase            = proto_perl->Iphase;
14300     PL_localizing       = proto_perl->Ilocalizing;
14301
14302     PL_hv_fetch_ent_mh  = NULL;
14303     PL_modcount         = proto_perl->Imodcount;
14304     PL_lastgotoprobe    = NULL;
14305     PL_dumpindent       = proto_perl->Idumpindent;
14306
14307     PL_efloatbuf        = NULL;         /* reinits on demand */
14308     PL_efloatsize       = 0;                    /* reinits on demand */
14309
14310     /* regex stuff */
14311
14312     PL_colorset         = 0;            /* reinits PL_colors[] */
14313     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14314
14315     /* Pluggable optimizer */
14316     PL_peepp            = proto_perl->Ipeepp;
14317     PL_rpeepp           = proto_perl->Irpeepp;
14318     /* op_free() hook */
14319     PL_opfreehook       = proto_perl->Iopfreehook;
14320
14321 #ifdef USE_REENTRANT_API
14322     /* XXX: things like -Dm will segfault here in perlio, but doing
14323      *  PERL_SET_CONTEXT(proto_perl);
14324      * breaks too many other things
14325      */
14326     Perl_reentrant_init(aTHX);
14327 #endif
14328
14329     /* create SV map for pointer relocation */
14330     PL_ptr_table = ptr_table_new();
14331
14332     /* initialize these special pointers as early as possible */
14333     init_constants();
14334     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14335     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14336     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14337
14338     /* create (a non-shared!) shared string table */
14339     PL_strtab           = newHV();
14340     HvSHAREKEYS_off(PL_strtab);
14341     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14342     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14343
14344     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14345
14346     /* This PV will be free'd special way so must set it same way op.c does */
14347     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14348     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14349
14350     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14351     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14352     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14353     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14354
14355     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14356     /* This makes no difference to the implementation, as it always pushes
14357        and shifts pointers to other SVs without changing their reference
14358        count, with the array becoming empty before it is freed. However, it
14359        makes it conceptually clear what is going on, and will avoid some
14360        work inside av.c, filling slots between AvFILL() and AvMAX() with
14361        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14362     AvREAL_off(param->stashes);
14363
14364     if (!(flags & CLONEf_COPY_STACKS)) {
14365         param->unreferenced = newAV();
14366     }
14367
14368 #ifdef PERLIO_LAYERS
14369     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14370     PerlIO_clone(aTHX_ proto_perl, param);
14371 #endif
14372
14373     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14374     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14375     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14376     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14377     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14378     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14379
14380     /* switches */
14381     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14382     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
14383     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14384     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14385
14386     /* magical thingies */
14387
14388     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14389
14390     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14391     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14392     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14393
14394    
14395     /* Clone the regex array */
14396     /* ORANGE FIXME for plugins, probably in the SV dup code.
14397        newSViv(PTR2IV(CALLREGDUPE(
14398        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14399     */
14400     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14401     PL_regex_pad = AvARRAY(PL_regex_padav);
14402
14403     PL_stashpadmax      = proto_perl->Istashpadmax;
14404     PL_stashpadix       = proto_perl->Istashpadix ;
14405     Newx(PL_stashpad, PL_stashpadmax, HV *);
14406     {
14407         PADOFFSET o = 0;
14408         for (; o < PL_stashpadmax; ++o)
14409             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14410     }
14411
14412     /* shortcuts to various I/O objects */
14413     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14414     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14415     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14416     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14417     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14418     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14419     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14420
14421     /* shortcuts to regexp stuff */
14422     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14423
14424     /* shortcuts to misc objects */
14425     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14426
14427     /* shortcuts to debugging objects */
14428     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14429     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14430     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14431     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14432     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14433     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14434
14435     /* symbol tables */
14436     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14437     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14438     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14439     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14440     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14441
14442     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14443     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14444     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14445     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14446     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14447     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14448     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14449     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14450
14451     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14452
14453     /* subprocess state */
14454     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14455
14456     if (proto_perl->Iop_mask)
14457         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14458     else
14459         PL_op_mask      = NULL;
14460     /* PL_asserting        = proto_perl->Iasserting; */
14461
14462     /* current interpreter roots */
14463     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14464     OP_REFCNT_LOCK;
14465     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14466     OP_REFCNT_UNLOCK;
14467
14468     /* runtime control stuff */
14469     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14470
14471     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14472
14473     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14474
14475     /* interpreter atexit processing */
14476     PL_exitlistlen      = proto_perl->Iexitlistlen;
14477     if (PL_exitlistlen) {
14478         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14479         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14480     }
14481     else
14482         PL_exitlist     = (PerlExitListEntry*)NULL;
14483
14484     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14485     if (PL_my_cxt_size) {
14486         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14487         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14488 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14489         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14490         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14491 #endif
14492     }
14493     else {
14494         PL_my_cxt_list  = (void**)NULL;
14495 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14496         PL_my_cxt_keys  = (const char**)NULL;
14497 #endif
14498     }
14499     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14500     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14501     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14502     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14503
14504     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14505
14506     PAD_CLONE_VARS(proto_perl, param);
14507
14508 #ifdef HAVE_INTERP_INTERN
14509     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14510 #endif
14511
14512     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14513
14514 #ifdef PERL_USES_PL_PIDSTATUS
14515     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14516 #endif
14517     PL_osname           = SAVEPV(proto_perl->Iosname);
14518     PL_parser           = parser_dup(proto_perl->Iparser, param);
14519
14520     /* XXX this only works if the saved cop has already been cloned */
14521     if (proto_perl->Iparser) {
14522         PL_parser->saved_curcop = (COP*)any_dup(
14523                                     proto_perl->Iparser->saved_curcop,
14524                                     proto_perl);
14525     }
14526
14527     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14528
14529 #ifdef USE_LOCALE_COLLATE
14530     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14531 #endif /* USE_LOCALE_COLLATE */
14532
14533 #ifdef USE_LOCALE_NUMERIC
14534     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14535     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14536 #endif /* !USE_LOCALE_NUMERIC */
14537
14538     /* Unicode inversion lists */
14539     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14540     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14541     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14542     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14543
14544     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14545     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14546
14547     /* utf8 character class swashes */
14548     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14549         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14550     }
14551     for (i = 0; i < POSIX_CC_COUNT; i++) {
14552         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14553     }
14554     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14555     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
14556     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
14557     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14558     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14559     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14560     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14561     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14562     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14563     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14564     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14565     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14566     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14567     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14568     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14569     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14570
14571     if (proto_perl->Ipsig_pend) {
14572         Newxz(PL_psig_pend, SIG_SIZE, int);
14573     }
14574     else {
14575         PL_psig_pend    = (int*)NULL;
14576     }
14577
14578     if (proto_perl->Ipsig_name) {
14579         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14580         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14581                             param);
14582         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14583     }
14584     else {
14585         PL_psig_ptr     = (SV**)NULL;
14586         PL_psig_name    = (SV**)NULL;
14587     }
14588
14589     if (flags & CLONEf_COPY_STACKS) {
14590         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14591         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14592                             PL_tmps_ix+1, param);
14593
14594         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14595         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14596         Newxz(PL_markstack, i, I32);
14597         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14598                                                   - proto_perl->Imarkstack);
14599         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14600                                                   - proto_perl->Imarkstack);
14601         Copy(proto_perl->Imarkstack, PL_markstack,
14602              PL_markstack_ptr - PL_markstack + 1, I32);
14603
14604         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14605          * NOTE: unlike the others! */
14606         Newxz(PL_scopestack, PL_scopestack_max, I32);
14607         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14608
14609 #ifdef DEBUGGING
14610         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14611         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14612 #endif
14613         /* reset stack AV to correct length before its duped via
14614          * PL_curstackinfo */
14615         AvFILLp(proto_perl->Icurstack) =
14616                             proto_perl->Istack_sp - proto_perl->Istack_base;
14617
14618         /* NOTE: si_dup() looks at PL_markstack */
14619         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14620
14621         /* PL_curstack          = PL_curstackinfo->si_stack; */
14622         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14623         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14624
14625         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14626         PL_stack_base           = AvARRAY(PL_curstack);
14627         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14628                                                    - proto_perl->Istack_base);
14629         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14630
14631         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14632         PL_savestack            = ss_dup(proto_perl, param);
14633     }
14634     else {
14635         init_stacks();
14636         ENTER;                  /* perl_destruct() wants to LEAVE; */
14637     }
14638
14639     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14640     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14641
14642     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14643     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14644     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14645     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14646     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14647     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14648
14649     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14650
14651     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14652     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14653     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14654
14655     PL_stashcache       = newHV();
14656
14657     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14658                                             proto_perl->Iwatchaddr);
14659     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14660     if (PL_debug && PL_watchaddr) {
14661         PerlIO_printf(Perl_debug_log,
14662           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14663           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14664           PTR2UV(PL_watchok));
14665     }
14666
14667     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14668     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14669     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14670
14671     /* Call the ->CLONE method, if it exists, for each of the stashes
14672        identified by sv_dup() above.
14673     */
14674     while(av_tindex(param->stashes) != -1) {
14675         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14676         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14677         if (cloner && GvCV(cloner)) {
14678             dSP;
14679             ENTER;
14680             SAVETMPS;
14681             PUSHMARK(SP);
14682             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14683             PUTBACK;
14684             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14685             FREETMPS;
14686             LEAVE;
14687         }
14688     }
14689
14690     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14691         ptr_table_free(PL_ptr_table);
14692         PL_ptr_table = NULL;
14693     }
14694
14695     if (!(flags & CLONEf_COPY_STACKS)) {
14696         unreferenced_to_tmp_stack(param->unreferenced);
14697     }
14698
14699     SvREFCNT_dec(param->stashes);
14700
14701     /* orphaned? eg threads->new inside BEGIN or use */
14702     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14703         SvREFCNT_inc_simple_void(PL_compcv);
14704         SAVEFREESV(PL_compcv);
14705     }
14706
14707     return my_perl;
14708 }
14709
14710 static void
14711 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14712 {
14713     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14714     
14715     if (AvFILLp(unreferenced) > -1) {
14716         SV **svp = AvARRAY(unreferenced);
14717         SV **const last = svp + AvFILLp(unreferenced);
14718         SSize_t count = 0;
14719
14720         do {
14721             if (SvREFCNT(*svp) == 1)
14722                 ++count;
14723         } while (++svp <= last);
14724
14725         EXTEND_MORTAL(count);
14726         svp = AvARRAY(unreferenced);
14727
14728         do {
14729             if (SvREFCNT(*svp) == 1) {
14730                 /* Our reference is the only one to this SV. This means that
14731                    in this thread, the scalar effectively has a 0 reference.
14732                    That doesn't work (cleanup never happens), so donate our
14733                    reference to it onto the save stack. */
14734                 PL_tmps_stack[++PL_tmps_ix] = *svp;
14735             } else {
14736                 /* As an optimisation, because we are already walking the
14737                    entire array, instead of above doing either
14738                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
14739                    release our reference to the scalar, so that at the end of
14740                    the array owns zero references to the scalars it happens to
14741                    point to. We are effectively converting the array from
14742                    AvREAL() on to AvREAL() off. This saves the av_clear()
14743                    (triggered by the SvREFCNT_dec(unreferenced) below) from
14744                    walking the array a second time.  */
14745                 SvREFCNT_dec(*svp);
14746             }
14747
14748         } while (++svp <= last);
14749         AvREAL_off(unreferenced);
14750     }
14751     SvREFCNT_dec_NN(unreferenced);
14752 }
14753
14754 void
14755 Perl_clone_params_del(CLONE_PARAMS *param)
14756 {
14757     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
14758        happy: */
14759     PerlInterpreter *const to = param->new_perl;
14760     dTHXa(to);
14761     PerlInterpreter *const was = PERL_GET_THX;
14762
14763     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
14764
14765     if (was != to) {
14766         PERL_SET_THX(to);
14767     }
14768
14769     SvREFCNT_dec(param->stashes);
14770     if (param->unreferenced)
14771         unreferenced_to_tmp_stack(param->unreferenced);
14772
14773     Safefree(param);
14774
14775     if (was != to) {
14776         PERL_SET_THX(was);
14777     }
14778 }
14779
14780 CLONE_PARAMS *
14781 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
14782 {
14783     dVAR;
14784     /* Need to play this game, as newAV() can call safesysmalloc(), and that
14785        does a dTHX; to get the context from thread local storage.
14786        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
14787        a version that passes in my_perl.  */
14788     PerlInterpreter *const was = PERL_GET_THX;
14789     CLONE_PARAMS *param;
14790
14791     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
14792
14793     if (was != to) {
14794         PERL_SET_THX(to);
14795     }
14796
14797     /* Given that we've set the context, we can do this unshared.  */
14798     Newx(param, 1, CLONE_PARAMS);
14799
14800     param->flags = 0;
14801     param->proto_perl = from;
14802     param->new_perl = to;
14803     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
14804     AvREAL_off(param->stashes);
14805     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
14806
14807     if (was != to) {
14808         PERL_SET_THX(was);
14809     }
14810     return param;
14811 }
14812
14813 #endif /* USE_ITHREADS */
14814
14815 void
14816 Perl_init_constants(pTHX)
14817 {
14818     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
14819     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
14820     SvANY(&PL_sv_undef)         = NULL;
14821
14822     SvANY(&PL_sv_no)            = new_XPVNV();
14823     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
14824     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
14825                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14826                                   |SVp_POK|SVf_POK;
14827
14828     SvANY(&PL_sv_yes)           = new_XPVNV();
14829     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
14830     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
14831                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14832                                   |SVp_POK|SVf_POK;
14833
14834     SvPV_set(&PL_sv_no, (char*)PL_No);
14835     SvCUR_set(&PL_sv_no, 0);
14836     SvLEN_set(&PL_sv_no, 0);
14837     SvIV_set(&PL_sv_no, 0);
14838     SvNV_set(&PL_sv_no, 0);
14839
14840     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
14841     SvCUR_set(&PL_sv_yes, 1);
14842     SvLEN_set(&PL_sv_yes, 0);
14843     SvIV_set(&PL_sv_yes, 1);
14844     SvNV_set(&PL_sv_yes, 1);
14845 }
14846
14847 /*
14848 =head1 Unicode Support
14849
14850 =for apidoc sv_recode_to_utf8
14851
14852 The encoding is assumed to be an Encode object, on entry the PV
14853 of the sv is assumed to be octets in that encoding, and the sv
14854 will be converted into Unicode (and UTF-8).
14855
14856 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14857 is not a reference, nothing is done to the sv.  If the encoding is not
14858 an C<Encode::XS> Encoding object, bad things will happen.
14859 (See F<lib/encoding.pm> and L<Encode>.)
14860
14861 The PV of the sv is returned.
14862
14863 =cut */
14864
14865 char *
14866 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14867 {
14868     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14869
14870     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14871         SV *uni;
14872         STRLEN len;
14873         const char *s;
14874         dSP;
14875         SV *nsv = sv;
14876         ENTER;
14877         PUSHSTACK;
14878         SAVETMPS;
14879         if (SvPADTMP(nsv)) {
14880             nsv = sv_newmortal();
14881             SvSetSV_nosteal(nsv, sv);
14882         }
14883         PUSHMARK(sp);
14884         EXTEND(SP, 3);
14885         PUSHs(encoding);
14886         PUSHs(nsv);
14887 /*
14888   NI-S 2002/07/09
14889   Passing sv_yes is wrong - it needs to be or'ed set of constants
14890   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14891   remove converted chars from source.
14892
14893   Both will default the value - let them.
14894
14895         XPUSHs(&PL_sv_yes);
14896 */
14897         PUTBACK;
14898         call_method("decode", G_SCALAR);
14899         SPAGAIN;
14900         uni = POPs;
14901         PUTBACK;
14902         s = SvPV_const(uni, len);
14903         if (s != SvPVX_const(sv)) {
14904             SvGROW(sv, len + 1);
14905             Move(s, SvPVX(sv), len + 1, char);
14906             SvCUR_set(sv, len);
14907         }
14908         FREETMPS;
14909         POPSTACK;
14910         LEAVE;
14911         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14912             /* clear pos and any utf8 cache */
14913             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14914             if (mg)
14915                 mg->mg_len = -1;
14916             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14917                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14918         }
14919         SvUTF8_on(sv);
14920         return SvPVX(sv);
14921     }
14922     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14923 }
14924
14925 /*
14926 =for apidoc sv_cat_decode
14927
14928 The encoding is assumed to be an Encode object, the PV of the ssv is
14929 assumed to be octets in that encoding and decoding the input starts
14930 from the position which (PV + *offset) pointed to.  The dsv will be
14931 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14932 when the string tstr appears in decoding output or the input ends on
14933 the PV of the ssv.  The value which the offset points will be modified
14934 to the last input position on the ssv.
14935
14936 Returns TRUE if the terminator was found, else returns FALSE.
14937
14938 =cut */
14939
14940 bool
14941 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14942                    SV *ssv, int *offset, char *tstr, int tlen)
14943 {
14944     bool ret = FALSE;
14945
14946     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14947
14948     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14949         SV *offsv;
14950         dSP;
14951         ENTER;
14952         SAVETMPS;
14953         PUSHMARK(sp);
14954         EXTEND(SP, 6);
14955         PUSHs(encoding);
14956         PUSHs(dsv);
14957         PUSHs(ssv);
14958         offsv = newSViv(*offset);
14959         mPUSHs(offsv);
14960         mPUSHp(tstr, tlen);
14961         PUTBACK;
14962         call_method("cat_decode", G_SCALAR);
14963         SPAGAIN;
14964         ret = SvTRUE(TOPs);
14965         *offset = SvIV(offsv);
14966         PUTBACK;
14967         FREETMPS;
14968         LEAVE;
14969     }
14970     else
14971         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14972     return ret;
14973
14974 }
14975
14976 /* ---------------------------------------------------------------------
14977  *
14978  * support functions for report_uninit()
14979  */
14980
14981 /* the maxiumum size of array or hash where we will scan looking
14982  * for the undefined element that triggered the warning */
14983
14984 #define FUV_MAX_SEARCH_SIZE 1000
14985
14986 /* Look for an entry in the hash whose value has the same SV as val;
14987  * If so, return a mortal copy of the key. */
14988
14989 STATIC SV*
14990 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14991 {
14992     dVAR;
14993     HE **array;
14994     I32 i;
14995
14996     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14997
14998     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14999                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15000         return NULL;
15001
15002     array = HvARRAY(hv);
15003
15004     for (i=HvMAX(hv); i>=0; i--) {
15005         HE *entry;
15006         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15007             if (HeVAL(entry) != val)
15008                 continue;
15009             if (    HeVAL(entry) == &PL_sv_undef ||
15010                     HeVAL(entry) == &PL_sv_placeholder)
15011                 continue;
15012             if (!HeKEY(entry))
15013                 return NULL;
15014             if (HeKLEN(entry) == HEf_SVKEY)
15015                 return sv_mortalcopy(HeKEY_sv(entry));
15016             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15017         }
15018     }
15019     return NULL;
15020 }
15021
15022 /* Look for an entry in the array whose value has the same SV as val;
15023  * If so, return the index, otherwise return -1. */
15024
15025 STATIC I32
15026 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15027 {
15028     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15029
15030     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15031                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15032         return -1;
15033
15034     if (val != &PL_sv_undef) {
15035         SV ** const svp = AvARRAY(av);
15036         I32 i;
15037
15038         for (i=AvFILLp(av); i>=0; i--)
15039             if (svp[i] == val)
15040                 return i;
15041     }
15042     return -1;
15043 }
15044
15045 /* varname(): return the name of a variable, optionally with a subscript.
15046  * If gv is non-zero, use the name of that global, along with gvtype (one
15047  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15048  * targ.  Depending on the value of the subscript_type flag, return:
15049  */
15050
15051 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15052 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15053 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15054 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15055
15056 SV*
15057 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15058         const SV *const keyname, I32 aindex, int subscript_type)
15059 {
15060
15061     SV * const name = sv_newmortal();
15062     if (gv && isGV(gv)) {
15063         char buffer[2];
15064         buffer[0] = gvtype;
15065         buffer[1] = 0;
15066
15067         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15068
15069         gv_fullname4(name, gv, buffer, 0);
15070
15071         if ((unsigned int)SvPVX(name)[1] <= 26) {
15072             buffer[0] = '^';
15073             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15074
15075             /* Swap the 1 unprintable control character for the 2 byte pretty
15076                version - ie substr($name, 1, 1) = $buffer; */
15077             sv_insert(name, 1, 1, buffer, 2);
15078         }
15079     }
15080     else {
15081         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15082         SV *sv;
15083         AV *av;
15084
15085         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15086
15087         if (!cv || !CvPADLIST(cv))
15088             return NULL;
15089         av = *PadlistARRAY(CvPADLIST(cv));
15090         sv = *av_fetch(av, targ, FALSE);
15091         sv_setsv_flags(name, sv, 0);
15092     }
15093
15094     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15095         SV * const sv = newSV(0);
15096         *SvPVX(name) = '$';
15097         Perl_sv_catpvf(aTHX_ name, "{%s}",
15098             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15099                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15100         SvREFCNT_dec_NN(sv);
15101     }
15102     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15103         *SvPVX(name) = '$';
15104         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15105     }
15106     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15107         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15108         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15109     }
15110
15111     return name;
15112 }
15113
15114
15115 /*
15116 =for apidoc find_uninit_var
15117
15118 Find the name of the undefined variable (if any) that caused the operator
15119 to issue a "Use of uninitialized value" warning.
15120 If match is true, only return a name if its value matches uninit_sv.
15121 So roughly speaking, if a unary operator (such as OP_COS) generates a
15122 warning, then following the direct child of the op may yield an
15123 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15124 other hand, with OP_ADD there are two branches to follow, so we only print
15125 the variable name if we get an exact match.
15126
15127 The name is returned as a mortal SV.
15128
15129 Assumes that PL_op is the op that originally triggered the error, and that
15130 PL_comppad/PL_curpad points to the currently executing pad.
15131
15132 =cut
15133 */
15134
15135 STATIC SV *
15136 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15137                   bool match)
15138 {
15139     dVAR;
15140     SV *sv;
15141     const GV *gv;
15142     const OP *o, *o2, *kid;
15143
15144     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15145                             uninit_sv == &PL_sv_placeholder)))
15146         return NULL;
15147
15148     switch (obase->op_type) {
15149
15150     case OP_RV2AV:
15151     case OP_RV2HV:
15152     case OP_PADAV:
15153     case OP_PADHV:
15154       {
15155         const bool pad  = (    obase->op_type == OP_PADAV
15156                             || obase->op_type == OP_PADHV
15157                             || obase->op_type == OP_PADRANGE
15158                           );
15159
15160         const bool hash = (    obase->op_type == OP_PADHV
15161                             || obase->op_type == OP_RV2HV
15162                             || (obase->op_type == OP_PADRANGE
15163                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15164                           );
15165         I32 index = 0;
15166         SV *keysv = NULL;
15167         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15168
15169         if (pad) { /* @lex, %lex */
15170             sv = PAD_SVl(obase->op_targ);
15171             gv = NULL;
15172         }
15173         else {
15174             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15175             /* @global, %global */
15176                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15177                 if (!gv)
15178                     break;
15179                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15180             }
15181             else if (obase == PL_op) /* @{expr}, %{expr} */
15182                 return find_uninit_var(cUNOPx(obase)->op_first,
15183                                                     uninit_sv, match);
15184             else /* @{expr}, %{expr} as a sub-expression */
15185                 return NULL;
15186         }
15187
15188         /* attempt to find a match within the aggregate */
15189         if (hash) {
15190             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15191             if (keysv)
15192                 subscript_type = FUV_SUBSCRIPT_HASH;
15193         }
15194         else {
15195             index = find_array_subscript((const AV *)sv, uninit_sv);
15196             if (index >= 0)
15197                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15198         }
15199
15200         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15201             break;
15202
15203         return varname(gv, hash ? '%' : '@', obase->op_targ,
15204                                     keysv, index, subscript_type);
15205       }
15206
15207     case OP_RV2SV:
15208         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15209             /* $global */
15210             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15211             if (!gv || !GvSTASH(gv))
15212                 break;
15213             if (match && (GvSV(gv) != uninit_sv))
15214                 break;
15215             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15216         }
15217         /* ${expr} */
15218         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
15219
15220     case OP_PADSV:
15221         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15222             break;
15223         return varname(NULL, '$', obase->op_targ,
15224                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15225
15226     case OP_GVSV:
15227         gv = cGVOPx_gv(obase);
15228         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15229             break;
15230         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15231
15232     case OP_AELEMFAST_LEX:
15233         if (match) {
15234             SV **svp;
15235             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15236             if (!av || SvRMAGICAL(av))
15237                 break;
15238             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15239             if (!svp || *svp != uninit_sv)
15240                 break;
15241         }
15242         return varname(NULL, '$', obase->op_targ,
15243                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15244     case OP_AELEMFAST:
15245         {
15246             gv = cGVOPx_gv(obase);
15247             if (!gv)
15248                 break;
15249             if (match) {
15250                 SV **svp;
15251                 AV *const av = GvAV(gv);
15252                 if (!av || SvRMAGICAL(av))
15253                     break;
15254                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15255                 if (!svp || *svp != uninit_sv)
15256                     break;
15257             }
15258             return varname(gv, '$', 0,
15259                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15260         }
15261         NOT_REACHED; /* NOTREACHED */
15262
15263     case OP_EXISTS:
15264         o = cUNOPx(obase)->op_first;
15265         if (!o || o->op_type != OP_NULL ||
15266                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15267             break;
15268         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
15269
15270     case OP_AELEM:
15271     case OP_HELEM:
15272     {
15273         bool negate = FALSE;
15274
15275         if (PL_op == obase)
15276             /* $a[uninit_expr] or $h{uninit_expr} */
15277             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
15278
15279         gv = NULL;
15280         o = cBINOPx(obase)->op_first;
15281         kid = cBINOPx(obase)->op_last;
15282
15283         /* get the av or hv, and optionally the gv */
15284         sv = NULL;
15285         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15286             sv = PAD_SV(o->op_targ);
15287         }
15288         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15289                 && cUNOPo->op_first->op_type == OP_GV)
15290         {
15291             gv = cGVOPx_gv(cUNOPo->op_first);
15292             if (!gv)
15293                 break;
15294             sv = o->op_type
15295                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15296         }
15297         if (!sv)
15298             break;
15299
15300         if (kid && kid->op_type == OP_NEGATE) {
15301             negate = TRUE;
15302             kid = cUNOPx(kid)->op_first;
15303         }
15304
15305         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15306             /* index is constant */
15307             SV* kidsv;
15308             if (negate) {
15309                 kidsv = sv_2mortal(newSVpvs("-"));
15310                 sv_catsv(kidsv, cSVOPx_sv(kid));
15311             }
15312             else
15313                 kidsv = cSVOPx_sv(kid);
15314             if (match) {
15315                 if (SvMAGICAL(sv))
15316                     break;
15317                 if (obase->op_type == OP_HELEM) {
15318                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15319                     if (!he || HeVAL(he) != uninit_sv)
15320                         break;
15321                 }
15322                 else {
15323                     SV * const  opsv = cSVOPx_sv(kid);
15324                     const IV  opsviv = SvIV(opsv);
15325                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15326                         negate ? - opsviv : opsviv,
15327                         FALSE);
15328                     if (!svp || *svp != uninit_sv)
15329                         break;
15330                 }
15331             }
15332             if (obase->op_type == OP_HELEM)
15333                 return varname(gv, '%', o->op_targ,
15334                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15335             else
15336                 return varname(gv, '@', o->op_targ, NULL,
15337                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15338                     FUV_SUBSCRIPT_ARRAY);
15339         }
15340         else  {
15341             /* index is an expression;
15342              * attempt to find a match within the aggregate */
15343             if (obase->op_type == OP_HELEM) {
15344                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15345                 if (keysv)
15346                     return varname(gv, '%', o->op_targ,
15347                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15348             }
15349             else {
15350                 const I32 index
15351                     = find_array_subscript((const AV *)sv, uninit_sv);
15352                 if (index >= 0)
15353                     return varname(gv, '@', o->op_targ,
15354                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15355             }
15356             if (match)
15357                 break;
15358             return varname(gv,
15359                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15360                 ? '@' : '%',
15361                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15362         }
15363         NOT_REACHED; /* NOTREACHED */
15364     }
15365
15366     case OP_AASSIGN:
15367         /* only examine RHS */
15368         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
15369
15370     case OP_OPEN:
15371         o = cUNOPx(obase)->op_first;
15372         if (   o->op_type == OP_PUSHMARK
15373            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15374         )
15375             o = OP_SIBLING(o);
15376
15377         if (!OP_HAS_SIBLING(o)) {
15378             /* one-arg version of open is highly magical */
15379
15380             if (o->op_type == OP_GV) { /* open FOO; */
15381                 gv = cGVOPx_gv(o);
15382                 if (match && GvSV(gv) != uninit_sv)
15383                     break;
15384                 return varname(gv, '$', 0,
15385                             NULL, 0, FUV_SUBSCRIPT_NONE);
15386             }
15387             /* other possibilities not handled are:
15388              * open $x; or open my $x;  should return '${*$x}'
15389              * open expr;               should return '$'.expr ideally
15390              */
15391              break;
15392         }
15393         goto do_op;
15394
15395     /* ops where $_ may be an implicit arg */
15396     case OP_TRANS:
15397     case OP_TRANSR:
15398     case OP_SUBST:
15399     case OP_MATCH:
15400         if ( !(obase->op_flags & OPf_STACKED)) {
15401             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
15402                                  ? PAD_SVl(obase->op_targ)
15403                                  : DEFSV))
15404             {
15405                 sv = sv_newmortal();
15406                 sv_setpvs(sv, "$_");
15407                 return sv;
15408             }
15409         }
15410         goto do_op;
15411
15412     case OP_PRTF:
15413     case OP_PRINT:
15414     case OP_SAY:
15415         match = 1; /* print etc can return undef on defined args */
15416         /* skip filehandle as it can't produce 'undef' warning  */
15417         o = cUNOPx(obase)->op_first;
15418         if ((obase->op_flags & OPf_STACKED)
15419             &&
15420                (   o->op_type == OP_PUSHMARK
15421                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15422             o = OP_SIBLING(OP_SIBLING(o));
15423         goto do_op2;
15424
15425
15426     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15427     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15428
15429         /* the following ops are capable of returning PL_sv_undef even for
15430          * defined arg(s) */
15431
15432     case OP_BACKTICK:
15433     case OP_PIPE_OP:
15434     case OP_FILENO:
15435     case OP_BINMODE:
15436     case OP_TIED:
15437     case OP_GETC:
15438     case OP_SYSREAD:
15439     case OP_SEND:
15440     case OP_IOCTL:
15441     case OP_SOCKET:
15442     case OP_SOCKPAIR:
15443     case OP_BIND:
15444     case OP_CONNECT:
15445     case OP_LISTEN:
15446     case OP_ACCEPT:
15447     case OP_SHUTDOWN:
15448     case OP_SSOCKOPT:
15449     case OP_GETPEERNAME:
15450     case OP_FTRREAD:
15451     case OP_FTRWRITE:
15452     case OP_FTREXEC:
15453     case OP_FTROWNED:
15454     case OP_FTEREAD:
15455     case OP_FTEWRITE:
15456     case OP_FTEEXEC:
15457     case OP_FTEOWNED:
15458     case OP_FTIS:
15459     case OP_FTZERO:
15460     case OP_FTSIZE:
15461     case OP_FTFILE:
15462     case OP_FTDIR:
15463     case OP_FTLINK:
15464     case OP_FTPIPE:
15465     case OP_FTSOCK:
15466     case OP_FTBLK:
15467     case OP_FTCHR:
15468     case OP_FTTTY:
15469     case OP_FTSUID:
15470     case OP_FTSGID:
15471     case OP_FTSVTX:
15472     case OP_FTTEXT:
15473     case OP_FTBINARY:
15474     case OP_FTMTIME:
15475     case OP_FTATIME:
15476     case OP_FTCTIME:
15477     case OP_READLINK:
15478     case OP_OPEN_DIR:
15479     case OP_READDIR:
15480     case OP_TELLDIR:
15481     case OP_SEEKDIR:
15482     case OP_REWINDDIR:
15483     case OP_CLOSEDIR:
15484     case OP_GMTIME:
15485     case OP_ALARM:
15486     case OP_SEMGET:
15487     case OP_GETLOGIN:
15488     case OP_UNDEF:
15489     case OP_SUBSTR:
15490     case OP_AEACH:
15491     case OP_EACH:
15492     case OP_SORT:
15493     case OP_CALLER:
15494     case OP_DOFILE:
15495     case OP_PROTOTYPE:
15496     case OP_NCMP:
15497     case OP_SMARTMATCH:
15498     case OP_UNPACK:
15499     case OP_SYSOPEN:
15500     case OP_SYSSEEK:
15501         match = 1;
15502         goto do_op;
15503
15504     case OP_ENTERSUB:
15505     case OP_GOTO:
15506         /* XXX tmp hack: these two may call an XS sub, and currently
15507           XS subs don't have a SUB entry on the context stack, so CV and
15508           pad determination goes wrong, and BAD things happen. So, just
15509           don't try to determine the value under those circumstances.
15510           Need a better fix at dome point. DAPM 11/2007 */
15511         break;
15512
15513     case OP_FLIP:
15514     case OP_FLOP:
15515     {
15516         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
15517         if (gv && GvSV(gv) == uninit_sv)
15518             return newSVpvs_flags("$.", SVs_TEMP);
15519         goto do_op;
15520     }
15521
15522     case OP_POS:
15523         /* def-ness of rval pos() is independent of the def-ness of its arg */
15524         if ( !(obase->op_flags & OPf_MOD))
15525             break;
15526
15527     case OP_SCHOMP:
15528     case OP_CHOMP:
15529         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
15530             return newSVpvs_flags("${$/}", SVs_TEMP);
15531         /* FALLTHROUGH */
15532
15533     default:
15534     do_op:
15535         if (!(obase->op_flags & OPf_KIDS))
15536             break;
15537         o = cUNOPx(obase)->op_first;
15538         
15539     do_op2:
15540         if (!o)
15541             break;
15542
15543         /* This loop checks all the kid ops, skipping any that cannot pos-
15544          * sibly be responsible for the uninitialized value; i.e., defined
15545          * constants and ops that return nothing.  If there is only one op
15546          * left that is not skipped, then we *know* it is responsible for
15547          * the uninitialized value.  If there is more than one op left, we
15548          * have to look for an exact match in the while() loop below.
15549          * Note that we skip padrange, because the individual pad ops that
15550          * it replaced are still in the tree, so we work on them instead.
15551          */
15552         o2 = NULL;
15553         for (kid=o; kid; kid = OP_SIBLING(kid)) {
15554             const OPCODE type = kid->op_type;
15555             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
15556               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
15557               || (type == OP_PUSHMARK)
15558               || (type == OP_PADRANGE)
15559             )
15560             continue;
15561
15562             if (o2) { /* more than one found */
15563                 o2 = NULL;
15564                 break;
15565             }
15566             o2 = kid;
15567         }
15568         if (o2)
15569             return find_uninit_var(o2, uninit_sv, match);
15570
15571         /* scan all args */
15572         while (o) {
15573             sv = find_uninit_var(o, uninit_sv, 1);
15574             if (sv)
15575                 return sv;
15576             o = OP_SIBLING(o);
15577         }
15578         break;
15579     }
15580     return NULL;
15581 }
15582
15583
15584 /*
15585 =for apidoc report_uninit
15586
15587 Print appropriate "Use of uninitialized variable" warning.
15588
15589 =cut
15590 */
15591
15592 void
15593 Perl_report_uninit(pTHX_ const SV *uninit_sv)
15594 {
15595     if (PL_op) {
15596         SV* varname = NULL;
15597         if (uninit_sv && PL_curpad) {
15598             varname = find_uninit_var(PL_op, uninit_sv,0);
15599             if (varname)
15600                 sv_insert(varname, 0, 0, " ", 1);
15601         }
15602         /* PL_warn_uninit_sv is constant */
15603         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15604         /* diag_listed_as: Use of uninitialized value%s */
15605         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
15606                 SVfARG(varname ? varname : &PL_sv_no),
15607                 " in ", OP_DESC(PL_op));
15608         GCC_DIAG_RESTORE;
15609     }
15610     else {
15611         /* PL_warn_uninit is constant */
15612         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15613         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
15614                     "", "", "");
15615         GCC_DIAG_RESTORE;
15616     }
15617 }
15618
15619 /*
15620  * Local variables:
15621  * c-indentation-style: bsd
15622  * c-basic-offset: 4
15623  * indent-tabs-mode: nil
15624  * End:
15625  *
15626  * ex: set ts=8 sts=4 sw=4 et:
15627  */