This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
t/run/locale.t: setting to POSIX may be same as C
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifndef HAS_C99
39 # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && !defined(__VMS)
40 #  define HAS_C99 1
41 # endif
42 #endif
43 #ifdef HAS_C99
44 # include <stdint.h>
45 #endif
46
47 #ifdef __Lynx__
48 /* Missing proto on LynxOS */
49   char *gconvert(double, int, int,  char *);
50 #endif
51
52 #ifdef PERL_NEW_COPY_ON_WRITE
53 #   ifndef SV_COW_THRESHOLD
54 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
55 #   endif
56 #   ifndef SV_COWBUF_THRESHOLD
57 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
58 #   endif
59 #   ifndef SV_COW_MAX_WASTE_THRESHOLD
60 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
61 #   endif
62 #   ifndef SV_COWBUF_WASTE_THRESHOLD
63 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
64 #   endif
65 #   ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
66 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
67 #   endif
68 #   ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
69 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
70 #   endif
71 #endif
72 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
73    hold is 0. */
74 #if SV_COW_THRESHOLD
75 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
76 #else
77 # define GE_COW_THRESHOLD(cur) 1
78 #endif
79 #if SV_COWBUF_THRESHOLD
80 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
81 #else
82 # define GE_COWBUF_THRESHOLD(cur) 1
83 #endif
84 #if SV_COW_MAX_WASTE_THRESHOLD
85 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
86 #else
87 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
88 #endif
89 #if SV_COWBUF_WASTE_THRESHOLD
90 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
91 #else
92 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
93 #endif
94 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
95 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
96 #else
97 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
98 #endif
99 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
100 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
101 #else
102 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
103 #endif
104
105 #define CHECK_COW_THRESHOLD(cur,len) (\
106     GE_COW_THRESHOLD((cur)) && \
107     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
108     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
109 )
110 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
111     GE_COWBUF_THRESHOLD((cur)) && \
112     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
113     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
114 )
115 /* void Gconvert: on Linux at least, gcvt (which Gconvert gets deffed to),
116  * has a mandatory return value, even though that value is just the same
117  * as the buf arg */
118
119 #ifdef PERL_UTF8_CACHE_ASSERT
120 /* if adding more checks watch out for the following tests:
121  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
122  *   lib/utf8.t lib/Unicode/Collate/t/index.t
123  * --jhi
124  */
125 #   define ASSERT_UTF8_CACHE(cache) \
126     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
127                               assert((cache)[2] <= (cache)[3]); \
128                               assert((cache)[3] <= (cache)[1]);} \
129                               } STMT_END
130 #else
131 #   define ASSERT_UTF8_CACHE(cache) NOOP
132 #endif
133
134 #ifdef PERL_OLD_COPY_ON_WRITE
135 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
136 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
137 #endif
138
139 /* ============================================================================
140
141 =head1 Allocation and deallocation of SVs.
142 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
143 sv, av, hv...) contains type and reference count information, and for
144 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
145 contains fields specific to each type.  Some types store all they need
146 in the head, so don't have a body.
147
148 In all but the most memory-paranoid configurations (ex: PURIFY), heads
149 and bodies are allocated out of arenas, which by default are
150 approximately 4K chunks of memory parcelled up into N heads or bodies.
151 Sv-bodies are allocated by their sv-type, guaranteeing size
152 consistency needed to allocate safely from arrays.
153
154 For SV-heads, the first slot in each arena is reserved, and holds a
155 link to the next arena, some flags, and a note of the number of slots.
156 Snaked through each arena chain is a linked list of free items; when
157 this becomes empty, an extra arena is allocated and divided up into N
158 items which are threaded into the free list.
159
160 SV-bodies are similar, but they use arena-sets by default, which
161 separate the link and info from the arena itself, and reclaim the 1st
162 slot in the arena.  SV-bodies are further described later.
163
164 The following global variables are associated with arenas:
165
166  PL_sv_arenaroot     pointer to list of SV arenas
167  PL_sv_root          pointer to list of free SV structures
168
169  PL_body_arenas      head of linked-list of body arenas
170  PL_body_roots[]     array of pointers to list of free bodies of svtype
171                      arrays are indexed by the svtype needed
172
173 A few special SV heads are not allocated from an arena, but are
174 instead directly created in the interpreter structure, eg PL_sv_undef.
175 The size of arenas can be changed from the default by setting
176 PERL_ARENA_SIZE appropriately at compile time.
177
178 The SV arena serves the secondary purpose of allowing still-live SVs
179 to be located and destroyed during final cleanup.
180
181 At the lowest level, the macros new_SV() and del_SV() grab and free
182 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
183 to return the SV to the free list with error checking.) new_SV() calls
184 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
185 SVs in the free list have their SvTYPE field set to all ones.
186
187 At the time of very final cleanup, sv_free_arenas() is called from
188 perl_destruct() to physically free all the arenas allocated since the
189 start of the interpreter.
190
191 The function visit() scans the SV arenas list, and calls a specified
192 function for each SV it finds which is still live - ie which has an SvTYPE
193 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
194 following functions (specified as [function that calls visit()] / [function
195 called by visit() for each SV]):
196
197     sv_report_used() / do_report_used()
198                         dump all remaining SVs (debugging aid)
199
200     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
201                       do_clean_named_io_objs(),do_curse()
202                         Attempt to free all objects pointed to by RVs,
203                         try to do the same for all objects indir-
204                         ectly referenced by typeglobs too, and
205                         then do a final sweep, cursing any
206                         objects that remain.  Called once from
207                         perl_destruct(), prior to calling sv_clean_all()
208                         below.
209
210     sv_clean_all() / do_clean_all()
211                         SvREFCNT_dec(sv) each remaining SV, possibly
212                         triggering an sv_free(). It also sets the
213                         SVf_BREAK flag on the SV to indicate that the
214                         refcnt has been artificially lowered, and thus
215                         stopping sv_free() from giving spurious warnings
216                         about SVs which unexpectedly have a refcnt
217                         of zero.  called repeatedly from perl_destruct()
218                         until there are no SVs left.
219
220 =head2 Arena allocator API Summary
221
222 Private API to rest of sv.c
223
224     new_SV(),  del_SV(),
225
226     new_XPVNV(), del_XPVGV(),
227     etc
228
229 Public API:
230
231     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
232
233 =cut
234
235  * ========================================================================= */
236
237 /*
238  * "A time to plant, and a time to uproot what was planted..."
239  */
240
241 #ifdef PERL_MEM_LOG
242 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
243             Perl_mem_log_new_sv(sv, file, line, func)
244 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
245             Perl_mem_log_del_sv(sv, file, line, func)
246 #else
247 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
248 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
249 #endif
250
251 #ifdef DEBUG_LEAKING_SCALARS
252 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
253         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
254     } STMT_END
255 #  define DEBUG_SV_SERIAL(sv)                                               \
256     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
257             PTR2UV(sv), (long)(sv)->sv_debug_serial))
258 #else
259 #  define FREE_SV_DEBUG_FILE(sv)
260 #  define DEBUG_SV_SERIAL(sv)   NOOP
261 #endif
262
263 #ifdef PERL_POISON
264 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
265 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
266 /* Whilst I'd love to do this, it seems that things like to check on
267    unreferenced scalars
268 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
269 */
270 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
271                                 PoisonNew(&SvREFCNT(sv), 1, U32)
272 #else
273 #  define SvARENA_CHAIN(sv)     SvANY(sv)
274 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
275 #  define POSION_SV_HEAD(sv)
276 #endif
277
278 /* Mark an SV head as unused, and add to free list.
279  *
280  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
281  * its refcount artificially decremented during global destruction, so
282  * there may be dangling pointers to it. The last thing we want in that
283  * case is for it to be reused. */
284
285 #define plant_SV(p) \
286     STMT_START {                                        \
287         const U32 old_flags = SvFLAGS(p);                       \
288         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
289         DEBUG_SV_SERIAL(p);                             \
290         FREE_SV_DEBUG_FILE(p);                          \
291         POSION_SV_HEAD(p);                              \
292         SvFLAGS(p) = SVTYPEMASK;                        \
293         if (!(old_flags & SVf_BREAK)) {         \
294             SvARENA_CHAIN_SET(p, PL_sv_root);   \
295             PL_sv_root = (p);                           \
296         }                                               \
297         --PL_sv_count;                                  \
298     } STMT_END
299
300 #define uproot_SV(p) \
301     STMT_START {                                        \
302         (p) = PL_sv_root;                               \
303         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
304         ++PL_sv_count;                                  \
305     } STMT_END
306
307
308 /* make some more SVs by adding another arena */
309
310 STATIC SV*
311 S_more_sv(pTHX)
312 {
313     SV* sv;
314     char *chunk;                /* must use New here to match call to */
315     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
316     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
317     uproot_SV(sv);
318     return sv;
319 }
320
321 /* new_SV(): return a new, empty SV head */
322
323 #ifdef DEBUG_LEAKING_SCALARS
324 /* provide a real function for a debugger to play with */
325 STATIC SV*
326 S_new_SV(pTHX_ const char *file, int line, const char *func)
327 {
328     SV* sv;
329
330     if (PL_sv_root)
331         uproot_SV(sv);
332     else
333         sv = S_more_sv(aTHX);
334     SvANY(sv) = 0;
335     SvREFCNT(sv) = 1;
336     SvFLAGS(sv) = 0;
337     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
338     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
339                 ? PL_parser->copline
340                 :  PL_curcop
341                     ? CopLINE(PL_curcop)
342                     : 0
343             );
344     sv->sv_debug_inpad = 0;
345     sv->sv_debug_parent = NULL;
346     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
347
348     sv->sv_debug_serial = PL_sv_serial++;
349
350     MEM_LOG_NEW_SV(sv, file, line, func);
351     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
352             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
353
354     return sv;
355 }
356 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
357
358 #else
359 #  define new_SV(p) \
360     STMT_START {                                        \
361         if (PL_sv_root)                                 \
362             uproot_SV(p);                               \
363         else                                            \
364             (p) = S_more_sv(aTHX);                      \
365         SvANY(p) = 0;                                   \
366         SvREFCNT(p) = 1;                                \
367         SvFLAGS(p) = 0;                                 \
368         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
369     } STMT_END
370 #endif
371
372
373 /* del_SV(): return an empty SV head to the free list */
374
375 #ifdef DEBUGGING
376
377 #define del_SV(p) \
378     STMT_START {                                        \
379         if (DEBUG_D_TEST)                               \
380             del_sv(p);                                  \
381         else                                            \
382             plant_SV(p);                                \
383     } STMT_END
384
385 STATIC void
386 S_del_sv(pTHX_ SV *p)
387 {
388     dVAR;
389
390     PERL_ARGS_ASSERT_DEL_SV;
391
392     if (DEBUG_D_TEST) {
393         SV* sva;
394         bool ok = 0;
395         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
396             const SV * const sv = sva + 1;
397             const SV * const svend = &sva[SvREFCNT(sva)];
398             if (p >= sv && p < svend) {
399                 ok = 1;
400                 break;
401             }
402         }
403         if (!ok) {
404             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
405                              "Attempt to free non-arena SV: 0x%"UVxf
406                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
407             return;
408         }
409     }
410     plant_SV(p);
411 }
412
413 #else /* ! DEBUGGING */
414
415 #define del_SV(p)   plant_SV(p)
416
417 #endif /* DEBUGGING */
418
419
420 /*
421 =head1 SV Manipulation Functions
422
423 =for apidoc sv_add_arena
424
425 Given a chunk of memory, link it to the head of the list of arenas,
426 and split it into a list of free SVs.
427
428 =cut
429 */
430
431 static void
432 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
433 {
434     SV *const sva = MUTABLE_SV(ptr);
435     SV* sv;
436     SV* svend;
437
438     PERL_ARGS_ASSERT_SV_ADD_ARENA;
439
440     /* The first SV in an arena isn't an SV. */
441     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
442     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
443     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
444
445     PL_sv_arenaroot = sva;
446     PL_sv_root = sva + 1;
447
448     svend = &sva[SvREFCNT(sva) - 1];
449     sv = sva + 1;
450     while (sv < svend) {
451         SvARENA_CHAIN_SET(sv, (sv + 1));
452 #ifdef DEBUGGING
453         SvREFCNT(sv) = 0;
454 #endif
455         /* Must always set typemask because it's always checked in on cleanup
456            when the arenas are walked looking for objects.  */
457         SvFLAGS(sv) = SVTYPEMASK;
458         sv++;
459     }
460     SvARENA_CHAIN_SET(sv, 0);
461 #ifdef DEBUGGING
462     SvREFCNT(sv) = 0;
463 #endif
464     SvFLAGS(sv) = SVTYPEMASK;
465 }
466
467 /* visit(): call the named function for each non-free SV in the arenas
468  * whose flags field matches the flags/mask args. */
469
470 STATIC I32
471 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
472 {
473     SV* sva;
474     I32 visited = 0;
475
476     PERL_ARGS_ASSERT_VISIT;
477
478     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
479         const SV * const svend = &sva[SvREFCNT(sva)];
480         SV* sv;
481         for (sv = sva + 1; sv < svend; ++sv) {
482             if (SvTYPE(sv) != (svtype)SVTYPEMASK
483                     && (sv->sv_flags & mask) == flags
484                     && SvREFCNT(sv))
485             {
486                 (*f)(aTHX_ sv);
487                 ++visited;
488             }
489         }
490     }
491     return visited;
492 }
493
494 #ifdef DEBUGGING
495
496 /* called by sv_report_used() for each live SV */
497
498 static void
499 do_report_used(pTHX_ SV *const sv)
500 {
501     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
502         PerlIO_printf(Perl_debug_log, "****\n");
503         sv_dump(sv);
504     }
505 }
506 #endif
507
508 /*
509 =for apidoc sv_report_used
510
511 Dump the contents of all SVs not yet freed (debugging aid).
512
513 =cut
514 */
515
516 void
517 Perl_sv_report_used(pTHX)
518 {
519 #ifdef DEBUGGING
520     visit(do_report_used, 0, 0);
521 #else
522     PERL_UNUSED_CONTEXT;
523 #endif
524 }
525
526 /* called by sv_clean_objs() for each live SV */
527
528 static void
529 do_clean_objs(pTHX_ SV *const ref)
530 {
531     assert (SvROK(ref));
532     {
533         SV * const target = SvRV(ref);
534         if (SvOBJECT(target)) {
535             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
536             if (SvWEAKREF(ref)) {
537                 sv_del_backref(target, ref);
538                 SvWEAKREF_off(ref);
539                 SvRV_set(ref, NULL);
540             } else {
541                 SvROK_off(ref);
542                 SvRV_set(ref, NULL);
543                 SvREFCNT_dec_NN(target);
544             }
545         }
546     }
547 }
548
549
550 /* clear any slots in a GV which hold objects - except IO;
551  * called by sv_clean_objs() for each live GV */
552
553 static void
554 do_clean_named_objs(pTHX_ SV *const sv)
555 {
556     SV *obj;
557     assert(SvTYPE(sv) == SVt_PVGV);
558     assert(isGV_with_GP(sv));
559     if (!GvGP(sv))
560         return;
561
562     /* freeing GP entries may indirectly free the current GV;
563      * hold onto it while we mess with the GP slots */
564     SvREFCNT_inc(sv);
565
566     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
567         DEBUG_D((PerlIO_printf(Perl_debug_log,
568                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
569         GvSV(sv) = NULL;
570         SvREFCNT_dec_NN(obj);
571     }
572     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
573         DEBUG_D((PerlIO_printf(Perl_debug_log,
574                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
575         GvAV(sv) = NULL;
576         SvREFCNT_dec_NN(obj);
577     }
578     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
579         DEBUG_D((PerlIO_printf(Perl_debug_log,
580                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
581         GvHV(sv) = NULL;
582         SvREFCNT_dec_NN(obj);
583     }
584     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
585         DEBUG_D((PerlIO_printf(Perl_debug_log,
586                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
587         GvCV_set(sv, NULL);
588         SvREFCNT_dec_NN(obj);
589     }
590     SvREFCNT_dec_NN(sv); /* undo the inc above */
591 }
592
593 /* clear any IO slots in a GV which hold objects (except stderr, defout);
594  * called by sv_clean_objs() for each live GV */
595
596 static void
597 do_clean_named_io_objs(pTHX_ SV *const sv)
598 {
599     SV *obj;
600     assert(SvTYPE(sv) == SVt_PVGV);
601     assert(isGV_with_GP(sv));
602     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
603         return;
604
605     SvREFCNT_inc(sv);
606     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
607         DEBUG_D((PerlIO_printf(Perl_debug_log,
608                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
609         GvIOp(sv) = NULL;
610         SvREFCNT_dec_NN(obj);
611     }
612     SvREFCNT_dec_NN(sv); /* undo the inc above */
613 }
614
615 /* Void wrapper to pass to visit() */
616 static void
617 do_curse(pTHX_ SV * const sv) {
618     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
619      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
620         return;
621     (void)curse(sv, 0);
622 }
623
624 /*
625 =for apidoc sv_clean_objs
626
627 Attempt to destroy all objects not yet freed.
628
629 =cut
630 */
631
632 void
633 Perl_sv_clean_objs(pTHX)
634 {
635     GV *olddef, *olderr;
636     PL_in_clean_objs = TRUE;
637     visit(do_clean_objs, SVf_ROK, SVf_ROK);
638     /* Some barnacles may yet remain, clinging to typeglobs.
639      * Run the non-IO destructors first: they may want to output
640      * error messages, close files etc */
641     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
642     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
643     /* And if there are some very tenacious barnacles clinging to arrays,
644        closures, or what have you.... */
645     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
646     olddef = PL_defoutgv;
647     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
648     if (olddef && isGV_with_GP(olddef))
649         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
650     olderr = PL_stderrgv;
651     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
652     if (olderr && isGV_with_GP(olderr))
653         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
654     SvREFCNT_dec(olddef);
655     PL_in_clean_objs = FALSE;
656 }
657
658 /* called by sv_clean_all() for each live SV */
659
660 static void
661 do_clean_all(pTHX_ SV *const sv)
662 {
663     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
664         /* don't clean pid table and strtab */
665         return;
666     }
667     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
668     SvFLAGS(sv) |= SVf_BREAK;
669     SvREFCNT_dec_NN(sv);
670 }
671
672 /*
673 =for apidoc sv_clean_all
674
675 Decrement the refcnt of each remaining SV, possibly triggering a
676 cleanup.  This function may have to be called multiple times to free
677 SVs which are in complex self-referential hierarchies.
678
679 =cut
680 */
681
682 I32
683 Perl_sv_clean_all(pTHX)
684 {
685     I32 cleaned;
686     PL_in_clean_all = TRUE;
687     cleaned = visit(do_clean_all, 0,0);
688     return cleaned;
689 }
690
691 /*
692   ARENASETS: a meta-arena implementation which separates arena-info
693   into struct arena_set, which contains an array of struct
694   arena_descs, each holding info for a single arena.  By separating
695   the meta-info from the arena, we recover the 1st slot, formerly
696   borrowed for list management.  The arena_set is about the size of an
697   arena, avoiding the needless malloc overhead of a naive linked-list.
698
699   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
700   memory in the last arena-set (1/2 on average).  In trade, we get
701   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
702   smaller types).  The recovery of the wasted space allows use of
703   small arenas for large, rare body types, by changing array* fields
704   in body_details_by_type[] below.
705 */
706 struct arena_desc {
707     char       *arena;          /* the raw storage, allocated aligned */
708     size_t      size;           /* its size ~4k typ */
709     svtype      utype;          /* bodytype stored in arena */
710 };
711
712 struct arena_set;
713
714 /* Get the maximum number of elements in set[] such that struct arena_set
715    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
716    therefore likely to be 1 aligned memory page.  */
717
718 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
719                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
720
721 struct arena_set {
722     struct arena_set* next;
723     unsigned int   set_size;    /* ie ARENAS_PER_SET */
724     unsigned int   curr;        /* index of next available arena-desc */
725     struct arena_desc set[ARENAS_PER_SET];
726 };
727
728 /*
729 =for apidoc sv_free_arenas
730
731 Deallocate the memory used by all arenas.  Note that all the individual SV
732 heads and bodies within the arenas must already have been freed.
733
734 =cut
735
736 */
737 void
738 Perl_sv_free_arenas(pTHX)
739 {
740     SV* sva;
741     SV* svanext;
742     unsigned int i;
743
744     /* Free arenas here, but be careful about fake ones.  (We assume
745        contiguity of the fake ones with the corresponding real ones.) */
746
747     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
748         svanext = MUTABLE_SV(SvANY(sva));
749         while (svanext && SvFAKE(svanext))
750             svanext = MUTABLE_SV(SvANY(svanext));
751
752         if (!SvFAKE(sva))
753             Safefree(sva);
754     }
755
756     {
757         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
758
759         while (aroot) {
760             struct arena_set *current = aroot;
761             i = aroot->curr;
762             while (i--) {
763                 assert(aroot->set[i].arena);
764                 Safefree(aroot->set[i].arena);
765             }
766             aroot = aroot->next;
767             Safefree(current);
768         }
769     }
770     PL_body_arenas = 0;
771
772     i = PERL_ARENA_ROOTS_SIZE;
773     while (i--)
774         PL_body_roots[i] = 0;
775
776     PL_sv_arenaroot = 0;
777     PL_sv_root = 0;
778 }
779
780 /*
781   Here are mid-level routines that manage the allocation of bodies out
782   of the various arenas.  There are 5 kinds of arenas:
783
784   1. SV-head arenas, which are discussed and handled above
785   2. regular body arenas
786   3. arenas for reduced-size bodies
787   4. Hash-Entry arenas
788
789   Arena types 2 & 3 are chained by body-type off an array of
790   arena-root pointers, which is indexed by svtype.  Some of the
791   larger/less used body types are malloced singly, since a large
792   unused block of them is wasteful.  Also, several svtypes dont have
793   bodies; the data fits into the sv-head itself.  The arena-root
794   pointer thus has a few unused root-pointers (which may be hijacked
795   later for arena types 4,5)
796
797   3 differs from 2 as an optimization; some body types have several
798   unused fields in the front of the structure (which are kept in-place
799   for consistency).  These bodies can be allocated in smaller chunks,
800   because the leading fields arent accessed.  Pointers to such bodies
801   are decremented to point at the unused 'ghost' memory, knowing that
802   the pointers are used with offsets to the real memory.
803
804
805 =head1 SV-Body Allocation
806
807 =cut
808
809 Allocation of SV-bodies is similar to SV-heads, differing as follows;
810 the allocation mechanism is used for many body types, so is somewhat
811 more complicated, it uses arena-sets, and has no need for still-live
812 SV detection.
813
814 At the outermost level, (new|del)_X*V macros return bodies of the
815 appropriate type.  These macros call either (new|del)_body_type or
816 (new|del)_body_allocated macro pairs, depending on specifics of the
817 type.  Most body types use the former pair, the latter pair is used to
818 allocate body types with "ghost fields".
819
820 "ghost fields" are fields that are unused in certain types, and
821 consequently don't need to actually exist.  They are declared because
822 they're part of a "base type", which allows use of functions as
823 methods.  The simplest examples are AVs and HVs, 2 aggregate types
824 which don't use the fields which support SCALAR semantics.
825
826 For these types, the arenas are carved up into appropriately sized
827 chunks, we thus avoid wasted memory for those unaccessed members.
828 When bodies are allocated, we adjust the pointer back in memory by the
829 size of the part not allocated, so it's as if we allocated the full
830 structure.  (But things will all go boom if you write to the part that
831 is "not there", because you'll be overwriting the last members of the
832 preceding structure in memory.)
833
834 We calculate the correction using the STRUCT_OFFSET macro on the first
835 member present.  If the allocated structure is smaller (no initial NV
836 actually allocated) then the net effect is to subtract the size of the NV
837 from the pointer, to return a new pointer as if an initial NV were actually
838 allocated.  (We were using structures named *_allocated for this, but
839 this turned out to be a subtle bug, because a structure without an NV
840 could have a lower alignment constraint, but the compiler is allowed to
841 optimised accesses based on the alignment constraint of the actual pointer
842 to the full structure, for example, using a single 64 bit load instruction
843 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
844
845 This is the same trick as was used for NV and IV bodies.  Ironically it
846 doesn't need to be used for NV bodies any more, because NV is now at
847 the start of the structure.  IV bodies don't need it either, because
848 they are no longer allocated.
849
850 In turn, the new_body_* allocators call S_new_body(), which invokes
851 new_body_inline macro, which takes a lock, and takes a body off the
852 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
853 necessary to refresh an empty list.  Then the lock is released, and
854 the body is returned.
855
856 Perl_more_bodies allocates a new arena, and carves it up into an array of N
857 bodies, which it strings into a linked list.  It looks up arena-size
858 and body-size from the body_details table described below, thus
859 supporting the multiple body-types.
860
861 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
862 the (new|del)_X*V macros are mapped directly to malloc/free.
863
864 For each sv-type, struct body_details bodies_by_type[] carries
865 parameters which control these aspects of SV handling:
866
867 Arena_size determines whether arenas are used for this body type, and if
868 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
869 zero, forcing individual mallocs and frees.
870
871 Body_size determines how big a body is, and therefore how many fit into
872 each arena.  Offset carries the body-pointer adjustment needed for
873 "ghost fields", and is used in *_allocated macros.
874
875 But its main purpose is to parameterize info needed in
876 Perl_sv_upgrade().  The info here dramatically simplifies the function
877 vs the implementation in 5.8.8, making it table-driven.  All fields
878 are used for this, except for arena_size.
879
880 For the sv-types that have no bodies, arenas are not used, so those
881 PL_body_roots[sv_type] are unused, and can be overloaded.  In
882 something of a special case, SVt_NULL is borrowed for HE arenas;
883 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
884 bodies_by_type[SVt_NULL] slot is not used, as the table is not
885 available in hv.c.
886
887 */
888
889 struct body_details {
890     U8 body_size;       /* Size to allocate  */
891     U8 copy;            /* Size of structure to copy (may be shorter)  */
892     U8 offset;
893     unsigned int type : 4;          /* We have space for a sanity check.  */
894     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
895     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
896     unsigned int arena : 1;         /* Allocated from an arena */
897     size_t arena_size;              /* Size of arena to allocate */
898 };
899
900 #define HADNV FALSE
901 #define NONV TRUE
902
903
904 #ifdef PURIFY
905 /* With -DPURFIY we allocate everything directly, and don't use arenas.
906    This seems a rather elegant way to simplify some of the code below.  */
907 #define HASARENA FALSE
908 #else
909 #define HASARENA TRUE
910 #endif
911 #define NOARENA FALSE
912
913 /* Size the arenas to exactly fit a given number of bodies.  A count
914    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
915    simplifying the default.  If count > 0, the arena is sized to fit
916    only that many bodies, allowing arenas to be used for large, rare
917    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
918    limited by PERL_ARENA_SIZE, so we can safely oversize the
919    declarations.
920  */
921 #define FIT_ARENA0(body_size)                           \
922     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
923 #define FIT_ARENAn(count,body_size)                     \
924     ( count * body_size <= PERL_ARENA_SIZE)             \
925     ? count * body_size                                 \
926     : FIT_ARENA0 (body_size)
927 #define FIT_ARENA(count,body_size)                      \
928     count                                               \
929     ? FIT_ARENAn (count, body_size)                     \
930     : FIT_ARENA0 (body_size)
931
932 /* Calculate the length to copy. Specifically work out the length less any
933    final padding the compiler needed to add.  See the comment in sv_upgrade
934    for why copying the padding proved to be a bug.  */
935
936 #define copy_length(type, last_member) \
937         STRUCT_OFFSET(type, last_member) \
938         + sizeof (((type*)SvANY((const SV *)0))->last_member)
939
940 static const struct body_details bodies_by_type[] = {
941     /* HEs use this offset for their arena.  */
942     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
943
944     /* IVs are in the head, so the allocation size is 0.  */
945     { 0,
946       sizeof(IV), /* This is used to copy out the IV body.  */
947       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
948       NOARENA /* IVS don't need an arena  */, 0
949     },
950
951     { sizeof(NV), sizeof(NV),
952       STRUCT_OFFSET(XPVNV, xnv_u),
953       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
954
955     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
956       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
957       + STRUCT_OFFSET(XPV, xpv_cur),
958       SVt_PV, FALSE, NONV, HASARENA,
959       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
960
961     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
962       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
963       + STRUCT_OFFSET(XPV, xpv_cur),
964       SVt_INVLIST, TRUE, NONV, HASARENA,
965       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
966
967     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
968       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
969       + STRUCT_OFFSET(XPV, xpv_cur),
970       SVt_PVIV, FALSE, NONV, HASARENA,
971       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
972
973     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
974       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
975       + STRUCT_OFFSET(XPV, xpv_cur),
976       SVt_PVNV, FALSE, HADNV, HASARENA,
977       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
978
979     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
980       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
981
982     { sizeof(regexp),
983       sizeof(regexp),
984       0,
985       SVt_REGEXP, TRUE, NONV, HASARENA,
986       FIT_ARENA(0, sizeof(regexp))
987     },
988
989     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
990       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
991     
992     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
993       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
994
995     { sizeof(XPVAV),
996       copy_length(XPVAV, xav_alloc),
997       0,
998       SVt_PVAV, TRUE, NONV, HASARENA,
999       FIT_ARENA(0, sizeof(XPVAV)) },
1000
1001     { sizeof(XPVHV),
1002       copy_length(XPVHV, xhv_max),
1003       0,
1004       SVt_PVHV, TRUE, NONV, HASARENA,
1005       FIT_ARENA(0, sizeof(XPVHV)) },
1006
1007     { sizeof(XPVCV),
1008       sizeof(XPVCV),
1009       0,
1010       SVt_PVCV, TRUE, NONV, HASARENA,
1011       FIT_ARENA(0, sizeof(XPVCV)) },
1012
1013     { sizeof(XPVFM),
1014       sizeof(XPVFM),
1015       0,
1016       SVt_PVFM, TRUE, NONV, NOARENA,
1017       FIT_ARENA(20, sizeof(XPVFM)) },
1018
1019     { sizeof(XPVIO),
1020       sizeof(XPVIO),
1021       0,
1022       SVt_PVIO, TRUE, NONV, HASARENA,
1023       FIT_ARENA(24, sizeof(XPVIO)) },
1024 };
1025
1026 #define new_body_allocated(sv_type)             \
1027     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1028              - bodies_by_type[sv_type].offset)
1029
1030 /* return a thing to the free list */
1031
1032 #define del_body(thing, root)                           \
1033     STMT_START {                                        \
1034         void ** const thing_copy = (void **)thing;      \
1035         *thing_copy = *root;                            \
1036         *root = (void*)thing_copy;                      \
1037     } STMT_END
1038
1039 #ifdef PURIFY
1040
1041 #define new_XNV()       safemalloc(sizeof(XPVNV))
1042 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1043 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1044
1045 #define del_XPVGV(p)    safefree(p)
1046
1047 #else /* !PURIFY */
1048
1049 #define new_XNV()       new_body_allocated(SVt_NV)
1050 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1051 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1052
1053 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1054                                  &PL_body_roots[SVt_PVGV])
1055
1056 #endif /* PURIFY */
1057
1058 /* no arena for you! */
1059
1060 #define new_NOARENA(details) \
1061         safemalloc((details)->body_size + (details)->offset)
1062 #define new_NOARENAZ(details) \
1063         safecalloc((details)->body_size + (details)->offset, 1)
1064
1065 void *
1066 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1067                   const size_t arena_size)
1068 {
1069     void ** const root = &PL_body_roots[sv_type];
1070     struct arena_desc *adesc;
1071     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1072     unsigned int curr;
1073     char *start;
1074     const char *end;
1075     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1076 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1077     dVAR;
1078 #endif
1079 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1080     static bool done_sanity_check;
1081
1082     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1083      * variables like done_sanity_check. */
1084     if (!done_sanity_check) {
1085         unsigned int i = SVt_LAST;
1086
1087         done_sanity_check = TRUE;
1088
1089         while (i--)
1090             assert (bodies_by_type[i].type == i);
1091     }
1092 #endif
1093
1094     assert(arena_size);
1095
1096     /* may need new arena-set to hold new arena */
1097     if (!aroot || aroot->curr >= aroot->set_size) {
1098         struct arena_set *newroot;
1099         Newxz(newroot, 1, struct arena_set);
1100         newroot->set_size = ARENAS_PER_SET;
1101         newroot->next = aroot;
1102         aroot = newroot;
1103         PL_body_arenas = (void *) newroot;
1104         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1105     }
1106
1107     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1108     curr = aroot->curr++;
1109     adesc = &(aroot->set[curr]);
1110     assert(!adesc->arena);
1111     
1112     Newx(adesc->arena, good_arena_size, char);
1113     adesc->size = good_arena_size;
1114     adesc->utype = sv_type;
1115     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1116                           curr, (void*)adesc->arena, (UV)good_arena_size));
1117
1118     start = (char *) adesc->arena;
1119
1120     /* Get the address of the byte after the end of the last body we can fit.
1121        Remember, this is integer division:  */
1122     end = start + good_arena_size / body_size * body_size;
1123
1124     /* computed count doesn't reflect the 1st slot reservation */
1125 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1126     DEBUG_m(PerlIO_printf(Perl_debug_log,
1127                           "arena %p end %p arena-size %d (from %d) type %d "
1128                           "size %d ct %d\n",
1129                           (void*)start, (void*)end, (int)good_arena_size,
1130                           (int)arena_size, sv_type, (int)body_size,
1131                           (int)good_arena_size / (int)body_size));
1132 #else
1133     DEBUG_m(PerlIO_printf(Perl_debug_log,
1134                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1135                           (void*)start, (void*)end,
1136                           (int)arena_size, sv_type, (int)body_size,
1137                           (int)good_arena_size / (int)body_size));
1138 #endif
1139     *root = (void *)start;
1140
1141     while (1) {
1142         /* Where the next body would start:  */
1143         char * const next = start + body_size;
1144
1145         if (next >= end) {
1146             /* This is the last body:  */
1147             assert(next == end);
1148
1149             *(void **)start = 0;
1150             return *root;
1151         }
1152
1153         *(void**) start = (void *)next;
1154         start = next;
1155     }
1156 }
1157
1158 /* grab a new thing from the free list, allocating more if necessary.
1159    The inline version is used for speed in hot routines, and the
1160    function using it serves the rest (unless PURIFY).
1161 */
1162 #define new_body_inline(xpv, sv_type) \
1163     STMT_START { \
1164         void ** const r3wt = &PL_body_roots[sv_type]; \
1165         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1166           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1167                                              bodies_by_type[sv_type].body_size,\
1168                                              bodies_by_type[sv_type].arena_size)); \
1169         *(r3wt) = *(void**)(xpv); \
1170     } STMT_END
1171
1172 #ifndef PURIFY
1173
1174 STATIC void *
1175 S_new_body(pTHX_ const svtype sv_type)
1176 {
1177     void *xpv;
1178     new_body_inline(xpv, sv_type);
1179     return xpv;
1180 }
1181
1182 #endif
1183
1184 static const struct body_details fake_rv =
1185     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1186
1187 /*
1188 =for apidoc sv_upgrade
1189
1190 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1191 SV, then copies across as much information as possible from the old body.
1192 It croaks if the SV is already in a more complex form than requested.  You
1193 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1194 before calling C<sv_upgrade>, and hence does not croak.  See also
1195 C<svtype>.
1196
1197 =cut
1198 */
1199
1200 void
1201 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1202 {
1203     void*       old_body;
1204     void*       new_body;
1205     const svtype old_type = SvTYPE(sv);
1206     const struct body_details *new_type_details;
1207     const struct body_details *old_type_details
1208         = bodies_by_type + old_type;
1209     SV *referant = NULL;
1210
1211     PERL_ARGS_ASSERT_SV_UPGRADE;
1212
1213     if (old_type == new_type)
1214         return;
1215
1216     /* This clause was purposefully added ahead of the early return above to
1217        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1218        inference by Nick I-S that it would fix other troublesome cases. See
1219        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1220
1221        Given that shared hash key scalars are no longer PVIV, but PV, there is
1222        no longer need to unshare so as to free up the IVX slot for its proper
1223        purpose. So it's safe to move the early return earlier.  */
1224
1225     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1226         sv_force_normal_flags(sv, 0);
1227     }
1228
1229     old_body = SvANY(sv);
1230
1231     /* Copying structures onto other structures that have been neatly zeroed
1232        has a subtle gotcha. Consider XPVMG
1233
1234        +------+------+------+------+------+-------+-------+
1235        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1236        +------+------+------+------+------+-------+-------+
1237        0      4      8     12     16     20      24      28
1238
1239        where NVs are aligned to 8 bytes, so that sizeof that structure is
1240        actually 32 bytes long, with 4 bytes of padding at the end:
1241
1242        +------+------+------+------+------+-------+-------+------+
1243        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1244        +------+------+------+------+------+-------+-------+------+
1245        0      4      8     12     16     20      24      28     32
1246
1247        so what happens if you allocate memory for this structure:
1248
1249        +------+------+------+------+------+-------+-------+------+------+...
1250        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1251        +------+------+------+------+------+-------+-------+------+------+...
1252        0      4      8     12     16     20      24      28     32     36
1253
1254        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1255        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1256        started out as zero once, but it's quite possible that it isn't. So now,
1257        rather than a nicely zeroed GP, you have it pointing somewhere random.
1258        Bugs ensue.
1259
1260        (In fact, GP ends up pointing at a previous GP structure, because the
1261        principle cause of the padding in XPVMG getting garbage is a copy of
1262        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1263        this happens to be moot because XPVGV has been re-ordered, with GP
1264        no longer after STASH)
1265
1266        So we are careful and work out the size of used parts of all the
1267        structures.  */
1268
1269     switch (old_type) {
1270     case SVt_NULL:
1271         break;
1272     case SVt_IV:
1273         if (SvROK(sv)) {
1274             referant = SvRV(sv);
1275             old_type_details = &fake_rv;
1276             if (new_type == SVt_NV)
1277                 new_type = SVt_PVNV;
1278         } else {
1279             if (new_type < SVt_PVIV) {
1280                 new_type = (new_type == SVt_NV)
1281                     ? SVt_PVNV : SVt_PVIV;
1282             }
1283         }
1284         break;
1285     case SVt_NV:
1286         if (new_type < SVt_PVNV) {
1287             new_type = SVt_PVNV;
1288         }
1289         break;
1290     case SVt_PV:
1291         assert(new_type > SVt_PV);
1292         assert(SVt_IV < SVt_PV);
1293         assert(SVt_NV < SVt_PV);
1294         break;
1295     case SVt_PVIV:
1296         break;
1297     case SVt_PVNV:
1298         break;
1299     case SVt_PVMG:
1300         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1301            there's no way that it can be safely upgraded, because perl.c
1302            expects to Safefree(SvANY(PL_mess_sv))  */
1303         assert(sv != PL_mess_sv);
1304         /* This flag bit is used to mean other things in other scalar types.
1305            Given that it only has meaning inside the pad, it shouldn't be set
1306            on anything that can get upgraded.  */
1307         assert(!SvPAD_TYPED(sv));
1308         break;
1309     default:
1310         if (UNLIKELY(old_type_details->cant_upgrade))
1311             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1312                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1313     }
1314
1315     if (UNLIKELY(old_type > new_type))
1316         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1317                 (int)old_type, (int)new_type);
1318
1319     new_type_details = bodies_by_type + new_type;
1320
1321     SvFLAGS(sv) &= ~SVTYPEMASK;
1322     SvFLAGS(sv) |= new_type;
1323
1324     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1325        the return statements above will have triggered.  */
1326     assert (new_type != SVt_NULL);
1327     switch (new_type) {
1328     case SVt_IV:
1329         assert(old_type == SVt_NULL);
1330         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1331         SvIV_set(sv, 0);
1332         return;
1333     case SVt_NV:
1334         assert(old_type == SVt_NULL);
1335         SvANY(sv) = new_XNV();
1336         SvNV_set(sv, 0);
1337         return;
1338     case SVt_PVHV:
1339     case SVt_PVAV:
1340         assert(new_type_details->body_size);
1341
1342 #ifndef PURIFY  
1343         assert(new_type_details->arena);
1344         assert(new_type_details->arena_size);
1345         /* This points to the start of the allocated area.  */
1346         new_body_inline(new_body, new_type);
1347         Zero(new_body, new_type_details->body_size, char);
1348         new_body = ((char *)new_body) - new_type_details->offset;
1349 #else
1350         /* We always allocated the full length item with PURIFY. To do this
1351            we fake things so that arena is false for all 16 types..  */
1352         new_body = new_NOARENAZ(new_type_details);
1353 #endif
1354         SvANY(sv) = new_body;
1355         if (new_type == SVt_PVAV) {
1356             AvMAX(sv)   = -1;
1357             AvFILLp(sv) = -1;
1358             AvREAL_only(sv);
1359             if (old_type_details->body_size) {
1360                 AvALLOC(sv) = 0;
1361             } else {
1362                 /* It will have been zeroed when the new body was allocated.
1363                    Lets not write to it, in case it confuses a write-back
1364                    cache.  */
1365             }
1366         } else {
1367             assert(!SvOK(sv));
1368             SvOK_off(sv);
1369 #ifndef NODEFAULT_SHAREKEYS
1370             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1371 #endif
1372             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1373             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1374         }
1375
1376         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1377            The target created by newSVrv also is, and it can have magic.
1378            However, it never has SvPVX set.
1379         */
1380         if (old_type == SVt_IV) {
1381             assert(!SvROK(sv));
1382         } else if (old_type >= SVt_PV) {
1383             assert(SvPVX_const(sv) == 0);
1384         }
1385
1386         if (old_type >= SVt_PVMG) {
1387             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1388             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1389         } else {
1390             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1391         }
1392         break;
1393
1394     case SVt_PVIV:
1395         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1396            no route from NV to PVIV, NOK can never be true  */
1397         assert(!SvNOKp(sv));
1398         assert(!SvNOK(sv));
1399     case SVt_PVIO:
1400     case SVt_PVFM:
1401     case SVt_PVGV:
1402     case SVt_PVCV:
1403     case SVt_PVLV:
1404     case SVt_INVLIST:
1405     case SVt_REGEXP:
1406     case SVt_PVMG:
1407     case SVt_PVNV:
1408     case SVt_PV:
1409
1410         assert(new_type_details->body_size);
1411         /* We always allocated the full length item with PURIFY. To do this
1412            we fake things so that arena is false for all 16 types..  */
1413         if(new_type_details->arena) {
1414             /* This points to the start of the allocated area.  */
1415             new_body_inline(new_body, new_type);
1416             Zero(new_body, new_type_details->body_size, char);
1417             new_body = ((char *)new_body) - new_type_details->offset;
1418         } else {
1419             new_body = new_NOARENAZ(new_type_details);
1420         }
1421         SvANY(sv) = new_body;
1422
1423         if (old_type_details->copy) {
1424             /* There is now the potential for an upgrade from something without
1425                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1426             int offset = old_type_details->offset;
1427             int length = old_type_details->copy;
1428
1429             if (new_type_details->offset > old_type_details->offset) {
1430                 const int difference
1431                     = new_type_details->offset - old_type_details->offset;
1432                 offset += difference;
1433                 length -= difference;
1434             }
1435             assert (length >= 0);
1436                 
1437             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438                  char);
1439         }
1440
1441 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1442         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1444          * NV slot, but the new one does, then we need to initialise the
1445          * freshly created NV slot with whatever the correct bit pattern is
1446          * for 0.0  */
1447         if (old_type_details->zero_nv && !new_type_details->zero_nv
1448             && !isGV_with_GP(sv))
1449             SvNV_set(sv, 0);
1450 #endif
1451
1452         if (UNLIKELY(new_type == SVt_PVIO)) {
1453             IO * const io = MUTABLE_IO(sv);
1454             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456             SvOBJECT_on(io);
1457             /* Clear the stashcache because a new IO could overrule a package
1458                name */
1459             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460             hv_clear(PL_stashcache);
1461
1462             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463             IoPAGE_LEN(sv) = 60;
1464         }
1465         if (UNLIKELY(new_type == SVt_REGEXP))
1466             sv->sv_u.svu_rx = (regexp *)new_body;
1467         else if (old_type < SVt_PV) {
1468             /* referant will be NULL unless the old type was SVt_IV emulating
1469                SVt_RV */
1470             sv->sv_u.svu_rv = referant;
1471         }
1472         break;
1473     default:
1474         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1475                    (unsigned long)new_type);
1476     }
1477
1478     if (old_type > SVt_IV) {
1479 #ifdef PURIFY
1480         safefree(old_body);
1481 #else
1482         /* Note that there is an assumption that all bodies of types that
1483            can be upgraded came from arenas. Only the more complex non-
1484            upgradable types are allowed to be directly malloc()ed.  */
1485         assert(old_type_details->arena);
1486         del_body((void*)((char*)old_body + old_type_details->offset),
1487                  &PL_body_roots[old_type]);
1488 #endif
1489     }
1490 }
1491
1492 /*
1493 =for apidoc sv_backoff
1494
1495 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1496 wrapper instead.
1497
1498 =cut
1499 */
1500
1501 int
1502 Perl_sv_backoff(SV *const sv)
1503 {
1504     STRLEN delta;
1505     const char * const s = SvPVX_const(sv);
1506
1507     PERL_ARGS_ASSERT_SV_BACKOFF;
1508
1509     assert(SvOOK(sv));
1510     assert(SvTYPE(sv) != SVt_PVHV);
1511     assert(SvTYPE(sv) != SVt_PVAV);
1512
1513     SvOOK_offset(sv, delta);
1514     
1515     SvLEN_set(sv, SvLEN(sv) + delta);
1516     SvPV_set(sv, SvPVX(sv) - delta);
1517     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1518     SvFLAGS(sv) &= ~SVf_OOK;
1519     return 0;
1520 }
1521
1522 /*
1523 =for apidoc sv_grow
1524
1525 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1526 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1527 Use the C<SvGROW> wrapper instead.
1528
1529 =cut
1530 */
1531
1532 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1533
1534 char *
1535 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1536 {
1537     char *s;
1538
1539     PERL_ARGS_ASSERT_SV_GROW;
1540
1541     if (SvROK(sv))
1542         sv_unref(sv);
1543     if (SvTYPE(sv) < SVt_PV) {
1544         sv_upgrade(sv, SVt_PV);
1545         s = SvPVX_mutable(sv);
1546     }
1547     else if (SvOOK(sv)) {       /* pv is offset? */
1548         sv_backoff(sv);
1549         s = SvPVX_mutable(sv);
1550         if (newlen > SvLEN(sv))
1551             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1552     }
1553     else
1554     {
1555         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1556         s = SvPVX_mutable(sv);
1557     }
1558
1559 #ifdef PERL_NEW_COPY_ON_WRITE
1560     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1561      * to store the COW count. So in general, allocate one more byte than
1562      * asked for, to make it likely this byte is always spare: and thus
1563      * make more strings COW-able.
1564      * If the new size is a big power of two, don't bother: we assume the
1565      * caller wanted a nice 2^N sized block and will be annoyed at getting
1566      * 2^N+1 */
1567     if (newlen & 0xff)
1568         newlen++;
1569 #endif
1570
1571 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1572 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1573 #endif
1574
1575     if (newlen > SvLEN(sv)) {           /* need more room? */
1576         STRLEN minlen = SvCUR(sv);
1577         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1578         if (newlen < minlen)
1579             newlen = minlen;
1580 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1581
1582         /* Don't round up on the first allocation, as odds are pretty good that
1583          * the initial request is accurate as to what is really needed */
1584         if (SvLEN(sv)) {
1585             newlen = PERL_STRLEN_ROUNDUP(newlen);
1586         }
1587 #endif
1588         if (SvLEN(sv) && s) {
1589             s = (char*)saferealloc(s, newlen);
1590         }
1591         else {
1592             s = (char*)safemalloc(newlen);
1593             if (SvPVX_const(sv) && SvCUR(sv)) {
1594                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1595             }
1596         }
1597         SvPV_set(sv, s);
1598 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1599         /* Do this here, do it once, do it right, and then we will never get
1600            called back into sv_grow() unless there really is some growing
1601            needed.  */
1602         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1603 #else
1604         SvLEN_set(sv, newlen);
1605 #endif
1606     }
1607     return s;
1608 }
1609
1610 /*
1611 =for apidoc sv_setiv
1612
1613 Copies an integer into the given SV, upgrading first if necessary.
1614 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1615
1616 =cut
1617 */
1618
1619 void
1620 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1621 {
1622     PERL_ARGS_ASSERT_SV_SETIV;
1623
1624     SV_CHECK_THINKFIRST_COW_DROP(sv);
1625     switch (SvTYPE(sv)) {
1626     case SVt_NULL:
1627     case SVt_NV:
1628         sv_upgrade(sv, SVt_IV);
1629         break;
1630     case SVt_PV:
1631         sv_upgrade(sv, SVt_PVIV);
1632         break;
1633
1634     case SVt_PVGV:
1635         if (!isGV_with_GP(sv))
1636             break;
1637     case SVt_PVAV:
1638     case SVt_PVHV:
1639     case SVt_PVCV:
1640     case SVt_PVFM:
1641     case SVt_PVIO:
1642         /* diag_listed_as: Can't coerce %s to %s in %s */
1643         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1644                    OP_DESC(PL_op));
1645     default: NOOP;
1646     }
1647     (void)SvIOK_only(sv);                       /* validate number */
1648     SvIV_set(sv, i);
1649     SvTAINT(sv);
1650 }
1651
1652 /*
1653 =for apidoc sv_setiv_mg
1654
1655 Like C<sv_setiv>, but also handles 'set' magic.
1656
1657 =cut
1658 */
1659
1660 void
1661 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1662 {
1663     PERL_ARGS_ASSERT_SV_SETIV_MG;
1664
1665     sv_setiv(sv,i);
1666     SvSETMAGIC(sv);
1667 }
1668
1669 /*
1670 =for apidoc sv_setuv
1671
1672 Copies an unsigned integer into the given SV, upgrading first if necessary.
1673 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1674
1675 =cut
1676 */
1677
1678 void
1679 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1680 {
1681     PERL_ARGS_ASSERT_SV_SETUV;
1682
1683     /* With the if statement to ensure that integers are stored as IVs whenever
1684        possible:
1685        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1686
1687        without
1688        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1689
1690        If you wish to remove the following if statement, so that this routine
1691        (and its callers) always return UVs, please benchmark to see what the
1692        effect is. Modern CPUs may be different. Or may not :-)
1693     */
1694     if (u <= (UV)IV_MAX) {
1695        sv_setiv(sv, (IV)u);
1696        return;
1697     }
1698     sv_setiv(sv, 0);
1699     SvIsUV_on(sv);
1700     SvUV_set(sv, u);
1701 }
1702
1703 /*
1704 =for apidoc sv_setuv_mg
1705
1706 Like C<sv_setuv>, but also handles 'set' magic.
1707
1708 =cut
1709 */
1710
1711 void
1712 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1713 {
1714     PERL_ARGS_ASSERT_SV_SETUV_MG;
1715
1716     sv_setuv(sv,u);
1717     SvSETMAGIC(sv);
1718 }
1719
1720 /*
1721 =for apidoc sv_setnv
1722
1723 Copies a double into the given SV, upgrading first if necessary.
1724 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1725
1726 =cut
1727 */
1728
1729 void
1730 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1731 {
1732     PERL_ARGS_ASSERT_SV_SETNV;
1733
1734     SV_CHECK_THINKFIRST_COW_DROP(sv);
1735     switch (SvTYPE(sv)) {
1736     case SVt_NULL:
1737     case SVt_IV:
1738         sv_upgrade(sv, SVt_NV);
1739         break;
1740     case SVt_PV:
1741     case SVt_PVIV:
1742         sv_upgrade(sv, SVt_PVNV);
1743         break;
1744
1745     case SVt_PVGV:
1746         if (!isGV_with_GP(sv))
1747             break;
1748     case SVt_PVAV:
1749     case SVt_PVHV:
1750     case SVt_PVCV:
1751     case SVt_PVFM:
1752     case SVt_PVIO:
1753         /* diag_listed_as: Can't coerce %s to %s in %s */
1754         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1755                    OP_DESC(PL_op));
1756     default: NOOP;
1757     }
1758     SvNV_set(sv, num);
1759     (void)SvNOK_only(sv);                       /* validate number */
1760     SvTAINT(sv);
1761 }
1762
1763 /*
1764 =for apidoc sv_setnv_mg
1765
1766 Like C<sv_setnv>, but also handles 'set' magic.
1767
1768 =cut
1769 */
1770
1771 void
1772 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1773 {
1774     PERL_ARGS_ASSERT_SV_SETNV_MG;
1775
1776     sv_setnv(sv,num);
1777     SvSETMAGIC(sv);
1778 }
1779
1780 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1781  * not incrementable warning display.
1782  * Originally part of S_not_a_number().
1783  * The return value may be != tmpbuf.
1784  */
1785
1786 STATIC const char *
1787 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1788     const char *pv;
1789
1790      PERL_ARGS_ASSERT_SV_DISPLAY;
1791
1792      if (DO_UTF8(sv)) {
1793           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1794           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1795      } else {
1796           char *d = tmpbuf;
1797           const char * const limit = tmpbuf + tmpbuf_size - 8;
1798           /* each *s can expand to 4 chars + "...\0",
1799              i.e. need room for 8 chars */
1800         
1801           const char *s = SvPVX_const(sv);
1802           const char * const end = s + SvCUR(sv);
1803           for ( ; s < end && d < limit; s++ ) {
1804                int ch = *s & 0xFF;
1805                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1806                     *d++ = 'M';
1807                     *d++ = '-';
1808
1809                     /* Map to ASCII "equivalent" of Latin1 */
1810                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1811                }
1812                if (ch == '\n') {
1813                     *d++ = '\\';
1814                     *d++ = 'n';
1815                }
1816                else if (ch == '\r') {
1817                     *d++ = '\\';
1818                     *d++ = 'r';
1819                }
1820                else if (ch == '\f') {
1821                     *d++ = '\\';
1822                     *d++ = 'f';
1823                }
1824                else if (ch == '\\') {
1825                     *d++ = '\\';
1826                     *d++ = '\\';
1827                }
1828                else if (ch == '\0') {
1829                     *d++ = '\\';
1830                     *d++ = '0';
1831                }
1832                else if (isPRINT_LC(ch))
1833                     *d++ = ch;
1834                else {
1835                     *d++ = '^';
1836                     *d++ = toCTRL(ch);
1837                }
1838           }
1839           if (s < end) {
1840                *d++ = '.';
1841                *d++ = '.';
1842                *d++ = '.';
1843           }
1844           *d = '\0';
1845           pv = tmpbuf;
1846     }
1847
1848     return pv;
1849 }
1850
1851 /* Print an "isn't numeric" warning, using a cleaned-up,
1852  * printable version of the offending string
1853  */
1854
1855 STATIC void
1856 S_not_a_number(pTHX_ SV *const sv)
1857 {
1858      dVAR;
1859      char tmpbuf[64];
1860      const char *pv;
1861
1862      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1863
1864      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1865
1866     if (PL_op)
1867         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1868                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1869                     "Argument \"%s\" isn't numeric in %s", pv,
1870                     OP_DESC(PL_op));
1871     else
1872         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1873                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1874                     "Argument \"%s\" isn't numeric", pv);
1875 }
1876
1877 STATIC void
1878 S_not_incrementable(pTHX_ SV *const sv) {
1879      dVAR;
1880      char tmpbuf[64];
1881      const char *pv;
1882
1883      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1884
1885      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1886
1887      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1888                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1889 }
1890
1891 /*
1892 =for apidoc looks_like_number
1893
1894 Test if the content of an SV looks like a number (or is a number).
1895 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1896 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1897 ignored.
1898
1899 =cut
1900 */
1901
1902 I32
1903 Perl_looks_like_number(pTHX_ SV *const sv)
1904 {
1905     const char *sbegin;
1906     STRLEN len;
1907
1908     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1909
1910     if (SvPOK(sv) || SvPOKp(sv)) {
1911         sbegin = SvPV_nomg_const(sv, len);
1912     }
1913     else
1914         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1915     return grok_number(sbegin, len, NULL);
1916 }
1917
1918 STATIC bool
1919 S_glob_2number(pTHX_ GV * const gv)
1920 {
1921     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1922
1923     /* We know that all GVs stringify to something that is not-a-number,
1924         so no need to test that.  */
1925     if (ckWARN(WARN_NUMERIC))
1926     {
1927         SV *const buffer = sv_newmortal();
1928         gv_efullname3(buffer, gv, "*");
1929         not_a_number(buffer);
1930     }
1931     /* We just want something true to return, so that S_sv_2iuv_common
1932         can tail call us and return true.  */
1933     return TRUE;
1934 }
1935
1936 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1937    until proven guilty, assume that things are not that bad... */
1938
1939 /*
1940    NV_PRESERVES_UV:
1941
1942    As 64 bit platforms often have an NV that doesn't preserve all bits of
1943    an IV (an assumption perl has been based on to date) it becomes necessary
1944    to remove the assumption that the NV always carries enough precision to
1945    recreate the IV whenever needed, and that the NV is the canonical form.
1946    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1947    precision as a side effect of conversion (which would lead to insanity
1948    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1949    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1950       where precision was lost, and IV/UV/NV slots that have a valid conversion
1951       which has lost no precision
1952    2) to ensure that if a numeric conversion to one form is requested that
1953       would lose precision, the precise conversion (or differently
1954       imprecise conversion) is also performed and cached, to prevent
1955       requests for different numeric formats on the same SV causing
1956       lossy conversion chains. (lossless conversion chains are perfectly
1957       acceptable (still))
1958
1959
1960    flags are used:
1961    SvIOKp is true if the IV slot contains a valid value
1962    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1963    SvNOKp is true if the NV slot contains a valid value
1964    SvNOK  is true only if the NV value is accurate
1965
1966    so
1967    while converting from PV to NV, check to see if converting that NV to an
1968    IV(or UV) would lose accuracy over a direct conversion from PV to
1969    IV(or UV). If it would, cache both conversions, return NV, but mark
1970    SV as IOK NOKp (ie not NOK).
1971
1972    While converting from PV to IV, check to see if converting that IV to an
1973    NV would lose accuracy over a direct conversion from PV to NV. If it
1974    would, cache both conversions, flag similarly.
1975
1976    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1977    correctly because if IV & NV were set NV *always* overruled.
1978    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1979    changes - now IV and NV together means that the two are interchangeable:
1980    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1981
1982    The benefit of this is that operations such as pp_add know that if
1983    SvIOK is true for both left and right operands, then integer addition
1984    can be used instead of floating point (for cases where the result won't
1985    overflow). Before, floating point was always used, which could lead to
1986    loss of precision compared with integer addition.
1987
1988    * making IV and NV equal status should make maths accurate on 64 bit
1989      platforms
1990    * may speed up maths somewhat if pp_add and friends start to use
1991      integers when possible instead of fp. (Hopefully the overhead in
1992      looking for SvIOK and checking for overflow will not outweigh the
1993      fp to integer speedup)
1994    * will slow down integer operations (callers of SvIV) on "inaccurate"
1995      values, as the change from SvIOK to SvIOKp will cause a call into
1996      sv_2iv each time rather than a macro access direct to the IV slot
1997    * should speed up number->string conversion on integers as IV is
1998      favoured when IV and NV are equally accurate
1999
2000    ####################################################################
2001    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2002    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2003    On the other hand, SvUOK is true iff UV.
2004    ####################################################################
2005
2006    Your mileage will vary depending your CPU's relative fp to integer
2007    performance ratio.
2008 */
2009
2010 #ifndef NV_PRESERVES_UV
2011 #  define IS_NUMBER_UNDERFLOW_IV 1
2012 #  define IS_NUMBER_UNDERFLOW_UV 2
2013 #  define IS_NUMBER_IV_AND_UV    2
2014 #  define IS_NUMBER_OVERFLOW_IV  4
2015 #  define IS_NUMBER_OVERFLOW_UV  5
2016
2017 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2018
2019 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2020 STATIC int
2021 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2022 #  ifdef DEBUGGING
2023                        , I32 numtype
2024 #  endif
2025                        )
2026 {
2027     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2028     PERL_UNUSED_CONTEXT;
2029
2030     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));
2031     if (SvNVX(sv) < (NV)IV_MIN) {
2032         (void)SvIOKp_on(sv);
2033         (void)SvNOK_on(sv);
2034         SvIV_set(sv, IV_MIN);
2035         return IS_NUMBER_UNDERFLOW_IV;
2036     }
2037     if (SvNVX(sv) > (NV)UV_MAX) {
2038         (void)SvIOKp_on(sv);
2039         (void)SvNOK_on(sv);
2040         SvIsUV_on(sv);
2041         SvUV_set(sv, UV_MAX);
2042         return IS_NUMBER_OVERFLOW_UV;
2043     }
2044     (void)SvIOKp_on(sv);
2045     (void)SvNOK_on(sv);
2046     /* Can't use strtol etc to convert this string.  (See truth table in
2047        sv_2iv  */
2048     if (SvNVX(sv) <= (UV)IV_MAX) {
2049         SvIV_set(sv, I_V(SvNVX(sv)));
2050         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2051             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2052         } else {
2053             /* Integer is imprecise. NOK, IOKp */
2054         }
2055         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2056     }
2057     SvIsUV_on(sv);
2058     SvUV_set(sv, U_V(SvNVX(sv)));
2059     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2060         if (SvUVX(sv) == UV_MAX) {
2061             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2062                possibly be preserved by NV. Hence, it must be overflow.
2063                NOK, IOKp */
2064             return IS_NUMBER_OVERFLOW_UV;
2065         }
2066         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2067     } else {
2068         /* Integer is imprecise. NOK, IOKp */
2069     }
2070     return IS_NUMBER_OVERFLOW_IV;
2071 }
2072 #endif /* !NV_PRESERVES_UV*/
2073
2074 STATIC bool
2075 S_sv_2iuv_common(pTHX_ SV *const sv)
2076 {
2077     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2078
2079     if (SvNOKp(sv)) {
2080         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2081          * without also getting a cached IV/UV from it at the same time
2082          * (ie PV->NV conversion should detect loss of accuracy and cache
2083          * IV or UV at same time to avoid this. */
2084         /* IV-over-UV optimisation - choose to cache IV if possible */
2085
2086         if (SvTYPE(sv) == SVt_NV)
2087             sv_upgrade(sv, SVt_PVNV);
2088
2089         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2090         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2091            certainly cast into the IV range at IV_MAX, whereas the correct
2092            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2093            cases go to UV */
2094 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2095         if (Perl_isnan(SvNVX(sv))) {
2096             SvUV_set(sv, 0);
2097             SvIsUV_on(sv);
2098             return FALSE;
2099         }
2100 #endif
2101         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2102             SvIV_set(sv, I_V(SvNVX(sv)));
2103             if (SvNVX(sv) == (NV) SvIVX(sv)
2104 #ifndef NV_PRESERVES_UV
2105                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2106                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2107                 /* Don't flag it as "accurately an integer" if the number
2108                    came from a (by definition imprecise) NV operation, and
2109                    we're outside the range of NV integer precision */
2110 #endif
2111                 ) {
2112                 if (SvNOK(sv))
2113                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2114                 else {
2115                     /* scalar has trailing garbage, eg "42a" */
2116                 }
2117                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2118                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2119                                       PTR2UV(sv),
2120                                       SvNVX(sv),
2121                                       SvIVX(sv)));
2122
2123             } else {
2124                 /* IV not precise.  No need to convert from PV, as NV
2125                    conversion would already have cached IV if it detected
2126                    that PV->IV would be better than PV->NV->IV
2127                    flags already correct - don't set public IOK.  */
2128                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2129                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2130                                       PTR2UV(sv),
2131                                       SvNVX(sv),
2132                                       SvIVX(sv)));
2133             }
2134             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2135                but the cast (NV)IV_MIN rounds to a the value less (more
2136                negative) than IV_MIN which happens to be equal to SvNVX ??
2137                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2138                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2139                (NV)UVX == NVX are both true, but the values differ. :-(
2140                Hopefully for 2s complement IV_MIN is something like
2141                0x8000000000000000 which will be exact. NWC */
2142         }
2143         else {
2144             SvUV_set(sv, U_V(SvNVX(sv)));
2145             if (
2146                 (SvNVX(sv) == (NV) SvUVX(sv))
2147 #ifndef  NV_PRESERVES_UV
2148                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2149                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2150                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2151                 /* Don't flag it as "accurately an integer" if the number
2152                    came from a (by definition imprecise) NV operation, and
2153                    we're outside the range of NV integer precision */
2154 #endif
2155                 && SvNOK(sv)
2156                 )
2157                 SvIOK_on(sv);
2158             SvIsUV_on(sv);
2159             DEBUG_c(PerlIO_printf(Perl_debug_log,
2160                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2161                                   PTR2UV(sv),
2162                                   SvUVX(sv),
2163                                   SvUVX(sv)));
2164         }
2165     }
2166     else if (SvPOKp(sv)) {
2167         UV value;
2168         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2169         /* We want to avoid a possible problem when we cache an IV/ a UV which
2170            may be later translated to an NV, and the resulting NV is not
2171            the same as the direct translation of the initial string
2172            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2173            be careful to ensure that the value with the .456 is around if the
2174            NV value is requested in the future).
2175         
2176            This means that if we cache such an IV/a UV, we need to cache the
2177            NV as well.  Moreover, we trade speed for space, and do not
2178            cache the NV if we are sure it's not needed.
2179          */
2180
2181         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2182         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2183              == IS_NUMBER_IN_UV) {
2184             /* It's definitely an integer, only upgrade to PVIV */
2185             if (SvTYPE(sv) < SVt_PVIV)
2186                 sv_upgrade(sv, SVt_PVIV);
2187             (void)SvIOK_on(sv);
2188         } else if (SvTYPE(sv) < SVt_PVNV)
2189             sv_upgrade(sv, SVt_PVNV);
2190
2191         /* If NVs preserve UVs then we only use the UV value if we know that
2192            we aren't going to call atof() below. If NVs don't preserve UVs
2193            then the value returned may have more precision than atof() will
2194            return, even though value isn't perfectly accurate.  */
2195         if ((numtype & (IS_NUMBER_IN_UV
2196 #ifdef NV_PRESERVES_UV
2197                         | IS_NUMBER_NOT_INT
2198 #endif
2199             )) == IS_NUMBER_IN_UV) {
2200             /* This won't turn off the public IOK flag if it was set above  */
2201             (void)SvIOKp_on(sv);
2202
2203             if (!(numtype & IS_NUMBER_NEG)) {
2204                 /* positive */;
2205                 if (value <= (UV)IV_MAX) {
2206                     SvIV_set(sv, (IV)value);
2207                 } else {
2208                     /* it didn't overflow, and it was positive. */
2209                     SvUV_set(sv, value);
2210                     SvIsUV_on(sv);
2211                 }
2212             } else {
2213                 /* 2s complement assumption  */
2214                 if (value <= (UV)IV_MIN) {
2215                     SvIV_set(sv, -(IV)value);
2216                 } else {
2217                     /* Too negative for an IV.  This is a double upgrade, but
2218                        I'm assuming it will be rare.  */
2219                     if (SvTYPE(sv) < SVt_PVNV)
2220                         sv_upgrade(sv, SVt_PVNV);
2221                     SvNOK_on(sv);
2222                     SvIOK_off(sv);
2223                     SvIOKp_on(sv);
2224                     SvNV_set(sv, -(NV)value);
2225                     SvIV_set(sv, IV_MIN);
2226                 }
2227             }
2228         }
2229         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2230            will be in the previous block to set the IV slot, and the next
2231            block to set the NV slot.  So no else here.  */
2232         
2233         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2234             != IS_NUMBER_IN_UV) {
2235             /* It wasn't an (integer that doesn't overflow the UV). */
2236             SvNV_set(sv, Atof(SvPVX_const(sv)));
2237
2238             if (! numtype && ckWARN(WARN_NUMERIC))
2239                 not_a_number(sv);
2240
2241 #if defined(USE_LONG_DOUBLE)
2242             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2243                                   PTR2UV(sv), SvNVX(sv)));
2244 #else
2245             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2246                                   PTR2UV(sv), SvNVX(sv)));
2247 #endif
2248
2249 #ifdef NV_PRESERVES_UV
2250             (void)SvIOKp_on(sv);
2251             (void)SvNOK_on(sv);
2252             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2253                 SvIV_set(sv, I_V(SvNVX(sv)));
2254                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2255                     SvIOK_on(sv);
2256                 } else {
2257                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2258                 }
2259                 /* UV will not work better than IV */
2260             } else {
2261                 if (SvNVX(sv) > (NV)UV_MAX) {
2262                     SvIsUV_on(sv);
2263                     /* Integer is inaccurate. NOK, IOKp, is UV */
2264                     SvUV_set(sv, UV_MAX);
2265                 } else {
2266                     SvUV_set(sv, U_V(SvNVX(sv)));
2267                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2268                        NV preservse UV so can do correct comparison.  */
2269                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2270                         SvIOK_on(sv);
2271                     } else {
2272                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2273                     }
2274                 }
2275                 SvIsUV_on(sv);
2276             }
2277 #else /* NV_PRESERVES_UV */
2278             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2279                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2280                 /* The IV/UV slot will have been set from value returned by
2281                    grok_number above.  The NV slot has just been set using
2282                    Atof.  */
2283                 SvNOK_on(sv);
2284                 assert (SvIOKp(sv));
2285             } else {
2286                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2287                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2288                     /* Small enough to preserve all bits. */
2289                     (void)SvIOKp_on(sv);
2290                     SvNOK_on(sv);
2291                     SvIV_set(sv, I_V(SvNVX(sv)));
2292                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2293                         SvIOK_on(sv);
2294                     /* Assumption: first non-preserved integer is < IV_MAX,
2295                        this NV is in the preserved range, therefore: */
2296                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2297                           < (UV)IV_MAX)) {
2298                         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);
2299                     }
2300                 } else {
2301                     /* IN_UV NOT_INT
2302                          0      0       already failed to read UV.
2303                          0      1       already failed to read UV.
2304                          1      0       you won't get here in this case. IV/UV
2305                                         slot set, public IOK, Atof() unneeded.
2306                          1      1       already read UV.
2307                        so there's no point in sv_2iuv_non_preserve() attempting
2308                        to use atol, strtol, strtoul etc.  */
2309 #  ifdef DEBUGGING
2310                     sv_2iuv_non_preserve (sv, numtype);
2311 #  else
2312                     sv_2iuv_non_preserve (sv);
2313 #  endif
2314                 }
2315             }
2316 #endif /* NV_PRESERVES_UV */
2317         /* It might be more code efficient to go through the entire logic above
2318            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2319            gets complex and potentially buggy, so more programmer efficient
2320            to do it this way, by turning off the public flags:  */
2321         if (!numtype)
2322             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2323         }
2324     }
2325     else  {
2326         if (isGV_with_GP(sv))
2327             return glob_2number(MUTABLE_GV(sv));
2328
2329         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2330                 report_uninit(sv);
2331         if (SvTYPE(sv) < SVt_IV)
2332             /* Typically the caller expects that sv_any is not NULL now.  */
2333             sv_upgrade(sv, SVt_IV);
2334         /* Return 0 from the caller.  */
2335         return TRUE;
2336     }
2337     return FALSE;
2338 }
2339
2340 /*
2341 =for apidoc sv_2iv_flags
2342
2343 Return the integer value of an SV, doing any necessary string
2344 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2345 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2346
2347 =cut
2348 */
2349
2350 IV
2351 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2352 {
2353     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2354
2355     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2356          && SvTYPE(sv) != SVt_PVFM);
2357
2358     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2359         mg_get(sv);
2360
2361     if (SvROK(sv)) {
2362         if (SvAMAGIC(sv)) {
2363             SV * tmpstr;
2364             if (flags & SV_SKIP_OVERLOAD)
2365                 return 0;
2366             tmpstr = AMG_CALLunary(sv, numer_amg);
2367             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2368                 return SvIV(tmpstr);
2369             }
2370         }
2371         return PTR2IV(SvRV(sv));
2372     }
2373
2374     if (SvVALID(sv) || isREGEXP(sv)) {
2375         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2376            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2377            In practice they are extremely unlikely to actually get anywhere
2378            accessible by user Perl code - the only way that I'm aware of is when
2379            a constant subroutine which is used as the second argument to index.
2380
2381            Regexps have no SvIVX and SvNVX fields.
2382         */
2383         assert(isREGEXP(sv) || SvPOKp(sv));
2384         {
2385             UV value;
2386             const char * const ptr =
2387                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2388             const int numtype
2389                 = grok_number(ptr, SvCUR(sv), &value);
2390
2391             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2392                 == IS_NUMBER_IN_UV) {
2393                 /* It's definitely an integer */
2394                 if (numtype & IS_NUMBER_NEG) {
2395                     if (value < (UV)IV_MIN)
2396                         return -(IV)value;
2397                 } else {
2398                     if (value < (UV)IV_MAX)
2399                         return (IV)value;
2400                 }
2401             }
2402             if (!numtype) {
2403                 if (ckWARN(WARN_NUMERIC))
2404                     not_a_number(sv);
2405             }
2406             return I_V(Atof(ptr));
2407         }
2408     }
2409
2410     if (SvTHINKFIRST(sv)) {
2411 #ifdef PERL_OLD_COPY_ON_WRITE
2412         if (SvIsCOW(sv)) {
2413             sv_force_normal_flags(sv, 0);
2414         }
2415 #endif
2416         if (SvREADONLY(sv) && !SvOK(sv)) {
2417             if (ckWARN(WARN_UNINITIALIZED))
2418                 report_uninit(sv);
2419             return 0;
2420         }
2421     }
2422
2423     if (!SvIOKp(sv)) {
2424         if (S_sv_2iuv_common(aTHX_ sv))
2425             return 0;
2426     }
2427
2428     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2429         PTR2UV(sv),SvIVX(sv)));
2430     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2431 }
2432
2433 /*
2434 =for apidoc sv_2uv_flags
2435
2436 Return the unsigned integer value of an SV, doing any necessary string
2437 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2438 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2439
2440 =cut
2441 */
2442
2443 UV
2444 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2445 {
2446     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2447
2448     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2449         mg_get(sv);
2450
2451     if (SvROK(sv)) {
2452         if (SvAMAGIC(sv)) {
2453             SV *tmpstr;
2454             if (flags & SV_SKIP_OVERLOAD)
2455                 return 0;
2456             tmpstr = AMG_CALLunary(sv, numer_amg);
2457             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2458                 return SvUV(tmpstr);
2459             }
2460         }
2461         return PTR2UV(SvRV(sv));
2462     }
2463
2464     if (SvVALID(sv) || isREGEXP(sv)) {
2465         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2466            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2467            Regexps have no SvIVX and SvNVX fields. */
2468         assert(isREGEXP(sv) || SvPOKp(sv));
2469         {
2470             UV value;
2471             const char * const ptr =
2472                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2473             const int numtype
2474                 = grok_number(ptr, SvCUR(sv), &value);
2475
2476             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2477                 == IS_NUMBER_IN_UV) {
2478                 /* It's definitely an integer */
2479                 if (!(numtype & IS_NUMBER_NEG))
2480                     return value;
2481             }
2482             if (!numtype) {
2483                 if (ckWARN(WARN_NUMERIC))
2484                     not_a_number(sv);
2485             }
2486             return U_V(Atof(ptr));
2487         }
2488     }
2489
2490     if (SvTHINKFIRST(sv)) {
2491 #ifdef PERL_OLD_COPY_ON_WRITE
2492         if (SvIsCOW(sv)) {
2493             sv_force_normal_flags(sv, 0);
2494         }
2495 #endif
2496         if (SvREADONLY(sv) && !SvOK(sv)) {
2497             if (ckWARN(WARN_UNINITIALIZED))
2498                 report_uninit(sv);
2499             return 0;
2500         }
2501     }
2502
2503     if (!SvIOKp(sv)) {
2504         if (S_sv_2iuv_common(aTHX_ sv))
2505             return 0;
2506     }
2507
2508     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2509                           PTR2UV(sv),SvUVX(sv)));
2510     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2511 }
2512
2513 /*
2514 =for apidoc sv_2nv_flags
2515
2516 Return the num value of an SV, doing any necessary string or integer
2517 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2518 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2519
2520 =cut
2521 */
2522
2523 NV
2524 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2525 {
2526     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2527
2528     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2529          && SvTYPE(sv) != SVt_PVFM);
2530     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2531         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2532            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2533            Regexps have no SvIVX and SvNVX fields.  */
2534         const char *ptr;
2535         if (flags & SV_GMAGIC)
2536             mg_get(sv);
2537         if (SvNOKp(sv))
2538             return SvNVX(sv);
2539         if (SvPOKp(sv) && !SvIOKp(sv)) {
2540             ptr = SvPVX_const(sv);
2541           grokpv:
2542             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2543                 !grok_number(ptr, SvCUR(sv), NULL))
2544                 not_a_number(sv);
2545             return Atof(ptr);
2546         }
2547         if (SvIOKp(sv)) {
2548             if (SvIsUV(sv))
2549                 return (NV)SvUVX(sv);
2550             else
2551                 return (NV)SvIVX(sv);
2552         }
2553         if (SvROK(sv)) {
2554             goto return_rok;
2555         }
2556         if (isREGEXP(sv)) {
2557             ptr = RX_WRAPPED((REGEXP *)sv);
2558             goto grokpv;
2559         }
2560         assert(SvTYPE(sv) >= SVt_PVMG);
2561         /* This falls through to the report_uninit near the end of the
2562            function. */
2563     } else if (SvTHINKFIRST(sv)) {
2564         if (SvROK(sv)) {
2565         return_rok:
2566             if (SvAMAGIC(sv)) {
2567                 SV *tmpstr;
2568                 if (flags & SV_SKIP_OVERLOAD)
2569                     return 0;
2570                 tmpstr = AMG_CALLunary(sv, numer_amg);
2571                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2572                     return SvNV(tmpstr);
2573                 }
2574             }
2575             return PTR2NV(SvRV(sv));
2576         }
2577 #ifdef PERL_OLD_COPY_ON_WRITE
2578         if (SvIsCOW(sv)) {
2579             sv_force_normal_flags(sv, 0);
2580         }
2581 #endif
2582         if (SvREADONLY(sv) && !SvOK(sv)) {
2583             if (ckWARN(WARN_UNINITIALIZED))
2584                 report_uninit(sv);
2585             return 0.0;
2586         }
2587     }
2588     if (SvTYPE(sv) < SVt_NV) {
2589         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2590         sv_upgrade(sv, SVt_NV);
2591 #ifdef USE_LONG_DOUBLE
2592         DEBUG_c({
2593             STORE_NUMERIC_LOCAL_SET_STANDARD();
2594             PerlIO_printf(Perl_debug_log,
2595                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2596                           PTR2UV(sv), SvNVX(sv));
2597             RESTORE_NUMERIC_LOCAL();
2598         });
2599 #else
2600         DEBUG_c({
2601             STORE_NUMERIC_LOCAL_SET_STANDARD();
2602             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2603                           PTR2UV(sv), SvNVX(sv));
2604             RESTORE_NUMERIC_LOCAL();
2605         });
2606 #endif
2607     }
2608     else if (SvTYPE(sv) < SVt_PVNV)
2609         sv_upgrade(sv, SVt_PVNV);
2610     if (SvNOKp(sv)) {
2611         return SvNVX(sv);
2612     }
2613     if (SvIOKp(sv)) {
2614         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2615 #ifdef NV_PRESERVES_UV
2616         if (SvIOK(sv))
2617             SvNOK_on(sv);
2618         else
2619             SvNOKp_on(sv);
2620 #else
2621         /* Only set the public NV OK flag if this NV preserves the IV  */
2622         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2623         if (SvIOK(sv) &&
2624             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2625                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2626             SvNOK_on(sv);
2627         else
2628             SvNOKp_on(sv);
2629 #endif
2630     }
2631     else if (SvPOKp(sv)) {
2632         UV value;
2633         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2634         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2635             not_a_number(sv);
2636 #ifdef NV_PRESERVES_UV
2637         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2638             == IS_NUMBER_IN_UV) {
2639             /* It's definitely an integer */
2640             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2641         } else
2642             SvNV_set(sv, Atof(SvPVX_const(sv)));
2643         if (numtype)
2644             SvNOK_on(sv);
2645         else
2646             SvNOKp_on(sv);
2647 #else
2648         SvNV_set(sv, Atof(SvPVX_const(sv)));
2649         /* Only set the public NV OK flag if this NV preserves the value in
2650            the PV at least as well as an IV/UV would.
2651            Not sure how to do this 100% reliably. */
2652         /* if that shift count is out of range then Configure's test is
2653            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2654            UV_BITS */
2655         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2656             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2657             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2658         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2659             /* Can't use strtol etc to convert this string, so don't try.
2660                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2661             SvNOK_on(sv);
2662         } else {
2663             /* value has been set.  It may not be precise.  */
2664             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2665                 /* 2s complement assumption for (UV)IV_MIN  */
2666                 SvNOK_on(sv); /* Integer is too negative.  */
2667             } else {
2668                 SvNOKp_on(sv);
2669                 SvIOKp_on(sv);
2670
2671                 if (numtype & IS_NUMBER_NEG) {
2672                     SvIV_set(sv, -(IV)value);
2673                 } else if (value <= (UV)IV_MAX) {
2674                     SvIV_set(sv, (IV)value);
2675                 } else {
2676                     SvUV_set(sv, value);
2677                     SvIsUV_on(sv);
2678                 }
2679
2680                 if (numtype & IS_NUMBER_NOT_INT) {
2681                     /* I believe that even if the original PV had decimals,
2682                        they are lost beyond the limit of the FP precision.
2683                        However, neither is canonical, so both only get p
2684                        flags.  NWC, 2000/11/25 */
2685                     /* Both already have p flags, so do nothing */
2686                 } else {
2687                     const NV nv = SvNVX(sv);
2688                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2689                         if (SvIVX(sv) == I_V(nv)) {
2690                             SvNOK_on(sv);
2691                         } else {
2692                             /* It had no "." so it must be integer.  */
2693                         }
2694                         SvIOK_on(sv);
2695                     } else {
2696                         /* between IV_MAX and NV(UV_MAX).
2697                            Could be slightly > UV_MAX */
2698
2699                         if (numtype & IS_NUMBER_NOT_INT) {
2700                             /* UV and NV both imprecise.  */
2701                         } else {
2702                             const UV nv_as_uv = U_V(nv);
2703
2704                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2705                                 SvNOK_on(sv);
2706                             }
2707                             SvIOK_on(sv);
2708                         }
2709                     }
2710                 }
2711             }
2712         }
2713         /* It might be more code efficient to go through the entire logic above
2714            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2715            gets complex and potentially buggy, so more programmer efficient
2716            to do it this way, by turning off the public flags:  */
2717         if (!numtype)
2718             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2719 #endif /* NV_PRESERVES_UV */
2720     }
2721     else  {
2722         if (isGV_with_GP(sv)) {
2723             glob_2number(MUTABLE_GV(sv));
2724             return 0.0;
2725         }
2726
2727         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2728             report_uninit(sv);
2729         assert (SvTYPE(sv) >= SVt_NV);
2730         /* Typically the caller expects that sv_any is not NULL now.  */
2731         /* XXX Ilya implies that this is a bug in callers that assume this
2732            and ideally should be fixed.  */
2733         return 0.0;
2734     }
2735 #if defined(USE_LONG_DOUBLE)
2736     DEBUG_c({
2737         STORE_NUMERIC_LOCAL_SET_STANDARD();
2738         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2739                       PTR2UV(sv), SvNVX(sv));
2740         RESTORE_NUMERIC_LOCAL();
2741     });
2742 #else
2743     DEBUG_c({
2744         STORE_NUMERIC_LOCAL_SET_STANDARD();
2745         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2746                       PTR2UV(sv), SvNVX(sv));
2747         RESTORE_NUMERIC_LOCAL();
2748     });
2749 #endif
2750     return SvNVX(sv);
2751 }
2752
2753 /*
2754 =for apidoc sv_2num
2755
2756 Return an SV with the numeric value of the source SV, doing any necessary
2757 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2758 access this function.
2759
2760 =cut
2761 */
2762
2763 SV *
2764 Perl_sv_2num(pTHX_ SV *const sv)
2765 {
2766     PERL_ARGS_ASSERT_SV_2NUM;
2767
2768     if (!SvROK(sv))
2769         return sv;
2770     if (SvAMAGIC(sv)) {
2771         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2772         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2773         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2774             return sv_2num(tmpsv);
2775     }
2776     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2777 }
2778
2779 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2780  * UV as a string towards the end of buf, and return pointers to start and
2781  * end of it.
2782  *
2783  * We assume that buf is at least TYPE_CHARS(UV) long.
2784  */
2785
2786 static char *
2787 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2788 {
2789     char *ptr = buf + TYPE_CHARS(UV);
2790     char * const ebuf = ptr;
2791     int sign;
2792
2793     PERL_ARGS_ASSERT_UIV_2BUF;
2794
2795     if (is_uv)
2796         sign = 0;
2797     else if (iv >= 0) {
2798         uv = iv;
2799         sign = 0;
2800     } else {
2801         uv = -iv;
2802         sign = 1;
2803     }
2804     do {
2805         *--ptr = '0' + (char)(uv % 10);
2806     } while (uv /= 10);
2807     if (sign)
2808         *--ptr = '-';
2809     *peob = ebuf;
2810     return ptr;
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             dSAVE_ERRNO;
2997             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2998             s = SvGROW_mutable(sv, NV_DIG + 20);
2999             /* some Xenix systems wipe out errno here */
3000
3001 #ifndef USE_LOCALE_NUMERIC
3002             PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3003             SvPOK_on(sv);
3004 #else
3005             {
3006                 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3007                 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3008
3009                 /* If the radix character is UTF-8, and actually is in the
3010                  * output, turn on the UTF-8 flag for the scalar */
3011                 if (PL_numeric_local
3012                     && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
3013                     && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3014                 {
3015                     SvUTF8_on(sv);
3016                 }
3017                 RESTORE_LC_NUMERIC();
3018             }
3019
3020             /* We don't call SvPOK_on(), because it may come to pass that the
3021              * locale changes so that the stringification we just did is no
3022              * longer correct.  We will have to re-stringify every time it is
3023              * needed */
3024 #endif
3025             RESTORE_ERRNO;
3026             while (*s) s++;
3027         }
3028     }
3029     else if (isGV_with_GP(sv)) {
3030         GV *const gv = MUTABLE_GV(sv);
3031         SV *const buffer = sv_newmortal();
3032
3033         gv_efullname3(buffer, gv, "*");
3034
3035         assert(SvPOK(buffer));
3036         if (SvUTF8(buffer))
3037             SvUTF8_on(sv);
3038         if (lp)
3039             *lp = SvCUR(buffer);
3040         return SvPVX(buffer);
3041     }
3042     else if (isREGEXP(sv)) {
3043         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3044         return RX_WRAPPED((REGEXP *)sv);
3045     }
3046     else {
3047         if (lp)
3048             *lp = 0;
3049         if (flags & SV_UNDEF_RETURNS_NULL)
3050             return NULL;
3051         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3052             report_uninit(sv);
3053         /* Typically the caller expects that sv_any is not NULL now.  */
3054         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3055             sv_upgrade(sv, SVt_PV);
3056         return (char *)"";
3057     }
3058
3059     {
3060         const STRLEN len = s - SvPVX_const(sv);
3061         if (lp) 
3062             *lp = len;
3063         SvCUR_set(sv, len);
3064     }
3065     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3066                           PTR2UV(sv),SvPVX_const(sv)));
3067     if (flags & SV_CONST_RETURN)
3068         return (char *)SvPVX_const(sv);
3069     if (flags & SV_MUTABLE_RETURN)
3070         return SvPVX_mutable(sv);
3071     return SvPVX(sv);
3072 }
3073
3074 /*
3075 =for apidoc sv_copypv
3076
3077 Copies a stringified representation of the source SV into the
3078 destination SV.  Automatically performs any necessary mg_get and
3079 coercion of numeric values into strings.  Guaranteed to preserve
3080 UTF8 flag even from overloaded objects.  Similar in nature to
3081 sv_2pv[_flags] but operates directly on an SV instead of just the
3082 string.  Mostly uses sv_2pv_flags to do its work, except when that
3083 would lose the UTF-8'ness of the PV.
3084
3085 =for apidoc sv_copypv_nomg
3086
3087 Like sv_copypv, but doesn't invoke get magic first.
3088
3089 =for apidoc sv_copypv_flags
3090
3091 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3092 include SV_GMAGIC.
3093
3094 =cut
3095 */
3096
3097 void
3098 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3099 {
3100     PERL_ARGS_ASSERT_SV_COPYPV;
3101
3102     sv_copypv_flags(dsv, ssv, 0);
3103 }
3104
3105 void
3106 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3107 {
3108     STRLEN len;
3109     const char *s;
3110
3111     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3112
3113     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3114         mg_get(ssv);
3115     s = SvPV_nomg_const(ssv,len);
3116     sv_setpvn(dsv,s,len);
3117     if (SvUTF8(ssv))
3118         SvUTF8_on(dsv);
3119     else
3120         SvUTF8_off(dsv);
3121 }
3122
3123 /*
3124 =for apidoc sv_2pvbyte
3125
3126 Return a pointer to the byte-encoded representation of the SV, and set *lp
3127 to its length.  May cause the SV to be downgraded from UTF-8 as a
3128 side-effect.
3129
3130 Usually accessed via the C<SvPVbyte> macro.
3131
3132 =cut
3133 */
3134
3135 char *
3136 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3137 {
3138     PERL_ARGS_ASSERT_SV_2PVBYTE;
3139
3140     SvGETMAGIC(sv);
3141     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3142      || isGV_with_GP(sv) || SvROK(sv)) {
3143         SV *sv2 = sv_newmortal();
3144         sv_copypv_nomg(sv2,sv);
3145         sv = sv2;
3146     }
3147     sv_utf8_downgrade(sv,0);
3148     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3149 }
3150
3151 /*
3152 =for apidoc sv_2pvutf8
3153
3154 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3155 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3156
3157 Usually accessed via the C<SvPVutf8> macro.
3158
3159 =cut
3160 */
3161
3162 char *
3163 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3164 {
3165     PERL_ARGS_ASSERT_SV_2PVUTF8;
3166
3167     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3168      || isGV_with_GP(sv) || SvROK(sv))
3169         sv = sv_mortalcopy(sv);
3170     else
3171         SvGETMAGIC(sv);
3172     sv_utf8_upgrade_nomg(sv);
3173     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3174 }
3175
3176
3177 /*
3178 =for apidoc sv_2bool
3179
3180 This macro is only used by sv_true() or its macro equivalent, and only if
3181 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3182 It calls sv_2bool_flags with the SV_GMAGIC flag.
3183
3184 =for apidoc sv_2bool_flags
3185
3186 This function is only used by sv_true() and friends,  and only if
3187 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3188 contain SV_GMAGIC, then it does an mg_get() first.
3189
3190
3191 =cut
3192 */
3193
3194 bool
3195 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3196 {
3197     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3198
3199     restart:
3200     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3201
3202     if (!SvOK(sv))
3203         return 0;
3204     if (SvROK(sv)) {
3205         if (SvAMAGIC(sv)) {
3206             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3207             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3208                 bool svb;
3209                 sv = tmpsv;
3210                 if(SvGMAGICAL(sv)) {
3211                     flags = SV_GMAGIC;
3212                     goto restart; /* call sv_2bool */
3213                 }
3214                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3215                 else if(!SvOK(sv)) {
3216                     svb = 0;
3217                 }
3218                 else if(SvPOK(sv)) {
3219                     svb = SvPVXtrue(sv);
3220                 }
3221                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3222                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3223                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3224                 }
3225                 else {
3226                     flags = 0;
3227                     goto restart; /* call sv_2bool_nomg */
3228                 }
3229                 return cBOOL(svb);
3230             }
3231         }
3232         return SvRV(sv) != 0;
3233     }
3234     if (isREGEXP(sv))
3235         return
3236           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3237     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3238 }
3239
3240 /*
3241 =for apidoc sv_utf8_upgrade
3242
3243 Converts the PV of an SV to its UTF-8-encoded form.
3244 Forces the SV to string form if it is not already.
3245 Will C<mg_get> on C<sv> if appropriate.
3246 Always sets the SvUTF8 flag to avoid future validity checks even
3247 if the whole string is the same in UTF-8 as not.
3248 Returns the number of bytes in the converted string
3249
3250 This is not a general purpose byte encoding to Unicode interface:
3251 use the Encode extension for that.
3252
3253 =for apidoc sv_utf8_upgrade_nomg
3254
3255 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3256
3257 =for apidoc sv_utf8_upgrade_flags
3258
3259 Converts the PV of an SV to its UTF-8-encoded form.
3260 Forces the SV to string form if it is not already.
3261 Always sets the SvUTF8 flag to avoid future validity checks even
3262 if all the bytes are invariant in UTF-8.
3263 If C<flags> has C<SV_GMAGIC> bit set,
3264 will C<mg_get> on C<sv> if appropriate, else not.
3265
3266 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3267 will expand when converted to UTF-8, and skips the extra work of checking for
3268 that.  Typically this flag is used by a routine that has already parsed the
3269 string and found such characters, and passes this information on so that the
3270 work doesn't have to be repeated.
3271
3272 Returns the number of bytes in the converted string.
3273
3274 This is not a general purpose byte encoding to Unicode interface:
3275 use the Encode extension for that.
3276
3277 =for apidoc sv_utf8_upgrade_flags_grow
3278
3279 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3280 the number of unused bytes the string of 'sv' is guaranteed to have free after
3281 it upon return.  This allows the caller to reserve extra space that it intends
3282 to fill, to avoid extra grows.
3283
3284 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3285 are implemented in terms of this function.
3286
3287 Returns the number of bytes in the converted string (not including the spares).
3288
3289 =cut
3290
3291 (One might think that the calling routine could pass in the position of the
3292 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3293 have to be found again.  But that is not the case, because typically when the
3294 caller is likely to use this flag, it won't be calling this routine unless it
3295 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3296 and just use bytes.  But some things that do fit into a byte are variants in
3297 utf8, and the caller may not have been keeping track of these.)
3298
3299 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3300 C<NUL> isn't guaranteed due to having other routines do the work in some input
3301 cases, or if the input is already flagged as being in utf8.
3302
3303 The speed of this could perhaps be improved for many cases if someone wanted to
3304 write a fast function that counts the number of variant characters in a string,
3305 especially if it could return the position of the first one.
3306
3307 */
3308
3309 STRLEN
3310 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3311 {
3312     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3313
3314     if (sv == &PL_sv_undef)
3315         return 0;
3316     if (!SvPOK_nog(sv)) {
3317         STRLEN len = 0;
3318         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3319             (void) sv_2pv_flags(sv,&len, flags);
3320             if (SvUTF8(sv)) {
3321                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3322                 return len;
3323             }
3324         } else {
3325             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3326         }
3327     }
3328
3329     if (SvUTF8(sv)) {
3330         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3331         return SvCUR(sv);
3332     }
3333
3334     if (SvIsCOW(sv)) {
3335         S_sv_uncow(aTHX_ sv, 0);
3336     }
3337
3338     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3339         sv_recode_to_utf8(sv, PL_encoding);
3340         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3341         return SvCUR(sv);
3342     }
3343
3344     if (SvCUR(sv) == 0) {
3345         if (extra) SvGROW(sv, extra);
3346     } else { /* Assume Latin-1/EBCDIC */
3347         /* This function could be much more efficient if we
3348          * had a FLAG in SVs to signal if there are any variant
3349          * chars in the PV.  Given that there isn't such a flag
3350          * make the loop as fast as possible (although there are certainly ways
3351          * to speed this up, eg. through vectorization) */
3352         U8 * s = (U8 *) SvPVX_const(sv);
3353         U8 * e = (U8 *) SvEND(sv);
3354         U8 *t = s;
3355         STRLEN two_byte_count = 0;
3356         
3357         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3358
3359         /* See if really will need to convert to utf8.  We mustn't rely on our
3360          * incoming SV being well formed and having a trailing '\0', as certain
3361          * code in pp_formline can send us partially built SVs. */
3362
3363         while (t < e) {
3364             const U8 ch = *t++;
3365             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3366
3367             t--;    /* t already incremented; re-point to first variant */
3368             two_byte_count = 1;
3369             goto must_be_utf8;
3370         }
3371
3372         /* utf8 conversion not needed because all are invariants.  Mark as
3373          * UTF-8 even if no variant - saves scanning loop */
3374         SvUTF8_on(sv);
3375         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3376         return SvCUR(sv);
3377
3378 must_be_utf8:
3379
3380         /* Here, the string should be converted to utf8, either because of an
3381          * input flag (two_byte_count = 0), or because a character that
3382          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3383          * the beginning of the string (if we didn't examine anything), or to
3384          * the first variant.  In either case, everything from s to t - 1 will
3385          * occupy only 1 byte each on output.
3386          *
3387          * There are two main ways to convert.  One is to create a new string
3388          * and go through the input starting from the beginning, appending each
3389          * converted value onto the new string as we go along.  It's probably
3390          * best to allocate enough space in the string for the worst possible
3391          * case rather than possibly running out of space and having to
3392          * reallocate and then copy what we've done so far.  Since everything
3393          * from s to t - 1 is invariant, the destination can be initialized
3394          * with these using a fast memory copy
3395          *
3396          * The other way is to figure out exactly how big the string should be
3397          * by parsing the entire input.  Then you don't have to make it big
3398          * enough to handle the worst possible case, and more importantly, if
3399          * the string you already have is large enough, you don't have to
3400          * allocate a new string, you can copy the last character in the input
3401          * string to the final position(s) that will be occupied by the
3402          * converted string and go backwards, stopping at t, since everything
3403          * before that is invariant.
3404          *
3405          * There are advantages and disadvantages to each method.
3406          *
3407          * In the first method, we can allocate a new string, do the memory
3408          * copy from the s to t - 1, and then proceed through the rest of the
3409          * string byte-by-byte.
3410          *
3411          * In the second method, we proceed through the rest of the input
3412          * string just calculating how big the converted string will be.  Then
3413          * there are two cases:
3414          *  1)  if the string has enough extra space to handle the converted
3415          *      value.  We go backwards through the string, converting until we
3416          *      get to the position we are at now, and then stop.  If this
3417          *      position is far enough along in the string, this method is
3418          *      faster than the other method.  If the memory copy were the same
3419          *      speed as the byte-by-byte loop, that position would be about
3420          *      half-way, as at the half-way mark, parsing to the end and back
3421          *      is one complete string's parse, the same amount as starting
3422          *      over and going all the way through.  Actually, it would be
3423          *      somewhat less than half-way, as it's faster to just count bytes
3424          *      than to also copy, and we don't have the overhead of allocating
3425          *      a new string, changing the scalar to use it, and freeing the
3426          *      existing one.  But if the memory copy is fast, the break-even
3427          *      point is somewhere after half way.  The counting loop could be
3428          *      sped up by vectorization, etc, to move the break-even point
3429          *      further towards the beginning.
3430          *  2)  if the string doesn't have enough space to handle the converted
3431          *      value.  A new string will have to be allocated, and one might
3432          *      as well, given that, start from the beginning doing the first
3433          *      method.  We've spent extra time parsing the string and in
3434          *      exchange all we've gotten is that we know precisely how big to
3435          *      make the new one.  Perl is more optimized for time than space,
3436          *      so this case is a loser.
3437          * So what I've decided to do is not use the 2nd method unless it is
3438          * guaranteed that a new string won't have to be allocated, assuming
3439          * the worst case.  I also decided not to put any more conditions on it
3440          * than this, for now.  It seems likely that, since the worst case is
3441          * twice as big as the unknown portion of the string (plus 1), we won't
3442          * be guaranteed enough space, causing us to go to the first method,
3443          * unless the string is short, or the first variant character is near
3444          * the end of it.  In either of these cases, it seems best to use the
3445          * 2nd method.  The only circumstance I can think of where this would
3446          * be really slower is if the string had once had much more data in it
3447          * than it does now, but there is still a substantial amount in it  */
3448
3449         {
3450             STRLEN invariant_head = t - s;
3451             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3452             if (SvLEN(sv) < size) {
3453
3454                 /* Here, have decided to allocate a new string */
3455
3456                 U8 *dst;
3457                 U8 *d;
3458
3459                 Newx(dst, size, U8);
3460
3461                 /* If no known invariants at the beginning of the input string,
3462                  * set so starts from there.  Otherwise, can use memory copy to
3463                  * get up to where we are now, and then start from here */
3464
3465                 if (invariant_head <= 0) {
3466                     d = dst;
3467                 } else {
3468                     Copy(s, dst, invariant_head, char);
3469                     d = dst + invariant_head;
3470                 }
3471
3472                 while (t < e) {
3473                     append_utf8_from_native_byte(*t, &d);
3474                     t++;
3475                 }
3476                 *d = '\0';
3477                 SvPV_free(sv); /* No longer using pre-existing string */
3478                 SvPV_set(sv, (char*)dst);
3479                 SvCUR_set(sv, d - dst);
3480                 SvLEN_set(sv, size);
3481             } else {
3482
3483                 /* Here, have decided to get the exact size of the string.
3484                  * Currently this happens only when we know that there is
3485                  * guaranteed enough space to fit the converted string, so
3486                  * don't have to worry about growing.  If two_byte_count is 0,
3487                  * then t points to the first byte of the string which hasn't
3488                  * been examined yet.  Otherwise two_byte_count is 1, and t
3489                  * points to the first byte in the string that will expand to
3490                  * two.  Depending on this, start examining at t or 1 after t.
3491                  * */
3492
3493                 U8 *d = t + two_byte_count;
3494
3495
3496                 /* Count up the remaining bytes that expand to two */
3497
3498                 while (d < e) {
3499                     const U8 chr = *d++;
3500                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3501                 }
3502
3503                 /* The string will expand by just the number of bytes that
3504                  * occupy two positions.  But we are one afterwards because of
3505                  * the increment just above.  This is the place to put the
3506                  * trailing NUL, and to set the length before we decrement */
3507
3508                 d += two_byte_count;
3509                 SvCUR_set(sv, d - s);
3510                 *d-- = '\0';
3511
3512
3513                 /* Having decremented d, it points to the position to put the
3514                  * very last byte of the expanded string.  Go backwards through
3515                  * the string, copying and expanding as we go, stopping when we
3516                  * get to the part that is invariant the rest of the way down */
3517
3518                 e--;
3519                 while (e >= t) {
3520                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3521                         *d-- = *e;
3522                     } else {
3523                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3524                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3525                     }
3526                     e--;
3527                 }
3528             }
3529
3530             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3531                 /* Update pos. We do it at the end rather than during
3532                  * the upgrade, to avoid slowing down the common case
3533                  * (upgrade without pos).
3534                  * pos can be stored as either bytes or characters.  Since
3535                  * this was previously a byte string we can just turn off
3536                  * the bytes flag. */
3537                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3538                 if (mg) {
3539                     mg->mg_flags &= ~MGf_BYTES;
3540                 }
3541                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3542                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3543             }
3544         }
3545     }
3546
3547     /* Mark as UTF-8 even if no variant - saves scanning loop */
3548     SvUTF8_on(sv);
3549     return SvCUR(sv);
3550 }
3551
3552 /*
3553 =for apidoc sv_utf8_downgrade
3554
3555 Attempts to convert the PV of an SV from characters to bytes.
3556 If the PV contains a character that cannot fit
3557 in a byte, this conversion will fail;
3558 in this case, either returns false or, if C<fail_ok> is not
3559 true, croaks.
3560
3561 This is not a general purpose Unicode to byte encoding interface:
3562 use the Encode extension for that.
3563
3564 =cut
3565 */
3566
3567 bool
3568 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3569 {
3570     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3571
3572     if (SvPOKp(sv) && SvUTF8(sv)) {
3573         if (SvCUR(sv)) {
3574             U8 *s;
3575             STRLEN len;
3576             int mg_flags = SV_GMAGIC;
3577
3578             if (SvIsCOW(sv)) {
3579                 S_sv_uncow(aTHX_ sv, 0);
3580             }
3581             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3582                 /* update pos */
3583                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3584                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3585                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3586                                                 SV_GMAGIC|SV_CONST_RETURN);
3587                         mg_flags = 0; /* sv_pos_b2u does get magic */
3588                 }
3589                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3590                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3591
3592             }
3593             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3594
3595             if (!utf8_to_bytes(s, &len)) {
3596                 if (fail_ok)
3597                     return FALSE;
3598                 else {
3599                     if (PL_op)
3600                         Perl_croak(aTHX_ "Wide character in %s",
3601                                    OP_DESC(PL_op));
3602                     else
3603                         Perl_croak(aTHX_ "Wide character");
3604                 }
3605             }
3606             SvCUR_set(sv, len);
3607         }
3608     }
3609     SvUTF8_off(sv);
3610     return TRUE;
3611 }
3612
3613 /*
3614 =for apidoc sv_utf8_encode
3615
3616 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3617 flag off so that it looks like octets again.
3618
3619 =cut
3620 */
3621
3622 void
3623 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3624 {
3625     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3626
3627     if (SvREADONLY(sv)) {
3628         sv_force_normal_flags(sv, 0);
3629     }
3630     (void) sv_utf8_upgrade(sv);
3631     SvUTF8_off(sv);
3632 }
3633
3634 /*
3635 =for apidoc sv_utf8_decode
3636
3637 If the PV of the SV is an octet sequence in UTF-8
3638 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3639 so that it looks like a character.  If the PV contains only single-byte
3640 characters, the C<SvUTF8> flag stays off.
3641 Scans PV for validity and returns false if the PV is invalid UTF-8.
3642
3643 =cut
3644 */
3645
3646 bool
3647 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3648 {
3649     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3650
3651     if (SvPOKp(sv)) {
3652         const U8 *start, *c;
3653         const U8 *e;
3654
3655         /* The octets may have got themselves encoded - get them back as
3656          * bytes
3657          */
3658         if (!sv_utf8_downgrade(sv, TRUE))
3659             return FALSE;
3660
3661         /* it is actually just a matter of turning the utf8 flag on, but
3662          * we want to make sure everything inside is valid utf8 first.
3663          */
3664         c = start = (const U8 *) SvPVX_const(sv);
3665         if (!is_utf8_string(c, SvCUR(sv)))
3666             return FALSE;
3667         e = (const U8 *) SvEND(sv);
3668         while (c < e) {
3669             const U8 ch = *c++;
3670             if (!UTF8_IS_INVARIANT(ch)) {
3671                 SvUTF8_on(sv);
3672                 break;
3673             }
3674         }
3675         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3676             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3677                    after this, clearing pos.  Does anything on CPAN
3678                    need this? */
3679             /* adjust pos to the start of a UTF8 char sequence */
3680             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3681             if (mg) {
3682                 I32 pos = mg->mg_len;
3683                 if (pos > 0) {
3684                     for (c = start + pos; c > start; c--) {
3685                         if (UTF8_IS_START(*c))
3686                             break;
3687                     }
3688                     mg->mg_len  = c - start;
3689                 }
3690             }
3691             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3692                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3693         }
3694     }
3695     return TRUE;
3696 }
3697
3698 /*
3699 =for apidoc sv_setsv
3700
3701 Copies the contents of the source SV C<ssv> into the destination SV
3702 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3703 function if the source SV needs to be reused.  Does not handle 'set' magic on
3704 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3705 performs a copy-by-value, obliterating any previous content of the
3706 destination.
3707
3708 You probably want to use one of the assortment of wrappers, such as
3709 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3710 C<SvSetMagicSV_nosteal>.
3711
3712 =for apidoc sv_setsv_flags
3713
3714 Copies the contents of the source SV C<ssv> into the destination SV
3715 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3716 function if the source SV needs to be reused.  Does not handle 'set' magic.
3717 Loosely speaking, it performs a copy-by-value, obliterating any previous
3718 content of the destination.
3719 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3720 C<ssv> if appropriate, else not.  If the C<flags>
3721 parameter has the C<SV_NOSTEAL> bit set then the
3722 buffers of temps will not be stolen.  <sv_setsv>
3723 and C<sv_setsv_nomg> are implemented in terms of this function.
3724
3725 You probably want to use one of the assortment of wrappers, such as
3726 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3727 C<SvSetMagicSV_nosteal>.
3728
3729 This is the primary function for copying scalars, and most other
3730 copy-ish functions and macros use this underneath.
3731
3732 =cut
3733 */
3734
3735 static void
3736 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3737 {
3738     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3739     HV *old_stash = NULL;
3740
3741     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3742
3743     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3744         const char * const name = GvNAME(sstr);
3745         const STRLEN len = GvNAMELEN(sstr);
3746         {
3747             if (dtype >= SVt_PV) {
3748                 SvPV_free(dstr);
3749                 SvPV_set(dstr, 0);
3750                 SvLEN_set(dstr, 0);
3751                 SvCUR_set(dstr, 0);
3752             }
3753             SvUPGRADE(dstr, SVt_PVGV);
3754             (void)SvOK_off(dstr);
3755             isGV_with_GP_on(dstr);
3756         }
3757         GvSTASH(dstr) = GvSTASH(sstr);
3758         if (GvSTASH(dstr))
3759             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3760         gv_name_set(MUTABLE_GV(dstr), name, len,
3761                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3762         SvFAKE_on(dstr);        /* can coerce to non-glob */
3763     }
3764
3765     if(GvGP(MUTABLE_GV(sstr))) {
3766         /* If source has method cache entry, clear it */
3767         if(GvCVGEN(sstr)) {
3768             SvREFCNT_dec(GvCV(sstr));
3769             GvCV_set(sstr, NULL);
3770             GvCVGEN(sstr) = 0;
3771         }
3772         /* If source has a real method, then a method is
3773            going to change */
3774         else if(
3775          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3776         ) {
3777             mro_changes = 1;
3778         }
3779     }
3780
3781     /* If dest already had a real method, that's a change as well */
3782     if(
3783         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3784      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3785     ) {
3786         mro_changes = 1;
3787     }
3788
3789     /* We don't need to check the name of the destination if it was not a
3790        glob to begin with. */
3791     if(dtype == SVt_PVGV) {
3792         const char * const name = GvNAME((const GV *)dstr);
3793         if(
3794             strEQ(name,"ISA")
3795          /* The stash may have been detached from the symbol table, so
3796             check its name. */
3797          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3798         )
3799             mro_changes = 2;
3800         else {
3801             const STRLEN len = GvNAMELEN(dstr);
3802             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3803              || (len == 1 && name[0] == ':')) {
3804                 mro_changes = 3;
3805
3806                 /* Set aside the old stash, so we can reset isa caches on
3807                    its subclasses. */
3808                 if((old_stash = GvHV(dstr)))
3809                     /* Make sure we do not lose it early. */
3810                     SvREFCNT_inc_simple_void_NN(
3811                      sv_2mortal((SV *)old_stash)
3812                     );
3813             }
3814         }
3815
3816         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3817     }
3818
3819     gp_free(MUTABLE_GV(dstr));
3820     GvINTRO_off(dstr);          /* one-shot flag */
3821     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3822     if (SvTAINTED(sstr))
3823         SvTAINT(dstr);
3824     if (GvIMPORTED(dstr) != GVf_IMPORTED
3825         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3826         {
3827             GvIMPORTED_on(dstr);
3828         }
3829     GvMULTI_on(dstr);
3830     if(mro_changes == 2) {
3831       if (GvAV((const GV *)sstr)) {
3832         MAGIC *mg;
3833         SV * const sref = (SV *)GvAV((const GV *)dstr);
3834         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3835             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3836                 AV * const ary = newAV();
3837                 av_push(ary, mg->mg_obj); /* takes the refcount */
3838                 mg->mg_obj = (SV *)ary;
3839             }
3840             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3841         }
3842         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3843       }
3844       mro_isa_changed_in(GvSTASH(dstr));
3845     }
3846     else if(mro_changes == 3) {
3847         HV * const stash = GvHV(dstr);
3848         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3849             mro_package_moved(
3850                 stash, old_stash,
3851                 (GV *)dstr, 0
3852             );
3853     }
3854     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3855     if (GvIO(dstr) && dtype == SVt_PVGV) {
3856         DEBUG_o(Perl_deb(aTHX_
3857                         "glob_assign_glob clearing PL_stashcache\n"));
3858         /* It's a cache. It will rebuild itself quite happily.
3859            It's a lot of effort to work out exactly which key (or keys)
3860            might be invalidated by the creation of the this file handle.
3861          */
3862         hv_clear(PL_stashcache);
3863     }
3864     return;
3865 }
3866
3867 static void
3868 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3869 {
3870     SV * const sref = SvRV(sstr);
3871     SV *dref;
3872     const int intro = GvINTRO(dstr);
3873     SV **location;
3874     U8 import_flag = 0;
3875     const U32 stype = SvTYPE(sref);
3876
3877     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3878
3879     if (intro) {
3880         GvINTRO_off(dstr);      /* one-shot flag */
3881         GvLINE(dstr) = CopLINE(PL_curcop);
3882         GvEGV(dstr) = MUTABLE_GV(dstr);
3883     }
3884     GvMULTI_on(dstr);
3885     switch (stype) {
3886     case SVt_PVCV:
3887         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3888         import_flag = GVf_IMPORTED_CV;
3889         goto common;
3890     case SVt_PVHV:
3891         location = (SV **) &GvHV(dstr);
3892         import_flag = GVf_IMPORTED_HV;
3893         goto common;
3894     case SVt_PVAV:
3895         location = (SV **) &GvAV(dstr);
3896         import_flag = GVf_IMPORTED_AV;
3897         goto common;
3898     case SVt_PVIO:
3899         location = (SV **) &GvIOp(dstr);
3900         goto common;
3901     case SVt_PVFM:
3902         location = (SV **) &GvFORM(dstr);
3903         goto common;
3904     default:
3905         location = &GvSV(dstr);
3906         import_flag = GVf_IMPORTED_SV;
3907     common:
3908         if (intro) {
3909             if (stype == SVt_PVCV) {
3910                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3911                 if (GvCVGEN(dstr)) {
3912                     SvREFCNT_dec(GvCV(dstr));
3913                     GvCV_set(dstr, NULL);
3914                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3915                 }
3916             }
3917             /* SAVEt_GVSLOT takes more room on the savestack and has more
3918                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3919                leave_scope needs access to the GV so it can reset method
3920                caches.  We must use SAVEt_GVSLOT whenever the type is
3921                SVt_PVCV, even if the stash is anonymous, as the stash may
3922                gain a name somehow before leave_scope. */
3923             if (stype == SVt_PVCV) {
3924                 /* There is no save_pushptrptrptr.  Creating it for this
3925                    one call site would be overkill.  So inline the ss add
3926                    routines here. */
3927                 dSS_ADD;
3928                 SS_ADD_PTR(dstr);
3929                 SS_ADD_PTR(location);
3930                 SS_ADD_PTR(SvREFCNT_inc(*location));
3931                 SS_ADD_UV(SAVEt_GVSLOT);
3932                 SS_ADD_END(4);
3933             }
3934             else SAVEGENERICSV(*location);
3935         }
3936         dref = *location;
3937         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3938             CV* const cv = MUTABLE_CV(*location);
3939             if (cv) {
3940                 if (!GvCVGEN((const GV *)dstr) &&
3941                     (CvROOT(cv) || CvXSUB(cv)) &&
3942                     /* redundant check that avoids creating the extra SV
3943                        most of the time: */
3944                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3945                     {
3946                         SV * const new_const_sv =
3947                             CvCONST((const CV *)sref)
3948                                  ? cv_const_sv((const CV *)sref)
3949                                  : NULL;
3950                         report_redefined_cv(
3951                            sv_2mortal(Perl_newSVpvf(aTHX_
3952                                 "%"HEKf"::%"HEKf,
3953                                 HEKfARG(
3954                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3955                                 ),
3956                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3957                            )),
3958                            cv,
3959                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3960                         );
3961                     }
3962                 if (!intro)
3963                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3964                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3965                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3966                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3967             }
3968             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3969             GvASSUMECV_on(dstr);
3970             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3971         }
3972         *location = SvREFCNT_inc_simple_NN(sref);
3973         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3974             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3975             GvFLAGS(dstr) |= import_flag;
3976         }
3977         if (stype == SVt_PVHV) {
3978             const char * const name = GvNAME((GV*)dstr);
3979             const STRLEN len = GvNAMELEN(dstr);
3980             if (
3981                 (
3982                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3983                 || (len == 1 && name[0] == ':')
3984                 )
3985              && (!dref || HvENAME_get(dref))
3986             ) {
3987                 mro_package_moved(
3988                     (HV *)sref, (HV *)dref,
3989                     (GV *)dstr, 0
3990                 );
3991             }
3992         }
3993         else if (
3994             stype == SVt_PVAV && sref != dref
3995          && strEQ(GvNAME((GV*)dstr), "ISA")
3996          /* The stash may have been detached from the symbol table, so
3997             check its name before doing anything. */
3998          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3999         ) {
4000             MAGIC *mg;
4001             MAGIC * const omg = dref && SvSMAGICAL(dref)
4002                                  ? mg_find(dref, PERL_MAGIC_isa)
4003                                  : NULL;
4004             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4005                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4006                     AV * const ary = newAV();
4007                     av_push(ary, mg->mg_obj); /* takes the refcount */
4008                     mg->mg_obj = (SV *)ary;
4009                 }
4010                 if (omg) {
4011                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4012                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4013                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4014                         while (items--)
4015                             av_push(
4016                              (AV *)mg->mg_obj,
4017                              SvREFCNT_inc_simple_NN(*svp++)
4018                             );
4019                     }
4020                     else
4021                         av_push(
4022                          (AV *)mg->mg_obj,
4023                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4024                         );
4025                 }
4026                 else
4027                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4028             }
4029             else
4030             {
4031                 sv_magic(
4032                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4033                 );
4034                 mg = mg_find(sref, PERL_MAGIC_isa);
4035             }
4036             /* Since the *ISA assignment could have affected more than
4037                one stash, don't call mro_isa_changed_in directly, but let
4038                magic_clearisa do it for us, as it already has the logic for
4039                dealing with globs vs arrays of globs. */
4040             assert(mg);
4041             Perl_magic_clearisa(aTHX_ NULL, mg);
4042         }
4043         else if (stype == SVt_PVIO) {
4044             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4045             /* It's a cache. It will rebuild itself quite happily.
4046                It's a lot of effort to work out exactly which key (or keys)
4047                might be invalidated by the creation of the this file handle.
4048             */
4049             hv_clear(PL_stashcache);
4050         }
4051         break;
4052     }
4053     if (!intro) SvREFCNT_dec(dref);
4054     if (SvTAINTED(sstr))
4055         SvTAINT(dstr);
4056     return;
4057 }
4058
4059
4060
4061
4062 #ifdef PERL_DEBUG_READONLY_COW
4063 # include <sys/mman.h>
4064
4065 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4066 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4067 # endif
4068
4069 void
4070 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4071 {
4072     struct perl_memory_debug_header * const header =
4073         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4074     const MEM_SIZE len = header->size;
4075     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4076 # ifdef PERL_TRACK_MEMPOOL
4077     if (!header->readonly) header->readonly = 1;
4078 # endif
4079     if (mprotect(header, len, PROT_READ))
4080         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4081                          header, len, errno);
4082 }
4083
4084 static void
4085 S_sv_buf_to_rw(pTHX_ SV *sv)
4086 {
4087     struct perl_memory_debug_header * const header =
4088         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4089     const MEM_SIZE len = header->size;
4090     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4091     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4092         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4093                          header, len, errno);
4094 # ifdef PERL_TRACK_MEMPOOL
4095     header->readonly = 0;
4096 # endif
4097 }
4098
4099 #else
4100 # define sv_buf_to_ro(sv)       NOOP
4101 # define sv_buf_to_rw(sv)       NOOP
4102 #endif
4103
4104 void
4105 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4106 {
4107     U32 sflags;
4108     int dtype;
4109     svtype stype;
4110
4111     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4112
4113     if (sstr == dstr)
4114         return;
4115
4116     if (SvIS_FREED(dstr)) {
4117         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4118                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4119     }
4120     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4121     if (!sstr)
4122         sstr = &PL_sv_undef;
4123     if (SvIS_FREED(sstr)) {
4124         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4125                    (void*)sstr, (void*)dstr);
4126     }
4127     stype = SvTYPE(sstr);
4128     dtype = SvTYPE(dstr);
4129
4130     /* There's a lot of redundancy below but we're going for speed here */
4131
4132     switch (stype) {
4133     case SVt_NULL:
4134       undef_sstr:
4135         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4136             (void)SvOK_off(dstr);
4137             return;
4138         }
4139         break;
4140     case SVt_IV:
4141         if (SvIOK(sstr)) {
4142             switch (dtype) {
4143             case SVt_NULL:
4144                 sv_upgrade(dstr, SVt_IV);
4145                 break;
4146             case SVt_NV:
4147             case SVt_PV:
4148                 sv_upgrade(dstr, SVt_PVIV);
4149                 break;
4150             case SVt_PVGV:
4151             case SVt_PVLV:
4152                 goto end_of_first_switch;
4153             }
4154             (void)SvIOK_only(dstr);
4155             SvIV_set(dstr,  SvIVX(sstr));
4156             if (SvIsUV(sstr))
4157                 SvIsUV_on(dstr);
4158             /* SvTAINTED can only be true if the SV has taint magic, which in
4159                turn means that the SV type is PVMG (or greater). This is the
4160                case statement for SVt_IV, so this cannot be true (whatever gcov
4161                may say).  */
4162             assert(!SvTAINTED(sstr));
4163             return;
4164         }
4165         if (!SvROK(sstr))
4166             goto undef_sstr;
4167         if (dtype < SVt_PV && dtype != SVt_IV)
4168             sv_upgrade(dstr, SVt_IV);
4169         break;
4170
4171     case SVt_NV:
4172         if (SvNOK(sstr)) {
4173             switch (dtype) {
4174             case SVt_NULL:
4175             case SVt_IV:
4176                 sv_upgrade(dstr, SVt_NV);
4177                 break;
4178             case SVt_PV:
4179             case SVt_PVIV:
4180                 sv_upgrade(dstr, SVt_PVNV);
4181                 break;
4182             case SVt_PVGV:
4183             case SVt_PVLV:
4184                 goto end_of_first_switch;
4185             }
4186             SvNV_set(dstr, SvNVX(sstr));
4187             (void)SvNOK_only(dstr);
4188             /* SvTAINTED can only be true if the SV has taint magic, which in
4189                turn means that the SV type is PVMG (or greater). This is the
4190                case statement for SVt_NV, so this cannot be true (whatever gcov
4191                may say).  */
4192             assert(!SvTAINTED(sstr));
4193             return;
4194         }
4195         goto undef_sstr;
4196
4197     case SVt_PV:
4198         if (dtype < SVt_PV)
4199             sv_upgrade(dstr, SVt_PV);
4200         break;
4201     case SVt_PVIV:
4202         if (dtype < SVt_PVIV)
4203             sv_upgrade(dstr, SVt_PVIV);
4204         break;
4205     case SVt_PVNV:
4206         if (dtype < SVt_PVNV)
4207             sv_upgrade(dstr, SVt_PVNV);
4208         break;
4209     default:
4210         {
4211         const char * const type = sv_reftype(sstr,0);
4212         if (PL_op)
4213             /* diag_listed_as: Bizarre copy of %s */
4214             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4215         else
4216             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4217         }
4218         NOT_REACHED; /* NOTREACHED */
4219
4220     case SVt_REGEXP:
4221       upgregexp:
4222         if (dtype < SVt_REGEXP)
4223         {
4224             if (dtype >= SVt_PV) {
4225                 SvPV_free(dstr);
4226                 SvPV_set(dstr, 0);
4227                 SvLEN_set(dstr, 0);
4228                 SvCUR_set(dstr, 0);
4229             }
4230             sv_upgrade(dstr, SVt_REGEXP);
4231         }
4232         break;
4233
4234         case SVt_INVLIST:
4235     case SVt_PVLV:
4236     case SVt_PVGV:
4237     case SVt_PVMG:
4238         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4239             mg_get(sstr);
4240             if (SvTYPE(sstr) != stype)
4241                 stype = SvTYPE(sstr);
4242         }
4243         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4244                     glob_assign_glob(dstr, sstr, dtype);
4245                     return;
4246         }
4247         if (stype == SVt_PVLV)
4248         {
4249             if (isREGEXP(sstr)) goto upgregexp;
4250             SvUPGRADE(dstr, SVt_PVNV);
4251         }
4252         else
4253             SvUPGRADE(dstr, (svtype)stype);
4254     }
4255  end_of_first_switch:
4256
4257     /* dstr may have been upgraded.  */
4258     dtype = SvTYPE(dstr);
4259     sflags = SvFLAGS(sstr);
4260
4261     if (dtype == SVt_PVCV) {
4262         /* Assigning to a subroutine sets the prototype.  */
4263         if (SvOK(sstr)) {
4264             STRLEN len;
4265             const char *const ptr = SvPV_const(sstr, len);
4266
4267             SvGROW(dstr, len + 1);
4268             Copy(ptr, SvPVX(dstr), len + 1, char);
4269             SvCUR_set(dstr, len);
4270             SvPOK_only(dstr);
4271             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4272             CvAUTOLOAD_off(dstr);
4273         } else {
4274             SvOK_off(dstr);
4275         }
4276     }
4277     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4278         const char * const type = sv_reftype(dstr,0);
4279         if (PL_op)
4280             /* diag_listed_as: Cannot copy to %s */
4281             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4282         else
4283             Perl_croak(aTHX_ "Cannot copy to %s", type);
4284     } else if (sflags & SVf_ROK) {
4285         if (isGV_with_GP(dstr)
4286             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4287             sstr = SvRV(sstr);
4288             if (sstr == dstr) {
4289                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4290                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4291                 {
4292                     GvIMPORTED_on(dstr);
4293                 }
4294                 GvMULTI_on(dstr);
4295                 return;
4296             }
4297             glob_assign_glob(dstr, sstr, dtype);
4298             return;
4299         }
4300
4301         if (dtype >= SVt_PV) {
4302             if (isGV_with_GP(dstr)) {
4303                 glob_assign_ref(dstr, sstr);
4304                 return;
4305             }
4306             if (SvPVX_const(dstr)) {
4307                 SvPV_free(dstr);
4308                 SvLEN_set(dstr, 0);
4309                 SvCUR_set(dstr, 0);
4310             }
4311         }
4312         (void)SvOK_off(dstr);
4313         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4314         SvFLAGS(dstr) |= sflags & SVf_ROK;
4315         assert(!(sflags & SVp_NOK));
4316         assert(!(sflags & SVp_IOK));
4317         assert(!(sflags & SVf_NOK));
4318         assert(!(sflags & SVf_IOK));
4319     }
4320     else if (isGV_with_GP(dstr)) {
4321         if (!(sflags & SVf_OK)) {
4322             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4323                            "Undefined value assigned to typeglob");
4324         }
4325         else {
4326             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4327             if (dstr != (const SV *)gv) {
4328                 const char * const name = GvNAME((const GV *)dstr);
4329                 const STRLEN len = GvNAMELEN(dstr);
4330                 HV *old_stash = NULL;
4331                 bool reset_isa = FALSE;
4332                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4333                  || (len == 1 && name[0] == ':')) {
4334                     /* Set aside the old stash, so we can reset isa caches
4335                        on its subclasses. */
4336                     if((old_stash = GvHV(dstr))) {
4337                         /* Make sure we do not lose it early. */
4338                         SvREFCNT_inc_simple_void_NN(
4339                          sv_2mortal((SV *)old_stash)
4340                         );
4341                     }
4342                     reset_isa = TRUE;
4343                 }
4344
4345                 if (GvGP(dstr)) {
4346                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4347                     gp_free(MUTABLE_GV(dstr));
4348                 }
4349                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4350
4351                 if (reset_isa) {
4352                     HV * const stash = GvHV(dstr);
4353                     if(
4354                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4355                     )
4356                         mro_package_moved(
4357                          stash, old_stash,
4358                          (GV *)dstr, 0
4359                         );
4360                 }
4361             }
4362         }
4363     }
4364     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4365           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4366         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4367     }
4368     else if (sflags & SVp_POK) {
4369         const STRLEN cur = SvCUR(sstr);
4370         const STRLEN len = SvLEN(sstr);
4371
4372         /*
4373          * We have three basic ways to copy the string:
4374          *
4375          *  1. Swipe
4376          *  2. Copy-on-write
4377          *  3. Actual copy
4378          * 
4379          * Which we choose is based on various factors.  The following
4380          * things are listed in order of speed, fastest to slowest:
4381          *  - Swipe
4382          *  - Copying a short string
4383          *  - Copy-on-write bookkeeping
4384          *  - malloc
4385          *  - Copying a long string
4386          * 
4387          * We swipe the string (steal the string buffer) if the SV on the
4388          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4389          * big win on long strings.  It should be a win on short strings if
4390          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4391          * slow things down, as SvPVX_const(sstr) would have been freed
4392          * soon anyway.
4393          * 
4394          * We also steal the buffer from a PADTMP (operator target) if it
4395          * is â€˜long enough’.  For short strings, a swipe does not help
4396          * here, as it causes more malloc calls the next time the target
4397          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4398          * be allocated it is still not worth swiping PADTMPs for short
4399          * strings, as the savings here are small.
4400          * 
4401          * If the rhs is already flagged as a copy-on-write string and COW
4402          * is possible here, we use copy-on-write and make both SVs share
4403          * the string buffer.
4404          * 
4405          * If the rhs is not flagged as copy-on-write, then we see whether
4406          * it is worth upgrading it to such.  If the lhs already has a buf-
4407          * fer big enough and the string is short, we skip it and fall back
4408          * to method 3, since memcpy is faster for short strings than the
4409          * later bookkeeping overhead that copy-on-write entails.
4410          * 
4411          * If there is no buffer on the left, or the buffer is too small,
4412          * then we use copy-on-write.
4413          */
4414
4415         /* Whichever path we take through the next code, we want this true,
4416            and doing it now facilitates the COW check.  */
4417         (void)SvPOK_only(dstr);
4418
4419         if (
4420                  (              /* Either ... */
4421                                 /* slated for free anyway (and not COW)? */
4422                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4423                                 /* or a swipable TARG */
4424                  || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
4425                        == SVs_PADTMP
4426                                 /* whose buffer is worth stealing */
4427                      && CHECK_COWBUF_THRESHOLD(cur,len)
4428                     )
4429                  ) &&
4430                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4431                  (!(flags & SV_NOSTEAL)) &&
4432                                         /* and we're allowed to steal temps */
4433                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4434                  len)             /* and really is a string */
4435         {       /* Passes the swipe test.  */
4436             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4437                 SvPV_free(dstr);
4438             SvPV_set(dstr, SvPVX_mutable(sstr));
4439             SvLEN_set(dstr, SvLEN(sstr));
4440             SvCUR_set(dstr, SvCUR(sstr));
4441
4442             SvTEMP_off(dstr);
4443             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4444             SvPV_set(sstr, NULL);
4445             SvLEN_set(sstr, 0);
4446             SvCUR_set(sstr, 0);
4447             SvTEMP_off(sstr);
4448         }
4449         else if (flags & SV_COW_SHARED_HASH_KEYS
4450               &&
4451 #ifdef PERL_OLD_COPY_ON_WRITE
4452                  (  sflags & SVf_IsCOW
4453                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4454                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4455                      && SvTYPE(sstr) >= SVt_PVIV && len
4456                     )
4457                  )
4458 #elif defined(PERL_NEW_COPY_ON_WRITE)
4459                  (sflags & SVf_IsCOW
4460                    ? (!len ||
4461                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4462                           /* If this is a regular (non-hek) COW, only so
4463                              many COW "copies" are possible. */
4464                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4465                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4466                      && !(SvFLAGS(dstr) & SVf_BREAK)
4467                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4468                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4469                     ))
4470 #else
4471                  sflags & SVf_IsCOW
4472               && !(SvFLAGS(dstr) & SVf_BREAK)
4473 #endif
4474             ) {
4475             /* Either it's a shared hash key, or it's suitable for
4476                copy-on-write.  */
4477             if (DEBUG_C_TEST) {
4478                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4479                 sv_dump(sstr);
4480                 sv_dump(dstr);
4481             }
4482 #ifdef PERL_ANY_COW
4483             if (!(sflags & SVf_IsCOW)) {
4484                     SvIsCOW_on(sstr);
4485 # ifdef PERL_OLD_COPY_ON_WRITE
4486                     /* Make the source SV into a loop of 1.
4487                        (about to become 2) */
4488                     SV_COW_NEXT_SV_SET(sstr, sstr);
4489 # else
4490                     CowREFCNT(sstr) = 0;
4491 # endif
4492             }
4493 #endif
4494             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4495                 SvPV_free(dstr);
4496             }
4497
4498 #ifdef PERL_ANY_COW
4499             if (len) {
4500 # ifdef PERL_OLD_COPY_ON_WRITE
4501                     assert (SvTYPE(dstr) >= SVt_PVIV);
4502                     /* SvIsCOW_normal */
4503                     /* splice us in between source and next-after-source.  */
4504                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4505                     SV_COW_NEXT_SV_SET(sstr, dstr);
4506 # else
4507                     if (sflags & SVf_IsCOW) {
4508                         sv_buf_to_rw(sstr);
4509                     }
4510                     CowREFCNT(sstr)++;
4511 # endif
4512                     SvPV_set(dstr, SvPVX_mutable(sstr));
4513                     sv_buf_to_ro(sstr);
4514             } else
4515 #endif
4516             {
4517                     /* SvIsCOW_shared_hash */
4518                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4519                                           "Copy on write: Sharing hash\n"));
4520
4521                     assert (SvTYPE(dstr) >= SVt_PV);
4522                     SvPV_set(dstr,
4523                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4524             }
4525             SvLEN_set(dstr, len);
4526             SvCUR_set(dstr, cur);
4527             SvIsCOW_on(dstr);
4528         } else {
4529             /* Failed the swipe test, and we cannot do copy-on-write either.
4530                Have to copy the string.  */
4531             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4532             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4533             SvCUR_set(dstr, cur);
4534             *SvEND(dstr) = '\0';
4535         }
4536         if (sflags & SVp_NOK) {
4537             SvNV_set(dstr, SvNVX(sstr));
4538         }
4539         if (sflags & SVp_IOK) {
4540             SvIV_set(dstr, SvIVX(sstr));
4541             /* Must do this otherwise some other overloaded use of 0x80000000
4542                gets confused. I guess SVpbm_VALID */
4543             if (sflags & SVf_IVisUV)
4544                 SvIsUV_on(dstr);
4545         }
4546         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4547         {
4548             const MAGIC * const smg = SvVSTRING_mg(sstr);
4549             if (smg) {
4550                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4551                          smg->mg_ptr, smg->mg_len);
4552                 SvRMAGICAL_on(dstr);
4553             }
4554         }
4555     }
4556     else if (sflags & (SVp_IOK|SVp_NOK)) {
4557         (void)SvOK_off(dstr);
4558         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4559         if (sflags & SVp_IOK) {
4560             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4561             SvIV_set(dstr, SvIVX(sstr));
4562         }
4563         if (sflags & SVp_NOK) {
4564             SvNV_set(dstr, SvNVX(sstr));
4565         }
4566     }
4567     else {
4568         if (isGV_with_GP(sstr)) {
4569             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4570         }
4571         else
4572             (void)SvOK_off(dstr);
4573     }
4574     if (SvTAINTED(sstr))
4575         SvTAINT(dstr);
4576 }
4577
4578 /*
4579 =for apidoc sv_setsv_mg
4580
4581 Like C<sv_setsv>, but also handles 'set' magic.
4582
4583 =cut
4584 */
4585
4586 void
4587 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4588 {
4589     PERL_ARGS_ASSERT_SV_SETSV_MG;
4590
4591     sv_setsv(dstr,sstr);
4592     SvSETMAGIC(dstr);
4593 }
4594
4595 #ifdef PERL_ANY_COW
4596 # ifdef PERL_OLD_COPY_ON_WRITE
4597 #  define SVt_COW SVt_PVIV
4598 # else
4599 #  define SVt_COW SVt_PV
4600 # endif
4601 SV *
4602 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4603 {
4604     STRLEN cur = SvCUR(sstr);
4605     STRLEN len = SvLEN(sstr);
4606     char *new_pv;
4607 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4608     const bool already = cBOOL(SvIsCOW(sstr));
4609 #endif
4610
4611     PERL_ARGS_ASSERT_SV_SETSV_COW;
4612
4613     if (DEBUG_C_TEST) {
4614         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4615                       (void*)sstr, (void*)dstr);
4616         sv_dump(sstr);
4617         if (dstr)
4618                     sv_dump(dstr);
4619     }
4620
4621     if (dstr) {
4622         if (SvTHINKFIRST(dstr))
4623             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4624         else if (SvPVX_const(dstr))
4625             Safefree(SvPVX_mutable(dstr));
4626     }
4627     else
4628         new_SV(dstr);
4629     SvUPGRADE(dstr, SVt_COW);
4630
4631     assert (SvPOK(sstr));
4632     assert (SvPOKp(sstr));
4633 # ifdef PERL_OLD_COPY_ON_WRITE
4634     assert (!SvIOK(sstr));
4635     assert (!SvIOKp(sstr));
4636     assert (!SvNOK(sstr));
4637     assert (!SvNOKp(sstr));
4638 # endif
4639
4640     if (SvIsCOW(sstr)) {
4641
4642         if (SvLEN(sstr) == 0) {
4643             /* source is a COW shared hash key.  */
4644             DEBUG_C(PerlIO_printf(Perl_debug_log,
4645                                   "Fast copy on write: Sharing hash\n"));
4646             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4647             goto common_exit;
4648         }
4649 # ifdef PERL_OLD_COPY_ON_WRITE
4650         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4651 # else
4652         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4653         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4654 # endif
4655     } else {
4656         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4657         SvUPGRADE(sstr, SVt_COW);
4658         SvIsCOW_on(sstr);
4659         DEBUG_C(PerlIO_printf(Perl_debug_log,
4660                               "Fast copy on write: Converting sstr to COW\n"));
4661 # ifdef PERL_OLD_COPY_ON_WRITE
4662         SV_COW_NEXT_SV_SET(dstr, sstr);
4663 # else
4664         CowREFCNT(sstr) = 0;    
4665 # endif
4666     }
4667 # ifdef PERL_OLD_COPY_ON_WRITE
4668     SV_COW_NEXT_SV_SET(sstr, dstr);
4669 # else
4670 #  ifdef PERL_DEBUG_READONLY_COW
4671     if (already) sv_buf_to_rw(sstr);
4672 #  endif
4673     CowREFCNT(sstr)++;  
4674 # endif
4675     new_pv = SvPVX_mutable(sstr);
4676     sv_buf_to_ro(sstr);
4677
4678   common_exit:
4679     SvPV_set(dstr, new_pv);
4680     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4681     if (SvUTF8(sstr))
4682         SvUTF8_on(dstr);
4683     SvLEN_set(dstr, len);
4684     SvCUR_set(dstr, cur);
4685     if (DEBUG_C_TEST) {
4686         sv_dump(dstr);
4687     }
4688     return dstr;
4689 }
4690 #endif
4691
4692 /*
4693 =for apidoc sv_setpvn
4694
4695 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4696 The C<len> parameter indicates the number of
4697 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4698 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4699
4700 =cut
4701 */
4702
4703 void
4704 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4705 {
4706     char *dptr;
4707
4708     PERL_ARGS_ASSERT_SV_SETPVN;
4709
4710     SV_CHECK_THINKFIRST_COW_DROP(sv);
4711     if (!ptr) {
4712         (void)SvOK_off(sv);
4713         return;
4714     }
4715     else {
4716         /* len is STRLEN which is unsigned, need to copy to signed */
4717         const IV iv = len;
4718         if (iv < 0)
4719             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4720                        IVdf, iv);
4721     }
4722     SvUPGRADE(sv, SVt_PV);
4723
4724     dptr = SvGROW(sv, len + 1);
4725     Move(ptr,dptr,len,char);
4726     dptr[len] = '\0';
4727     SvCUR_set(sv, len);
4728     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4729     SvTAINT(sv);
4730     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4731 }
4732
4733 /*
4734 =for apidoc sv_setpvn_mg
4735
4736 Like C<sv_setpvn>, but also handles 'set' magic.
4737
4738 =cut
4739 */
4740
4741 void
4742 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4743 {
4744     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4745
4746     sv_setpvn(sv,ptr,len);
4747     SvSETMAGIC(sv);
4748 }
4749
4750 /*
4751 =for apidoc sv_setpv
4752
4753 Copies a string into an SV.  The string must be terminated with a C<NUL>
4754 character.
4755 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4756
4757 =cut
4758 */
4759
4760 void
4761 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4762 {
4763     STRLEN len;
4764
4765     PERL_ARGS_ASSERT_SV_SETPV;
4766
4767     SV_CHECK_THINKFIRST_COW_DROP(sv);
4768     if (!ptr) {
4769         (void)SvOK_off(sv);
4770         return;
4771     }
4772     len = strlen(ptr);
4773     SvUPGRADE(sv, SVt_PV);
4774
4775     SvGROW(sv, len + 1);
4776     Move(ptr,SvPVX(sv),len+1,char);
4777     SvCUR_set(sv, len);
4778     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4779     SvTAINT(sv);
4780     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4781 }
4782
4783 /*
4784 =for apidoc sv_setpv_mg
4785
4786 Like C<sv_setpv>, but also handles 'set' magic.
4787
4788 =cut
4789 */
4790
4791 void
4792 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4793 {
4794     PERL_ARGS_ASSERT_SV_SETPV_MG;
4795
4796     sv_setpv(sv,ptr);
4797     SvSETMAGIC(sv);
4798 }
4799
4800 void
4801 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4802 {
4803     PERL_ARGS_ASSERT_SV_SETHEK;
4804
4805     if (!hek) {
4806         return;
4807     }
4808
4809     if (HEK_LEN(hek) == HEf_SVKEY) {
4810         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4811         return;
4812     } else {
4813         const int flags = HEK_FLAGS(hek);
4814         if (flags & HVhek_WASUTF8) {
4815             STRLEN utf8_len = HEK_LEN(hek);
4816             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4817             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4818             SvUTF8_on(sv);
4819             return;
4820         } else if (flags & HVhek_UNSHARED) {
4821             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4822             if (HEK_UTF8(hek))
4823                 SvUTF8_on(sv);
4824             else SvUTF8_off(sv);
4825             return;
4826         }
4827         {
4828             SV_CHECK_THINKFIRST_COW_DROP(sv);
4829             SvUPGRADE(sv, SVt_PV);
4830             SvPV_free(sv);
4831             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4832             SvCUR_set(sv, HEK_LEN(hek));
4833             SvLEN_set(sv, 0);
4834             SvIsCOW_on(sv);
4835             SvPOK_on(sv);
4836             if (HEK_UTF8(hek))
4837                 SvUTF8_on(sv);
4838             else SvUTF8_off(sv);
4839             return;
4840         }
4841     }
4842 }
4843
4844
4845 /*
4846 =for apidoc sv_usepvn_flags
4847
4848 Tells an SV to use C<ptr> to find its string value.  Normally the
4849 string is stored inside the SV, but sv_usepvn allows the SV to use an
4850 outside string.  The C<ptr> should point to memory that was allocated
4851 by L<Newx|perlclib/Memory Management and String Handling>. It must be
4852 the start of a Newx-ed block of memory, and not a pointer to the
4853 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4854 and not be from a non-Newx memory allocator like C<malloc>. The
4855 string length, C<len>, must be supplied.  By default this function
4856 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4857 so that pointer should not be freed or used by the programmer after
4858 giving it to sv_usepvn, and neither should any pointers from "behind"
4859 that pointer (e.g. ptr + 1) be used.
4860
4861 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4862 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4863 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4864 C<len>, and already meets the requirements for storing in C<SvPVX>).
4865
4866 =cut
4867 */
4868
4869 void
4870 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4871 {
4872     STRLEN allocate;
4873
4874     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4875
4876     SV_CHECK_THINKFIRST_COW_DROP(sv);
4877     SvUPGRADE(sv, SVt_PV);
4878     if (!ptr) {
4879         (void)SvOK_off(sv);
4880         if (flags & SV_SMAGIC)
4881             SvSETMAGIC(sv);
4882         return;
4883     }
4884     if (SvPVX_const(sv))
4885         SvPV_free(sv);
4886
4887 #ifdef DEBUGGING
4888     if (flags & SV_HAS_TRAILING_NUL)
4889         assert(ptr[len] == '\0');
4890 #endif
4891
4892     allocate = (flags & SV_HAS_TRAILING_NUL)
4893         ? len + 1 :
4894 #ifdef Perl_safesysmalloc_size
4895         len + 1;
4896 #else 
4897         PERL_STRLEN_ROUNDUP(len + 1);
4898 #endif
4899     if (flags & SV_HAS_TRAILING_NUL) {
4900         /* It's long enough - do nothing.
4901            Specifically Perl_newCONSTSUB is relying on this.  */
4902     } else {
4903 #ifdef DEBUGGING
4904         /* Force a move to shake out bugs in callers.  */
4905         char *new_ptr = (char*)safemalloc(allocate);
4906         Copy(ptr, new_ptr, len, char);
4907         PoisonFree(ptr,len,char);
4908         Safefree(ptr);
4909         ptr = new_ptr;
4910 #else
4911         ptr = (char*) saferealloc (ptr, allocate);
4912 #endif
4913     }
4914 #ifdef Perl_safesysmalloc_size
4915     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4916 #else
4917     SvLEN_set(sv, allocate);
4918 #endif
4919     SvCUR_set(sv, len);
4920     SvPV_set(sv, ptr);
4921     if (!(flags & SV_HAS_TRAILING_NUL)) {
4922         ptr[len] = '\0';
4923     }
4924     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4925     SvTAINT(sv);
4926     if (flags & SV_SMAGIC)
4927         SvSETMAGIC(sv);
4928 }
4929
4930 #ifdef PERL_OLD_COPY_ON_WRITE
4931 /* Need to do this *after* making the SV normal, as we need the buffer
4932    pointer to remain valid until after we've copied it.  If we let go too early,
4933    another thread could invalidate it by unsharing last of the same hash key
4934    (which it can do by means other than releasing copy-on-write Svs)
4935    or by changing the other copy-on-write SVs in the loop.  */
4936 STATIC void
4937 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4938 {
4939     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4940
4941     { /* this SV was SvIsCOW_normal(sv) */
4942          /* we need to find the SV pointing to us.  */
4943         SV *current = SV_COW_NEXT_SV(after);
4944
4945         if (current == sv) {
4946             /* The SV we point to points back to us (there were only two of us
4947                in the loop.)
4948                Hence other SV is no longer copy on write either.  */
4949             SvIsCOW_off(after);
4950             sv_buf_to_rw(after);
4951         } else {
4952             /* We need to follow the pointers around the loop.  */
4953             SV *next;
4954             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4955                 assert (next);
4956                 current = next;
4957                  /* don't loop forever if the structure is bust, and we have
4958                     a pointer into a closed loop.  */
4959                 assert (current != after);
4960                 assert (SvPVX_const(current) == pvx);
4961             }
4962             /* Make the SV before us point to the SV after us.  */
4963             SV_COW_NEXT_SV_SET(current, after);
4964         }
4965     }
4966 }
4967 #endif
4968 /*
4969 =for apidoc sv_force_normal_flags
4970
4971 Undo various types of fakery on an SV, where fakery means
4972 "more than" a string: if the PV is a shared string, make
4973 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4974 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4975 we do the copy, and is also used locally; if this is a
4976 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4977 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4978 SvPOK_off rather than making a copy.  (Used where this
4979 scalar is about to be set to some other value.)  In addition,
4980 the C<flags> parameter gets passed to C<sv_unref_flags()>
4981 when unreffing.  C<sv_force_normal> calls this function
4982 with flags set to 0.
4983
4984 This function is expected to be used to signal to perl that this SV is
4985 about to be written to, and any extra book-keeping needs to be taken care
4986 of.  Hence, it croaks on read-only values.
4987
4988 =cut
4989 */
4990
4991 static void
4992 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
4993 {
4994     assert(SvIsCOW(sv));
4995     {
4996 #ifdef PERL_ANY_COW
4997         const char * const pvx = SvPVX_const(sv);
4998         const STRLEN len = SvLEN(sv);
4999         const STRLEN cur = SvCUR(sv);
5000 # ifdef PERL_OLD_COPY_ON_WRITE
5001         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5002            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5003            we'll fail an assertion.  */
5004         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5005 # endif
5006
5007         if (DEBUG_C_TEST) {
5008                 PerlIO_printf(Perl_debug_log,
5009                               "Copy on write: Force normal %ld\n",
5010                               (long) flags);
5011                 sv_dump(sv);
5012         }
5013         SvIsCOW_off(sv);
5014 # ifdef PERL_NEW_COPY_ON_WRITE
5015         if (len && CowREFCNT(sv) == 0)
5016             /* We own the buffer ourselves. */
5017             sv_buf_to_rw(sv);
5018         else
5019 # endif
5020         {
5021                 
5022             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5023 # ifdef PERL_NEW_COPY_ON_WRITE
5024             /* Must do this first, since the macro uses SvPVX. */
5025             if (len) {
5026                 sv_buf_to_rw(sv);
5027                 CowREFCNT(sv)--;
5028                 sv_buf_to_ro(sv);
5029             }
5030 # endif
5031             SvPV_set(sv, NULL);
5032             SvCUR_set(sv, 0);
5033             SvLEN_set(sv, 0);
5034             if (flags & SV_COW_DROP_PV) {
5035                 /* OK, so we don't need to copy our buffer.  */
5036                 SvPOK_off(sv);
5037             } else {
5038                 SvGROW(sv, cur + 1);
5039                 Move(pvx,SvPVX(sv),cur,char);
5040                 SvCUR_set(sv, cur);
5041                 *SvEND(sv) = '\0';
5042             }
5043             if (len) {
5044 # ifdef PERL_OLD_COPY_ON_WRITE
5045                 sv_release_COW(sv, pvx, next);
5046 # endif
5047             } else {
5048                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5049             }
5050             if (DEBUG_C_TEST) {
5051                 sv_dump(sv);
5052             }
5053         }
5054 #else
5055             const char * const pvx = SvPVX_const(sv);
5056             const STRLEN len = SvCUR(sv);
5057             SvIsCOW_off(sv);
5058             SvPV_set(sv, NULL);
5059             SvLEN_set(sv, 0);
5060             if (flags & SV_COW_DROP_PV) {
5061                 /* OK, so we don't need to copy our buffer.  */
5062                 SvPOK_off(sv);
5063             } else {
5064                 SvGROW(sv, len + 1);
5065                 Move(pvx,SvPVX(sv),len,char);
5066                 *SvEND(sv) = '\0';
5067             }
5068             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5069 #endif
5070     }
5071 }
5072
5073 void
5074 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5075 {
5076     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5077
5078     if (SvREADONLY(sv))
5079         Perl_croak_no_modify();
5080     else if (SvIsCOW(sv))
5081         S_sv_uncow(aTHX_ sv, flags);
5082     if (SvROK(sv))
5083         sv_unref_flags(sv, flags);
5084     else if (SvFAKE(sv) && isGV_with_GP(sv))
5085         sv_unglob(sv, flags);
5086     else if (SvFAKE(sv) && isREGEXP(sv)) {
5087         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5088            to sv_unglob. We only need it here, so inline it.  */
5089         const bool islv = SvTYPE(sv) == SVt_PVLV;
5090         const svtype new_type =
5091           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5092         SV *const temp = newSV_type(new_type);
5093         regexp *const temp_p = ReANY((REGEXP *)sv);
5094
5095         if (new_type == SVt_PVMG) {
5096             SvMAGIC_set(temp, SvMAGIC(sv));
5097             SvMAGIC_set(sv, NULL);
5098             SvSTASH_set(temp, SvSTASH(sv));
5099             SvSTASH_set(sv, NULL);
5100         }
5101         if (!islv) SvCUR_set(temp, SvCUR(sv));
5102         /* Remember that SvPVX is in the head, not the body.  But
5103            RX_WRAPPED is in the body. */
5104         assert(ReANY((REGEXP *)sv)->mother_re);
5105         /* Their buffer is already owned by someone else. */
5106         if (flags & SV_COW_DROP_PV) {
5107             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5108                zeroed body.  For SVt_PVLV, it should have been set to 0
5109                before turning into a regexp. */
5110             assert(!SvLEN(islv ? sv : temp));
5111             sv->sv_u.svu_pv = 0;
5112         }
5113         else {
5114             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5115             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5116             SvPOK_on(sv);
5117         }
5118
5119         /* Now swap the rest of the bodies. */
5120
5121         SvFAKE_off(sv);
5122         if (!islv) {
5123             SvFLAGS(sv) &= ~SVTYPEMASK;
5124             SvFLAGS(sv) |= new_type;
5125             SvANY(sv) = SvANY(temp);
5126         }
5127
5128         SvFLAGS(temp) &= ~(SVTYPEMASK);
5129         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5130         SvANY(temp) = temp_p;
5131         temp->sv_u.svu_rx = (regexp *)temp_p;
5132
5133         SvREFCNT_dec_NN(temp);
5134     }
5135     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5136 }
5137
5138 /*
5139 =for apidoc sv_chop
5140
5141 Efficient removal of characters from the beginning of the string buffer.
5142 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5143 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5144 character of the adjusted string.  Uses the "OOK hack".  On return, only
5145 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5146
5147 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5148 refer to the same chunk of data.
5149
5150 The unfortunate similarity of this function's name to that of Perl's C<chop>
5151 operator is strictly coincidental.  This function works from the left;
5152 C<chop> works from the right.
5153
5154 =cut
5155 */
5156
5157 void
5158 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5159 {
5160     STRLEN delta;
5161     STRLEN old_delta;
5162     U8 *p;
5163 #ifdef DEBUGGING
5164     const U8 *evacp;
5165     STRLEN evacn;
5166 #endif
5167     STRLEN max_delta;
5168
5169     PERL_ARGS_ASSERT_SV_CHOP;
5170
5171     if (!ptr || !SvPOKp(sv))
5172         return;
5173     delta = ptr - SvPVX_const(sv);
5174     if (!delta) {
5175         /* Nothing to do.  */
5176         return;
5177     }
5178     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5179     if (delta > max_delta)
5180         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5181                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5182     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5183     SV_CHECK_THINKFIRST(sv);
5184     SvPOK_only_UTF8(sv);
5185
5186     if (!SvOOK(sv)) {
5187         if (!SvLEN(sv)) { /* make copy of shared string */
5188             const char *pvx = SvPVX_const(sv);
5189             const STRLEN len = SvCUR(sv);
5190             SvGROW(sv, len + 1);
5191             Move(pvx,SvPVX(sv),len,char);
5192             *SvEND(sv) = '\0';
5193         }
5194         SvOOK_on(sv);
5195         old_delta = 0;
5196     } else {
5197         SvOOK_offset(sv, old_delta);
5198     }
5199     SvLEN_set(sv, SvLEN(sv) - delta);
5200     SvCUR_set(sv, SvCUR(sv) - delta);
5201     SvPV_set(sv, SvPVX(sv) + delta);
5202
5203     p = (U8 *)SvPVX_const(sv);
5204
5205 #ifdef DEBUGGING
5206     /* how many bytes were evacuated?  we will fill them with sentinel
5207        bytes, except for the part holding the new offset of course. */
5208     evacn = delta;
5209     if (old_delta)
5210         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5211     assert(evacn);
5212     assert(evacn <= delta + old_delta);
5213     evacp = p - evacn;
5214 #endif
5215
5216     /* This sets 'delta' to the accumulated value of all deltas so far */
5217     delta += old_delta;
5218     assert(delta);
5219
5220     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5221      * the string; otherwise store a 0 byte there and store 'delta' just prior
5222      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5223      * portion of the chopped part of the string */
5224     if (delta < 0x100) {
5225         *--p = (U8) delta;
5226     } else {
5227         *--p = 0;
5228         p -= sizeof(STRLEN);
5229         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5230     }
5231
5232 #ifdef DEBUGGING
5233     /* Fill the preceding buffer with sentinals to verify that no-one is
5234        using it.  */
5235     while (p > evacp) {
5236         --p;
5237         *p = (U8)PTR2UV(p);
5238     }
5239 #endif
5240 }
5241
5242 /*
5243 =for apidoc sv_catpvn
5244
5245 Concatenates the string onto the end of the string which is in the SV.  The
5246 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5247 status set, then the bytes appended should be valid UTF-8.
5248 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5249
5250 =for apidoc sv_catpvn_flags
5251
5252 Concatenates the string onto the end of the string which is in the SV.  The
5253 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5254 status set, then the bytes appended should be valid UTF-8.
5255 If C<flags> has the C<SV_SMAGIC> bit set, will
5256 C<mg_set> on C<dsv> afterwards if appropriate.
5257 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5258 in terms of this function.
5259
5260 =cut
5261 */
5262
5263 void
5264 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5265 {
5266     STRLEN dlen;
5267     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5268
5269     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5270     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5271
5272     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5273       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5274          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5275          dlen = SvCUR(dsv);
5276       }
5277       else SvGROW(dsv, dlen + slen + 1);
5278       if (sstr == dstr)
5279         sstr = SvPVX_const(dsv);
5280       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5281       SvCUR_set(dsv, SvCUR(dsv) + slen);
5282     }
5283     else {
5284         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5285         const char * const send = sstr + slen;
5286         U8 *d;
5287
5288         /* Something this code does not account for, which I think is
5289            impossible; it would require the same pv to be treated as
5290            bytes *and* utf8, which would indicate a bug elsewhere. */
5291         assert(sstr != dstr);
5292
5293         SvGROW(dsv, dlen + slen * 2 + 1);
5294         d = (U8 *)SvPVX(dsv) + dlen;
5295
5296         while (sstr < send) {
5297             append_utf8_from_native_byte(*sstr, &d);
5298             sstr++;
5299         }
5300         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5301     }
5302     *SvEND(dsv) = '\0';
5303     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5304     SvTAINT(dsv);
5305     if (flags & SV_SMAGIC)
5306         SvSETMAGIC(dsv);
5307 }
5308
5309 /*
5310 =for apidoc sv_catsv
5311
5312 Concatenates the string from SV C<ssv> onto the end of the string in SV
5313 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5314 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5315 C<sv_catsv_nomg>.
5316
5317 =for apidoc sv_catsv_flags
5318
5319 Concatenates the string from SV C<ssv> onto the end of the string in SV
5320 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5321 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5322 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5323 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5324 and C<sv_catsv_mg> are implemented in terms of this function.
5325
5326 =cut */
5327
5328 void
5329 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5330 {
5331     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5332
5333     if (ssv) {
5334         STRLEN slen;
5335         const char *spv = SvPV_flags_const(ssv, slen, flags);
5336         if (spv) {
5337             if (flags & SV_GMAGIC)
5338                 SvGETMAGIC(dsv);
5339             sv_catpvn_flags(dsv, spv, slen,
5340                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5341             if (flags & SV_SMAGIC)
5342                 SvSETMAGIC(dsv);
5343         }
5344     }
5345 }
5346
5347 /*
5348 =for apidoc sv_catpv
5349
5350 Concatenates the C<NUL>-terminated string onto the end of the string which is
5351 in the SV.
5352 If the SV has the UTF-8 status set, then the bytes appended should be
5353 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5354
5355 =cut */
5356
5357 void
5358 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5359 {
5360     STRLEN len;
5361     STRLEN tlen;
5362     char *junk;
5363
5364     PERL_ARGS_ASSERT_SV_CATPV;
5365
5366     if (!ptr)
5367         return;
5368     junk = SvPV_force(sv, tlen);
5369     len = strlen(ptr);
5370     SvGROW(sv, tlen + len + 1);
5371     if (ptr == junk)
5372         ptr = SvPVX_const(sv);
5373     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5374     SvCUR_set(sv, SvCUR(sv) + len);
5375     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5376     SvTAINT(sv);
5377 }
5378
5379 /*
5380 =for apidoc sv_catpv_flags
5381
5382 Concatenates the C<NUL>-terminated string onto the end of the string which is
5383 in the SV.
5384 If the SV has the UTF-8 status set, then the bytes appended should
5385 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5386 on the modified SV if appropriate.
5387
5388 =cut
5389 */
5390
5391 void
5392 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5393 {
5394     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5395     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5396 }
5397
5398 /*
5399 =for apidoc sv_catpv_mg
5400
5401 Like C<sv_catpv>, but also handles 'set' magic.
5402
5403 =cut
5404 */
5405
5406 void
5407 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5408 {
5409     PERL_ARGS_ASSERT_SV_CATPV_MG;
5410
5411     sv_catpv(sv,ptr);
5412     SvSETMAGIC(sv);
5413 }
5414
5415 /*
5416 =for apidoc newSV
5417
5418 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5419 bytes of preallocated string space the SV should have.  An extra byte for a
5420 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5421 space is allocated.)  The reference count for the new SV is set to 1.
5422
5423 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5424 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5425 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5426 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5427 modules supporting older perls.
5428
5429 =cut
5430 */
5431
5432 SV *
5433 Perl_newSV(pTHX_ const STRLEN len)
5434 {
5435     SV *sv;
5436
5437     new_SV(sv);
5438     if (len) {
5439         sv_upgrade(sv, SVt_PV);
5440         SvGROW(sv, len + 1);
5441     }
5442     return sv;
5443 }
5444 /*
5445 =for apidoc sv_magicext
5446
5447 Adds magic to an SV, upgrading it if necessary.  Applies the
5448 supplied vtable and returns a pointer to the magic added.
5449
5450 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5451 In particular, you can add magic to SvREADONLY SVs, and add more than
5452 one instance of the same 'how'.
5453
5454 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5455 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5456 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5457 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5458
5459 (This is now used as a subroutine by C<sv_magic>.)
5460
5461 =cut
5462 */
5463 MAGIC * 
5464 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5465                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5466 {
5467     MAGIC* mg;
5468
5469     PERL_ARGS_ASSERT_SV_MAGICEXT;
5470
5471     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5472
5473     SvUPGRADE(sv, SVt_PVMG);
5474     Newxz(mg, 1, MAGIC);
5475     mg->mg_moremagic = SvMAGIC(sv);
5476     SvMAGIC_set(sv, mg);
5477
5478     /* Sometimes a magic contains a reference loop, where the sv and
5479        object refer to each other.  To prevent a reference loop that
5480        would prevent such objects being freed, we look for such loops
5481        and if we find one we avoid incrementing the object refcount.
5482
5483        Note we cannot do this to avoid self-tie loops as intervening RV must
5484        have its REFCNT incremented to keep it in existence.
5485
5486     */
5487     if (!obj || obj == sv ||
5488         how == PERL_MAGIC_arylen ||
5489         how == PERL_MAGIC_symtab ||
5490         (SvTYPE(obj) == SVt_PVGV &&
5491             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5492              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5493              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5494     {
5495         mg->mg_obj = obj;
5496     }
5497     else {
5498         mg->mg_obj = SvREFCNT_inc_simple(obj);
5499         mg->mg_flags |= MGf_REFCOUNTED;
5500     }
5501
5502     /* Normal self-ties simply pass a null object, and instead of
5503        using mg_obj directly, use the SvTIED_obj macro to produce a
5504        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5505        with an RV obj pointing to the glob containing the PVIO.  In
5506        this case, to avoid a reference loop, we need to weaken the
5507        reference.
5508     */
5509
5510     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5511         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5512     {
5513       sv_rvweaken(obj);
5514     }
5515
5516     mg->mg_type = how;
5517     mg->mg_len = namlen;
5518     if (name) {
5519         if (namlen > 0)
5520             mg->mg_ptr = savepvn(name, namlen);
5521         else if (namlen == HEf_SVKEY) {
5522             /* Yes, this is casting away const. This is only for the case of
5523                HEf_SVKEY. I think we need to document this aberation of the
5524                constness of the API, rather than making name non-const, as
5525                that change propagating outwards a long way.  */
5526             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5527         } else
5528             mg->mg_ptr = (char *) name;
5529     }
5530     mg->mg_virtual = (MGVTBL *) vtable;
5531
5532     mg_magical(sv);
5533     return mg;
5534 }
5535
5536 MAGIC *
5537 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5538 {
5539     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5540     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5541         /* This sv is only a delegate.  //g magic must be attached to
5542            its target. */
5543         vivify_defelem(sv);
5544         sv = LvTARG(sv);
5545     }
5546 #ifdef PERL_OLD_COPY_ON_WRITE
5547     if (SvIsCOW(sv))
5548         sv_force_normal_flags(sv, 0);
5549 #endif
5550     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5551                        &PL_vtbl_mglob, 0, 0);
5552 }
5553
5554 /*
5555 =for apidoc sv_magic
5556
5557 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5558 necessary, then adds a new magic item of type C<how> to the head of the
5559 magic list.
5560
5561 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5562 handling of the C<name> and C<namlen> arguments.
5563
5564 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5565 to add more than one instance of the same 'how'.
5566
5567 =cut
5568 */
5569
5570 void
5571 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5572              const char *const name, const I32 namlen)
5573 {
5574     const MGVTBL *vtable;
5575     MAGIC* mg;
5576     unsigned int flags;
5577     unsigned int vtable_index;
5578
5579     PERL_ARGS_ASSERT_SV_MAGIC;
5580
5581     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5582         || ((flags = PL_magic_data[how]),
5583             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5584             > magic_vtable_max))
5585         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5586
5587     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5588        Useful for attaching extension internal data to perl vars.
5589        Note that multiple extensions may clash if magical scalars
5590        etc holding private data from one are passed to another. */
5591
5592     vtable = (vtable_index == magic_vtable_max)
5593         ? NULL : PL_magic_vtables + vtable_index;
5594
5595 #ifdef PERL_OLD_COPY_ON_WRITE
5596     if (SvIsCOW(sv))
5597         sv_force_normal_flags(sv, 0);
5598 #endif
5599     if (SvREADONLY(sv)) {
5600         if (
5601             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5602            )
5603         {
5604             Perl_croak_no_modify();
5605         }
5606     }
5607     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5608         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5609             /* sv_magic() refuses to add a magic of the same 'how' as an
5610                existing one
5611              */
5612             if (how == PERL_MAGIC_taint)
5613                 mg->mg_len |= 1;
5614             return;
5615         }
5616     }
5617
5618     /* Force pos to be stored as characters, not bytes. */
5619     if (SvMAGICAL(sv) && DO_UTF8(sv)
5620       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5621       && mg->mg_len != -1
5622       && mg->mg_flags & MGf_BYTES) {
5623         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5624                                                SV_CONST_RETURN);
5625         mg->mg_flags &= ~MGf_BYTES;
5626     }
5627
5628     /* Rest of work is done else where */
5629     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5630
5631     switch (how) {
5632     case PERL_MAGIC_taint:
5633         mg->mg_len = 1;
5634         break;
5635     case PERL_MAGIC_ext:
5636     case PERL_MAGIC_dbfile:
5637         SvRMAGICAL_on(sv);
5638         break;
5639     }
5640 }
5641
5642 static int
5643 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5644 {
5645     MAGIC* mg;
5646     MAGIC** mgp;
5647
5648     assert(flags <= 1);
5649
5650     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5651         return 0;
5652     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5653     for (mg = *mgp; mg; mg = *mgp) {
5654         const MGVTBL* const virt = mg->mg_virtual;
5655         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5656             *mgp = mg->mg_moremagic;
5657             if (virt && virt->svt_free)
5658                 virt->svt_free(aTHX_ sv, mg);
5659             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5660                 if (mg->mg_len > 0)
5661                     Safefree(mg->mg_ptr);
5662                 else if (mg->mg_len == HEf_SVKEY)
5663                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5664                 else if (mg->mg_type == PERL_MAGIC_utf8)
5665                     Safefree(mg->mg_ptr);
5666             }
5667             if (mg->mg_flags & MGf_REFCOUNTED)
5668                 SvREFCNT_dec(mg->mg_obj);
5669             Safefree(mg);
5670         }
5671         else
5672             mgp = &mg->mg_moremagic;
5673     }
5674     if (SvMAGIC(sv)) {
5675         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5676             mg_magical(sv);     /*    else fix the flags now */
5677     }
5678     else {
5679         SvMAGICAL_off(sv);
5680         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5681     }
5682     return 0;
5683 }
5684
5685 /*
5686 =for apidoc sv_unmagic
5687
5688 Removes all magic of type C<type> from an SV.
5689
5690 =cut
5691 */
5692
5693 int
5694 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5695 {
5696     PERL_ARGS_ASSERT_SV_UNMAGIC;
5697     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5698 }
5699
5700 /*
5701 =for apidoc sv_unmagicext
5702
5703 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5704
5705 =cut
5706 */
5707
5708 int
5709 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5710 {
5711     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5712     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5713 }
5714
5715 /*
5716 =for apidoc sv_rvweaken
5717
5718 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5719 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5720 push a back-reference to this RV onto the array of backreferences
5721 associated with that magic.  If the RV is magical, set magic will be
5722 called after the RV is cleared.
5723
5724 =cut
5725 */
5726
5727 SV *
5728 Perl_sv_rvweaken(pTHX_ SV *const sv)
5729 {
5730     SV *tsv;
5731
5732     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5733
5734     if (!SvOK(sv))  /* let undefs pass */
5735         return sv;
5736     if (!SvROK(sv))
5737         Perl_croak(aTHX_ "Can't weaken a nonreference");
5738     else if (SvWEAKREF(sv)) {
5739         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5740         return sv;
5741     }
5742     else if (SvREADONLY(sv)) croak_no_modify();
5743     tsv = SvRV(sv);
5744     Perl_sv_add_backref(aTHX_ tsv, sv);
5745     SvWEAKREF_on(sv);
5746     SvREFCNT_dec_NN(tsv);
5747     return sv;
5748 }
5749
5750 /* Give tsv backref magic if it hasn't already got it, then push a
5751  * back-reference to sv onto the array associated with the backref magic.
5752  *
5753  * As an optimisation, if there's only one backref and it's not an AV,
5754  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5755  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5756  * active.)
5757  */
5758
5759 /* A discussion about the backreferences array and its refcount:
5760  *
5761  * The AV holding the backreferences is pointed to either as the mg_obj of
5762  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5763  * xhv_backreferences field. The array is created with a refcount
5764  * of 2. This means that if during global destruction the array gets
5765  * picked on before its parent to have its refcount decremented by the
5766  * random zapper, it won't actually be freed, meaning it's still there for
5767  * when its parent gets freed.
5768  *
5769  * When the parent SV is freed, the extra ref is killed by
5770  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5771  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5772  *
5773  * When a single backref SV is stored directly, it is not reference
5774  * counted.
5775  */
5776
5777 void
5778 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5779 {
5780     SV **svp;
5781     AV *av = NULL;
5782     MAGIC *mg = NULL;
5783
5784     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5785
5786     /* find slot to store array or singleton backref */
5787
5788     if (SvTYPE(tsv) == SVt_PVHV) {
5789         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5790     } else {
5791         if (SvMAGICAL(tsv))
5792             mg = mg_find(tsv, PERL_MAGIC_backref);
5793         if (!mg)
5794             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5795         svp = &(mg->mg_obj);
5796     }
5797
5798     /* create or retrieve the array */
5799
5800     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5801         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5802     ) {
5803         /* create array */
5804         if (mg)
5805             mg->mg_flags |= MGf_REFCOUNTED;
5806         av = newAV();
5807         AvREAL_off(av);
5808         SvREFCNT_inc_simple_void_NN(av);
5809         /* av now has a refcnt of 2; see discussion above */
5810         av_extend(av, *svp ? 2 : 1);
5811         if (*svp) {
5812             /* move single existing backref to the array */
5813             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5814         }
5815         *svp = (SV*)av;
5816     }
5817     else {
5818         av = MUTABLE_AV(*svp);
5819         if (!av) {
5820             /* optimisation: store single backref directly in HvAUX or mg_obj */
5821             *svp = sv;
5822             return;
5823         }
5824         assert(SvTYPE(av) == SVt_PVAV);
5825         if (AvFILLp(av) >= AvMAX(av)) {
5826             av_extend(av, AvFILLp(av)+1);
5827         }
5828     }
5829     /* push new backref */
5830     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5831 }
5832
5833 /* delete a back-reference to ourselves from the backref magic associated
5834  * with the SV we point to.
5835  */
5836
5837 void
5838 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5839 {
5840     SV **svp = NULL;
5841
5842     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5843
5844     if (SvTYPE(tsv) == SVt_PVHV) {
5845         if (SvOOK(tsv))
5846             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5847     }
5848     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5849         /* It's possible for the the last (strong) reference to tsv to have
5850            become freed *before* the last thing holding a weak reference.
5851            If both survive longer than the backreferences array, then when
5852            the referent's reference count drops to 0 and it is freed, it's
5853            not able to chase the backreferences, so they aren't NULLed.
5854
5855            For example, a CV holds a weak reference to its stash. If both the
5856            CV and the stash survive longer than the backreferences array,
5857            and the CV gets picked for the SvBREAK() treatment first,
5858            *and* it turns out that the stash is only being kept alive because
5859            of an our variable in the pad of the CV, then midway during CV
5860            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5861            It ends up pointing to the freed HV. Hence it's chased in here, and
5862            if this block wasn't here, it would hit the !svp panic just below.
5863
5864            I don't believe that "better" destruction ordering is going to help
5865            here - during global destruction there's always going to be the
5866            chance that something goes out of order. We've tried to make it
5867            foolproof before, and it only resulted in evolutionary pressure on
5868            fools. Which made us look foolish for our hubris. :-(
5869         */
5870         return;
5871     }
5872     else {
5873         MAGIC *const mg
5874             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5875         svp =  mg ? &(mg->mg_obj) : NULL;
5876     }
5877
5878     if (!svp)
5879         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5880     if (!*svp) {
5881         /* It's possible that sv is being freed recursively part way through the
5882            freeing of tsv. If this happens, the backreferences array of tsv has
5883            already been freed, and so svp will be NULL. If this is the case,
5884            we should not panic. Instead, nothing needs doing, so return.  */
5885         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5886             return;
5887         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5888                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5889     }
5890
5891     if (SvTYPE(*svp) == SVt_PVAV) {
5892 #ifdef DEBUGGING
5893         int count = 1;
5894 #endif
5895         AV * const av = (AV*)*svp;
5896         SSize_t fill;
5897         assert(!SvIS_FREED(av));
5898         fill = AvFILLp(av);
5899         assert(fill > -1);
5900         svp = AvARRAY(av);
5901         /* for an SV with N weak references to it, if all those
5902          * weak refs are deleted, then sv_del_backref will be called
5903          * N times and O(N^2) compares will be done within the backref
5904          * array. To ameliorate this potential slowness, we:
5905          * 1) make sure this code is as tight as possible;
5906          * 2) when looking for SV, look for it at both the head and tail of the
5907          *    array first before searching the rest, since some create/destroy
5908          *    patterns will cause the backrefs to be freed in order.
5909          */
5910         if (*svp == sv) {
5911             AvARRAY(av)++;
5912             AvMAX(av)--;
5913         }
5914         else {
5915             SV **p = &svp[fill];
5916             SV *const topsv = *p;
5917             if (topsv != sv) {
5918 #ifdef DEBUGGING
5919                 count = 0;
5920 #endif
5921                 while (--p > svp) {
5922                     if (*p == sv) {
5923                         /* We weren't the last entry.
5924                            An unordered list has this property that you
5925                            can take the last element off the end to fill
5926                            the hole, and it's still an unordered list :-)
5927                         */
5928                         *p = topsv;
5929 #ifdef DEBUGGING
5930                         count++;
5931 #else
5932                         break; /* should only be one */
5933 #endif
5934                     }
5935                 }
5936             }
5937         }
5938         assert(count ==1);
5939         AvFILLp(av) = fill-1;
5940     }
5941     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5942         /* freed AV; skip */
5943     }
5944     else {
5945         /* optimisation: only a single backref, stored directly */
5946         if (*svp != sv)
5947             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
5948                        (void*)*svp, (void*)sv);
5949         *svp = NULL;
5950     }
5951
5952 }
5953
5954 void
5955 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5956 {
5957     SV **svp;
5958     SV **last;
5959     bool is_array;
5960
5961     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5962
5963     if (!av)
5964         return;
5965
5966     /* after multiple passes through Perl_sv_clean_all() for a thingy
5967      * that has badly leaked, the backref array may have gotten freed,
5968      * since we only protect it against 1 round of cleanup */
5969     if (SvIS_FREED(av)) {
5970         if (PL_in_clean_all) /* All is fair */
5971             return;
5972         Perl_croak(aTHX_
5973                    "panic: magic_killbackrefs (freed backref AV/SV)");
5974     }
5975
5976
5977     is_array = (SvTYPE(av) == SVt_PVAV);
5978     if (is_array) {
5979         assert(!SvIS_FREED(av));
5980         svp = AvARRAY(av);
5981         if (svp)
5982             last = svp + AvFILLp(av);
5983     }
5984     else {
5985         /* optimisation: only a single backref, stored directly */
5986         svp = (SV**)&av;
5987         last = svp;
5988     }
5989
5990     if (svp) {
5991         while (svp <= last) {
5992             if (*svp) {
5993                 SV *const referrer = *svp;
5994                 if (SvWEAKREF(referrer)) {
5995                     /* XXX Should we check that it hasn't changed? */
5996                     assert(SvROK(referrer));
5997                     SvRV_set(referrer, 0);
5998                     SvOK_off(referrer);
5999                     SvWEAKREF_off(referrer);
6000                     SvSETMAGIC(referrer);
6001                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6002                            SvTYPE(referrer) == SVt_PVLV) {
6003                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6004                     /* You lookin' at me?  */
6005                     assert(GvSTASH(referrer));
6006                     assert(GvSTASH(referrer) == (const HV *)sv);
6007                     GvSTASH(referrer) = 0;
6008                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6009                            SvTYPE(referrer) == SVt_PVFM) {
6010                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6011                         /* You lookin' at me?  */
6012                         assert(CvSTASH(referrer));
6013                         assert(CvSTASH(referrer) == (const HV *)sv);
6014                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6015                     }
6016                     else {
6017                         assert(SvTYPE(sv) == SVt_PVGV);
6018                         /* You lookin' at me?  */
6019                         assert(CvGV(referrer));
6020                         assert(CvGV(referrer) == (const GV *)sv);
6021                         anonymise_cv_maybe(MUTABLE_GV(sv),
6022                                                 MUTABLE_CV(referrer));
6023                     }
6024
6025                 } else {
6026                     Perl_croak(aTHX_
6027                                "panic: magic_killbackrefs (flags=%"UVxf")",
6028                                (UV)SvFLAGS(referrer));
6029                 }
6030
6031                 if (is_array)
6032                     *svp = NULL;
6033             }
6034             svp++;
6035         }
6036     }
6037     if (is_array) {
6038         AvFILLp(av) = -1;
6039         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6040     }
6041     return;
6042 }
6043
6044 /*
6045 =for apidoc sv_insert
6046
6047 Inserts a string at the specified offset/length within the SV.  Similar to
6048 the Perl substr() function.  Handles get magic.
6049
6050 =for apidoc sv_insert_flags
6051
6052 Same as C<sv_insert>, but the extra C<flags> are passed to the
6053 C<SvPV_force_flags> that applies to C<bigstr>.
6054
6055 =cut
6056 */
6057
6058 void
6059 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6060 {
6061     char *big;
6062     char *mid;
6063     char *midend;
6064     char *bigend;
6065     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6066     STRLEN curlen;
6067
6068     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6069
6070     if (!bigstr)
6071         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6072     SvPV_force_flags(bigstr, curlen, flags);
6073     (void)SvPOK_only_UTF8(bigstr);
6074     if (offset + len > curlen) {
6075         SvGROW(bigstr, offset+len+1);
6076         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6077         SvCUR_set(bigstr, offset+len);
6078     }
6079
6080     SvTAINT(bigstr);
6081     i = littlelen - len;
6082     if (i > 0) {                        /* string might grow */
6083         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6084         mid = big + offset + len;
6085         midend = bigend = big + SvCUR(bigstr);
6086         bigend += i;
6087         *bigend = '\0';
6088         while (midend > mid)            /* shove everything down */
6089             *--bigend = *--midend;
6090         Move(little,big+offset,littlelen,char);
6091         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6092         SvSETMAGIC(bigstr);
6093         return;
6094     }
6095     else if (i == 0) {
6096         Move(little,SvPVX(bigstr)+offset,len,char);
6097         SvSETMAGIC(bigstr);
6098         return;
6099     }
6100
6101     big = SvPVX(bigstr);
6102     mid = big + offset;
6103     midend = mid + len;
6104     bigend = big + SvCUR(bigstr);
6105
6106     if (midend > bigend)
6107         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6108                    midend, bigend);
6109
6110     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6111         if (littlelen) {
6112             Move(little, mid, littlelen,char);
6113             mid += littlelen;
6114         }
6115         i = bigend - midend;
6116         if (i > 0) {
6117             Move(midend, mid, i,char);
6118             mid += i;
6119         }
6120         *mid = '\0';
6121         SvCUR_set(bigstr, mid - big);
6122     }
6123     else if ((i = mid - big)) { /* faster from front */
6124         midend -= littlelen;
6125         mid = midend;
6126         Move(big, midend - i, i, char);
6127         sv_chop(bigstr,midend-i);
6128         if (littlelen)
6129             Move(little, mid, littlelen,char);
6130     }
6131     else if (littlelen) {
6132         midend -= littlelen;
6133         sv_chop(bigstr,midend);
6134         Move(little,midend,littlelen,char);
6135     }
6136     else {
6137         sv_chop(bigstr,midend);
6138     }
6139     SvSETMAGIC(bigstr);
6140 }
6141
6142 /*
6143 =for apidoc sv_replace
6144
6145 Make the first argument a copy of the second, then delete the original.
6146 The target SV physically takes over ownership of the body of the source SV
6147 and inherits its flags; however, the target keeps any magic it owns,
6148 and any magic in the source is discarded.
6149 Note that this is a rather specialist SV copying operation; most of the
6150 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6151
6152 =cut
6153 */
6154
6155 void
6156 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6157 {
6158     const U32 refcnt = SvREFCNT(sv);
6159
6160     PERL_ARGS_ASSERT_SV_REPLACE;
6161
6162     SV_CHECK_THINKFIRST_COW_DROP(sv);
6163     if (SvREFCNT(nsv) != 1) {
6164         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6165                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6166     }
6167     if (SvMAGICAL(sv)) {
6168         if (SvMAGICAL(nsv))
6169             mg_free(nsv);
6170         else
6171             sv_upgrade(nsv, SVt_PVMG);
6172         SvMAGIC_set(nsv, SvMAGIC(sv));
6173         SvFLAGS(nsv) |= SvMAGICAL(sv);
6174         SvMAGICAL_off(sv);
6175         SvMAGIC_set(sv, NULL);
6176     }
6177     SvREFCNT(sv) = 0;
6178     sv_clear(sv);
6179     assert(!SvREFCNT(sv));
6180 #ifdef DEBUG_LEAKING_SCALARS
6181     sv->sv_flags  = nsv->sv_flags;
6182     sv->sv_any    = nsv->sv_any;
6183     sv->sv_refcnt = nsv->sv_refcnt;
6184     sv->sv_u      = nsv->sv_u;
6185 #else
6186     StructCopy(nsv,sv,SV);
6187 #endif
6188     if(SvTYPE(sv) == SVt_IV) {
6189         SvANY(sv)
6190             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6191     }
6192         
6193
6194 #ifdef PERL_OLD_COPY_ON_WRITE
6195     if (SvIsCOW_normal(nsv)) {
6196         /* We need to follow the pointers around the loop to make the
6197            previous SV point to sv, rather than nsv.  */
6198         SV *next;
6199         SV *current = nsv;
6200         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6201             assert(next);
6202             current = next;
6203             assert(SvPVX_const(current) == SvPVX_const(nsv));
6204         }
6205         /* Make the SV before us point to the SV after us.  */
6206         if (DEBUG_C_TEST) {
6207             PerlIO_printf(Perl_debug_log, "previous is\n");
6208             sv_dump(current);
6209             PerlIO_printf(Perl_debug_log,
6210                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6211                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6212         }
6213         SV_COW_NEXT_SV_SET(current, sv);
6214     }
6215 #endif
6216     SvREFCNT(sv) = refcnt;
6217     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6218     SvREFCNT(nsv) = 0;
6219     del_SV(nsv);
6220 }
6221
6222 /* We're about to free a GV which has a CV that refers back to us.
6223  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6224  * field) */
6225
6226 STATIC void
6227 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6228 {
6229     SV *gvname;
6230     GV *anongv;
6231
6232     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6233
6234     /* be assertive! */
6235     assert(SvREFCNT(gv) == 0);
6236     assert(isGV(gv) && isGV_with_GP(gv));
6237     assert(GvGP(gv));
6238     assert(!CvANON(cv));
6239     assert(CvGV(cv) == gv);
6240     assert(!CvNAMED(cv));
6241
6242     /* will the CV shortly be freed by gp_free() ? */
6243     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6244         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6245         return;
6246     }
6247
6248     /* if not, anonymise: */
6249     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6250                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6251                     : newSVpvn_flags( "__ANON__", 8, 0 );
6252     sv_catpvs(gvname, "::__ANON__");
6253     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6254     SvREFCNT_dec_NN(gvname);
6255
6256     CvANON_on(cv);
6257     CvCVGV_RC_on(cv);
6258     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6259 }
6260
6261
6262 /*
6263 =for apidoc sv_clear
6264
6265 Clear an SV: call any destructors, free up any memory used by the body,
6266 and free the body itself.  The SV's head is I<not> freed, although
6267 its type is set to all 1's so that it won't inadvertently be assumed
6268 to be live during global destruction etc.
6269 This function should only be called when REFCNT is zero.  Most of the time
6270 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6271 instead.
6272
6273 =cut
6274 */
6275
6276 void
6277 Perl_sv_clear(pTHX_ SV *const orig_sv)
6278 {
6279     dVAR;
6280     HV *stash;
6281     U32 type;
6282     const struct body_details *sv_type_details;
6283     SV* iter_sv = NULL;
6284     SV* next_sv = NULL;
6285     SV *sv = orig_sv;
6286     STRLEN hash_index;
6287
6288     PERL_ARGS_ASSERT_SV_CLEAR;
6289
6290     /* within this loop, sv is the SV currently being freed, and
6291      * iter_sv is the most recent AV or whatever that's being iterated
6292      * over to provide more SVs */
6293
6294     while (sv) {
6295
6296         type = SvTYPE(sv);
6297
6298         assert(SvREFCNT(sv) == 0);
6299         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6300
6301         if (type <= SVt_IV) {
6302             /* See the comment in sv.h about the collusion between this
6303              * early return and the overloading of the NULL slots in the
6304              * size table.  */
6305             if (SvROK(sv))
6306                 goto free_rv;
6307             SvFLAGS(sv) &= SVf_BREAK;
6308             SvFLAGS(sv) |= SVTYPEMASK;
6309             goto free_head;
6310         }
6311
6312         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6313
6314         if (type >= SVt_PVMG) {
6315             if (SvOBJECT(sv)) {
6316                 if (!curse(sv, 1)) goto get_next_sv;
6317                 type = SvTYPE(sv); /* destructor may have changed it */
6318             }
6319             /* Free back-references before magic, in case the magic calls
6320              * Perl code that has weak references to sv. */
6321             if (type == SVt_PVHV) {
6322                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6323                 if (SvMAGIC(sv))
6324                     mg_free(sv);
6325             }
6326             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6327                 SvREFCNT_dec(SvOURSTASH(sv));
6328             }
6329             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6330                 assert(!SvMAGICAL(sv));
6331             } else if (SvMAGIC(sv)) {
6332                 /* Free back-references before other types of magic. */
6333                 sv_unmagic(sv, PERL_MAGIC_backref);
6334                 mg_free(sv);
6335             }
6336             SvMAGICAL_off(sv);
6337             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6338                 SvREFCNT_dec(SvSTASH(sv));
6339         }
6340         switch (type) {
6341             /* case SVt_INVLIST: */
6342         case SVt_PVIO:
6343             if (IoIFP(sv) &&
6344                 IoIFP(sv) != PerlIO_stdin() &&
6345                 IoIFP(sv) != PerlIO_stdout() &&
6346                 IoIFP(sv) != PerlIO_stderr() &&
6347                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6348             {
6349                 io_close(MUTABLE_IO(sv), FALSE);
6350             }
6351             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6352                 PerlDir_close(IoDIRP(sv));
6353             IoDIRP(sv) = (DIR*)NULL;
6354             Safefree(IoTOP_NAME(sv));
6355             Safefree(IoFMT_NAME(sv));
6356             Safefree(IoBOTTOM_NAME(sv));
6357             if ((const GV *)sv == PL_statgv)
6358                 PL_statgv = NULL;
6359             goto freescalar;
6360         case SVt_REGEXP:
6361             /* FIXME for plugins */
6362           freeregexp:
6363             pregfree2((REGEXP*) sv);
6364             goto freescalar;
6365         case SVt_PVCV:
6366         case SVt_PVFM:
6367             cv_undef(MUTABLE_CV(sv));
6368             /* If we're in a stash, we don't own a reference to it.
6369              * However it does have a back reference to us, which needs to
6370              * be cleared.  */
6371             if ((stash = CvSTASH(sv)))
6372                 sv_del_backref(MUTABLE_SV(stash), sv);
6373             goto freescalar;
6374         case SVt_PVHV:
6375             if (PL_last_swash_hv == (const HV *)sv) {
6376                 PL_last_swash_hv = NULL;
6377             }
6378             if (HvTOTALKEYS((HV*)sv) > 0) {
6379                 const char *name;
6380                 /* this statement should match the one at the beginning of
6381                  * hv_undef_flags() */
6382                 if (   PL_phase != PERL_PHASE_DESTRUCT
6383                     && (name = HvNAME((HV*)sv)))
6384                 {
6385                     if (PL_stashcache) {
6386                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6387                                      SVfARG(sv)));
6388                         (void)hv_deletehek(PL_stashcache,
6389                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6390                     }
6391                     hv_name_set((HV*)sv, NULL, 0, 0);
6392                 }
6393
6394                 /* save old iter_sv in unused SvSTASH field */
6395                 assert(!SvOBJECT(sv));
6396                 SvSTASH(sv) = (HV*)iter_sv;
6397                 iter_sv = sv;
6398
6399                 /* save old hash_index in unused SvMAGIC field */
6400                 assert(!SvMAGICAL(sv));
6401                 assert(!SvMAGIC(sv));
6402                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6403                 hash_index = 0;
6404
6405                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6406                 goto get_next_sv; /* process this new sv */
6407             }
6408             /* free empty hash */
6409             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6410             assert(!HvARRAY((HV*)sv));
6411             break;
6412         case SVt_PVAV:
6413             {
6414                 AV* av = MUTABLE_AV(sv);
6415                 if (PL_comppad == av) {
6416                     PL_comppad = NULL;
6417                     PL_curpad = NULL;
6418                 }
6419                 if (AvREAL(av) && AvFILLp(av) > -1) {
6420                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6421                     /* save old iter_sv in top-most slot of AV,
6422                      * and pray that it doesn't get wiped in the meantime */
6423                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6424                     iter_sv = sv;
6425                     goto get_next_sv; /* process this new sv */
6426                 }
6427                 Safefree(AvALLOC(av));
6428             }
6429
6430             break;
6431         case SVt_PVLV:
6432             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6433                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6434                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6435                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6436             }
6437             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6438                 SvREFCNT_dec(LvTARG(sv));
6439             if (isREGEXP(sv)) goto freeregexp;
6440         case SVt_PVGV:
6441             if (isGV_with_GP(sv)) {
6442                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6443                    && HvENAME_get(stash))
6444                     mro_method_changed_in(stash);
6445                 gp_free(MUTABLE_GV(sv));
6446                 if (GvNAME_HEK(sv))
6447                     unshare_hek(GvNAME_HEK(sv));
6448                 /* If we're in a stash, we don't own a reference to it.
6449                  * However it does have a back reference to us, which
6450                  * needs to be cleared.  */
6451                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6452                         sv_del_backref(MUTABLE_SV(stash), sv);
6453             }
6454             /* FIXME. There are probably more unreferenced pointers to SVs
6455              * in the interpreter struct that we should check and tidy in
6456              * a similar fashion to this:  */
6457             /* See also S_sv_unglob, which does the same thing. */
6458             if ((const GV *)sv == PL_last_in_gv)
6459                 PL_last_in_gv = NULL;
6460             else if ((const GV *)sv == PL_statgv)
6461                 PL_statgv = NULL;
6462             else if ((const GV *)sv == PL_stderrgv)
6463                 PL_stderrgv = NULL;
6464         case SVt_PVMG:
6465         case SVt_PVNV:
6466         case SVt_PVIV:
6467         case SVt_INVLIST:
6468         case SVt_PV:
6469           freescalar:
6470             /* Don't bother with SvOOK_off(sv); as we're only going to
6471              * free it.  */
6472             if (SvOOK(sv)) {
6473                 STRLEN offset;
6474                 SvOOK_offset(sv, offset);
6475                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6476                 /* Don't even bother with turning off the OOK flag.  */
6477             }
6478             if (SvROK(sv)) {
6479             free_rv:
6480                 {
6481                     SV * const target = SvRV(sv);
6482                     if (SvWEAKREF(sv))
6483                         sv_del_backref(target, sv);
6484                     else
6485                         next_sv = target;
6486                 }
6487             }
6488 #ifdef PERL_ANY_COW
6489             else if (SvPVX_const(sv)
6490                      && !(SvTYPE(sv) == SVt_PVIO
6491                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6492             {
6493                 if (SvIsCOW(sv)) {
6494                     if (DEBUG_C_TEST) {
6495                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6496                         sv_dump(sv);
6497                     }
6498                     if (SvLEN(sv)) {
6499 # ifdef PERL_OLD_COPY_ON_WRITE
6500                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6501 # else
6502                         if (CowREFCNT(sv)) {
6503                             sv_buf_to_rw(sv);
6504                             CowREFCNT(sv)--;
6505                             sv_buf_to_ro(sv);
6506                             SvLEN_set(sv, 0);
6507                         }
6508 # endif
6509                     } else {
6510                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6511                     }
6512
6513                 }
6514 # ifdef PERL_OLD_COPY_ON_WRITE
6515                 else
6516 # endif
6517                 if (SvLEN(sv)) {
6518                     Safefree(SvPVX_mutable(sv));
6519                 }
6520             }
6521 #else
6522             else if (SvPVX_const(sv) && SvLEN(sv)
6523                      && !(SvTYPE(sv) == SVt_PVIO
6524                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6525                 Safefree(SvPVX_mutable(sv));
6526             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6527                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6528             }
6529 #endif
6530             break;
6531         case SVt_NV:
6532             break;
6533         }
6534
6535       free_body:
6536
6537         SvFLAGS(sv) &= SVf_BREAK;
6538         SvFLAGS(sv) |= SVTYPEMASK;
6539
6540         sv_type_details = bodies_by_type + type;
6541         if (sv_type_details->arena) {
6542             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6543                      &PL_body_roots[type]);
6544         }
6545         else if (sv_type_details->body_size) {
6546             safefree(SvANY(sv));
6547         }
6548
6549       free_head:
6550         /* caller is responsible for freeing the head of the original sv */
6551         if (sv != orig_sv && !SvREFCNT(sv))
6552             del_SV(sv);
6553
6554         /* grab and free next sv, if any */
6555       get_next_sv:
6556         while (1) {
6557             sv = NULL;
6558             if (next_sv) {
6559                 sv = next_sv;
6560                 next_sv = NULL;
6561             }
6562             else if (!iter_sv) {
6563                 break;
6564             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6565                 AV *const av = (AV*)iter_sv;
6566                 if (AvFILLp(av) > -1) {
6567                     sv = AvARRAY(av)[AvFILLp(av)--];
6568                 }
6569                 else { /* no more elements of current AV to free */
6570                     sv = iter_sv;
6571                     type = SvTYPE(sv);
6572                     /* restore previous value, squirrelled away */
6573                     iter_sv = AvARRAY(av)[AvMAX(av)];
6574                     Safefree(AvALLOC(av));
6575                     goto free_body;
6576                 }
6577             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6578                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6579                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6580                     /* no more elements of current HV to free */
6581                     sv = iter_sv;
6582                     type = SvTYPE(sv);
6583                     /* Restore previous values of iter_sv and hash_index,
6584                      * squirrelled away */
6585                     assert(!SvOBJECT(sv));
6586                     iter_sv = (SV*)SvSTASH(sv);
6587                     assert(!SvMAGICAL(sv));
6588                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6589 #ifdef DEBUGGING
6590                     /* perl -DA does not like rubbish in SvMAGIC. */
6591                     SvMAGIC_set(sv, 0);
6592 #endif
6593
6594                     /* free any remaining detritus from the hash struct */
6595                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6596                     assert(!HvARRAY((HV*)sv));
6597                     goto free_body;
6598                 }
6599             }
6600
6601             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6602
6603             if (!sv)
6604                 continue;
6605             if (!SvREFCNT(sv)) {
6606                 sv_free(sv);
6607                 continue;
6608             }
6609             if (--(SvREFCNT(sv)))
6610                 continue;
6611 #ifdef DEBUGGING
6612             if (SvTEMP(sv)) {
6613                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6614                          "Attempt to free temp prematurely: SV 0x%"UVxf
6615                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6616                 continue;
6617             }
6618 #endif
6619             if (SvIMMORTAL(sv)) {
6620                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6621                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6622                 continue;
6623             }
6624             break;
6625         } /* while 1 */
6626
6627     } /* while sv */
6628 }
6629
6630 /* This routine curses the sv itself, not the object referenced by sv. So
6631    sv does not have to be ROK. */
6632
6633 static bool
6634 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6635     PERL_ARGS_ASSERT_CURSE;
6636     assert(SvOBJECT(sv));
6637
6638     if (PL_defstash &&  /* Still have a symbol table? */
6639         SvDESTROYABLE(sv))
6640     {
6641         dSP;
6642         HV* stash;
6643         do {
6644           stash = SvSTASH(sv);
6645           assert(SvTYPE(stash) == SVt_PVHV);
6646           if (HvNAME(stash)) {
6647             CV* destructor = NULL;
6648             assert (SvOOK(stash));
6649             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6650             if (!destructor || HvMROMETA(stash)->destroy_gen
6651                                 != PL_sub_generation)
6652             {
6653                 GV * const gv =
6654                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6655                 if (gv) destructor = GvCV(gv);
6656                 if (!SvOBJECT(stash))
6657                 {
6658                     SvSTASH(stash) =
6659                         destructor ? (HV *)destructor : ((HV *)0)+1;
6660                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6661                         PL_sub_generation;
6662                 }
6663             }
6664             assert(!destructor || destructor == ((CV *)0)+1
6665                 || SvTYPE(destructor) == SVt_PVCV);
6666             if (destructor && destructor != ((CV *)0)+1
6667                 /* A constant subroutine can have no side effects, so
6668                    don't bother calling it.  */
6669                 && !CvCONST(destructor)
6670                 /* Don't bother calling an empty destructor or one that
6671                    returns immediately. */
6672                 && (CvISXSUB(destructor)
6673                 || (CvSTART(destructor)
6674                     && (CvSTART(destructor)->op_next->op_type
6675                                         != OP_LEAVESUB)
6676                     && (CvSTART(destructor)->op_next->op_type
6677                                         != OP_PUSHMARK
6678                         || CvSTART(destructor)->op_next->op_next->op_type
6679                                         != OP_RETURN
6680                        )
6681                    ))
6682                )
6683             {
6684                 SV* const tmpref = newRV(sv);
6685                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6686                 ENTER;
6687                 PUSHSTACKi(PERLSI_DESTROY);
6688                 EXTEND(SP, 2);
6689                 PUSHMARK(SP);
6690                 PUSHs(tmpref);
6691                 PUTBACK;
6692                 call_sv(MUTABLE_SV(destructor),
6693                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6694                 POPSTACK;
6695                 SPAGAIN;
6696                 LEAVE;
6697                 if(SvREFCNT(tmpref) < 2) {
6698                     /* tmpref is not kept alive! */
6699                     SvREFCNT(sv)--;
6700                     SvRV_set(tmpref, NULL);
6701                     SvROK_off(tmpref);
6702                 }
6703                 SvREFCNT_dec_NN(tmpref);
6704             }
6705           }
6706         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6707
6708
6709         if (check_refcnt && SvREFCNT(sv)) {
6710             if (PL_in_clean_objs)
6711                 Perl_croak(aTHX_
6712                   "DESTROY created new reference to dead object '%"HEKf"'",
6713                    HEKfARG(HvNAME_HEK(stash)));
6714             /* DESTROY gave object new lease on life */
6715             return FALSE;
6716         }
6717     }
6718
6719     if (SvOBJECT(sv)) {
6720         HV * const stash = SvSTASH(sv);
6721         /* Curse before freeing the stash, as freeing the stash could cause
6722            a recursive call into S_curse. */
6723         SvOBJECT_off(sv);       /* Curse the object. */
6724         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6725         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6726     }
6727     return TRUE;
6728 }
6729
6730 /*
6731 =for apidoc sv_newref
6732
6733 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6734 instead.
6735
6736 =cut
6737 */
6738
6739 SV *
6740 Perl_sv_newref(pTHX_ SV *const sv)
6741 {
6742     PERL_UNUSED_CONTEXT;
6743     if (sv)
6744         (SvREFCNT(sv))++;
6745     return sv;
6746 }
6747
6748 /*
6749 =for apidoc sv_free
6750
6751 Decrement an SV's reference count, and if it drops to zero, call
6752 C<sv_clear> to invoke destructors and free up any memory used by
6753 the body; finally, deallocate the SV's head itself.
6754 Normally called via a wrapper macro C<SvREFCNT_dec>.
6755
6756 =cut
6757 */
6758
6759 void
6760 Perl_sv_free(pTHX_ SV *const sv)
6761 {
6762     SvREFCNT_dec(sv);
6763 }
6764
6765
6766 /* Private helper function for SvREFCNT_dec().
6767  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6768
6769 void
6770 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6771 {
6772     dVAR;
6773
6774     PERL_ARGS_ASSERT_SV_FREE2;
6775
6776     if (LIKELY( rc == 1 )) {
6777         /* normal case */
6778         SvREFCNT(sv) = 0;
6779
6780 #ifdef DEBUGGING
6781         if (SvTEMP(sv)) {
6782             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6783                              "Attempt to free temp prematurely: SV 0x%"UVxf
6784                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6785             return;
6786         }
6787 #endif
6788         if (SvIMMORTAL(sv)) {
6789             /* make sure SvREFCNT(sv)==0 happens very seldom */
6790             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6791             return;
6792         }
6793         sv_clear(sv);
6794         if (! SvREFCNT(sv)) /* may have have been resurrected */
6795             del_SV(sv);
6796         return;
6797     }
6798
6799     /* handle exceptional cases */
6800
6801     assert(rc == 0);
6802
6803     if (SvFLAGS(sv) & SVf_BREAK)
6804         /* this SV's refcnt has been artificially decremented to
6805          * trigger cleanup */
6806         return;
6807     if (PL_in_clean_all) /* All is fair */
6808         return;
6809     if (SvIMMORTAL(sv)) {
6810         /* make sure SvREFCNT(sv)==0 happens very seldom */
6811         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6812         return;
6813     }
6814     if (ckWARN_d(WARN_INTERNAL)) {
6815 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6816         Perl_dump_sv_child(aTHX_ sv);
6817 #else
6818     #ifdef DEBUG_LEAKING_SCALARS
6819         sv_dump(sv);
6820     #endif
6821 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6822         if (PL_warnhook == PERL_WARNHOOK_FATAL
6823             || ckDEAD(packWARN(WARN_INTERNAL))) {
6824             /* Don't let Perl_warner cause us to escape our fate:  */
6825             abort();
6826         }
6827 #endif
6828         /* This may not return:  */
6829         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6830                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6831                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6832 #endif
6833     }
6834 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6835     abort();
6836 #endif
6837
6838 }
6839
6840
6841 /*
6842 =for apidoc sv_len
6843
6844 Returns the length of the string in the SV.  Handles magic and type
6845 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6846 gives raw access to the xpv_cur slot.
6847
6848 =cut
6849 */
6850
6851 STRLEN
6852 Perl_sv_len(pTHX_ SV *const sv)
6853 {
6854     STRLEN len;
6855
6856     if (!sv)
6857         return 0;
6858
6859     (void)SvPV_const(sv, len);
6860     return len;
6861 }
6862
6863 /*
6864 =for apidoc sv_len_utf8
6865
6866 Returns the number of characters in the string in an SV, counting wide
6867 UTF-8 bytes as a single character.  Handles magic and type coercion.
6868
6869 =cut
6870 */
6871
6872 /*
6873  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6874  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6875  * (Note that the mg_len is not the length of the mg_ptr field.
6876  * This allows the cache to store the character length of the string without
6877  * needing to malloc() extra storage to attach to the mg_ptr.)
6878  *
6879  */
6880
6881 STRLEN
6882 Perl_sv_len_utf8(pTHX_ SV *const sv)
6883 {
6884     if (!sv)
6885         return 0;
6886
6887     SvGETMAGIC(sv);
6888     return sv_len_utf8_nomg(sv);
6889 }
6890
6891 STRLEN
6892 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6893 {
6894     STRLEN len;
6895     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6896
6897     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6898
6899     if (PL_utf8cache && SvUTF8(sv)) {
6900             STRLEN ulen;
6901             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6902
6903             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6904                 if (mg->mg_len != -1)
6905                     ulen = mg->mg_len;
6906                 else {
6907                     /* We can use the offset cache for a headstart.
6908                        The longer value is stored in the first pair.  */
6909                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6910
6911                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6912                                                        s + len);
6913                 }
6914                 
6915                 if (PL_utf8cache < 0) {
6916                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6917                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6918                 }
6919             }
6920             else {
6921                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6922                 utf8_mg_len_cache_update(sv, &mg, ulen);
6923             }
6924             return ulen;
6925     }
6926     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6927 }
6928
6929 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6930    offset.  */
6931 static STRLEN
6932 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6933                       STRLEN *const uoffset_p, bool *const at_end)
6934 {
6935     const U8 *s = start;
6936     STRLEN uoffset = *uoffset_p;
6937
6938     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6939
6940     while (s < send && uoffset) {
6941         --uoffset;
6942         s += UTF8SKIP(s);
6943     }
6944     if (s == send) {
6945         *at_end = TRUE;
6946     }
6947     else if (s > send) {
6948         *at_end = TRUE;
6949         /* This is the existing behaviour. Possibly it should be a croak, as
6950            it's actually a bounds error  */
6951         s = send;
6952     }
6953     *uoffset_p -= uoffset;
6954     return s - start;
6955 }
6956
6957 /* Given the length of the string in both bytes and UTF-8 characters, decide
6958    whether to walk forwards or backwards to find the byte corresponding to
6959    the passed in UTF-8 offset.  */
6960 static STRLEN
6961 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6962                     STRLEN uoffset, const STRLEN uend)
6963 {
6964     STRLEN backw = uend - uoffset;
6965
6966     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6967
6968     if (uoffset < 2 * backw) {
6969         /* The assumption is that going forwards is twice the speed of going
6970            forward (that's where the 2 * backw comes from).
6971            (The real figure of course depends on the UTF-8 data.)  */
6972         const U8 *s = start;
6973
6974         while (s < send && uoffset--)
6975             s += UTF8SKIP(s);
6976         assert (s <= send);
6977         if (s > send)
6978             s = send;
6979         return s - start;
6980     }
6981
6982     while (backw--) {
6983         send--;
6984         while (UTF8_IS_CONTINUATION(*send))
6985             send--;
6986     }
6987     return send - start;
6988 }
6989
6990 /* For the string representation of the given scalar, find the byte
6991    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6992    give another position in the string, *before* the sought offset, which
6993    (which is always true, as 0, 0 is a valid pair of positions), which should
6994    help reduce the amount of linear searching.
6995    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6996    will be used to reduce the amount of linear searching. The cache will be
6997    created if necessary, and the found value offered to it for update.  */
6998 static STRLEN
6999 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7000                     const U8 *const send, STRLEN uoffset,
7001                     STRLEN uoffset0, STRLEN boffset0)
7002 {
7003     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7004     bool found = FALSE;
7005     bool at_end = FALSE;
7006
7007     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7008
7009     assert (uoffset >= uoffset0);
7010
7011     if (!uoffset)
7012         return 0;
7013
7014     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7015         && PL_utf8cache
7016         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7017                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7018         if ((*mgp)->mg_ptr) {
7019             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7020             if (cache[0] == uoffset) {
7021                 /* An exact match. */
7022                 return cache[1];
7023             }
7024             if (cache[2] == uoffset) {
7025                 /* An exact match. */
7026                 return cache[3];
7027             }
7028
7029             if (cache[0] < uoffset) {
7030                 /* The cache already knows part of the way.   */
7031                 if (cache[0] > uoffset0) {
7032                     /* The cache knows more than the passed in pair  */
7033                     uoffset0 = cache[0];
7034                     boffset0 = cache[1];
7035                 }
7036                 if ((*mgp)->mg_len != -1) {
7037                     /* And we know the end too.  */
7038                     boffset = boffset0
7039                         + sv_pos_u2b_midway(start + boffset0, send,
7040                                               uoffset - uoffset0,
7041                                               (*mgp)->mg_len - uoffset0);
7042                 } else {
7043                     uoffset -= uoffset0;
7044                     boffset = boffset0
7045                         + sv_pos_u2b_forwards(start + boffset0,
7046                                               send, &uoffset, &at_end);
7047                     uoffset += uoffset0;
7048                 }
7049             }
7050             else if (cache[2] < uoffset) {
7051                 /* We're between the two cache entries.  */
7052                 if (cache[2] > uoffset0) {
7053                     /* and the cache knows more than the passed in pair  */
7054                     uoffset0 = cache[2];
7055                     boffset0 = cache[3];
7056                 }
7057
7058                 boffset = boffset0
7059                     + sv_pos_u2b_midway(start + boffset0,
7060                                           start + cache[1],
7061                                           uoffset - uoffset0,
7062                                           cache[0] - uoffset0);
7063             } else {
7064                 boffset = boffset0
7065                     + sv_pos_u2b_midway(start + boffset0,
7066                                           start + cache[3],
7067                                           uoffset - uoffset0,
7068                                           cache[2] - uoffset0);
7069             }
7070             found = TRUE;
7071         }
7072         else if ((*mgp)->mg_len != -1) {
7073             /* If we can take advantage of a passed in offset, do so.  */
7074             /* In fact, offset0 is either 0, or less than offset, so don't
7075                need to worry about the other possibility.  */
7076             boffset = boffset0
7077                 + sv_pos_u2b_midway(start + boffset0, send,
7078                                       uoffset - uoffset0,
7079                                       (*mgp)->mg_len - uoffset0);
7080             found = TRUE;
7081         }
7082     }
7083
7084     if (!found || PL_utf8cache < 0) {
7085         STRLEN real_boffset;
7086         uoffset -= uoffset0;
7087         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7088                                                       send, &uoffset, &at_end);
7089         uoffset += uoffset0;
7090
7091         if (found && PL_utf8cache < 0)
7092             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7093                                        real_boffset, sv);
7094         boffset = real_boffset;
7095     }
7096
7097     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7098         if (at_end)
7099             utf8_mg_len_cache_update(sv, mgp, uoffset);
7100         else
7101             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7102     }
7103     return boffset;
7104 }
7105
7106
7107 /*
7108 =for apidoc sv_pos_u2b_flags
7109
7110 Converts the offset from a count of UTF-8 chars from
7111 the start of the string, to a count of the equivalent number of bytes; if
7112 lenp is non-zero, it does the same to lenp, but this time starting from
7113 the offset, rather than from the start
7114 of the string.  Handles type coercion.
7115 I<flags> is passed to C<SvPV_flags>, and usually should be
7116 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7117
7118 =cut
7119 */
7120
7121 /*
7122  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7123  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7124  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7125  *
7126  */
7127
7128 STRLEN
7129 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7130                       U32 flags)
7131 {
7132     const U8 *start;
7133     STRLEN len;
7134     STRLEN boffset;
7135
7136     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7137
7138     start = (U8*)SvPV_flags(sv, len, flags);
7139     if (len) {
7140         const U8 * const send = start + len;
7141         MAGIC *mg = NULL;
7142         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7143
7144         if (lenp
7145             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7146                         is 0, and *lenp is already set to that.  */) {
7147             /* Convert the relative offset to absolute.  */
7148             const STRLEN uoffset2 = uoffset + *lenp;
7149             const STRLEN boffset2
7150                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7151                                       uoffset, boffset) - boffset;
7152
7153             *lenp = boffset2;
7154         }
7155     } else {
7156         if (lenp)
7157             *lenp = 0;
7158         boffset = 0;
7159     }
7160
7161     return boffset;
7162 }
7163
7164 /*
7165 =for apidoc sv_pos_u2b
7166
7167 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7168 the start of the string, to a count of the equivalent number of bytes; if
7169 lenp is non-zero, it does the same to lenp, but this time starting from
7170 the offset, rather than from the start of the string.  Handles magic and
7171 type coercion.
7172
7173 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7174 than 2Gb.
7175
7176 =cut
7177 */
7178
7179 /*
7180  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7181  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7182  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7183  *
7184  */
7185
7186 /* This function is subject to size and sign problems */
7187
7188 void
7189 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7190 {
7191     PERL_ARGS_ASSERT_SV_POS_U2B;
7192
7193     if (lenp) {
7194         STRLEN ulen = (STRLEN)*lenp;
7195         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7196                                          SV_GMAGIC|SV_CONST_RETURN);
7197         *lenp = (I32)ulen;
7198     } else {
7199         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7200                                          SV_GMAGIC|SV_CONST_RETURN);
7201     }
7202 }
7203
7204 static void
7205 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7206                            const STRLEN ulen)
7207 {
7208     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7209     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7210         return;
7211
7212     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7213                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7214         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7215     }
7216     assert(*mgp);
7217
7218     (*mgp)->mg_len = ulen;
7219 }
7220
7221 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7222    byte length pairing. The (byte) length of the total SV is passed in too,
7223    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7224    may not have updated SvCUR, so we can't rely on reading it directly.
7225
7226    The proffered utf8/byte length pairing isn't used if the cache already has
7227    two pairs, and swapping either for the proffered pair would increase the
7228    RMS of the intervals between known byte offsets.
7229
7230    The cache itself consists of 4 STRLEN values
7231    0: larger UTF-8 offset
7232    1: corresponding byte offset
7233    2: smaller UTF-8 offset
7234    3: corresponding byte offset
7235
7236    Unused cache pairs have the value 0, 0.
7237    Keeping the cache "backwards" means that the invariant of
7238    cache[0] >= cache[2] is maintained even with empty slots, which means that
7239    the code that uses it doesn't need to worry if only 1 entry has actually
7240    been set to non-zero.  It also makes the "position beyond the end of the
7241    cache" logic much simpler, as the first slot is always the one to start
7242    from.   
7243 */
7244 static void
7245 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7246                            const STRLEN utf8, const STRLEN blen)
7247 {
7248     STRLEN *cache;
7249
7250     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7251
7252     if (SvREADONLY(sv))
7253         return;
7254
7255     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7256                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7257         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7258                            0);
7259         (*mgp)->mg_len = -1;
7260     }
7261     assert(*mgp);
7262
7263     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7264         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7265         (*mgp)->mg_ptr = (char *) cache;
7266     }
7267     assert(cache);
7268
7269     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7270         /* SvPOKp() because it's possible that sv has string overloading, and
7271            therefore is a reference, hence SvPVX() is actually a pointer.
7272            This cures the (very real) symptoms of RT 69422, but I'm not actually
7273            sure whether we should even be caching the results of UTF-8
7274            operations on overloading, given that nothing stops overloading
7275            returning a different value every time it's called.  */
7276         const U8 *start = (const U8 *) SvPVX_const(sv);
7277         const STRLEN realutf8 = utf8_length(start, start + byte);
7278
7279         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7280                                    sv);
7281     }
7282
7283     /* Cache is held with the later position first, to simplify the code
7284        that deals with unbounded ends.  */
7285        
7286     ASSERT_UTF8_CACHE(cache);
7287     if (cache[1] == 0) {
7288         /* Cache is totally empty  */
7289         cache[0] = utf8;
7290         cache[1] = byte;
7291     } else if (cache[3] == 0) {
7292         if (byte > cache[1]) {
7293             /* New one is larger, so goes first.  */
7294             cache[2] = cache[0];
7295             cache[3] = cache[1];
7296             cache[0] = utf8;
7297             cache[1] = byte;
7298         } else {
7299             cache[2] = utf8;
7300             cache[3] = byte;
7301         }
7302     } else {
7303 #define THREEWAY_SQUARE(a,b,c,d) \
7304             ((float)((d) - (c))) * ((float)((d) - (c))) \
7305             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7306                + ((float)((b) - (a))) * ((float)((b) - (a)))
7307
7308         /* Cache has 2 slots in use, and we know three potential pairs.
7309            Keep the two that give the lowest RMS distance. Do the
7310            calculation in bytes simply because we always know the byte
7311            length.  squareroot has the same ordering as the positive value,
7312            so don't bother with the actual square root.  */
7313         if (byte > cache[1]) {
7314             /* New position is after the existing pair of pairs.  */
7315             const float keep_earlier
7316                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7317             const float keep_later
7318                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7319
7320             if (keep_later < keep_earlier) {
7321                 cache[2] = cache[0];
7322                 cache[3] = cache[1];
7323                 cache[0] = utf8;
7324                 cache[1] = byte;
7325             }
7326             else {
7327                 cache[0] = utf8;
7328                 cache[1] = byte;
7329             }
7330         }
7331         else if (byte > cache[3]) {
7332             /* New position is between the existing pair of pairs.  */
7333             const float keep_earlier
7334                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7335             const float keep_later
7336                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7337
7338             if (keep_later < keep_earlier) {
7339                 cache[2] = utf8;
7340                 cache[3] = byte;
7341             }
7342             else {
7343                 cache[0] = utf8;
7344                 cache[1] = byte;
7345             }
7346         }
7347         else {
7348             /* New position is before the existing pair of pairs.  */
7349             const float keep_earlier
7350                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7351             const float keep_later
7352                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7353
7354             if (keep_later < keep_earlier) {
7355                 cache[2] = utf8;
7356                 cache[3] = byte;
7357             }
7358             else {
7359                 cache[0] = cache[2];
7360                 cache[1] = cache[3];
7361                 cache[2] = utf8;
7362                 cache[3] = byte;
7363             }
7364         }
7365     }
7366     ASSERT_UTF8_CACHE(cache);
7367 }
7368
7369 /* We already know all of the way, now we may be able to walk back.  The same
7370    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7371    backward is half the speed of walking forward. */
7372 static STRLEN
7373 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7374                     const U8 *end, STRLEN endu)
7375 {
7376     const STRLEN forw = target - s;
7377     STRLEN backw = end - target;
7378
7379     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7380
7381     if (forw < 2 * backw) {
7382         return utf8_length(s, target);
7383     }
7384
7385     while (end > target) {
7386         end--;
7387         while (UTF8_IS_CONTINUATION(*end)) {
7388             end--;
7389         }
7390         endu--;
7391     }
7392     return endu;
7393 }
7394
7395 /*
7396 =for apidoc sv_pos_b2u_flags
7397
7398 Converts the offset from a count of bytes from the start of the string, to
7399 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7400 I<flags> is passed to C<SvPV_flags>, and usually should be
7401 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7402
7403 =cut
7404 */
7405
7406 /*
7407  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7408  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7409  * and byte offsets.
7410  *
7411  */
7412 STRLEN
7413 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7414 {
7415     const U8* s;
7416     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7417     STRLEN blen;
7418     MAGIC* mg = NULL;
7419     const U8* send;
7420     bool found = FALSE;
7421
7422     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7423
7424     s = (const U8*)SvPV_flags(sv, blen, flags);
7425
7426     if (blen < offset)
7427         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7428                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7429
7430     send = s + offset;
7431
7432     if (!SvREADONLY(sv)
7433         && PL_utf8cache
7434         && SvTYPE(sv) >= SVt_PVMG
7435         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7436     {
7437         if (mg->mg_ptr) {
7438             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7439             if (cache[1] == offset) {
7440                 /* An exact match. */
7441                 return cache[0];
7442             }
7443             if (cache[3] == offset) {
7444                 /* An exact match. */
7445                 return cache[2];
7446             }
7447
7448             if (cache[1] < offset) {
7449                 /* We already know part of the way. */
7450                 if (mg->mg_len != -1) {
7451                     /* Actually, we know the end too.  */
7452                     len = cache[0]
7453                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7454                                               s + blen, mg->mg_len - cache[0]);
7455                 } else {
7456                     len = cache[0] + utf8_length(s + cache[1], send);
7457                 }
7458             }
7459             else if (cache[3] < offset) {
7460                 /* We're between the two cached pairs, so we do the calculation
7461                    offset by the byte/utf-8 positions for the earlier pair,
7462                    then add the utf-8 characters from the string start to
7463                    there.  */
7464                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7465                                           s + cache[1], cache[0] - cache[2])
7466                     + cache[2];
7467
7468             }
7469             else { /* cache[3] > offset */
7470                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7471                                           cache[2]);
7472
7473             }
7474             ASSERT_UTF8_CACHE(cache);
7475             found = TRUE;
7476         } else if (mg->mg_len != -1) {
7477             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7478             found = TRUE;
7479         }
7480     }
7481     if (!found || PL_utf8cache < 0) {
7482         const STRLEN real_len = utf8_length(s, send);
7483
7484         if (found && PL_utf8cache < 0)
7485             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7486         len = real_len;
7487     }
7488
7489     if (PL_utf8cache) {
7490         if (blen == offset)
7491             utf8_mg_len_cache_update(sv, &mg, len);
7492         else
7493             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7494     }
7495
7496     return len;
7497 }
7498
7499 /*
7500 =for apidoc sv_pos_b2u
7501
7502 Converts the value pointed to by offsetp from a count of bytes from the
7503 start of the string, to a count of the equivalent number of UTF-8 chars.
7504 Handles magic and type coercion.
7505
7506 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7507 longer than 2Gb.
7508
7509 =cut
7510 */
7511
7512 /*
7513  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7514  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7515  * byte offsets.
7516  *
7517  */
7518 void
7519 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7520 {
7521     PERL_ARGS_ASSERT_SV_POS_B2U;
7522
7523     if (!sv)
7524         return;
7525
7526     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7527                                      SV_GMAGIC|SV_CONST_RETURN);
7528 }
7529
7530 static void
7531 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7532                              STRLEN real, SV *const sv)
7533 {
7534     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7535
7536     /* As this is debugging only code, save space by keeping this test here,
7537        rather than inlining it in all the callers.  */
7538     if (from_cache == real)
7539         return;
7540
7541     /* Need to turn the assertions off otherwise we may recurse infinitely
7542        while printing error messages.  */
7543     SAVEI8(PL_utf8cache);
7544     PL_utf8cache = 0;
7545     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7546                func, (UV) from_cache, (UV) real, SVfARG(sv));
7547 }
7548
7549 /*
7550 =for apidoc sv_eq
7551
7552 Returns a boolean indicating whether the strings in the two SVs are
7553 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7554 coerce its args to strings if necessary.
7555
7556 =for apidoc sv_eq_flags
7557
7558 Returns a boolean indicating whether the strings in the two SVs are
7559 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7560 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7561
7562 =cut
7563 */
7564
7565 I32
7566 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7567 {
7568     const char *pv1;
7569     STRLEN cur1;
7570     const char *pv2;
7571     STRLEN cur2;
7572     I32  eq     = 0;
7573     SV* svrecode = NULL;
7574
7575     if (!sv1) {
7576         pv1 = "";
7577         cur1 = 0;
7578     }
7579     else {
7580         /* if pv1 and pv2 are the same, second SvPV_const call may
7581          * invalidate pv1 (if we are handling magic), so we may need to
7582          * make a copy */
7583         if (sv1 == sv2 && flags & SV_GMAGIC
7584          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7585             pv1 = SvPV_const(sv1, cur1);
7586             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7587         }
7588         pv1 = SvPV_flags_const(sv1, cur1, flags);
7589     }
7590
7591     if (!sv2){
7592         pv2 = "";
7593         cur2 = 0;
7594     }
7595     else
7596         pv2 = SvPV_flags_const(sv2, cur2, flags);
7597
7598     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7599         /* Differing utf8ness.
7600          * Do not UTF8size the comparands as a side-effect. */
7601          if (PL_encoding) {
7602               if (SvUTF8(sv1)) {
7603                    svrecode = newSVpvn(pv2, cur2);
7604                    sv_recode_to_utf8(svrecode, PL_encoding);
7605                    pv2 = SvPV_const(svrecode, cur2);
7606               }
7607               else {
7608                    svrecode = newSVpvn(pv1, cur1);
7609                    sv_recode_to_utf8(svrecode, PL_encoding);
7610                    pv1 = SvPV_const(svrecode, cur1);
7611               }
7612               /* Now both are in UTF-8. */
7613               if (cur1 != cur2) {
7614                    SvREFCNT_dec_NN(svrecode);
7615                    return FALSE;
7616               }
7617          }
7618          else {
7619               if (SvUTF8(sv1)) {
7620                   /* sv1 is the UTF-8 one  */
7621                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7622                                         (const U8*)pv1, cur1) == 0;
7623               }
7624               else {
7625                   /* sv2 is the UTF-8 one  */
7626                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7627                                         (const U8*)pv2, cur2) == 0;
7628               }
7629          }
7630     }
7631
7632     if (cur1 == cur2)
7633         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7634         
7635     SvREFCNT_dec(svrecode);
7636
7637     return eq;
7638 }
7639
7640 /*
7641 =for apidoc sv_cmp
7642
7643 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7644 string in C<sv1> is less than, equal to, or greater than the string in
7645 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7646 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7647
7648 =for apidoc sv_cmp_flags
7649
7650 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7651 string in C<sv1> is less than, equal to, or greater than the string in
7652 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7653 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7654 also C<sv_cmp_locale_flags>.
7655
7656 =cut
7657 */
7658
7659 I32
7660 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7661 {
7662     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7663 }
7664
7665 I32
7666 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7667                   const U32 flags)
7668 {
7669     STRLEN cur1, cur2;
7670     const char *pv1, *pv2;
7671     I32  cmp;
7672     SV *svrecode = NULL;
7673
7674     if (!sv1) {
7675         pv1 = "";
7676         cur1 = 0;
7677     }
7678     else
7679         pv1 = SvPV_flags_const(sv1, cur1, flags);
7680
7681     if (!sv2) {
7682         pv2 = "";
7683         cur2 = 0;
7684     }
7685     else
7686         pv2 = SvPV_flags_const(sv2, cur2, flags);
7687
7688     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7689         /* Differing utf8ness.
7690          * Do not UTF8size the comparands as a side-effect. */
7691         if (SvUTF8(sv1)) {
7692             if (PL_encoding) {
7693                  svrecode = newSVpvn(pv2, cur2);
7694                  sv_recode_to_utf8(svrecode, PL_encoding);
7695                  pv2 = SvPV_const(svrecode, cur2);
7696             }
7697             else {
7698                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7699                                                    (const U8*)pv1, cur1);
7700                 return retval ? retval < 0 ? -1 : +1 : 0;
7701             }
7702         }
7703         else {
7704             if (PL_encoding) {
7705                  svrecode = newSVpvn(pv1, cur1);
7706                  sv_recode_to_utf8(svrecode, PL_encoding);
7707                  pv1 = SvPV_const(svrecode, cur1);
7708             }
7709             else {
7710                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7711                                                   (const U8*)pv2, cur2);
7712                 return retval ? retval < 0 ? -1 : +1 : 0;
7713             }
7714         }
7715     }
7716
7717     if (!cur1) {
7718         cmp = cur2 ? -1 : 0;
7719     } else if (!cur2) {
7720         cmp = 1;
7721     } else {
7722         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7723
7724         if (retval) {
7725             cmp = retval < 0 ? -1 : 1;
7726         } else if (cur1 == cur2) {
7727             cmp = 0;
7728         } else {
7729             cmp = cur1 < cur2 ? -1 : 1;
7730         }
7731     }
7732
7733     SvREFCNT_dec(svrecode);
7734
7735     return cmp;
7736 }
7737
7738 /*
7739 =for apidoc sv_cmp_locale
7740
7741 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7742 'use bytes' aware, handles get magic, and will coerce its args to strings
7743 if necessary.  See also C<sv_cmp>.
7744
7745 =for apidoc sv_cmp_locale_flags
7746
7747 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7748 'use bytes' aware and will coerce its args to strings if necessary.  If the
7749 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7750
7751 =cut
7752 */
7753
7754 I32
7755 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7756 {
7757     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7758 }
7759
7760 I32
7761 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7762                          const U32 flags)
7763 {
7764 #ifdef USE_LOCALE_COLLATE
7765
7766     char *pv1, *pv2;
7767     STRLEN len1, len2;
7768     I32 retval;
7769
7770     if (PL_collation_standard)
7771         goto raw_compare;
7772
7773     len1 = 0;
7774     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7775     len2 = 0;
7776     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7777
7778     if (!pv1 || !len1) {
7779         if (pv2 && len2)
7780             return -1;
7781         else
7782             goto raw_compare;
7783     }
7784     else {
7785         if (!pv2 || !len2)
7786             return 1;
7787     }
7788
7789     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7790
7791     if (retval)
7792         return retval < 0 ? -1 : 1;
7793
7794     /*
7795      * When the result of collation is equality, that doesn't mean
7796      * that there are no differences -- some locales exclude some
7797      * characters from consideration.  So to avoid false equalities,
7798      * we use the raw string as a tiebreaker.
7799      */
7800
7801   raw_compare:
7802     /* FALLTHROUGH */
7803
7804 #else
7805     PERL_UNUSED_ARG(flags);
7806 #endif /* USE_LOCALE_COLLATE */
7807
7808     return sv_cmp(sv1, sv2);
7809 }
7810
7811
7812 #ifdef USE_LOCALE_COLLATE
7813
7814 /*
7815 =for apidoc sv_collxfrm
7816
7817 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7818 C<sv_collxfrm_flags>.
7819
7820 =for apidoc sv_collxfrm_flags
7821
7822 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7823 flags contain SV_GMAGIC, it handles get-magic.
7824
7825 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7826 scalar data of the variable, but transformed to such a format that a normal
7827 memory comparison can be used to compare the data according to the locale
7828 settings.
7829
7830 =cut
7831 */
7832
7833 char *
7834 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7835 {
7836     MAGIC *mg;
7837
7838     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7839
7840     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7841     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7842         const char *s;
7843         char *xf;
7844         STRLEN len, xlen;
7845
7846         if (mg)
7847             Safefree(mg->mg_ptr);
7848         s = SvPV_flags_const(sv, len, flags);
7849         if ((xf = mem_collxfrm(s, len, &xlen))) {
7850             if (! mg) {
7851 #ifdef PERL_OLD_COPY_ON_WRITE
7852                 if (SvIsCOW(sv))
7853                     sv_force_normal_flags(sv, 0);
7854 #endif
7855                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7856                                  0, 0);
7857                 assert(mg);
7858             }
7859             mg->mg_ptr = xf;
7860             mg->mg_len = xlen;
7861         }
7862         else {
7863             if (mg) {
7864                 mg->mg_ptr = NULL;
7865                 mg->mg_len = -1;
7866             }
7867         }
7868     }
7869     if (mg && mg->mg_ptr) {
7870         *nxp = mg->mg_len;
7871         return mg->mg_ptr + sizeof(PL_collation_ix);
7872     }
7873     else {
7874         *nxp = 0;
7875         return NULL;
7876     }
7877 }
7878
7879 #endif /* USE_LOCALE_COLLATE */
7880
7881 static char *
7882 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7883 {
7884     SV * const tsv = newSV(0);
7885     ENTER;
7886     SAVEFREESV(tsv);
7887     sv_gets(tsv, fp, 0);
7888     sv_utf8_upgrade_nomg(tsv);
7889     SvCUR_set(sv,append);
7890     sv_catsv(sv,tsv);
7891     LEAVE;
7892     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7893 }
7894
7895 static char *
7896 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7897 {
7898     SSize_t bytesread;
7899     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7900       /* Grab the size of the record we're getting */
7901     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7902     
7903     /* Go yank in */
7904 #ifdef __VMS
7905     int fd;
7906     Stat_t st;
7907
7908     /* With a true, record-oriented file on VMS, we need to use read directly
7909      * to ensure that we respect RMS record boundaries.  The user is responsible
7910      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7911      * record size) field.  N.B. This is likely to produce invalid results on
7912      * varying-width character data when a record ends mid-character.
7913      */
7914     fd = PerlIO_fileno(fp);
7915     if (fd != -1
7916         && PerlLIO_fstat(fd, &st) == 0
7917         && (st.st_fab_rfm == FAB$C_VAR
7918             || st.st_fab_rfm == FAB$C_VFC
7919             || st.st_fab_rfm == FAB$C_FIX)) {
7920
7921         bytesread = PerlLIO_read(fd, buffer, recsize);
7922     }
7923     else /* in-memory file from PerlIO::Scalar
7924           * or not a record-oriented file
7925           */
7926 #endif
7927     {
7928         bytesread = PerlIO_read(fp, buffer, recsize);
7929
7930         /* At this point, the logic in sv_get() means that sv will
7931            be treated as utf-8 if the handle is utf8.
7932         */
7933         if (PerlIO_isutf8(fp) && bytesread > 0) {
7934             char *bend = buffer + bytesread;
7935             char *bufp = buffer;
7936             size_t charcount = 0;
7937             bool charstart = TRUE;
7938             STRLEN skip = 0;
7939
7940             while (charcount < recsize) {
7941                 /* count accumulated characters */
7942                 while (bufp < bend) {
7943                     if (charstart) {
7944                         skip = UTF8SKIP(bufp);
7945                     }
7946                     if (bufp + skip > bend) {
7947                         /* partial at the end */
7948                         charstart = FALSE;
7949                         break;
7950                     }
7951                     else {
7952                         ++charcount;
7953                         bufp += skip;
7954                         charstart = TRUE;
7955                     }
7956                 }
7957
7958                 if (charcount < recsize) {
7959                     STRLEN readsize;
7960                     STRLEN bufp_offset = bufp - buffer;
7961                     SSize_t morebytesread;
7962
7963                     /* originally I read enough to fill any incomplete
7964                        character and the first byte of the next
7965                        character if needed, but if there's many
7966                        multi-byte encoded characters we're going to be
7967                        making a read call for every character beyond
7968                        the original read size.
7969
7970                        So instead, read the rest of the character if
7971                        any, and enough bytes to match at least the
7972                        start bytes for each character we're going to
7973                        read.
7974                     */
7975                     if (charstart)
7976                         readsize = recsize - charcount;
7977                     else 
7978                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7979                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7980                     bend = buffer + bytesread;
7981                     morebytesread = PerlIO_read(fp, bend, readsize);
7982                     if (morebytesread <= 0) {
7983                         /* we're done, if we still have incomplete
7984                            characters the check code in sv_gets() will
7985                            warn about them.
7986
7987                            I'd originally considered doing
7988                            PerlIO_ungetc() on all but the lead
7989                            character of the incomplete character, but
7990                            read() doesn't do that, so I don't.
7991                         */
7992                         break;
7993                     }
7994
7995                     /* prepare to scan some more */
7996                     bytesread += morebytesread;
7997                     bend = buffer + bytesread;
7998                     bufp = buffer + bufp_offset;
7999                 }
8000             }
8001         }
8002     }
8003
8004     if (bytesread < 0)
8005         bytesread = 0;
8006     SvCUR_set(sv, bytesread + append);
8007     buffer[bytesread] = '\0';
8008     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8009 }
8010
8011 /*
8012 =for apidoc sv_gets
8013
8014 Get a line from the filehandle and store it into the SV, optionally
8015 appending to the currently-stored string.  If C<append> is not 0, the
8016 line is appended to the SV instead of overwriting it.  C<append> should
8017 be set to the byte offset that the appended string should start at
8018 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8019
8020 =cut
8021 */
8022
8023 char *
8024 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8025 {
8026     const char *rsptr;
8027     STRLEN rslen;
8028     STDCHAR rslast;
8029     STDCHAR *bp;
8030     SSize_t cnt;
8031     int i = 0;
8032     int rspara = 0;
8033
8034     PERL_ARGS_ASSERT_SV_GETS;
8035
8036     if (SvTHINKFIRST(sv))
8037         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8038     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8039        from <>.
8040        However, perlbench says it's slower, because the existing swipe code
8041        is faster than copy on write.
8042        Swings and roundabouts.  */
8043     SvUPGRADE(sv, SVt_PV);
8044
8045     if (append) {
8046         /* line is going to be appended to the existing buffer in the sv */
8047         if (PerlIO_isutf8(fp)) {
8048             if (!SvUTF8(sv)) {
8049                 sv_utf8_upgrade_nomg(sv);
8050                 sv_pos_u2b(sv,&append,0);
8051             }
8052         } else if (SvUTF8(sv)) {
8053             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8054         }
8055     }
8056
8057     SvPOK_only(sv);
8058     if (!append) {
8059         /* not appending - "clear" the string by setting SvCUR to 0,
8060          * the pv is still avaiable. */
8061         SvCUR_set(sv,0);
8062     }
8063     if (PerlIO_isutf8(fp))
8064         SvUTF8_on(sv);
8065
8066     if (IN_PERL_COMPILETIME) {
8067         /* we always read code in line mode */
8068         rsptr = "\n";
8069         rslen = 1;
8070     }
8071     else if (RsSNARF(PL_rs)) {
8072         /* If it is a regular disk file use size from stat() as estimate
8073            of amount we are going to read -- may result in mallocing
8074            more memory than we really need if the layers below reduce
8075            the size we read (e.g. CRLF or a gzip layer).
8076          */
8077         Stat_t st;
8078         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8079             const Off_t offset = PerlIO_tell(fp);
8080             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8081 #ifdef PERL_NEW_COPY_ON_WRITE
8082                 /* Add an extra byte for the sake of copy-on-write's
8083                  * buffer reference count. */
8084                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8085 #else
8086                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8087 #endif
8088             }
8089         }
8090         rsptr = NULL;
8091         rslen = 0;
8092     }
8093     else if (RsRECORD(PL_rs)) {
8094         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8095     }
8096     else if (RsPARA(PL_rs)) {
8097         rsptr = "\n\n";
8098         rslen = 2;
8099         rspara = 1;
8100     }
8101     else {
8102         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8103         if (PerlIO_isutf8(fp)) {
8104             rsptr = SvPVutf8(PL_rs, rslen);
8105         }
8106         else {
8107             if (SvUTF8(PL_rs)) {
8108                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8109                     Perl_croak(aTHX_ "Wide character in $/");
8110                 }
8111             }
8112             /* extract the raw pointer to the record separator */
8113             rsptr = SvPV_const(PL_rs, rslen);
8114         }
8115     }
8116
8117     /* rslast is the last character in the record separator
8118      * note we don't use rslast except when rslen is true, so the
8119      * null assign is a placeholder. */
8120     rslast = rslen ? rsptr[rslen - 1] : '\0';
8121
8122     if (rspara) {               /* have to do this both before and after */
8123         do {                    /* to make sure file boundaries work right */
8124             if (PerlIO_eof(fp))
8125                 return 0;
8126             i = PerlIO_getc(fp);
8127             if (i != '\n') {
8128                 if (i == -1)
8129                     return 0;
8130                 PerlIO_ungetc(fp,i);
8131                 break;
8132             }
8133         } while (i != EOF);
8134     }
8135
8136     /* See if we know enough about I/O mechanism to cheat it ! */
8137
8138     /* This used to be #ifdef test - it is made run-time test for ease
8139        of abstracting out stdio interface. One call should be cheap
8140        enough here - and may even be a macro allowing compile
8141        time optimization.
8142      */
8143
8144     if (PerlIO_fast_gets(fp)) {
8145     /*
8146      * We can do buffer based IO operations on this filehandle.
8147      *
8148      * This means we can bypass a lot of subcalls and process
8149      * the buffer directly, it also means we know the upper bound
8150      * on the amount of data we might read of the current buffer
8151      * into our sv. Knowing this allows us to preallocate the pv
8152      * to be able to hold that maximum, which allows us to simplify
8153      * a lot of logic. */
8154
8155     /*
8156      * We're going to steal some values from the stdio struct
8157      * and put EVERYTHING in the innermost loop into registers.
8158      */
8159     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8160     STRLEN bpx;         /* length of the data in the target sv
8161                            used to fix pointers after a SvGROW */
8162     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8163                            of data left in the read-ahead buffer.
8164                            If 0 then the pv buffer can hold the full
8165                            amount left, otherwise this is the amount it
8166                            can hold. */
8167
8168 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8169     /* An ungetc()d char is handled separately from the regular
8170      * buffer, so we getc() it back out and stuff it in the buffer.
8171      */
8172     i = PerlIO_getc(fp);
8173     if (i == EOF) return 0;
8174     *(--((*fp)->_ptr)) = (unsigned char) i;
8175     (*fp)->_cnt++;
8176 #endif
8177
8178     /* Here is some breathtakingly efficient cheating */
8179
8180     /* When you read the following logic resist the urge to think
8181      * of record separators that are 1 byte long. They are an
8182      * uninteresting special (simple) case.
8183      *
8184      * Instead think of record separators which are at least 2 bytes
8185      * long, and keep in mind that we need to deal with such
8186      * separators when they cross a read-ahead buffer boundary.
8187      *
8188      * Also consider that we need to gracefully deal with separators
8189      * that may be longer than a single read ahead buffer.
8190      *
8191      * Lastly do not forget we want to copy the delimiter as well. We
8192      * are copying all data in the file _up_to_and_including_ the separator
8193      * itself.
8194      *
8195      * Now that you have all that in mind here is what is happening below:
8196      *
8197      * 1. When we first enter the loop we do some memory book keeping to see
8198      * how much free space there is in the target SV. (This sub assumes that
8199      * it is operating on the same SV most of the time via $_ and that it is
8200      * going to be able to reuse the same pv buffer each call.) If there is
8201      * "enough" room then we set "shortbuffered" to how much space there is
8202      * and start reading forward.
8203      *
8204      * 2. When we scan forward we copy from the read-ahead buffer to the target
8205      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8206      * and the end of the of pv, as well as for the "rslast", which is the last
8207      * char of the separator.
8208      *
8209      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8210      * (which has a "complete" record up to the point we saw rslast) and check
8211      * it to see if it matches the separator. If it does we are done. If it doesn't
8212      * we continue on with the scan/copy.
8213      *
8214      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8215      * the IO system to read the next buffer. We do this by doing a getc(), which
8216      * returns a single char read (or EOF), and prefills the buffer, and also
8217      * allows us to find out how full the buffer is.  We use this information to
8218      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8219      * the returned single char into the target sv, and then go back into scan
8220      * forward mode.
8221      *
8222      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8223      * remaining space in the read-buffer.
8224      *
8225      * Note that this code despite its twisty-turny nature is pretty darn slick.
8226      * It manages single byte separators, multi-byte cross boundary separators,
8227      * and cross-read-buffer separators cleanly and efficiently at the cost
8228      * of potentially greatly overallocating the target SV.
8229      *
8230      * Yves
8231      */
8232
8233
8234     /* get the number of bytes remaining in the read-ahead buffer
8235      * on first call on a given fp this will return 0.*/
8236     cnt = PerlIO_get_cnt(fp);
8237
8238     /* make sure we have the room */
8239     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8240         /* Not room for all of it
8241            if we are looking for a separator and room for some
8242          */
8243         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8244             /* just process what we have room for */
8245             shortbuffered = cnt - SvLEN(sv) + append + 1;
8246             cnt -= shortbuffered;
8247         }
8248         else {
8249             /* ensure that the target sv has enough room to hold
8250              * the rest of the read-ahead buffer */
8251             shortbuffered = 0;
8252             /* remember that cnt can be negative */
8253             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8254         }
8255     }
8256     else {
8257         /* we have enough room to hold the full buffer, lets scream */
8258         shortbuffered = 0;
8259     }
8260
8261     /* extract the pointer to sv's string buffer, offset by append as necessary */
8262     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8263     /* extract the point to the read-ahead buffer */
8264     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8265
8266     /* some trace debug output */
8267     DEBUG_P(PerlIO_printf(Perl_debug_log,
8268         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8269     DEBUG_P(PerlIO_printf(Perl_debug_log,
8270         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8271          UVuf"\n",
8272                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8273                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8274
8275     for (;;) {
8276       screamer:
8277         /* if there is stuff left in the read-ahead buffer */
8278         if (cnt > 0) {
8279             /* if there is a separator */
8280             if (rslen) {
8281                 /* loop until we hit the end of the read-ahead buffer */
8282                 while (cnt > 0) {                    /* this     |  eat */
8283                     /* scan forward copying and searching for rslast as we go */
8284                     cnt--;
8285                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8286                         goto thats_all_folks;        /* screams  |  sed :-) */
8287                 }
8288             }
8289             else {
8290                 /* no separator, slurp the full buffer */
8291                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8292                 bp += cnt;                           /* screams  |  dust */
8293                 ptr += cnt;                          /* louder   |  sed :-) */
8294                 cnt = 0;
8295                 assert (!shortbuffered);
8296                 goto cannot_be_shortbuffered;
8297             }
8298         }
8299         
8300         if (shortbuffered) {            /* oh well, must extend */
8301             /* we didnt have enough room to fit the line into the target buffer
8302              * so we must extend the target buffer and keep going */
8303             cnt = shortbuffered;
8304             shortbuffered = 0;
8305             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8306             SvCUR_set(sv, bpx);
8307             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8308             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8309             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8310             continue;
8311         }
8312
8313     cannot_be_shortbuffered:
8314         /* we need to refill the read-ahead buffer if possible */
8315
8316         DEBUG_P(PerlIO_printf(Perl_debug_log,
8317                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8318                               PTR2UV(ptr),(IV)cnt));
8319         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8320
8321         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8322            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8323             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8324             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8325
8326         /*
8327             call PerlIO_getc() to let it prefill the lookahead buffer
8328
8329             This used to call 'filbuf' in stdio form, but as that behaves like
8330             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8331             another abstraction.
8332
8333             Note we have to deal with the char in 'i' if we are not at EOF
8334         */
8335         i   = PerlIO_getc(fp);          /* get more characters */
8336
8337         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8338            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8339             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8340             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8341
8342         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8343         cnt = PerlIO_get_cnt(fp);
8344         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8345         DEBUG_P(PerlIO_printf(Perl_debug_log,
8346             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8347             PTR2UV(ptr),(IV)cnt));
8348
8349         if (i == EOF)                   /* all done for ever? */
8350             goto thats_really_all_folks;
8351
8352         /* make sure we have enough space in the target sv */
8353         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8354         SvCUR_set(sv, bpx);
8355         SvGROW(sv, bpx + cnt + 2);
8356         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8357
8358         /* copy of the char we got from getc() */
8359         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8360
8361         /* make sure we deal with the i being the last character of a separator */
8362         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8363             goto thats_all_folks;
8364     }
8365
8366 thats_all_folks:
8367     /* check if we have actually found the separator - only really applies
8368      * when rslen > 1 */
8369     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8370           memNE((char*)bp - rslen, rsptr, rslen))
8371         goto screamer;                          /* go back to the fray */
8372 thats_really_all_folks:
8373     if (shortbuffered)
8374         cnt += shortbuffered;
8375         DEBUG_P(PerlIO_printf(Perl_debug_log,
8376              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8377     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8378     DEBUG_P(PerlIO_printf(Perl_debug_log,
8379         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8380         "\n",
8381         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8382         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8383     *bp = '\0';
8384     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8385     DEBUG_P(PerlIO_printf(Perl_debug_log,
8386         "Screamer: done, len=%ld, string=|%.*s|\n",
8387         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8388     }
8389    else
8390     {
8391        /*The big, slow, and stupid way. */
8392 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8393         STDCHAR *buf = NULL;
8394         Newx(buf, 8192, STDCHAR);
8395         assert(buf);
8396 #else
8397         STDCHAR buf[8192];
8398 #endif
8399
8400 screamer2:
8401         if (rslen) {
8402             const STDCHAR * const bpe = buf + sizeof(buf);
8403             bp = buf;
8404             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8405                 ; /* keep reading */
8406             cnt = bp - buf;
8407         }
8408         else {
8409             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8410             /* Accommodate broken VAXC compiler, which applies U8 cast to
8411              * both args of ?: operator, causing EOF to change into 255
8412              */
8413             if (cnt > 0)
8414                  i = (U8)buf[cnt - 1];
8415             else
8416                  i = EOF;
8417         }
8418
8419         if (cnt < 0)
8420             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8421         if (append)
8422             sv_catpvn_nomg(sv, (char *) buf, cnt);
8423         else
8424             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8425
8426         if (i != EOF &&                 /* joy */
8427             (!rslen ||
8428              SvCUR(sv) < rslen ||
8429              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8430         {
8431             append = -1;
8432             /*
8433              * If we're reading from a TTY and we get a short read,
8434              * indicating that the user hit his EOF character, we need
8435              * to notice it now, because if we try to read from the TTY
8436              * again, the EOF condition will disappear.
8437              *
8438              * The comparison of cnt to sizeof(buf) is an optimization
8439              * that prevents unnecessary calls to feof().
8440              *
8441              * - jik 9/25/96
8442              */
8443             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8444                 goto screamer2;
8445         }
8446
8447 #ifdef USE_HEAP_INSTEAD_OF_STACK
8448         Safefree(buf);
8449 #endif
8450     }
8451
8452     if (rspara) {               /* have to do this both before and after */
8453         while (i != EOF) {      /* to make sure file boundaries work right */
8454             i = PerlIO_getc(fp);
8455             if (i != '\n') {
8456                 PerlIO_ungetc(fp,i);
8457                 break;
8458             }
8459         }
8460     }
8461
8462     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8463 }
8464
8465 /*
8466 =for apidoc sv_inc
8467
8468 Auto-increment of the value in the SV, doing string to numeric conversion
8469 if necessary.  Handles 'get' magic and operator overloading.
8470
8471 =cut
8472 */
8473
8474 void
8475 Perl_sv_inc(pTHX_ SV *const sv)
8476 {
8477     if (!sv)
8478         return;
8479     SvGETMAGIC(sv);
8480     sv_inc_nomg(sv);
8481 }
8482
8483 /*
8484 =for apidoc sv_inc_nomg
8485
8486 Auto-increment of the value in the SV, doing string to numeric conversion
8487 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8488
8489 =cut
8490 */
8491
8492 void
8493 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8494 {
8495     char *d;
8496     int flags;
8497
8498     if (!sv)
8499         return;
8500     if (SvTHINKFIRST(sv)) {
8501         if (SvREADONLY(sv)) {
8502                 Perl_croak_no_modify();
8503         }
8504         if (SvROK(sv)) {
8505             IV i;
8506             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8507                 return;
8508             i = PTR2IV(SvRV(sv));
8509             sv_unref(sv);
8510             sv_setiv(sv, i);
8511         }
8512         else sv_force_normal_flags(sv, 0);
8513     }
8514     flags = SvFLAGS(sv);
8515     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8516         /* It's (privately or publicly) a float, but not tested as an
8517            integer, so test it to see. */
8518         (void) SvIV(sv);
8519         flags = SvFLAGS(sv);
8520     }
8521     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8522         /* It's publicly an integer, or privately an integer-not-float */
8523 #ifdef PERL_PRESERVE_IVUV
8524       oops_its_int:
8525 #endif
8526         if (SvIsUV(sv)) {
8527             if (SvUVX(sv) == UV_MAX)
8528                 sv_setnv(sv, UV_MAX_P1);
8529             else
8530                 (void)SvIOK_only_UV(sv);
8531                 SvUV_set(sv, SvUVX(sv) + 1);
8532         } else {
8533             if (SvIVX(sv) == IV_MAX)
8534                 sv_setuv(sv, (UV)IV_MAX + 1);
8535             else {
8536                 (void)SvIOK_only(sv);
8537                 SvIV_set(sv, SvIVX(sv) + 1);
8538             }   
8539         }
8540         return;
8541     }
8542     if (flags & SVp_NOK) {
8543         const NV was = SvNVX(sv);
8544         if (NV_OVERFLOWS_INTEGERS_AT &&
8545             was >= NV_OVERFLOWS_INTEGERS_AT) {
8546             /* diag_listed_as: Lost precision when %s %f by 1 */
8547             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8548                            "Lost precision when incrementing %" NVff " by 1",
8549                            was);
8550         }
8551         (void)SvNOK_only(sv);
8552         SvNV_set(sv, was + 1.0);
8553         return;
8554     }
8555
8556     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8557         if ((flags & SVTYPEMASK) < SVt_PVIV)
8558             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8559         (void)SvIOK_only(sv);
8560         SvIV_set(sv, 1);
8561         return;
8562     }
8563     d = SvPVX(sv);
8564     while (isALPHA(*d)) d++;
8565     while (isDIGIT(*d)) d++;
8566     if (d < SvEND(sv)) {
8567         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8568 #ifdef PERL_PRESERVE_IVUV
8569         /* Got to punt this as an integer if needs be, but we don't issue
8570            warnings. Probably ought to make the sv_iv_please() that does
8571            the conversion if possible, and silently.  */
8572         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8573             /* Need to try really hard to see if it's an integer.
8574                9.22337203685478e+18 is an integer.
8575                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8576                so $a="9.22337203685478e+18"; $a+0; $a++
8577                needs to be the same as $a="9.22337203685478e+18"; $a++
8578                or we go insane. */
8579         
8580             (void) sv_2iv(sv);
8581             if (SvIOK(sv))
8582                 goto oops_its_int;
8583
8584             /* sv_2iv *should* have made this an NV */
8585             if (flags & SVp_NOK) {
8586                 (void)SvNOK_only(sv);
8587                 SvNV_set(sv, SvNVX(sv) + 1.0);
8588                 return;
8589             }
8590             /* I don't think we can get here. Maybe I should assert this
8591                And if we do get here I suspect that sv_setnv will croak. NWC
8592                Fall through. */
8593 #if defined(USE_LONG_DOUBLE)
8594             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
8595                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8596 #else
8597             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8598                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8599 #endif
8600         }
8601 #endif /* PERL_PRESERVE_IVUV */
8602         if (!numtype && ckWARN(WARN_NUMERIC))
8603             not_incrementable(sv);
8604         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8605         return;
8606     }
8607     d--;
8608     while (d >= SvPVX_const(sv)) {
8609         if (isDIGIT(*d)) {
8610             if (++*d <= '9')
8611                 return;
8612             *(d--) = '0';
8613         }
8614         else {
8615 #ifdef EBCDIC
8616             /* MKS: The original code here died if letters weren't consecutive.
8617              * at least it didn't have to worry about non-C locales.  The
8618              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8619              * arranged in order (although not consecutively) and that only
8620              * [A-Za-z] are accepted by isALPHA in the C locale.
8621              */
8622             if (*d != 'z' && *d != 'Z') {
8623                 do { ++*d; } while (!isALPHA(*d));
8624                 return;
8625             }
8626             *(d--) -= 'z' - 'a';
8627 #else
8628             ++*d;
8629             if (isALPHA(*d))
8630                 return;
8631             *(d--) -= 'z' - 'a' + 1;
8632 #endif
8633         }
8634     }
8635     /* oh,oh, the number grew */
8636     SvGROW(sv, SvCUR(sv) + 2);
8637     SvCUR_set(sv, SvCUR(sv) + 1);
8638     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8639         *d = d[-1];
8640     if (isDIGIT(d[1]))
8641         *d = '1';
8642     else
8643         *d = d[1];
8644 }
8645
8646 /*
8647 =for apidoc sv_dec
8648
8649 Auto-decrement of the value in the SV, doing string to numeric conversion
8650 if necessary.  Handles 'get' magic and operator overloading.
8651
8652 =cut
8653 */
8654
8655 void
8656 Perl_sv_dec(pTHX_ SV *const sv)
8657 {
8658     if (!sv)
8659         return;
8660     SvGETMAGIC(sv);
8661     sv_dec_nomg(sv);
8662 }
8663
8664 /*
8665 =for apidoc sv_dec_nomg
8666
8667 Auto-decrement of the value in the SV, doing string to numeric conversion
8668 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8669
8670 =cut
8671 */
8672
8673 void
8674 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8675 {
8676     int flags;
8677
8678     if (!sv)
8679         return;
8680     if (SvTHINKFIRST(sv)) {
8681         if (SvREADONLY(sv)) {
8682                 Perl_croak_no_modify();
8683         }
8684         if (SvROK(sv)) {
8685             IV i;
8686             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8687                 return;
8688             i = PTR2IV(SvRV(sv));
8689             sv_unref(sv);
8690             sv_setiv(sv, i);
8691         }
8692         else sv_force_normal_flags(sv, 0);
8693     }
8694     /* Unlike sv_inc we don't have to worry about string-never-numbers
8695        and keeping them magic. But we mustn't warn on punting */
8696     flags = SvFLAGS(sv);
8697     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8698         /* It's publicly an integer, or privately an integer-not-float */
8699 #ifdef PERL_PRESERVE_IVUV
8700       oops_its_int:
8701 #endif
8702         if (SvIsUV(sv)) {
8703             if (SvUVX(sv) == 0) {
8704                 (void)SvIOK_only(sv);
8705                 SvIV_set(sv, -1);
8706             }
8707             else {
8708                 (void)SvIOK_only_UV(sv);
8709                 SvUV_set(sv, SvUVX(sv) - 1);
8710             }   
8711         } else {
8712             if (SvIVX(sv) == IV_MIN) {
8713                 sv_setnv(sv, (NV)IV_MIN);
8714                 goto oops_its_num;
8715             }
8716             else {
8717                 (void)SvIOK_only(sv);
8718                 SvIV_set(sv, SvIVX(sv) - 1);
8719             }   
8720         }
8721         return;
8722     }
8723     if (flags & SVp_NOK) {
8724     oops_its_num:
8725         {
8726             const NV was = SvNVX(sv);
8727             if (NV_OVERFLOWS_INTEGERS_AT &&
8728                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8729                 /* diag_listed_as: Lost precision when %s %f by 1 */
8730                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8731                                "Lost precision when decrementing %" NVff " by 1",
8732                                was);
8733             }
8734             (void)SvNOK_only(sv);
8735             SvNV_set(sv, was - 1.0);
8736             return;
8737         }
8738     }
8739     if (!(flags & SVp_POK)) {
8740         if ((flags & SVTYPEMASK) < SVt_PVIV)
8741             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8742         SvIV_set(sv, -1);
8743         (void)SvIOK_only(sv);
8744         return;
8745     }
8746 #ifdef PERL_PRESERVE_IVUV
8747     {
8748         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8749         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8750             /* Need to try really hard to see if it's an integer.
8751                9.22337203685478e+18 is an integer.
8752                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8753                so $a="9.22337203685478e+18"; $a+0; $a--
8754                needs to be the same as $a="9.22337203685478e+18"; $a--
8755                or we go insane. */
8756         
8757             (void) sv_2iv(sv);
8758             if (SvIOK(sv))
8759                 goto oops_its_int;
8760
8761             /* sv_2iv *should* have made this an NV */
8762             if (flags & SVp_NOK) {
8763                 (void)SvNOK_only(sv);
8764                 SvNV_set(sv, SvNVX(sv) - 1.0);
8765                 return;
8766             }
8767             /* I don't think we can get here. Maybe I should assert this
8768                And if we do get here I suspect that sv_setnv will croak. NWC
8769                Fall through. */
8770 #if defined(USE_LONG_DOUBLE)
8771             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
8772                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8773 #else
8774             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8775                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8776 #endif
8777         }
8778     }
8779 #endif /* PERL_PRESERVE_IVUV */
8780     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8781 }
8782
8783 /* this define is used to eliminate a chunk of duplicated but shared logic
8784  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8785  * used anywhere but here - yves
8786  */
8787 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8788     STMT_START {      \
8789         EXTEND_MORTAL(1); \
8790         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8791     } STMT_END
8792
8793 /*
8794 =for apidoc sv_mortalcopy
8795
8796 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8797 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8798 explicit call to FREETMPS, or by an implicit call at places such as
8799 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8800
8801 =cut
8802 */
8803
8804 /* Make a string that will exist for the duration of the expression
8805  * evaluation.  Actually, it may have to last longer than that, but
8806  * hopefully we won't free it until it has been assigned to a
8807  * permanent location. */
8808
8809 SV *
8810 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8811 {
8812     SV *sv;
8813
8814     if (flags & SV_GMAGIC)
8815         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8816     new_SV(sv);
8817     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8818     PUSH_EXTEND_MORTAL__SV_C(sv);
8819     SvTEMP_on(sv);
8820     return sv;
8821 }
8822
8823 /*
8824 =for apidoc sv_newmortal
8825
8826 Creates a new null SV which is mortal.  The reference count of the SV is
8827 set to 1.  It will be destroyed "soon", either by an explicit call to
8828 FREETMPS, or by an implicit call at places such as statement boundaries.
8829 See also C<sv_mortalcopy> and C<sv_2mortal>.
8830
8831 =cut
8832 */
8833
8834 SV *
8835 Perl_sv_newmortal(pTHX)
8836 {
8837     SV *sv;
8838
8839     new_SV(sv);
8840     SvFLAGS(sv) = SVs_TEMP;
8841     PUSH_EXTEND_MORTAL__SV_C(sv);
8842     return sv;
8843 }
8844
8845
8846 /*
8847 =for apidoc newSVpvn_flags
8848
8849 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8850 characters) into it.  The reference count for the
8851 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8852 string.  You are responsible for ensuring that the source string is at least
8853 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8854 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8855 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8856 returning.  If C<SVf_UTF8> is set, C<s>
8857 is considered to be in UTF-8 and the
8858 C<SVf_UTF8> flag will be set on the new SV.
8859 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8860
8861     #define newSVpvn_utf8(s, len, u)                    \
8862         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8863
8864 =cut
8865 */
8866
8867 SV *
8868 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8869 {
8870     SV *sv;
8871
8872     /* All the flags we don't support must be zero.
8873        And we're new code so I'm going to assert this from the start.  */
8874     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8875     new_SV(sv);
8876     sv_setpvn(sv,s,len);
8877
8878     /* This code used to do a sv_2mortal(), however we now unroll the call to
8879      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8880      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8881      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8882      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8883      * means that we eliminate quite a few steps than it looks - Yves
8884      * (explaining patch by gfx) */
8885
8886     SvFLAGS(sv) |= flags;
8887
8888     if(flags & SVs_TEMP){
8889         PUSH_EXTEND_MORTAL__SV_C(sv);
8890     }
8891
8892     return sv;
8893 }
8894
8895 /*
8896 =for apidoc sv_2mortal
8897
8898 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8899 by an explicit call to FREETMPS, or by an implicit call at places such as
8900 statement boundaries.  SvTEMP() is turned on which means that the SV's
8901 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8902 and C<sv_mortalcopy>.
8903
8904 =cut
8905 */
8906
8907 SV *
8908 Perl_sv_2mortal(pTHX_ SV *const sv)
8909 {
8910     dVAR;
8911     if (!sv)
8912         return NULL;
8913     if (SvIMMORTAL(sv))
8914         return sv;
8915     PUSH_EXTEND_MORTAL__SV_C(sv);
8916     SvTEMP_on(sv);
8917     return sv;
8918 }
8919
8920 /*
8921 =for apidoc newSVpv
8922
8923 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8924 characters) into it.  The reference count for the
8925 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8926 strlen(), (which means if you use this option, that C<s> can't have embedded
8927 C<NUL> characters and has to have a terminating C<NUL> byte).
8928
8929 For efficiency, consider using C<newSVpvn> instead.
8930
8931 =cut
8932 */
8933
8934 SV *
8935 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8936 {
8937     SV *sv;
8938
8939     new_SV(sv);
8940     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8941     return sv;
8942 }
8943
8944 /*
8945 =for apidoc newSVpvn
8946
8947 Creates a new SV and copies a string into it, which may contain C<NUL> characters
8948 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8949 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8950 are responsible for ensuring that the source buffer is at least
8951 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8952 undefined.
8953
8954 =cut
8955 */
8956
8957 SV *
8958 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8959 {
8960     SV *sv;
8961     new_SV(sv);
8962     sv_setpvn(sv,buffer,len);
8963     return sv;
8964 }
8965
8966 /*
8967 =for apidoc newSVhek
8968
8969 Creates a new SV from the hash key structure.  It will generate scalars that
8970 point to the shared string table where possible.  Returns a new (undefined)
8971 SV if the hek is NULL.
8972
8973 =cut
8974 */
8975
8976 SV *
8977 Perl_newSVhek(pTHX_ const HEK *const hek)
8978 {
8979     if (!hek) {
8980         SV *sv;
8981
8982         new_SV(sv);
8983         return sv;
8984     }
8985
8986     if (HEK_LEN(hek) == HEf_SVKEY) {
8987         return newSVsv(*(SV**)HEK_KEY(hek));
8988     } else {
8989         const int flags = HEK_FLAGS(hek);
8990         if (flags & HVhek_WASUTF8) {
8991             /* Trouble :-)
8992                Andreas would like keys he put in as utf8 to come back as utf8
8993             */
8994             STRLEN utf8_len = HEK_LEN(hek);
8995             SV * const sv = newSV_type(SVt_PV);
8996             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8997             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8998             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8999             SvUTF8_on (sv);
9000             return sv;
9001         } else if (flags & HVhek_UNSHARED) {
9002             /* A hash that isn't using shared hash keys has to have
9003                the flag in every key so that we know not to try to call
9004                share_hek_hek on it.  */
9005
9006             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9007             if (HEK_UTF8(hek))
9008                 SvUTF8_on (sv);
9009             return sv;
9010         }
9011         /* This will be overwhelminly the most common case.  */
9012         {
9013             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9014                more efficient than sharepvn().  */
9015             SV *sv;
9016
9017             new_SV(sv);
9018             sv_upgrade(sv, SVt_PV);
9019             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9020             SvCUR_set(sv, HEK_LEN(hek));
9021             SvLEN_set(sv, 0);
9022             SvIsCOW_on(sv);
9023             SvPOK_on(sv);
9024             if (HEK_UTF8(hek))
9025                 SvUTF8_on(sv);
9026             return sv;
9027         }
9028     }
9029 }
9030
9031 /*
9032 =for apidoc newSVpvn_share
9033
9034 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9035 table.  If the string does not already exist in the table, it is
9036 created first.  Turns on the SvIsCOW flag (or READONLY
9037 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9038 is non-zero, that value is used; otherwise the hash is computed.
9039 The string's hash can later be retrieved from the SV
9040 with the C<SvSHARED_HASH()> macro.  The idea here is
9041 that as the string table is used for shared hash keys these strings will have
9042 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9043
9044 =cut
9045 */
9046
9047 SV *
9048 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9049 {
9050     dVAR;
9051     SV *sv;
9052     bool is_utf8 = FALSE;
9053     const char *const orig_src = src;
9054
9055     if (len < 0) {
9056         STRLEN tmplen = -len;
9057         is_utf8 = TRUE;
9058         /* See the note in hv.c:hv_fetch() --jhi */
9059         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9060         len = tmplen;
9061     }
9062     if (!hash)
9063         PERL_HASH(hash, src, len);
9064     new_SV(sv);
9065     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9066        changes here, update it there too.  */
9067     sv_upgrade(sv, SVt_PV);
9068     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9069     SvCUR_set(sv, len);
9070     SvLEN_set(sv, 0);
9071     SvIsCOW_on(sv);
9072     SvPOK_on(sv);
9073     if (is_utf8)
9074         SvUTF8_on(sv);
9075     if (src != orig_src)
9076         Safefree(src);
9077     return sv;
9078 }
9079
9080 /*
9081 =for apidoc newSVpv_share
9082
9083 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9084 string/length pair.
9085
9086 =cut
9087 */
9088
9089 SV *
9090 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9091 {
9092     return newSVpvn_share(src, strlen(src), hash);
9093 }
9094
9095 #if defined(PERL_IMPLICIT_CONTEXT)
9096
9097 /* pTHX_ magic can't cope with varargs, so this is a no-context
9098  * version of the main function, (which may itself be aliased to us).
9099  * Don't access this version directly.
9100  */
9101
9102 SV *
9103 Perl_newSVpvf_nocontext(const char *const pat, ...)
9104 {
9105     dTHX;
9106     SV *sv;
9107     va_list args;
9108
9109     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9110
9111     va_start(args, pat);
9112     sv = vnewSVpvf(pat, &args);
9113     va_end(args);
9114     return sv;
9115 }
9116 #endif
9117
9118 /*
9119 =for apidoc newSVpvf
9120
9121 Creates a new SV and initializes it with the string formatted like
9122 C<sprintf>.
9123
9124 =cut
9125 */
9126
9127 SV *
9128 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9129 {
9130     SV *sv;
9131     va_list args;
9132
9133     PERL_ARGS_ASSERT_NEWSVPVF;
9134
9135     va_start(args, pat);
9136     sv = vnewSVpvf(pat, &args);
9137     va_end(args);
9138     return sv;
9139 }
9140
9141 /* backend for newSVpvf() and newSVpvf_nocontext() */
9142
9143 SV *
9144 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9145 {
9146     SV *sv;
9147
9148     PERL_ARGS_ASSERT_VNEWSVPVF;
9149
9150     new_SV(sv);
9151     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9152     return sv;
9153 }
9154
9155 /*
9156 =for apidoc newSVnv
9157
9158 Creates a new SV and copies a floating point value into it.
9159 The reference count for the SV is set to 1.
9160
9161 =cut
9162 */
9163
9164 SV *
9165 Perl_newSVnv(pTHX_ const NV n)
9166 {
9167     SV *sv;
9168
9169     new_SV(sv);
9170     sv_setnv(sv,n);
9171     return sv;
9172 }
9173
9174 /*
9175 =for apidoc newSViv
9176
9177 Creates a new SV and copies an integer into it.  The reference count for the
9178 SV is set to 1.
9179
9180 =cut
9181 */
9182
9183 SV *
9184 Perl_newSViv(pTHX_ const IV i)
9185 {
9186     SV *sv;
9187
9188     new_SV(sv);
9189     sv_setiv(sv,i);
9190     return sv;
9191 }
9192
9193 /*
9194 =for apidoc newSVuv
9195
9196 Creates a new SV and copies an unsigned integer into it.
9197 The reference count for the SV is set to 1.
9198
9199 =cut
9200 */
9201
9202 SV *
9203 Perl_newSVuv(pTHX_ const UV u)
9204 {
9205     SV *sv;
9206
9207     new_SV(sv);
9208     sv_setuv(sv,u);
9209     return sv;
9210 }
9211
9212 /*
9213 =for apidoc newSV_type
9214
9215 Creates a new SV, of the type specified.  The reference count for the new SV
9216 is set to 1.
9217
9218 =cut
9219 */
9220
9221 SV *
9222 Perl_newSV_type(pTHX_ const svtype type)
9223 {
9224     SV *sv;
9225
9226     new_SV(sv);
9227     sv_upgrade(sv, type);
9228     return sv;
9229 }
9230
9231 /*
9232 =for apidoc newRV_noinc
9233
9234 Creates an RV wrapper for an SV.  The reference count for the original
9235 SV is B<not> incremented.
9236
9237 =cut
9238 */
9239
9240 SV *
9241 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9242 {
9243     SV *sv = newSV_type(SVt_IV);
9244
9245     PERL_ARGS_ASSERT_NEWRV_NOINC;
9246
9247     SvTEMP_off(tmpRef);
9248     SvRV_set(sv, tmpRef);
9249     SvROK_on(sv);
9250     return sv;
9251 }
9252
9253 /* newRV_inc is the official function name to use now.
9254  * newRV_inc is in fact #defined to newRV in sv.h
9255  */
9256
9257 SV *
9258 Perl_newRV(pTHX_ SV *const sv)
9259 {
9260     PERL_ARGS_ASSERT_NEWRV;
9261
9262     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9263 }
9264
9265 /*
9266 =for apidoc newSVsv
9267
9268 Creates a new SV which is an exact duplicate of the original SV.
9269 (Uses C<sv_setsv>.)
9270
9271 =cut
9272 */
9273
9274 SV *
9275 Perl_newSVsv(pTHX_ SV *const old)
9276 {
9277     SV *sv;
9278
9279     if (!old)
9280         return NULL;
9281     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9282         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9283         return NULL;
9284     }
9285     /* Do this here, otherwise we leak the new SV if this croaks. */
9286     SvGETMAGIC(old);
9287     new_SV(sv);
9288     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9289        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9290     sv_setsv_flags(sv, old, SV_NOSTEAL);
9291     return sv;
9292 }
9293
9294 /*
9295 =for apidoc sv_reset
9296
9297 Underlying implementation for the C<reset> Perl function.
9298 Note that the perl-level function is vaguely deprecated.
9299
9300 =cut
9301 */
9302
9303 void
9304 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9305 {
9306     PERL_ARGS_ASSERT_SV_RESET;
9307
9308     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9309 }
9310
9311 void
9312 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9313 {
9314     char todo[PERL_UCHAR_MAX+1];
9315     const char *send;
9316
9317     if (!stash || SvTYPE(stash) != SVt_PVHV)
9318         return;
9319
9320     if (!s) {           /* reset ?? searches */
9321         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9322         if (mg) {
9323             const U32 count = mg->mg_len / sizeof(PMOP**);
9324             PMOP **pmp = (PMOP**) mg->mg_ptr;
9325             PMOP *const *const end = pmp + count;
9326
9327             while (pmp < end) {
9328 #ifdef USE_ITHREADS
9329                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9330 #else
9331                 (*pmp)->op_pmflags &= ~PMf_USED;
9332 #endif
9333                 ++pmp;
9334             }
9335         }
9336         return;
9337     }
9338
9339     /* reset variables */
9340
9341     if (!HvARRAY(stash))
9342         return;
9343
9344     Zero(todo, 256, char);
9345     send = s + len;
9346     while (s < send) {
9347         I32 max;
9348         I32 i = (unsigned char)*s;
9349         if (s[1] == '-') {
9350             s += 2;
9351         }
9352         max = (unsigned char)*s++;
9353         for ( ; i <= max; i++) {
9354             todo[i] = 1;
9355         }
9356         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9357             HE *entry;
9358             for (entry = HvARRAY(stash)[i];
9359                  entry;
9360                  entry = HeNEXT(entry))
9361             {
9362                 GV *gv;
9363                 SV *sv;
9364
9365                 if (!todo[(U8)*HeKEY(entry)])
9366                     continue;
9367                 gv = MUTABLE_GV(HeVAL(entry));
9368                 sv = GvSV(gv);
9369                 if (sv && !SvREADONLY(sv)) {
9370                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9371                     if (!isGV(sv)) SvOK_off(sv);
9372                 }
9373                 if (GvAV(gv)) {
9374                     av_clear(GvAV(gv));
9375                 }
9376                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9377                     hv_clear(GvHV(gv));
9378                 }
9379             }
9380         }
9381     }
9382 }
9383
9384 /*
9385 =for apidoc sv_2io
9386
9387 Using various gambits, try to get an IO from an SV: the IO slot if its a
9388 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9389 named after the PV if we're a string.
9390
9391 'Get' magic is ignored on the sv passed in, but will be called on
9392 C<SvRV(sv)> if sv is an RV.
9393
9394 =cut
9395 */
9396
9397 IO*
9398 Perl_sv_2io(pTHX_ SV *const sv)
9399 {
9400     IO* io;
9401     GV* gv;
9402
9403     PERL_ARGS_ASSERT_SV_2IO;
9404
9405     switch (SvTYPE(sv)) {
9406     case SVt_PVIO:
9407         io = MUTABLE_IO(sv);
9408         break;
9409     case SVt_PVGV:
9410     case SVt_PVLV:
9411         if (isGV_with_GP(sv)) {
9412             gv = MUTABLE_GV(sv);
9413             io = GvIO(gv);
9414             if (!io)
9415                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9416                                     HEKfARG(GvNAME_HEK(gv)));
9417             break;
9418         }
9419         /* FALLTHROUGH */
9420     default:
9421         if (!SvOK(sv))
9422             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9423         if (SvROK(sv)) {
9424             SvGETMAGIC(SvRV(sv));
9425             return sv_2io(SvRV(sv));
9426         }
9427         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9428         if (gv)
9429             io = GvIO(gv);
9430         else
9431             io = 0;
9432         if (!io) {
9433             SV *newsv = sv;
9434             if (SvGMAGICAL(sv)) {
9435                 newsv = sv_newmortal();
9436                 sv_setsv_nomg(newsv, sv);
9437             }
9438             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9439         }
9440         break;
9441     }
9442     return io;
9443 }
9444
9445 /*
9446 =for apidoc sv_2cv
9447
9448 Using various gambits, try to get a CV from an SV; in addition, try if
9449 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9450 The flags in C<lref> are passed to gv_fetchsv.
9451
9452 =cut
9453 */
9454
9455 CV *
9456 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9457 {
9458     GV *gv = NULL;
9459     CV *cv = NULL;
9460
9461     PERL_ARGS_ASSERT_SV_2CV;
9462
9463     if (!sv) {
9464         *st = NULL;
9465         *gvp = NULL;
9466         return NULL;
9467     }
9468     switch (SvTYPE(sv)) {
9469     case SVt_PVCV:
9470         *st = CvSTASH(sv);
9471         *gvp = NULL;
9472         return MUTABLE_CV(sv);
9473     case SVt_PVHV:
9474     case SVt_PVAV:
9475         *st = NULL;
9476         *gvp = NULL;
9477         return NULL;
9478     default:
9479         SvGETMAGIC(sv);
9480         if (SvROK(sv)) {
9481             if (SvAMAGIC(sv))
9482                 sv = amagic_deref_call(sv, to_cv_amg);
9483
9484             sv = SvRV(sv);
9485             if (SvTYPE(sv) == SVt_PVCV) {
9486                 cv = MUTABLE_CV(sv);
9487                 *gvp = NULL;
9488                 *st = CvSTASH(cv);
9489                 return cv;
9490             }
9491             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9492                 gv = MUTABLE_GV(sv);
9493             else
9494                 Perl_croak(aTHX_ "Not a subroutine reference");
9495         }
9496         else if (isGV_with_GP(sv)) {
9497             gv = MUTABLE_GV(sv);
9498         }
9499         else {
9500             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9501         }
9502         *gvp = gv;
9503         if (!gv) {
9504             *st = NULL;
9505             return NULL;
9506         }
9507         /* Some flags to gv_fetchsv mean don't really create the GV  */
9508         if (!isGV_with_GP(gv)) {
9509             *st = NULL;
9510             return NULL;
9511         }
9512         *st = GvESTASH(gv);
9513         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9514             /* XXX this is probably not what they think they're getting.
9515              * It has the same effect as "sub name;", i.e. just a forward
9516              * declaration! */
9517             newSTUB(gv,0);
9518         }
9519         return GvCVu(gv);
9520     }
9521 }
9522
9523 /*
9524 =for apidoc sv_true
9525
9526 Returns true if the SV has a true value by Perl's rules.
9527 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9528 instead use an in-line version.
9529
9530 =cut
9531 */
9532
9533 I32
9534 Perl_sv_true(pTHX_ SV *const sv)
9535 {
9536     if (!sv)
9537         return 0;
9538     if (SvPOK(sv)) {
9539         const XPV* const tXpv = (XPV*)SvANY(sv);
9540         if (tXpv &&
9541                 (tXpv->xpv_cur > 1 ||
9542                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9543             return 1;
9544         else
9545             return 0;
9546     }
9547     else {
9548         if (SvIOK(sv))
9549             return SvIVX(sv) != 0;
9550         else {
9551             if (SvNOK(sv))
9552                 return SvNVX(sv) != 0.0;
9553             else
9554                 return sv_2bool(sv);
9555         }
9556     }
9557 }
9558
9559 /*
9560 =for apidoc sv_pvn_force
9561
9562 Get a sensible string out of the SV somehow.
9563 A private implementation of the C<SvPV_force> macro for compilers which
9564 can't cope with complex macro expressions.  Always use the macro instead.
9565
9566 =for apidoc sv_pvn_force_flags
9567
9568 Get a sensible string out of the SV somehow.
9569 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9570 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9571 implemented in terms of this function.
9572 You normally want to use the various wrapper macros instead: see
9573 C<SvPV_force> and C<SvPV_force_nomg>
9574
9575 =cut
9576 */
9577
9578 char *
9579 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9580 {
9581     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9582
9583     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9584     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9585         sv_force_normal_flags(sv, 0);
9586
9587     if (SvPOK(sv)) {
9588         if (lp)
9589             *lp = SvCUR(sv);
9590     }
9591     else {
9592         char *s;
9593         STRLEN len;
9594  
9595         if (SvTYPE(sv) > SVt_PVLV
9596             || isGV_with_GP(sv))
9597             /* diag_listed_as: Can't coerce %s to %s in %s */
9598             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9599                 OP_DESC(PL_op));
9600         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9601         if (!s) {
9602           s = (char *)"";
9603         }
9604         if (lp)
9605             *lp = len;
9606
9607         if (SvTYPE(sv) < SVt_PV ||
9608             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9609             if (SvROK(sv))
9610                 sv_unref(sv);
9611             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9612             SvGROW(sv, len + 1);
9613             Move(s,SvPVX(sv),len,char);
9614             SvCUR_set(sv, len);
9615             SvPVX(sv)[len] = '\0';
9616         }
9617         if (!SvPOK(sv)) {
9618             SvPOK_on(sv);               /* validate pointer */
9619             SvTAINT(sv);
9620             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9621                                   PTR2UV(sv),SvPVX_const(sv)));
9622         }
9623     }
9624     (void)SvPOK_only_UTF8(sv);
9625     return SvPVX_mutable(sv);
9626 }
9627
9628 /*
9629 =for apidoc sv_pvbyten_force
9630
9631 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9632 instead.
9633
9634 =cut
9635 */
9636
9637 char *
9638 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9639 {
9640     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9641
9642     sv_pvn_force(sv,lp);
9643     sv_utf8_downgrade(sv,0);
9644     *lp = SvCUR(sv);
9645     return SvPVX(sv);
9646 }
9647
9648 /*
9649 =for apidoc sv_pvutf8n_force
9650
9651 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9652 instead.
9653
9654 =cut
9655 */
9656
9657 char *
9658 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9659 {
9660     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9661
9662     sv_pvn_force(sv,0);
9663     sv_utf8_upgrade_nomg(sv);
9664     *lp = SvCUR(sv);
9665     return SvPVX(sv);
9666 }
9667
9668 /*
9669 =for apidoc sv_reftype
9670
9671 Returns a string describing what the SV is a reference to.
9672
9673 =cut
9674 */
9675
9676 const char *
9677 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9678 {
9679     PERL_ARGS_ASSERT_SV_REFTYPE;
9680     if (ob && SvOBJECT(sv)) {
9681         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9682     }
9683     else {
9684         /* WARNING - There is code, for instance in mg.c, that assumes that
9685          * the only reason that sv_reftype(sv,0) would return a string starting
9686          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9687          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9688          * this routine inside other subs, and it saves time.
9689          * Do not change this assumption without searching for "dodgy type check" in
9690          * the code.
9691          * - Yves */
9692         switch (SvTYPE(sv)) {
9693         case SVt_NULL:
9694         case SVt_IV:
9695         case SVt_NV:
9696         case SVt_PV:
9697         case SVt_PVIV:
9698         case SVt_PVNV:
9699         case SVt_PVMG:
9700                                 if (SvVOK(sv))
9701                                     return "VSTRING";
9702                                 if (SvROK(sv))
9703                                     return "REF";
9704                                 else
9705                                     return "SCALAR";
9706
9707         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9708                                 /* tied lvalues should appear to be
9709                                  * scalars for backwards compatibility */
9710                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9711                                     ? "SCALAR" : "LVALUE");
9712         case SVt_PVAV:          return "ARRAY";
9713         case SVt_PVHV:          return "HASH";
9714         case SVt_PVCV:          return "CODE";
9715         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9716                                     ? "GLOB" : "SCALAR");
9717         case SVt_PVFM:          return "FORMAT";
9718         case SVt_PVIO:          return "IO";
9719         case SVt_INVLIST:       return "INVLIST";
9720         case SVt_REGEXP:        return "REGEXP";
9721         default:                return "UNKNOWN";
9722         }
9723     }
9724 }
9725
9726 /*
9727 =for apidoc sv_ref
9728
9729 Returns a SV describing what the SV passed in is a reference to.
9730
9731 =cut
9732 */
9733
9734 SV *
9735 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9736 {
9737     PERL_ARGS_ASSERT_SV_REF;
9738
9739     if (!dst)
9740         dst = sv_newmortal();
9741
9742     if (ob && SvOBJECT(sv)) {
9743         HvNAME_get(SvSTASH(sv))
9744                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9745                     : sv_setpvn(dst, "__ANON__", 8);
9746     }
9747     else {
9748         const char * reftype = sv_reftype(sv, 0);
9749         sv_setpv(dst, reftype);
9750     }
9751     return dst;
9752 }
9753
9754 /*
9755 =for apidoc sv_isobject
9756
9757 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9758 object.  If the SV is not an RV, or if the object is not blessed, then this
9759 will return false.
9760
9761 =cut
9762 */
9763
9764 int
9765 Perl_sv_isobject(pTHX_ SV *sv)
9766 {
9767     if (!sv)
9768         return 0;
9769     SvGETMAGIC(sv);
9770     if (!SvROK(sv))
9771         return 0;
9772     sv = SvRV(sv);
9773     if (!SvOBJECT(sv))
9774         return 0;
9775     return 1;
9776 }
9777
9778 /*
9779 =for apidoc sv_isa
9780
9781 Returns a boolean indicating whether the SV is blessed into the specified
9782 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9783 an inheritance relationship.
9784
9785 =cut
9786 */
9787
9788 int
9789 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9790 {
9791     const char *hvname;
9792
9793     PERL_ARGS_ASSERT_SV_ISA;
9794
9795     if (!sv)
9796         return 0;
9797     SvGETMAGIC(sv);
9798     if (!SvROK(sv))
9799         return 0;
9800     sv = SvRV(sv);
9801     if (!SvOBJECT(sv))
9802         return 0;
9803     hvname = HvNAME_get(SvSTASH(sv));
9804     if (!hvname)
9805         return 0;
9806
9807     return strEQ(hvname, name);
9808 }
9809
9810 /*
9811 =for apidoc newSVrv
9812
9813 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9814 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9815 SV will be blessed in the specified package.  The new SV is returned and its
9816 reference count is 1.  The reference count 1 is owned by C<rv>.
9817
9818 =cut
9819 */
9820
9821 SV*
9822 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9823 {
9824     SV *sv;
9825
9826     PERL_ARGS_ASSERT_NEWSVRV;
9827
9828     new_SV(sv);
9829
9830     SV_CHECK_THINKFIRST_COW_DROP(rv);
9831
9832     if (SvTYPE(rv) >= SVt_PVMG) {
9833         const U32 refcnt = SvREFCNT(rv);
9834         SvREFCNT(rv) = 0;
9835         sv_clear(rv);
9836         SvFLAGS(rv) = 0;
9837         SvREFCNT(rv) = refcnt;
9838
9839         sv_upgrade(rv, SVt_IV);
9840     } else if (SvROK(rv)) {
9841         SvREFCNT_dec(SvRV(rv));
9842     } else {
9843         prepare_SV_for_RV(rv);
9844     }
9845
9846     SvOK_off(rv);
9847     SvRV_set(rv, sv);
9848     SvROK_on(rv);
9849
9850     if (classname) {
9851         HV* const stash = gv_stashpv(classname, GV_ADD);
9852         (void)sv_bless(rv, stash);
9853     }
9854     return sv;
9855 }
9856
9857 SV *
9858 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9859 {
9860     SV * const lv = newSV_type(SVt_PVLV);
9861     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9862     LvTYPE(lv) = 'y';
9863     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9864     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9865     LvSTARGOFF(lv) = ix;
9866     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9867     return lv;
9868 }
9869
9870 /*
9871 =for apidoc sv_setref_pv
9872
9873 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9874 argument will be upgraded to an RV.  That RV will be modified to point to
9875 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9876 into the SV.  The C<classname> argument indicates the package for the
9877 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9878 will have a reference count of 1, and the RV will be returned.
9879
9880 Do not use with other Perl types such as HV, AV, SV, CV, because those
9881 objects will become corrupted by the pointer copy process.
9882
9883 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9884
9885 =cut
9886 */
9887
9888 SV*
9889 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9890 {
9891     PERL_ARGS_ASSERT_SV_SETREF_PV;
9892
9893     if (!pv) {
9894         sv_setsv(rv, &PL_sv_undef);
9895         SvSETMAGIC(rv);
9896     }
9897     else
9898         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9899     return rv;
9900 }
9901
9902 /*
9903 =for apidoc sv_setref_iv
9904
9905 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9906 argument will be upgraded to an RV.  That RV will be modified to point to
9907 the new SV.  The C<classname> argument indicates the package for the
9908 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9909 will have a reference count of 1, and the RV will be returned.
9910
9911 =cut
9912 */
9913
9914 SV*
9915 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9916 {
9917     PERL_ARGS_ASSERT_SV_SETREF_IV;
9918
9919     sv_setiv(newSVrv(rv,classname), iv);
9920     return rv;
9921 }
9922
9923 /*
9924 =for apidoc sv_setref_uv
9925
9926 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9927 argument will be upgraded to an RV.  That RV will be modified to point to
9928 the new SV.  The C<classname> argument indicates the package for the
9929 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9930 will have a reference count of 1, and the RV will be returned.
9931
9932 =cut
9933 */
9934
9935 SV*
9936 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9937 {
9938     PERL_ARGS_ASSERT_SV_SETREF_UV;
9939
9940     sv_setuv(newSVrv(rv,classname), uv);
9941     return rv;
9942 }
9943
9944 /*
9945 =for apidoc sv_setref_nv
9946
9947 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9948 argument will be upgraded to an RV.  That RV will be modified to point to
9949 the new SV.  The C<classname> argument indicates the package for the
9950 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9951 will have a reference count of 1, and the RV will be returned.
9952
9953 =cut
9954 */
9955
9956 SV*
9957 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9958 {
9959     PERL_ARGS_ASSERT_SV_SETREF_NV;
9960
9961     sv_setnv(newSVrv(rv,classname), nv);
9962     return rv;
9963 }
9964
9965 /*
9966 =for apidoc sv_setref_pvn
9967
9968 Copies a string into a new SV, optionally blessing the SV.  The length of the
9969 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9970 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9971 argument indicates the package for the blessing.  Set C<classname> to
9972 C<NULL> to avoid the blessing.  The new SV will have a reference count
9973 of 1, and the RV will be returned.
9974
9975 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9976
9977 =cut
9978 */
9979
9980 SV*
9981 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9982                    const char *const pv, const STRLEN n)
9983 {
9984     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9985
9986     sv_setpvn(newSVrv(rv,classname), pv, n);
9987     return rv;
9988 }
9989
9990 /*
9991 =for apidoc sv_bless
9992
9993 Blesses an SV into a specified package.  The SV must be an RV.  The package
9994 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9995 of the SV is unaffected.
9996
9997 =cut
9998 */
9999
10000 SV*
10001 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10002 {
10003     SV *tmpRef;
10004     HV *oldstash = NULL;
10005
10006     PERL_ARGS_ASSERT_SV_BLESS;
10007
10008     SvGETMAGIC(sv);
10009     if (!SvROK(sv))
10010         Perl_croak(aTHX_ "Can't bless non-reference value");
10011     tmpRef = SvRV(sv);
10012     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
10013         if (SvREADONLY(tmpRef))
10014             Perl_croak_no_modify();
10015         if (SvOBJECT(tmpRef)) {
10016             oldstash = SvSTASH(tmpRef);
10017         }
10018     }
10019     SvOBJECT_on(tmpRef);
10020     SvUPGRADE(tmpRef, SVt_PVMG);
10021     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10022     SvREFCNT_dec(oldstash);
10023
10024     if(SvSMAGICAL(tmpRef))
10025         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10026             mg_set(tmpRef);
10027
10028
10029
10030     return sv;
10031 }
10032
10033 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10034  * as it is after unglobbing it.
10035  */
10036
10037 PERL_STATIC_INLINE void
10038 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10039 {
10040     void *xpvmg;
10041     HV *stash;
10042     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10043
10044     PERL_ARGS_ASSERT_SV_UNGLOB;
10045
10046     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10047     SvFAKE_off(sv);
10048     if (!(flags & SV_COW_DROP_PV))
10049         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10050
10051     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10052     if (GvGP(sv)) {
10053         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10054            && HvNAME_get(stash))
10055             mro_method_changed_in(stash);
10056         gp_free(MUTABLE_GV(sv));
10057     }
10058     if (GvSTASH(sv)) {
10059         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10060         GvSTASH(sv) = NULL;
10061     }
10062     GvMULTI_off(sv);
10063     if (GvNAME_HEK(sv)) {
10064         unshare_hek(GvNAME_HEK(sv));
10065     }
10066     isGV_with_GP_off(sv);
10067
10068     if(SvTYPE(sv) == SVt_PVGV) {
10069         /* need to keep SvANY(sv) in the right arena */
10070         xpvmg = new_XPVMG();
10071         StructCopy(SvANY(sv), xpvmg, XPVMG);
10072         del_XPVGV(SvANY(sv));
10073         SvANY(sv) = xpvmg;
10074
10075         SvFLAGS(sv) &= ~SVTYPEMASK;
10076         SvFLAGS(sv) |= SVt_PVMG;
10077     }
10078
10079     /* Intentionally not calling any local SET magic, as this isn't so much a
10080        set operation as merely an internal storage change.  */
10081     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10082     else sv_setsv_flags(sv, temp, 0);
10083
10084     if ((const GV *)sv == PL_last_in_gv)
10085         PL_last_in_gv = NULL;
10086     else if ((const GV *)sv == PL_statgv)
10087         PL_statgv = NULL;
10088 }
10089
10090 /*
10091 =for apidoc sv_unref_flags
10092
10093 Unsets the RV status of the SV, and decrements the reference count of
10094 whatever was being referenced by the RV.  This can almost be thought of
10095 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10096 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10097 (otherwise the decrementing is conditional on the reference count being
10098 different from one or the reference being a readonly SV).
10099 See C<SvROK_off>.
10100
10101 =cut
10102 */
10103
10104 void
10105 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10106 {
10107     SV* const target = SvRV(ref);
10108
10109     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10110
10111     if (SvWEAKREF(ref)) {
10112         sv_del_backref(target, ref);
10113         SvWEAKREF_off(ref);
10114         SvRV_set(ref, NULL);
10115         return;
10116     }
10117     SvRV_set(ref, NULL);
10118     SvROK_off(ref);
10119     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10120        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10121     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10122         SvREFCNT_dec_NN(target);
10123     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10124         sv_2mortal(target);     /* Schedule for freeing later */
10125 }
10126
10127 /*
10128 =for apidoc sv_untaint
10129
10130 Untaint an SV.  Use C<SvTAINTED_off> instead.
10131
10132 =cut
10133 */
10134
10135 void
10136 Perl_sv_untaint(pTHX_ SV *const sv)
10137 {
10138     PERL_ARGS_ASSERT_SV_UNTAINT;
10139     PERL_UNUSED_CONTEXT;
10140
10141     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10142         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10143         if (mg)
10144             mg->mg_len &= ~1;
10145     }
10146 }
10147
10148 /*
10149 =for apidoc sv_tainted
10150
10151 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10152
10153 =cut
10154 */
10155
10156 bool
10157 Perl_sv_tainted(pTHX_ SV *const sv)
10158 {
10159     PERL_ARGS_ASSERT_SV_TAINTED;
10160     PERL_UNUSED_CONTEXT;
10161
10162     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10163         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10164         if (mg && (mg->mg_len & 1) )
10165             return TRUE;
10166     }
10167     return FALSE;
10168 }
10169
10170 /*
10171 =for apidoc sv_setpviv
10172
10173 Copies an integer into the given SV, also updating its string value.
10174 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10175
10176 =cut
10177 */
10178
10179 void
10180 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10181 {
10182     char buf[TYPE_CHARS(UV)];
10183     char *ebuf;
10184     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10185
10186     PERL_ARGS_ASSERT_SV_SETPVIV;
10187
10188     sv_setpvn(sv, ptr, ebuf - ptr);
10189 }
10190
10191 /*
10192 =for apidoc sv_setpviv_mg
10193
10194 Like C<sv_setpviv>, but also handles 'set' magic.
10195
10196 =cut
10197 */
10198
10199 void
10200 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10201 {
10202     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10203
10204     sv_setpviv(sv, iv);
10205     SvSETMAGIC(sv);
10206 }
10207
10208 #if defined(PERL_IMPLICIT_CONTEXT)
10209
10210 /* pTHX_ magic can't cope with varargs, so this is a no-context
10211  * version of the main function, (which may itself be aliased to us).
10212  * Don't access this version directly.
10213  */
10214
10215 void
10216 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10217 {
10218     dTHX;
10219     va_list args;
10220
10221     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10222
10223     va_start(args, pat);
10224     sv_vsetpvf(sv, pat, &args);
10225     va_end(args);
10226 }
10227
10228 /* pTHX_ magic can't cope with varargs, so this is a no-context
10229  * version of the main function, (which may itself be aliased to us).
10230  * Don't access this version directly.
10231  */
10232
10233 void
10234 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10235 {
10236     dTHX;
10237     va_list args;
10238
10239     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10240
10241     va_start(args, pat);
10242     sv_vsetpvf_mg(sv, pat, &args);
10243     va_end(args);
10244 }
10245 #endif
10246
10247 /*
10248 =for apidoc sv_setpvf
10249
10250 Works like C<sv_catpvf> but copies the text into the SV instead of
10251 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10252
10253 =cut
10254 */
10255
10256 void
10257 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10258 {
10259     va_list args;
10260
10261     PERL_ARGS_ASSERT_SV_SETPVF;
10262
10263     va_start(args, pat);
10264     sv_vsetpvf(sv, pat, &args);
10265     va_end(args);
10266 }
10267
10268 /*
10269 =for apidoc sv_vsetpvf
10270
10271 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10272 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10273
10274 Usually used via its frontend C<sv_setpvf>.
10275
10276 =cut
10277 */
10278
10279 void
10280 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10281 {
10282     PERL_ARGS_ASSERT_SV_VSETPVF;
10283
10284     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10285 }
10286
10287 /*
10288 =for apidoc sv_setpvf_mg
10289
10290 Like C<sv_setpvf>, but also handles 'set' magic.
10291
10292 =cut
10293 */
10294
10295 void
10296 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10297 {
10298     va_list args;
10299
10300     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10301
10302     va_start(args, pat);
10303     sv_vsetpvf_mg(sv, pat, &args);
10304     va_end(args);
10305 }
10306
10307 /*
10308 =for apidoc sv_vsetpvf_mg
10309
10310 Like C<sv_vsetpvf>, but also handles 'set' magic.
10311
10312 Usually used via its frontend C<sv_setpvf_mg>.
10313
10314 =cut
10315 */
10316
10317 void
10318 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10319 {
10320     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10321
10322     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10323     SvSETMAGIC(sv);
10324 }
10325
10326 #if defined(PERL_IMPLICIT_CONTEXT)
10327
10328 /* pTHX_ magic can't cope with varargs, so this is a no-context
10329  * version of the main function, (which may itself be aliased to us).
10330  * Don't access this version directly.
10331  */
10332
10333 void
10334 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10335 {
10336     dTHX;
10337     va_list args;
10338
10339     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10340
10341     va_start(args, pat);
10342     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10343     va_end(args);
10344 }
10345
10346 /* pTHX_ magic can't cope with varargs, so this is a no-context
10347  * version of the main function, (which may itself be aliased to us).
10348  * Don't access this version directly.
10349  */
10350
10351 void
10352 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10353 {
10354     dTHX;
10355     va_list args;
10356
10357     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10358
10359     va_start(args, pat);
10360     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10361     SvSETMAGIC(sv);
10362     va_end(args);
10363 }
10364 #endif
10365
10366 /*
10367 =for apidoc sv_catpvf
10368
10369 Processes its arguments like C<sprintf> and appends the formatted
10370 output to an SV.  If the appended data contains "wide" characters
10371 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10372 and characters >255 formatted with %c), the original SV might get
10373 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10374 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10375 valid UTF-8; if the original SV was bytes, the pattern should be too.
10376
10377 =cut */
10378
10379 void
10380 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10381 {
10382     va_list args;
10383
10384     PERL_ARGS_ASSERT_SV_CATPVF;
10385
10386     va_start(args, pat);
10387     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10388     va_end(args);
10389 }
10390
10391 /*
10392 =for apidoc sv_vcatpvf
10393
10394 Processes its arguments like C<vsprintf> and appends the formatted output
10395 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10396
10397 Usually used via its frontend C<sv_catpvf>.
10398
10399 =cut
10400 */
10401
10402 void
10403 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10404 {
10405     PERL_ARGS_ASSERT_SV_VCATPVF;
10406
10407     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10408 }
10409
10410 /*
10411 =for apidoc sv_catpvf_mg
10412
10413 Like C<sv_catpvf>, but also handles 'set' magic.
10414
10415 =cut
10416 */
10417
10418 void
10419 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10420 {
10421     va_list args;
10422
10423     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10424
10425     va_start(args, pat);
10426     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10427     SvSETMAGIC(sv);
10428     va_end(args);
10429 }
10430
10431 /*
10432 =for apidoc sv_vcatpvf_mg
10433
10434 Like C<sv_vcatpvf>, but also handles 'set' magic.
10435
10436 Usually used via its frontend C<sv_catpvf_mg>.
10437
10438 =cut
10439 */
10440
10441 void
10442 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10443 {
10444     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10445
10446     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10447     SvSETMAGIC(sv);
10448 }
10449
10450 /*
10451 =for apidoc sv_vsetpvfn
10452
10453 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10454 appending it.
10455
10456 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10457
10458 =cut
10459 */
10460
10461 void
10462 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10463                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10464 {
10465     PERL_ARGS_ASSERT_SV_VSETPVFN;
10466
10467     sv_setpvs(sv, "");
10468     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10469 }
10470
10471
10472 /*
10473  * Warn of missing argument to sprintf, and then return a defined value
10474  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10475  */
10476 STATIC SV*
10477 S_vcatpvfn_missing_argument(pTHX) {
10478     if (ckWARN(WARN_MISSING)) {
10479         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10480                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10481     }
10482     return &PL_sv_no;
10483 }
10484
10485
10486 STATIC I32
10487 S_expect_number(pTHX_ char **const pattern)
10488 {
10489     I32 var = 0;
10490
10491     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10492
10493     switch (**pattern) {
10494     case '1': case '2': case '3':
10495     case '4': case '5': case '6':
10496     case '7': case '8': case '9':
10497         var = *(*pattern)++ - '0';
10498         while (isDIGIT(**pattern)) {
10499             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10500             if (tmp < var)
10501                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10502             var = tmp;
10503         }
10504     }
10505     return var;
10506 }
10507
10508 STATIC char *
10509 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10510 {
10511     const int neg = nv < 0;
10512     UV uv;
10513
10514     PERL_ARGS_ASSERT_F0CONVERT;
10515
10516     if (neg)
10517         nv = -nv;
10518     if (nv < UV_MAX) {
10519         char *p = endbuf;
10520         nv += 0.5;
10521         uv = (UV)nv;
10522         if (uv & 1 && uv == nv)
10523             uv--;                       /* Round to even */
10524         do {
10525             const unsigned dig = uv % 10;
10526             *--p = '0' + dig;
10527         } while (uv /= 10);
10528         if (neg)
10529             *--p = '-';
10530         *len = endbuf - p;
10531         return p;
10532     }
10533     return NULL;
10534 }
10535
10536
10537 /*
10538 =for apidoc sv_vcatpvfn
10539
10540 =for apidoc sv_vcatpvfn_flags
10541
10542 Processes its arguments like C<vsprintf> and appends the formatted output
10543 to an SV.  Uses an array of SVs if the C style variable argument list is
10544 missing (NULL).  When running with taint checks enabled, indicates via
10545 C<maybe_tainted> if results are untrustworthy (often due to the use of
10546 locales).
10547
10548 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10549
10550 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10551
10552 =cut
10553 */
10554
10555 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10556                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10557                         vec_utf8 = DO_UTF8(vecsv);
10558
10559 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10560
10561 void
10562 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10563                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10564 {
10565     PERL_ARGS_ASSERT_SV_VCATPVFN;
10566
10567     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10568 }
10569
10570 void
10571 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10572                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10573                        const U32 flags)
10574 {
10575     char *p;
10576     char *q;
10577     const char *patend;
10578     STRLEN origlen;
10579     I32 svix = 0;
10580     static const char nullstr[] = "(null)";
10581     SV *argsv = NULL;
10582     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10583     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10584     SV *nsv = NULL;
10585     /* Times 4: a decimal digit takes more than 3 binary digits.
10586      * NV_DIG: mantissa takes than many decimal digits.
10587      * Plus 32: Playing safe. */
10588     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10589     /* large enough for "%#.#f" --chip */
10590     /* what about long double NVs? --jhi */
10591     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
10592
10593     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
10594
10595     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10596     PERL_UNUSED_ARG(maybe_tainted);
10597
10598     if (flags & SV_GMAGIC)
10599         SvGETMAGIC(sv);
10600
10601     /* no matter what, this is a string now */
10602     (void)SvPV_force_nomg(sv, origlen);
10603
10604     /* special-case "", "%s", and "%-p" (SVf - see below) */
10605     if (patlen == 0) {
10606         if (svmax && ckWARN(WARN_REDUNDANT))
10607             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10608                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10609         return;
10610     }
10611     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10612         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10613             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10614                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10615
10616         if (args) {
10617             const char * const s = va_arg(*args, char*);
10618             sv_catpv_nomg(sv, s ? s : nullstr);
10619         }
10620         else if (svix < svmax) {
10621             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10622             SvGETMAGIC(*svargs);
10623             sv_catsv_nomg(sv, *svargs);
10624         }
10625         else
10626             S_vcatpvfn_missing_argument(aTHX);
10627         return;
10628     }
10629     if (args && patlen == 3 && pat[0] == '%' &&
10630                 pat[1] == '-' && pat[2] == 'p') {
10631         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
10632             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
10633                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10634         argsv = MUTABLE_SV(va_arg(*args, void*));
10635         sv_catsv_nomg(sv, argsv);
10636         return;
10637     }
10638
10639 #ifndef USE_LONG_DOUBLE
10640     /* special-case "%.<number>[gf]" */
10641     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10642          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10643         unsigned digits = 0;
10644         const char *pp;
10645
10646         pp = pat + 2;
10647         while (*pp >= '0' && *pp <= '9')
10648             digits = 10 * digits + (*pp++ - '0');
10649
10650         /* XXX: Why do this `svix < svmax` test? Couldn't we just
10651            format the first argument and WARN_REDUNDANT if svmax > 1?
10652            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
10653         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10654             const NV nv = SvNV(*svargs);
10655             if (*pp == 'g') {
10656                 /* Add check for digits != 0 because it seems that some
10657                    gconverts are buggy in this case, and we don't yet have
10658                    a Configure test for this.  */
10659                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10660                      /* 0, point, slack */
10661                     STORE_LC_NUMERIC_SET_TO_NEEDED();
10662                     PERL_UNUSED_RESULT(Gconvert(nv, (int)digits, 0, ebuf));
10663                     sv_catpv_nomg(sv, ebuf);
10664                     if (*ebuf)  /* May return an empty string for digits==0 */
10665                         return;
10666                 }
10667             } else if (!digits) {
10668                 STRLEN l;
10669
10670                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10671                     sv_catpvn_nomg(sv, p, l);
10672                     return;
10673                 }
10674             }
10675         }
10676     }
10677 #endif /* !USE_LONG_DOUBLE */
10678
10679     if (!args && svix < svmax && DO_UTF8(*svargs))
10680         has_utf8 = TRUE;
10681
10682     patend = (char*)pat + patlen;
10683     for (p = (char*)pat; p < patend; p = q) {
10684         bool alt = FALSE;
10685         bool left = FALSE;
10686         bool vectorize = FALSE;
10687         bool vectorarg = FALSE;
10688         bool vec_utf8 = FALSE;
10689         char fill = ' ';
10690         char plus = 0;
10691         char intsize = 0;
10692         STRLEN width = 0;
10693         STRLEN zeros = 0;
10694         bool has_precis = FALSE;
10695         STRLEN precis = 0;
10696         const I32 osvix = svix;
10697         bool is_utf8 = FALSE;  /* is this item utf8?   */
10698 #ifdef HAS_LDBL_SPRINTF_BUG
10699         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10700            with sfio - Allen <allens@cpan.org> */
10701         bool fix_ldbl_sprintf_bug = FALSE;
10702 #endif
10703
10704         char esignbuf[4];
10705         U8 utf8buf[UTF8_MAXBYTES+1];
10706         STRLEN esignlen = 0;
10707
10708         const char *eptr = NULL;
10709         const char *fmtstart;
10710         STRLEN elen = 0;
10711         SV *vecsv = NULL;
10712         const U8 *vecstr = NULL;
10713         STRLEN veclen = 0;
10714         char c = 0;
10715         int i;
10716         unsigned base = 0;
10717         IV iv = 0;
10718         UV uv = 0;
10719         /* we need a long double target in case HAS_LONG_DOUBLE but
10720            not USE_LONG_DOUBLE
10721         */
10722 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10723         long double nv;
10724 #else
10725         NV nv;
10726 #endif
10727         STRLEN have;
10728         STRLEN need;
10729         STRLEN gap;
10730         const char *dotstr = ".";
10731         STRLEN dotstrlen = 1;
10732         I32 efix = 0; /* explicit format parameter index */
10733         I32 ewix = 0; /* explicit width index */
10734         I32 epix = 0; /* explicit precision index */
10735         I32 evix = 0; /* explicit vector index */
10736         bool asterisk = FALSE;
10737
10738         /* echo everything up to the next format specification */
10739         for (q = p; q < patend && *q != '%'; ++q) ;
10740         if (q > p) {
10741             if (has_utf8 && !pat_utf8)
10742                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10743             else
10744                 sv_catpvn_nomg(sv, p, q - p);
10745             p = q;
10746         }
10747         if (q++ >= patend)
10748             break;
10749
10750         fmtstart = q;
10751
10752 /*
10753     We allow format specification elements in this order:
10754         \d+\$              explicit format parameter index
10755         [-+ 0#]+           flags
10756         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10757         0                  flag (as above): repeated to allow "v02"     
10758         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10759         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10760         [hlqLV]            size
10761     [%bcdefginopsuxDFOUX] format (mandatory)
10762 */
10763
10764         if (args) {
10765 /*  
10766         As of perl5.9.3, printf format checking is on by default.
10767         Internally, perl uses %p formats to provide an escape to
10768         some extended formatting.  This block deals with those
10769         extensions: if it does not match, (char*)q is reset and
10770         the normal format processing code is used.
10771
10772         Currently defined extensions are:
10773                 %p              include pointer address (standard)      
10774                 %-p     (SVf)   include an SV (previously %_)
10775                 %-<num>p        include an SV with precision <num>      
10776                 %2p             include a HEK
10777                 %3p             include a HEK with precision of 256
10778                 %4p             char* preceded by utf8 flag and length
10779                 %<num>p         (where num is 1 or > 4) reserved for future
10780                                 extensions
10781
10782         Robin Barker 2005-07-14 (but modified since)
10783
10784                 %1p     (VDf)   removed.  RMB 2007-10-19
10785 */
10786             char* r = q; 
10787             bool sv = FALSE;    
10788             STRLEN n = 0;
10789             if (*q == '-')
10790                 sv = *q++;
10791             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10792                 /* The argument has already gone through cBOOL, so the cast
10793                    is safe. */
10794                 is_utf8 = (bool)va_arg(*args, int);
10795                 elen = va_arg(*args, UV);
10796                 eptr = va_arg(*args, char *);
10797                 q += sizeof(UTF8f)-1;
10798                 goto string;
10799             }
10800             n = expect_number(&q);
10801             if (*q++ == 'p') {
10802                 if (sv) {                       /* SVf */
10803                     if (n) {
10804                         precis = n;
10805                         has_precis = TRUE;
10806                     }
10807                     argsv = MUTABLE_SV(va_arg(*args, void*));
10808                     eptr = SvPV_const(argsv, elen);
10809                     if (DO_UTF8(argsv))
10810                         is_utf8 = TRUE;
10811                     goto string;
10812                 }
10813                 else if (n==2 || n==3) {        /* HEKf */
10814                     HEK * const hek = va_arg(*args, HEK *);
10815                     eptr = HEK_KEY(hek);
10816                     elen = HEK_LEN(hek);
10817                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10818                     if (n==3) precis = 256, has_precis = TRUE;
10819                     goto string;
10820                 }
10821                 else if (n) {
10822                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10823                                      "internal %%<num>p might conflict with future printf extensions");
10824                 }
10825             }
10826             q = r; 
10827         }
10828
10829         if ( (width = expect_number(&q)) ) {
10830             if (*q == '$') {
10831                 ++q;
10832                 efix = width;
10833                 if (!no_redundant_warning)
10834                     /* I've forgotten if it's a better
10835                        micro-optimization to always set this or to
10836                        only set it if it's unset */
10837                     no_redundant_warning = TRUE;
10838             } else {
10839                 goto gotwidth;
10840             }
10841         }
10842
10843         /* FLAGS */
10844
10845         while (*q) {
10846             switch (*q) {
10847             case ' ':
10848             case '+':
10849                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10850                     q++;
10851                 else
10852                     plus = *q++;
10853                 continue;
10854
10855             case '-':
10856                 left = TRUE;
10857                 q++;
10858                 continue;
10859
10860             case '0':
10861                 fill = *q++;
10862                 continue;
10863
10864             case '#':
10865                 alt = TRUE;
10866                 q++;
10867                 continue;
10868
10869             default:
10870                 break;
10871             }
10872             break;
10873         }
10874
10875       tryasterisk:
10876         if (*q == '*') {
10877             q++;
10878             if ( (ewix = expect_number(&q)) )
10879                 if (*q++ != '$')
10880                     goto unknown;
10881             asterisk = TRUE;
10882         }
10883         if (*q == 'v') {
10884             q++;
10885             if (vectorize)
10886                 goto unknown;
10887             if ((vectorarg = asterisk)) {
10888                 evix = ewix;
10889                 ewix = 0;
10890                 asterisk = FALSE;
10891             }
10892             vectorize = TRUE;
10893             goto tryasterisk;
10894         }
10895
10896         if (!asterisk)
10897         {
10898             if( *q == '0' )
10899                 fill = *q++;
10900             width = expect_number(&q);
10901         }
10902
10903         if (vectorize && vectorarg) {
10904             /* vectorizing, but not with the default "." */
10905             if (args)
10906                 vecsv = va_arg(*args, SV*);
10907             else if (evix) {
10908                 vecsv = (evix > 0 && evix <= svmax)
10909                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10910             } else {
10911                 vecsv = svix < svmax
10912                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10913             }
10914             dotstr = SvPV_const(vecsv, dotstrlen);
10915             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10916                bad with tied or overloaded values that return UTF8.  */
10917             if (DO_UTF8(vecsv))
10918                 is_utf8 = TRUE;
10919             else if (has_utf8) {
10920                 vecsv = sv_mortalcopy(vecsv);
10921                 sv_utf8_upgrade(vecsv);
10922                 dotstr = SvPV_const(vecsv, dotstrlen);
10923                 is_utf8 = TRUE;
10924             }               
10925         }
10926
10927         if (asterisk) {
10928             if (args)
10929                 i = va_arg(*args, int);
10930             else
10931                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10932                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10933             left |= (i < 0);
10934             width = (i < 0) ? -i : i;
10935         }
10936       gotwidth:
10937
10938         /* PRECISION */
10939
10940         if (*q == '.') {
10941             q++;
10942             if (*q == '*') {
10943                 q++;
10944                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10945                     goto unknown;
10946                 /* XXX: todo, support specified precision parameter */
10947                 if (epix)
10948                     goto unknown;
10949                 if (args)
10950                     i = va_arg(*args, int);
10951                 else
10952                     i = (ewix ? ewix <= svmax : svix < svmax)
10953                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10954                 precis = i;
10955                 has_precis = !(i < 0);
10956             }
10957             else {
10958                 precis = 0;
10959                 while (isDIGIT(*q))
10960                     precis = precis * 10 + (*q++ - '0');
10961                 has_precis = TRUE;
10962             }
10963         }
10964
10965         if (vectorize) {
10966             if (args) {
10967                 VECTORIZE_ARGS
10968             }
10969             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10970                 vecsv = svargs[efix ? efix-1 : svix++];
10971                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10972                 vec_utf8 = DO_UTF8(vecsv);
10973
10974                 /* if this is a version object, we need to convert
10975                  * back into v-string notation and then let the
10976                  * vectorize happen normally
10977                  */
10978                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10979                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10980                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10981                         "vector argument not supported with alpha versions");
10982                         goto vdblank;
10983                     }
10984                     vecsv = sv_newmortal();
10985                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10986                                  vecsv);
10987                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10988                     vec_utf8 = DO_UTF8(vecsv);
10989                 }
10990             }
10991             else {
10992               vdblank:
10993                 vecstr = (U8*)"";
10994                 veclen = 0;
10995             }
10996         }
10997
10998         /* SIZE */
10999
11000         switch (*q) {
11001 #ifdef WIN32
11002         case 'I':                       /* Ix, I32x, and I64x */
11003 #  ifdef USE_64_BIT_INT
11004             if (q[1] == '6' && q[2] == '4') {
11005                 q += 3;
11006                 intsize = 'q';
11007                 break;
11008             }
11009 #  endif
11010             if (q[1] == '3' && q[2] == '2') {
11011                 q += 3;
11012                 break;
11013             }
11014 #  ifdef USE_64_BIT_INT
11015             intsize = 'q';
11016 #  endif
11017             q++;
11018             break;
11019 #endif
11020 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11021         case 'L':                       /* Ld */
11022             /* FALLTHROUGH */
11023 #if IVSIZE >= 8
11024         case 'q':                       /* qd */
11025 #endif
11026             intsize = 'q';
11027             q++;
11028             break;
11029 #endif
11030         case 'l':
11031             ++q;
11032 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11033             if (*q == 'l') {    /* lld, llf */
11034                 intsize = 'q';
11035                 ++q;
11036             }
11037             else
11038 #endif
11039                 intsize = 'l';
11040             break;
11041         case 'h':
11042             if (*++q == 'h') {  /* hhd, hhu */
11043                 intsize = 'c';
11044                 ++q;
11045             }
11046             else
11047                 intsize = 'h';
11048             break;
11049         case 'V':
11050         case 'z':
11051         case 't':
11052 #ifdef HAS_C99
11053         case 'j':
11054 #endif
11055             intsize = *q++;
11056             break;
11057         }
11058
11059         /* CONVERSION */
11060
11061         if (*q == '%') {
11062             eptr = q++;
11063             elen = 1;
11064             if (vectorize) {
11065                 c = '%';
11066                 goto unknown;
11067             }
11068             goto string;
11069         }
11070
11071         if (!vectorize && !args) {
11072             if (efix) {
11073                 const I32 i = efix-1;
11074                 argsv = (i >= 0 && i < svmax)
11075                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11076             } else {
11077                 argsv = (svix >= 0 && svix < svmax)
11078                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11079             }
11080         }
11081
11082         switch (c = *q++) {
11083
11084             /* STRINGS */
11085
11086         case 'c':
11087             if (vectorize)
11088                 goto unknown;
11089             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
11090             if ((uv > 255 ||
11091                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11092                 && !IN_BYTES) {
11093                 eptr = (char*)utf8buf;
11094                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11095                 is_utf8 = TRUE;
11096             }
11097             else {
11098                 c = (char)uv;
11099                 eptr = &c;
11100                 elen = 1;
11101             }
11102             goto string;
11103
11104         case 's':
11105             if (vectorize)
11106                 goto unknown;
11107             if (args) {
11108                 eptr = va_arg(*args, char*);
11109                 if (eptr)
11110                     elen = strlen(eptr);
11111                 else {
11112                     eptr = (char *)nullstr;
11113                     elen = sizeof nullstr - 1;
11114                 }
11115             }
11116             else {
11117                 eptr = SvPV_const(argsv, elen);
11118                 if (DO_UTF8(argsv)) {
11119                     STRLEN old_precis = precis;
11120                     if (has_precis && precis < elen) {
11121                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11122                         STRLEN p = precis > ulen ? ulen : precis;
11123                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11124                                                         /* sticks at end */
11125                     }
11126                     if (width) { /* fudge width (can't fudge elen) */
11127                         if (has_precis && precis < elen)
11128                             width += precis - old_precis;
11129                         else
11130                             width +=
11131                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11132                     }
11133                     is_utf8 = TRUE;
11134                 }
11135             }
11136
11137         string:
11138             if (has_precis && precis < elen)
11139                 elen = precis;
11140             break;
11141
11142             /* INTEGERS */
11143
11144         case 'p':
11145             if (alt || vectorize)
11146                 goto unknown;
11147             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11148             base = 16;
11149             goto integer;
11150
11151         case 'D':
11152 #ifdef IV_IS_QUAD
11153             intsize = 'q';
11154 #else
11155             intsize = 'l';
11156 #endif
11157             /* FALLTHROUGH */
11158         case 'd':
11159         case 'i':
11160             if (vectorize) {
11161                 STRLEN ulen;
11162                 if (!veclen)
11163                     continue;
11164                 if (vec_utf8)
11165                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11166                                         UTF8_ALLOW_ANYUV);
11167                 else {
11168                     uv = *vecstr;
11169                     ulen = 1;
11170                 }
11171                 vecstr += ulen;
11172                 veclen -= ulen;
11173                 if (plus)
11174                      esignbuf[esignlen++] = plus;
11175             }
11176             else if (args) {
11177                 switch (intsize) {
11178                 case 'c':       iv = (char)va_arg(*args, int); break;
11179                 case 'h':       iv = (short)va_arg(*args, int); break;
11180                 case 'l':       iv = va_arg(*args, long); break;
11181                 case 'V':       iv = va_arg(*args, IV); break;
11182                 case 'z':       iv = va_arg(*args, SSize_t); break;
11183 #ifdef HAS_PTRDIFF_T
11184                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11185 #endif
11186                 default:        iv = va_arg(*args, int); break;
11187 #ifdef HAS_C99
11188                 case 'j':       iv = va_arg(*args, intmax_t); break;
11189 #endif
11190                 case 'q':
11191 #if IVSIZE >= 8
11192                                 iv = va_arg(*args, Quad_t); break;
11193 #else
11194                                 goto unknown;
11195 #endif
11196                 }
11197             }
11198             else {
11199                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
11200                 switch (intsize) {
11201                 case 'c':       iv = (char)tiv; break;
11202                 case 'h':       iv = (short)tiv; break;
11203                 case 'l':       iv = (long)tiv; break;
11204                 case 'V':
11205                 default:        iv = tiv; break;
11206                 case 'q':
11207 #if IVSIZE >= 8
11208                                 iv = (Quad_t)tiv; break;
11209 #else
11210                                 goto unknown;
11211 #endif
11212                 }
11213             }
11214             if ( !vectorize )   /* we already set uv above */
11215             {
11216                 if (iv >= 0) {
11217                     uv = iv;
11218                     if (plus)
11219                         esignbuf[esignlen++] = plus;
11220                 }
11221                 else {
11222                     uv = -iv;
11223                     esignbuf[esignlen++] = '-';
11224                 }
11225             }
11226             base = 10;
11227             goto integer;
11228
11229         case 'U':
11230 #ifdef IV_IS_QUAD
11231             intsize = 'q';
11232 #else
11233             intsize = 'l';
11234 #endif
11235             /* FALLTHROUGH */
11236         case 'u':
11237             base = 10;
11238             goto uns_integer;
11239
11240         case 'B':
11241         case 'b':
11242             base = 2;
11243             goto uns_integer;
11244
11245         case 'O':
11246 #ifdef IV_IS_QUAD
11247             intsize = 'q';
11248 #else
11249             intsize = 'l';
11250 #endif
11251             /* FALLTHROUGH */
11252         case 'o':
11253             base = 8;
11254             goto uns_integer;
11255
11256         case 'X':
11257         case 'x':
11258             base = 16;
11259
11260         uns_integer:
11261             if (vectorize) {
11262                 STRLEN ulen;
11263         vector:
11264                 if (!veclen)
11265                     continue;
11266                 if (vec_utf8)
11267                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11268                                         UTF8_ALLOW_ANYUV);
11269                 else {
11270                     uv = *vecstr;
11271                     ulen = 1;
11272                 }
11273                 vecstr += ulen;
11274                 veclen -= ulen;
11275             }
11276             else if (args) {
11277                 switch (intsize) {
11278                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11279                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11280                 case 'l':  uv = va_arg(*args, unsigned long); break;
11281                 case 'V':  uv = va_arg(*args, UV); break;
11282                 case 'z':  uv = va_arg(*args, Size_t); break;
11283 #ifdef HAS_PTRDIFF_T
11284                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11285 #endif
11286 #ifdef HAS_C99
11287                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11288 #endif
11289                 default:   uv = va_arg(*args, unsigned); break;
11290                 case 'q':
11291 #if IVSIZE >= 8
11292                            uv = va_arg(*args, Uquad_t); break;
11293 #else
11294                            goto unknown;
11295 #endif
11296                 }
11297             }
11298             else {
11299                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11300                 switch (intsize) {
11301                 case 'c':       uv = (unsigned char)tuv; break;
11302                 case 'h':       uv = (unsigned short)tuv; break;
11303                 case 'l':       uv = (unsigned long)tuv; break;
11304                 case 'V':
11305                 default:        uv = tuv; break;
11306                 case 'q':
11307 #if IVSIZE >= 8
11308                                 uv = (Uquad_t)tuv; break;
11309 #else
11310                                 goto unknown;
11311 #endif
11312                 }
11313             }
11314
11315         integer:
11316             {
11317                 char *ptr = ebuf + sizeof ebuf;
11318                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11319                 unsigned dig;
11320                 zeros = 0;
11321
11322                 switch (base) {
11323                 case 16:
11324                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11325                     do {
11326                         dig = uv & 15;
11327                         *--ptr = p[dig];
11328                     } while (uv >>= 4);
11329                     if (tempalt) {
11330                         esignbuf[esignlen++] = '0';
11331                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11332                     }
11333                     break;
11334                 case 8:
11335                     do {
11336                         dig = uv & 7;
11337                         *--ptr = '0' + dig;
11338                     } while (uv >>= 3);
11339                     if (alt && *ptr != '0')
11340                         *--ptr = '0';
11341                     break;
11342                 case 2:
11343                     do {
11344                         dig = uv & 1;
11345                         *--ptr = '0' + dig;
11346                     } while (uv >>= 1);
11347                     if (tempalt) {
11348                         esignbuf[esignlen++] = '0';
11349                         esignbuf[esignlen++] = c;
11350                     }
11351                     break;
11352                 default:                /* it had better be ten or less */
11353                     do {
11354                         dig = uv % base;
11355                         *--ptr = '0' + dig;
11356                     } while (uv /= base);
11357                     break;
11358                 }
11359                 elen = (ebuf + sizeof ebuf) - ptr;
11360                 eptr = ptr;
11361                 if (has_precis) {
11362                     if (precis > elen)
11363                         zeros = precis - elen;
11364                     else if (precis == 0 && elen == 1 && *eptr == '0'
11365                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11366                         elen = 0;
11367
11368                 /* a precision nullifies the 0 flag. */
11369                     if (fill == '0')
11370                         fill = ' ';
11371                 }
11372             }
11373             break;
11374
11375             /* FLOATING POINT */
11376
11377         case 'F':
11378             c = 'f';            /* maybe %F isn't supported here */
11379             /* FALLTHROUGH */
11380         case 'e': case 'E':
11381         case 'f':
11382         case 'g': case 'G':
11383             if (vectorize)
11384                 goto unknown;
11385
11386             /* This is evil, but floating point is even more evil */
11387
11388             /* for SV-style calling, we can only get NV
11389                for C-style calling, we assume %f is double;
11390                for simplicity we allow any of %Lf, %llf, %qf for long double
11391             */
11392             switch (intsize) {
11393             case 'V':
11394 #if defined(USE_LONG_DOUBLE)
11395                 intsize = 'q';
11396 #endif
11397                 break;
11398 /* [perl #20339] - we should accept and ignore %lf rather than die */
11399             case 'l':
11400                 /* FALLTHROUGH */
11401             default:
11402 #if defined(USE_LONG_DOUBLE)
11403                 intsize = args ? 0 : 'q';
11404 #endif
11405                 break;
11406             case 'q':
11407 #if defined(HAS_LONG_DOUBLE)
11408                 break;
11409 #else
11410                 /* FALLTHROUGH */
11411 #endif
11412             case 'c':
11413             case 'h':
11414             case 'z':
11415             case 't':
11416             case 'j':
11417                 goto unknown;
11418             }
11419
11420             /* now we need (long double) if intsize == 'q', else (double) */
11421             nv = (args) ?
11422 #if LONG_DOUBLESIZE > DOUBLESIZE
11423                 intsize == 'q' ?
11424                     va_arg(*args, long double) :
11425                     va_arg(*args, double)
11426 #else
11427                     va_arg(*args, double)
11428 #endif
11429                 : SvNV(argsv);
11430
11431             need = 0;
11432             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11433                else. frexp() has some unspecified behaviour for those three */
11434             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11435                 i = PERL_INT_MIN;
11436                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11437                    will cast our (long double) to (double) */
11438                 (void)Perl_frexp(nv, &i);
11439                 if (i == PERL_INT_MIN)
11440                     Perl_die(aTHX_ "panic: frexp");
11441                 if (i > 0)
11442                     need = BIT_DIGITS(i);
11443             }
11444             need += has_precis ? precis : 6; /* known default */
11445
11446             if (need < width)
11447                 need = width;
11448
11449 #ifdef HAS_LDBL_SPRINTF_BUG
11450             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11451                with sfio - Allen <allens@cpan.org> */
11452
11453 #  ifdef DBL_MAX
11454 #    define MY_DBL_MAX DBL_MAX
11455 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11456 #    if DOUBLESIZE >= 8
11457 #      define MY_DBL_MAX 1.7976931348623157E+308L
11458 #    else
11459 #      define MY_DBL_MAX 3.40282347E+38L
11460 #    endif
11461 #  endif
11462
11463 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11464 #    define MY_DBL_MAX_BUG 1L
11465 #  else
11466 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11467 #  endif
11468
11469 #  ifdef DBL_MIN
11470 #    define MY_DBL_MIN DBL_MIN
11471 #  else  /* XXX guessing! -Allen */
11472 #    if DOUBLESIZE >= 8
11473 #      define MY_DBL_MIN 2.2250738585072014E-308L
11474 #    else
11475 #      define MY_DBL_MIN 1.17549435E-38L
11476 #    endif
11477 #  endif
11478
11479             if ((intsize == 'q') && (c == 'f') &&
11480                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11481                 (need < DBL_DIG)) {
11482                 /* it's going to be short enough that
11483                  * long double precision is not needed */
11484
11485                 if ((nv <= 0L) && (nv >= -0L))
11486                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11487                 else {
11488                     /* would use Perl_fp_class as a double-check but not
11489                      * functional on IRIX - see perl.h comments */
11490
11491                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11492                         /* It's within the range that a double can represent */
11493 #if defined(DBL_MAX) && !defined(DBL_MIN)
11494                         if ((nv >= ((long double)1/DBL_MAX)) ||
11495                             (nv <= (-(long double)1/DBL_MAX)))
11496 #endif
11497                         fix_ldbl_sprintf_bug = TRUE;
11498                     }
11499                 }
11500                 if (fix_ldbl_sprintf_bug == TRUE) {
11501                     double temp;
11502
11503                     intsize = 0;
11504                     temp = (double)nv;
11505                     nv = (NV)temp;
11506                 }
11507             }
11508
11509 #  undef MY_DBL_MAX
11510 #  undef MY_DBL_MAX_BUG
11511 #  undef MY_DBL_MIN
11512
11513 #endif /* HAS_LDBL_SPRINTF_BUG */
11514
11515             need += 20; /* fudge factor */
11516             if (PL_efloatsize < need) {
11517                 Safefree(PL_efloatbuf);
11518                 PL_efloatsize = need + 20; /* more fudge */
11519                 Newx(PL_efloatbuf, PL_efloatsize, char);
11520                 PL_efloatbuf[0] = '\0';
11521             }
11522
11523             if ( !(width || left || plus || alt) && fill != '0'
11524                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11525                 /* See earlier comment about buggy Gconvert when digits,
11526                    aka precis is 0  */
11527                 if ( c == 'g' && precis) {
11528                     STORE_LC_NUMERIC_SET_TO_NEEDED();
11529                     PERL_UNUSED_RESULT(Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf));
11530                     /* May return an empty string for digits==0 */
11531                     if (*PL_efloatbuf) {
11532                         elen = strlen(PL_efloatbuf);
11533                         goto float_converted;
11534                     }
11535                 } else if ( c == 'f' && !precis) {
11536                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11537                         break;
11538                 }
11539             }
11540             {
11541                 char *ptr = ebuf + sizeof ebuf;
11542                 *--ptr = '\0';
11543                 *--ptr = c;
11544                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11545 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11546                 if (intsize == 'q') {
11547                     /* Copy the one or more characters in a long double
11548                      * format before the 'base' ([efgEFG]) character to
11549                      * the format string. */
11550                     static char const prifldbl[] = PERL_PRIfldbl;
11551                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11552                     while (p >= prifldbl) { *--ptr = *p--; }
11553                 }
11554 #endif
11555                 if (has_precis) {
11556                     base = precis;
11557                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11558                     *--ptr = '.';
11559                 }
11560                 if (width) {
11561                     base = width;
11562                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11563                 }
11564                 if (fill == '0')
11565                     *--ptr = fill;
11566                 if (left)
11567                     *--ptr = '-';
11568                 if (plus)
11569                     *--ptr = plus;
11570                 if (alt)
11571                     *--ptr = '#';
11572                 *--ptr = '%';
11573
11574                 /* No taint.  Otherwise we are in the strange situation
11575                  * where printf() taints but print($float) doesn't.
11576                  * --jhi */
11577
11578                 STORE_LC_NUMERIC_SET_TO_NEEDED();
11579
11580                 /* hopefully the above makes ptr a very constrained format
11581                  * that is safe to use, even though it's not literal */
11582                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
11583 #if defined(HAS_LONG_DOUBLE)
11584                 elen = ((intsize == 'q')
11585                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11586                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11587 #else
11588                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11589 #endif
11590                 GCC_DIAG_RESTORE;
11591             }
11592         float_converted:
11593             eptr = PL_efloatbuf;
11594
11595 #ifdef USE_LOCALE_NUMERIC
11596             /* If the decimal point character in the string is UTF-8, make the
11597              * output utf8 */
11598             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
11599                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
11600             {
11601                 is_utf8 = TRUE;
11602             }
11603 #endif
11604
11605             break;
11606
11607             /* SPECIAL */
11608
11609         case 'n':
11610             if (vectorize)
11611                 goto unknown;
11612             i = SvCUR(sv) - origlen;
11613             if (args) {
11614                 switch (intsize) {
11615                 case 'c':       *(va_arg(*args, char*)) = i; break;
11616                 case 'h':       *(va_arg(*args, short*)) = i; break;
11617                 default:        *(va_arg(*args, int*)) = i; break;
11618                 case 'l':       *(va_arg(*args, long*)) = i; break;
11619                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11620                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11621 #ifdef HAS_PTRDIFF_T
11622                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11623 #endif
11624 #ifdef HAS_C99
11625                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11626 #endif
11627                 case 'q':
11628 #if IVSIZE >= 8
11629                                 *(va_arg(*args, Quad_t*)) = i; break;
11630 #else
11631                                 goto unknown;
11632 #endif
11633                 }
11634             }
11635             else
11636                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11637             continue;   /* not "break" */
11638
11639             /* UNKNOWN */
11640
11641         default:
11642       unknown:
11643             if (!args
11644                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11645                 && ckWARN(WARN_PRINTF))
11646             {
11647                 SV * const msg = sv_newmortal();
11648                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11649                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11650                 if (fmtstart < patend) {
11651                     const char * const fmtend = q < patend ? q : patend;
11652                     const char * f;
11653                     sv_catpvs(msg, "\"%");
11654                     for (f = fmtstart; f < fmtend; f++) {
11655                         if (isPRINT(*f)) {
11656                             sv_catpvn_nomg(msg, f, 1);
11657                         } else {
11658                             Perl_sv_catpvf(aTHX_ msg,
11659                                            "\\%03"UVof, (UV)*f & 0xFF);
11660                         }
11661                     }
11662                     sv_catpvs(msg, "\"");
11663                 } else {
11664                     sv_catpvs(msg, "end of string");
11665                 }
11666                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11667             }
11668
11669             /* output mangled stuff ... */
11670             if (c == '\0')
11671                 --q;
11672             eptr = p;
11673             elen = q - p;
11674
11675             /* ... right here, because formatting flags should not apply */
11676             SvGROW(sv, SvCUR(sv) + elen + 1);
11677             p = SvEND(sv);
11678             Copy(eptr, p, elen, char);
11679             p += elen;
11680             *p = '\0';
11681             SvCUR_set(sv, p - SvPVX_const(sv));
11682             svix = osvix;
11683             continue;   /* not "break" */
11684         }
11685
11686         if (is_utf8 != has_utf8) {
11687             if (is_utf8) {
11688                 if (SvCUR(sv))
11689                     sv_utf8_upgrade(sv);
11690             }
11691             else {
11692                 const STRLEN old_elen = elen;
11693                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11694                 sv_utf8_upgrade(nsv);
11695                 eptr = SvPVX_const(nsv);
11696                 elen = SvCUR(nsv);
11697
11698                 if (width) { /* fudge width (can't fudge elen) */
11699                     width += elen - old_elen;
11700                 }
11701                 is_utf8 = TRUE;
11702             }
11703         }
11704
11705         have = esignlen + zeros + elen;
11706         if (have < zeros)
11707             croak_memory_wrap();
11708
11709         need = (have > width ? have : width);
11710         gap = need - have;
11711
11712         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11713             croak_memory_wrap();
11714         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11715         p = SvEND(sv);
11716         if (esignlen && fill == '0') {
11717             int i;
11718             for (i = 0; i < (int)esignlen; i++)
11719                 *p++ = esignbuf[i];
11720         }
11721         if (gap && !left) {
11722             memset(p, fill, gap);
11723             p += gap;
11724         }
11725         if (esignlen && fill != '0') {
11726             int i;
11727             for (i = 0; i < (int)esignlen; i++)
11728                 *p++ = esignbuf[i];
11729         }
11730         if (zeros) {
11731             int i;
11732             for (i = zeros; i; i--)
11733                 *p++ = '0';
11734         }
11735         if (elen) {
11736             Copy(eptr, p, elen, char);
11737             p += elen;
11738         }
11739         if (gap && left) {
11740             memset(p, ' ', gap);
11741             p += gap;
11742         }
11743         if (vectorize) {
11744             if (veclen) {
11745                 Copy(dotstr, p, dotstrlen, char);
11746                 p += dotstrlen;
11747             }
11748             else
11749                 vectorize = FALSE;              /* done iterating over vecstr */
11750         }
11751         if (is_utf8)
11752             has_utf8 = TRUE;
11753         if (has_utf8)
11754             SvUTF8_on(sv);
11755         *p = '\0';
11756         SvCUR_set(sv, p - SvPVX_const(sv));
11757         if (vectorize) {
11758             esignlen = 0;
11759             goto vector;
11760         }
11761     }
11762
11763     /* Now that we've consumed all our printf format arguments (svix)
11764      * do we have things left on the stack that we didn't use?
11765      */
11766     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
11767         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11768                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11769     }
11770
11771     SvTAINT(sv);
11772
11773     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
11774                                each iteration. */
11775 }
11776
11777 /* =========================================================================
11778
11779 =head1 Cloning an interpreter
11780
11781 =cut
11782
11783 All the macros and functions in this section are for the private use of
11784 the main function, perl_clone().
11785
11786 The foo_dup() functions make an exact copy of an existing foo thingy.
11787 During the course of a cloning, a hash table is used to map old addresses
11788 to new addresses.  The table is created and manipulated with the
11789 ptr_table_* functions.
11790
11791  * =========================================================================*/
11792
11793
11794 #if defined(USE_ITHREADS)
11795
11796 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11797 #ifndef GpREFCNT_inc
11798 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11799 #endif
11800
11801
11802 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11803    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11804    If this changes, please unmerge ss_dup.
11805    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11806 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11807 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11808 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11809 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11810 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11811 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11812 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11813 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11814 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11815 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11816 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11817 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11818 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11819
11820 /* clone a parser */
11821
11822 yy_parser *
11823 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11824 {
11825     yy_parser *parser;
11826
11827     PERL_ARGS_ASSERT_PARSER_DUP;
11828
11829     if (!proto)
11830         return NULL;
11831
11832     /* look for it in the table first */
11833     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11834     if (parser)
11835         return parser;
11836
11837     /* create anew and remember what it is */
11838     Newxz(parser, 1, yy_parser);
11839     ptr_table_store(PL_ptr_table, proto, parser);
11840
11841     /* XXX these not yet duped */
11842     parser->old_parser = NULL;
11843     parser->stack = NULL;
11844     parser->ps = NULL;
11845     parser->stack_size = 0;
11846     /* XXX parser->stack->state = 0; */
11847
11848     /* XXX eventually, just Copy() most of the parser struct ? */
11849
11850     parser->lex_brackets = proto->lex_brackets;
11851     parser->lex_casemods = proto->lex_casemods;
11852     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11853                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11854     parser->lex_casestack = savepvn(proto->lex_casestack,
11855                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11856     parser->lex_defer   = proto->lex_defer;
11857     parser->lex_dojoin  = proto->lex_dojoin;
11858     parser->lex_expect  = proto->lex_expect;
11859     parser->lex_formbrack = proto->lex_formbrack;
11860     parser->lex_inpat   = proto->lex_inpat;
11861     parser->lex_inwhat  = proto->lex_inwhat;
11862     parser->lex_op      = proto->lex_op;
11863     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11864     parser->lex_starts  = proto->lex_starts;
11865     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11866     parser->multi_close = proto->multi_close;
11867     parser->multi_open  = proto->multi_open;
11868     parser->multi_start = proto->multi_start;
11869     parser->multi_end   = proto->multi_end;
11870     parser->preambled   = proto->preambled;
11871     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11872     parser->linestr     = sv_dup_inc(proto->linestr, param);
11873     parser->expect      = proto->expect;
11874     parser->copline     = proto->copline;
11875     parser->last_lop_op = proto->last_lop_op;
11876     parser->lex_state   = proto->lex_state;
11877     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11878     /* rsfp_filters entries have fake IoDIRP() */
11879     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11880     parser->in_my       = proto->in_my;
11881     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11882     parser->error_count = proto->error_count;
11883
11884
11885     parser->linestr     = sv_dup_inc(proto->linestr, param);
11886
11887     {
11888         char * const ols = SvPVX(proto->linestr);
11889         char * const ls  = SvPVX(parser->linestr);
11890
11891         parser->bufptr      = ls + (proto->bufptr >= ols ?
11892                                     proto->bufptr -  ols : 0);
11893         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11894                                     proto->oldbufptr -  ols : 0);
11895         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11896                                     proto->oldoldbufptr -  ols : 0);
11897         parser->linestart   = ls + (proto->linestart >= ols ?
11898                                     proto->linestart -  ols : 0);
11899         parser->last_uni    = ls + (proto->last_uni >= ols ?
11900                                     proto->last_uni -  ols : 0);
11901         parser->last_lop    = ls + (proto->last_lop >= ols ?
11902                                     proto->last_lop -  ols : 0);
11903
11904         parser->bufend      = ls + SvCUR(parser->linestr);
11905     }
11906
11907     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11908
11909
11910     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11911     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11912     parser->nexttoke    = proto->nexttoke;
11913
11914     /* XXX should clone saved_curcop here, but we aren't passed
11915      * proto_perl; so do it in perl_clone_using instead */
11916
11917     return parser;
11918 }
11919
11920
11921 /* duplicate a file handle */
11922
11923 PerlIO *
11924 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11925 {
11926     PerlIO *ret;
11927
11928     PERL_ARGS_ASSERT_FP_DUP;
11929     PERL_UNUSED_ARG(type);
11930
11931     if (!fp)
11932         return (PerlIO*)NULL;
11933
11934     /* look for it in the table first */
11935     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11936     if (ret)
11937         return ret;
11938
11939     /* create anew and remember what it is */
11940     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11941     ptr_table_store(PL_ptr_table, fp, ret);
11942     return ret;
11943 }
11944
11945 /* duplicate a directory handle */
11946
11947 DIR *
11948 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11949 {
11950     DIR *ret;
11951
11952 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
11953     DIR *pwd;
11954     const Direntry_t *dirent;
11955     char smallbuf[256];
11956     char *name = NULL;
11957     STRLEN len = 0;
11958     long pos;
11959 #endif
11960
11961     PERL_UNUSED_CONTEXT;
11962     PERL_ARGS_ASSERT_DIRP_DUP;
11963
11964     if (!dp)
11965         return (DIR*)NULL;
11966
11967     /* look for it in the table first */
11968     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11969     if (ret)
11970         return ret;
11971
11972 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
11973
11974     PERL_UNUSED_ARG(param);
11975
11976     /* create anew */
11977
11978     /* open the current directory (so we can switch back) */
11979     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11980
11981     /* chdir to our dir handle and open the present working directory */
11982     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11983         PerlDir_close(pwd);
11984         return (DIR *)NULL;
11985     }
11986     /* Now we should have two dir handles pointing to the same dir. */
11987
11988     /* Be nice to the calling code and chdir back to where we were. */
11989     /* XXX If this fails, then what? */
11990     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
11991
11992     /* We have no need of the pwd handle any more. */
11993     PerlDir_close(pwd);
11994
11995 #ifdef DIRNAMLEN
11996 # define d_namlen(d) (d)->d_namlen
11997 #else
11998 # define d_namlen(d) strlen((d)->d_name)
11999 #endif
12000     /* Iterate once through dp, to get the file name at the current posi-
12001        tion. Then step back. */
12002     pos = PerlDir_tell(dp);
12003     if ((dirent = PerlDir_read(dp))) {
12004         len = d_namlen(dirent);
12005         if (len <= sizeof smallbuf) name = smallbuf;
12006         else Newx(name, len, char);
12007         Move(dirent->d_name, name, len, char);
12008     }
12009     PerlDir_seek(dp, pos);
12010
12011     /* Iterate through the new dir handle, till we find a file with the
12012        right name. */
12013     if (!dirent) /* just before the end */
12014         for(;;) {
12015             pos = PerlDir_tell(ret);
12016             if (PerlDir_read(ret)) continue; /* not there yet */
12017             PerlDir_seek(ret, pos); /* step back */
12018             break;
12019         }
12020     else {
12021         const long pos0 = PerlDir_tell(ret);
12022         for(;;) {
12023             pos = PerlDir_tell(ret);
12024             if ((dirent = PerlDir_read(ret))) {
12025                 if (len == (STRLEN)d_namlen(dirent)
12026                     && memEQ(name, dirent->d_name, len)) {
12027                     /* found it */
12028                     PerlDir_seek(ret, pos); /* step back */
12029                     break;
12030                 }
12031                 /* else we are not there yet; keep iterating */
12032             }
12033             else { /* This is not meant to happen. The best we can do is
12034                       reset the iterator to the beginning. */
12035                 PerlDir_seek(ret, pos0);
12036                 break;
12037             }
12038         }
12039     }
12040 #undef d_namlen
12041
12042     if (name && name != smallbuf)
12043         Safefree(name);
12044 #endif
12045
12046 #ifdef WIN32
12047     ret = win32_dirp_dup(dp, param);
12048 #endif
12049
12050     /* pop it in the pointer table */
12051     if (ret)
12052         ptr_table_store(PL_ptr_table, dp, ret);
12053
12054     return ret;
12055 }
12056
12057 /* duplicate a typeglob */
12058
12059 GP *
12060 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12061 {
12062     GP *ret;
12063
12064     PERL_ARGS_ASSERT_GP_DUP;
12065
12066     if (!gp)
12067         return (GP*)NULL;
12068     /* look for it in the table first */
12069     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12070     if (ret)
12071         return ret;
12072
12073     /* create anew and remember what it is */
12074     Newxz(ret, 1, GP);
12075     ptr_table_store(PL_ptr_table, gp, ret);
12076
12077     /* clone */
12078     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12079        on Newxz() to do this for us.  */
12080     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12081     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12082     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12083     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12084     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12085     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12086     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12087     ret->gp_cvgen       = gp->gp_cvgen;
12088     ret->gp_line        = gp->gp_line;
12089     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12090     return ret;
12091 }
12092
12093 /* duplicate a chain of magic */
12094
12095 MAGIC *
12096 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12097 {
12098     MAGIC *mgret = NULL;
12099     MAGIC **mgprev_p = &mgret;
12100
12101     PERL_ARGS_ASSERT_MG_DUP;
12102
12103     for (; mg; mg = mg->mg_moremagic) {
12104         MAGIC *nmg;
12105
12106         if ((param->flags & CLONEf_JOIN_IN)
12107                 && mg->mg_type == PERL_MAGIC_backref)
12108             /* when joining, we let the individual SVs add themselves to
12109              * backref as needed. */
12110             continue;
12111
12112         Newx(nmg, 1, MAGIC);
12113         *mgprev_p = nmg;
12114         mgprev_p = &(nmg->mg_moremagic);
12115
12116         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12117            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12118            from the original commit adding Perl_mg_dup() - revision 4538.
12119            Similarly there is the annotation "XXX random ptr?" next to the
12120            assignment to nmg->mg_ptr.  */
12121         *nmg = *mg;
12122
12123         /* FIXME for plugins
12124         if (nmg->mg_type == PERL_MAGIC_qr) {
12125             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12126         }
12127         else
12128         */
12129         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12130                           ? nmg->mg_type == PERL_MAGIC_backref
12131                                 /* The backref AV has its reference
12132                                  * count deliberately bumped by 1 */
12133                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12134                                                     nmg->mg_obj, param))
12135                                 : sv_dup_inc(nmg->mg_obj, param)
12136                           : sv_dup(nmg->mg_obj, param);
12137
12138         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12139             if (nmg->mg_len > 0) {
12140                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12141                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12142                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12143                 {
12144                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12145                     sv_dup_inc_multiple((SV**)(namtp->table),
12146                                         (SV**)(namtp->table), NofAMmeth, param);
12147                 }
12148             }
12149             else if (nmg->mg_len == HEf_SVKEY)
12150                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12151         }
12152         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12153             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12154         }
12155     }
12156     return mgret;
12157 }
12158
12159 #endif /* USE_ITHREADS */
12160
12161 struct ptr_tbl_arena {
12162     struct ptr_tbl_arena *next;
12163     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
12164 };
12165
12166 /* create a new pointer-mapping table */
12167
12168 PTR_TBL_t *
12169 Perl_ptr_table_new(pTHX)
12170 {
12171     PTR_TBL_t *tbl;
12172     PERL_UNUSED_CONTEXT;
12173
12174     Newx(tbl, 1, PTR_TBL_t);
12175     tbl->tbl_max        = 511;
12176     tbl->tbl_items      = 0;
12177     tbl->tbl_arena      = NULL;
12178     tbl->tbl_arena_next = NULL;
12179     tbl->tbl_arena_end  = NULL;
12180     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
12181     return tbl;
12182 }
12183
12184 #define PTR_TABLE_HASH(ptr) \
12185   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
12186
12187 /* map an existing pointer using a table */
12188
12189 STATIC PTR_TBL_ENT_t *
12190 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
12191 {
12192     PTR_TBL_ENT_t *tblent;
12193     const UV hash = PTR_TABLE_HASH(sv);
12194
12195     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
12196
12197     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
12198     for (; tblent; tblent = tblent->next) {
12199         if (tblent->oldval == sv)
12200             return tblent;
12201     }
12202     return NULL;
12203 }
12204
12205 void *
12206 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
12207 {
12208     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
12209
12210     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
12211     PERL_UNUSED_CONTEXT;
12212
12213     return tblent ? tblent->newval : NULL;
12214 }
12215
12216 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
12217  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
12218  * the core's typical use of ptr_tables in thread cloning. */
12219
12220 void
12221 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
12222 {
12223     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
12224
12225     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
12226     PERL_UNUSED_CONTEXT;
12227
12228     if (tblent) {
12229         tblent->newval = newsv;
12230     } else {
12231         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
12232
12233         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12234             struct ptr_tbl_arena *new_arena;
12235
12236             Newx(new_arena, 1, struct ptr_tbl_arena);
12237             new_arena->next = tbl->tbl_arena;
12238             tbl->tbl_arena = new_arena;
12239             tbl->tbl_arena_next = new_arena->array;
12240             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
12241         }
12242
12243         tblent = tbl->tbl_arena_next++;
12244
12245         tblent->oldval = oldsv;
12246         tblent->newval = newsv;
12247         tblent->next = tbl->tbl_ary[entry];
12248         tbl->tbl_ary[entry] = tblent;
12249         tbl->tbl_items++;
12250         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12251             ptr_table_split(tbl);
12252     }
12253 }
12254
12255 /* double the hash bucket size of an existing ptr table */
12256
12257 void
12258 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12259 {
12260     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12261     const UV oldsize = tbl->tbl_max + 1;
12262     UV newsize = oldsize * 2;
12263     UV i;
12264
12265     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12266     PERL_UNUSED_CONTEXT;
12267
12268     Renew(ary, newsize, PTR_TBL_ENT_t*);
12269     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12270     tbl->tbl_max = --newsize;
12271     tbl->tbl_ary = ary;
12272     for (i=0; i < oldsize; i++, ary++) {
12273         PTR_TBL_ENT_t **entp = ary;
12274         PTR_TBL_ENT_t *ent = *ary;
12275         PTR_TBL_ENT_t **curentp;
12276         if (!ent)
12277             continue;
12278         curentp = ary + oldsize;
12279         do {
12280             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12281                 *entp = ent->next;
12282                 ent->next = *curentp;
12283                 *curentp = ent;
12284             }
12285             else
12286                 entp = &ent->next;
12287             ent = *entp;
12288         } while (ent);
12289     }
12290 }
12291
12292 /* remove all the entries from a ptr table */
12293 /* Deprecated - will be removed post 5.14 */
12294
12295 void
12296 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12297 {
12298     PERL_UNUSED_CONTEXT;
12299     if (tbl && tbl->tbl_items) {
12300         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12301
12302         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12303
12304         while (arena) {
12305             struct ptr_tbl_arena *next = arena->next;
12306
12307             Safefree(arena);
12308             arena = next;
12309         };
12310
12311         tbl->tbl_items = 0;
12312         tbl->tbl_arena = NULL;
12313         tbl->tbl_arena_next = NULL;
12314         tbl->tbl_arena_end = NULL;
12315     }
12316 }
12317
12318 /* clear and free a ptr table */
12319
12320 void
12321 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12322 {
12323     struct ptr_tbl_arena *arena;
12324
12325     PERL_UNUSED_CONTEXT;
12326
12327     if (!tbl) {
12328         return;
12329     }
12330
12331     arena = tbl->tbl_arena;
12332
12333     while (arena) {
12334         struct ptr_tbl_arena *next = arena->next;
12335
12336         Safefree(arena);
12337         arena = next;
12338     }
12339
12340     Safefree(tbl->tbl_ary);
12341     Safefree(tbl);
12342 }
12343
12344 #if defined(USE_ITHREADS)
12345
12346 void
12347 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12348 {
12349     PERL_ARGS_ASSERT_RVPV_DUP;
12350
12351     assert(!isREGEXP(sstr));
12352     if (SvROK(sstr)) {
12353         if (SvWEAKREF(sstr)) {
12354             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12355             if (param->flags & CLONEf_JOIN_IN) {
12356                 /* if joining, we add any back references individually rather
12357                  * than copying the whole backref array */
12358                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12359             }
12360         }
12361         else
12362             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12363     }
12364     else if (SvPVX_const(sstr)) {
12365         /* Has something there */
12366         if (SvLEN(sstr)) {
12367             /* Normal PV - clone whole allocated space */
12368             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12369             /* sstr may not be that normal, but actually copy on write.
12370                But we are a true, independent SV, so:  */
12371             SvIsCOW_off(dstr);
12372         }
12373         else {
12374             /* Special case - not normally malloced for some reason */
12375             if (isGV_with_GP(sstr)) {
12376                 /* Don't need to do anything here.  */
12377             }
12378             else if ((SvIsCOW(sstr))) {
12379                 /* A "shared" PV - clone it as "shared" PV */
12380                 SvPV_set(dstr,
12381                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12382                                          param)));
12383             }
12384             else {
12385                 /* Some other special case - random pointer */
12386                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12387             }
12388         }
12389     }
12390     else {
12391         /* Copy the NULL */
12392         SvPV_set(dstr, NULL);
12393     }
12394 }
12395
12396 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12397 static SV **
12398 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12399                       SSize_t items, CLONE_PARAMS *const param)
12400 {
12401     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12402
12403     while (items-- > 0) {
12404         *dest++ = sv_dup_inc(*source++, param);
12405     }
12406
12407     return dest;
12408 }
12409
12410 /* duplicate an SV of any type (including AV, HV etc) */
12411
12412 static SV *
12413 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12414 {
12415     dVAR;
12416     SV *dstr;
12417
12418     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12419
12420     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12421 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12422         abort();
12423 #endif
12424         return NULL;
12425     }
12426     /* look for it in the table first */
12427     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12428     if (dstr)
12429         return dstr;
12430
12431     if(param->flags & CLONEf_JOIN_IN) {
12432         /** We are joining here so we don't want do clone
12433             something that is bad **/
12434         if (SvTYPE(sstr) == SVt_PVHV) {
12435             const HEK * const hvname = HvNAME_HEK(sstr);
12436             if (hvname) {
12437                 /** don't clone stashes if they already exist **/
12438                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12439                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12440                 ptr_table_store(PL_ptr_table, sstr, dstr);
12441                 return dstr;
12442             }
12443         }
12444         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12445             HV *stash = GvSTASH(sstr);
12446             const HEK * hvname;
12447             if (stash && (hvname = HvNAME_HEK(stash))) {
12448                 /** don't clone GVs if they already exist **/
12449                 SV **svp;
12450                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12451                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12452                 svp = hv_fetch(
12453                         stash, GvNAME(sstr),
12454                         GvNAMEUTF8(sstr)
12455                             ? -GvNAMELEN(sstr)
12456                             :  GvNAMELEN(sstr),
12457                         0
12458                       );
12459                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12460                     ptr_table_store(PL_ptr_table, sstr, *svp);
12461                     return *svp;
12462                 }
12463             }
12464         }
12465     }
12466
12467     /* create anew and remember what it is */
12468     new_SV(dstr);
12469
12470 #ifdef DEBUG_LEAKING_SCALARS
12471     dstr->sv_debug_optype = sstr->sv_debug_optype;
12472     dstr->sv_debug_line = sstr->sv_debug_line;
12473     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12474     dstr->sv_debug_parent = (SV*)sstr;
12475     FREE_SV_DEBUG_FILE(dstr);
12476     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12477 #endif
12478
12479     ptr_table_store(PL_ptr_table, sstr, dstr);
12480
12481     /* clone */
12482     SvFLAGS(dstr)       = SvFLAGS(sstr);
12483     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12484     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12485
12486 #ifdef DEBUGGING
12487     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12488         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12489                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12490 #endif
12491
12492     /* don't clone objects whose class has asked us not to */
12493     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12494         SvFLAGS(dstr) = 0;
12495         return dstr;
12496     }
12497
12498     switch (SvTYPE(sstr)) {
12499     case SVt_NULL:
12500         SvANY(dstr)     = NULL;
12501         break;
12502     case SVt_IV:
12503         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12504         if(SvROK(sstr)) {
12505             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12506         } else {
12507             SvIV_set(dstr, SvIVX(sstr));
12508         }
12509         break;
12510     case SVt_NV:
12511         SvANY(dstr)     = new_XNV();
12512         SvNV_set(dstr, SvNVX(sstr));
12513         break;
12514     default:
12515         {
12516             /* These are all the types that need complex bodies allocating.  */
12517             void *new_body;
12518             const svtype sv_type = SvTYPE(sstr);
12519             const struct body_details *const sv_type_details
12520                 = bodies_by_type + sv_type;
12521
12522             switch (sv_type) {
12523             default:
12524                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12525                 break;
12526
12527             case SVt_PVGV:
12528             case SVt_PVIO:
12529             case SVt_PVFM:
12530             case SVt_PVHV:
12531             case SVt_PVAV:
12532             case SVt_PVCV:
12533             case SVt_PVLV:
12534             case SVt_REGEXP:
12535             case SVt_PVMG:
12536             case SVt_PVNV:
12537             case SVt_PVIV:
12538             case SVt_INVLIST:
12539             case SVt_PV:
12540                 assert(sv_type_details->body_size);
12541                 if (sv_type_details->arena) {
12542                     new_body_inline(new_body, sv_type);
12543                     new_body
12544                         = (void*)((char*)new_body - sv_type_details->offset);
12545                 } else {
12546                     new_body = new_NOARENA(sv_type_details);
12547                 }
12548             }
12549             assert(new_body);
12550             SvANY(dstr) = new_body;
12551
12552 #ifndef PURIFY
12553             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12554                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12555                  sv_type_details->copy, char);
12556 #else
12557             Copy(((char*)SvANY(sstr)),
12558                  ((char*)SvANY(dstr)),
12559                  sv_type_details->body_size + sv_type_details->offset, char);
12560 #endif
12561
12562             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12563                 && !isGV_with_GP(dstr)
12564                 && !isREGEXP(dstr)
12565                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12566                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12567
12568             /* The Copy above means that all the source (unduplicated) pointers
12569                are now in the destination.  We can check the flags and the
12570                pointers in either, but it's possible that there's less cache
12571                missing by always going for the destination.
12572                FIXME - instrument and check that assumption  */
12573             if (sv_type >= SVt_PVMG) {
12574                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12575                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12576                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
12577                     NOOP;
12578                 } else if (SvMAGIC(dstr))
12579                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12580                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12581                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12582                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12583             }
12584
12585             /* The cast silences a GCC warning about unhandled types.  */
12586             switch ((int)sv_type) {
12587             case SVt_PV:
12588                 break;
12589             case SVt_PVIV:
12590                 break;
12591             case SVt_PVNV:
12592                 break;
12593             case SVt_PVMG:
12594                 break;
12595             case SVt_REGEXP:
12596               duprex:
12597                 /* FIXME for plugins */
12598                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12599                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12600                 break;
12601             case SVt_PVLV:
12602                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12603                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12604                     LvTARG(dstr) = dstr;
12605                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12606                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12607                 else
12608                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12609                 if (isREGEXP(sstr)) goto duprex;
12610             case SVt_PVGV:
12611                 /* non-GP case already handled above */
12612                 if(isGV_with_GP(sstr)) {
12613                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12614                     /* Don't call sv_add_backref here as it's going to be
12615                        created as part of the magic cloning of the symbol
12616                        table--unless this is during a join and the stash
12617                        is not actually being cloned.  */
12618                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12619                        at the point of this comment.  */
12620                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12621                     if (param->flags & CLONEf_JOIN_IN)
12622                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12623                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12624                     (void)GpREFCNT_inc(GvGP(dstr));
12625                 }
12626                 break;
12627             case SVt_PVIO:
12628                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12629                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12630                     /* I have no idea why fake dirp (rsfps)
12631                        should be treated differently but otherwise
12632                        we end up with leaks -- sky*/
12633                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12634                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12635                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12636                 } else {
12637                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12638                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12639                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12640                     if (IoDIRP(dstr)) {
12641                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12642                     } else {
12643                         NOOP;
12644                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12645                     }
12646                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12647                 }
12648                 if (IoOFP(dstr) == IoIFP(sstr))
12649                     IoOFP(dstr) = IoIFP(dstr);
12650                 else
12651                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12652                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12653                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12654                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12655                 break;
12656             case SVt_PVAV:
12657                 /* avoid cloning an empty array */
12658                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12659                     SV **dst_ary, **src_ary;
12660                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12661
12662                     src_ary = AvARRAY((const AV *)sstr);
12663                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12664                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12665                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12666                     AvALLOC((const AV *)dstr) = dst_ary;
12667                     if (AvREAL((const AV *)sstr)) {
12668                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12669                                                       param);
12670                     }
12671                     else {
12672                         while (items-- > 0)
12673                             *dst_ary++ = sv_dup(*src_ary++, param);
12674                     }
12675                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12676                     while (items-- > 0) {
12677                         *dst_ary++ = &PL_sv_undef;
12678                     }
12679                 }
12680                 else {
12681                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12682                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12683                     AvMAX(  (const AV *)dstr)   = -1;
12684                     AvFILLp((const AV *)dstr)   = -1;
12685                 }
12686                 break;
12687             case SVt_PVHV:
12688                 if (HvARRAY((const HV *)sstr)) {
12689                     STRLEN i = 0;
12690                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12691                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12692                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12693                     char *darray;
12694                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12695                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12696                         char);
12697                     HvARRAY(dstr) = (HE**)darray;
12698                     while (i <= sxhv->xhv_max) {
12699                         const HE * const source = HvARRAY(sstr)[i];
12700                         HvARRAY(dstr)[i] = source
12701                             ? he_dup(source, sharekeys, param) : 0;
12702                         ++i;
12703                     }
12704                     if (SvOOK(sstr)) {
12705                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12706                         struct xpvhv_aux * const daux = HvAUX(dstr);
12707                         /* This flag isn't copied.  */
12708                         SvOOK_on(dstr);
12709
12710                         if (saux->xhv_name_count) {
12711                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12712                             const I32 count
12713                              = saux->xhv_name_count < 0
12714                                 ? -saux->xhv_name_count
12715                                 :  saux->xhv_name_count;
12716                             HEK **shekp = sname + count;
12717                             HEK **dhekp;
12718                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12719                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12720                             while (shekp-- > sname) {
12721                                 dhekp--;
12722                                 *dhekp = hek_dup(*shekp, param);
12723                             }
12724                         }
12725                         else {
12726                             daux->xhv_name_u.xhvnameu_name
12727                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12728                                           param);
12729                         }
12730                         daux->xhv_name_count = saux->xhv_name_count;
12731
12732                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12733                         daux->xhv_aux_flags = saux->xhv_aux_flags;
12734 #ifdef PERL_HASH_RANDOMIZE_KEYS
12735                         daux->xhv_rand = saux->xhv_rand;
12736                         daux->xhv_last_rand = saux->xhv_last_rand;
12737 #endif
12738                         daux->xhv_riter = saux->xhv_riter;
12739                         daux->xhv_eiter = saux->xhv_eiter
12740                             ? he_dup(saux->xhv_eiter,
12741                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12742                         /* backref array needs refcnt=2; see sv_add_backref */
12743                         daux->xhv_backreferences =
12744                             (param->flags & CLONEf_JOIN_IN)
12745                                 /* when joining, we let the individual GVs and
12746                                  * CVs add themselves to backref as
12747                                  * needed. This avoids pulling in stuff
12748                                  * that isn't required, and simplifies the
12749                                  * case where stashes aren't cloned back
12750                                  * if they already exist in the parent
12751                                  * thread */
12752                             ? NULL
12753                             : saux->xhv_backreferences
12754                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12755                                     ? MUTABLE_AV(SvREFCNT_inc(
12756                                           sv_dup_inc((const SV *)
12757                                             saux->xhv_backreferences, param)))
12758                                     : MUTABLE_AV(sv_dup((const SV *)
12759                                             saux->xhv_backreferences, param))
12760                                 : 0;
12761
12762                         daux->xhv_mro_meta = saux->xhv_mro_meta
12763                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12764                             : 0;
12765
12766                         /* Record stashes for possible cloning in Perl_clone(). */
12767                         if (HvNAME(sstr))
12768                             av_push(param->stashes, dstr);
12769                     }
12770                 }
12771                 else
12772                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12773                 break;
12774             case SVt_PVCV:
12775                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12776                     CvDEPTH(dstr) = 0;
12777                 }
12778                 /* FALLTHROUGH */
12779             case SVt_PVFM:
12780                 /* NOTE: not refcounted */
12781                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12782                     hv_dup(CvSTASH(dstr), param);
12783                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12784                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12785                 if (!CvISXSUB(dstr)) {
12786                     OP_REFCNT_LOCK;
12787                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12788                     OP_REFCNT_UNLOCK;
12789                     CvSLABBED_off(dstr);
12790                 } else if (CvCONST(dstr)) {
12791                     CvXSUBANY(dstr).any_ptr =
12792                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12793                 }
12794                 assert(!CvSLABBED(dstr));
12795                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12796                 if (CvNAMED(dstr))
12797                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12798                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12799                 /* don't dup if copying back - CvGV isn't refcounted, so the
12800                  * duped GV may never be freed. A bit of a hack! DAPM */
12801                 else
12802                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12803                     CvCVGV_RC(dstr)
12804                     ? gv_dup_inc(CvGV(sstr), param)
12805                     : (param->flags & CLONEf_JOIN_IN)
12806                         ? NULL
12807                         : gv_dup(CvGV(sstr), param);
12808
12809                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12810                 CvOUTSIDE(dstr) =
12811                     CvWEAKOUTSIDE(sstr)
12812                     ? cv_dup(    CvOUTSIDE(dstr), param)
12813                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12814                 break;
12815             }
12816         }
12817     }
12818
12819     return dstr;
12820  }
12821
12822 SV *
12823 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12824 {
12825     PERL_ARGS_ASSERT_SV_DUP_INC;
12826     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12827 }
12828
12829 SV *
12830 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12831 {
12832     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12833     PERL_ARGS_ASSERT_SV_DUP;
12834
12835     /* Track every SV that (at least initially) had a reference count of 0.
12836        We need to do this by holding an actual reference to it in this array.
12837        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12838        (akin to the stashes hash, and the perl stack), we come unstuck if
12839        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12840        thread) is manipulated in a CLONE method, because CLONE runs before the
12841        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12842        (and fix things up by giving each a reference via the temps stack).
12843        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12844        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12845        before the walk of unreferenced happens and a reference to that is SV
12846        added to the temps stack. At which point we have the same SV considered
12847        to be in use, and free to be re-used. Not good.
12848     */
12849     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12850         assert(param->unreferenced);
12851         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12852     }
12853
12854     return dstr;
12855 }
12856
12857 /* duplicate a context */
12858
12859 PERL_CONTEXT *
12860 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12861 {
12862     PERL_CONTEXT *ncxs;
12863
12864     PERL_ARGS_ASSERT_CX_DUP;
12865
12866     if (!cxs)
12867         return (PERL_CONTEXT*)NULL;
12868
12869     /* look for it in the table first */
12870     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12871     if (ncxs)
12872         return ncxs;
12873
12874     /* create anew and remember what it is */
12875     Newx(ncxs, max + 1, PERL_CONTEXT);
12876     ptr_table_store(PL_ptr_table, cxs, ncxs);
12877     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12878
12879     while (ix >= 0) {
12880         PERL_CONTEXT * const ncx = &ncxs[ix];
12881         if (CxTYPE(ncx) == CXt_SUBST) {
12882             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12883         }
12884         else {
12885             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12886             switch (CxTYPE(ncx)) {
12887             case CXt_SUB:
12888                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12889                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12890                                            : cv_dup(ncx->blk_sub.cv,param));
12891                 if(CxHASARGS(ncx)){
12892                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
12893                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
12894                 } else {
12895                     ncx->blk_sub.argarray = NULL;
12896                     ncx->blk_sub.savearray = NULL;
12897                 }
12898                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12899                                            ncx->blk_sub.oldcomppad);
12900                 break;
12901             case CXt_EVAL:
12902                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12903                                                       param);
12904                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12905                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12906                 break;
12907             case CXt_LOOP_LAZYSV:
12908                 ncx->blk_loop.state_u.lazysv.end
12909                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12910                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12911                    actually being the same function, and order equivalence of
12912                    the two unions.
12913                    We can assert the later [but only at run time :-(]  */
12914                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12915                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12916             case CXt_LOOP_FOR:
12917                 ncx->blk_loop.state_u.ary.ary
12918                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12919             case CXt_LOOP_LAZYIV:
12920             case CXt_LOOP_PLAIN:
12921                 if (CxPADLOOP(ncx)) {
12922                     ncx->blk_loop.itervar_u.oldcomppad
12923                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12924                                         ncx->blk_loop.itervar_u.oldcomppad);
12925                 } else {
12926                     ncx->blk_loop.itervar_u.gv
12927                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12928                                     param);
12929                 }
12930                 break;
12931             case CXt_FORMAT:
12932                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12933                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12934                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12935                                                      param);
12936                 break;
12937             case CXt_BLOCK:
12938             case CXt_NULL:
12939             case CXt_WHEN:
12940             case CXt_GIVEN:
12941                 break;
12942             }
12943         }
12944         --ix;
12945     }
12946     return ncxs;
12947 }
12948
12949 /* duplicate a stack info structure */
12950
12951 PERL_SI *
12952 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12953 {
12954     PERL_SI *nsi;
12955
12956     PERL_ARGS_ASSERT_SI_DUP;
12957
12958     if (!si)
12959         return (PERL_SI*)NULL;
12960
12961     /* look for it in the table first */
12962     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12963     if (nsi)
12964         return nsi;
12965
12966     /* create anew and remember what it is */
12967     Newxz(nsi, 1, PERL_SI);
12968     ptr_table_store(PL_ptr_table, si, nsi);
12969
12970     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12971     nsi->si_cxix        = si->si_cxix;
12972     nsi->si_cxmax       = si->si_cxmax;
12973     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12974     nsi->si_type        = si->si_type;
12975     nsi->si_prev        = si_dup(si->si_prev, param);
12976     nsi->si_next        = si_dup(si->si_next, param);
12977     nsi->si_markoff     = si->si_markoff;
12978
12979     return nsi;
12980 }
12981
12982 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12983 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12984 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12985 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12986 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12987 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12988 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12989 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12990 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12991 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12992 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12993 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12994 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12995 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12996 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12997 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12998
12999 /* XXXXX todo */
13000 #define pv_dup_inc(p)   SAVEPV(p)
13001 #define pv_dup(p)       SAVEPV(p)
13002 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13003
13004 /* map any object to the new equivent - either something in the
13005  * ptr table, or something in the interpreter structure
13006  */
13007
13008 void *
13009 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13010 {
13011     void *ret;
13012
13013     PERL_ARGS_ASSERT_ANY_DUP;
13014
13015     if (!v)
13016         return (void*)NULL;
13017
13018     /* look for it in the table first */
13019     ret = ptr_table_fetch(PL_ptr_table, v);
13020     if (ret)
13021         return ret;
13022
13023     /* see if it is part of the interpreter structure */
13024     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13025         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13026     else {
13027         ret = v;
13028     }
13029
13030     return ret;
13031 }
13032
13033 /* duplicate the save stack */
13034
13035 ANY *
13036 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13037 {
13038     dVAR;
13039     ANY * const ss      = proto_perl->Isavestack;
13040     const I32 max       = proto_perl->Isavestack_max;
13041     I32 ix              = proto_perl->Isavestack_ix;
13042     ANY *nss;
13043     const SV *sv;
13044     const GV *gv;
13045     const AV *av;
13046     const HV *hv;
13047     void* ptr;
13048     int intval;
13049     long longval;
13050     GP *gp;
13051     IV iv;
13052     I32 i;
13053     char *c = NULL;
13054     void (*dptr) (void*);
13055     void (*dxptr) (pTHX_ void*);
13056
13057     PERL_ARGS_ASSERT_SS_DUP;
13058
13059     Newxz(nss, max, ANY);
13060
13061     while (ix > 0) {
13062         const UV uv = POPUV(ss,ix);
13063         const U8 type = (U8)uv & SAVE_MASK;
13064
13065         TOPUV(nss,ix) = uv;
13066         switch (type) {
13067         case SAVEt_CLEARSV:
13068         case SAVEt_CLEARPADRANGE:
13069             break;
13070         case SAVEt_HELEM:               /* hash element */
13071             sv = (const SV *)POPPTR(ss,ix);
13072             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13073             /* FALLTHROUGH */
13074         case SAVEt_ITEM:                        /* normal string */
13075         case SAVEt_GVSV:                        /* scalar slot in GV */
13076         case SAVEt_SV:                          /* scalar reference */
13077             sv = (const SV *)POPPTR(ss,ix);
13078             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13079             /* FALLTHROUGH */
13080         case SAVEt_FREESV:
13081         case SAVEt_MORTALIZESV:
13082         case SAVEt_READONLY_OFF:
13083             sv = (const SV *)POPPTR(ss,ix);
13084             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13085             break;
13086         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13087             c = (char*)POPPTR(ss,ix);
13088             TOPPTR(nss,ix) = savesharedpv(c);
13089             ptr = POPPTR(ss,ix);
13090             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13091             break;
13092         case SAVEt_GENERIC_SVREF:               /* generic sv */
13093         case SAVEt_SVREF:                       /* scalar reference */
13094             sv = (const SV *)POPPTR(ss,ix);
13095             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13096             ptr = POPPTR(ss,ix);
13097             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13098             break;
13099         case SAVEt_GVSLOT:              /* any slot in GV */
13100             sv = (const SV *)POPPTR(ss,ix);
13101             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13102             ptr = POPPTR(ss,ix);
13103             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13104             sv = (const SV *)POPPTR(ss,ix);
13105             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13106             break;
13107         case SAVEt_HV:                          /* hash reference */
13108         case SAVEt_AV:                          /* array reference */
13109             sv = (const SV *) POPPTR(ss,ix);
13110             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13111             /* FALLTHROUGH */
13112         case SAVEt_COMPPAD:
13113         case SAVEt_NSTAB:
13114             sv = (const SV *) POPPTR(ss,ix);
13115             TOPPTR(nss,ix) = sv_dup(sv, param);
13116             break;
13117         case SAVEt_INT:                         /* int reference */
13118             ptr = POPPTR(ss,ix);
13119             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13120             intval = (int)POPINT(ss,ix);
13121             TOPINT(nss,ix) = intval;
13122             break;
13123         case SAVEt_LONG:                        /* long reference */
13124             ptr = POPPTR(ss,ix);
13125             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13126             longval = (long)POPLONG(ss,ix);
13127             TOPLONG(nss,ix) = longval;
13128             break;
13129         case SAVEt_I32:                         /* I32 reference */
13130             ptr = POPPTR(ss,ix);
13131             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13132             i = POPINT(ss,ix);
13133             TOPINT(nss,ix) = i;
13134             break;
13135         case SAVEt_IV:                          /* IV reference */
13136         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
13137             ptr = POPPTR(ss,ix);
13138             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13139             iv = POPIV(ss,ix);
13140             TOPIV(nss,ix) = iv;
13141             break;
13142         case SAVEt_HPTR:                        /* HV* reference */
13143         case SAVEt_APTR:                        /* AV* reference */
13144         case SAVEt_SPTR:                        /* SV* reference */
13145             ptr = POPPTR(ss,ix);
13146             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13147             sv = (const SV *)POPPTR(ss,ix);
13148             TOPPTR(nss,ix) = sv_dup(sv, param);
13149             break;
13150         case SAVEt_VPTR:                        /* random* reference */
13151             ptr = POPPTR(ss,ix);
13152             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13153             /* FALLTHROUGH */
13154         case SAVEt_INT_SMALL:
13155         case SAVEt_I32_SMALL:
13156         case SAVEt_I16:                         /* I16 reference */
13157         case SAVEt_I8:                          /* I8 reference */
13158         case SAVEt_BOOL:
13159             ptr = POPPTR(ss,ix);
13160             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13161             break;
13162         case SAVEt_GENERIC_PVREF:               /* generic char* */
13163         case SAVEt_PPTR:                        /* char* reference */
13164             ptr = POPPTR(ss,ix);
13165             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13166             c = (char*)POPPTR(ss,ix);
13167             TOPPTR(nss,ix) = pv_dup(c);
13168             break;
13169         case SAVEt_GP:                          /* scalar reference */
13170             gp = (GP*)POPPTR(ss,ix);
13171             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
13172             (void)GpREFCNT_inc(gp);
13173             gv = (const GV *)POPPTR(ss,ix);
13174             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
13175             break;
13176         case SAVEt_FREEOP:
13177             ptr = POPPTR(ss,ix);
13178             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
13179                 /* these are assumed to be refcounted properly */
13180                 OP *o;
13181                 switch (((OP*)ptr)->op_type) {
13182                 case OP_LEAVESUB:
13183                 case OP_LEAVESUBLV:
13184                 case OP_LEAVEEVAL:
13185                 case OP_LEAVE:
13186                 case OP_SCOPE:
13187                 case OP_LEAVEWRITE:
13188                     TOPPTR(nss,ix) = ptr;
13189                     o = (OP*)ptr;
13190                     OP_REFCNT_LOCK;
13191                     (void) OpREFCNT_inc(o);
13192                     OP_REFCNT_UNLOCK;
13193                     break;
13194                 default:
13195                     TOPPTR(nss,ix) = NULL;
13196                     break;
13197                 }
13198             }
13199             else
13200                 TOPPTR(nss,ix) = NULL;
13201             break;
13202         case SAVEt_FREECOPHH:
13203             ptr = POPPTR(ss,ix);
13204             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
13205             break;
13206         case SAVEt_ADELETE:
13207             av = (const AV *)POPPTR(ss,ix);
13208             TOPPTR(nss,ix) = av_dup_inc(av, param);
13209             i = POPINT(ss,ix);
13210             TOPINT(nss,ix) = i;
13211             break;
13212         case SAVEt_DELETE:
13213             hv = (const HV *)POPPTR(ss,ix);
13214             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13215             i = POPINT(ss,ix);
13216             TOPINT(nss,ix) = i;
13217             /* FALLTHROUGH */
13218         case SAVEt_FREEPV:
13219             c = (char*)POPPTR(ss,ix);
13220             TOPPTR(nss,ix) = pv_dup_inc(c);
13221             break;
13222         case SAVEt_STACK_POS:           /* Position on Perl stack */
13223             i = POPINT(ss,ix);
13224             TOPINT(nss,ix) = i;
13225             break;
13226         case SAVEt_DESTRUCTOR:
13227             ptr = POPPTR(ss,ix);
13228             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13229             dptr = POPDPTR(ss,ix);
13230             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
13231                                         any_dup(FPTR2DPTR(void *, dptr),
13232                                                 proto_perl));
13233             break;
13234         case SAVEt_DESTRUCTOR_X:
13235             ptr = POPPTR(ss,ix);
13236             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13237             dxptr = POPDXPTR(ss,ix);
13238             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
13239                                          any_dup(FPTR2DPTR(void *, dxptr),
13240                                                  proto_perl));
13241             break;
13242         case SAVEt_REGCONTEXT:
13243         case SAVEt_ALLOC:
13244             ix -= uv >> SAVE_TIGHT_SHIFT;
13245             break;
13246         case SAVEt_AELEM:               /* array element */
13247             sv = (const SV *)POPPTR(ss,ix);
13248             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13249             i = POPINT(ss,ix);
13250             TOPINT(nss,ix) = i;
13251             av = (const AV *)POPPTR(ss,ix);
13252             TOPPTR(nss,ix) = av_dup_inc(av, param);
13253             break;
13254         case SAVEt_OP:
13255             ptr = POPPTR(ss,ix);
13256             TOPPTR(nss,ix) = ptr;
13257             break;
13258         case SAVEt_HINTS:
13259             ptr = POPPTR(ss,ix);
13260             ptr = cophh_copy((COPHH*)ptr);
13261             TOPPTR(nss,ix) = ptr;
13262             i = POPINT(ss,ix);
13263             TOPINT(nss,ix) = i;
13264             if (i & HINT_LOCALIZE_HH) {
13265                 hv = (const HV *)POPPTR(ss,ix);
13266                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13267             }
13268             break;
13269         case SAVEt_PADSV_AND_MORTALIZE:
13270             longval = (long)POPLONG(ss,ix);
13271             TOPLONG(nss,ix) = longval;
13272             ptr = POPPTR(ss,ix);
13273             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13274             sv = (const SV *)POPPTR(ss,ix);
13275             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13276             break;
13277         case SAVEt_SET_SVFLAGS:
13278             i = POPINT(ss,ix);
13279             TOPINT(nss,ix) = i;
13280             i = POPINT(ss,ix);
13281             TOPINT(nss,ix) = i;
13282             sv = (const SV *)POPPTR(ss,ix);
13283             TOPPTR(nss,ix) = sv_dup(sv, param);
13284             break;
13285         case SAVEt_COMPILE_WARNINGS:
13286             ptr = POPPTR(ss,ix);
13287             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13288             break;
13289         case SAVEt_PARSER:
13290             ptr = POPPTR(ss,ix);
13291             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13292             break;
13293         default:
13294             Perl_croak(aTHX_
13295                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13296         }
13297     }
13298
13299     return nss;
13300 }
13301
13302
13303 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13304  * flag to the result. This is done for each stash before cloning starts,
13305  * so we know which stashes want their objects cloned */
13306
13307 static void
13308 do_mark_cloneable_stash(pTHX_ SV *const sv)
13309 {
13310     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13311     if (hvname) {
13312         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13313         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13314         if (cloner && GvCV(cloner)) {
13315             dSP;
13316             UV status;
13317
13318             ENTER;
13319             SAVETMPS;
13320             PUSHMARK(SP);
13321             mXPUSHs(newSVhek(hvname));
13322             PUTBACK;
13323             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13324             SPAGAIN;
13325             status = POPu;
13326             PUTBACK;
13327             FREETMPS;
13328             LEAVE;
13329             if (status)
13330                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13331         }
13332     }
13333 }
13334
13335
13336
13337 /*
13338 =for apidoc perl_clone
13339
13340 Create and return a new interpreter by cloning the current one.
13341
13342 perl_clone takes these flags as parameters:
13343
13344 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13345 without it we only clone the data and zero the stacks,
13346 with it we copy the stacks and the new perl interpreter is
13347 ready to run at the exact same point as the previous one.
13348 The pseudo-fork code uses COPY_STACKS while the
13349 threads->create doesn't.
13350
13351 CLONEf_KEEP_PTR_TABLE -
13352 perl_clone keeps a ptr_table with the pointer of the old
13353 variable as a key and the new variable as a value,
13354 this allows it to check if something has been cloned and not
13355 clone it again but rather just use the value and increase the
13356 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13357 the ptr_table using the function
13358 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13359 reason to keep it around is if you want to dup some of your own
13360 variable who are outside the graph perl scans, example of this
13361 code is in threads.xs create.
13362
13363 CLONEf_CLONE_HOST -
13364 This is a win32 thing, it is ignored on unix, it tells perls
13365 win32host code (which is c++) to clone itself, this is needed on
13366 win32 if you want to run two threads at the same time,
13367 if you just want to do some stuff in a separate perl interpreter
13368 and then throw it away and return to the original one,
13369 you don't need to do anything.
13370
13371 =cut
13372 */
13373
13374 /* XXX the above needs expanding by someone who actually understands it ! */
13375 EXTERN_C PerlInterpreter *
13376 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13377
13378 PerlInterpreter *
13379 perl_clone(PerlInterpreter *proto_perl, UV flags)
13380 {
13381    dVAR;
13382 #ifdef PERL_IMPLICIT_SYS
13383
13384     PERL_ARGS_ASSERT_PERL_CLONE;
13385
13386    /* perlhost.h so we need to call into it
13387    to clone the host, CPerlHost should have a c interface, sky */
13388
13389    if (flags & CLONEf_CLONE_HOST) {
13390        return perl_clone_host(proto_perl,flags);
13391    }
13392    return perl_clone_using(proto_perl, flags,
13393                             proto_perl->IMem,
13394                             proto_perl->IMemShared,
13395                             proto_perl->IMemParse,
13396                             proto_perl->IEnv,
13397                             proto_perl->IStdIO,
13398                             proto_perl->ILIO,
13399                             proto_perl->IDir,
13400                             proto_perl->ISock,
13401                             proto_perl->IProc);
13402 }
13403
13404 PerlInterpreter *
13405 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13406                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13407                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13408                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13409                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13410                  struct IPerlProc* ipP)
13411 {
13412     /* XXX many of the string copies here can be optimized if they're
13413      * constants; they need to be allocated as common memory and just
13414      * their pointers copied. */
13415
13416     IV i;
13417     CLONE_PARAMS clone_params;
13418     CLONE_PARAMS* const param = &clone_params;
13419
13420     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13421
13422     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13423 #else           /* !PERL_IMPLICIT_SYS */
13424     IV i;
13425     CLONE_PARAMS clone_params;
13426     CLONE_PARAMS* param = &clone_params;
13427     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13428
13429     PERL_ARGS_ASSERT_PERL_CLONE;
13430 #endif          /* PERL_IMPLICIT_SYS */
13431
13432     /* for each stash, determine whether its objects should be cloned */
13433     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13434     PERL_SET_THX(my_perl);
13435
13436 #ifdef DEBUGGING
13437     PoisonNew(my_perl, 1, PerlInterpreter);
13438     PL_op = NULL;
13439     PL_curcop = NULL;
13440     PL_defstash = NULL; /* may be used by perl malloc() */
13441     PL_markstack = 0;
13442     PL_scopestack = 0;
13443     PL_scopestack_name = 0;
13444     PL_savestack = 0;
13445     PL_savestack_ix = 0;
13446     PL_savestack_max = -1;
13447     PL_sig_pending = 0;
13448     PL_parser = NULL;
13449     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13450 #  ifdef DEBUG_LEAKING_SCALARS
13451     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13452 #  endif
13453 #else   /* !DEBUGGING */
13454     Zero(my_perl, 1, PerlInterpreter);
13455 #endif  /* DEBUGGING */
13456
13457 #ifdef PERL_IMPLICIT_SYS
13458     /* host pointers */
13459     PL_Mem              = ipM;
13460     PL_MemShared        = ipMS;
13461     PL_MemParse         = ipMP;
13462     PL_Env              = ipE;
13463     PL_StdIO            = ipStd;
13464     PL_LIO              = ipLIO;
13465     PL_Dir              = ipD;
13466     PL_Sock             = ipS;
13467     PL_Proc             = ipP;
13468 #endif          /* PERL_IMPLICIT_SYS */
13469
13470
13471     param->flags = flags;
13472     /* Nothing in the core code uses this, but we make it available to
13473        extensions (using mg_dup).  */
13474     param->proto_perl = proto_perl;
13475     /* Likely nothing will use this, but it is initialised to be consistent
13476        with Perl_clone_params_new().  */
13477     param->new_perl = my_perl;
13478     param->unreferenced = NULL;
13479
13480
13481     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13482
13483     PL_body_arenas = NULL;
13484     Zero(&PL_body_roots, 1, PL_body_roots);
13485     
13486     PL_sv_count         = 0;
13487     PL_sv_root          = NULL;
13488     PL_sv_arenaroot     = NULL;
13489
13490     PL_debug            = proto_perl->Idebug;
13491
13492     /* dbargs array probably holds garbage */
13493     PL_dbargs           = NULL;
13494
13495     PL_compiling = proto_perl->Icompiling;
13496
13497     /* pseudo environmental stuff */
13498     PL_origargc         = proto_perl->Iorigargc;
13499     PL_origargv         = proto_perl->Iorigargv;
13500
13501 #ifndef NO_TAINT_SUPPORT
13502     /* Set tainting stuff before PerlIO_debug can possibly get called */
13503     PL_tainting         = proto_perl->Itainting;
13504     PL_taint_warn       = proto_perl->Itaint_warn;
13505 #else
13506     PL_tainting         = FALSE;
13507     PL_taint_warn       = FALSE;
13508 #endif
13509
13510     PL_minus_c          = proto_perl->Iminus_c;
13511
13512     PL_localpatches     = proto_perl->Ilocalpatches;
13513     PL_splitstr         = proto_perl->Isplitstr;
13514     PL_minus_n          = proto_perl->Iminus_n;
13515     PL_minus_p          = proto_perl->Iminus_p;
13516     PL_minus_l          = proto_perl->Iminus_l;
13517     PL_minus_a          = proto_perl->Iminus_a;
13518     PL_minus_E          = proto_perl->Iminus_E;
13519     PL_minus_F          = proto_perl->Iminus_F;
13520     PL_doswitches       = proto_perl->Idoswitches;
13521     PL_dowarn           = proto_perl->Idowarn;
13522 #ifdef PERL_SAWAMPERSAND
13523     PL_sawampersand     = proto_perl->Isawampersand;
13524 #endif
13525     PL_unsafe           = proto_perl->Iunsafe;
13526     PL_perldb           = proto_perl->Iperldb;
13527     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13528     PL_exit_flags       = proto_perl->Iexit_flags;
13529
13530     /* XXX time(&PL_basetime) when asked for? */
13531     PL_basetime         = proto_perl->Ibasetime;
13532
13533     PL_maxsysfd         = proto_perl->Imaxsysfd;
13534     PL_statusvalue      = proto_perl->Istatusvalue;
13535 #ifdef __VMS
13536     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13537 #else
13538     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13539 #endif
13540
13541     /* RE engine related */
13542     PL_regmatch_slab    = NULL;
13543     PL_reg_curpm        = NULL;
13544
13545     PL_sub_generation   = proto_perl->Isub_generation;
13546
13547     /* funky return mechanisms */
13548     PL_forkprocess      = proto_perl->Iforkprocess;
13549
13550     /* internal state */
13551     PL_maxo             = proto_perl->Imaxo;
13552
13553     PL_main_start       = proto_perl->Imain_start;
13554     PL_eval_root        = proto_perl->Ieval_root;
13555     PL_eval_start       = proto_perl->Ieval_start;
13556
13557     PL_filemode         = proto_perl->Ifilemode;
13558     PL_lastfd           = proto_perl->Ilastfd;
13559     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13560     PL_Argv             = NULL;
13561     PL_Cmd              = NULL;
13562     PL_gensym           = proto_perl->Igensym;
13563
13564     PL_laststatval      = proto_perl->Ilaststatval;
13565     PL_laststype        = proto_perl->Ilaststype;
13566     PL_mess_sv          = NULL;
13567
13568     PL_profiledata      = NULL;
13569
13570     PL_generation       = proto_perl->Igeneration;
13571
13572     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13573     PL_in_clean_all     = proto_perl->Iin_clean_all;
13574
13575     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13576     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13577     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13578     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13579     PL_nomemok          = proto_perl->Inomemok;
13580     PL_an               = proto_perl->Ian;
13581     PL_evalseq          = proto_perl->Ievalseq;
13582     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13583     PL_origalen         = proto_perl->Iorigalen;
13584
13585     PL_sighandlerp      = proto_perl->Isighandlerp;
13586
13587     PL_runops           = proto_perl->Irunops;
13588
13589     PL_subline          = proto_perl->Isubline;
13590
13591 #ifdef FCRYPT
13592     PL_cryptseen        = proto_perl->Icryptseen;
13593 #endif
13594
13595 #ifdef USE_LOCALE_COLLATE
13596     PL_collation_ix     = proto_perl->Icollation_ix;
13597     PL_collation_standard       = proto_perl->Icollation_standard;
13598     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13599     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13600 #endif /* USE_LOCALE_COLLATE */
13601
13602 #ifdef USE_LOCALE_NUMERIC
13603     PL_numeric_standard = proto_perl->Inumeric_standard;
13604     PL_numeric_local    = proto_perl->Inumeric_local;
13605 #endif /* !USE_LOCALE_NUMERIC */
13606
13607     /* Did the locale setup indicate UTF-8? */
13608     PL_utf8locale       = proto_perl->Iutf8locale;
13609     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
13610     /* Unicode features (see perlrun/-C) */
13611     PL_unicode          = proto_perl->Iunicode;
13612
13613     /* Pre-5.8 signals control */
13614     PL_signals          = proto_perl->Isignals;
13615
13616     /* times() ticks per second */
13617     PL_clocktick        = proto_perl->Iclocktick;
13618
13619     /* Recursion stopper for PerlIO_find_layer */
13620     PL_in_load_module   = proto_perl->Iin_load_module;
13621
13622     /* sort() routine */
13623     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13624
13625     /* Not really needed/useful since the reenrant_retint is "volatile",
13626      * but do it for consistency's sake. */
13627     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13628
13629     /* Hooks to shared SVs and locks. */
13630     PL_sharehook        = proto_perl->Isharehook;
13631     PL_lockhook         = proto_perl->Ilockhook;
13632     PL_unlockhook       = proto_perl->Iunlockhook;
13633     PL_threadhook       = proto_perl->Ithreadhook;
13634     PL_destroyhook      = proto_perl->Idestroyhook;
13635     PL_signalhook       = proto_perl->Isignalhook;
13636
13637     PL_globhook         = proto_perl->Iglobhook;
13638
13639     /* swatch cache */
13640     PL_last_swash_hv    = NULL; /* reinits on demand */
13641     PL_last_swash_klen  = 0;
13642     PL_last_swash_key[0]= '\0';
13643     PL_last_swash_tmps  = (U8*)NULL;
13644     PL_last_swash_slen  = 0;
13645
13646     PL_srand_called     = proto_perl->Isrand_called;
13647     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
13648
13649     if (flags & CLONEf_COPY_STACKS) {
13650         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13651         PL_tmps_ix              = proto_perl->Itmps_ix;
13652         PL_tmps_max             = proto_perl->Itmps_max;
13653         PL_tmps_floor           = proto_perl->Itmps_floor;
13654
13655         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13656          * NOTE: unlike the others! */
13657         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13658         PL_scopestack_max       = proto_perl->Iscopestack_max;
13659
13660         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13661          * NOTE: unlike the others! */
13662         PL_savestack_ix         = proto_perl->Isavestack_ix;
13663         PL_savestack_max        = proto_perl->Isavestack_max;
13664     }
13665
13666     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13667     PL_top_env          = &PL_start_env;
13668
13669     PL_op               = proto_perl->Iop;
13670
13671     PL_Sv               = NULL;
13672     PL_Xpv              = (XPV*)NULL;
13673     my_perl->Ina        = proto_perl->Ina;
13674
13675     PL_statbuf          = proto_perl->Istatbuf;
13676     PL_statcache        = proto_perl->Istatcache;
13677
13678 #ifndef NO_TAINT_SUPPORT
13679     PL_tainted          = proto_perl->Itainted;
13680 #else
13681     PL_tainted          = FALSE;
13682 #endif
13683     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13684
13685     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13686
13687     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13688     PL_restartop        = proto_perl->Irestartop;
13689     PL_in_eval          = proto_perl->Iin_eval;
13690     PL_delaymagic       = proto_perl->Idelaymagic;
13691     PL_phase            = proto_perl->Iphase;
13692     PL_localizing       = proto_perl->Ilocalizing;
13693
13694     PL_hv_fetch_ent_mh  = NULL;
13695     PL_modcount         = proto_perl->Imodcount;
13696     PL_lastgotoprobe    = NULL;
13697     PL_dumpindent       = proto_perl->Idumpindent;
13698
13699     PL_efloatbuf        = NULL;         /* reinits on demand */
13700     PL_efloatsize       = 0;                    /* reinits on demand */
13701
13702     /* regex stuff */
13703
13704     PL_colorset         = 0;            /* reinits PL_colors[] */
13705     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13706
13707     /* Pluggable optimizer */
13708     PL_peepp            = proto_perl->Ipeepp;
13709     PL_rpeepp           = proto_perl->Irpeepp;
13710     /* op_free() hook */
13711     PL_opfreehook       = proto_perl->Iopfreehook;
13712
13713 #ifdef USE_REENTRANT_API
13714     /* XXX: things like -Dm will segfault here in perlio, but doing
13715      *  PERL_SET_CONTEXT(proto_perl);
13716      * breaks too many other things
13717      */
13718     Perl_reentrant_init(aTHX);
13719 #endif
13720
13721     /* create SV map for pointer relocation */
13722     PL_ptr_table = ptr_table_new();
13723
13724     /* initialize these special pointers as early as possible */
13725     init_constants();
13726     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13727     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13728     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13729
13730     /* create (a non-shared!) shared string table */
13731     PL_strtab           = newHV();
13732     HvSHAREKEYS_off(PL_strtab);
13733     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13734     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13735
13736     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13737
13738     /* This PV will be free'd special way so must set it same way op.c does */
13739     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13740     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13741
13742     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13743     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13744     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13745     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13746
13747     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13748     /* This makes no difference to the implementation, as it always pushes
13749        and shifts pointers to other SVs without changing their reference
13750        count, with the array becoming empty before it is freed. However, it
13751        makes it conceptually clear what is going on, and will avoid some
13752        work inside av.c, filling slots between AvFILL() and AvMAX() with
13753        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13754     AvREAL_off(param->stashes);
13755
13756     if (!(flags & CLONEf_COPY_STACKS)) {
13757         param->unreferenced = newAV();
13758     }
13759
13760 #ifdef PERLIO_LAYERS
13761     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13762     PerlIO_clone(aTHX_ proto_perl, param);
13763 #endif
13764
13765     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
13766     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
13767     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
13768     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13769     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13770     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13771
13772     /* switches */
13773     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13774     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13775     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13776     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13777
13778     /* magical thingies */
13779
13780     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13781
13782     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13783     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13784     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13785
13786    
13787     /* Clone the regex array */
13788     /* ORANGE FIXME for plugins, probably in the SV dup code.
13789        newSViv(PTR2IV(CALLREGDUPE(
13790        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13791     */
13792     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13793     PL_regex_pad = AvARRAY(PL_regex_padav);
13794
13795     PL_stashpadmax      = proto_perl->Istashpadmax;
13796     PL_stashpadix       = proto_perl->Istashpadix ;
13797     Newx(PL_stashpad, PL_stashpadmax, HV *);
13798     {
13799         PADOFFSET o = 0;
13800         for (; o < PL_stashpadmax; ++o)
13801             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13802     }
13803
13804     /* shortcuts to various I/O objects */
13805     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13806     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13807     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13808     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13809     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
13810     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13811     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13812
13813     /* shortcuts to regexp stuff */
13814     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
13815
13816     /* shortcuts to misc objects */
13817     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13818
13819     /* shortcuts to debugging objects */
13820     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
13821     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
13822     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
13823     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13824     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13825     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13826
13827     /* symbol tables */
13828     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13829     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13830     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13831     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13832     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13833
13834     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13835     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13836     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13837     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13838     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13839     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13840     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13841     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13842
13843     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13844
13845     /* subprocess state */
13846     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13847
13848     if (proto_perl->Iop_mask)
13849         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13850     else
13851         PL_op_mask      = NULL;
13852     /* PL_asserting        = proto_perl->Iasserting; */
13853
13854     /* current interpreter roots */
13855     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13856     OP_REFCNT_LOCK;
13857     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13858     OP_REFCNT_UNLOCK;
13859
13860     /* runtime control stuff */
13861     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13862
13863     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13864
13865     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13866
13867     /* interpreter atexit processing */
13868     PL_exitlistlen      = proto_perl->Iexitlistlen;
13869     if (PL_exitlistlen) {
13870         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13871         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13872     }
13873     else
13874         PL_exitlist     = (PerlExitListEntry*)NULL;
13875
13876     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13877     if (PL_my_cxt_size) {
13878         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13879         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13880 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13881         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13882         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13883 #endif
13884     }
13885     else {
13886         PL_my_cxt_list  = (void**)NULL;
13887 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13888         PL_my_cxt_keys  = (const char**)NULL;
13889 #endif
13890     }
13891     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13892     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13893     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13894     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13895
13896     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13897
13898     PAD_CLONE_VARS(proto_perl, param);
13899
13900 #ifdef HAVE_INTERP_INTERN
13901     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13902 #endif
13903
13904     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13905
13906 #ifdef PERL_USES_PL_PIDSTATUS
13907     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13908 #endif
13909     PL_osname           = SAVEPV(proto_perl->Iosname);
13910     PL_parser           = parser_dup(proto_perl->Iparser, param);
13911
13912     /* XXX this only works if the saved cop has already been cloned */
13913     if (proto_perl->Iparser) {
13914         PL_parser->saved_curcop = (COP*)any_dup(
13915                                     proto_perl->Iparser->saved_curcop,
13916                                     proto_perl);
13917     }
13918
13919     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13920
13921 #ifdef USE_LOCALE_COLLATE
13922     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13923 #endif /* USE_LOCALE_COLLATE */
13924
13925 #ifdef USE_LOCALE_NUMERIC
13926     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13927     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13928 #endif /* !USE_LOCALE_NUMERIC */
13929
13930     /* Unicode inversion lists */
13931     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13932     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
13933     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13934
13935     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13936     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13937
13938     /* utf8 character class swashes */
13939     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13940         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13941     }
13942     for (i = 0; i < POSIX_CC_COUNT; i++) {
13943         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13944     }
13945     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13946     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13947     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13948     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13949     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13950     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13951     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13952     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13953     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13954     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13955     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13956     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13957     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13958     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13959     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13960     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13961
13962     if (proto_perl->Ipsig_pend) {
13963         Newxz(PL_psig_pend, SIG_SIZE, int);
13964     }
13965     else {
13966         PL_psig_pend    = (int*)NULL;
13967     }
13968
13969     if (proto_perl->Ipsig_name) {
13970         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13971         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13972                             param);
13973         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13974     }
13975     else {
13976         PL_psig_ptr     = (SV**)NULL;
13977         PL_psig_name    = (SV**)NULL;
13978     }
13979
13980     if (flags & CLONEf_COPY_STACKS) {
13981         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13982         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13983                             PL_tmps_ix+1, param);
13984
13985         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13986         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13987         Newxz(PL_markstack, i, I32);
13988         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13989                                                   - proto_perl->Imarkstack);
13990         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13991                                                   - proto_perl->Imarkstack);
13992         Copy(proto_perl->Imarkstack, PL_markstack,
13993              PL_markstack_ptr - PL_markstack + 1, I32);
13994
13995         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13996          * NOTE: unlike the others! */
13997         Newxz(PL_scopestack, PL_scopestack_max, I32);
13998         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13999
14000 #ifdef DEBUGGING
14001         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14002         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14003 #endif
14004         /* reset stack AV to correct length before its duped via
14005          * PL_curstackinfo */
14006         AvFILLp(proto_perl->Icurstack) =
14007                             proto_perl->Istack_sp - proto_perl->Istack_base;
14008
14009         /* NOTE: si_dup() looks at PL_markstack */
14010         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14011
14012         /* PL_curstack          = PL_curstackinfo->si_stack; */
14013         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14014         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14015
14016         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14017         PL_stack_base           = AvARRAY(PL_curstack);
14018         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14019                                                    - proto_perl->Istack_base);
14020         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14021
14022         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14023         PL_savestack            = ss_dup(proto_perl, param);
14024     }
14025     else {
14026         init_stacks();
14027         ENTER;                  /* perl_destruct() wants to LEAVE; */
14028     }
14029
14030     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14031     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14032
14033     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14034     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14035     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14036     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14037     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14038     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14039
14040     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14041
14042     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14043     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14044     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14045
14046     PL_stashcache       = newHV();
14047
14048     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14049                                             proto_perl->Iwatchaddr);
14050     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14051     if (PL_debug && PL_watchaddr) {
14052         PerlIO_printf(Perl_debug_log,
14053           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14054           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14055           PTR2UV(PL_watchok));
14056     }
14057
14058     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14059     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14060     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14061
14062     /* Call the ->CLONE method, if it exists, for each of the stashes
14063        identified by sv_dup() above.
14064     */
14065     while(av_tindex(param->stashes) != -1) {
14066         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14067         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14068         if (cloner && GvCV(cloner)) {
14069             dSP;
14070             ENTER;
14071             SAVETMPS;
14072             PUSHMARK(SP);
14073             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14074             PUTBACK;
14075             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14076             FREETMPS;
14077             LEAVE;
14078         }
14079     }
14080
14081     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14082         ptr_table_free(PL_ptr_table);
14083         PL_ptr_table = NULL;
14084     }
14085
14086     if (!(flags & CLONEf_COPY_STACKS)) {
14087         unreferenced_to_tmp_stack(param->unreferenced);
14088     }
14089
14090     SvREFCNT_dec(param->stashes);
14091
14092     /* orphaned? eg threads->new inside BEGIN or use */
14093     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14094         SvREFCNT_inc_simple_void(PL_compcv);
14095         SAVEFREESV(PL_compcv);
14096     }
14097
14098     return my_perl;
14099 }
14100
14101 static void
14102 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14103 {
14104     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14105     
14106     if (AvFILLp(unreferenced) > -1) {
14107         SV **svp = AvARRAY(unreferenced);
14108         SV **const last = svp + AvFILLp(unreferenced);
14109         SSize_t count = 0;
14110
14111         do {
14112             if (SvREFCNT(*svp) == 1)
14113                 ++count;
14114         } while (++svp <= last);
14115
14116         EXTEND_MORTAL(count);
14117         svp = AvARRAY(unreferenced);
14118
14119         do {
14120             if (SvREFCNT(*svp) == 1) {
14121                 /* Our reference is the only one to this SV. This means that
14122                    in this thread, the scalar effectively has a 0 reference.
14123                    That doesn't work (cleanup never happens), so donate our
14124                    reference to it onto the save stack. */
14125                 PL_tmps_stack[++PL_tmps_ix] = *svp;
14126             } else {
14127                 /* As an optimisation, because we are already walking the
14128                    entire array, instead of above doing either
14129                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
14130                    release our reference to the scalar, so that at the end of
14131                    the array owns zero references to the scalars it happens to
14132                    point to. We are effectively converting the array from
14133                    AvREAL() on to AvREAL() off. This saves the av_clear()
14134                    (triggered by the SvREFCNT_dec(unreferenced) below) from
14135                    walking the array a second time.  */
14136                 SvREFCNT_dec(*svp);
14137             }
14138
14139         } while (++svp <= last);
14140         AvREAL_off(unreferenced);
14141     }
14142     SvREFCNT_dec_NN(unreferenced);
14143 }
14144
14145 void
14146 Perl_clone_params_del(CLONE_PARAMS *param)
14147 {
14148     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
14149        happy: */
14150     PerlInterpreter *const to = param->new_perl;
14151     dTHXa(to);
14152     PerlInterpreter *const was = PERL_GET_THX;
14153
14154     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
14155
14156     if (was != to) {
14157         PERL_SET_THX(to);
14158     }
14159
14160     SvREFCNT_dec(param->stashes);
14161     if (param->unreferenced)
14162         unreferenced_to_tmp_stack(param->unreferenced);
14163
14164     Safefree(param);
14165
14166     if (was != to) {
14167         PERL_SET_THX(was);
14168     }
14169 }
14170
14171 CLONE_PARAMS *
14172 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
14173 {
14174     dVAR;
14175     /* Need to play this game, as newAV() can call safesysmalloc(), and that
14176        does a dTHX; to get the context from thread local storage.
14177        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
14178        a version that passes in my_perl.  */
14179     PerlInterpreter *const was = PERL_GET_THX;
14180     CLONE_PARAMS *param;
14181
14182     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
14183
14184     if (was != to) {
14185         PERL_SET_THX(to);
14186     }
14187
14188     /* Given that we've set the context, we can do this unshared.  */
14189     Newx(param, 1, CLONE_PARAMS);
14190
14191     param->flags = 0;
14192     param->proto_perl = from;
14193     param->new_perl = to;
14194     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
14195     AvREAL_off(param->stashes);
14196     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
14197
14198     if (was != to) {
14199         PERL_SET_THX(was);
14200     }
14201     return param;
14202 }
14203
14204 #endif /* USE_ITHREADS */
14205
14206 void
14207 Perl_init_constants(pTHX)
14208 {
14209     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
14210     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
14211     SvANY(&PL_sv_undef)         = NULL;
14212
14213     SvANY(&PL_sv_no)            = new_XPVNV();
14214     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
14215     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
14216                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14217                                   |SVp_POK|SVf_POK;
14218
14219     SvANY(&PL_sv_yes)           = new_XPVNV();
14220     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
14221     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
14222                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14223                                   |SVp_POK|SVf_POK;
14224
14225     SvPV_set(&PL_sv_no, (char*)PL_No);
14226     SvCUR_set(&PL_sv_no, 0);
14227     SvLEN_set(&PL_sv_no, 0);
14228     SvIV_set(&PL_sv_no, 0);
14229     SvNV_set(&PL_sv_no, 0);
14230
14231     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
14232     SvCUR_set(&PL_sv_yes, 1);
14233     SvLEN_set(&PL_sv_yes, 0);
14234     SvIV_set(&PL_sv_yes, 1);
14235     SvNV_set(&PL_sv_yes, 1);
14236 }
14237
14238 /*
14239 =head1 Unicode Support
14240
14241 =for apidoc sv_recode_to_utf8
14242
14243 The encoding is assumed to be an Encode object, on entry the PV
14244 of the sv is assumed to be octets in that encoding, and the sv
14245 will be converted into Unicode (and UTF-8).
14246
14247 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14248 is not a reference, nothing is done to the sv.  If the encoding is not
14249 an C<Encode::XS> Encoding object, bad things will happen.
14250 (See F<lib/encoding.pm> and L<Encode>.)
14251
14252 The PV of the sv is returned.
14253
14254 =cut */
14255
14256 char *
14257 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14258 {
14259     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14260
14261     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14262         SV *uni;
14263         STRLEN len;
14264         const char *s;
14265         dSP;
14266         SV *nsv = sv;
14267         ENTER;
14268         PUSHSTACK;
14269         SAVETMPS;
14270         if (SvPADTMP(nsv)) {
14271             nsv = sv_newmortal();
14272             SvSetSV_nosteal(nsv, sv);
14273         }
14274         save_re_context();
14275         PUSHMARK(sp);
14276         EXTEND(SP, 3);
14277         PUSHs(encoding);
14278         PUSHs(nsv);
14279 /*
14280   NI-S 2002/07/09
14281   Passing sv_yes is wrong - it needs to be or'ed set of constants
14282   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14283   remove converted chars from source.
14284
14285   Both will default the value - let them.
14286
14287         XPUSHs(&PL_sv_yes);
14288 */
14289         PUTBACK;
14290         call_method("decode", G_SCALAR);
14291         SPAGAIN;
14292         uni = POPs;
14293         PUTBACK;
14294         s = SvPV_const(uni, len);
14295         if (s != SvPVX_const(sv)) {
14296             SvGROW(sv, len + 1);
14297             Move(s, SvPVX(sv), len + 1, char);
14298             SvCUR_set(sv, len);
14299         }
14300         FREETMPS;
14301         POPSTACK;
14302         LEAVE;
14303         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14304             /* clear pos and any utf8 cache */
14305             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14306             if (mg)
14307                 mg->mg_len = -1;
14308             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14309                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14310         }
14311         SvUTF8_on(sv);
14312         return SvPVX(sv);
14313     }
14314     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14315 }
14316
14317 /*
14318 =for apidoc sv_cat_decode
14319
14320 The encoding is assumed to be an Encode object, the PV of the ssv is
14321 assumed to be octets in that encoding and decoding the input starts
14322 from the position which (PV + *offset) pointed to.  The dsv will be
14323 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14324 when the string tstr appears in decoding output or the input ends on
14325 the PV of the ssv.  The value which the offset points will be modified
14326 to the last input position on the ssv.
14327
14328 Returns TRUE if the terminator was found, else returns FALSE.
14329
14330 =cut */
14331
14332 bool
14333 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14334                    SV *ssv, int *offset, char *tstr, int tlen)
14335 {
14336     bool ret = FALSE;
14337
14338     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14339
14340     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14341         SV *offsv;
14342         dSP;
14343         ENTER;
14344         SAVETMPS;
14345         save_re_context();
14346         PUSHMARK(sp);
14347         EXTEND(SP, 6);
14348         PUSHs(encoding);
14349         PUSHs(dsv);
14350         PUSHs(ssv);
14351         offsv = newSViv(*offset);
14352         mPUSHs(offsv);
14353         mPUSHp(tstr, tlen);
14354         PUTBACK;
14355         call_method("cat_decode", G_SCALAR);
14356         SPAGAIN;
14357         ret = SvTRUE(TOPs);
14358         *offset = SvIV(offsv);
14359         PUTBACK;
14360         FREETMPS;
14361         LEAVE;
14362     }
14363     else
14364         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14365     return ret;
14366
14367 }
14368
14369 /* ---------------------------------------------------------------------
14370  *
14371  * support functions for report_uninit()
14372  */
14373
14374 /* the maxiumum size of array or hash where we will scan looking
14375  * for the undefined element that triggered the warning */
14376
14377 #define FUV_MAX_SEARCH_SIZE 1000
14378
14379 /* Look for an entry in the hash whose value has the same SV as val;
14380  * If so, return a mortal copy of the key. */
14381
14382 STATIC SV*
14383 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14384 {
14385     dVAR;
14386     HE **array;
14387     I32 i;
14388
14389     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14390
14391     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14392                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14393         return NULL;
14394
14395     array = HvARRAY(hv);
14396
14397     for (i=HvMAX(hv); i>=0; i--) {
14398         HE *entry;
14399         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14400             if (HeVAL(entry) != val)
14401                 continue;
14402             if (    HeVAL(entry) == &PL_sv_undef ||
14403                     HeVAL(entry) == &PL_sv_placeholder)
14404                 continue;
14405             if (!HeKEY(entry))
14406                 return NULL;
14407             if (HeKLEN(entry) == HEf_SVKEY)
14408                 return sv_mortalcopy(HeKEY_sv(entry));
14409             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14410         }
14411     }
14412     return NULL;
14413 }
14414
14415 /* Look for an entry in the array whose value has the same SV as val;
14416  * If so, return the index, otherwise return -1. */
14417
14418 STATIC I32
14419 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14420 {
14421     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14422
14423     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14424                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14425         return -1;
14426
14427     if (val != &PL_sv_undef) {
14428         SV ** const svp = AvARRAY(av);
14429         I32 i;
14430
14431         for (i=AvFILLp(av); i>=0; i--)
14432             if (svp[i] == val)
14433                 return i;
14434     }
14435     return -1;
14436 }
14437
14438 /* varname(): return the name of a variable, optionally with a subscript.
14439  * If gv is non-zero, use the name of that global, along with gvtype (one
14440  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14441  * targ.  Depending on the value of the subscript_type flag, return:
14442  */
14443
14444 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14445 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14446 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14447 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14448
14449 SV*
14450 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14451         const SV *const keyname, I32 aindex, int subscript_type)
14452 {
14453
14454     SV * const name = sv_newmortal();
14455     if (gv && isGV(gv)) {
14456         char buffer[2];
14457         buffer[0] = gvtype;
14458         buffer[1] = 0;
14459
14460         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14461
14462         gv_fullname4(name, gv, buffer, 0);
14463
14464         if ((unsigned int)SvPVX(name)[1] <= 26) {
14465             buffer[0] = '^';
14466             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14467
14468             /* Swap the 1 unprintable control character for the 2 byte pretty
14469                version - ie substr($name, 1, 1) = $buffer; */
14470             sv_insert(name, 1, 1, buffer, 2);
14471         }
14472     }
14473     else {
14474         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14475         SV *sv;
14476         AV *av;
14477
14478         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14479
14480         if (!cv || !CvPADLIST(cv))
14481             return NULL;
14482         av = *PadlistARRAY(CvPADLIST(cv));
14483         sv = *av_fetch(av, targ, FALSE);
14484         sv_setsv_flags(name, sv, 0);
14485     }
14486
14487     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14488         SV * const sv = newSV(0);
14489         *SvPVX(name) = '$';
14490         Perl_sv_catpvf(aTHX_ name, "{%s}",
14491             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14492                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14493         SvREFCNT_dec_NN(sv);
14494     }
14495     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14496         *SvPVX(name) = '$';
14497         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14498     }
14499     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14500         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14501         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14502     }
14503
14504     return name;
14505 }
14506
14507
14508 /*
14509 =for apidoc find_uninit_var
14510
14511 Find the name of the undefined variable (if any) that caused the operator
14512 to issue a "Use of uninitialized value" warning.
14513 If match is true, only return a name if its value matches uninit_sv.
14514 So roughly speaking, if a unary operator (such as OP_COS) generates a
14515 warning, then following the direct child of the op may yield an
14516 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14517 other hand, with OP_ADD there are two branches to follow, so we only print
14518 the variable name if we get an exact match.
14519
14520 The name is returned as a mortal SV.
14521
14522 Assumes that PL_op is the op that originally triggered the error, and that
14523 PL_comppad/PL_curpad points to the currently executing pad.
14524
14525 =cut
14526 */
14527
14528 STATIC SV *
14529 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14530                   bool match)
14531 {
14532     dVAR;
14533     SV *sv;
14534     const GV *gv;
14535     const OP *o, *o2, *kid;
14536
14537     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14538                             uninit_sv == &PL_sv_placeholder)))
14539         return NULL;
14540
14541     switch (obase->op_type) {
14542
14543     case OP_RV2AV:
14544     case OP_RV2HV:
14545     case OP_PADAV:
14546     case OP_PADHV:
14547       {
14548         const bool pad  = (    obase->op_type == OP_PADAV
14549                             || obase->op_type == OP_PADHV
14550                             || obase->op_type == OP_PADRANGE
14551                           );
14552
14553         const bool hash = (    obase->op_type == OP_PADHV
14554                             || obase->op_type == OP_RV2HV
14555                             || (obase->op_type == OP_PADRANGE
14556                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14557                           );
14558         I32 index = 0;
14559         SV *keysv = NULL;
14560         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14561
14562         if (pad) { /* @lex, %lex */
14563             sv = PAD_SVl(obase->op_targ);
14564             gv = NULL;
14565         }
14566         else {
14567             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14568             /* @global, %global */
14569                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14570                 if (!gv)
14571                     break;
14572                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14573             }
14574             else if (obase == PL_op) /* @{expr}, %{expr} */
14575                 return find_uninit_var(cUNOPx(obase)->op_first,
14576                                                     uninit_sv, match);
14577             else /* @{expr}, %{expr} as a sub-expression */
14578                 return NULL;
14579         }
14580
14581         /* attempt to find a match within the aggregate */
14582         if (hash) {
14583             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14584             if (keysv)
14585                 subscript_type = FUV_SUBSCRIPT_HASH;
14586         }
14587         else {
14588             index = find_array_subscript((const AV *)sv, uninit_sv);
14589             if (index >= 0)
14590                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14591         }
14592
14593         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14594             break;
14595
14596         return varname(gv, hash ? '%' : '@', obase->op_targ,
14597                                     keysv, index, subscript_type);
14598       }
14599
14600     case OP_RV2SV:
14601         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14602             /* $global */
14603             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14604             if (!gv || !GvSTASH(gv))
14605                 break;
14606             if (match && (GvSV(gv) != uninit_sv))
14607                 break;
14608             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14609         }
14610         /* ${expr} */
14611         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14612
14613     case OP_PADSV:
14614         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14615             break;
14616         return varname(NULL, '$', obase->op_targ,
14617                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14618
14619     case OP_GVSV:
14620         gv = cGVOPx_gv(obase);
14621         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14622             break;
14623         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14624
14625     case OP_AELEMFAST_LEX:
14626         if (match) {
14627             SV **svp;
14628             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14629             if (!av || SvRMAGICAL(av))
14630                 break;
14631             svp = av_fetch(av, (I8)obase->op_private, FALSE);
14632             if (!svp || *svp != uninit_sv)
14633                 break;
14634         }
14635         return varname(NULL, '$', obase->op_targ,
14636                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14637     case OP_AELEMFAST:
14638         {
14639             gv = cGVOPx_gv(obase);
14640             if (!gv)
14641                 break;
14642             if (match) {
14643                 SV **svp;
14644                 AV *const av = GvAV(gv);
14645                 if (!av || SvRMAGICAL(av))
14646                     break;
14647                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
14648                 if (!svp || *svp != uninit_sv)
14649                     break;
14650             }
14651             return varname(gv, '$', 0,
14652                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14653         }
14654         NOT_REACHED; /* NOTREACHED */
14655
14656     case OP_EXISTS:
14657         o = cUNOPx(obase)->op_first;
14658         if (!o || o->op_type != OP_NULL ||
14659                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14660             break;
14661         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14662
14663     case OP_AELEM:
14664     case OP_HELEM:
14665     {
14666         bool negate = FALSE;
14667
14668         if (PL_op == obase)
14669             /* $a[uninit_expr] or $h{uninit_expr} */
14670             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14671
14672         gv = NULL;
14673         o = cBINOPx(obase)->op_first;
14674         kid = cBINOPx(obase)->op_last;
14675
14676         /* get the av or hv, and optionally the gv */
14677         sv = NULL;
14678         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14679             sv = PAD_SV(o->op_targ);
14680         }
14681         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14682                 && cUNOPo->op_first->op_type == OP_GV)
14683         {
14684             gv = cGVOPx_gv(cUNOPo->op_first);
14685             if (!gv)
14686                 break;
14687             sv = o->op_type
14688                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14689         }
14690         if (!sv)
14691             break;
14692
14693         if (kid && kid->op_type == OP_NEGATE) {
14694             negate = TRUE;
14695             kid = cUNOPx(kid)->op_first;
14696         }
14697
14698         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14699             /* index is constant */
14700             SV* kidsv;
14701             if (negate) {
14702                 kidsv = sv_2mortal(newSVpvs("-"));
14703                 sv_catsv(kidsv, cSVOPx_sv(kid));
14704             }
14705             else
14706                 kidsv = cSVOPx_sv(kid);
14707             if (match) {
14708                 if (SvMAGICAL(sv))
14709                     break;
14710                 if (obase->op_type == OP_HELEM) {
14711                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14712                     if (!he || HeVAL(he) != uninit_sv)
14713                         break;
14714                 }
14715                 else {
14716                     SV * const  opsv = cSVOPx_sv(kid);
14717                     const IV  opsviv = SvIV(opsv);
14718                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14719                         negate ? - opsviv : opsviv,
14720                         FALSE);
14721                     if (!svp || *svp != uninit_sv)
14722                         break;
14723                 }
14724             }
14725             if (obase->op_type == OP_HELEM)
14726                 return varname(gv, '%', o->op_targ,
14727                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14728             else
14729                 return varname(gv, '@', o->op_targ, NULL,
14730                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14731                     FUV_SUBSCRIPT_ARRAY);
14732         }
14733         else  {
14734             /* index is an expression;
14735              * attempt to find a match within the aggregate */
14736             if (obase->op_type == OP_HELEM) {
14737                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14738                 if (keysv)
14739                     return varname(gv, '%', o->op_targ,
14740                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14741             }
14742             else {
14743                 const I32 index
14744                     = find_array_subscript((const AV *)sv, uninit_sv);
14745                 if (index >= 0)
14746                     return varname(gv, '@', o->op_targ,
14747                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14748             }
14749             if (match)
14750                 break;
14751             return varname(gv,
14752                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14753                 ? '@' : '%',
14754                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14755         }
14756         NOT_REACHED; /* NOTREACHED */
14757     }
14758
14759     case OP_AASSIGN:
14760         /* only examine RHS */
14761         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14762
14763     case OP_OPEN:
14764         o = cUNOPx(obase)->op_first;
14765         if (   o->op_type == OP_PUSHMARK
14766            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14767         )
14768             o = OP_SIBLING(o);
14769
14770         if (!OP_HAS_SIBLING(o)) {
14771             /* one-arg version of open is highly magical */
14772
14773             if (o->op_type == OP_GV) { /* open FOO; */
14774                 gv = cGVOPx_gv(o);
14775                 if (match && GvSV(gv) != uninit_sv)
14776                     break;
14777                 return varname(gv, '$', 0,
14778                             NULL, 0, FUV_SUBSCRIPT_NONE);
14779             }
14780             /* other possibilities not handled are:
14781              * open $x; or open my $x;  should return '${*$x}'
14782              * open expr;               should return '$'.expr ideally
14783              */
14784              break;
14785         }
14786         goto do_op;
14787
14788     /* ops where $_ may be an implicit arg */
14789     case OP_TRANS:
14790     case OP_TRANSR:
14791     case OP_SUBST:
14792     case OP_MATCH:
14793         if ( !(obase->op_flags & OPf_STACKED)) {
14794             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14795                                  ? PAD_SVl(obase->op_targ)
14796                                  : DEFSV))
14797             {
14798                 sv = sv_newmortal();
14799                 sv_setpvs(sv, "$_");
14800                 return sv;
14801             }
14802         }
14803         goto do_op;
14804
14805     case OP_PRTF:
14806     case OP_PRINT:
14807     case OP_SAY:
14808         match = 1; /* print etc can return undef on defined args */
14809         /* skip filehandle as it can't produce 'undef' warning  */
14810         o = cUNOPx(obase)->op_first;
14811         if ((obase->op_flags & OPf_STACKED)
14812             &&
14813                (   o->op_type == OP_PUSHMARK
14814                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14815             o = OP_SIBLING(OP_SIBLING(o));
14816         goto do_op2;
14817
14818
14819     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14820     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14821
14822         /* the following ops are capable of returning PL_sv_undef even for
14823          * defined arg(s) */
14824
14825     case OP_BACKTICK:
14826     case OP_PIPE_OP:
14827     case OP_FILENO:
14828     case OP_BINMODE:
14829     case OP_TIED:
14830     case OP_GETC:
14831     case OP_SYSREAD:
14832     case OP_SEND:
14833     case OP_IOCTL:
14834     case OP_SOCKET:
14835     case OP_SOCKPAIR:
14836     case OP_BIND:
14837     case OP_CONNECT:
14838     case OP_LISTEN:
14839     case OP_ACCEPT:
14840     case OP_SHUTDOWN:
14841     case OP_SSOCKOPT:
14842     case OP_GETPEERNAME:
14843     case OP_FTRREAD:
14844     case OP_FTRWRITE:
14845     case OP_FTREXEC:
14846     case OP_FTROWNED:
14847     case OP_FTEREAD:
14848     case OP_FTEWRITE:
14849     case OP_FTEEXEC:
14850     case OP_FTEOWNED:
14851     case OP_FTIS:
14852     case OP_FTZERO:
14853     case OP_FTSIZE:
14854     case OP_FTFILE:
14855     case OP_FTDIR:
14856     case OP_FTLINK:
14857     case OP_FTPIPE:
14858     case OP_FTSOCK:
14859     case OP_FTBLK:
14860     case OP_FTCHR:
14861     case OP_FTTTY:
14862     case OP_FTSUID:
14863     case OP_FTSGID:
14864     case OP_FTSVTX:
14865     case OP_FTTEXT:
14866     case OP_FTBINARY:
14867     case OP_FTMTIME:
14868     case OP_FTATIME:
14869     case OP_FTCTIME:
14870     case OP_READLINK:
14871     case OP_OPEN_DIR:
14872     case OP_READDIR:
14873     case OP_TELLDIR:
14874     case OP_SEEKDIR:
14875     case OP_REWINDDIR:
14876     case OP_CLOSEDIR:
14877     case OP_GMTIME:
14878     case OP_ALARM:
14879     case OP_SEMGET:
14880     case OP_GETLOGIN:
14881     case OP_UNDEF:
14882     case OP_SUBSTR:
14883     case OP_AEACH:
14884     case OP_EACH:
14885     case OP_SORT:
14886     case OP_CALLER:
14887     case OP_DOFILE:
14888     case OP_PROTOTYPE:
14889     case OP_NCMP:
14890     case OP_SMARTMATCH:
14891     case OP_UNPACK:
14892     case OP_SYSOPEN:
14893     case OP_SYSSEEK:
14894         match = 1;
14895         goto do_op;
14896
14897     case OP_ENTERSUB:
14898     case OP_GOTO:
14899         /* XXX tmp hack: these two may call an XS sub, and currently
14900           XS subs don't have a SUB entry on the context stack, so CV and
14901           pad determination goes wrong, and BAD things happen. So, just
14902           don't try to determine the value under those circumstances.
14903           Need a better fix at dome point. DAPM 11/2007 */
14904         break;
14905
14906     case OP_FLIP:
14907     case OP_FLOP:
14908     {
14909         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14910         if (gv && GvSV(gv) == uninit_sv)
14911             return newSVpvs_flags("$.", SVs_TEMP);
14912         goto do_op;
14913     }
14914
14915     case OP_POS:
14916         /* def-ness of rval pos() is independent of the def-ness of its arg */
14917         if ( !(obase->op_flags & OPf_MOD))
14918             break;
14919
14920     case OP_SCHOMP:
14921     case OP_CHOMP:
14922         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14923             return newSVpvs_flags("${$/}", SVs_TEMP);
14924         /* FALLTHROUGH */
14925
14926     default:
14927     do_op:
14928         if (!(obase->op_flags & OPf_KIDS))
14929             break;
14930         o = cUNOPx(obase)->op_first;
14931         
14932     do_op2:
14933         if (!o)
14934             break;
14935
14936         /* This loop checks all the kid ops, skipping any that cannot pos-
14937          * sibly be responsible for the uninitialized value; i.e., defined
14938          * constants and ops that return nothing.  If there is only one op
14939          * left that is not skipped, then we *know* it is responsible for
14940          * the uninitialized value.  If there is more than one op left, we
14941          * have to look for an exact match in the while() loop below.
14942          * Note that we skip padrange, because the individual pad ops that
14943          * it replaced are still in the tree, so we work on them instead.
14944          */
14945         o2 = NULL;
14946         for (kid=o; kid; kid = OP_SIBLING(kid)) {
14947             const OPCODE type = kid->op_type;
14948             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14949               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14950               || (type == OP_PUSHMARK)
14951               || (type == OP_PADRANGE)
14952             )
14953             continue;
14954
14955             if (o2) { /* more than one found */
14956                 o2 = NULL;
14957                 break;
14958             }
14959             o2 = kid;
14960         }
14961         if (o2)
14962             return find_uninit_var(o2, uninit_sv, match);
14963
14964         /* scan all args */
14965         while (o) {
14966             sv = find_uninit_var(o, uninit_sv, 1);
14967             if (sv)
14968                 return sv;
14969             o = OP_SIBLING(o);
14970         }
14971         break;
14972     }
14973     return NULL;
14974 }
14975
14976
14977 /*
14978 =for apidoc report_uninit
14979
14980 Print appropriate "Use of uninitialized variable" warning.
14981
14982 =cut
14983 */
14984
14985 void
14986 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14987 {
14988     if (PL_op) {
14989         SV* varname = NULL;
14990         if (uninit_sv && PL_curpad) {
14991             varname = find_uninit_var(PL_op, uninit_sv,0);
14992             if (varname)
14993                 sv_insert(varname, 0, 0, " ", 1);
14994         }
14995         /* PL_warn_uninit_sv is constant */
14996         GCC_DIAG_IGNORE(-Wformat-nonliteral);
14997         /* diag_listed_as: Use of uninitialized value%s */
14998         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14999                 SVfARG(varname ? varname : &PL_sv_no),
15000                 " in ", OP_DESC(PL_op));
15001         GCC_DIAG_RESTORE;
15002     }
15003     else {
15004         /* PL_warn_uninit is constant */
15005         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15006         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
15007                     "", "", "");
15008         GCC_DIAG_RESTORE;
15009     }
15010 }
15011
15012 /*
15013  * Local variables:
15014  * c-indentation-style: bsd
15015  * c-basic-offset: 4
15016  * indent-tabs-mode: nil
15017  * End:
15018  *
15019  * ex: set ts=8 sts=4 sw=4 et:
15020  */