This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Handle non-PV $_ in @INC filters
[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
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 #endif
70
71 /* ============================================================================
72
73 =head1 Allocation and deallocation of SVs.
74
75 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
76 sv, av, hv...) contains type and reference count information, and for
77 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
78 contains fields specific to each type.  Some types store all they need
79 in the head, so don't have a body.
80
81 In all but the most memory-paranoid configurations (ex: PURIFY), heads
82 and bodies are allocated out of arenas, which by default are
83 approximately 4K chunks of memory parcelled up into N heads or bodies.
84 Sv-bodies are allocated by their sv-type, guaranteeing size
85 consistency needed to allocate safely from arrays.
86
87 For SV-heads, the first slot in each arena is reserved, and holds a
88 link to the next arena, some flags, and a note of the number of slots.
89 Snaked through each arena chain is a linked list of free items; when
90 this becomes empty, an extra arena is allocated and divided up into N
91 items which are threaded into the free list.
92
93 SV-bodies are similar, but they use arena-sets by default, which
94 separate the link and info from the arena itself, and reclaim the 1st
95 slot in the arena.  SV-bodies are further described later.
96
97 The following global variables are associated with arenas:
98
99     PL_sv_arenaroot     pointer to list of SV arenas
100     PL_sv_root          pointer to list of free SV structures
101
102     PL_body_arenas      head of linked-list of body arenas
103     PL_body_roots[]     array of pointers to list of free bodies of svtype
104                         arrays are indexed by the svtype needed
105
106 A few special SV heads are not allocated from an arena, but are
107 instead directly created in the interpreter structure, eg PL_sv_undef.
108 The size of arenas can be changed from the default by setting
109 PERL_ARENA_SIZE appropriately at compile time.
110
111 The SV arena serves the secondary purpose of allowing still-live SVs
112 to be located and destroyed during final cleanup.
113
114 At the lowest level, the macros new_SV() and del_SV() grab and free
115 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
116 to return the SV to the free list with error checking.) new_SV() calls
117 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
118 SVs in the free list have their SvTYPE field set to all ones.
119
120 At the time of very final cleanup, sv_free_arenas() is called from
121 perl_destruct() to physically free all the arenas allocated since the
122 start of the interpreter.
123
124 The function visit() scans the SV arenas list, and calls a specified
125 function for each SV it finds which is still live - ie which has an SvTYPE
126 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
127 following functions (specified as [function that calls visit()] / [function
128 called by visit() for each SV]):
129
130     sv_report_used() / do_report_used()
131                         dump all remaining SVs (debugging aid)
132
133     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
134                       do_clean_named_io_objs(),do_curse()
135                         Attempt to free all objects pointed to by RVs,
136                         try to do the same for all objects indir-
137                         ectly referenced by typeglobs too, and
138                         then do a final sweep, cursing any
139                         objects that remain.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
186         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
187     } STMT_END
188 #  define DEBUG_SV_SERIAL(sv)                                               \
189     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
190             PTR2UV(sv), (long)(sv)->sv_debug_serial))
191 #else
192 #  define FREE_SV_DEBUG_FILE(sv)
193 #  define DEBUG_SV_SERIAL(sv)   NOOP
194 #endif
195
196 #ifdef PERL_POISON
197 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
198 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
199 /* Whilst I'd love to do this, it seems that things like to check on
200    unreferenced scalars
201 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
202 */
203 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
204                                 PoisonNew(&SvREFCNT(sv), 1, U32)
205 #else
206 #  define SvARENA_CHAIN(sv)     SvANY(sv)
207 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
208 #  define POSION_SV_HEAD(sv)
209 #endif
210
211 /* Mark an SV head as unused, and add to free list.
212  *
213  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
214  * its refcount artificially decremented during global destruction, so
215  * there may be dangling pointers to it. The last thing we want in that
216  * case is for it to be reused. */
217
218 #define plant_SV(p) \
219     STMT_START {                                        \
220         const U32 old_flags = SvFLAGS(p);                       \
221         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
222         DEBUG_SV_SERIAL(p);                             \
223         FREE_SV_DEBUG_FILE(p);                          \
224         POSION_SV_HEAD(p);                              \
225         SvFLAGS(p) = SVTYPEMASK;                        \
226         if (!(old_flags & SVf_BREAK)) {         \
227             SvARENA_CHAIN_SET(p, PL_sv_root);   \
228             PL_sv_root = (p);                           \
229         }                                               \
230         --PL_sv_count;                                  \
231     } STMT_END
232
233 #define uproot_SV(p) \
234     STMT_START {                                        \
235         (p) = PL_sv_root;                               \
236         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
237         ++PL_sv_count;                                  \
238     } STMT_END
239
240
241 /* make some more SVs by adding another arena */
242
243 STATIC SV*
244 S_more_sv(pTHX)
245 {
246     dVAR;
247     SV* sv;
248     char *chunk;                /* must use New here to match call to */
249     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
250     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
251     uproot_SV(sv);
252     return sv;
253 }
254
255 /* new_SV(): return a new, empty SV head */
256
257 #ifdef DEBUG_LEAKING_SCALARS
258 /* provide a real function for a debugger to play with */
259 STATIC SV*
260 S_new_SV(pTHX_ const char *file, int line, const char *func)
261 {
262     SV* sv;
263
264     if (PL_sv_root)
265         uproot_SV(sv);
266     else
267         sv = S_more_sv(aTHX);
268     SvANY(sv) = 0;
269     SvREFCNT(sv) = 1;
270     SvFLAGS(sv) = 0;
271     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
272     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
273                 ? PL_parser->copline
274                 :  PL_curcop
275                     ? CopLINE(PL_curcop)
276                     : 0
277             );
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_parent = NULL;
280     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
281
282     sv->sv_debug_serial = PL_sv_serial++;
283
284     MEM_LOG_NEW_SV(sv, file, line, func);
285     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
286             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
287
288     return sv;
289 }
290 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
291
292 #else
293 #  define new_SV(p) \
294     STMT_START {                                        \
295         if (PL_sv_root)                                 \
296             uproot_SV(p);                               \
297         else                                            \
298             (p) = S_more_sv(aTHX);                      \
299         SvANY(p) = 0;                                   \
300         SvREFCNT(p) = 1;                                \
301         SvFLAGS(p) = 0;                                 \
302         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
303     } STMT_END
304 #endif
305
306
307 /* del_SV(): return an empty SV head to the free list */
308
309 #ifdef DEBUGGING
310
311 #define del_SV(p) \
312     STMT_START {                                        \
313         if (DEBUG_D_TEST)                               \
314             del_sv(p);                                  \
315         else                                            \
316             plant_SV(p);                                \
317     } STMT_END
318
319 STATIC void
320 S_del_sv(pTHX_ SV *p)
321 {
322     dVAR;
323
324     PERL_ARGS_ASSERT_DEL_SV;
325
326     if (DEBUG_D_TEST) {
327         SV* sva;
328         bool ok = 0;
329         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
330             const SV * const sv = sva + 1;
331             const SV * const svend = &sva[SvREFCNT(sva)];
332             if (p >= sv && p < svend) {
333                 ok = 1;
334                 break;
335             }
336         }
337         if (!ok) {
338             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
339                              "Attempt to free non-arena SV: 0x%"UVxf
340                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
341             return;
342         }
343     }
344     plant_SV(p);
345 }
346
347 #else /* ! DEBUGGING */
348
349 #define del_SV(p)   plant_SV(p)
350
351 #endif /* DEBUGGING */
352
353
354 /*
355 =head1 SV Manipulation Functions
356
357 =for apidoc sv_add_arena
358
359 Given a chunk of memory, link it to the head of the list of arenas,
360 and split it into a list of free SVs.
361
362 =cut
363 */
364
365 static void
366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
367 {
368     dVAR;
369     SV *const sva = MUTABLE_SV(ptr);
370     SV* sv;
371     SV* svend;
372
373     PERL_ARGS_ASSERT_SV_ADD_ARENA;
374
375     /* The first SV in an arena isn't an SV. */
376     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
377     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
378     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
379
380     PL_sv_arenaroot = sva;
381     PL_sv_root = sva + 1;
382
383     svend = &sva[SvREFCNT(sva) - 1];
384     sv = sva + 1;
385     while (sv < svend) {
386         SvARENA_CHAIN_SET(sv, (sv + 1));
387 #ifdef DEBUGGING
388         SvREFCNT(sv) = 0;
389 #endif
390         /* Must always set typemask because it's always checked in on cleanup
391            when the arenas are walked looking for objects.  */
392         SvFLAGS(sv) = SVTYPEMASK;
393         sv++;
394     }
395     SvARENA_CHAIN_SET(sv, 0);
396 #ifdef DEBUGGING
397     SvREFCNT(sv) = 0;
398 #endif
399     SvFLAGS(sv) = SVTYPEMASK;
400 }
401
402 /* visit(): call the named function for each non-free SV in the arenas
403  * whose flags field matches the flags/mask args. */
404
405 STATIC I32
406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
407 {
408     dVAR;
409     SV* sva;
410     I32 visited = 0;
411
412     PERL_ARGS_ASSERT_VISIT;
413
414     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
415         const SV * const svend = &sva[SvREFCNT(sva)];
416         SV* sv;
417         for (sv = sva + 1; sv < svend; ++sv) {
418             if (SvTYPE(sv) != (svtype)SVTYPEMASK
419                     && (sv->sv_flags & mask) == flags
420                     && SvREFCNT(sv))
421             {
422                 (FCALL)(aTHX_ sv);
423                 ++visited;
424             }
425         }
426     }
427     return visited;
428 }
429
430 #ifdef DEBUGGING
431
432 /* called by sv_report_used() for each live SV */
433
434 static void
435 do_report_used(pTHX_ SV *const sv)
436 {
437     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
438         PerlIO_printf(Perl_debug_log, "****\n");
439         sv_dump(sv);
440     }
441 }
442 #endif
443
444 /*
445 =for apidoc sv_report_used
446
447 Dump the contents of all SVs not yet freed (debugging aid).
448
449 =cut
450 */
451
452 void
453 Perl_sv_report_used(pTHX)
454 {
455 #ifdef DEBUGGING
456     visit(do_report_used, 0, 0);
457 #else
458     PERL_UNUSED_CONTEXT;
459 #endif
460 }
461
462 /* called by sv_clean_objs() for each live SV */
463
464 static void
465 do_clean_objs(pTHX_ SV *const ref)
466 {
467     dVAR;
468     assert (SvROK(ref));
469     {
470         SV * const target = SvRV(ref);
471         if (SvOBJECT(target)) {
472             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
473             if (SvWEAKREF(ref)) {
474                 sv_del_backref(target, ref);
475                 SvWEAKREF_off(ref);
476                 SvRV_set(ref, NULL);
477             } else {
478                 SvROK_off(ref);
479                 SvRV_set(ref, NULL);
480                 SvREFCNT_dec_NN(target);
481             }
482         }
483     }
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec_NN(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec_NN(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec_NN(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec_NN(obj);
527     }
528     SvREFCNT_dec_NN(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec_NN(obj);
550     }
551     SvREFCNT_dec_NN(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec_NN(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* IVs are in the head, so the allocation size is 0.  */
885     { 0,
886       sizeof(IV), /* This is used to copy out the IV body.  */
887       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
888       NOARENA /* IVS don't need an arena  */, 0
889     },
890
891     { sizeof(NV), sizeof(NV),
892       STRUCT_OFFSET(XPVNV, xnv_u),
893       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
894
895     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
896       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
897       + STRUCT_OFFSET(XPV, xpv_cur),
898       SVt_PV, FALSE, NONV, HASARENA,
899       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
900
901     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
902       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
903       + STRUCT_OFFSET(XPV, xpv_cur),
904       SVt_INVLIST, TRUE, NONV, HASARENA,
905       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
906
907     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
908       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
909       + STRUCT_OFFSET(XPV, xpv_cur),
910       SVt_PVIV, FALSE, NONV, HASARENA,
911       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
912
913     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
914       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
915       + STRUCT_OFFSET(XPV, xpv_cur),
916       SVt_PVNV, FALSE, HADNV, HASARENA,
917       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
918
919     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
920       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
921
922     { sizeof(regexp),
923       sizeof(regexp),
924       0,
925       SVt_REGEXP, TRUE, NONV, HASARENA,
926       FIT_ARENA(0, sizeof(regexp))
927     },
928
929     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
930       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
931     
932     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
933       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
934
935     { sizeof(XPVAV),
936       copy_length(XPVAV, xav_alloc),
937       0,
938       SVt_PVAV, TRUE, NONV, HASARENA,
939       FIT_ARENA(0, sizeof(XPVAV)) },
940
941     { sizeof(XPVHV),
942       copy_length(XPVHV, xhv_max),
943       0,
944       SVt_PVHV, TRUE, NONV, HASARENA,
945       FIT_ARENA(0, sizeof(XPVHV)) },
946
947     { sizeof(XPVCV),
948       sizeof(XPVCV),
949       0,
950       SVt_PVCV, TRUE, NONV, HASARENA,
951       FIT_ARENA(0, sizeof(XPVCV)) },
952
953     { sizeof(XPVFM),
954       sizeof(XPVFM),
955       0,
956       SVt_PVFM, TRUE, NONV, NOARENA,
957       FIT_ARENA(20, sizeof(XPVFM)) },
958
959     { sizeof(XPVIO),
960       sizeof(XPVIO),
961       0,
962       SVt_PVIO, TRUE, NONV, HASARENA,
963       FIT_ARENA(24, sizeof(XPVIO)) },
964 };
965
966 #define new_body_allocated(sv_type)             \
967     (void *)((char *)S_new_body(aTHX_ sv_type)  \
968              - bodies_by_type[sv_type].offset)
969
970 /* return a thing to the free list */
971
972 #define del_body(thing, root)                           \
973     STMT_START {                                        \
974         void ** const thing_copy = (void **)thing;      \
975         *thing_copy = *root;                            \
976         *root = (void*)thing_copy;                      \
977     } STMT_END
978
979 #ifdef PURIFY
980
981 #define new_XNV()       safemalloc(sizeof(XPVNV))
982 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
983 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
984
985 #define del_XPVGV(p)    safefree(p)
986
987 #else /* !PURIFY */
988
989 #define new_XNV()       new_body_allocated(SVt_NV)
990 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
991 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
992
993 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
994                                  &PL_body_roots[SVt_PVGV])
995
996 #endif /* PURIFY */
997
998 /* no arena for you! */
999
1000 #define new_NOARENA(details) \
1001         safemalloc((details)->body_size + (details)->offset)
1002 #define new_NOARENAZ(details) \
1003         safecalloc((details)->body_size + (details)->offset, 1)
1004
1005 void *
1006 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1007                   const size_t arena_size)
1008 {
1009     dVAR;
1010     void ** const root = &PL_body_roots[sv_type];
1011     struct arena_desc *adesc;
1012     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1013     unsigned int curr;
1014     char *start;
1015     const char *end;
1016     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1017 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1018     static bool done_sanity_check;
1019
1020     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1021      * variables like done_sanity_check. */
1022     if (!done_sanity_check) {
1023         unsigned int i = SVt_LAST;
1024
1025         done_sanity_check = TRUE;
1026
1027         while (i--)
1028             assert (bodies_by_type[i].type == i);
1029     }
1030 #endif
1031
1032     assert(arena_size);
1033
1034     /* may need new arena-set to hold new arena */
1035     if (!aroot || aroot->curr >= aroot->set_size) {
1036         struct arena_set *newroot;
1037         Newxz(newroot, 1, struct arena_set);
1038         newroot->set_size = ARENAS_PER_SET;
1039         newroot->next = aroot;
1040         aroot = newroot;
1041         PL_body_arenas = (void *) newroot;
1042         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1043     }
1044
1045     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1046     curr = aroot->curr++;
1047     adesc = &(aroot->set[curr]);
1048     assert(!adesc->arena);
1049     
1050     Newx(adesc->arena, good_arena_size, char);
1051     adesc->size = good_arena_size;
1052     adesc->utype = sv_type;
1053     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1054                           curr, (void*)adesc->arena, (UV)good_arena_size));
1055
1056     start = (char *) adesc->arena;
1057
1058     /* Get the address of the byte after the end of the last body we can fit.
1059        Remember, this is integer division:  */
1060     end = start + good_arena_size / body_size * body_size;
1061
1062     /* computed count doesn't reflect the 1st slot reservation */
1063 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1064     DEBUG_m(PerlIO_printf(Perl_debug_log,
1065                           "arena %p end %p arena-size %d (from %d) type %d "
1066                           "size %d ct %d\n",
1067                           (void*)start, (void*)end, (int)good_arena_size,
1068                           (int)arena_size, sv_type, (int)body_size,
1069                           (int)good_arena_size / (int)body_size));
1070 #else
1071     DEBUG_m(PerlIO_printf(Perl_debug_log,
1072                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1073                           (void*)start, (void*)end,
1074                           (int)arena_size, sv_type, (int)body_size,
1075                           (int)good_arena_size / (int)body_size));
1076 #endif
1077     *root = (void *)start;
1078
1079     while (1) {
1080         /* Where the next body would start:  */
1081         char * const next = start + body_size;
1082
1083         if (next >= end) {
1084             /* This is the last body:  */
1085             assert(next == end);
1086
1087             *(void **)start = 0;
1088             return *root;
1089         }
1090
1091         *(void**) start = (void *)next;
1092         start = next;
1093     }
1094 }
1095
1096 /* grab a new thing from the free list, allocating more if necessary.
1097    The inline version is used for speed in hot routines, and the
1098    function using it serves the rest (unless PURIFY).
1099 */
1100 #define new_body_inline(xpv, sv_type) \
1101     STMT_START { \
1102         void ** const r3wt = &PL_body_roots[sv_type]; \
1103         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1104           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1105                                              bodies_by_type[sv_type].body_size,\
1106                                              bodies_by_type[sv_type].arena_size)); \
1107         *(r3wt) = *(void**)(xpv); \
1108     } STMT_END
1109
1110 #ifndef PURIFY
1111
1112 STATIC void *
1113 S_new_body(pTHX_ const svtype sv_type)
1114 {
1115     dVAR;
1116     void *xpv;
1117     new_body_inline(xpv, sv_type);
1118     return xpv;
1119 }
1120
1121 #endif
1122
1123 static const struct body_details fake_rv =
1124     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1125
1126 /*
1127 =for apidoc sv_upgrade
1128
1129 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1130 SV, then copies across as much information as possible from the old body.
1131 It croaks if the SV is already in a more complex form than requested.  You
1132 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1133 before calling C<sv_upgrade>, and hence does not croak.  See also
1134 C<svtype>.
1135
1136 =cut
1137 */
1138
1139 void
1140 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1141 {
1142     dVAR;
1143     void*       old_body;
1144     void*       new_body;
1145     const svtype old_type = SvTYPE(sv);
1146     const struct body_details *new_type_details;
1147     const struct body_details *old_type_details
1148         = bodies_by_type + old_type;
1149     SV *referant = NULL;
1150
1151     PERL_ARGS_ASSERT_SV_UPGRADE;
1152
1153     if (old_type == new_type)
1154         return;
1155
1156     /* This clause was purposefully added ahead of the early return above to
1157        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1158        inference by Nick I-S that it would fix other troublesome cases. See
1159        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1160
1161        Given that shared hash key scalars are no longer PVIV, but PV, there is
1162        no longer need to unshare so as to free up the IVX slot for its proper
1163        purpose. So it's safe to move the early return earlier.  */
1164
1165     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1166         sv_force_normal_flags(sv, 0);
1167     }
1168
1169     old_body = SvANY(sv);
1170
1171     /* Copying structures onto other structures that have been neatly zeroed
1172        has a subtle gotcha. Consider XPVMG
1173
1174        +------+------+------+------+------+-------+-------+
1175        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1176        +------+------+------+------+------+-------+-------+
1177        0      4      8     12     16     20      24      28
1178
1179        where NVs are aligned to 8 bytes, so that sizeof that structure is
1180        actually 32 bytes long, with 4 bytes of padding at the end:
1181
1182        +------+------+------+------+------+-------+-------+------+
1183        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1184        +------+------+------+------+------+-------+-------+------+
1185        0      4      8     12     16     20      24      28     32
1186
1187        so what happens if you allocate memory for this structure:
1188
1189        +------+------+------+------+------+-------+-------+------+------+...
1190        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1191        +------+------+------+------+------+-------+-------+------+------+...
1192        0      4      8     12     16     20      24      28     32     36
1193
1194        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1195        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1196        started out as zero once, but it's quite possible that it isn't. So now,
1197        rather than a nicely zeroed GP, you have it pointing somewhere random.
1198        Bugs ensue.
1199
1200        (In fact, GP ends up pointing at a previous GP structure, because the
1201        principle cause of the padding in XPVMG getting garbage is a copy of
1202        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1203        this happens to be moot because XPVGV has been re-ordered, with GP
1204        no longer after STASH)
1205
1206        So we are careful and work out the size of used parts of all the
1207        structures.  */
1208
1209     switch (old_type) {
1210     case SVt_NULL:
1211         break;
1212     case SVt_IV:
1213         if (SvROK(sv)) {
1214             referant = SvRV(sv);
1215             old_type_details = &fake_rv;
1216             if (new_type == SVt_NV)
1217                 new_type = SVt_PVNV;
1218         } else {
1219             if (new_type < SVt_PVIV) {
1220                 new_type = (new_type == SVt_NV)
1221                     ? SVt_PVNV : SVt_PVIV;
1222             }
1223         }
1224         break;
1225     case SVt_NV:
1226         if (new_type < SVt_PVNV) {
1227             new_type = SVt_PVNV;
1228         }
1229         break;
1230     case SVt_PV:
1231         assert(new_type > SVt_PV);
1232         assert(SVt_IV < SVt_PV);
1233         assert(SVt_NV < SVt_PV);
1234         break;
1235     case SVt_PVIV:
1236         break;
1237     case SVt_PVNV:
1238         break;
1239     case SVt_PVMG:
1240         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1241            there's no way that it can be safely upgraded, because perl.c
1242            expects to Safefree(SvANY(PL_mess_sv))  */
1243         assert(sv != PL_mess_sv);
1244         /* This flag bit is used to mean other things in other scalar types.
1245            Given that it only has meaning inside the pad, it shouldn't be set
1246            on anything that can get upgraded.  */
1247         assert(!SvPAD_TYPED(sv));
1248         break;
1249     default:
1250         if (UNLIKELY(old_type_details->cant_upgrade))
1251             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1252                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1253     }
1254
1255     if (UNLIKELY(old_type > new_type))
1256         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1257                 (int)old_type, (int)new_type);
1258
1259     new_type_details = bodies_by_type + new_type;
1260
1261     SvFLAGS(sv) &= ~SVTYPEMASK;
1262     SvFLAGS(sv) |= new_type;
1263
1264     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1265        the return statements above will have triggered.  */
1266     assert (new_type != SVt_NULL);
1267     switch (new_type) {
1268     case SVt_IV:
1269         assert(old_type == SVt_NULL);
1270         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1271         SvIV_set(sv, 0);
1272         return;
1273     case SVt_NV:
1274         assert(old_type == SVt_NULL);
1275         SvANY(sv) = new_XNV();
1276         SvNV_set(sv, 0);
1277         return;
1278     case SVt_PVHV:
1279     case SVt_PVAV:
1280         assert(new_type_details->body_size);
1281
1282 #ifndef PURIFY  
1283         assert(new_type_details->arena);
1284         assert(new_type_details->arena_size);
1285         /* This points to the start of the allocated area.  */
1286         new_body_inline(new_body, new_type);
1287         Zero(new_body, new_type_details->body_size, char);
1288         new_body = ((char *)new_body) - new_type_details->offset;
1289 #else
1290         /* We always allocated the full length item with PURIFY. To do this
1291            we fake things so that arena is false for all 16 types..  */
1292         new_body = new_NOARENAZ(new_type_details);
1293 #endif
1294         SvANY(sv) = new_body;
1295         if (new_type == SVt_PVAV) {
1296             AvMAX(sv)   = -1;
1297             AvFILLp(sv) = -1;
1298             AvREAL_only(sv);
1299             if (old_type_details->body_size) {
1300                 AvALLOC(sv) = 0;
1301             } else {
1302                 /* It will have been zeroed when the new body was allocated.
1303                    Lets not write to it, in case it confuses a write-back
1304                    cache.  */
1305             }
1306         } else {
1307             assert(!SvOK(sv));
1308             SvOK_off(sv);
1309 #ifndef NODEFAULT_SHAREKEYS
1310             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1311 #endif
1312             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1313             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1314         }
1315
1316         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1317            The target created by newSVrv also is, and it can have magic.
1318            However, it never has SvPVX set.
1319         */
1320         if (old_type == SVt_IV) {
1321             assert(!SvROK(sv));
1322         } else if (old_type >= SVt_PV) {
1323             assert(SvPVX_const(sv) == 0);
1324         }
1325
1326         if (old_type >= SVt_PVMG) {
1327             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1328             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1329         } else {
1330             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1331         }
1332         break;
1333
1334     case SVt_PVIV:
1335         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1336            no route from NV to PVIV, NOK can never be true  */
1337         assert(!SvNOKp(sv));
1338         assert(!SvNOK(sv));
1339     case SVt_PVIO:
1340     case SVt_PVFM:
1341     case SVt_PVGV:
1342     case SVt_PVCV:
1343     case SVt_PVLV:
1344     case SVt_INVLIST:
1345     case SVt_REGEXP:
1346     case SVt_PVMG:
1347     case SVt_PVNV:
1348     case SVt_PV:
1349
1350         assert(new_type_details->body_size);
1351         /* We always allocated the full length item with PURIFY. To do this
1352            we fake things so that arena is false for all 16 types..  */
1353         if(new_type_details->arena) {
1354             /* This points to the start of the allocated area.  */
1355             new_body_inline(new_body, new_type);
1356             Zero(new_body, new_type_details->body_size, char);
1357             new_body = ((char *)new_body) - new_type_details->offset;
1358         } else {
1359             new_body = new_NOARENAZ(new_type_details);
1360         }
1361         SvANY(sv) = new_body;
1362
1363         if (old_type_details->copy) {
1364             /* There is now the potential for an upgrade from something without
1365                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1366             int offset = old_type_details->offset;
1367             int length = old_type_details->copy;
1368
1369             if (new_type_details->offset > old_type_details->offset) {
1370                 const int difference
1371                     = new_type_details->offset - old_type_details->offset;
1372                 offset += difference;
1373                 length -= difference;
1374             }
1375             assert (length >= 0);
1376                 
1377             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1378                  char);
1379         }
1380
1381 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1382         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1383          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1384          * NV slot, but the new one does, then we need to initialise the
1385          * freshly created NV slot with whatever the correct bit pattern is
1386          * for 0.0  */
1387         if (old_type_details->zero_nv && !new_type_details->zero_nv
1388             && !isGV_with_GP(sv))
1389             SvNV_set(sv, 0);
1390 #endif
1391
1392         if (UNLIKELY(new_type == SVt_PVIO)) {
1393             IO * const io = MUTABLE_IO(sv);
1394             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1395
1396             SvOBJECT_on(io);
1397             /* Clear the stashcache because a new IO could overrule a package
1398                name */
1399             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1400             hv_clear(PL_stashcache);
1401
1402             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1403             IoPAGE_LEN(sv) = 60;
1404         }
1405         if (UNLIKELY(new_type == SVt_REGEXP))
1406             sv->sv_u.svu_rx = (regexp *)new_body;
1407         else if (old_type < SVt_PV) {
1408             /* referant will be NULL unless the old type was SVt_IV emulating
1409                SVt_RV */
1410             sv->sv_u.svu_rv = referant;
1411         }
1412         break;
1413     default:
1414         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1415                    (unsigned long)new_type);
1416     }
1417
1418     if (old_type > SVt_IV) {
1419 #ifdef PURIFY
1420         safefree(old_body);
1421 #else
1422         /* Note that there is an assumption that all bodies of types that
1423            can be upgraded came from arenas. Only the more complex non-
1424            upgradable types are allowed to be directly malloc()ed.  */
1425         assert(old_type_details->arena);
1426         del_body((void*)((char*)old_body + old_type_details->offset),
1427                  &PL_body_roots[old_type]);
1428 #endif
1429     }
1430 }
1431
1432 /*
1433 =for apidoc sv_backoff
1434
1435 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1436 wrapper instead.
1437
1438 =cut
1439 */
1440
1441 int
1442 Perl_sv_backoff(pTHX_ SV *const sv)
1443 {
1444     STRLEN delta;
1445     const char * const s = SvPVX_const(sv);
1446
1447     PERL_ARGS_ASSERT_SV_BACKOFF;
1448     PERL_UNUSED_CONTEXT;
1449
1450     assert(SvOOK(sv));
1451     assert(SvTYPE(sv) != SVt_PVHV);
1452     assert(SvTYPE(sv) != SVt_PVAV);
1453
1454     SvOOK_offset(sv, delta);
1455     
1456     SvLEN_set(sv, SvLEN(sv) + delta);
1457     SvPV_set(sv, SvPVX(sv) - delta);
1458     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1459     SvFLAGS(sv) &= ~SVf_OOK;
1460     return 0;
1461 }
1462
1463 /*
1464 =for apidoc sv_grow
1465
1466 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1467 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1468 Use the C<SvGROW> wrapper instead.
1469
1470 =cut
1471 */
1472
1473 char *
1474 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1475 {
1476     char *s;
1477
1478     PERL_ARGS_ASSERT_SV_GROW;
1479
1480 #ifdef HAS_64K_LIMIT
1481     if (newlen >= 0x10000) {
1482         PerlIO_printf(Perl_debug_log,
1483                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1484         my_exit(1);
1485     }
1486 #endif /* HAS_64K_LIMIT */
1487     if (SvROK(sv))
1488         sv_unref(sv);
1489     if (SvTYPE(sv) < SVt_PV) {
1490         sv_upgrade(sv, SVt_PV);
1491         s = SvPVX_mutable(sv);
1492     }
1493     else if (SvOOK(sv)) {       /* pv is offset? */
1494         sv_backoff(sv);
1495         s = SvPVX_mutable(sv);
1496         if (newlen > SvLEN(sv))
1497             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1498 #ifdef HAS_64K_LIMIT
1499         if (newlen >= 0x10000)
1500             newlen = 0xFFFF;
1501 #endif
1502     }
1503     else
1504     {
1505         if (SvIsCOW(sv)) sv_force_normal(sv);
1506         s = SvPVX_mutable(sv);
1507     }
1508
1509 #ifdef PERL_NEW_COPY_ON_WRITE
1510     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1511      * to store the COW count. So in general, allocate one more byte than
1512      * asked for, to make it likely this byte is always spare: and thus
1513      * make more strings COW-able.
1514      * If the new size is a big power of two, don't bother: we assume the
1515      * caller wanted a nice 2^N sized block and will be annoyed at getting
1516      * 2^N+1 */
1517     if (newlen & 0xff)
1518         newlen++;
1519 #endif
1520
1521     if (newlen > SvLEN(sv)) {           /* need more room? */
1522         STRLEN minlen = SvCUR(sv);
1523         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1524         if (newlen < minlen)
1525             newlen = minlen;
1526 #ifndef Perl_safesysmalloc_size
1527         newlen = PERL_STRLEN_ROUNDUP(newlen);
1528 #endif
1529         if (SvLEN(sv) && s) {
1530             s = (char*)saferealloc(s, newlen);
1531         }
1532         else {
1533             s = (char*)safemalloc(newlen);
1534             if (SvPVX_const(sv) && SvCUR(sv)) {
1535                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1536             }
1537         }
1538         SvPV_set(sv, s);
1539 #ifdef Perl_safesysmalloc_size
1540         /* Do this here, do it once, do it right, and then we will never get
1541            called back into sv_grow() unless there really is some growing
1542            needed.  */
1543         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1544 #else
1545         SvLEN_set(sv, newlen);
1546 #endif
1547     }
1548     return s;
1549 }
1550
1551 /*
1552 =for apidoc sv_setiv
1553
1554 Copies an integer into the given SV, upgrading first if necessary.
1555 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1556
1557 =cut
1558 */
1559
1560 void
1561 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1562 {
1563     dVAR;
1564
1565     PERL_ARGS_ASSERT_SV_SETIV;
1566
1567     SV_CHECK_THINKFIRST_COW_DROP(sv);
1568     switch (SvTYPE(sv)) {
1569     case SVt_NULL:
1570     case SVt_NV:
1571         sv_upgrade(sv, SVt_IV);
1572         break;
1573     case SVt_PV:
1574         sv_upgrade(sv, SVt_PVIV);
1575         break;
1576
1577     case SVt_PVGV:
1578         if (!isGV_with_GP(sv))
1579             break;
1580     case SVt_PVAV:
1581     case SVt_PVHV:
1582     case SVt_PVCV:
1583     case SVt_PVFM:
1584     case SVt_PVIO:
1585         /* diag_listed_as: Can't coerce %s to %s in %s */
1586         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1587                    OP_DESC(PL_op));
1588     default: NOOP;
1589     }
1590     (void)SvIOK_only(sv);                       /* validate number */
1591     SvIV_set(sv, i);
1592     SvTAINT(sv);
1593 }
1594
1595 /*
1596 =for apidoc sv_setiv_mg
1597
1598 Like C<sv_setiv>, but also handles 'set' magic.
1599
1600 =cut
1601 */
1602
1603 void
1604 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1605 {
1606     PERL_ARGS_ASSERT_SV_SETIV_MG;
1607
1608     sv_setiv(sv,i);
1609     SvSETMAGIC(sv);
1610 }
1611
1612 /*
1613 =for apidoc sv_setuv
1614
1615 Copies an unsigned integer into the given SV, upgrading first if necessary.
1616 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1617
1618 =cut
1619 */
1620
1621 void
1622 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1623 {
1624     PERL_ARGS_ASSERT_SV_SETUV;
1625
1626     /* With the if statement to ensure that integers are stored as IVs whenever
1627        possible:
1628        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1629
1630        without
1631        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1632
1633        If you wish to remove the following if statement, so that this routine
1634        (and its callers) always return UVs, please benchmark to see what the
1635        effect is. Modern CPUs may be different. Or may not :-)
1636     */
1637     if (u <= (UV)IV_MAX) {
1638        sv_setiv(sv, (IV)u);
1639        return;
1640     }
1641     sv_setiv(sv, 0);
1642     SvIsUV_on(sv);
1643     SvUV_set(sv, u);
1644 }
1645
1646 /*
1647 =for apidoc sv_setuv_mg
1648
1649 Like C<sv_setuv>, but also handles 'set' magic.
1650
1651 =cut
1652 */
1653
1654 void
1655 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1656 {
1657     PERL_ARGS_ASSERT_SV_SETUV_MG;
1658
1659     sv_setuv(sv,u);
1660     SvSETMAGIC(sv);
1661 }
1662
1663 /*
1664 =for apidoc sv_setnv
1665
1666 Copies a double into the given SV, upgrading first if necessary.
1667 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1668
1669 =cut
1670 */
1671
1672 void
1673 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1674 {
1675     dVAR;
1676
1677     PERL_ARGS_ASSERT_SV_SETNV;
1678
1679     SV_CHECK_THINKFIRST_COW_DROP(sv);
1680     switch (SvTYPE(sv)) {
1681     case SVt_NULL:
1682     case SVt_IV:
1683         sv_upgrade(sv, SVt_NV);
1684         break;
1685     case SVt_PV:
1686     case SVt_PVIV:
1687         sv_upgrade(sv, SVt_PVNV);
1688         break;
1689
1690     case SVt_PVGV:
1691         if (!isGV_with_GP(sv))
1692             break;
1693     case SVt_PVAV:
1694     case SVt_PVHV:
1695     case SVt_PVCV:
1696     case SVt_PVFM:
1697     case SVt_PVIO:
1698         /* diag_listed_as: Can't coerce %s to %s in %s */
1699         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1700                    OP_DESC(PL_op));
1701     default: NOOP;
1702     }
1703     SvNV_set(sv, num);
1704     (void)SvNOK_only(sv);                       /* validate number */
1705     SvTAINT(sv);
1706 }
1707
1708 /*
1709 =for apidoc sv_setnv_mg
1710
1711 Like C<sv_setnv>, but also handles 'set' magic.
1712
1713 =cut
1714 */
1715
1716 void
1717 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1718 {
1719     PERL_ARGS_ASSERT_SV_SETNV_MG;
1720
1721     sv_setnv(sv,num);
1722     SvSETMAGIC(sv);
1723 }
1724
1725 /* Print an "isn't numeric" warning, using a cleaned-up,
1726  * printable version of the offending string
1727  */
1728
1729 STATIC void
1730 S_not_a_number(pTHX_ SV *const sv)
1731 {
1732      dVAR;
1733      SV *dsv;
1734      char tmpbuf[64];
1735      const char *pv;
1736
1737      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1738
1739      if (DO_UTF8(sv)) {
1740           dsv = newSVpvs_flags("", SVs_TEMP);
1741           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1742      } else {
1743           char *d = tmpbuf;
1744           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1745           /* each *s can expand to 4 chars + "...\0",
1746              i.e. need room for 8 chars */
1747         
1748           const char *s = SvPVX_const(sv);
1749           const char * const end = s + SvCUR(sv);
1750           for ( ; s < end && d < limit; s++ ) {
1751                int ch = *s & 0xFF;
1752                if (ch & 128 && !isPRINT_LC(ch)) {
1753                     *d++ = 'M';
1754                     *d++ = '-';
1755                     ch &= 127;
1756                }
1757                if (ch == '\n') {
1758                     *d++ = '\\';
1759                     *d++ = 'n';
1760                }
1761                else if (ch == '\r') {
1762                     *d++ = '\\';
1763                     *d++ = 'r';
1764                }
1765                else if (ch == '\f') {
1766                     *d++ = '\\';
1767                     *d++ = 'f';
1768                }
1769                else if (ch == '\\') {
1770                     *d++ = '\\';
1771                     *d++ = '\\';
1772                }
1773                else if (ch == '\0') {
1774                     *d++ = '\\';
1775                     *d++ = '0';
1776                }
1777                else if (isPRINT_LC(ch))
1778                     *d++ = ch;
1779                else {
1780                     *d++ = '^';
1781                     *d++ = toCTRL(ch);
1782                }
1783           }
1784           if (s < end) {
1785                *d++ = '.';
1786                *d++ = '.';
1787                *d++ = '.';
1788           }
1789           *d = '\0';
1790           pv = tmpbuf;
1791     }
1792
1793     if (PL_op)
1794         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1795                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1796                     "Argument \"%s\" isn't numeric in %s", pv,
1797                     OP_DESC(PL_op));
1798     else
1799         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1800                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1801                     "Argument \"%s\" isn't numeric", pv);
1802 }
1803
1804 /*
1805 =for apidoc looks_like_number
1806
1807 Test if the content of an SV looks like a number (or is a number).
1808 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1809 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1810 ignored.
1811
1812 =cut
1813 */
1814
1815 I32
1816 Perl_looks_like_number(pTHX_ SV *const sv)
1817 {
1818     const char *sbegin;
1819     STRLEN len;
1820
1821     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1822
1823     if (SvPOK(sv) || SvPOKp(sv)) {
1824         sbegin = SvPV_nomg_const(sv, len);
1825     }
1826     else
1827         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1828     return grok_number(sbegin, len, NULL);
1829 }
1830
1831 STATIC bool
1832 S_glob_2number(pTHX_ GV * const gv)
1833 {
1834     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1835
1836     /* We know that all GVs stringify to something that is not-a-number,
1837         so no need to test that.  */
1838     if (ckWARN(WARN_NUMERIC))
1839     {
1840         SV *const buffer = sv_newmortal();
1841         gv_efullname3(buffer, gv, "*");
1842         not_a_number(buffer);
1843     }
1844     /* We just want something true to return, so that S_sv_2iuv_common
1845         can tail call us and return true.  */
1846     return TRUE;
1847 }
1848
1849 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1850    until proven guilty, assume that things are not that bad... */
1851
1852 /*
1853    NV_PRESERVES_UV:
1854
1855    As 64 bit platforms often have an NV that doesn't preserve all bits of
1856    an IV (an assumption perl has been based on to date) it becomes necessary
1857    to remove the assumption that the NV always carries enough precision to
1858    recreate the IV whenever needed, and that the NV is the canonical form.
1859    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1860    precision as a side effect of conversion (which would lead to insanity
1861    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1862    1) to distinguish between IV/UV/NV slots that have cached a valid
1863       conversion where precision was lost and IV/UV/NV slots that have a
1864       valid conversion which has lost no precision
1865    2) to ensure that if a numeric conversion to one form is requested that
1866       would lose precision, the precise conversion (or differently
1867       imprecise conversion) is also performed and cached, to prevent
1868       requests for different numeric formats on the same SV causing
1869       lossy conversion chains. (lossless conversion chains are perfectly
1870       acceptable (still))
1871
1872
1873    flags are used:
1874    SvIOKp is true if the IV slot contains a valid value
1875    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1876    SvNOKp is true if the NV slot contains a valid value
1877    SvNOK  is true only if the NV value is accurate
1878
1879    so
1880    while converting from PV to NV, check to see if converting that NV to an
1881    IV(or UV) would lose accuracy over a direct conversion from PV to
1882    IV(or UV). If it would, cache both conversions, return NV, but mark
1883    SV as IOK NOKp (ie not NOK).
1884
1885    While converting from PV to IV, check to see if converting that IV to an
1886    NV would lose accuracy over a direct conversion from PV to NV. If it
1887    would, cache both conversions, flag similarly.
1888
1889    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1890    correctly because if IV & NV were set NV *always* overruled.
1891    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1892    changes - now IV and NV together means that the two are interchangeable:
1893    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1894
1895    The benefit of this is that operations such as pp_add know that if
1896    SvIOK is true for both left and right operands, then integer addition
1897    can be used instead of floating point (for cases where the result won't
1898    overflow). Before, floating point was always used, which could lead to
1899    loss of precision compared with integer addition.
1900
1901    * making IV and NV equal status should make maths accurate on 64 bit
1902      platforms
1903    * may speed up maths somewhat if pp_add and friends start to use
1904      integers when possible instead of fp. (Hopefully the overhead in
1905      looking for SvIOK and checking for overflow will not outweigh the
1906      fp to integer speedup)
1907    * will slow down integer operations (callers of SvIV) on "inaccurate"
1908      values, as the change from SvIOK to SvIOKp will cause a call into
1909      sv_2iv each time rather than a macro access direct to the IV slot
1910    * should speed up number->string conversion on integers as IV is
1911      favoured when IV and NV are equally accurate
1912
1913    ####################################################################
1914    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1915    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1916    On the other hand, SvUOK is true iff UV.
1917    ####################################################################
1918
1919    Your mileage will vary depending your CPU's relative fp to integer
1920    performance ratio.
1921 */
1922
1923 #ifndef NV_PRESERVES_UV
1924 #  define IS_NUMBER_UNDERFLOW_IV 1
1925 #  define IS_NUMBER_UNDERFLOW_UV 2
1926 #  define IS_NUMBER_IV_AND_UV    2
1927 #  define IS_NUMBER_OVERFLOW_IV  4
1928 #  define IS_NUMBER_OVERFLOW_UV  5
1929
1930 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1931
1932 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1933 STATIC int
1934 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1935 #  ifdef DEBUGGING
1936                        , I32 numtype
1937 #  endif
1938                        )
1939 {
1940     dVAR;
1941
1942     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1943
1944     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));
1945     if (SvNVX(sv) < (NV)IV_MIN) {
1946         (void)SvIOKp_on(sv);
1947         (void)SvNOK_on(sv);
1948         SvIV_set(sv, IV_MIN);
1949         return IS_NUMBER_UNDERFLOW_IV;
1950     }
1951     if (SvNVX(sv) > (NV)UV_MAX) {
1952         (void)SvIOKp_on(sv);
1953         (void)SvNOK_on(sv);
1954         SvIsUV_on(sv);
1955         SvUV_set(sv, UV_MAX);
1956         return IS_NUMBER_OVERFLOW_UV;
1957     }
1958     (void)SvIOKp_on(sv);
1959     (void)SvNOK_on(sv);
1960     /* Can't use strtol etc to convert this string.  (See truth table in
1961        sv_2iv  */
1962     if (SvNVX(sv) <= (UV)IV_MAX) {
1963         SvIV_set(sv, I_V(SvNVX(sv)));
1964         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1965             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1966         } else {
1967             /* Integer is imprecise. NOK, IOKp */
1968         }
1969         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1970     }
1971     SvIsUV_on(sv);
1972     SvUV_set(sv, U_V(SvNVX(sv)));
1973     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1974         if (SvUVX(sv) == UV_MAX) {
1975             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1976                possibly be preserved by NV. Hence, it must be overflow.
1977                NOK, IOKp */
1978             return IS_NUMBER_OVERFLOW_UV;
1979         }
1980         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1981     } else {
1982         /* Integer is imprecise. NOK, IOKp */
1983     }
1984     return IS_NUMBER_OVERFLOW_IV;
1985 }
1986 #endif /* !NV_PRESERVES_UV*/
1987
1988 STATIC bool
1989 S_sv_2iuv_common(pTHX_ SV *const sv)
1990 {
1991     dVAR;
1992
1993     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1994
1995     if (SvNOKp(sv)) {
1996         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1997          * without also getting a cached IV/UV from it at the same time
1998          * (ie PV->NV conversion should detect loss of accuracy and cache
1999          * IV or UV at same time to avoid this. */
2000         /* IV-over-UV optimisation - choose to cache IV if possible */
2001
2002         if (SvTYPE(sv) == SVt_NV)
2003             sv_upgrade(sv, SVt_PVNV);
2004
2005         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2006         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2007            certainly cast into the IV range at IV_MAX, whereas the correct
2008            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2009            cases go to UV */
2010 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2011         if (Perl_isnan(SvNVX(sv))) {
2012             SvUV_set(sv, 0);
2013             SvIsUV_on(sv);
2014             return FALSE;
2015         }
2016 #endif
2017         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2018             SvIV_set(sv, I_V(SvNVX(sv)));
2019             if (SvNVX(sv) == (NV) SvIVX(sv)
2020 #ifndef NV_PRESERVES_UV
2021                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2022                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2023                 /* Don't flag it as "accurately an integer" if the number
2024                    came from a (by definition imprecise) NV operation, and
2025                    we're outside the range of NV integer precision */
2026 #endif
2027                 ) {
2028                 if (SvNOK(sv))
2029                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2030                 else {
2031                     /* scalar has trailing garbage, eg "42a" */
2032                 }
2033                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2034                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2035                                       PTR2UV(sv),
2036                                       SvNVX(sv),
2037                                       SvIVX(sv)));
2038
2039             } else {
2040                 /* IV not precise.  No need to convert from PV, as NV
2041                    conversion would already have cached IV if it detected
2042                    that PV->IV would be better than PV->NV->IV
2043                    flags already correct - don't set public IOK.  */
2044                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2045                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2046                                       PTR2UV(sv),
2047                                       SvNVX(sv),
2048                                       SvIVX(sv)));
2049             }
2050             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2051                but the cast (NV)IV_MIN rounds to a the value less (more
2052                negative) than IV_MIN which happens to be equal to SvNVX ??
2053                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2054                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2055                (NV)UVX == NVX are both true, but the values differ. :-(
2056                Hopefully for 2s complement IV_MIN is something like
2057                0x8000000000000000 which will be exact. NWC */
2058         }
2059         else {
2060             SvUV_set(sv, U_V(SvNVX(sv)));
2061             if (
2062                 (SvNVX(sv) == (NV) SvUVX(sv))
2063 #ifndef  NV_PRESERVES_UV
2064                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2065                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2066                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2067                 /* Don't flag it as "accurately an integer" if the number
2068                    came from a (by definition imprecise) NV operation, and
2069                    we're outside the range of NV integer precision */
2070 #endif
2071                 && SvNOK(sv)
2072                 )
2073                 SvIOK_on(sv);
2074             SvIsUV_on(sv);
2075             DEBUG_c(PerlIO_printf(Perl_debug_log,
2076                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2077                                   PTR2UV(sv),
2078                                   SvUVX(sv),
2079                                   SvUVX(sv)));
2080         }
2081     }
2082     else if (SvPOKp(sv)) {
2083         UV value;
2084         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2085         /* We want to avoid a possible problem when we cache an IV/ a UV which
2086            may be later translated to an NV, and the resulting NV is not
2087            the same as the direct translation of the initial string
2088            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2089            be careful to ensure that the value with the .456 is around if the
2090            NV value is requested in the future).
2091         
2092            This means that if we cache such an IV/a UV, we need to cache the
2093            NV as well.  Moreover, we trade speed for space, and do not
2094            cache the NV if we are sure it's not needed.
2095          */
2096
2097         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2098         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2099              == IS_NUMBER_IN_UV) {
2100             /* It's definitely an integer, only upgrade to PVIV */
2101             if (SvTYPE(sv) < SVt_PVIV)
2102                 sv_upgrade(sv, SVt_PVIV);
2103             (void)SvIOK_on(sv);
2104         } else if (SvTYPE(sv) < SVt_PVNV)
2105             sv_upgrade(sv, SVt_PVNV);
2106
2107         /* If NVs preserve UVs then we only use the UV value if we know that
2108            we aren't going to call atof() below. If NVs don't preserve UVs
2109            then the value returned may have more precision than atof() will
2110            return, even though value isn't perfectly accurate.  */
2111         if ((numtype & (IS_NUMBER_IN_UV
2112 #ifdef NV_PRESERVES_UV
2113                         | IS_NUMBER_NOT_INT
2114 #endif
2115             )) == IS_NUMBER_IN_UV) {
2116             /* This won't turn off the public IOK flag if it was set above  */
2117             (void)SvIOKp_on(sv);
2118
2119             if (!(numtype & IS_NUMBER_NEG)) {
2120                 /* positive */;
2121                 if (value <= (UV)IV_MAX) {
2122                     SvIV_set(sv, (IV)value);
2123                 } else {
2124                     /* it didn't overflow, and it was positive. */
2125                     SvUV_set(sv, value);
2126                     SvIsUV_on(sv);
2127                 }
2128             } else {
2129                 /* 2s complement assumption  */
2130                 if (value <= (UV)IV_MIN) {
2131                     SvIV_set(sv, -(IV)value);
2132                 } else {
2133                     /* Too negative for an IV.  This is a double upgrade, but
2134                        I'm assuming it will be rare.  */
2135                     if (SvTYPE(sv) < SVt_PVNV)
2136                         sv_upgrade(sv, SVt_PVNV);
2137                     SvNOK_on(sv);
2138                     SvIOK_off(sv);
2139                     SvIOKp_on(sv);
2140                     SvNV_set(sv, -(NV)value);
2141                     SvIV_set(sv, IV_MIN);
2142                 }
2143             }
2144         }
2145         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2146            will be in the previous block to set the IV slot, and the next
2147            block to set the NV slot.  So no else here.  */
2148         
2149         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2150             != IS_NUMBER_IN_UV) {
2151             /* It wasn't an (integer that doesn't overflow the UV). */
2152             SvNV_set(sv, Atof(SvPVX_const(sv)));
2153
2154             if (! numtype && ckWARN(WARN_NUMERIC))
2155                 not_a_number(sv);
2156
2157 #if defined(USE_LONG_DOUBLE)
2158             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2159                                   PTR2UV(sv), SvNVX(sv)));
2160 #else
2161             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2162                                   PTR2UV(sv), SvNVX(sv)));
2163 #endif
2164
2165 #ifdef NV_PRESERVES_UV
2166             (void)SvIOKp_on(sv);
2167             (void)SvNOK_on(sv);
2168             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2169                 SvIV_set(sv, I_V(SvNVX(sv)));
2170                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2171                     SvIOK_on(sv);
2172                 } else {
2173                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2174                 }
2175                 /* UV will not work better than IV */
2176             } else {
2177                 if (SvNVX(sv) > (NV)UV_MAX) {
2178                     SvIsUV_on(sv);
2179                     /* Integer is inaccurate. NOK, IOKp, is UV */
2180                     SvUV_set(sv, UV_MAX);
2181                 } else {
2182                     SvUV_set(sv, U_V(SvNVX(sv)));
2183                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2184                        NV preservse UV so can do correct comparison.  */
2185                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2186                         SvIOK_on(sv);
2187                     } else {
2188                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2189                     }
2190                 }
2191                 SvIsUV_on(sv);
2192             }
2193 #else /* NV_PRESERVES_UV */
2194             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2195                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2196                 /* The IV/UV slot will have been set from value returned by
2197                    grok_number above.  The NV slot has just been set using
2198                    Atof.  */
2199                 SvNOK_on(sv);
2200                 assert (SvIOKp(sv));
2201             } else {
2202                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2203                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2204                     /* Small enough to preserve all bits. */
2205                     (void)SvIOKp_on(sv);
2206                     SvNOK_on(sv);
2207                     SvIV_set(sv, I_V(SvNVX(sv)));
2208                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2209                         SvIOK_on(sv);
2210                     /* Assumption: first non-preserved integer is < IV_MAX,
2211                        this NV is in the preserved range, therefore: */
2212                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2213                           < (UV)IV_MAX)) {
2214                         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);
2215                     }
2216                 } else {
2217                     /* IN_UV NOT_INT
2218                          0      0       already failed to read UV.
2219                          0      1       already failed to read UV.
2220                          1      0       you won't get here in this case. IV/UV
2221                                         slot set, public IOK, Atof() unneeded.
2222                          1      1       already read UV.
2223                        so there's no point in sv_2iuv_non_preserve() attempting
2224                        to use atol, strtol, strtoul etc.  */
2225 #  ifdef DEBUGGING
2226                     sv_2iuv_non_preserve (sv, numtype);
2227 #  else
2228                     sv_2iuv_non_preserve (sv);
2229 #  endif
2230                 }
2231             }
2232 #endif /* NV_PRESERVES_UV */
2233         /* It might be more code efficient to go through the entire logic above
2234            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2235            gets complex and potentially buggy, so more programmer efficient
2236            to do it this way, by turning off the public flags:  */
2237         if (!numtype)
2238             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2239         }
2240     }
2241     else  {
2242         if (isGV_with_GP(sv))
2243             return glob_2number(MUTABLE_GV(sv));
2244
2245         if (!SvPADTMP(sv)) {
2246             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2247                 report_uninit(sv);
2248         }
2249         if (SvTYPE(sv) < SVt_IV)
2250             /* Typically the caller expects that sv_any is not NULL now.  */
2251             sv_upgrade(sv, SVt_IV);
2252         /* Return 0 from the caller.  */
2253         return TRUE;
2254     }
2255     return FALSE;
2256 }
2257
2258 /*
2259 =for apidoc sv_2iv_flags
2260
2261 Return the integer value of an SV, doing any necessary string
2262 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2263 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2264
2265 =cut
2266 */
2267
2268 IV
2269 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2270 {
2271     dVAR;
2272
2273     if (!sv)
2274         return 0;
2275
2276     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2277          && SvTYPE(sv) != SVt_PVFM);
2278
2279     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2280         mg_get(sv);
2281
2282     if (SvROK(sv)) {
2283         if (SvAMAGIC(sv)) {
2284             SV * tmpstr;
2285             if (flags & SV_SKIP_OVERLOAD)
2286                 return 0;
2287             tmpstr = AMG_CALLunary(sv, numer_amg);
2288             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2289                 return SvIV(tmpstr);
2290             }
2291         }
2292         return PTR2IV(SvRV(sv));
2293     }
2294
2295     if (SvVALID(sv) || isREGEXP(sv)) {
2296         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2297            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2298            In practice they are extremely unlikely to actually get anywhere
2299            accessible by user Perl code - the only way that I'm aware of is when
2300            a constant subroutine which is used as the second argument to index.
2301
2302            Regexps have no SvIVX and SvNVX fields.
2303         */
2304         assert(isREGEXP(sv) || SvPOKp(sv));
2305         {
2306             UV value;
2307             const char * const ptr =
2308                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2309             const int numtype
2310                 = grok_number(ptr, SvCUR(sv), &value);
2311
2312             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2313                 == IS_NUMBER_IN_UV) {
2314                 /* It's definitely an integer */
2315                 if (numtype & IS_NUMBER_NEG) {
2316                     if (value < (UV)IV_MIN)
2317                         return -(IV)value;
2318                 } else {
2319                     if (value < (UV)IV_MAX)
2320                         return (IV)value;
2321                 }
2322             }
2323             if (!numtype) {
2324                 if (ckWARN(WARN_NUMERIC))
2325                     not_a_number(sv);
2326             }
2327             return I_V(Atof(ptr));
2328         }
2329     }
2330
2331     if (SvTHINKFIRST(sv)) {
2332 #ifdef PERL_OLD_COPY_ON_WRITE
2333         if (SvIsCOW(sv)) {
2334             sv_force_normal_flags(sv, 0);
2335         }
2336 #endif
2337         if (SvREADONLY(sv) && !SvOK(sv)) {
2338             if (ckWARN(WARN_UNINITIALIZED))
2339                 report_uninit(sv);
2340             return 0;
2341         }
2342     }
2343
2344     if (!SvIOKp(sv)) {
2345         if (S_sv_2iuv_common(aTHX_ sv))
2346             return 0;
2347     }
2348
2349     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2350         PTR2UV(sv),SvIVX(sv)));
2351     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2352 }
2353
2354 /*
2355 =for apidoc sv_2uv_flags
2356
2357 Return the unsigned integer value of an SV, doing any necessary string
2358 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2359 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2360
2361 =cut
2362 */
2363
2364 UV
2365 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2366 {
2367     dVAR;
2368
2369     if (!sv)
2370         return 0;
2371
2372     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2373         mg_get(sv);
2374
2375     if (SvROK(sv)) {
2376         if (SvAMAGIC(sv)) {
2377             SV *tmpstr;
2378             if (flags & SV_SKIP_OVERLOAD)
2379                 return 0;
2380             tmpstr = AMG_CALLunary(sv, numer_amg);
2381             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2382                 return SvUV(tmpstr);
2383             }
2384         }
2385         return PTR2UV(SvRV(sv));
2386     }
2387
2388     if (SvVALID(sv) || isREGEXP(sv)) {
2389         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2390            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2391            Regexps have no SvIVX and SvNVX fields. */
2392         assert(isREGEXP(sv) || SvPOKp(sv));
2393         {
2394             UV value;
2395             const char * const ptr =
2396                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2397             const int numtype
2398                 = grok_number(ptr, SvCUR(sv), &value);
2399
2400             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2401                 == IS_NUMBER_IN_UV) {
2402                 /* It's definitely an integer */
2403                 if (!(numtype & IS_NUMBER_NEG))
2404                     return value;
2405             }
2406             if (!numtype) {
2407                 if (ckWARN(WARN_NUMERIC))
2408                     not_a_number(sv);
2409             }
2410             return U_V(Atof(ptr));
2411         }
2412     }
2413
2414     if (SvTHINKFIRST(sv)) {
2415 #ifdef PERL_OLD_COPY_ON_WRITE
2416         if (SvIsCOW(sv)) {
2417             sv_force_normal_flags(sv, 0);
2418         }
2419 #endif
2420         if (SvREADONLY(sv) && !SvOK(sv)) {
2421             if (ckWARN(WARN_UNINITIALIZED))
2422                 report_uninit(sv);
2423             return 0;
2424         }
2425     }
2426
2427     if (!SvIOKp(sv)) {
2428         if (S_sv_2iuv_common(aTHX_ sv))
2429             return 0;
2430     }
2431
2432     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2433                           PTR2UV(sv),SvUVX(sv)));
2434     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2435 }
2436
2437 /*
2438 =for apidoc sv_2nv_flags
2439
2440 Return the num value of an SV, doing any necessary string or integer
2441 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2442 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2443
2444 =cut
2445 */
2446
2447 NV
2448 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2449 {
2450     dVAR;
2451     if (!sv)
2452         return 0.0;
2453     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2454          && SvTYPE(sv) != SVt_PVFM);
2455     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2456         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2457            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2458            Regexps have no SvIVX and SvNVX fields.  */
2459         const char *ptr;
2460         if (flags & SV_GMAGIC)
2461             mg_get(sv);
2462         if (SvNOKp(sv))
2463             return SvNVX(sv);
2464         if (SvPOKp(sv) && !SvIOKp(sv)) {
2465             ptr = SvPVX_const(sv);
2466           grokpv:
2467             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2468                 !grok_number(ptr, SvCUR(sv), NULL))
2469                 not_a_number(sv);
2470             return Atof(ptr);
2471         }
2472         if (SvIOKp(sv)) {
2473             if (SvIsUV(sv))
2474                 return (NV)SvUVX(sv);
2475             else
2476                 return (NV)SvIVX(sv);
2477         }
2478         if (SvROK(sv)) {
2479             goto return_rok;
2480         }
2481         if (isREGEXP(sv)) {
2482             ptr = RX_WRAPPED((REGEXP *)sv);
2483             goto grokpv;
2484         }
2485         assert(SvTYPE(sv) >= SVt_PVMG);
2486         /* This falls through to the report_uninit near the end of the
2487            function. */
2488     } else if (SvTHINKFIRST(sv)) {
2489         if (SvROK(sv)) {
2490         return_rok:
2491             if (SvAMAGIC(sv)) {
2492                 SV *tmpstr;
2493                 if (flags & SV_SKIP_OVERLOAD)
2494                     return 0;
2495                 tmpstr = AMG_CALLunary(sv, numer_amg);
2496                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2497                     return SvNV(tmpstr);
2498                 }
2499             }
2500             return PTR2NV(SvRV(sv));
2501         }
2502 #ifdef PERL_OLD_COPY_ON_WRITE
2503         if (SvIsCOW(sv)) {
2504             sv_force_normal_flags(sv, 0);
2505         }
2506 #endif
2507         if (SvREADONLY(sv) && !SvOK(sv)) {
2508             if (ckWARN(WARN_UNINITIALIZED))
2509                 report_uninit(sv);
2510             return 0.0;
2511         }
2512     }
2513     if (SvTYPE(sv) < SVt_NV) {
2514         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2515         sv_upgrade(sv, SVt_NV);
2516 #ifdef USE_LONG_DOUBLE
2517         DEBUG_c({
2518             STORE_NUMERIC_LOCAL_SET_STANDARD();
2519             PerlIO_printf(Perl_debug_log,
2520                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2521                           PTR2UV(sv), SvNVX(sv));
2522             RESTORE_NUMERIC_LOCAL();
2523         });
2524 #else
2525         DEBUG_c({
2526             STORE_NUMERIC_LOCAL_SET_STANDARD();
2527             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2528                           PTR2UV(sv), SvNVX(sv));
2529             RESTORE_NUMERIC_LOCAL();
2530         });
2531 #endif
2532     }
2533     else if (SvTYPE(sv) < SVt_PVNV)
2534         sv_upgrade(sv, SVt_PVNV);
2535     if (SvNOKp(sv)) {
2536         return SvNVX(sv);
2537     }
2538     if (SvIOKp(sv)) {
2539         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2540 #ifdef NV_PRESERVES_UV
2541         if (SvIOK(sv))
2542             SvNOK_on(sv);
2543         else
2544             SvNOKp_on(sv);
2545 #else
2546         /* Only set the public NV OK flag if this NV preserves the IV  */
2547         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2548         if (SvIOK(sv) &&
2549             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2550                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2551             SvNOK_on(sv);
2552         else
2553             SvNOKp_on(sv);
2554 #endif
2555     }
2556     else if (SvPOKp(sv)) {
2557         UV value;
2558         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2559         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2560             not_a_number(sv);
2561 #ifdef NV_PRESERVES_UV
2562         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563             == IS_NUMBER_IN_UV) {
2564             /* It's definitely an integer */
2565             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2566         } else
2567             SvNV_set(sv, Atof(SvPVX_const(sv)));
2568         if (numtype)
2569             SvNOK_on(sv);
2570         else
2571             SvNOKp_on(sv);
2572 #else
2573         SvNV_set(sv, Atof(SvPVX_const(sv)));
2574         /* Only set the public NV OK flag if this NV preserves the value in
2575            the PV at least as well as an IV/UV would.
2576            Not sure how to do this 100% reliably. */
2577         /* if that shift count is out of range then Configure's test is
2578            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2579            UV_BITS */
2580         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2581             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2582             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2583         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2584             /* Can't use strtol etc to convert this string, so don't try.
2585                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2586             SvNOK_on(sv);
2587         } else {
2588             /* value has been set.  It may not be precise.  */
2589             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2590                 /* 2s complement assumption for (UV)IV_MIN  */
2591                 SvNOK_on(sv); /* Integer is too negative.  */
2592             } else {
2593                 SvNOKp_on(sv);
2594                 SvIOKp_on(sv);
2595
2596                 if (numtype & IS_NUMBER_NEG) {
2597                     SvIV_set(sv, -(IV)value);
2598                 } else if (value <= (UV)IV_MAX) {
2599                     SvIV_set(sv, (IV)value);
2600                 } else {
2601                     SvUV_set(sv, value);
2602                     SvIsUV_on(sv);
2603                 }
2604
2605                 if (numtype & IS_NUMBER_NOT_INT) {
2606                     /* I believe that even if the original PV had decimals,
2607                        they are lost beyond the limit of the FP precision.
2608                        However, neither is canonical, so both only get p
2609                        flags.  NWC, 2000/11/25 */
2610                     /* Both already have p flags, so do nothing */
2611                 } else {
2612                     const NV nv = SvNVX(sv);
2613                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2614                         if (SvIVX(sv) == I_V(nv)) {
2615                             SvNOK_on(sv);
2616                         } else {
2617                             /* It had no "." so it must be integer.  */
2618                         }
2619                         SvIOK_on(sv);
2620                     } else {
2621                         /* between IV_MAX and NV(UV_MAX).
2622                            Could be slightly > UV_MAX */
2623
2624                         if (numtype & IS_NUMBER_NOT_INT) {
2625                             /* UV and NV both imprecise.  */
2626                         } else {
2627                             const UV nv_as_uv = U_V(nv);
2628
2629                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2630                                 SvNOK_on(sv);
2631                             }
2632                             SvIOK_on(sv);
2633                         }
2634                     }
2635                 }
2636             }
2637         }
2638         /* It might be more code efficient to go through the entire logic above
2639            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2640            gets complex and potentially buggy, so more programmer efficient
2641            to do it this way, by turning off the public flags:  */
2642         if (!numtype)
2643             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2644 #endif /* NV_PRESERVES_UV */
2645     }
2646     else  {
2647         if (isGV_with_GP(sv)) {
2648             glob_2number(MUTABLE_GV(sv));
2649             return 0.0;
2650         }
2651
2652         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2653             report_uninit(sv);
2654         assert (SvTYPE(sv) >= SVt_NV);
2655         /* Typically the caller expects that sv_any is not NULL now.  */
2656         /* XXX Ilya implies that this is a bug in callers that assume this
2657            and ideally should be fixed.  */
2658         return 0.0;
2659     }
2660 #if defined(USE_LONG_DOUBLE)
2661     DEBUG_c({
2662         STORE_NUMERIC_LOCAL_SET_STANDARD();
2663         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2664                       PTR2UV(sv), SvNVX(sv));
2665         RESTORE_NUMERIC_LOCAL();
2666     });
2667 #else
2668     DEBUG_c({
2669         STORE_NUMERIC_LOCAL_SET_STANDARD();
2670         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2671                       PTR2UV(sv), SvNVX(sv));
2672         RESTORE_NUMERIC_LOCAL();
2673     });
2674 #endif
2675     return SvNVX(sv);
2676 }
2677
2678 /*
2679 =for apidoc sv_2num
2680
2681 Return an SV with the numeric value of the source SV, doing any necessary
2682 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2683 access this function.
2684
2685 =cut
2686 */
2687
2688 SV *
2689 Perl_sv_2num(pTHX_ SV *const sv)
2690 {
2691     PERL_ARGS_ASSERT_SV_2NUM;
2692
2693     if (!SvROK(sv))
2694         return sv;
2695     if (SvAMAGIC(sv)) {
2696         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2697         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2698         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2699             return sv_2num(tmpsv);
2700     }
2701     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2702 }
2703
2704 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2705  * UV as a string towards the end of buf, and return pointers to start and
2706  * end of it.
2707  *
2708  * We assume that buf is at least TYPE_CHARS(UV) long.
2709  */
2710
2711 static char *
2712 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2713 {
2714     char *ptr = buf + TYPE_CHARS(UV);
2715     char * const ebuf = ptr;
2716     int sign;
2717
2718     PERL_ARGS_ASSERT_UIV_2BUF;
2719
2720     if (is_uv)
2721         sign = 0;
2722     else if (iv >= 0) {
2723         uv = iv;
2724         sign = 0;
2725     } else {
2726         uv = -iv;
2727         sign = 1;
2728     }
2729     do {
2730         *--ptr = '0' + (char)(uv % 10);
2731     } while (uv /= 10);
2732     if (sign)
2733         *--ptr = '-';
2734     *peob = ebuf;
2735     return ptr;
2736 }
2737
2738 /*
2739 =for apidoc sv_2pv_flags
2740
2741 Returns a pointer to the string value of an SV, and sets *lp to its length.
2742 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2743 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2744 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2745
2746 =cut
2747 */
2748
2749 char *
2750 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2751 {
2752     dVAR;
2753     char *s;
2754
2755     if (!sv) {
2756         if (lp)
2757             *lp = 0;
2758         return (char *)"";
2759     }
2760     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2761          && SvTYPE(sv) != SVt_PVFM);
2762     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2763         mg_get(sv);
2764     if (SvROK(sv)) {
2765         if (SvAMAGIC(sv)) {
2766             SV *tmpstr;
2767             if (flags & SV_SKIP_OVERLOAD)
2768                 return NULL;
2769             tmpstr = AMG_CALLunary(sv, string_amg);
2770             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2771             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2772                 /* Unwrap this:  */
2773                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2774                  */
2775
2776                 char *pv;
2777                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2778                     if (flags & SV_CONST_RETURN) {
2779                         pv = (char *) SvPVX_const(tmpstr);
2780                     } else {
2781                         pv = (flags & SV_MUTABLE_RETURN)
2782                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2783                     }
2784                     if (lp)
2785                         *lp = SvCUR(tmpstr);
2786                 } else {
2787                     pv = sv_2pv_flags(tmpstr, lp, flags);
2788                 }
2789                 if (SvUTF8(tmpstr))
2790                     SvUTF8_on(sv);
2791                 else
2792                     SvUTF8_off(sv);
2793                 return pv;
2794             }
2795         }
2796         {
2797             STRLEN len;
2798             char *retval;
2799             char *buffer;
2800             SV *const referent = SvRV(sv);
2801
2802             if (!referent) {
2803                 len = 7;
2804                 retval = buffer = savepvn("NULLREF", len);
2805             } else if (SvTYPE(referent) == SVt_REGEXP &&
2806                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2807                         amagic_is_enabled(string_amg))) {
2808                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2809
2810                 assert(re);
2811                         
2812                 /* If the regex is UTF-8 we want the containing scalar to
2813                    have an UTF-8 flag too */
2814                 if (RX_UTF8(re))
2815                     SvUTF8_on(sv);
2816                 else
2817                     SvUTF8_off(sv);     
2818
2819                 if (lp)
2820                     *lp = RX_WRAPLEN(re);
2821  
2822                 return RX_WRAPPED(re);
2823             } else {
2824                 const char *const typestr = sv_reftype(referent, 0);
2825                 const STRLEN typelen = strlen(typestr);
2826                 UV addr = PTR2UV(referent);
2827                 const char *stashname = NULL;
2828                 STRLEN stashnamelen = 0; /* hush, gcc */
2829                 const char *buffer_end;
2830
2831                 if (SvOBJECT(referent)) {
2832                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2833
2834                     if (name) {
2835                         stashname = HEK_KEY(name);
2836                         stashnamelen = HEK_LEN(name);
2837
2838                         if (HEK_UTF8(name)) {
2839                             SvUTF8_on(sv);
2840                         } else {
2841                             SvUTF8_off(sv);
2842                         }
2843                     } else {
2844                         stashname = "__ANON__";
2845                         stashnamelen = 8;
2846                     }
2847                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2848                         + 2 * sizeof(UV) + 2 /* )\0 */;
2849                 } else {
2850                     len = typelen + 3 /* (0x */
2851                         + 2 * sizeof(UV) + 2 /* )\0 */;
2852                 }
2853
2854                 Newx(buffer, len, char);
2855                 buffer_end = retval = buffer + len;
2856
2857                 /* Working backwards  */
2858                 *--retval = '\0';
2859                 *--retval = ')';
2860                 do {
2861                     *--retval = PL_hexdigit[addr & 15];
2862                 } while (addr >>= 4);
2863                 *--retval = 'x';
2864                 *--retval = '0';
2865                 *--retval = '(';
2866
2867                 retval -= typelen;
2868                 memcpy(retval, typestr, typelen);
2869
2870                 if (stashname) {
2871                     *--retval = '=';
2872                     retval -= stashnamelen;
2873                     memcpy(retval, stashname, stashnamelen);
2874                 }
2875                 /* retval may not necessarily have reached the start of the
2876                    buffer here.  */
2877                 assert (retval >= buffer);
2878
2879                 len = buffer_end - retval - 1; /* -1 for that \0  */
2880             }
2881             if (lp)
2882                 *lp = len;
2883             SAVEFREEPV(buffer);
2884             return retval;
2885         }
2886     }
2887
2888     if (SvPOKp(sv)) {
2889         if (lp)
2890             *lp = SvCUR(sv);
2891         if (flags & SV_MUTABLE_RETURN)
2892             return SvPVX_mutable(sv);
2893         if (flags & SV_CONST_RETURN)
2894             return (char *)SvPVX_const(sv);
2895         return SvPVX(sv);
2896     }
2897
2898     if (SvIOK(sv)) {
2899         /* I'm assuming that if both IV and NV are equally valid then
2900            converting the IV is going to be more efficient */
2901         const U32 isUIOK = SvIsUV(sv);
2902         char buf[TYPE_CHARS(UV)];
2903         char *ebuf, *ptr;
2904         STRLEN len;
2905
2906         if (SvTYPE(sv) < SVt_PVIV)
2907             sv_upgrade(sv, SVt_PVIV);
2908         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2909         len = ebuf - ptr;
2910         /* inlined from sv_setpvn */
2911         s = SvGROW_mutable(sv, len + 1);
2912         Move(ptr, s, len, char);
2913         s += len;
2914         *s = '\0';
2915         SvPOK_on(sv);
2916     }
2917     else if (SvNOK(sv)) {
2918         if (SvTYPE(sv) < SVt_PVNV)
2919             sv_upgrade(sv, SVt_PVNV);
2920         if (SvNVX(sv) == 0.0) {
2921             s = SvGROW_mutable(sv, 2);
2922             *s++ = '0';
2923             *s = '\0';
2924         } else {
2925             dSAVE_ERRNO;
2926             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2927             s = SvGROW_mutable(sv, NV_DIG + 20);
2928             /* some Xenix systems wipe out errno here */
2929
2930 #ifndef USE_LOCALE_NUMERIC
2931             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2932             SvPOK_on(sv);
2933 #else
2934             /* Gconvert always uses the current locale.  That's the right thing
2935              * to do if we're supposed to be using locales.  But otherwise, we
2936              * want the result to be based on the C locale, so we need to
2937              * change to the C locale during the Gconvert and then change back.
2938              * But if we're already in the C locale (PL_numeric_standard is
2939              * TRUE in that case), no need to do any changing */
2940             if (PL_numeric_standard || IN_SOME_LOCALE_FORM_RUNTIME) {
2941                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2942
2943                 /* If the radix character is UTF-8, and actually is in the
2944                  * output, turn on the UTF-8 flag for the scalar */
2945                 if (! PL_numeric_standard
2946                     && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
2947                     && instr(s, SvPVX_const(PL_numeric_radix_sv)))
2948                 {
2949                     SvUTF8_on(sv);
2950                 }
2951             }
2952             else {
2953                 char *loc = savepv(setlocale(LC_NUMERIC, NULL));
2954                 setlocale(LC_NUMERIC, "C");
2955                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2956                 setlocale(LC_NUMERIC, loc);
2957                 Safefree(loc);
2958
2959             }
2960
2961             /* We don't call SvPOK_on(), because it may come to pass that the
2962              * locale changes so that the stringification we just did is no
2963              * longer correct.  We will have to re-stringify every time it is
2964              * needed */
2965 #endif
2966             RESTORE_ERRNO;
2967             while (*s) s++;
2968         }
2969 #ifdef hcx
2970         if (s[-1] == '.')
2971             *--s = '\0';
2972 #endif
2973     }
2974     else if (isGV_with_GP(sv)) {
2975         GV *const gv = MUTABLE_GV(sv);
2976         SV *const buffer = sv_newmortal();
2977
2978         gv_efullname3(buffer, gv, "*");
2979
2980         assert(SvPOK(buffer));
2981         if (SvUTF8(buffer))
2982             SvUTF8_on(sv);
2983         if (lp)
2984             *lp = SvCUR(buffer);
2985         return SvPVX(buffer);
2986     }
2987     else if (isREGEXP(sv)) {
2988         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
2989         return RX_WRAPPED((REGEXP *)sv);
2990     }
2991     else {
2992         if (lp)
2993             *lp = 0;
2994         if (flags & SV_UNDEF_RETURNS_NULL)
2995             return NULL;
2996         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2997             report_uninit(sv);
2998         /* Typically the caller expects that sv_any is not NULL now.  */
2999         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3000             sv_upgrade(sv, SVt_PV);
3001         return (char *)"";
3002     }
3003
3004     {
3005         const STRLEN len = s - SvPVX_const(sv);
3006         if (lp) 
3007             *lp = len;
3008         SvCUR_set(sv, len);
3009     }
3010     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3011                           PTR2UV(sv),SvPVX_const(sv)));
3012     if (flags & SV_CONST_RETURN)
3013         return (char *)SvPVX_const(sv);
3014     if (flags & SV_MUTABLE_RETURN)
3015         return SvPVX_mutable(sv);
3016     return SvPVX(sv);
3017 }
3018
3019 /*
3020 =for apidoc sv_copypv
3021
3022 Copies a stringified representation of the source SV into the
3023 destination SV.  Automatically performs any necessary mg_get and
3024 coercion of numeric values into strings.  Guaranteed to preserve
3025 UTF8 flag even from overloaded objects.  Similar in nature to
3026 sv_2pv[_flags] but operates directly on an SV instead of just the
3027 string.  Mostly uses sv_2pv_flags to do its work, except when that
3028 would lose the UTF-8'ness of the PV.
3029
3030 =for apidoc sv_copypv_nomg
3031
3032 Like sv_copypv, but doesn't invoke get magic first.
3033
3034 =for apidoc sv_copypv_flags
3035
3036 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3037 include SV_GMAGIC.
3038
3039 =cut
3040 */
3041
3042 void
3043 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3044 {
3045     PERL_ARGS_ASSERT_SV_COPYPV;
3046
3047     sv_copypv_flags(dsv, ssv, 0);
3048 }
3049
3050 void
3051 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3052 {
3053     STRLEN len;
3054     const char *s;
3055
3056     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3057
3058     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3059         mg_get(ssv);
3060     s = SvPV_nomg_const(ssv,len);
3061     sv_setpvn(dsv,s,len);
3062     if (SvUTF8(ssv))
3063         SvUTF8_on(dsv);
3064     else
3065         SvUTF8_off(dsv);
3066 }
3067
3068 /*
3069 =for apidoc sv_2pvbyte
3070
3071 Return a pointer to the byte-encoded representation of the SV, and set *lp
3072 to its length.  May cause the SV to be downgraded from UTF-8 as a
3073 side-effect.
3074
3075 Usually accessed via the C<SvPVbyte> macro.
3076
3077 =cut
3078 */
3079
3080 char *
3081 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3082 {
3083     PERL_ARGS_ASSERT_SV_2PVBYTE;
3084
3085     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3086      || isGV_with_GP(sv) || SvROK(sv)) {
3087         SV *sv2 = sv_newmortal();
3088         sv_copypv(sv2,sv);
3089         sv = sv2;
3090     }
3091     else SvGETMAGIC(sv);
3092     sv_utf8_downgrade(sv,0);
3093     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3094 }
3095
3096 /*
3097 =for apidoc sv_2pvutf8
3098
3099 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3100 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3101
3102 Usually accessed via the C<SvPVutf8> macro.
3103
3104 =cut
3105 */
3106
3107 char *
3108 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3109 {
3110     PERL_ARGS_ASSERT_SV_2PVUTF8;
3111
3112     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3113      || isGV_with_GP(sv) || SvROK(sv))
3114         sv = sv_mortalcopy(sv);
3115     else
3116         SvGETMAGIC(sv);
3117     sv_utf8_upgrade_nomg(sv);
3118     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3119 }
3120
3121
3122 /*
3123 =for apidoc sv_2bool
3124
3125 This macro is only used by sv_true() or its macro equivalent, and only if
3126 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3127 It calls sv_2bool_flags with the SV_GMAGIC flag.
3128
3129 =for apidoc sv_2bool_flags
3130
3131 This function is only used by sv_true() and friends,  and only if
3132 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3133 contain SV_GMAGIC, then it does an mg_get() first.
3134
3135
3136 =cut
3137 */
3138
3139 bool
3140 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
3141 {
3142     dVAR;
3143
3144     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3145
3146     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3147
3148     if (!SvOK(sv))
3149         return 0;
3150     if (SvROK(sv)) {
3151         if (SvAMAGIC(sv)) {
3152             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3153             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3154                 return cBOOL(SvTRUE(tmpsv));
3155         }
3156         return SvRV(sv) != 0;
3157     }
3158     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3159 }
3160
3161 /*
3162 =for apidoc sv_utf8_upgrade
3163
3164 Converts the PV of an SV to its UTF-8-encoded form.
3165 Forces the SV to string form if it is not already.
3166 Will C<mg_get> on C<sv> if appropriate.
3167 Always sets the SvUTF8 flag to avoid future validity checks even
3168 if the whole string is the same in UTF-8 as not.
3169 Returns the number of bytes in the converted string
3170
3171 This is not a general purpose byte encoding to Unicode interface:
3172 use the Encode extension for that.
3173
3174 =for apidoc sv_utf8_upgrade_nomg
3175
3176 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3177
3178 =for apidoc sv_utf8_upgrade_flags
3179
3180 Converts the PV of an SV to its UTF-8-encoded form.
3181 Forces the SV to string form if it is not already.
3182 Always sets the SvUTF8 flag to avoid future validity checks even
3183 if all the bytes are invariant in UTF-8.
3184 If C<flags> has C<SV_GMAGIC> bit set,
3185 will C<mg_get> on C<sv> if appropriate, else not.
3186 Returns the number of bytes in the converted string
3187 C<sv_utf8_upgrade> and
3188 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3189
3190 This is not a general purpose byte encoding to Unicode interface:
3191 use the Encode extension for that.
3192
3193 =cut
3194
3195 The grow version is currently not externally documented.  It adds a parameter,
3196 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3197 have free after it upon return.  This allows the caller to reserve extra space
3198 that it intends to fill, to avoid extra grows.
3199
3200 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3201 which can be used to tell this function to not first check to see if there are
3202 any characters that are different in UTF-8 (variant characters) which would
3203 force it to allocate a new string to sv, but to assume there are.  Typically
3204 this flag is used by a routine that has already parsed the string to find that
3205 there are such characters, and passes this information on so that the work
3206 doesn't have to be repeated.
3207
3208 (One might think that the calling routine could pass in the position of the
3209 first such variant, so it wouldn't have to be found again.  But that is not the
3210 case, because typically when the caller is likely to use this flag, it won't be
3211 calling this routine unless it finds something that won't fit into a byte.
3212 Otherwise it tries to not upgrade and just use bytes.  But some things that
3213 do fit into a byte are variants in utf8, and the caller may not have been
3214 keeping track of these.)
3215
3216 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3217 isn't guaranteed due to having other routines do the work in some input cases,
3218 or if the input is already flagged as being in utf8.
3219
3220 The speed of this could perhaps be improved for many cases if someone wanted to
3221 write a fast function that counts the number of variant characters in a string,
3222 especially if it could return the position of the first one.
3223
3224 */
3225
3226 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
3227
3228 STRLEN
3229 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3230 {
3231     dVAR;
3232
3233     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3234
3235     if (sv == &PL_sv_undef)
3236         return 0;
3237     if (!SvPOK_nog(sv)) {
3238         STRLEN len = 0;
3239         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3240             (void) sv_2pv_flags(sv,&len, flags);
3241             if (SvUTF8(sv)) {
3242                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3243                 return len;
3244             }
3245         } else {
3246             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3247         }
3248     }
3249
3250     if (SvUTF8(sv)) {
3251         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3252         return SvCUR(sv);
3253     }
3254
3255     if (SvIsCOW(sv)) {
3256         S_sv_uncow(aTHX_ sv, 0);
3257     }
3258
3259     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3260         sv_recode_to_utf8(sv, PL_encoding);
3261         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3262         return SvCUR(sv);
3263     }
3264
3265     if (SvCUR(sv) == 0) {
3266         if (extra) SvGROW(sv, extra);
3267     } else { /* Assume Latin-1/EBCDIC */
3268         /* This function could be much more efficient if we
3269          * had a FLAG in SVs to signal if there are any variant
3270          * chars in the PV.  Given that there isn't such a flag
3271          * make the loop as fast as possible (although there are certainly ways
3272          * to speed this up, eg. through vectorization) */
3273         U8 * s = (U8 *) SvPVX_const(sv);
3274         U8 * e = (U8 *) SvEND(sv);
3275         U8 *t = s;
3276         STRLEN two_byte_count = 0;
3277         
3278         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3279
3280         /* See if really will need to convert to utf8.  We mustn't rely on our
3281          * incoming SV being well formed and having a trailing '\0', as certain
3282          * code in pp_formline can send us partially built SVs. */
3283
3284         while (t < e) {
3285             const U8 ch = *t++;
3286             if (NATIVE_IS_INVARIANT(ch)) continue;
3287
3288             t--;    /* t already incremented; re-point to first variant */
3289             two_byte_count = 1;
3290             goto must_be_utf8;
3291         }
3292
3293         /* utf8 conversion not needed because all are invariants.  Mark as
3294          * UTF-8 even if no variant - saves scanning loop */
3295         SvUTF8_on(sv);
3296         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3297         return SvCUR(sv);
3298
3299 must_be_utf8:
3300
3301         /* Here, the string should be converted to utf8, either because of an
3302          * input flag (two_byte_count = 0), or because a character that
3303          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3304          * the beginning of the string (if we didn't examine anything), or to
3305          * the first variant.  In either case, everything from s to t - 1 will
3306          * occupy only 1 byte each on output.
3307          *
3308          * There are two main ways to convert.  One is to create a new string
3309          * and go through the input starting from the beginning, appending each
3310          * converted value onto the new string as we go along.  It's probably
3311          * best to allocate enough space in the string for the worst possible
3312          * case rather than possibly running out of space and having to
3313          * reallocate and then copy what we've done so far.  Since everything
3314          * from s to t - 1 is invariant, the destination can be initialized
3315          * with these using a fast memory copy
3316          *
3317          * The other way is to figure out exactly how big the string should be
3318          * by parsing the entire input.  Then you don't have to make it big
3319          * enough to handle the worst possible case, and more importantly, if
3320          * the string you already have is large enough, you don't have to
3321          * allocate a new string, you can copy the last character in the input
3322          * string to the final position(s) that will be occupied by the
3323          * converted string and go backwards, stopping at t, since everything
3324          * before that is invariant.
3325          *
3326          * There are advantages and disadvantages to each method.
3327          *
3328          * In the first method, we can allocate a new string, do the memory
3329          * copy from the s to t - 1, and then proceed through the rest of the
3330          * string byte-by-byte.
3331          *
3332          * In the second method, we proceed through the rest of the input
3333          * string just calculating how big the converted string will be.  Then
3334          * there are two cases:
3335          *  1)  if the string has enough extra space to handle the converted
3336          *      value.  We go backwards through the string, converting until we
3337          *      get to the position we are at now, and then stop.  If this
3338          *      position is far enough along in the string, this method is
3339          *      faster than the other method.  If the memory copy were the same
3340          *      speed as the byte-by-byte loop, that position would be about
3341          *      half-way, as at the half-way mark, parsing to the end and back
3342          *      is one complete string's parse, the same amount as starting
3343          *      over and going all the way through.  Actually, it would be
3344          *      somewhat less than half-way, as it's faster to just count bytes
3345          *      than to also copy, and we don't have the overhead of allocating
3346          *      a new string, changing the scalar to use it, and freeing the
3347          *      existing one.  But if the memory copy is fast, the break-even
3348          *      point is somewhere after half way.  The counting loop could be
3349          *      sped up by vectorization, etc, to move the break-even point
3350          *      further towards the beginning.
3351          *  2)  if the string doesn't have enough space to handle the converted
3352          *      value.  A new string will have to be allocated, and one might
3353          *      as well, given that, start from the beginning doing the first
3354          *      method.  We've spent extra time parsing the string and in
3355          *      exchange all we've gotten is that we know precisely how big to
3356          *      make the new one.  Perl is more optimized for time than space,
3357          *      so this case is a loser.
3358          * So what I've decided to do is not use the 2nd method unless it is
3359          * guaranteed that a new string won't have to be allocated, assuming
3360          * the worst case.  I also decided not to put any more conditions on it
3361          * than this, for now.  It seems likely that, since the worst case is
3362          * twice as big as the unknown portion of the string (plus 1), we won't
3363          * be guaranteed enough space, causing us to go to the first method,
3364          * unless the string is short, or the first variant character is near
3365          * the end of it.  In either of these cases, it seems best to use the
3366          * 2nd method.  The only circumstance I can think of where this would
3367          * be really slower is if the string had once had much more data in it
3368          * than it does now, but there is still a substantial amount in it  */
3369
3370         {
3371             STRLEN invariant_head = t - s;
3372             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3373             if (SvLEN(sv) < size) {
3374
3375                 /* Here, have decided to allocate a new string */
3376
3377                 U8 *dst;
3378                 U8 *d;
3379
3380                 Newx(dst, size, U8);
3381
3382                 /* If no known invariants at the beginning of the input string,
3383                  * set so starts from there.  Otherwise, can use memory copy to
3384                  * get up to where we are now, and then start from here */
3385
3386                 if (invariant_head <= 0) {
3387                     d = dst;
3388                 } else {
3389                     Copy(s, dst, invariant_head, char);
3390                     d = dst + invariant_head;
3391                 }
3392
3393                 while (t < e) {
3394                     const UV uv = NATIVE8_TO_UNI(*t++);
3395                     if (UNI_IS_INVARIANT(uv))
3396                         *d++ = (U8)UNI_TO_NATIVE(uv);
3397                     else {
3398                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3399                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3400                     }
3401                 }
3402                 *d = '\0';
3403                 SvPV_free(sv); /* No longer using pre-existing string */
3404                 SvPV_set(sv, (char*)dst);
3405                 SvCUR_set(sv, d - dst);
3406                 SvLEN_set(sv, size);
3407             } else {
3408
3409                 /* Here, have decided to get the exact size of the string.
3410                  * Currently this happens only when we know that there is
3411                  * guaranteed enough space to fit the converted string, so
3412                  * don't have to worry about growing.  If two_byte_count is 0,
3413                  * then t points to the first byte of the string which hasn't
3414                  * been examined yet.  Otherwise two_byte_count is 1, and t
3415                  * points to the first byte in the string that will expand to
3416                  * two.  Depending on this, start examining at t or 1 after t.
3417                  * */
3418
3419                 U8 *d = t + two_byte_count;
3420
3421
3422                 /* Count up the remaining bytes that expand to two */
3423
3424                 while (d < e) {
3425                     const U8 chr = *d++;
3426                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3427                 }
3428
3429                 /* The string will expand by just the number of bytes that
3430                  * occupy two positions.  But we are one afterwards because of
3431                  * the increment just above.  This is the place to put the
3432                  * trailing NUL, and to set the length before we decrement */
3433
3434                 d += two_byte_count;
3435                 SvCUR_set(sv, d - s);
3436                 *d-- = '\0';
3437
3438
3439                 /* Having decremented d, it points to the position to put the
3440                  * very last byte of the expanded string.  Go backwards through
3441                  * the string, copying and expanding as we go, stopping when we
3442                  * get to the part that is invariant the rest of the way down */
3443
3444                 e--;
3445                 while (e >= t) {
3446                     const U8 ch = NATIVE8_TO_UNI(*e--);
3447                     if (UNI_IS_INVARIANT(ch)) {
3448                         *d-- = UNI_TO_NATIVE(ch);
3449                     } else {
3450                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3451                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3452                     }
3453                 }
3454             }
3455
3456             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3457                 /* Update pos. We do it at the end rather than during
3458                  * the upgrade, to avoid slowing down the common case
3459                  * (upgrade without pos) */
3460                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3461                 if (mg) {
3462                     I32 pos = mg->mg_len;
3463                     if (pos > 0 && (U32)pos > invariant_head) {
3464                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3465                         STRLEN n = (U32)pos - invariant_head;
3466                         while (n > 0) {
3467                             if (UTF8_IS_START(*d))
3468                                 d++;
3469                             d++;
3470                             n--;
3471                         }
3472                         mg->mg_len  = d - (U8*)SvPVX(sv);
3473                     }
3474                 }
3475                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3476                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3477             }
3478         }
3479     }
3480
3481     /* Mark as UTF-8 even if no variant - saves scanning loop */
3482     SvUTF8_on(sv);
3483     return SvCUR(sv);
3484 }
3485
3486 /*
3487 =for apidoc sv_utf8_downgrade
3488
3489 Attempts to convert the PV of an SV from characters to bytes.
3490 If the PV contains a character that cannot fit
3491 in a byte, this conversion will fail;
3492 in this case, either returns false or, if C<fail_ok> is not
3493 true, croaks.
3494
3495 This is not a general purpose Unicode to byte encoding interface:
3496 use the Encode extension for that.
3497
3498 =cut
3499 */
3500
3501 bool
3502 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3503 {
3504     dVAR;
3505
3506     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3507
3508     if (SvPOKp(sv) && SvUTF8(sv)) {
3509         if (SvCUR(sv)) {
3510             U8 *s;
3511             STRLEN len;
3512             int mg_flags = SV_GMAGIC;
3513
3514             if (SvIsCOW(sv)) {
3515                 S_sv_uncow(aTHX_ sv, 0);
3516             }
3517             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3518                 /* update pos */
3519                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3520                 if (mg) {
3521                     I32 pos = mg->mg_len;
3522                     if (pos > 0) {
3523                         sv_pos_b2u(sv, &pos);
3524                         mg_flags = 0; /* sv_pos_b2u does get magic */
3525                         mg->mg_len  = pos;
3526                     }
3527                 }
3528                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3529                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3530
3531             }
3532             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3533
3534             if (!utf8_to_bytes(s, &len)) {
3535                 if (fail_ok)
3536                     return FALSE;
3537                 else {
3538                     if (PL_op)
3539                         Perl_croak(aTHX_ "Wide character in %s",
3540                                    OP_DESC(PL_op));
3541                     else
3542                         Perl_croak(aTHX_ "Wide character");
3543                 }
3544             }
3545             SvCUR_set(sv, len);
3546         }
3547     }
3548     SvUTF8_off(sv);
3549     return TRUE;
3550 }
3551
3552 /*
3553 =for apidoc sv_utf8_encode
3554
3555 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3556 flag off so that it looks like octets again.
3557
3558 =cut
3559 */
3560
3561 void
3562 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3563 {
3564     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3565
3566     if (SvREADONLY(sv)) {
3567         sv_force_normal_flags(sv, 0);
3568     }
3569     (void) sv_utf8_upgrade(sv);
3570     SvUTF8_off(sv);
3571 }
3572
3573 /*
3574 =for apidoc sv_utf8_decode
3575
3576 If the PV of the SV is an octet sequence in UTF-8
3577 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3578 so that it looks like a character.  If the PV contains only single-byte
3579 characters, the C<SvUTF8> flag stays off.
3580 Scans PV for validity and returns false if the PV is invalid UTF-8.
3581
3582 =cut
3583 */
3584
3585 bool
3586 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3587 {
3588     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3589
3590     if (SvPOKp(sv)) {
3591         const U8 *start, *c;
3592         const U8 *e;
3593
3594         /* The octets may have got themselves encoded - get them back as
3595          * bytes
3596          */
3597         if (!sv_utf8_downgrade(sv, TRUE))
3598             return FALSE;
3599
3600         /* it is actually just a matter of turning the utf8 flag on, but
3601          * we want to make sure everything inside is valid utf8 first.
3602          */
3603         c = start = (const U8 *) SvPVX_const(sv);
3604         if (!is_utf8_string(c, SvCUR(sv)))
3605             return FALSE;
3606         e = (const U8 *) SvEND(sv);
3607         while (c < e) {
3608             const U8 ch = *c++;
3609             if (!UTF8_IS_INVARIANT(ch)) {
3610                 SvUTF8_on(sv);
3611                 break;
3612             }
3613         }
3614         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3615             /* adjust pos to the start of a UTF8 char sequence */
3616             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3617             if (mg) {
3618                 I32 pos = mg->mg_len;
3619                 if (pos > 0) {
3620                     for (c = start + pos; c > start; c--) {
3621                         if (UTF8_IS_START(*c))
3622                             break;
3623                     }
3624                     mg->mg_len  = c - start;
3625                 }
3626             }
3627             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3628                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3629         }
3630     }
3631     return TRUE;
3632 }
3633
3634 /*
3635 =for apidoc sv_setsv
3636
3637 Copies the contents of the source SV C<ssv> into the destination SV
3638 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3639 function if the source SV needs to be reused.  Does not handle 'set' magic.
3640 Loosely speaking, it performs a copy-by-value, obliterating any previous
3641 content of the destination.
3642
3643 You probably want to use one of the assortment of wrappers, such as
3644 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3645 C<SvSetMagicSV_nosteal>.
3646
3647 =for apidoc sv_setsv_flags
3648
3649 Copies the contents of the source SV C<ssv> into the destination SV
3650 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3651 function if the source SV needs to be reused.  Does not handle 'set' magic.
3652 Loosely speaking, it performs a copy-by-value, obliterating any previous
3653 content of the destination.
3654 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3655 C<ssv> if appropriate, else not.  If the C<flags>
3656 parameter has the C<NOSTEAL> bit set then the
3657 buffers of temps will not be stolen.  <sv_setsv>
3658 and C<sv_setsv_nomg> are implemented in terms of this function.
3659
3660 You probably want to use one of the assortment of wrappers, such as
3661 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3662 C<SvSetMagicSV_nosteal>.
3663
3664 This is the primary function for copying scalars, and most other
3665 copy-ish functions and macros use this underneath.
3666
3667 =cut
3668 */
3669
3670 static void
3671 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3672 {
3673     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3674     HV *old_stash = NULL;
3675
3676     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3677
3678     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3679         const char * const name = GvNAME(sstr);
3680         const STRLEN len = GvNAMELEN(sstr);
3681         {
3682             if (dtype >= SVt_PV) {
3683                 SvPV_free(dstr);
3684                 SvPV_set(dstr, 0);
3685                 SvLEN_set(dstr, 0);
3686                 SvCUR_set(dstr, 0);
3687             }
3688             SvUPGRADE(dstr, SVt_PVGV);
3689             (void)SvOK_off(dstr);
3690             /* We have to turn this on here, even though we turn it off
3691                below, as GvSTASH will fail an assertion otherwise. */
3692             isGV_with_GP_on(dstr);
3693         }
3694         GvSTASH(dstr) = GvSTASH(sstr);
3695         if (GvSTASH(dstr))
3696             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3697         gv_name_set(MUTABLE_GV(dstr), name, len,
3698                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3699         SvFAKE_on(dstr);        /* can coerce to non-glob */
3700     }
3701
3702     if(GvGP(MUTABLE_GV(sstr))) {
3703         /* If source has method cache entry, clear it */
3704         if(GvCVGEN(sstr)) {
3705             SvREFCNT_dec(GvCV(sstr));
3706             GvCV_set(sstr, NULL);
3707             GvCVGEN(sstr) = 0;
3708         }
3709         /* If source has a real method, then a method is
3710            going to change */
3711         else if(
3712          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3713         ) {
3714             mro_changes = 1;
3715         }
3716     }
3717
3718     /* If dest already had a real method, that's a change as well */
3719     if(
3720         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3721      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3722     ) {
3723         mro_changes = 1;
3724     }
3725
3726     /* We don't need to check the name of the destination if it was not a
3727        glob to begin with. */
3728     if(dtype == SVt_PVGV) {
3729         const char * const name = GvNAME((const GV *)dstr);
3730         if(
3731             strEQ(name,"ISA")
3732          /* The stash may have been detached from the symbol table, so
3733             check its name. */
3734          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3735         )
3736             mro_changes = 2;
3737         else {
3738             const STRLEN len = GvNAMELEN(dstr);
3739             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3740              || (len == 1 && name[0] == ':')) {
3741                 mro_changes = 3;
3742
3743                 /* Set aside the old stash, so we can reset isa caches on
3744                    its subclasses. */
3745                 if((old_stash = GvHV(dstr)))
3746                     /* Make sure we do not lose it early. */
3747                     SvREFCNT_inc_simple_void_NN(
3748                      sv_2mortal((SV *)old_stash)
3749                     );
3750             }
3751         }
3752     }
3753
3754     gp_free(MUTABLE_GV(dstr));
3755     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3756     (void)SvOK_off(dstr);
3757     isGV_with_GP_on(dstr);
3758     GvINTRO_off(dstr);          /* one-shot flag */
3759     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3760     if (SvTAINTED(sstr))
3761         SvTAINT(dstr);
3762     if (GvIMPORTED(dstr) != GVf_IMPORTED
3763         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3764         {
3765             GvIMPORTED_on(dstr);
3766         }
3767     GvMULTI_on(dstr);
3768     if(mro_changes == 2) {
3769       if (GvAV((const GV *)sstr)) {
3770         MAGIC *mg;
3771         SV * const sref = (SV *)GvAV((const GV *)dstr);
3772         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3773             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3774                 AV * const ary = newAV();
3775                 av_push(ary, mg->mg_obj); /* takes the refcount */
3776                 mg->mg_obj = (SV *)ary;
3777             }
3778             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3779         }
3780         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3781       }
3782       mro_isa_changed_in(GvSTASH(dstr));
3783     }
3784     else if(mro_changes == 3) {
3785         HV * const stash = GvHV(dstr);
3786         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3787             mro_package_moved(
3788                 stash, old_stash,
3789                 (GV *)dstr, 0
3790             );
3791     }
3792     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3793     if (GvIO(dstr) && dtype == SVt_PVGV) {
3794         DEBUG_o(Perl_deb(aTHX_
3795                         "glob_assign_glob clearing PL_stashcache\n"));
3796         /* It's a cache. It will rebuild itself quite happily.
3797            It's a lot of effort to work out exactly which key (or keys)
3798            might be invalidated by the creation of the this file handle.
3799          */
3800         hv_clear(PL_stashcache);
3801     }
3802     return;
3803 }
3804
3805 static void
3806 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3807 {
3808     SV * const sref = SvRV(sstr);
3809     SV *dref;
3810     const int intro = GvINTRO(dstr);
3811     SV **location;
3812     U8 import_flag = 0;
3813     const U32 stype = SvTYPE(sref);
3814
3815     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3816
3817     if (intro) {
3818         GvINTRO_off(dstr);      /* one-shot flag */
3819         GvLINE(dstr) = CopLINE(PL_curcop);
3820         GvEGV(dstr) = MUTABLE_GV(dstr);
3821     }
3822     GvMULTI_on(dstr);
3823     switch (stype) {
3824     case SVt_PVCV:
3825         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3826         import_flag = GVf_IMPORTED_CV;
3827         goto common;
3828     case SVt_PVHV:
3829         location = (SV **) &GvHV(dstr);
3830         import_flag = GVf_IMPORTED_HV;
3831         goto common;
3832     case SVt_PVAV:
3833         location = (SV **) &GvAV(dstr);
3834         import_flag = GVf_IMPORTED_AV;
3835         goto common;
3836     case SVt_PVIO:
3837         location = (SV **) &GvIOp(dstr);
3838         goto common;
3839     case SVt_PVFM:
3840         location = (SV **) &GvFORM(dstr);
3841         goto common;
3842     default:
3843         location = &GvSV(dstr);
3844         import_flag = GVf_IMPORTED_SV;
3845     common:
3846         if (intro) {
3847             if (stype == SVt_PVCV) {
3848                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3849                 if (GvCVGEN(dstr)) {
3850                     SvREFCNT_dec(GvCV(dstr));
3851                     GvCV_set(dstr, NULL);
3852                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3853                 }
3854             }
3855             /* SAVEt_GVSLOT takes more room on the savestack and has more
3856                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3857                leave_scope needs access to the GV so it can reset method
3858                caches.  We must use SAVEt_GVSLOT whenever the type is
3859                SVt_PVCV, even if the stash is anonymous, as the stash may
3860                gain a name somehow before leave_scope. */
3861             if (stype == SVt_PVCV) {
3862                 /* There is no save_pushptrptrptr.  Creating it for this
3863                    one call site would be overkill.  So inline the ss add
3864                    routines here. */
3865                 dSS_ADD;
3866                 SS_ADD_PTR(dstr);
3867                 SS_ADD_PTR(location);
3868                 SS_ADD_PTR(SvREFCNT_inc(*location));
3869                 SS_ADD_UV(SAVEt_GVSLOT);
3870                 SS_ADD_END(4);
3871             }
3872             else SAVEGENERICSV(*location);
3873         }
3874         dref = *location;
3875         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3876             CV* const cv = MUTABLE_CV(*location);
3877             if (cv) {
3878                 if (!GvCVGEN((const GV *)dstr) &&
3879                     (CvROOT(cv) || CvXSUB(cv)) &&
3880                     /* redundant check that avoids creating the extra SV
3881                        most of the time: */
3882                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3883                     {
3884                         SV * const new_const_sv =
3885                             CvCONST((const CV *)sref)
3886                                  ? cv_const_sv((const CV *)sref)
3887                                  : NULL;
3888                         report_redefined_cv(
3889                            sv_2mortal(Perl_newSVpvf(aTHX_
3890                                 "%"HEKf"::%"HEKf,
3891                                 HEKfARG(
3892                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3893                                 ),
3894                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3895                            )),
3896                            cv,
3897                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3898                         );
3899                     }
3900                 if (!intro)
3901                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3902                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3903                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3904                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3905             }
3906             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3907             GvASSUMECV_on(dstr);
3908             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3909         }
3910         *location = SvREFCNT_inc_simple_NN(sref);
3911         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3912             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3913             GvFLAGS(dstr) |= import_flag;
3914         }
3915         if (stype == SVt_PVHV) {
3916             const char * const name = GvNAME((GV*)dstr);
3917             const STRLEN len = GvNAMELEN(dstr);
3918             if (
3919                 (
3920                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3921                 || (len == 1 && name[0] == ':')
3922                 )
3923              && (!dref || HvENAME_get(dref))
3924             ) {
3925                 mro_package_moved(
3926                     (HV *)sref, (HV *)dref,
3927                     (GV *)dstr, 0
3928                 );
3929             }
3930         }
3931         else if (
3932             stype == SVt_PVAV && sref != dref
3933          && strEQ(GvNAME((GV*)dstr), "ISA")
3934          /* The stash may have been detached from the symbol table, so
3935             check its name before doing anything. */
3936          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3937         ) {
3938             MAGIC *mg;
3939             MAGIC * const omg = dref && SvSMAGICAL(dref)
3940                                  ? mg_find(dref, PERL_MAGIC_isa)
3941                                  : NULL;
3942             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3943                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3944                     AV * const ary = newAV();
3945                     av_push(ary, mg->mg_obj); /* takes the refcount */
3946                     mg->mg_obj = (SV *)ary;
3947                 }
3948                 if (omg) {
3949                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3950                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3951                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3952                         while (items--)
3953                             av_push(
3954                              (AV *)mg->mg_obj,
3955                              SvREFCNT_inc_simple_NN(*svp++)
3956                             );
3957                     }
3958                     else
3959                         av_push(
3960                          (AV *)mg->mg_obj,
3961                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3962                         );
3963                 }
3964                 else
3965                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3966             }
3967             else
3968             {
3969                 sv_magic(
3970                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3971                 );
3972                 mg = mg_find(sref, PERL_MAGIC_isa);
3973             }
3974             /* Since the *ISA assignment could have affected more than
3975                one stash, don't call mro_isa_changed_in directly, but let
3976                magic_clearisa do it for us, as it already has the logic for
3977                dealing with globs vs arrays of globs. */
3978             assert(mg);
3979             Perl_magic_clearisa(aTHX_ NULL, mg);
3980         }
3981         else if (stype == SVt_PVIO) {
3982             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3983             /* It's a cache. It will rebuild itself quite happily.
3984                It's a lot of effort to work out exactly which key (or keys)
3985                might be invalidated by the creation of the this file handle.
3986             */
3987             hv_clear(PL_stashcache);
3988         }
3989         break;
3990     }
3991     if (!intro) SvREFCNT_dec(dref);
3992     if (SvTAINTED(sstr))
3993         SvTAINT(dstr);
3994     return;
3995 }
3996
3997 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
3998    hold is 0. */
3999 #if SV_COW_THRESHOLD
4000 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
4001 #else
4002 # define GE_COW_THRESHOLD(len)          1
4003 #endif
4004 #if SV_COWBUF_THRESHOLD
4005 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
4006 #else
4007 # define GE_COWBUF_THRESHOLD(len)       1
4008 #endif
4009
4010 void
4011 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4012 {
4013     dVAR;
4014     U32 sflags;
4015     int dtype;
4016     svtype stype;
4017
4018     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4019
4020     if (sstr == dstr)
4021         return;
4022
4023     if (SvIS_FREED(dstr)) {
4024         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4025                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4026     }
4027     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4028     if (!sstr)
4029         sstr = &PL_sv_undef;
4030     if (SvIS_FREED(sstr)) {
4031         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4032                    (void*)sstr, (void*)dstr);
4033     }
4034     stype = SvTYPE(sstr);
4035     dtype = SvTYPE(dstr);
4036
4037     /* There's a lot of redundancy below but we're going for speed here */
4038
4039     switch (stype) {
4040     case SVt_NULL:
4041       undef_sstr:
4042         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4043             (void)SvOK_off(dstr);
4044             return;
4045         }
4046         break;
4047     case SVt_IV:
4048         if (SvIOK(sstr)) {
4049             switch (dtype) {
4050             case SVt_NULL:
4051                 sv_upgrade(dstr, SVt_IV);
4052                 break;
4053             case SVt_NV:
4054             case SVt_PV:
4055                 sv_upgrade(dstr, SVt_PVIV);
4056                 break;
4057             case SVt_PVGV:
4058             case SVt_PVLV:
4059                 goto end_of_first_switch;
4060             }
4061             (void)SvIOK_only(dstr);
4062             SvIV_set(dstr,  SvIVX(sstr));
4063             if (SvIsUV(sstr))
4064                 SvIsUV_on(dstr);
4065             /* SvTAINTED can only be true if the SV has taint magic, which in
4066                turn means that the SV type is PVMG (or greater). This is the
4067                case statement for SVt_IV, so this cannot be true (whatever gcov
4068                may say).  */
4069             assert(!SvTAINTED(sstr));
4070             return;
4071         }
4072         if (!SvROK(sstr))
4073             goto undef_sstr;
4074         if (dtype < SVt_PV && dtype != SVt_IV)
4075             sv_upgrade(dstr, SVt_IV);
4076         break;
4077
4078     case SVt_NV:
4079         if (SvNOK(sstr)) {
4080             switch (dtype) {
4081             case SVt_NULL:
4082             case SVt_IV:
4083                 sv_upgrade(dstr, SVt_NV);
4084                 break;
4085             case SVt_PV:
4086             case SVt_PVIV:
4087                 sv_upgrade(dstr, SVt_PVNV);
4088                 break;
4089             case SVt_PVGV:
4090             case SVt_PVLV:
4091                 goto end_of_first_switch;
4092             }
4093             SvNV_set(dstr, SvNVX(sstr));
4094             (void)SvNOK_only(dstr);
4095             /* SvTAINTED can only be true if the SV has taint magic, which in
4096                turn means that the SV type is PVMG (or greater). This is the
4097                case statement for SVt_NV, so this cannot be true (whatever gcov
4098                may say).  */
4099             assert(!SvTAINTED(sstr));
4100             return;
4101         }
4102         goto undef_sstr;
4103
4104     case SVt_PV:
4105         if (dtype < SVt_PV)
4106             sv_upgrade(dstr, SVt_PV);
4107         break;
4108     case SVt_PVIV:
4109         if (dtype < SVt_PVIV)
4110             sv_upgrade(dstr, SVt_PVIV);
4111         break;
4112     case SVt_PVNV:
4113         if (dtype < SVt_PVNV)
4114             sv_upgrade(dstr, SVt_PVNV);
4115         break;
4116     default:
4117         {
4118         const char * const type = sv_reftype(sstr,0);
4119         if (PL_op)
4120             /* diag_listed_as: Bizarre copy of %s */
4121             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4122         else
4123             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4124         }
4125         break;
4126
4127     case SVt_REGEXP:
4128       upgregexp:
4129         if (dtype < SVt_REGEXP)
4130         {
4131             if (dtype >= SVt_PV) {
4132                 SvPV_free(dstr);
4133                 SvPV_set(dstr, 0);
4134                 SvLEN_set(dstr, 0);
4135                 SvCUR_set(dstr, 0);
4136             }
4137             sv_upgrade(dstr, SVt_REGEXP);
4138         }
4139         break;
4140
4141         case SVt_INVLIST:
4142     case SVt_PVLV:
4143     case SVt_PVGV:
4144     case SVt_PVMG:
4145         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4146             mg_get(sstr);
4147             if (SvTYPE(sstr) != stype)
4148                 stype = SvTYPE(sstr);
4149         }
4150         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4151                     glob_assign_glob(dstr, sstr, dtype);
4152                     return;
4153         }
4154         if (stype == SVt_PVLV)
4155         {
4156             if (isREGEXP(sstr)) goto upgregexp;
4157             SvUPGRADE(dstr, SVt_PVNV);
4158         }
4159         else
4160             SvUPGRADE(dstr, (svtype)stype);
4161     }
4162  end_of_first_switch:
4163
4164     /* dstr may have been upgraded.  */
4165     dtype = SvTYPE(dstr);
4166     sflags = SvFLAGS(sstr);
4167
4168     if (dtype == SVt_PVCV) {
4169         /* Assigning to a subroutine sets the prototype.  */
4170         if (SvOK(sstr)) {
4171             STRLEN len;
4172             const char *const ptr = SvPV_const(sstr, len);
4173
4174             SvGROW(dstr, len + 1);
4175             Copy(ptr, SvPVX(dstr), len + 1, char);
4176             SvCUR_set(dstr, len);
4177             SvPOK_only(dstr);
4178             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4179             CvAUTOLOAD_off(dstr);
4180         } else {
4181             SvOK_off(dstr);
4182         }
4183     }
4184     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4185         const char * const type = sv_reftype(dstr,0);
4186         if (PL_op)
4187             /* diag_listed_as: Cannot copy to %s */
4188             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4189         else
4190             Perl_croak(aTHX_ "Cannot copy to %s", type);
4191     } else if (sflags & SVf_ROK) {
4192         if (isGV_with_GP(dstr)
4193             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4194             sstr = SvRV(sstr);
4195             if (sstr == dstr) {
4196                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4197                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4198                 {
4199                     GvIMPORTED_on(dstr);
4200                 }
4201                 GvMULTI_on(dstr);
4202                 return;
4203             }
4204             glob_assign_glob(dstr, sstr, dtype);
4205             return;
4206         }
4207
4208         if (dtype >= SVt_PV) {
4209             if (isGV_with_GP(dstr)) {
4210                 glob_assign_ref(dstr, sstr);
4211                 return;
4212             }
4213             if (SvPVX_const(dstr)) {
4214                 SvPV_free(dstr);
4215                 SvLEN_set(dstr, 0);
4216                 SvCUR_set(dstr, 0);
4217             }
4218         }
4219         (void)SvOK_off(dstr);
4220         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4221         SvFLAGS(dstr) |= sflags & SVf_ROK;
4222         assert(!(sflags & SVp_NOK));
4223         assert(!(sflags & SVp_IOK));
4224         assert(!(sflags & SVf_NOK));
4225         assert(!(sflags & SVf_IOK));
4226     }
4227     else if (isGV_with_GP(dstr)) {
4228         if (!(sflags & SVf_OK)) {
4229             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4230                            "Undefined value assigned to typeglob");
4231         }
4232         else {
4233             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4234             if (dstr != (const SV *)gv) {
4235                 const char * const name = GvNAME((const GV *)dstr);
4236                 const STRLEN len = GvNAMELEN(dstr);
4237                 HV *old_stash = NULL;
4238                 bool reset_isa = FALSE;
4239                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4240                  || (len == 1 && name[0] == ':')) {
4241                     /* Set aside the old stash, so we can reset isa caches
4242                        on its subclasses. */
4243                     if((old_stash = GvHV(dstr))) {
4244                         /* Make sure we do not lose it early. */
4245                         SvREFCNT_inc_simple_void_NN(
4246                          sv_2mortal((SV *)old_stash)
4247                         );
4248                     }
4249                     reset_isa = TRUE;
4250                 }
4251
4252                 if (GvGP(dstr))
4253                     gp_free(MUTABLE_GV(dstr));
4254                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4255
4256                 if (reset_isa) {
4257                     HV * const stash = GvHV(dstr);
4258                     if(
4259                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4260                     )
4261                         mro_package_moved(
4262                          stash, old_stash,
4263                          (GV *)dstr, 0
4264                         );
4265                 }
4266             }
4267         }
4268     }
4269     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4270           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4271         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4272     }
4273     else if (sflags & SVp_POK) {
4274         bool isSwipe = 0;
4275         const STRLEN cur = SvCUR(sstr);
4276         const STRLEN len = SvLEN(sstr);
4277
4278         /*
4279          * Check to see if we can just swipe the string.  If so, it's a
4280          * possible small lose on short strings, but a big win on long ones.
4281          * It might even be a win on short strings if SvPVX_const(dstr)
4282          * has to be allocated and SvPVX_const(sstr) has to be freed.
4283          * Likewise if we can set up COW rather than doing an actual copy, we
4284          * drop to the else clause, as the swipe code and the COW setup code
4285          * have much in common.
4286          */
4287
4288         /* Whichever path we take through the next code, we want this true,
4289            and doing it now facilitates the COW check.  */
4290         (void)SvPOK_only(dstr);
4291
4292         if (
4293             /* If we're already COW then this clause is not true, and if COW
4294                is allowed then we drop down to the else and make dest COW 
4295                with us.  If caller hasn't said that we're allowed to COW
4296                shared hash keys then we don't do the COW setup, even if the
4297                source scalar is a shared hash key scalar.  */
4298             (((flags & SV_COW_SHARED_HASH_KEYS)
4299                ? !(sflags & SVf_IsCOW)
4300 #ifdef PERL_NEW_COPY_ON_WRITE
4301                 || (len &&
4302                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4303                    /* If this is a regular (non-hek) COW, only so many COW
4304                       "copies" are possible. */
4305                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4306 #endif
4307                : 1 /* If making a COW copy is forbidden then the behaviour we
4308                        desire is as if the source SV isn't actually already
4309                        COW, even if it is.  So we act as if the source flags
4310                        are not COW, rather than actually testing them.  */
4311               )
4312 #ifndef PERL_ANY_COW
4313              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4314                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4315                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4316                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4317                 but in turn, it's somewhat dead code, never expected to go
4318                 live, but more kept as a placeholder on how to do it better
4319                 in a newer implementation.  */
4320              /* If we are COW and dstr is a suitable target then we drop down
4321                 into the else and make dest a COW of us.  */
4322              || (SvFLAGS(dstr) & SVf_BREAK)
4323 #endif
4324              )
4325             &&
4326             !(isSwipe =
4327 #ifdef PERL_NEW_COPY_ON_WRITE
4328                                 /* slated for free anyway (and not COW)? */
4329                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4330 #else
4331                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4332 #endif
4333                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4334                  (!(flags & SV_NOSTEAL)) &&
4335                                         /* and we're allowed to steal temps */
4336                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4337                  len)             /* and really is a string */
4338 #ifdef PERL_ANY_COW
4339             && ((flags & SV_COW_SHARED_HASH_KEYS)
4340                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4341 # ifdef PERL_OLD_COPY_ON_WRITE
4342                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4343                      && SvTYPE(sstr) >= SVt_PVIV && len
4344 # else
4345                      && !(SvFLAGS(dstr) & SVf_BREAK)
4346                      && !(sflags & SVf_IsCOW)
4347                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4348                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4349 # endif
4350                     ))
4351                 : 1)
4352 #endif
4353             ) {
4354             /* Failed the swipe test, and it's not a shared hash key either.
4355                Have to copy the string.  */
4356             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4357             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4358             SvCUR_set(dstr, cur);
4359             *SvEND(dstr) = '\0';
4360         } else {
4361             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4362                be true in here.  */
4363             /* Either it's a shared hash key, or it's suitable for
4364                copy-on-write or we can swipe the string.  */
4365             if (DEBUG_C_TEST) {
4366                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4367                 sv_dump(sstr);
4368                 sv_dump(dstr);
4369             }
4370 #ifdef PERL_ANY_COW
4371             if (!isSwipe) {
4372                 if (!(sflags & SVf_IsCOW)) {
4373                     SvIsCOW_on(sstr);
4374 # ifdef PERL_OLD_COPY_ON_WRITE
4375                     /* Make the source SV into a loop of 1.
4376                        (about to become 2) */
4377                     SV_COW_NEXT_SV_SET(sstr, sstr);
4378 # else
4379                     CowREFCNT(sstr) = 0;
4380 # endif
4381                 }
4382             }
4383 #endif
4384             /* Initial code is common.  */
4385             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4386                 SvPV_free(dstr);
4387             }
4388
4389             if (!isSwipe) {
4390                 /* making another shared SV.  */
4391 #ifdef PERL_ANY_COW
4392                 if (len) {
4393 # ifdef PERL_OLD_COPY_ON_WRITE
4394                     assert (SvTYPE(dstr) >= SVt_PVIV);
4395                     /* SvIsCOW_normal */
4396                     /* splice us in between source and next-after-source.  */
4397                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4398                     SV_COW_NEXT_SV_SET(sstr, dstr);
4399 # else
4400                     CowREFCNT(sstr)++;
4401 # endif
4402                     SvPV_set(dstr, SvPVX_mutable(sstr));
4403                 } else
4404 #endif
4405                 {
4406                     /* SvIsCOW_shared_hash */
4407                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4408                                           "Copy on write: Sharing hash\n"));
4409
4410                     assert (SvTYPE(dstr) >= SVt_PV);
4411                     SvPV_set(dstr,
4412                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4413                 }
4414                 SvLEN_set(dstr, len);
4415                 SvCUR_set(dstr, cur);
4416                 SvIsCOW_on(dstr);
4417             }
4418             else
4419                 {       /* Passes the swipe test.  */
4420                 SvPV_set(dstr, SvPVX_mutable(sstr));
4421                 SvLEN_set(dstr, SvLEN(sstr));
4422                 SvCUR_set(dstr, SvCUR(sstr));
4423
4424                 SvTEMP_off(dstr);
4425                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4426                 SvPV_set(sstr, NULL);
4427                 SvLEN_set(sstr, 0);
4428                 SvCUR_set(sstr, 0);
4429                 SvTEMP_off(sstr);
4430             }
4431         }
4432         if (sflags & SVp_NOK) {
4433             SvNV_set(dstr, SvNVX(sstr));
4434         }
4435         if (sflags & SVp_IOK) {
4436             SvIV_set(dstr, SvIVX(sstr));
4437             /* Must do this otherwise some other overloaded use of 0x80000000
4438                gets confused. I guess SVpbm_VALID */
4439             if (sflags & SVf_IVisUV)
4440                 SvIsUV_on(dstr);
4441         }
4442         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4443         {
4444             const MAGIC * const smg = SvVSTRING_mg(sstr);
4445             if (smg) {
4446                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4447                          smg->mg_ptr, smg->mg_len);
4448                 SvRMAGICAL_on(dstr);
4449             }
4450         }
4451     }
4452     else if (sflags & (SVp_IOK|SVp_NOK)) {
4453         (void)SvOK_off(dstr);
4454         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4455         if (sflags & SVp_IOK) {
4456             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4457             SvIV_set(dstr, SvIVX(sstr));
4458         }
4459         if (sflags & SVp_NOK) {
4460             SvNV_set(dstr, SvNVX(sstr));
4461         }
4462     }
4463     else {
4464         if (isGV_with_GP(sstr)) {
4465             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4466         }
4467         else
4468             (void)SvOK_off(dstr);
4469     }
4470     if (SvTAINTED(sstr))
4471         SvTAINT(dstr);
4472 }
4473
4474 /*
4475 =for apidoc sv_setsv_mg
4476
4477 Like C<sv_setsv>, but also handles 'set' magic.
4478
4479 =cut
4480 */
4481
4482 void
4483 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4484 {
4485     PERL_ARGS_ASSERT_SV_SETSV_MG;
4486
4487     sv_setsv(dstr,sstr);
4488     SvSETMAGIC(dstr);
4489 }
4490
4491 #ifdef PERL_ANY_COW
4492 # ifdef PERL_OLD_COPY_ON_WRITE
4493 #  define SVt_COW SVt_PVIV
4494 # else
4495 #  define SVt_COW SVt_PV
4496 # endif
4497 SV *
4498 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4499 {
4500     STRLEN cur = SvCUR(sstr);
4501     STRLEN len = SvLEN(sstr);
4502     char *new_pv;
4503
4504     PERL_ARGS_ASSERT_SV_SETSV_COW;
4505
4506     if (DEBUG_C_TEST) {
4507         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4508                       (void*)sstr, (void*)dstr);
4509         sv_dump(sstr);
4510         if (dstr)
4511                     sv_dump(dstr);
4512     }
4513
4514     if (dstr) {
4515         if (SvTHINKFIRST(dstr))
4516             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4517         else if (SvPVX_const(dstr))
4518             Safefree(SvPVX_mutable(dstr));
4519     }
4520     else
4521         new_SV(dstr);
4522     SvUPGRADE(dstr, SVt_COW);
4523
4524     assert (SvPOK(sstr));
4525     assert (SvPOKp(sstr));
4526 # ifdef PERL_OLD_COPY_ON_WRITE
4527     assert (!SvIOK(sstr));
4528     assert (!SvIOKp(sstr));
4529     assert (!SvNOK(sstr));
4530     assert (!SvNOKp(sstr));
4531 # endif
4532
4533     if (SvIsCOW(sstr)) {
4534
4535         if (SvLEN(sstr) == 0) {
4536             /* source is a COW shared hash key.  */
4537             DEBUG_C(PerlIO_printf(Perl_debug_log,
4538                                   "Fast copy on write: Sharing hash\n"));
4539             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4540             goto common_exit;
4541         }
4542 # ifdef PERL_OLD_COPY_ON_WRITE
4543         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4544 # else
4545         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4546         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4547 # endif
4548     } else {
4549         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4550         SvUPGRADE(sstr, SVt_COW);
4551         SvIsCOW_on(sstr);
4552         DEBUG_C(PerlIO_printf(Perl_debug_log,
4553                               "Fast copy on write: Converting sstr to COW\n"));
4554 # ifdef PERL_OLD_COPY_ON_WRITE
4555         SV_COW_NEXT_SV_SET(dstr, sstr);
4556 # else
4557         CowREFCNT(sstr) = 0;    
4558 # endif
4559     }
4560 # ifdef PERL_OLD_COPY_ON_WRITE
4561     SV_COW_NEXT_SV_SET(sstr, dstr);
4562 # else
4563     CowREFCNT(sstr)++;  
4564 # endif
4565     new_pv = SvPVX_mutable(sstr);
4566
4567   common_exit:
4568     SvPV_set(dstr, new_pv);
4569     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4570     if (SvUTF8(sstr))
4571         SvUTF8_on(dstr);
4572     SvLEN_set(dstr, len);
4573     SvCUR_set(dstr, cur);
4574     if (DEBUG_C_TEST) {
4575         sv_dump(dstr);
4576     }
4577     return dstr;
4578 }
4579 #endif
4580
4581 /*
4582 =for apidoc sv_setpvn
4583
4584 Copies a string into an SV.  The C<len> parameter indicates the number of
4585 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4586 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4587
4588 =cut
4589 */
4590
4591 void
4592 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4593 {
4594     dVAR;
4595     char *dptr;
4596
4597     PERL_ARGS_ASSERT_SV_SETPVN;
4598
4599     SV_CHECK_THINKFIRST_COW_DROP(sv);
4600     if (!ptr) {
4601         (void)SvOK_off(sv);
4602         return;
4603     }
4604     else {
4605         /* len is STRLEN which is unsigned, need to copy to signed */
4606         const IV iv = len;
4607         if (iv < 0)
4608             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4609                        IVdf, iv);
4610     }
4611     SvUPGRADE(sv, SVt_PV);
4612
4613     dptr = SvGROW(sv, len + 1);
4614     Move(ptr,dptr,len,char);
4615     dptr[len] = '\0';
4616     SvCUR_set(sv, len);
4617     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4618     SvTAINT(sv);
4619     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4620 }
4621
4622 /*
4623 =for apidoc sv_setpvn_mg
4624
4625 Like C<sv_setpvn>, but also handles 'set' magic.
4626
4627 =cut
4628 */
4629
4630 void
4631 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4632 {
4633     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4634
4635     sv_setpvn(sv,ptr,len);
4636     SvSETMAGIC(sv);
4637 }
4638
4639 /*
4640 =for apidoc sv_setpv
4641
4642 Copies a string into an SV.  The string must be null-terminated.  Does not
4643 handle 'set' magic.  See C<sv_setpv_mg>.
4644
4645 =cut
4646 */
4647
4648 void
4649 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4650 {
4651     dVAR;
4652     STRLEN len;
4653
4654     PERL_ARGS_ASSERT_SV_SETPV;
4655
4656     SV_CHECK_THINKFIRST_COW_DROP(sv);
4657     if (!ptr) {
4658         (void)SvOK_off(sv);
4659         return;
4660     }
4661     len = strlen(ptr);
4662     SvUPGRADE(sv, SVt_PV);
4663
4664     SvGROW(sv, len + 1);
4665     Move(ptr,SvPVX(sv),len+1,char);
4666     SvCUR_set(sv, len);
4667     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4668     SvTAINT(sv);
4669     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4670 }
4671
4672 /*
4673 =for apidoc sv_setpv_mg
4674
4675 Like C<sv_setpv>, but also handles 'set' magic.
4676
4677 =cut
4678 */
4679
4680 void
4681 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4682 {
4683     PERL_ARGS_ASSERT_SV_SETPV_MG;
4684
4685     sv_setpv(sv,ptr);
4686     SvSETMAGIC(sv);
4687 }
4688
4689 void
4690 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4691 {
4692     dVAR;
4693
4694     PERL_ARGS_ASSERT_SV_SETHEK;
4695
4696     if (!hek) {
4697         return;
4698     }
4699
4700     if (HEK_LEN(hek) == HEf_SVKEY) {
4701         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4702         return;
4703     } else {
4704         const int flags = HEK_FLAGS(hek);
4705         if (flags & HVhek_WASUTF8) {
4706             STRLEN utf8_len = HEK_LEN(hek);
4707             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4708             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4709             SvUTF8_on(sv);
4710             return;
4711         } else if (flags & HVhek_UNSHARED) {
4712             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4713             if (HEK_UTF8(hek))
4714                 SvUTF8_on(sv);
4715             else SvUTF8_off(sv);
4716             return;
4717         }
4718         {
4719             SV_CHECK_THINKFIRST_COW_DROP(sv);
4720             SvUPGRADE(sv, SVt_PV);
4721             SvPV_free(sv);
4722             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4723             SvCUR_set(sv, HEK_LEN(hek));
4724             SvLEN_set(sv, 0);
4725             SvIsCOW_on(sv);
4726             SvPOK_on(sv);
4727             if (HEK_UTF8(hek))
4728                 SvUTF8_on(sv);
4729             else SvUTF8_off(sv);
4730             return;
4731         }
4732     }
4733 }
4734
4735
4736 /*
4737 =for apidoc sv_usepvn_flags
4738
4739 Tells an SV to use C<ptr> to find its string value.  Normally the
4740 string is stored inside the SV but sv_usepvn allows the SV to use an
4741 outside string.  The C<ptr> should point to memory that was allocated
4742 by C<malloc>.  It must be the start of a mallocked block
4743 of memory, and not a pointer to the middle of it.  The
4744 string length, C<len>, must be supplied.  By default
4745 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4746 so that pointer should not be freed or used by the programmer after
4747 giving it to sv_usepvn, and neither should any pointers from "behind"
4748 that pointer (e.g. ptr + 1) be used.
4749
4750 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4751 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4752 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4753 C<len>, and already meets the requirements for storing in C<SvPVX>).
4754
4755 =cut
4756 */
4757
4758 void
4759 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4760 {
4761     dVAR;
4762     STRLEN allocate;
4763
4764     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4765
4766     SV_CHECK_THINKFIRST_COW_DROP(sv);
4767     SvUPGRADE(sv, SVt_PV);
4768     if (!ptr) {
4769         (void)SvOK_off(sv);
4770         if (flags & SV_SMAGIC)
4771             SvSETMAGIC(sv);
4772         return;
4773     }
4774     if (SvPVX_const(sv))
4775         SvPV_free(sv);
4776
4777 #ifdef DEBUGGING
4778     if (flags & SV_HAS_TRAILING_NUL)
4779         assert(ptr[len] == '\0');
4780 #endif
4781
4782     allocate = (flags & SV_HAS_TRAILING_NUL)
4783         ? len + 1 :
4784 #ifdef Perl_safesysmalloc_size
4785         len + 1;
4786 #else 
4787         PERL_STRLEN_ROUNDUP(len + 1);
4788 #endif
4789     if (flags & SV_HAS_TRAILING_NUL) {
4790         /* It's long enough - do nothing.
4791            Specifically Perl_newCONSTSUB is relying on this.  */
4792     } else {
4793 #ifdef DEBUGGING
4794         /* Force a move to shake out bugs in callers.  */
4795         char *new_ptr = (char*)safemalloc(allocate);
4796         Copy(ptr, new_ptr, len, char);
4797         PoisonFree(ptr,len,char);
4798         Safefree(ptr);
4799         ptr = new_ptr;
4800 #else
4801         ptr = (char*) saferealloc (ptr, allocate);
4802 #endif
4803     }
4804 #ifdef Perl_safesysmalloc_size
4805     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4806 #else
4807     SvLEN_set(sv, allocate);
4808 #endif
4809     SvCUR_set(sv, len);
4810     SvPV_set(sv, ptr);
4811     if (!(flags & SV_HAS_TRAILING_NUL)) {
4812         ptr[len] = '\0';
4813     }
4814     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4815     SvTAINT(sv);
4816     if (flags & SV_SMAGIC)
4817         SvSETMAGIC(sv);
4818 }
4819
4820 #ifdef PERL_OLD_COPY_ON_WRITE
4821 /* Need to do this *after* making the SV normal, as we need the buffer
4822    pointer to remain valid until after we've copied it.  If we let go too early,
4823    another thread could invalidate it by unsharing last of the same hash key
4824    (which it can do by means other than releasing copy-on-write Svs)
4825    or by changing the other copy-on-write SVs in the loop.  */
4826 STATIC void
4827 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4828 {
4829     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4830
4831     { /* this SV was SvIsCOW_normal(sv) */
4832          /* we need to find the SV pointing to us.  */
4833         SV *current = SV_COW_NEXT_SV(after);
4834
4835         if (current == sv) {
4836             /* The SV we point to points back to us (there were only two of us
4837                in the loop.)
4838                Hence other SV is no longer copy on write either.  */
4839             SvIsCOW_off(after);
4840         } else {
4841             /* We need to follow the pointers around the loop.  */
4842             SV *next;
4843             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4844                 assert (next);
4845                 current = next;
4846                  /* don't loop forever if the structure is bust, and we have
4847                     a pointer into a closed loop.  */
4848                 assert (current != after);
4849                 assert (SvPVX_const(current) == pvx);
4850             }
4851             /* Make the SV before us point to the SV after us.  */
4852             SV_COW_NEXT_SV_SET(current, after);
4853         }
4854     }
4855 }
4856 #endif
4857 /*
4858 =for apidoc sv_force_normal_flags
4859
4860 Undo various types of fakery on an SV, where fakery means
4861 "more than" a string: if the PV is a shared string, make
4862 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4863 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4864 we do the copy, and is also used locally; if this is a
4865 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4866 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4867 SvPOK_off rather than making a copy.  (Used where this
4868 scalar is about to be set to some other value.)  In addition,
4869 the C<flags> parameter gets passed to C<sv_unref_flags()>
4870 when unreffing.  C<sv_force_normal> calls this function
4871 with flags set to 0.
4872
4873 =cut
4874 */
4875
4876 static void
4877 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
4878 {
4879     dVAR;
4880
4881     assert(SvIsCOW(sv));
4882     {
4883 #ifdef PERL_ANY_COW
4884         const char * const pvx = SvPVX_const(sv);
4885         const STRLEN len = SvLEN(sv);
4886         const STRLEN cur = SvCUR(sv);
4887 # ifdef PERL_OLD_COPY_ON_WRITE
4888         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4889            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4890            we'll fail an assertion.  */
4891         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4892 # endif
4893
4894         if (DEBUG_C_TEST) {
4895                 PerlIO_printf(Perl_debug_log,
4896                               "Copy on write: Force normal %ld\n",
4897                               (long) flags);
4898                 sv_dump(sv);
4899         }
4900         SvIsCOW_off(sv);
4901 # ifdef PERL_NEW_COPY_ON_WRITE
4902         if (len && CowREFCNT(sv) == 0)
4903             /* We own the buffer ourselves. */
4904             NOOP;
4905         else
4906 # endif
4907         {
4908                 
4909             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4910 # ifdef PERL_NEW_COPY_ON_WRITE
4911             /* Must do this first, since the macro uses SvPVX. */
4912             if (len) CowREFCNT(sv)--;
4913 # endif
4914             SvPV_set(sv, NULL);
4915             SvLEN_set(sv, 0);
4916             if (flags & SV_COW_DROP_PV) {
4917                 /* OK, so we don't need to copy our buffer.  */
4918                 SvPOK_off(sv);
4919             } else {
4920                 SvGROW(sv, cur + 1);
4921                 Move(pvx,SvPVX(sv),cur,char);
4922                 SvCUR_set(sv, cur);
4923                 *SvEND(sv) = '\0';
4924             }
4925             if (len) {
4926 # ifdef PERL_OLD_COPY_ON_WRITE
4927                 sv_release_COW(sv, pvx, next);
4928 # endif
4929             } else {
4930                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4931             }
4932             if (DEBUG_C_TEST) {
4933                 sv_dump(sv);
4934             }
4935         }
4936 #else
4937             const char * const pvx = SvPVX_const(sv);
4938             const STRLEN len = SvCUR(sv);
4939             SvIsCOW_off(sv);
4940             SvPV_set(sv, NULL);
4941             SvLEN_set(sv, 0);
4942             if (flags & SV_COW_DROP_PV) {
4943                 /* OK, so we don't need to copy our buffer.  */
4944                 SvPOK_off(sv);
4945             } else {
4946                 SvGROW(sv, len + 1);
4947                 Move(pvx,SvPVX(sv),len,char);
4948                 *SvEND(sv) = '\0';
4949             }
4950             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4951 #endif
4952     }
4953 }
4954
4955 void
4956 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4957 {
4958     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4959
4960     if (SvREADONLY(sv))
4961         Perl_croak_no_modify();
4962     else if (SvIsCOW(sv))
4963         S_sv_uncow(aTHX_ sv, flags);
4964     if (SvROK(sv))
4965         sv_unref_flags(sv, flags);
4966     else if (SvFAKE(sv) && isGV_with_GP(sv))
4967         sv_unglob(sv, flags);
4968     else if (SvFAKE(sv) && isREGEXP(sv)) {
4969         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4970            to sv_unglob. We only need it here, so inline it.  */
4971         const bool islv = SvTYPE(sv) == SVt_PVLV;
4972         const svtype new_type =
4973           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4974         SV *const temp = newSV_type(new_type);
4975         regexp *const temp_p = ReANY((REGEXP *)sv);
4976
4977         if (new_type == SVt_PVMG) {
4978             SvMAGIC_set(temp, SvMAGIC(sv));
4979             SvMAGIC_set(sv, NULL);
4980             SvSTASH_set(temp, SvSTASH(sv));
4981             SvSTASH_set(sv, NULL);
4982         }
4983         if (!islv) SvCUR_set(temp, SvCUR(sv));
4984         /* Remember that SvPVX is in the head, not the body.  But
4985            RX_WRAPPED is in the body. */
4986         assert(ReANY((REGEXP *)sv)->mother_re);
4987         /* Their buffer is already owned by someone else. */
4988         if (flags & SV_COW_DROP_PV) {
4989             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
4990                zeroed body.  For SVt_PVLV, it should have been set to 0
4991                before turning into a regexp. */
4992             assert(!SvLEN(islv ? sv : temp));
4993             sv->sv_u.svu_pv = 0;
4994         }
4995         else {
4996             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
4997             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
4998             SvPOK_on(sv);
4999         }
5000
5001         /* Now swap the rest of the bodies. */
5002
5003         SvFAKE_off(sv);
5004         if (!islv) {
5005             SvFLAGS(sv) &= ~SVTYPEMASK;
5006             SvFLAGS(sv) |= new_type;
5007             SvANY(sv) = SvANY(temp);
5008         }
5009
5010         SvFLAGS(temp) &= ~(SVTYPEMASK);
5011         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5012         SvANY(temp) = temp_p;
5013         temp->sv_u.svu_rx = (regexp *)temp_p;
5014
5015         SvREFCNT_dec_NN(temp);
5016     }
5017     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5018 }
5019
5020 /*
5021 =for apidoc sv_chop
5022
5023 Efficient removal of characters from the beginning of the string buffer.
5024 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5025 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5026 character of the adjusted string.  Uses the "OOK hack".  On return, only
5027 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5028
5029 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5030 refer to the same chunk of data.
5031
5032 The unfortunate similarity of this function's name to that of Perl's C<chop>
5033 operator is strictly coincidental.  This function works from the left;
5034 C<chop> works from the right.
5035
5036 =cut
5037 */
5038
5039 void
5040 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5041 {
5042     STRLEN delta;
5043     STRLEN old_delta;
5044     U8 *p;
5045 #ifdef DEBUGGING
5046     const U8 *evacp;
5047     STRLEN evacn;
5048 #endif
5049     STRLEN max_delta;
5050
5051     PERL_ARGS_ASSERT_SV_CHOP;
5052
5053     if (!ptr || !SvPOKp(sv))
5054         return;
5055     delta = ptr - SvPVX_const(sv);
5056     if (!delta) {
5057         /* Nothing to do.  */
5058         return;
5059     }
5060     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5061     if (delta > max_delta)
5062         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5063                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5064     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5065     SV_CHECK_THINKFIRST(sv);
5066     SvPOK_only_UTF8(sv);
5067
5068     if (!SvOOK(sv)) {
5069         if (!SvLEN(sv)) { /* make copy of shared string */
5070             const char *pvx = SvPVX_const(sv);
5071             const STRLEN len = SvCUR(sv);
5072             SvGROW(sv, len + 1);
5073             Move(pvx,SvPVX(sv),len,char);
5074             *SvEND(sv) = '\0';
5075         }
5076         SvOOK_on(sv);
5077         old_delta = 0;
5078     } else {
5079         SvOOK_offset(sv, old_delta);
5080     }
5081     SvLEN_set(sv, SvLEN(sv) - delta);
5082     SvCUR_set(sv, SvCUR(sv) - delta);
5083     SvPV_set(sv, SvPVX(sv) + delta);
5084
5085     p = (U8 *)SvPVX_const(sv);
5086
5087 #ifdef DEBUGGING
5088     /* how many bytes were evacuated?  we will fill them with sentinel
5089        bytes, except for the part holding the new offset of course. */
5090     evacn = delta;
5091     if (old_delta)
5092         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5093     assert(evacn);
5094     assert(evacn <= delta + old_delta);
5095     evacp = p - evacn;
5096 #endif
5097
5098     /* This sets 'delta' to the accumulated value of all deltas so far */
5099     delta += old_delta;
5100     assert(delta);
5101
5102     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5103      * the string; otherwise store a 0 byte there and store 'delta' just prior
5104      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5105      * portion of the chopped part of the string */
5106     if (delta < 0x100) {
5107         *--p = (U8) delta;
5108     } else {
5109         *--p = 0;
5110         p -= sizeof(STRLEN);
5111         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5112     }
5113
5114 #ifdef DEBUGGING
5115     /* Fill the preceding buffer with sentinals to verify that no-one is
5116        using it.  */
5117     while (p > evacp) {
5118         --p;
5119         *p = (U8)PTR2UV(p);
5120     }
5121 #endif
5122 }
5123
5124 /*
5125 =for apidoc sv_catpvn
5126
5127 Concatenates the string onto the end of the string which is in the SV.  The
5128 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5129 status set, then the bytes appended should be valid UTF-8.
5130 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5131
5132 =for apidoc sv_catpvn_flags
5133
5134 Concatenates the string onto the end of the string which is in the SV.  The
5135 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5136 status set, then the bytes appended should be valid UTF-8.
5137 If C<flags> has the C<SV_SMAGIC> bit set, will
5138 C<mg_set> on C<dsv> afterwards if appropriate.
5139 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5140 in terms of this function.
5141
5142 =cut
5143 */
5144
5145 void
5146 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5147 {
5148     dVAR;
5149     STRLEN dlen;
5150     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5151
5152     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5153     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5154
5155     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5156       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5157          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5158          dlen = SvCUR(dsv);
5159       }
5160       else SvGROW(dsv, dlen + slen + 1);
5161       if (sstr == dstr)
5162         sstr = SvPVX_const(dsv);
5163       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5164       SvCUR_set(dsv, SvCUR(dsv) + slen);
5165     }
5166     else {
5167         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5168         const char * const send = sstr + slen;
5169         U8 *d;
5170
5171         /* Something this code does not account for, which I think is
5172            impossible; it would require the same pv to be treated as
5173            bytes *and* utf8, which would indicate a bug elsewhere. */
5174         assert(sstr != dstr);
5175
5176         SvGROW(dsv, dlen + slen * 2 + 1);
5177         d = (U8 *)SvPVX(dsv) + dlen;
5178
5179         while (sstr < send) {
5180             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5181             if (UNI_IS_INVARIANT(uv))
5182                 *d++ = (U8)UTF_TO_NATIVE(uv);
5183             else {
5184                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5185                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5186             }
5187         }
5188         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5189     }
5190     *SvEND(dsv) = '\0';
5191     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5192     SvTAINT(dsv);
5193     if (flags & SV_SMAGIC)
5194         SvSETMAGIC(dsv);
5195 }
5196
5197 /*
5198 =for apidoc sv_catsv
5199
5200 Concatenates the string from SV C<ssv> onto the end of the string in SV
5201 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5202 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5203 C<sv_catsv_nomg>.
5204
5205 =for apidoc sv_catsv_flags
5206
5207 Concatenates the string from SV C<ssv> onto the end of the string in SV
5208 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5209 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5210 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5211 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5212 and C<sv_catsv_mg> are implemented in terms of this function.
5213
5214 =cut */
5215
5216 void
5217 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5218 {
5219     dVAR;
5220  
5221     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5222
5223     if (ssv) {
5224         STRLEN slen;
5225         const char *spv = SvPV_flags_const(ssv, slen, flags);
5226         if (spv) {
5227             if (flags & SV_GMAGIC)
5228                 SvGETMAGIC(dsv);
5229             sv_catpvn_flags(dsv, spv, slen,
5230                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5231             if (flags & SV_SMAGIC)
5232                 SvSETMAGIC(dsv);
5233         }
5234     }
5235 }
5236
5237 /*
5238 =for apidoc sv_catpv
5239
5240 Concatenates the string onto the end of the string which is in the SV.
5241 If the SV has the UTF-8 status set, then the bytes appended should be
5242 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5243
5244 =cut */
5245
5246 void
5247 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5248 {
5249     dVAR;
5250     STRLEN len;
5251     STRLEN tlen;
5252     char *junk;
5253
5254     PERL_ARGS_ASSERT_SV_CATPV;
5255
5256     if (!ptr)
5257         return;
5258     junk = SvPV_force(sv, tlen);
5259     len = strlen(ptr);
5260     SvGROW(sv, tlen + len + 1);
5261     if (ptr == junk)
5262         ptr = SvPVX_const(sv);
5263     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5264     SvCUR_set(sv, SvCUR(sv) + len);
5265     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5266     SvTAINT(sv);
5267 }
5268
5269 /*
5270 =for apidoc sv_catpv_flags
5271
5272 Concatenates the string onto the end of the string which is in the SV.
5273 If the SV has the UTF-8 status set, then the bytes appended should
5274 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5275 on the modified SV if appropriate.
5276
5277 =cut
5278 */
5279
5280 void
5281 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5282 {
5283     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5284     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5285 }
5286
5287 /*
5288 =for apidoc sv_catpv_mg
5289
5290 Like C<sv_catpv>, but also handles 'set' magic.
5291
5292 =cut
5293 */
5294
5295 void
5296 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5297 {
5298     PERL_ARGS_ASSERT_SV_CATPV_MG;
5299
5300     sv_catpv(sv,ptr);
5301     SvSETMAGIC(sv);
5302 }
5303
5304 /*
5305 =for apidoc newSV
5306
5307 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5308 bytes of preallocated string space the SV should have.  An extra byte for a
5309 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5310 space is allocated.)  The reference count for the new SV is set to 1.
5311
5312 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5313 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5314 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5315 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5316 modules supporting older perls.
5317
5318 =cut
5319 */
5320
5321 SV *
5322 Perl_newSV(pTHX_ const STRLEN len)
5323 {
5324     dVAR;
5325     SV *sv;
5326
5327     new_SV(sv);
5328     if (len) {
5329         sv_upgrade(sv, SVt_PV);
5330         SvGROW(sv, len + 1);
5331     }
5332     return sv;
5333 }
5334 /*
5335 =for apidoc sv_magicext
5336
5337 Adds magic to an SV, upgrading it if necessary.  Applies the
5338 supplied vtable and returns a pointer to the magic added.
5339
5340 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5341 In particular, you can add magic to SvREADONLY SVs, and add more than
5342 one instance of the same 'how'.
5343
5344 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5345 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5346 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5347 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5348
5349 (This is now used as a subroutine by C<sv_magic>.)
5350
5351 =cut
5352 */
5353 MAGIC * 
5354 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5355                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5356 {
5357     dVAR;
5358     MAGIC* mg;
5359
5360     PERL_ARGS_ASSERT_SV_MAGICEXT;
5361
5362     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5363
5364     SvUPGRADE(sv, SVt_PVMG);
5365     Newxz(mg, 1, MAGIC);
5366     mg->mg_moremagic = SvMAGIC(sv);
5367     SvMAGIC_set(sv, mg);
5368
5369     /* Sometimes a magic contains a reference loop, where the sv and
5370        object refer to each other.  To prevent a reference loop that
5371        would prevent such objects being freed, we look for such loops
5372        and if we find one we avoid incrementing the object refcount.
5373
5374        Note we cannot do this to avoid self-tie loops as intervening RV must
5375        have its REFCNT incremented to keep it in existence.
5376
5377     */
5378     if (!obj || obj == sv ||
5379         how == PERL_MAGIC_arylen ||
5380         how == PERL_MAGIC_symtab ||
5381         (SvTYPE(obj) == SVt_PVGV &&
5382             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5383              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5384              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5385     {
5386         mg->mg_obj = obj;
5387     }
5388     else {
5389         mg->mg_obj = SvREFCNT_inc_simple(obj);
5390         mg->mg_flags |= MGf_REFCOUNTED;
5391     }
5392
5393     /* Normal self-ties simply pass a null object, and instead of
5394        using mg_obj directly, use the SvTIED_obj macro to produce a
5395        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5396        with an RV obj pointing to the glob containing the PVIO.  In
5397        this case, to avoid a reference loop, we need to weaken the
5398        reference.
5399     */
5400
5401     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5402         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5403     {
5404       sv_rvweaken(obj);
5405     }
5406
5407     mg->mg_type = how;
5408     mg->mg_len = namlen;
5409     if (name) {
5410         if (namlen > 0)
5411             mg->mg_ptr = savepvn(name, namlen);
5412         else if (namlen == HEf_SVKEY) {
5413             /* Yes, this is casting away const. This is only for the case of
5414                HEf_SVKEY. I think we need to document this aberation of the
5415                constness of the API, rather than making name non-const, as
5416                that change propagating outwards a long way.  */
5417             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5418         } else
5419             mg->mg_ptr = (char *) name;
5420     }
5421     mg->mg_virtual = (MGVTBL *) vtable;
5422
5423     mg_magical(sv);
5424     return mg;
5425 }
5426
5427 MAGIC *
5428 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5429 {
5430     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5431     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5432         /* This sv is only a delegate.  //g magic must be attached to
5433            its target. */
5434         vivify_defelem(sv);
5435         sv = LvTARG(sv);
5436     }
5437 #ifdef PERL_OLD_COPY_ON_WRITE
5438     if (SvIsCOW(sv))
5439         sv_force_normal_flags(sv, 0);
5440 #endif
5441     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5442                        &PL_vtbl_mglob, 0, 0);
5443 }
5444
5445 /*
5446 =for apidoc sv_magic
5447
5448 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5449 necessary, then adds a new magic item of type C<how> to the head of the
5450 magic list.
5451
5452 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5453 handling of the C<name> and C<namlen> arguments.
5454
5455 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5456 to add more than one instance of the same 'how'.
5457
5458 =cut
5459 */
5460
5461 void
5462 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5463              const char *const name, const I32 namlen)
5464 {
5465     dVAR;
5466     const MGVTBL *vtable;
5467     MAGIC* mg;
5468     unsigned int flags;
5469     unsigned int vtable_index;
5470
5471     PERL_ARGS_ASSERT_SV_MAGIC;
5472
5473     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5474         || ((flags = PL_magic_data[how]),
5475             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5476             > magic_vtable_max))
5477         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5478
5479     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5480        Useful for attaching extension internal data to perl vars.
5481        Note that multiple extensions may clash if magical scalars
5482        etc holding private data from one are passed to another. */
5483
5484     vtable = (vtable_index == magic_vtable_max)
5485         ? NULL : PL_magic_vtables + vtable_index;
5486
5487 #ifdef PERL_OLD_COPY_ON_WRITE
5488     if (SvIsCOW(sv))
5489         sv_force_normal_flags(sv, 0);
5490 #endif
5491     if (SvREADONLY(sv)) {
5492         if (
5493                IN_PERL_RUNTIME
5494             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5495            )
5496         {
5497             Perl_croak_no_modify();
5498         }
5499     }
5500     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5501         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5502             /* sv_magic() refuses to add a magic of the same 'how' as an
5503                existing one
5504              */
5505             if (how == PERL_MAGIC_taint)
5506                 mg->mg_len |= 1;
5507             return;
5508         }
5509     }
5510
5511     /* Rest of work is done else where */
5512     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5513
5514     switch (how) {
5515     case PERL_MAGIC_taint:
5516         mg->mg_len = 1;
5517         break;
5518     case PERL_MAGIC_ext:
5519     case PERL_MAGIC_dbfile:
5520         SvRMAGICAL_on(sv);
5521         break;
5522     }
5523 }
5524
5525 static int
5526 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5527 {
5528     MAGIC* mg;
5529     MAGIC** mgp;
5530
5531     assert(flags <= 1);
5532
5533     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5534         return 0;
5535     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5536     for (mg = *mgp; mg; mg = *mgp) {
5537         const MGVTBL* const virt = mg->mg_virtual;
5538         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5539             *mgp = mg->mg_moremagic;
5540             if (virt && virt->svt_free)
5541                 virt->svt_free(aTHX_ sv, mg);
5542             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5543                 if (mg->mg_len > 0)
5544                     Safefree(mg->mg_ptr);
5545                 else if (mg->mg_len == HEf_SVKEY)
5546                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5547                 else if (mg->mg_type == PERL_MAGIC_utf8)
5548                     Safefree(mg->mg_ptr);
5549             }
5550             if (mg->mg_flags & MGf_REFCOUNTED)
5551                 SvREFCNT_dec(mg->mg_obj);
5552             Safefree(mg);
5553         }
5554         else
5555             mgp = &mg->mg_moremagic;
5556     }
5557     if (SvMAGIC(sv)) {
5558         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5559             mg_magical(sv);     /*    else fix the flags now */
5560     }
5561     else {
5562         SvMAGICAL_off(sv);
5563         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5564     }
5565     return 0;
5566 }
5567
5568 /*
5569 =for apidoc sv_unmagic
5570
5571 Removes all magic of type C<type> from an SV.
5572
5573 =cut
5574 */
5575
5576 int
5577 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5578 {
5579     PERL_ARGS_ASSERT_SV_UNMAGIC;
5580     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5581 }
5582
5583 /*
5584 =for apidoc sv_unmagicext
5585
5586 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5587
5588 =cut
5589 */
5590
5591 int
5592 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5593 {
5594     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5595     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5596 }
5597
5598 /*
5599 =for apidoc sv_rvweaken
5600
5601 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5602 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5603 push a back-reference to this RV onto the array of backreferences
5604 associated with that magic.  If the RV is magical, set magic will be
5605 called after the RV is cleared.
5606
5607 =cut
5608 */
5609
5610 SV *
5611 Perl_sv_rvweaken(pTHX_ SV *const sv)
5612 {
5613     SV *tsv;
5614
5615     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5616
5617     if (!SvOK(sv))  /* let undefs pass */
5618         return sv;
5619     if (!SvROK(sv))
5620         Perl_croak(aTHX_ "Can't weaken a nonreference");
5621     else if (SvWEAKREF(sv)) {
5622         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5623         return sv;
5624     }
5625     else if (SvREADONLY(sv)) croak_no_modify();
5626     tsv = SvRV(sv);
5627     Perl_sv_add_backref(aTHX_ tsv, sv);
5628     SvWEAKREF_on(sv);
5629     SvREFCNT_dec_NN(tsv);
5630     return sv;
5631 }
5632
5633 /* Give tsv backref magic if it hasn't already got it, then push a
5634  * back-reference to sv onto the array associated with the backref magic.
5635  *
5636  * As an optimisation, if there's only one backref and it's not an AV,
5637  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5638  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5639  * active.)
5640  */
5641
5642 /* A discussion about the backreferences array and its refcount:
5643  *
5644  * The AV holding the backreferences is pointed to either as the mg_obj of
5645  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5646  * xhv_backreferences field. The array is created with a refcount
5647  * of 2. This means that if during global destruction the array gets
5648  * picked on before its parent to have its refcount decremented by the
5649  * random zapper, it won't actually be freed, meaning it's still there for
5650  * when its parent gets freed.
5651  *
5652  * When the parent SV is freed, the extra ref is killed by
5653  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5654  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5655  *
5656  * When a single backref SV is stored directly, it is not reference
5657  * counted.
5658  */
5659
5660 void
5661 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5662 {
5663     dVAR;
5664     SV **svp;
5665     AV *av = NULL;
5666     MAGIC *mg = NULL;
5667
5668     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5669
5670     /* find slot to store array or singleton backref */
5671
5672     if (SvTYPE(tsv) == SVt_PVHV) {
5673         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5674     } else {
5675         if (! ((mg =
5676             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5677         {
5678             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5679             mg = mg_find(tsv, PERL_MAGIC_backref);
5680         }
5681         svp = &(mg->mg_obj);
5682     }
5683
5684     /* create or retrieve the array */
5685
5686     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5687         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5688     ) {
5689         /* create array */
5690         av = newAV();
5691         AvREAL_off(av);
5692         SvREFCNT_inc_simple_void(av);
5693         /* av now has a refcnt of 2; see discussion above */
5694         if (*svp) {
5695             /* move single existing backref to the array */
5696             av_extend(av, 1);
5697             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5698         }
5699         *svp = (SV*)av;
5700         if (mg)
5701             mg->mg_flags |= MGf_REFCOUNTED;
5702     }
5703     else
5704         av = MUTABLE_AV(*svp);
5705
5706     if (!av) {
5707         /* optimisation: store single backref directly in HvAUX or mg_obj */
5708         *svp = sv;
5709         return;
5710     }
5711     /* push new backref */
5712     assert(SvTYPE(av) == SVt_PVAV);
5713     if (AvFILLp(av) >= AvMAX(av)) {
5714         av_extend(av, AvFILLp(av)+1);
5715     }
5716     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5717 }
5718
5719 /* delete a back-reference to ourselves from the backref magic associated
5720  * with the SV we point to.
5721  */
5722
5723 void
5724 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5725 {
5726     dVAR;
5727     SV **svp = NULL;
5728
5729     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5730
5731     if (SvTYPE(tsv) == SVt_PVHV) {
5732         if (SvOOK(tsv))
5733             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5734     }
5735     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5736         /* It's possible for the the last (strong) reference to tsv to have
5737            become freed *before* the last thing holding a weak reference.
5738            If both survive longer than the backreferences array, then when
5739            the referent's reference count drops to 0 and it is freed, it's
5740            not able to chase the backreferences, so they aren't NULLed.
5741
5742            For example, a CV holds a weak reference to its stash. If both the
5743            CV and the stash survive longer than the backreferences array,
5744            and the CV gets picked for the SvBREAK() treatment first,
5745            *and* it turns out that the stash is only being kept alive because
5746            of an our variable in the pad of the CV, then midway during CV
5747            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5748            It ends up pointing to the freed HV. Hence it's chased in here, and
5749            if this block wasn't here, it would hit the !svp panic just below.
5750
5751            I don't believe that "better" destruction ordering is going to help
5752            here - during global destruction there's always going to be the
5753            chance that something goes out of order. We've tried to make it
5754            foolproof before, and it only resulted in evolutionary pressure on
5755            fools. Which made us look foolish for our hubris. :-(
5756         */
5757         return;
5758     }
5759     else {
5760         MAGIC *const mg
5761             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5762         svp =  mg ? &(mg->mg_obj) : NULL;
5763     }
5764
5765     if (!svp)
5766         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5767     if (!*svp) {
5768         /* It's possible that sv is being freed recursively part way through the
5769            freeing of tsv. If this happens, the backreferences array of tsv has
5770            already been freed, and so svp will be NULL. If this is the case,
5771            we should not panic. Instead, nothing needs doing, so return.  */
5772         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5773             return;
5774         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5775                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5776     }
5777
5778     if (SvTYPE(*svp) == SVt_PVAV) {
5779 #ifdef DEBUGGING
5780         int count = 1;
5781 #endif
5782         AV * const av = (AV*)*svp;
5783         SSize_t fill;
5784         assert(!SvIS_FREED(av));
5785         fill = AvFILLp(av);
5786         assert(fill > -1);
5787         svp = AvARRAY(av);
5788         /* for an SV with N weak references to it, if all those
5789          * weak refs are deleted, then sv_del_backref will be called
5790          * N times and O(N^2) compares will be done within the backref
5791          * array. To ameliorate this potential slowness, we:
5792          * 1) make sure this code is as tight as possible;
5793          * 2) when looking for SV, look for it at both the head and tail of the
5794          *    array first before searching the rest, since some create/destroy
5795          *    patterns will cause the backrefs to be freed in order.
5796          */
5797         if (*svp == sv) {
5798             AvARRAY(av)++;
5799             AvMAX(av)--;
5800         }
5801         else {
5802             SV **p = &svp[fill];
5803             SV *const topsv = *p;
5804             if (topsv != sv) {
5805 #ifdef DEBUGGING
5806                 count = 0;
5807 #endif
5808                 while (--p > svp) {
5809                     if (*p == sv) {
5810                         /* We weren't the last entry.
5811                            An unordered list has this property that you
5812                            can take the last element off the end to fill
5813                            the hole, and it's still an unordered list :-)
5814                         */
5815                         *p = topsv;
5816 #ifdef DEBUGGING
5817                         count++;
5818 #else
5819                         break; /* should only be one */
5820 #endif
5821                     }
5822                 }
5823             }
5824         }
5825         assert(count ==1);
5826         AvFILLp(av) = fill-1;
5827     }
5828     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5829         /* freed AV; skip */
5830     }
5831     else {
5832         /* optimisation: only a single backref, stored directly */
5833         if (*svp != sv)
5834             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5835         *svp = NULL;
5836     }
5837
5838 }
5839
5840 void
5841 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5842 {
5843     SV **svp;
5844     SV **last;
5845     bool is_array;
5846
5847     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5848
5849     if (!av)
5850         return;
5851
5852     /* after multiple passes through Perl_sv_clean_all() for a thingy
5853      * that has badly leaked, the backref array may have gotten freed,
5854      * since we only protect it against 1 round of cleanup */
5855     if (SvIS_FREED(av)) {
5856         if (PL_in_clean_all) /* All is fair */
5857             return;
5858         Perl_croak(aTHX_
5859                    "panic: magic_killbackrefs (freed backref AV/SV)");
5860     }
5861
5862
5863     is_array = (SvTYPE(av) == SVt_PVAV);
5864     if (is_array) {
5865         assert(!SvIS_FREED(av));
5866         svp = AvARRAY(av);
5867         if (svp)
5868             last = svp + AvFILLp(av);
5869     }
5870     else {
5871         /* optimisation: only a single backref, stored directly */
5872         svp = (SV**)&av;
5873         last = svp;
5874     }
5875
5876     if (svp) {
5877         while (svp <= last) {
5878             if (*svp) {
5879                 SV *const referrer = *svp;
5880                 if (SvWEAKREF(referrer)) {
5881                     /* XXX Should we check that it hasn't changed? */
5882                     assert(SvROK(referrer));
5883                     SvRV_set(referrer, 0);
5884                     SvOK_off(referrer);
5885                     SvWEAKREF_off(referrer);
5886                     SvSETMAGIC(referrer);
5887                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5888                            SvTYPE(referrer) == SVt_PVLV) {
5889                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5890                     /* You lookin' at me?  */
5891                     assert(GvSTASH(referrer));
5892                     assert(GvSTASH(referrer) == (const HV *)sv);
5893                     GvSTASH(referrer) = 0;
5894                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5895                            SvTYPE(referrer) == SVt_PVFM) {
5896                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5897                         /* You lookin' at me?  */
5898                         assert(CvSTASH(referrer));
5899                         assert(CvSTASH(referrer) == (const HV *)sv);
5900                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5901                     }
5902                     else {
5903                         assert(SvTYPE(sv) == SVt_PVGV);
5904                         /* You lookin' at me?  */
5905                         assert(CvGV(referrer));
5906                         assert(CvGV(referrer) == (const GV *)sv);
5907                         anonymise_cv_maybe(MUTABLE_GV(sv),
5908                                                 MUTABLE_CV(referrer));
5909                     }
5910
5911                 } else {
5912                     Perl_croak(aTHX_
5913                                "panic: magic_killbackrefs (flags=%"UVxf")",
5914                                (UV)SvFLAGS(referrer));
5915                 }
5916
5917                 if (is_array)
5918                     *svp = NULL;
5919             }
5920             svp++;
5921         }
5922     }
5923     if (is_array) {
5924         AvFILLp(av) = -1;
5925         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5926     }
5927     return;
5928 }
5929
5930 /*
5931 =for apidoc sv_insert
5932
5933 Inserts a string at the specified offset/length within the SV.  Similar to
5934 the Perl substr() function.  Handles get magic.
5935
5936 =for apidoc sv_insert_flags
5937
5938 Same as C<sv_insert>, but the extra C<flags> are passed to the
5939 C<SvPV_force_flags> that applies to C<bigstr>.
5940
5941 =cut
5942 */
5943
5944 void
5945 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5946 {
5947     dVAR;
5948     char *big;
5949     char *mid;
5950     char *midend;
5951     char *bigend;
5952     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5953     STRLEN curlen;
5954
5955     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5956
5957     if (!bigstr)
5958         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5959     SvPV_force_flags(bigstr, curlen, flags);
5960     (void)SvPOK_only_UTF8(bigstr);
5961     if (offset + len > curlen) {
5962         SvGROW(bigstr, offset+len+1);
5963         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5964         SvCUR_set(bigstr, offset+len);
5965     }
5966
5967     SvTAINT(bigstr);
5968     i = littlelen - len;
5969     if (i > 0) {                        /* string might grow */
5970         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5971         mid = big + offset + len;
5972         midend = bigend = big + SvCUR(bigstr);
5973         bigend += i;
5974         *bigend = '\0';
5975         while (midend > mid)            /* shove everything down */
5976             *--bigend = *--midend;
5977         Move(little,big+offset,littlelen,char);
5978         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5979         SvSETMAGIC(bigstr);
5980         return;
5981     }
5982     else if (i == 0) {
5983         Move(little,SvPVX(bigstr)+offset,len,char);
5984         SvSETMAGIC(bigstr);
5985         return;
5986     }
5987
5988     big = SvPVX(bigstr);
5989     mid = big + offset;
5990     midend = mid + len;
5991     bigend = big + SvCUR(bigstr);
5992
5993     if (midend > bigend)
5994         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5995                    midend, bigend);
5996
5997     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5998         if (littlelen) {
5999             Move(little, mid, littlelen,char);
6000             mid += littlelen;
6001         }
6002         i = bigend - midend;
6003         if (i > 0) {
6004             Move(midend, mid, i,char);
6005             mid += i;
6006         }
6007         *mid = '\0';
6008         SvCUR_set(bigstr, mid - big);
6009     }
6010     else if ((i = mid - big)) { /* faster from front */
6011         midend -= littlelen;
6012         mid = midend;
6013         Move(big, midend - i, i, char);
6014         sv_chop(bigstr,midend-i);
6015         if (littlelen)
6016             Move(little, mid, littlelen,char);
6017     }
6018     else if (littlelen) {
6019         midend -= littlelen;
6020         sv_chop(bigstr,midend);
6021         Move(little,midend,littlelen,char);
6022     }
6023     else {
6024         sv_chop(bigstr,midend);
6025     }
6026     SvSETMAGIC(bigstr);
6027 }
6028
6029 /*
6030 =for apidoc sv_replace
6031
6032 Make the first argument a copy of the second, then delete the original.
6033 The target SV physically takes over ownership of the body of the source SV
6034 and inherits its flags; however, the target keeps any magic it owns,
6035 and any magic in the source is discarded.
6036 Note that this is a rather specialist SV copying operation; most of the
6037 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6038
6039 =cut
6040 */
6041
6042 void
6043 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6044 {
6045     dVAR;
6046     const U32 refcnt = SvREFCNT(sv);
6047
6048     PERL_ARGS_ASSERT_SV_REPLACE;
6049
6050     SV_CHECK_THINKFIRST_COW_DROP(sv);
6051     if (SvREFCNT(nsv) != 1) {
6052         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6053                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6054     }
6055     if (SvMAGICAL(sv)) {
6056         if (SvMAGICAL(nsv))
6057             mg_free(nsv);
6058         else
6059             sv_upgrade(nsv, SVt_PVMG);
6060         SvMAGIC_set(nsv, SvMAGIC(sv));
6061         SvFLAGS(nsv) |= SvMAGICAL(sv);
6062         SvMAGICAL_off(sv);
6063         SvMAGIC_set(sv, NULL);
6064     }
6065     SvREFCNT(sv) = 0;
6066     sv_clear(sv);
6067     assert(!SvREFCNT(sv));
6068 #ifdef DEBUG_LEAKING_SCALARS
6069     sv->sv_flags  = nsv->sv_flags;
6070     sv->sv_any    = nsv->sv_any;
6071     sv->sv_refcnt = nsv->sv_refcnt;
6072     sv->sv_u      = nsv->sv_u;
6073 #else
6074     StructCopy(nsv,sv,SV);
6075 #endif
6076     if(SvTYPE(sv) == SVt_IV) {
6077         SvANY(sv)
6078             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6079     }
6080         
6081
6082 #ifdef PERL_OLD_COPY_ON_WRITE
6083     if (SvIsCOW_normal(nsv)) {
6084         /* We need to follow the pointers around the loop to make the
6085            previous SV point to sv, rather than nsv.  */
6086         SV *next;
6087         SV *current = nsv;
6088         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6089             assert(next);
6090             current = next;
6091             assert(SvPVX_const(current) == SvPVX_const(nsv));
6092         }
6093         /* Make the SV before us point to the SV after us.  */
6094         if (DEBUG_C_TEST) {
6095             PerlIO_printf(Perl_debug_log, "previous is\n");
6096             sv_dump(current);
6097             PerlIO_printf(Perl_debug_log,
6098                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6099                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6100         }
6101         SV_COW_NEXT_SV_SET(current, sv);
6102     }
6103 #endif
6104     SvREFCNT(sv) = refcnt;
6105     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6106     SvREFCNT(nsv) = 0;
6107     del_SV(nsv);
6108 }
6109
6110 /* We're about to free a GV which has a CV that refers back to us.
6111  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6112  * field) */
6113
6114 STATIC void
6115 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6116 {
6117     SV *gvname;
6118     GV *anongv;
6119
6120     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6121
6122     /* be assertive! */
6123     assert(SvREFCNT(gv) == 0);
6124     assert(isGV(gv) && isGV_with_GP(gv));
6125     assert(GvGP(gv));
6126     assert(!CvANON(cv));
6127     assert(CvGV(cv) == gv);
6128     assert(!CvNAMED(cv));
6129
6130     /* will the CV shortly be freed by gp_free() ? */
6131     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6132         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6133         return;
6134     }
6135
6136     /* if not, anonymise: */
6137     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6138                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6139                     : newSVpvn_flags( "__ANON__", 8, 0 );
6140     sv_catpvs(gvname, "::__ANON__");
6141     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6142     SvREFCNT_dec_NN(gvname);
6143
6144     CvANON_on(cv);
6145     CvCVGV_RC_on(cv);
6146     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6147 }
6148
6149
6150 /*
6151 =for apidoc sv_clear
6152
6153 Clear an SV: call any destructors, free up any memory used by the body,
6154 and free the body itself.  The SV's head is I<not> freed, although
6155 its type is set to all 1's so that it won't inadvertently be assumed
6156 to be live during global destruction etc.
6157 This function should only be called when REFCNT is zero.  Most of the time
6158 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6159 instead.
6160
6161 =cut
6162 */
6163
6164 void
6165 Perl_sv_clear(pTHX_ SV *const orig_sv)
6166 {
6167     dVAR;
6168     HV *stash;
6169     U32 type;
6170     const struct body_details *sv_type_details;
6171     SV* iter_sv = NULL;
6172     SV* next_sv = NULL;
6173     SV *sv = orig_sv;
6174     STRLEN hash_index;
6175
6176     PERL_ARGS_ASSERT_SV_CLEAR;
6177
6178     /* within this loop, sv is the SV currently being freed, and
6179      * iter_sv is the most recent AV or whatever that's being iterated
6180      * over to provide more SVs */
6181
6182     while (sv) {
6183
6184         type = SvTYPE(sv);
6185
6186         assert(SvREFCNT(sv) == 0);
6187         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6188
6189         if (type <= SVt_IV) {
6190             /* See the comment in sv.h about the collusion between this
6191              * early return and the overloading of the NULL slots in the
6192              * size table.  */
6193             if (SvROK(sv))
6194                 goto free_rv;
6195             SvFLAGS(sv) &= SVf_BREAK;
6196             SvFLAGS(sv) |= SVTYPEMASK;
6197             goto free_head;
6198         }
6199
6200         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6201
6202         if (type >= SVt_PVMG) {
6203             if (SvOBJECT(sv)) {
6204                 if (!curse(sv, 1)) goto get_next_sv;
6205                 type = SvTYPE(sv); /* destructor may have changed it */
6206             }
6207             /* Free back-references before magic, in case the magic calls
6208              * Perl code that has weak references to sv. */
6209             if (type == SVt_PVHV) {
6210                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6211                 if (SvMAGIC(sv))
6212                     mg_free(sv);
6213             }
6214             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6215                 SvREFCNT_dec(SvOURSTASH(sv));
6216             }
6217             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6218                 assert(!SvMAGICAL(sv));
6219             } else if (SvMAGIC(sv)) {
6220                 /* Free back-references before other types of magic. */
6221                 sv_unmagic(sv, PERL_MAGIC_backref);
6222                 mg_free(sv);
6223             }
6224             SvMAGICAL_off(sv);
6225             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6226                 SvREFCNT_dec(SvSTASH(sv));
6227         }
6228         switch (type) {
6229             /* case SVt_INVLIST: */
6230         case SVt_PVIO:
6231             if (IoIFP(sv) &&
6232                 IoIFP(sv) != PerlIO_stdin() &&
6233                 IoIFP(sv) != PerlIO_stdout() &&
6234                 IoIFP(sv) != PerlIO_stderr() &&
6235                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6236             {
6237                 io_close(MUTABLE_IO(sv), FALSE);
6238             }
6239             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6240                 PerlDir_close(IoDIRP(sv));
6241             IoDIRP(sv) = (DIR*)NULL;
6242             Safefree(IoTOP_NAME(sv));
6243             Safefree(IoFMT_NAME(sv));
6244             Safefree(IoBOTTOM_NAME(sv));
6245             if ((const GV *)sv == PL_statgv)
6246                 PL_statgv = NULL;
6247             goto freescalar;
6248         case SVt_REGEXP:
6249             /* FIXME for plugins */
6250           freeregexp:
6251             pregfree2((REGEXP*) sv);
6252             goto freescalar;
6253         case SVt_PVCV:
6254         case SVt_PVFM:
6255             cv_undef(MUTABLE_CV(sv));
6256             /* If we're in a stash, we don't own a reference to it.
6257              * However it does have a back reference to us, which needs to
6258              * be cleared.  */
6259             if ((stash = CvSTASH(sv)))
6260                 sv_del_backref(MUTABLE_SV(stash), sv);
6261             goto freescalar;
6262         case SVt_PVHV:
6263             if (PL_last_swash_hv == (const HV *)sv) {
6264                 PL_last_swash_hv = NULL;
6265             }
6266             if (HvTOTALKEYS((HV*)sv) > 0) {
6267                 const char *name;
6268                 /* this statement should match the one at the beginning of
6269                  * hv_undef_flags() */
6270                 if (   PL_phase != PERL_PHASE_DESTRUCT
6271                     && (name = HvNAME((HV*)sv)))
6272                 {
6273                     if (PL_stashcache) {
6274                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6275                                      sv));
6276                         (void)hv_delete(PL_stashcache, name,
6277                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6278                     }
6279                     hv_name_set((HV*)sv, NULL, 0, 0);
6280                 }
6281
6282                 /* save old iter_sv in unused SvSTASH field */
6283                 assert(!SvOBJECT(sv));
6284                 SvSTASH(sv) = (HV*)iter_sv;
6285                 iter_sv = sv;
6286
6287                 /* save old hash_index in unused SvMAGIC field */
6288                 assert(!SvMAGICAL(sv));
6289                 assert(!SvMAGIC(sv));
6290                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6291                 hash_index = 0;
6292
6293                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6294                 goto get_next_sv; /* process this new sv */
6295             }
6296             /* free empty hash */
6297             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6298             assert(!HvARRAY((HV*)sv));
6299             break;
6300         case SVt_PVAV:
6301             {
6302                 AV* av = MUTABLE_AV(sv);
6303                 if (PL_comppad == av) {
6304                     PL_comppad = NULL;
6305                     PL_curpad = NULL;
6306                 }
6307                 if (AvREAL(av) && AvFILLp(av) > -1) {
6308                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6309                     /* save old iter_sv in top-most slot of AV,
6310                      * and pray that it doesn't get wiped in the meantime */
6311                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6312                     iter_sv = sv;
6313                     goto get_next_sv; /* process this new sv */
6314                 }
6315                 Safefree(AvALLOC(av));
6316             }
6317
6318             break;
6319         case SVt_PVLV:
6320             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6321                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6322                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6323                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6324             }
6325             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6326                 SvREFCNT_dec(LvTARG(sv));
6327             if (isREGEXP(sv)) goto freeregexp;
6328         case SVt_PVGV:
6329             if (isGV_with_GP(sv)) {
6330                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6331                    && HvENAME_get(stash))
6332                     mro_method_changed_in(stash);
6333                 gp_free(MUTABLE_GV(sv));
6334                 if (GvNAME_HEK(sv))
6335                     unshare_hek(GvNAME_HEK(sv));
6336                 /* If we're in a stash, we don't own a reference to it.
6337                  * However it does have a back reference to us, which
6338                  * needs to be cleared.  */
6339                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6340                         sv_del_backref(MUTABLE_SV(stash), sv);
6341             }
6342             /* FIXME. There are probably more unreferenced pointers to SVs
6343              * in the interpreter struct that we should check and tidy in
6344              * a similar fashion to this:  */
6345             /* See also S_sv_unglob, which does the same thing. */
6346             if ((const GV *)sv == PL_last_in_gv)
6347                 PL_last_in_gv = NULL;
6348             else if ((const GV *)sv == PL_statgv)
6349                 PL_statgv = NULL;
6350             else if ((const GV *)sv == PL_stderrgv)
6351                 PL_stderrgv = NULL;
6352         case SVt_PVMG:
6353         case SVt_PVNV:
6354         case SVt_PVIV:
6355         case SVt_INVLIST:
6356         case SVt_PV:
6357           freescalar:
6358             /* Don't bother with SvOOK_off(sv); as we're only going to
6359              * free it.  */
6360             if (SvOOK(sv)) {
6361                 STRLEN offset;
6362                 SvOOK_offset(sv, offset);
6363                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6364                 /* Don't even bother with turning off the OOK flag.  */
6365             }
6366             if (SvROK(sv)) {
6367             free_rv:
6368                 {
6369                     SV * const target = SvRV(sv);
6370                     if (SvWEAKREF(sv))
6371                         sv_del_backref(target, sv);
6372                     else
6373                         next_sv = target;
6374                 }
6375             }
6376 #ifdef PERL_ANY_COW
6377             else if (SvPVX_const(sv)
6378                      && !(SvTYPE(sv) == SVt_PVIO
6379                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6380             {
6381                 if (SvIsCOW(sv)) {
6382                     if (DEBUG_C_TEST) {
6383                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6384                         sv_dump(sv);
6385                     }
6386                     if (SvLEN(sv)) {
6387 # ifdef PERL_OLD_COPY_ON_WRITE
6388                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6389 # else
6390                         if (CowREFCNT(sv)) {
6391                             CowREFCNT(sv)--;
6392                             SvLEN_set(sv, 0);
6393                         }
6394 # endif
6395                     } else {
6396                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6397                     }
6398
6399                 }
6400 # ifdef PERL_OLD_COPY_ON_WRITE
6401                 else
6402 # endif
6403                 if (SvLEN(sv)) {
6404                     Safefree(SvPVX_mutable(sv));
6405                 }
6406             }
6407 #else
6408             else if (SvPVX_const(sv) && SvLEN(sv)
6409                      && !(SvTYPE(sv) == SVt_PVIO
6410                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6411                 Safefree(SvPVX_mutable(sv));
6412             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6413                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6414             }
6415 #endif
6416             break;
6417         case SVt_NV:
6418             break;
6419         }
6420
6421       free_body:
6422
6423         SvFLAGS(sv) &= SVf_BREAK;
6424         SvFLAGS(sv) |= SVTYPEMASK;
6425
6426         sv_type_details = bodies_by_type + type;
6427         if (sv_type_details->arena) {
6428             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6429                      &PL_body_roots[type]);
6430         }
6431         else if (sv_type_details->body_size) {
6432             safefree(SvANY(sv));
6433         }
6434
6435       free_head:
6436         /* caller is responsible for freeing the head of the original sv */
6437         if (sv != orig_sv && !SvREFCNT(sv))
6438             del_SV(sv);
6439
6440         /* grab and free next sv, if any */
6441       get_next_sv:
6442         while (1) {
6443             sv = NULL;
6444             if (next_sv) {
6445                 sv = next_sv;
6446                 next_sv = NULL;
6447             }
6448             else if (!iter_sv) {
6449                 break;
6450             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6451                 AV *const av = (AV*)iter_sv;
6452                 if (AvFILLp(av) > -1) {
6453                     sv = AvARRAY(av)[AvFILLp(av)--];
6454                 }
6455                 else { /* no more elements of current AV to free */
6456                     sv = iter_sv;
6457                     type = SvTYPE(sv);
6458                     /* restore previous value, squirrelled away */
6459                     iter_sv = AvARRAY(av)[AvMAX(av)];
6460                     Safefree(AvALLOC(av));
6461                     goto free_body;
6462                 }
6463             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6464                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6465                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6466                     /* no more elements of current HV to free */
6467                     sv = iter_sv;
6468                     type = SvTYPE(sv);
6469                     /* Restore previous values of iter_sv and hash_index,
6470                      * squirrelled away */
6471                     assert(!SvOBJECT(sv));
6472                     iter_sv = (SV*)SvSTASH(sv);
6473                     assert(!SvMAGICAL(sv));
6474                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6475 #ifdef DEBUGGING
6476                     /* perl -DA does not like rubbish in SvMAGIC. */
6477                     SvMAGIC_set(sv, 0);
6478 #endif
6479
6480                     /* free any remaining detritus from the hash struct */
6481                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6482                     assert(!HvARRAY((HV*)sv));
6483                     goto free_body;
6484                 }
6485             }
6486
6487             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6488
6489             if (!sv)
6490                 continue;
6491             if (!SvREFCNT(sv)) {
6492                 sv_free(sv);
6493                 continue;
6494             }
6495             if (--(SvREFCNT(sv)))
6496                 continue;
6497 #ifdef DEBUGGING
6498             if (SvTEMP(sv)) {
6499                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6500                          "Attempt to free temp prematurely: SV 0x%"UVxf
6501                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6502                 continue;
6503             }
6504 #endif
6505             if (SvIMMORTAL(sv)) {
6506                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6507                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6508                 continue;
6509             }
6510             break;
6511         } /* while 1 */
6512
6513     } /* while sv */
6514 }
6515
6516 /* This routine curses the sv itself, not the object referenced by sv. So
6517    sv does not have to be ROK. */
6518
6519 static bool
6520 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6521     dVAR;
6522
6523     PERL_ARGS_ASSERT_CURSE;
6524     assert(SvOBJECT(sv));
6525
6526     if (PL_defstash &&  /* Still have a symbol table? */
6527         SvDESTROYABLE(sv))
6528     {
6529         dSP;
6530         HV* stash;
6531         do {
6532           stash = SvSTASH(sv);
6533           assert(SvTYPE(stash) == SVt_PVHV);
6534           if (HvNAME(stash)) {
6535             CV* destructor = NULL;
6536             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6537             if (!destructor) {
6538                 GV * const gv =
6539                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6540                 if (gv) destructor = GvCV(gv);
6541                 if (!SvOBJECT(stash))
6542                     SvSTASH(stash) =
6543                         destructor ? (HV *)destructor : ((HV *)0)+1;
6544             }
6545             assert(!destructor || destructor == ((CV *)0)+1
6546                 || SvTYPE(destructor) == SVt_PVCV);
6547             if (destructor && destructor != ((CV *)0)+1
6548                 /* A constant subroutine can have no side effects, so
6549                    don't bother calling it.  */
6550                 && !CvCONST(destructor)
6551                 /* Don't bother calling an empty destructor or one that
6552                    returns immediately. */
6553                 && (CvISXSUB(destructor)
6554                 || (CvSTART(destructor)
6555                     && (CvSTART(destructor)->op_next->op_type
6556                                         != OP_LEAVESUB)
6557                     && (CvSTART(destructor)->op_next->op_type
6558                                         != OP_PUSHMARK
6559                         || CvSTART(destructor)->op_next->op_next->op_type
6560                                         != OP_RETURN
6561                        )
6562                    ))
6563                )
6564             {
6565                 SV* const tmpref = newRV(sv);
6566                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6567                 ENTER;
6568                 PUSHSTACKi(PERLSI_DESTROY);
6569                 EXTEND(SP, 2);
6570                 PUSHMARK(SP);
6571                 PUSHs(tmpref);
6572                 PUTBACK;
6573                 call_sv(MUTABLE_SV(destructor),
6574                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6575                 POPSTACK;
6576                 SPAGAIN;
6577                 LEAVE;
6578                 if(SvREFCNT(tmpref) < 2) {
6579                     /* tmpref is not kept alive! */
6580                     SvREFCNT(sv)--;
6581                     SvRV_set(tmpref, NULL);
6582                     SvROK_off(tmpref);
6583                 }
6584                 SvREFCNT_dec_NN(tmpref);
6585             }
6586           }
6587         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6588
6589
6590         if (check_refcnt && SvREFCNT(sv)) {
6591             if (PL_in_clean_objs)
6592                 Perl_croak(aTHX_
6593                   "DESTROY created new reference to dead object '%"HEKf"'",
6594                    HEKfARG(HvNAME_HEK(stash)));
6595             /* DESTROY gave object new lease on life */
6596             return FALSE;
6597         }
6598     }
6599
6600     if (SvOBJECT(sv)) {
6601         HV * const stash = SvSTASH(sv);
6602         /* Curse before freeing the stash, as freeing the stash could cause
6603            a recursive call into S_curse. */
6604         SvOBJECT_off(sv);       /* Curse the object. */
6605         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6606         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6607     }
6608     return TRUE;
6609 }
6610
6611 /*
6612 =for apidoc sv_newref
6613
6614 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6615 instead.
6616
6617 =cut
6618 */
6619
6620 SV *
6621 Perl_sv_newref(pTHX_ SV *const sv)
6622 {
6623     PERL_UNUSED_CONTEXT;
6624     if (sv)
6625         (SvREFCNT(sv))++;
6626     return sv;
6627 }
6628
6629 /*
6630 =for apidoc sv_free
6631
6632 Decrement an SV's reference count, and if it drops to zero, call
6633 C<sv_clear> to invoke destructors and free up any memory used by
6634 the body; finally, deallocate the SV's head itself.
6635 Normally called via a wrapper macro C<SvREFCNT_dec>.
6636
6637 =cut
6638 */
6639
6640 void
6641 Perl_sv_free(pTHX_ SV *const sv)
6642 {
6643     SvREFCNT_dec(sv);
6644 }
6645
6646
6647 /* Private helper function for SvREFCNT_dec().
6648  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6649
6650 void
6651 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6652 {
6653     dVAR;
6654
6655     PERL_ARGS_ASSERT_SV_FREE2;
6656
6657     if (LIKELY( rc == 1 )) {
6658         /* normal case */
6659         SvREFCNT(sv) = 0;
6660
6661 #ifdef DEBUGGING
6662         if (SvTEMP(sv)) {
6663             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6664                              "Attempt to free temp prematurely: SV 0x%"UVxf
6665                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6666             return;
6667         }
6668 #endif
6669         if (SvIMMORTAL(sv)) {
6670             /* make sure SvREFCNT(sv)==0 happens very seldom */
6671             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6672             return;
6673         }
6674         sv_clear(sv);
6675         if (! SvREFCNT(sv)) /* may have have been resurrected */
6676             del_SV(sv);
6677         return;
6678     }
6679
6680     /* handle exceptional cases */
6681
6682     assert(rc == 0);
6683
6684     if (SvFLAGS(sv) & SVf_BREAK)
6685         /* this SV's refcnt has been artificially decremented to
6686          * trigger cleanup */
6687         return;
6688     if (PL_in_clean_all) /* All is fair */
6689         return;
6690     if (SvIMMORTAL(sv)) {
6691         /* make sure SvREFCNT(sv)==0 happens very seldom */
6692         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6693         return;
6694     }
6695     if (ckWARN_d(WARN_INTERNAL)) {
6696 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6697         Perl_dump_sv_child(aTHX_ sv);
6698 #else
6699     #ifdef DEBUG_LEAKING_SCALARS
6700         sv_dump(sv);
6701     #endif
6702 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6703         if (PL_warnhook == PERL_WARNHOOK_FATAL
6704             || ckDEAD(packWARN(WARN_INTERNAL))) {
6705             /* Don't let Perl_warner cause us to escape our fate:  */
6706             abort();
6707         }
6708 #endif
6709         /* This may not return:  */
6710         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6711                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6712                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6713 #endif
6714     }
6715 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6716     abort();
6717 #endif
6718
6719 }
6720
6721
6722 /*
6723 =for apidoc sv_len
6724
6725 Returns the length of the string in the SV.  Handles magic and type
6726 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6727 gives raw access to the xpv_cur slot.
6728
6729 =cut
6730 */
6731
6732 STRLEN
6733 Perl_sv_len(pTHX_ SV *const sv)
6734 {
6735     STRLEN len;
6736
6737     if (!sv)
6738         return 0;
6739
6740     (void)SvPV_const(sv, len);
6741     return len;
6742 }
6743
6744 /*
6745 =for apidoc sv_len_utf8
6746
6747 Returns the number of characters in the string in an SV, counting wide
6748 UTF-8 bytes as a single character.  Handles magic and type coercion.
6749
6750 =cut
6751 */
6752
6753 /*
6754  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6755  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6756  * (Note that the mg_len is not the length of the mg_ptr field.
6757  * This allows the cache to store the character length of the string without
6758  * needing to malloc() extra storage to attach to the mg_ptr.)
6759  *
6760  */
6761
6762 STRLEN
6763 Perl_sv_len_utf8(pTHX_ SV *const sv)
6764 {
6765     if (!sv)
6766         return 0;
6767
6768     SvGETMAGIC(sv);
6769     return sv_len_utf8_nomg(sv);
6770 }
6771
6772 STRLEN
6773 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6774 {
6775     dVAR;
6776     STRLEN len;
6777     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6778
6779     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6780
6781     if (PL_utf8cache && SvUTF8(sv)) {
6782             STRLEN ulen;
6783             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6784
6785             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6786                 if (mg->mg_len != -1)
6787                     ulen = mg->mg_len;
6788                 else {
6789                     /* We can use the offset cache for a headstart.
6790                        The longer value is stored in the first pair.  */
6791                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6792
6793                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6794                                                        s + len);
6795                 }
6796                 
6797                 if (PL_utf8cache < 0) {
6798                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6799                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6800                 }
6801             }
6802             else {
6803                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6804                 utf8_mg_len_cache_update(sv, &mg, ulen);
6805             }
6806             return ulen;
6807     }
6808     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6809 }
6810
6811 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6812    offset.  */
6813 static STRLEN
6814 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6815                       STRLEN *const uoffset_p, bool *const at_end)
6816 {
6817     const U8 *s = start;
6818     STRLEN uoffset = *uoffset_p;
6819
6820     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6821
6822     while (s < send && uoffset) {
6823         --uoffset;
6824         s += UTF8SKIP(s);
6825     }
6826     if (s == send) {
6827         *at_end = TRUE;
6828     }
6829     else if (s > send) {
6830         *at_end = TRUE;
6831         /* This is the existing behaviour. Possibly it should be a croak, as
6832            it's actually a bounds error  */
6833         s = send;
6834     }
6835     *uoffset_p -= uoffset;
6836     return s - start;
6837 }
6838
6839 /* Given the length of the string in both bytes and UTF-8 characters, decide
6840    whether to walk forwards or backwards to find the byte corresponding to
6841    the passed in UTF-8 offset.  */
6842 static STRLEN
6843 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6844                     STRLEN uoffset, const STRLEN uend)
6845 {
6846     STRLEN backw = uend - uoffset;
6847
6848     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6849
6850     if (uoffset < 2 * backw) {
6851         /* The assumption is that going forwards is twice the speed of going
6852            forward (that's where the 2 * backw comes from).
6853            (The real figure of course depends on the UTF-8 data.)  */
6854         const U8 *s = start;
6855
6856         while (s < send && uoffset--)
6857             s += UTF8SKIP(s);
6858         assert (s <= send);
6859         if (s > send)
6860             s = send;
6861         return s - start;
6862     }
6863
6864     while (backw--) {
6865         send--;
6866         while (UTF8_IS_CONTINUATION(*send))
6867             send--;
6868     }
6869     return send - start;
6870 }
6871
6872 /* For the string representation of the given scalar, find the byte
6873    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6874    give another position in the string, *before* the sought offset, which
6875    (which is always true, as 0, 0 is a valid pair of positions), which should
6876    help reduce the amount of linear searching.
6877    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6878    will be used to reduce the amount of linear searching. The cache will be
6879    created if necessary, and the found value offered to it for update.  */
6880 static STRLEN
6881 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6882                     const U8 *const send, STRLEN uoffset,
6883                     STRLEN uoffset0, STRLEN boffset0)
6884 {
6885     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6886     bool found = FALSE;
6887     bool at_end = FALSE;
6888
6889     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6890
6891     assert (uoffset >= uoffset0);
6892
6893     if (!uoffset)
6894         return 0;
6895
6896     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6897         && PL_utf8cache
6898         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6899                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6900         if ((*mgp)->mg_ptr) {
6901             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6902             if (cache[0] == uoffset) {
6903                 /* An exact match. */
6904                 return cache[1];
6905             }
6906             if (cache[2] == uoffset) {
6907                 /* An exact match. */
6908                 return cache[3];
6909             }
6910
6911             if (cache[0] < uoffset) {
6912                 /* The cache already knows part of the way.   */
6913                 if (cache[0] > uoffset0) {
6914                     /* The cache knows more than the passed in pair  */
6915                     uoffset0 = cache[0];
6916                     boffset0 = cache[1];
6917                 }
6918                 if ((*mgp)->mg_len != -1) {
6919                     /* And we know the end too.  */
6920                     boffset = boffset0
6921                         + sv_pos_u2b_midway(start + boffset0, send,
6922                                               uoffset - uoffset0,
6923                                               (*mgp)->mg_len - uoffset0);
6924                 } else {
6925                     uoffset -= uoffset0;
6926                     boffset = boffset0
6927                         + sv_pos_u2b_forwards(start + boffset0,
6928                                               send, &uoffset, &at_end);
6929                     uoffset += uoffset0;
6930                 }
6931             }
6932             else if (cache[2] < uoffset) {
6933                 /* We're between the two cache entries.  */
6934                 if (cache[2] > uoffset0) {
6935                     /* and the cache knows more than the passed in pair  */
6936                     uoffset0 = cache[2];
6937                     boffset0 = cache[3];
6938                 }
6939
6940                 boffset = boffset0
6941                     + sv_pos_u2b_midway(start + boffset0,
6942                                           start + cache[1],
6943                                           uoffset - uoffset0,
6944                                           cache[0] - uoffset0);
6945             } else {
6946                 boffset = boffset0
6947                     + sv_pos_u2b_midway(start + boffset0,
6948                                           start + cache[3],
6949                                           uoffset - uoffset0,
6950                                           cache[2] - uoffset0);
6951             }
6952             found = TRUE;
6953         }
6954         else if ((*mgp)->mg_len != -1) {
6955             /* If we can take advantage of a passed in offset, do so.  */
6956             /* In fact, offset0 is either 0, or less than offset, so don't
6957                need to worry about the other possibility.  */
6958             boffset = boffset0
6959                 + sv_pos_u2b_midway(start + boffset0, send,
6960                                       uoffset - uoffset0,
6961                                       (*mgp)->mg_len - uoffset0);
6962             found = TRUE;
6963         }
6964     }
6965
6966     if (!found || PL_utf8cache < 0) {
6967         STRLEN real_boffset;
6968         uoffset -= uoffset0;
6969         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6970                                                       send, &uoffset, &at_end);
6971         uoffset += uoffset0;
6972
6973         if (found && PL_utf8cache < 0)
6974             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6975                                        real_boffset, sv);
6976         boffset = real_boffset;
6977     }
6978
6979     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6980         if (at_end)
6981             utf8_mg_len_cache_update(sv, mgp, uoffset);
6982         else
6983             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6984     }
6985     return boffset;
6986 }
6987
6988
6989 /*
6990 =for apidoc sv_pos_u2b_flags
6991
6992 Converts the offset from a count of UTF-8 chars from
6993 the start of the string, to a count of the equivalent number of bytes; if
6994 lenp is non-zero, it does the same to lenp, but this time starting from
6995 the offset, rather than from the start
6996 of the string.  Handles type coercion.
6997 I<flags> is passed to C<SvPV_flags>, and usually should be
6998 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6999
7000 =cut
7001 */
7002
7003 /*
7004  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7005  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7006  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7007  *
7008  */
7009
7010 STRLEN
7011 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7012                       U32 flags)
7013 {
7014     const U8 *start;
7015     STRLEN len;
7016     STRLEN boffset;
7017
7018     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7019
7020     start = (U8*)SvPV_flags(sv, len, flags);
7021     if (len) {
7022         const U8 * const send = start + len;
7023         MAGIC *mg = NULL;
7024         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7025
7026         if (lenp
7027             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7028                         is 0, and *lenp is already set to that.  */) {
7029             /* Convert the relative offset to absolute.  */
7030             const STRLEN uoffset2 = uoffset + *lenp;
7031             const STRLEN boffset2
7032                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7033                                       uoffset, boffset) - boffset;
7034
7035             *lenp = boffset2;
7036         }
7037     } else {
7038         if (lenp)
7039             *lenp = 0;
7040         boffset = 0;
7041     }
7042
7043     return boffset;
7044 }
7045
7046 /*
7047 =for apidoc sv_pos_u2b
7048
7049 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7050 the start of the string, to a count of the equivalent number of bytes; if
7051 lenp is non-zero, it does the same to lenp, but this time starting from
7052 the offset, rather than from the start of the string.  Handles magic and
7053 type coercion.
7054
7055 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7056 than 2Gb.
7057
7058 =cut
7059 */
7060
7061 /*
7062  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7063  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7064  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7065  *
7066  */
7067
7068 /* This function is subject to size and sign problems */
7069
7070 void
7071 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7072 {
7073     PERL_ARGS_ASSERT_SV_POS_U2B;
7074
7075     if (lenp) {
7076         STRLEN ulen = (STRLEN)*lenp;
7077         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7078                                          SV_GMAGIC|SV_CONST_RETURN);
7079         *lenp = (I32)ulen;
7080     } else {
7081         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7082                                          SV_GMAGIC|SV_CONST_RETURN);
7083     }
7084 }
7085
7086 static void
7087 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7088                            const STRLEN ulen)
7089 {
7090     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7091     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7092         return;
7093
7094     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7095                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7096         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7097     }
7098     assert(*mgp);
7099
7100     (*mgp)->mg_len = ulen;
7101 }
7102
7103 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7104    byte length pairing. The (byte) length of the total SV is passed in too,
7105    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7106    may not have updated SvCUR, so we can't rely on reading it directly.
7107
7108    The proffered utf8/byte length pairing isn't used if the cache already has
7109    two pairs, and swapping either for the proffered pair would increase the
7110    RMS of the intervals between known byte offsets.
7111
7112    The cache itself consists of 4 STRLEN values
7113    0: larger UTF-8 offset
7114    1: corresponding byte offset
7115    2: smaller UTF-8 offset
7116    3: corresponding byte offset
7117
7118    Unused cache pairs have the value 0, 0.
7119    Keeping the cache "backwards" means that the invariant of
7120    cache[0] >= cache[2] is maintained even with empty slots, which means that
7121    the code that uses it doesn't need to worry if only 1 entry has actually
7122    been set to non-zero.  It also makes the "position beyond the end of the
7123    cache" logic much simpler, as the first slot is always the one to start
7124    from.   
7125 */
7126 static void
7127 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7128                            const STRLEN utf8, const STRLEN blen)
7129 {
7130     STRLEN *cache;
7131
7132     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7133
7134     if (SvREADONLY(sv))
7135         return;
7136
7137     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7138                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7139         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7140                            0);
7141         (*mgp)->mg_len = -1;
7142     }
7143     assert(*mgp);
7144
7145     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7146         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7147         (*mgp)->mg_ptr = (char *) cache;
7148     }
7149     assert(cache);
7150
7151     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7152         /* SvPOKp() because it's possible that sv has string overloading, and
7153            therefore is a reference, hence SvPVX() is actually a pointer.
7154            This cures the (very real) symptoms of RT 69422, but I'm not actually
7155            sure whether we should even be caching the results of UTF-8
7156            operations on overloading, given that nothing stops overloading
7157            returning a different value every time it's called.  */
7158         const U8 *start = (const U8 *) SvPVX_const(sv);
7159         const STRLEN realutf8 = utf8_length(start, start + byte);
7160
7161         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7162                                    sv);
7163     }
7164
7165     /* Cache is held with the later position first, to simplify the code
7166        that deals with unbounded ends.  */
7167        
7168     ASSERT_UTF8_CACHE(cache);
7169     if (cache[1] == 0) {
7170         /* Cache is totally empty  */
7171         cache[0] = utf8;
7172         cache[1] = byte;
7173     } else if (cache[3] == 0) {
7174         if (byte > cache[1]) {
7175             /* New one is larger, so goes first.  */
7176             cache[2] = cache[0];
7177             cache[3] = cache[1];
7178             cache[0] = utf8;
7179             cache[1] = byte;
7180         } else {
7181             cache[2] = utf8;
7182             cache[3] = byte;
7183         }
7184     } else {
7185 #define THREEWAY_SQUARE(a,b,c,d) \
7186             ((float)((d) - (c))) * ((float)((d) - (c))) \
7187             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7188                + ((float)((b) - (a))) * ((float)((b) - (a)))
7189
7190         /* Cache has 2 slots in use, and we know three potential pairs.
7191            Keep the two that give the lowest RMS distance. Do the
7192            calculation in bytes simply because we always know the byte
7193            length.  squareroot has the same ordering as the positive value,
7194            so don't bother with the actual square root.  */
7195         if (byte > cache[1]) {
7196             /* New position is after the existing pair of pairs.  */
7197             const float keep_earlier
7198                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7199             const float keep_later
7200                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7201
7202             if (keep_later < keep_earlier) {
7203                 cache[2] = cache[0];
7204                 cache[3] = cache[1];
7205                 cache[0] = utf8;
7206                 cache[1] = byte;
7207             }
7208             else {
7209                 cache[0] = utf8;
7210                 cache[1] = byte;
7211             }
7212         }
7213         else if (byte > cache[3]) {
7214             /* New position is between the existing pair of pairs.  */
7215             const float keep_earlier
7216                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7217             const float keep_later
7218                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7219
7220             if (keep_later < keep_earlier) {
7221                 cache[2] = utf8;
7222                 cache[3] = byte;
7223             }
7224             else {
7225                 cache[0] = utf8;
7226                 cache[1] = byte;
7227             }
7228         }
7229         else {
7230             /* New position is before the existing pair of pairs.  */
7231             const float keep_earlier
7232                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7233             const float keep_later
7234                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7235
7236             if (keep_later < keep_earlier) {
7237                 cache[2] = utf8;
7238                 cache[3] = byte;
7239             }
7240             else {
7241                 cache[0] = cache[2];
7242                 cache[1] = cache[3];
7243                 cache[2] = utf8;
7244                 cache[3] = byte;
7245             }
7246         }
7247     }
7248     ASSERT_UTF8_CACHE(cache);
7249 }
7250
7251 /* We already know all of the way, now we may be able to walk back.  The same
7252    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7253    backward is half the speed of walking forward. */
7254 static STRLEN
7255 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7256                     const U8 *end, STRLEN endu)
7257 {
7258     const STRLEN forw = target - s;
7259     STRLEN backw = end - target;
7260
7261     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7262
7263     if (forw < 2 * backw) {
7264         return utf8_length(s, target);
7265     }
7266
7267     while (end > target) {
7268         end--;
7269         while (UTF8_IS_CONTINUATION(*end)) {
7270             end--;
7271         }
7272         endu--;
7273     }
7274     return endu;
7275 }
7276
7277 /*
7278 =for apidoc sv_pos_b2u_flags
7279
7280 Converts the offset from a count of bytes from the start of the string, to
7281 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7282 I<flags> is passed to C<SvPV_flags>, and usually should be
7283 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7284
7285 =cut
7286 */
7287
7288 /*
7289  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7290  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7291  * and byte offsets.
7292  *
7293  */
7294 STRLEN
7295 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7296 {
7297     const U8* s;
7298     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7299     STRLEN blen;
7300     MAGIC* mg = NULL;
7301     const U8* send;
7302     bool found = FALSE;
7303
7304     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7305
7306     s = (const U8*)SvPV_flags(sv, blen, flags);
7307
7308     if (blen < offset)
7309         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7310                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7311
7312     send = s + offset;
7313
7314     if (!SvREADONLY(sv)
7315         && PL_utf8cache
7316         && SvTYPE(sv) >= SVt_PVMG
7317         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7318     {
7319         if (mg->mg_ptr) {
7320             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7321             if (cache[1] == offset) {
7322                 /* An exact match. */
7323                 return cache[0];
7324             }
7325             if (cache[3] == offset) {
7326                 /* An exact match. */
7327                 return cache[2];
7328             }
7329
7330             if (cache[1] < offset) {
7331                 /* We already know part of the way. */
7332                 if (mg->mg_len != -1) {
7333                     /* Actually, we know the end too.  */
7334                     len = cache[0]
7335                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7336                                               s + blen, mg->mg_len - cache[0]);
7337                 } else {
7338                     len = cache[0] + utf8_length(s + cache[1], send);
7339                 }
7340             }
7341             else if (cache[3] < offset) {
7342                 /* We're between the two cached pairs, so we do the calculation
7343                    offset by the byte/utf-8 positions for the earlier pair,
7344                    then add the utf-8 characters from the string start to
7345                    there.  */
7346                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7347                                           s + cache[1], cache[0] - cache[2])
7348                     + cache[2];
7349
7350             }
7351             else { /* cache[3] > offset */
7352                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7353                                           cache[2]);
7354
7355             }
7356             ASSERT_UTF8_CACHE(cache);
7357             found = TRUE;
7358         } else if (mg->mg_len != -1) {
7359             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7360             found = TRUE;
7361         }
7362     }
7363     if (!found || PL_utf8cache < 0) {
7364         const STRLEN real_len = utf8_length(s, send);
7365
7366         if (found && PL_utf8cache < 0)
7367             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7368         len = real_len;
7369     }
7370
7371     if (PL_utf8cache) {
7372         if (blen == offset)
7373             utf8_mg_len_cache_update(sv, &mg, len);
7374         else
7375             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7376     }
7377
7378     return len;
7379 }
7380
7381 /*
7382 =for apidoc sv_pos_b2u
7383
7384 Converts the value pointed to by offsetp from a count of bytes from the
7385 start of the string, to a count of the equivalent number of UTF-8 chars.
7386 Handles magic and type coercion.
7387
7388 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7389 longer than 2Gb.
7390
7391 =cut
7392 */
7393
7394 /*
7395  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7396  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7397  * byte offsets.
7398  *
7399  */
7400 void
7401 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7402 {
7403     PERL_ARGS_ASSERT_SV_POS_B2U;
7404
7405     if (!sv)
7406         return;
7407
7408     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7409                                      SV_GMAGIC|SV_CONST_RETURN);
7410 }
7411
7412 static void
7413 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7414                              STRLEN real, SV *const sv)
7415 {
7416     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7417
7418     /* As this is debugging only code, save space by keeping this test here,
7419        rather than inlining it in all the callers.  */
7420     if (from_cache == real)
7421         return;
7422
7423     /* Need to turn the assertions off otherwise we may recurse infinitely
7424        while printing error messages.  */
7425     SAVEI8(PL_utf8cache);
7426     PL_utf8cache = 0;
7427     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7428                func, (UV) from_cache, (UV) real, SVfARG(sv));
7429 }
7430
7431 /*
7432 =for apidoc sv_eq
7433
7434 Returns a boolean indicating whether the strings in the two SVs are
7435 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7436 coerce its args to strings if necessary.
7437
7438 =for apidoc sv_eq_flags
7439
7440 Returns a boolean indicating whether the strings in the two SVs are
7441 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7442 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7443
7444 =cut
7445 */
7446
7447 I32
7448 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7449 {
7450     dVAR;
7451     const char *pv1;
7452     STRLEN cur1;
7453     const char *pv2;
7454     STRLEN cur2;
7455     I32  eq     = 0;
7456     SV* svrecode = NULL;
7457
7458     if (!sv1) {
7459         pv1 = "";
7460         cur1 = 0;
7461     }
7462     else {
7463         /* if pv1 and pv2 are the same, second SvPV_const call may
7464          * invalidate pv1 (if we are handling magic), so we may need to
7465          * make a copy */
7466         if (sv1 == sv2 && flags & SV_GMAGIC
7467          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7468             pv1 = SvPV_const(sv1, cur1);
7469             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7470         }
7471         pv1 = SvPV_flags_const(sv1, cur1, flags);
7472     }
7473
7474     if (!sv2){
7475         pv2 = "";
7476         cur2 = 0;
7477     }
7478     else
7479         pv2 = SvPV_flags_const(sv2, cur2, flags);
7480
7481     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7482         /* Differing utf8ness.
7483          * Do not UTF8size the comparands as a side-effect. */
7484          if (PL_encoding) {
7485               if (SvUTF8(sv1)) {
7486                    svrecode = newSVpvn(pv2, cur2);
7487                    sv_recode_to_utf8(svrecode, PL_encoding);
7488                    pv2 = SvPV_const(svrecode, cur2);
7489               }
7490               else {
7491                    svrecode = newSVpvn(pv1, cur1);
7492                    sv_recode_to_utf8(svrecode, PL_encoding);
7493                    pv1 = SvPV_const(svrecode, cur1);
7494               }
7495               /* Now both are in UTF-8. */
7496               if (cur1 != cur2) {
7497                    SvREFCNT_dec_NN(svrecode);
7498                    return FALSE;
7499               }
7500          }
7501          else {
7502               if (SvUTF8(sv1)) {
7503                   /* sv1 is the UTF-8 one  */
7504                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7505                                         (const U8*)pv1, cur1) == 0;
7506               }
7507               else {
7508                   /* sv2 is the UTF-8 one  */
7509                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7510                                         (const U8*)pv2, cur2) == 0;
7511               }
7512          }
7513     }
7514
7515     if (cur1 == cur2)
7516         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7517         
7518     SvREFCNT_dec(svrecode);
7519
7520     return eq;
7521 }
7522
7523 /*
7524 =for apidoc sv_cmp
7525
7526 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7527 string in C<sv1> is less than, equal to, or greater than the string in
7528 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7529 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7530
7531 =for apidoc sv_cmp_flags
7532
7533 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7534 string in C<sv1> is less than, equal to, or greater than the string in
7535 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7536 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7537 also C<sv_cmp_locale_flags>.
7538
7539 =cut
7540 */
7541
7542 I32
7543 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7544 {
7545     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7546 }
7547
7548 I32
7549 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7550                   const U32 flags)
7551 {
7552     dVAR;
7553     STRLEN cur1, cur2;
7554     const char *pv1, *pv2;
7555     I32  cmp;
7556     SV *svrecode = NULL;
7557
7558     if (!sv1) {
7559         pv1 = "";
7560         cur1 = 0;
7561     }
7562     else
7563         pv1 = SvPV_flags_const(sv1, cur1, flags);
7564
7565     if (!sv2) {
7566         pv2 = "";
7567         cur2 = 0;
7568     }
7569     else
7570         pv2 = SvPV_flags_const(sv2, cur2, flags);
7571
7572     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7573         /* Differing utf8ness.
7574          * Do not UTF8size the comparands as a side-effect. */
7575         if (SvUTF8(sv1)) {
7576             if (PL_encoding) {
7577                  svrecode = newSVpvn(pv2, cur2);
7578                  sv_recode_to_utf8(svrecode, PL_encoding);
7579                  pv2 = SvPV_const(svrecode, cur2);
7580             }
7581             else {
7582                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7583                                                    (const U8*)pv1, cur1);
7584                 return retval ? retval < 0 ? -1 : +1 : 0;
7585             }
7586         }
7587         else {
7588             if (PL_encoding) {
7589                  svrecode = newSVpvn(pv1, cur1);
7590                  sv_recode_to_utf8(svrecode, PL_encoding);
7591                  pv1 = SvPV_const(svrecode, cur1);
7592             }
7593             else {
7594                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7595                                                   (const U8*)pv2, cur2);
7596                 return retval ? retval < 0 ? -1 : +1 : 0;
7597             }
7598         }
7599     }
7600
7601     if (!cur1) {
7602         cmp = cur2 ? -1 : 0;
7603     } else if (!cur2) {
7604         cmp = 1;
7605     } else {
7606         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7607
7608         if (retval) {
7609             cmp = retval < 0 ? -1 : 1;
7610         } else if (cur1 == cur2) {
7611             cmp = 0;
7612         } else {
7613             cmp = cur1 < cur2 ? -1 : 1;
7614         }
7615     }
7616
7617     SvREFCNT_dec(svrecode);
7618
7619     return cmp;
7620 }
7621
7622 /*
7623 =for apidoc sv_cmp_locale
7624
7625 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7626 'use bytes' aware, handles get magic, and will coerce its args to strings
7627 if necessary.  See also C<sv_cmp>.
7628
7629 =for apidoc sv_cmp_locale_flags
7630
7631 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7632 'use bytes' aware and will coerce its args to strings if necessary.  If the
7633 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7634
7635 =cut
7636 */
7637
7638 I32
7639 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7640 {
7641     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7642 }
7643
7644 I32
7645 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7646                          const U32 flags)
7647 {
7648     dVAR;
7649 #ifdef USE_LOCALE_COLLATE
7650
7651     char *pv1, *pv2;
7652     STRLEN len1, len2;
7653     I32 retval;
7654
7655     if (PL_collation_standard)
7656         goto raw_compare;
7657
7658     len1 = 0;
7659     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7660     len2 = 0;
7661     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7662
7663     if (!pv1 || !len1) {
7664         if (pv2 && len2)
7665             return -1;
7666         else
7667             goto raw_compare;
7668     }
7669     else {
7670         if (!pv2 || !len2)
7671             return 1;
7672     }
7673
7674     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7675
7676     if (retval)
7677         return retval < 0 ? -1 : 1;
7678
7679     /*
7680      * When the result of collation is equality, that doesn't mean
7681      * that there are no differences -- some locales exclude some
7682      * characters from consideration.  So to avoid false equalities,
7683      * we use the raw string as a tiebreaker.
7684      */
7685
7686   raw_compare:
7687     /*FALLTHROUGH*/
7688
7689 #endif /* USE_LOCALE_COLLATE */
7690
7691     return sv_cmp(sv1, sv2);
7692 }
7693
7694
7695 #ifdef USE_LOCALE_COLLATE
7696
7697 /*
7698 =for apidoc sv_collxfrm
7699
7700 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7701 C<sv_collxfrm_flags>.
7702
7703 =for apidoc sv_collxfrm_flags
7704
7705 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7706 flags contain SV_GMAGIC, it handles get-magic.
7707
7708 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7709 scalar data of the variable, but transformed to such a format that a normal
7710 memory comparison can be used to compare the data according to the locale
7711 settings.
7712
7713 =cut
7714 */
7715
7716 char *
7717 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7718 {
7719     dVAR;
7720     MAGIC *mg;
7721
7722     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7723
7724     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7725     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7726         const char *s;
7727         char *xf;
7728         STRLEN len, xlen;
7729
7730         if (mg)
7731             Safefree(mg->mg_ptr);
7732         s = SvPV_flags_const(sv, len, flags);
7733         if ((xf = mem_collxfrm(s, len, &xlen))) {
7734             if (! mg) {
7735 #ifdef PERL_OLD_COPY_ON_WRITE
7736                 if (SvIsCOW(sv))
7737                     sv_force_normal_flags(sv, 0);
7738 #endif
7739                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7740                                  0, 0);
7741                 assert(mg);
7742             }
7743             mg->mg_ptr = xf;
7744             mg->mg_len = xlen;
7745         }
7746         else {
7747             if (mg) {
7748                 mg->mg_ptr = NULL;
7749                 mg->mg_len = -1;
7750             }
7751         }
7752     }
7753     if (mg && mg->mg_ptr) {
7754         *nxp = mg->mg_len;
7755         return mg->mg_ptr + sizeof(PL_collation_ix);
7756     }
7757     else {
7758         *nxp = 0;
7759         return NULL;
7760     }
7761 }
7762
7763 #endif /* USE_LOCALE_COLLATE */
7764
7765 static char *
7766 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7767 {
7768     SV * const tsv = newSV(0);
7769     ENTER;
7770     SAVEFREESV(tsv);
7771     sv_gets(tsv, fp, 0);
7772     sv_utf8_upgrade_nomg(tsv);
7773     SvCUR_set(sv,append);
7774     sv_catsv(sv,tsv);
7775     LEAVE;
7776     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7777 }
7778
7779 static char *
7780 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7781 {
7782     SSize_t bytesread;
7783     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7784       /* Grab the size of the record we're getting */
7785     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7786     
7787     /* Go yank in */
7788 #ifdef VMS
7789 #include <rms.h>
7790     int fd;
7791     Stat_t st;
7792
7793     /* With a true, record-oriented file on VMS, we need to use read directly
7794      * to ensure that we respect RMS record boundaries.  The user is responsible
7795      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7796      * record size) field.  N.B. This is likely to produce invalid results on
7797      * varying-width character data when a record ends mid-character.
7798      */
7799     fd = PerlIO_fileno(fp);
7800     if (fd != -1
7801         && PerlLIO_fstat(fd, &st) == 0
7802         && (st.st_fab_rfm == FAB$C_VAR
7803             || st.st_fab_rfm == FAB$C_VFC
7804             || st.st_fab_rfm == FAB$C_FIX)) {
7805
7806         bytesread = PerlLIO_read(fd, buffer, recsize);
7807     }
7808     else /* in-memory file from PerlIO::Scalar
7809           * or not a record-oriented file
7810           */
7811 #endif
7812     {
7813         bytesread = PerlIO_read(fp, buffer, recsize);
7814
7815         /* At this point, the logic in sv_get() means that sv will
7816            be treated as utf-8 if the handle is utf8.
7817         */
7818         if (PerlIO_isutf8(fp) && bytesread > 0) {
7819             char *bend = buffer + bytesread;
7820             char *bufp = buffer;
7821             size_t charcount = 0;
7822             bool charstart = TRUE;
7823             STRLEN skip = 0;
7824
7825             while (charcount < recsize) {
7826                 /* count accumulated characters */
7827                 while (bufp < bend) {
7828                     if (charstart) {
7829                         skip = UTF8SKIP(bufp);
7830                     }
7831                     if (bufp + skip > bend) {
7832                         /* partial at the end */
7833                         charstart = FALSE;
7834                         break;
7835                     }
7836                     else {
7837                         ++charcount;
7838                         bufp += skip;
7839                         charstart = TRUE;
7840                     }
7841                 }
7842
7843                 if (charcount < recsize) {
7844                     STRLEN readsize;
7845                     STRLEN bufp_offset = bufp - buffer;
7846                     SSize_t morebytesread;
7847
7848                     /* originally I read enough to fill any incomplete
7849                        character and the first byte of the next
7850                        character if needed, but if there's many
7851                        multi-byte encoded characters we're going to be
7852                        making a read call for every character beyond
7853                        the original read size.
7854
7855                        So instead, read the rest of the character if
7856                        any, and enough bytes to match at least the
7857                        start bytes for each character we're going to
7858                        read.
7859                     */
7860                     if (charstart)
7861                         readsize = recsize - charcount;
7862                     else 
7863                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7864                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7865                     bend = buffer + bytesread;
7866                     morebytesread = PerlIO_read(fp, bend, readsize);
7867                     if (morebytesread <= 0) {
7868                         /* we're done, if we still have incomplete
7869                            characters the check code in sv_gets() will
7870                            warn about them.
7871
7872                            I'd originally considered doing
7873                            PerlIO_ungetc() on all but the lead
7874                            character of the incomplete character, but
7875                            read() doesn't do that, so I don't.
7876                         */
7877                         break;
7878                     }
7879
7880                     /* prepare to scan some more */
7881                     bytesread += morebytesread;
7882                     bend = buffer + bytesread;
7883                     bufp = buffer + bufp_offset;
7884                 }
7885             }
7886         }
7887     }
7888
7889     if (bytesread < 0)
7890         bytesread = 0;
7891     SvCUR_set(sv, bytesread + append);
7892     buffer[bytesread] = '\0';
7893     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7894 }
7895
7896 /*
7897 =for apidoc sv_gets
7898
7899 Get a line from the filehandle and store it into the SV, optionally
7900 appending to the currently-stored string. If C<append> is not 0, the
7901 line is appended to the SV instead of overwriting it. C<append> should
7902 be set to the byte offset that the appended string should start at
7903 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7904
7905 =cut
7906 */
7907
7908 char *
7909 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7910 {
7911     dVAR;
7912     const char *rsptr;
7913     STRLEN rslen;
7914     STDCHAR rslast;
7915     STDCHAR *bp;
7916     I32 cnt;
7917     I32 i = 0;
7918     I32 rspara = 0;
7919
7920     PERL_ARGS_ASSERT_SV_GETS;
7921
7922     if (SvTHINKFIRST(sv))
7923         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7924     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7925        from <>.
7926        However, perlbench says it's slower, because the existing swipe code
7927        is faster than copy on write.
7928        Swings and roundabouts.  */
7929     SvUPGRADE(sv, SVt_PV);
7930
7931     if (append) {
7932         if (PerlIO_isutf8(fp)) {
7933             if (!SvUTF8(sv)) {
7934                 sv_utf8_upgrade_nomg(sv);
7935                 sv_pos_u2b(sv,&append,0);
7936             }
7937         } else if (SvUTF8(sv)) {
7938             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7939         }
7940     }
7941
7942     SvPOK_only(sv);
7943     if (!append) {
7944         SvCUR_set(sv,0);
7945     }
7946     if (PerlIO_isutf8(fp))
7947         SvUTF8_on(sv);
7948
7949     if (IN_PERL_COMPILETIME) {
7950         /* we always read code in line mode */
7951         rsptr = "\n";
7952         rslen = 1;
7953     }
7954     else if (RsSNARF(PL_rs)) {
7955         /* If it is a regular disk file use size from stat() as estimate
7956            of amount we are going to read -- may result in mallocing
7957            more memory than we really need if the layers below reduce
7958            the size we read (e.g. CRLF or a gzip layer).
7959          */
7960         Stat_t st;
7961         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7962             const Off_t offset = PerlIO_tell(fp);
7963             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7964                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7965             }
7966         }
7967         rsptr = NULL;
7968         rslen = 0;
7969     }
7970     else if (RsRECORD(PL_rs)) {
7971         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7972     }
7973     else if (RsPARA(PL_rs)) {
7974         rsptr = "\n\n";
7975         rslen = 2;
7976         rspara = 1;
7977     }
7978     else {
7979         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7980         if (PerlIO_isutf8(fp)) {
7981             rsptr = SvPVutf8(PL_rs, rslen);
7982         }
7983         else {
7984             if (SvUTF8(PL_rs)) {
7985                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7986                     Perl_croak(aTHX_ "Wide character in $/");
7987                 }
7988             }
7989             rsptr = SvPV_const(PL_rs, rslen);
7990         }
7991     }
7992
7993     rslast = rslen ? rsptr[rslen - 1] : '\0';
7994
7995     if (rspara) {               /* have to do this both before and after */
7996         do {                    /* to make sure file boundaries work right */
7997             if (PerlIO_eof(fp))
7998                 return 0;
7999             i = PerlIO_getc(fp);
8000             if (i != '\n') {
8001                 if (i == -1)
8002                     return 0;
8003                 PerlIO_ungetc(fp,i);
8004                 break;
8005             }
8006         } while (i != EOF);
8007     }
8008
8009     /* See if we know enough about I/O mechanism to cheat it ! */
8010
8011     /* This used to be #ifdef test - it is made run-time test for ease
8012        of abstracting out stdio interface. One call should be cheap
8013        enough here - and may even be a macro allowing compile
8014        time optimization.
8015      */
8016
8017     if (PerlIO_fast_gets(fp)) {
8018
8019     /*
8020      * We're going to steal some values from the stdio struct
8021      * and put EVERYTHING in the innermost loop into registers.
8022      */
8023     STDCHAR *ptr;
8024     STRLEN bpx;
8025     I32 shortbuffered;
8026
8027 #if defined(VMS) && defined(PERLIO_IS_STDIO)
8028     /* An ungetc()d char is handled separately from the regular
8029      * buffer, so we getc() it back out and stuff it in the buffer.
8030      */
8031     i = PerlIO_getc(fp);
8032     if (i == EOF) return 0;
8033     *(--((*fp)->_ptr)) = (unsigned char) i;
8034     (*fp)->_cnt++;
8035 #endif
8036
8037     /* Here is some breathtakingly efficient cheating */
8038
8039     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
8040     /* make sure we have the room */
8041     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8042         /* Not room for all of it
8043            if we are looking for a separator and room for some
8044          */
8045         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8046             /* just process what we have room for */
8047             shortbuffered = cnt - SvLEN(sv) + append + 1;
8048             cnt -= shortbuffered;
8049         }
8050         else {
8051             shortbuffered = 0;
8052             /* remember that cnt can be negative */
8053             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8054         }
8055     }
8056     else
8057         shortbuffered = 0;
8058     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8059     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8060     DEBUG_P(PerlIO_printf(Perl_debug_log,
8061         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8062     DEBUG_P(PerlIO_printf(Perl_debug_log,
8063         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8064                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8065                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8066     for (;;) {
8067       screamer:
8068         if (cnt > 0) {
8069             if (rslen) {
8070                 while (cnt > 0) {                    /* this     |  eat */
8071                     cnt--;
8072                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8073                         goto thats_all_folks;        /* screams  |  sed :-) */
8074                 }
8075             }
8076             else {
8077                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8078                 bp += cnt;                           /* screams  |  dust */
8079                 ptr += cnt;                          /* louder   |  sed :-) */
8080                 cnt = 0;
8081                 assert (!shortbuffered);
8082                 goto cannot_be_shortbuffered;
8083             }
8084         }
8085         
8086         if (shortbuffered) {            /* oh well, must extend */
8087             cnt = shortbuffered;
8088             shortbuffered = 0;
8089             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8090             SvCUR_set(sv, bpx);
8091             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8092             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8093             continue;
8094         }
8095
8096     cannot_be_shortbuffered:
8097         DEBUG_P(PerlIO_printf(Perl_debug_log,
8098                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
8099                               PTR2UV(ptr),(long)cnt));
8100         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8101
8102         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8103             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8104             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8105             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8106
8107         /* This used to call 'filbuf' in stdio form, but as that behaves like
8108            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8109            another abstraction.  */
8110         i   = PerlIO_getc(fp);          /* get more characters */
8111
8112         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8113             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8114             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8115             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8116
8117         cnt = PerlIO_get_cnt(fp);
8118         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8119         DEBUG_P(PerlIO_printf(Perl_debug_log,
8120             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8121
8122         if (i == EOF)                   /* all done for ever? */
8123             goto thats_really_all_folks;
8124
8125         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8126         SvCUR_set(sv, bpx);
8127         SvGROW(sv, bpx + cnt + 2);
8128         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8129
8130         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8131
8132         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8133             goto thats_all_folks;
8134     }
8135
8136 thats_all_folks:
8137     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8138           memNE((char*)bp - rslen, rsptr, rslen))
8139         goto screamer;                          /* go back to the fray */
8140 thats_really_all_folks:
8141     if (shortbuffered)
8142         cnt += shortbuffered;
8143         DEBUG_P(PerlIO_printf(Perl_debug_log,
8144             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8145     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8146     DEBUG_P(PerlIO_printf(Perl_debug_log,
8147         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8148         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8149         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8150     *bp = '\0';
8151     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8152     DEBUG_P(PerlIO_printf(Perl_debug_log,
8153         "Screamer: done, len=%ld, string=|%.*s|\n",
8154         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8155     }
8156    else
8157     {
8158        /*The big, slow, and stupid way. */
8159 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8160         STDCHAR *buf = NULL;
8161         Newx(buf, 8192, STDCHAR);
8162         assert(buf);
8163 #else
8164         STDCHAR buf[8192];
8165 #endif
8166
8167 screamer2:
8168         if (rslen) {
8169             const STDCHAR * const bpe = buf + sizeof(buf);
8170             bp = buf;
8171             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8172                 ; /* keep reading */
8173             cnt = bp - buf;
8174         }
8175         else {
8176             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8177             /* Accommodate broken VAXC compiler, which applies U8 cast to
8178              * both args of ?: operator, causing EOF to change into 255
8179              */
8180             if (cnt > 0)
8181                  i = (U8)buf[cnt - 1];
8182             else
8183                  i = EOF;
8184         }
8185
8186         if (cnt < 0)
8187             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8188         if (append)
8189             sv_catpvn_nomg(sv, (char *) buf, cnt);
8190         else
8191             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8192
8193         if (i != EOF &&                 /* joy */
8194             (!rslen ||
8195              SvCUR(sv) < rslen ||
8196              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8197         {
8198             append = -1;
8199             /*
8200              * If we're reading from a TTY and we get a short read,
8201              * indicating that the user hit his EOF character, we need
8202              * to notice it now, because if we try to read from the TTY
8203              * again, the EOF condition will disappear.
8204              *
8205              * The comparison of cnt to sizeof(buf) is an optimization
8206              * that prevents unnecessary calls to feof().
8207              *
8208              * - jik 9/25/96
8209              */
8210             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8211                 goto screamer2;
8212         }
8213
8214 #ifdef USE_HEAP_INSTEAD_OF_STACK
8215         Safefree(buf);
8216 #endif
8217     }
8218
8219     if (rspara) {               /* have to do this both before and after */
8220         while (i != EOF) {      /* to make sure file boundaries work right */
8221             i = PerlIO_getc(fp);
8222             if (i != '\n') {
8223                 PerlIO_ungetc(fp,i);
8224                 break;
8225             }
8226         }
8227     }
8228
8229     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8230 }
8231
8232 /*
8233 =for apidoc sv_inc
8234
8235 Auto-increment of the value in the SV, doing string to numeric conversion
8236 if necessary.  Handles 'get' magic and operator overloading.
8237
8238 =cut
8239 */
8240
8241 void
8242 Perl_sv_inc(pTHX_ SV *const sv)
8243 {
8244     if (!sv)
8245         return;
8246     SvGETMAGIC(sv);
8247     sv_inc_nomg(sv);
8248 }
8249
8250 /*
8251 =for apidoc sv_inc_nomg
8252
8253 Auto-increment of the value in the SV, doing string to numeric conversion
8254 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8255
8256 =cut
8257 */
8258
8259 void
8260 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8261 {
8262     dVAR;
8263     char *d;
8264     int flags;
8265
8266     if (!sv)
8267         return;
8268     if (SvTHINKFIRST(sv)) {
8269         if (SvIsCOW(sv) || isGV_with_GP(sv))
8270             sv_force_normal_flags(sv, 0);
8271         if (SvREADONLY(sv)) {
8272             if (IN_PERL_RUNTIME)
8273                 Perl_croak_no_modify();
8274         }
8275         if (SvROK(sv)) {
8276             IV i;
8277             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8278                 return;
8279             i = PTR2IV(SvRV(sv));
8280             sv_unref(sv);
8281             sv_setiv(sv, i);
8282         }
8283     }
8284     flags = SvFLAGS(sv);
8285     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8286         /* It's (privately or publicly) a float, but not tested as an
8287            integer, so test it to see. */
8288         (void) SvIV(sv);
8289         flags = SvFLAGS(sv);
8290     }
8291     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8292         /* It's publicly an integer, or privately an integer-not-float */
8293 #ifdef PERL_PRESERVE_IVUV
8294       oops_its_int:
8295 #endif
8296         if (SvIsUV(sv)) {
8297             if (SvUVX(sv) == UV_MAX)
8298                 sv_setnv(sv, UV_MAX_P1);
8299             else
8300                 (void)SvIOK_only_UV(sv);
8301                 SvUV_set(sv, SvUVX(sv) + 1);
8302         } else {
8303             if (SvIVX(sv) == IV_MAX)
8304                 sv_setuv(sv, (UV)IV_MAX + 1);
8305             else {
8306                 (void)SvIOK_only(sv);
8307                 SvIV_set(sv, SvIVX(sv) + 1);
8308             }   
8309         }
8310         return;
8311     }
8312     if (flags & SVp_NOK) {
8313         const NV was = SvNVX(sv);
8314         if (NV_OVERFLOWS_INTEGERS_AT &&
8315             was >= NV_OVERFLOWS_INTEGERS_AT) {
8316             /* diag_listed_as: Lost precision when %s %f by 1 */
8317             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8318                            "Lost precision when incrementing %" NVff " by 1",
8319                            was);
8320         }
8321         (void)SvNOK_only(sv);
8322         SvNV_set(sv, was + 1.0);
8323         return;
8324     }
8325
8326     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8327         if ((flags & SVTYPEMASK) < SVt_PVIV)
8328             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8329         (void)SvIOK_only(sv);
8330         SvIV_set(sv, 1);
8331         return;
8332     }
8333     d = SvPVX(sv);
8334     while (isALPHA(*d)) d++;
8335     while (isDIGIT(*d)) d++;
8336     if (d < SvEND(sv)) {
8337 #ifdef PERL_PRESERVE_IVUV
8338         /* Got to punt this as an integer if needs be, but we don't issue
8339            warnings. Probably ought to make the sv_iv_please() that does
8340            the conversion if possible, and silently.  */
8341         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8342         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8343             /* Need to try really hard to see if it's an integer.
8344                9.22337203685478e+18 is an integer.
8345                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8346                so $a="9.22337203685478e+18"; $a+0; $a++
8347                needs to be the same as $a="9.22337203685478e+18"; $a++
8348                or we go insane. */
8349         
8350             (void) sv_2iv(sv);
8351             if (SvIOK(sv))
8352                 goto oops_its_int;
8353
8354             /* sv_2iv *should* have made this an NV */
8355             if (flags & SVp_NOK) {
8356                 (void)SvNOK_only(sv);
8357                 SvNV_set(sv, SvNVX(sv) + 1.0);
8358                 return;
8359             }
8360             /* I don't think we can get here. Maybe I should assert this
8361                And if we do get here I suspect that sv_setnv will croak. NWC
8362                Fall through. */
8363 #if defined(USE_LONG_DOUBLE)
8364             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",
8365                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8366 #else
8367             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8368                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8369 #endif
8370         }
8371 #endif /* PERL_PRESERVE_IVUV */
8372         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8373         return;
8374     }
8375     d--;
8376     while (d >= SvPVX_const(sv)) {
8377         if (isDIGIT(*d)) {
8378             if (++*d <= '9')
8379                 return;
8380             *(d--) = '0';
8381         }
8382         else {
8383 #ifdef EBCDIC
8384             /* MKS: The original code here died if letters weren't consecutive.
8385              * at least it didn't have to worry about non-C locales.  The
8386              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8387              * arranged in order (although not consecutively) and that only
8388              * [A-Za-z] are accepted by isALPHA in the C locale.
8389              */
8390             if (*d != 'z' && *d != 'Z') {
8391                 do { ++*d; } while (!isALPHA(*d));
8392                 return;
8393             }
8394             *(d--) -= 'z' - 'a';
8395 #else
8396             ++*d;
8397             if (isALPHA(*d))
8398                 return;
8399             *(d--) -= 'z' - 'a' + 1;
8400 #endif
8401         }
8402     }
8403     /* oh,oh, the number grew */
8404     SvGROW(sv, SvCUR(sv) + 2);
8405     SvCUR_set(sv, SvCUR(sv) + 1);
8406     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8407         *d = d[-1];
8408     if (isDIGIT(d[1]))
8409         *d = '1';
8410     else
8411         *d = d[1];
8412 }
8413
8414 /*
8415 =for apidoc sv_dec
8416
8417 Auto-decrement of the value in the SV, doing string to numeric conversion
8418 if necessary.  Handles 'get' magic and operator overloading.
8419
8420 =cut
8421 */
8422
8423 void
8424 Perl_sv_dec(pTHX_ SV *const sv)
8425 {
8426     dVAR;
8427     if (!sv)
8428         return;
8429     SvGETMAGIC(sv);
8430     sv_dec_nomg(sv);
8431 }
8432
8433 /*
8434 =for apidoc sv_dec_nomg
8435
8436 Auto-decrement of the value in the SV, doing string to numeric conversion
8437 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8438
8439 =cut
8440 */
8441
8442 void
8443 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8444 {
8445     dVAR;
8446     int flags;
8447
8448     if (!sv)
8449         return;
8450     if (SvTHINKFIRST(sv)) {
8451         if (SvIsCOW(sv) || isGV_with_GP(sv))
8452             sv_force_normal_flags(sv, 0);
8453         if (SvREADONLY(sv)) {
8454             if (IN_PERL_RUNTIME)
8455                 Perl_croak_no_modify();
8456         }
8457         if (SvROK(sv)) {
8458             IV i;
8459             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8460                 return;
8461             i = PTR2IV(SvRV(sv));
8462             sv_unref(sv);
8463             sv_setiv(sv, i);
8464         }
8465     }
8466     /* Unlike sv_inc we don't have to worry about string-never-numbers
8467        and keeping them magic. But we mustn't warn on punting */
8468     flags = SvFLAGS(sv);
8469     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8470         /* It's publicly an integer, or privately an integer-not-float */
8471 #ifdef PERL_PRESERVE_IVUV
8472       oops_its_int:
8473 #endif
8474         if (SvIsUV(sv)) {
8475             if (SvUVX(sv) == 0) {
8476                 (void)SvIOK_only(sv);
8477                 SvIV_set(sv, -1);
8478             }
8479             else {
8480                 (void)SvIOK_only_UV(sv);
8481                 SvUV_set(sv, SvUVX(sv) - 1);
8482             }   
8483         } else {
8484             if (SvIVX(sv) == IV_MIN) {
8485                 sv_setnv(sv, (NV)IV_MIN);
8486                 goto oops_its_num;
8487             }
8488             else {
8489                 (void)SvIOK_only(sv);
8490                 SvIV_set(sv, SvIVX(sv) - 1);
8491             }   
8492         }
8493         return;
8494     }
8495     if (flags & SVp_NOK) {
8496     oops_its_num:
8497         {
8498             const NV was = SvNVX(sv);
8499             if (NV_OVERFLOWS_INTEGERS_AT &&
8500                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8501                 /* diag_listed_as: Lost precision when %s %f by 1 */
8502                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8503                                "Lost precision when decrementing %" NVff " by 1",
8504                                was);
8505             }
8506             (void)SvNOK_only(sv);
8507             SvNV_set(sv, was - 1.0);
8508             return;
8509         }
8510     }
8511     if (!(flags & SVp_POK)) {
8512         if ((flags & SVTYPEMASK) < SVt_PVIV)
8513             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8514         SvIV_set(sv, -1);
8515         (void)SvIOK_only(sv);
8516         return;
8517     }
8518 #ifdef PERL_PRESERVE_IVUV
8519     {
8520         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8521         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8522             /* Need to try really hard to see if it's an integer.
8523                9.22337203685478e+18 is an integer.
8524                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8525                so $a="9.22337203685478e+18"; $a+0; $a--
8526                needs to be the same as $a="9.22337203685478e+18"; $a--
8527                or we go insane. */
8528         
8529             (void) sv_2iv(sv);
8530             if (SvIOK(sv))
8531                 goto oops_its_int;
8532
8533             /* sv_2iv *should* have made this an NV */
8534             if (flags & SVp_NOK) {
8535                 (void)SvNOK_only(sv);
8536                 SvNV_set(sv, SvNVX(sv) - 1.0);
8537                 return;
8538             }
8539             /* I don't think we can get here. Maybe I should assert this
8540                And if we do get here I suspect that sv_setnv will croak. NWC
8541                Fall through. */
8542 #if defined(USE_LONG_DOUBLE)
8543             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",
8544                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8545 #else
8546             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8547                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8548 #endif
8549         }
8550     }
8551 #endif /* PERL_PRESERVE_IVUV */
8552     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8553 }
8554
8555 /* this define is used to eliminate a chunk of duplicated but shared logic
8556  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8557  * used anywhere but here - yves
8558  */
8559 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8560     STMT_START {      \
8561         EXTEND_MORTAL(1); \
8562         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8563     } STMT_END
8564
8565 /*
8566 =for apidoc sv_mortalcopy
8567
8568 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8569 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8570 explicit call to FREETMPS, or by an implicit call at places such as
8571 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8572
8573 =cut
8574 */
8575
8576 /* Make a string that will exist for the duration of the expression
8577  * evaluation.  Actually, it may have to last longer than that, but
8578  * hopefully we won't free it until it has been assigned to a
8579  * permanent location. */
8580
8581 SV *
8582 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8583 {
8584     dVAR;
8585     SV *sv;
8586
8587     if (flags & SV_GMAGIC)
8588         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8589     new_SV(sv);
8590     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8591     PUSH_EXTEND_MORTAL__SV_C(sv);
8592     SvTEMP_on(sv);
8593     return sv;
8594 }
8595
8596 /*
8597 =for apidoc sv_newmortal
8598
8599 Creates a new null SV which is mortal.  The reference count of the SV is
8600 set to 1.  It will be destroyed "soon", either by an explicit call to
8601 FREETMPS, or by an implicit call at places such as statement boundaries.
8602 See also C<sv_mortalcopy> and C<sv_2mortal>.
8603
8604 =cut
8605 */
8606
8607 SV *
8608 Perl_sv_newmortal(pTHX)
8609 {
8610     dVAR;
8611     SV *sv;
8612
8613     new_SV(sv);
8614     SvFLAGS(sv) = SVs_TEMP;
8615     PUSH_EXTEND_MORTAL__SV_C(sv);
8616     return sv;
8617 }
8618
8619
8620 /*
8621 =for apidoc newSVpvn_flags
8622
8623 Creates a new SV and copies a string into it.  The reference count for the
8624 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8625 string.  You are responsible for ensuring that the source string is at least
8626 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8627 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8628 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8629 returning.  If C<SVf_UTF8> is set, C<s>
8630 is considered to be in UTF-8 and the
8631 C<SVf_UTF8> flag will be set on the new SV.
8632 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8633
8634     #define newSVpvn_utf8(s, len, u)                    \
8635         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8636
8637 =cut
8638 */
8639
8640 SV *
8641 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8642 {
8643     dVAR;
8644     SV *sv;
8645
8646     /* All the flags we don't support must be zero.
8647        And we're new code so I'm going to assert this from the start.  */
8648     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8649     new_SV(sv);
8650     sv_setpvn(sv,s,len);
8651
8652     /* This code used to do a sv_2mortal(), however we now unroll the call to
8653      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8654      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8655      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8656      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8657      * means that we eliminate quite a few steps than it looks - Yves
8658      * (explaining patch by gfx) */
8659
8660     SvFLAGS(sv) |= flags;
8661
8662     if(flags & SVs_TEMP){
8663         PUSH_EXTEND_MORTAL__SV_C(sv);
8664     }
8665
8666     return sv;
8667 }
8668
8669 /*
8670 =for apidoc sv_2mortal
8671
8672 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8673 by an explicit call to FREETMPS, or by an implicit call at places such as
8674 statement boundaries.  SvTEMP() is turned on which means that the SV's
8675 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8676 and C<sv_mortalcopy>.
8677
8678 =cut
8679 */
8680
8681 SV *
8682 Perl_sv_2mortal(pTHX_ SV *const sv)
8683 {
8684     dVAR;
8685     if (!sv)
8686         return NULL;
8687     if (SvIMMORTAL(sv))
8688         return sv;
8689     PUSH_EXTEND_MORTAL__SV_C(sv);
8690     SvTEMP_on(sv);
8691     return sv;
8692 }
8693
8694 /*
8695 =for apidoc newSVpv
8696
8697 Creates a new SV and copies a string into it.  The reference count for the
8698 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8699 strlen().  For efficiency, consider using C<newSVpvn> instead.
8700
8701 =cut
8702 */
8703
8704 SV *
8705 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8706 {
8707     dVAR;
8708     SV *sv;
8709
8710     new_SV(sv);
8711     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8712     return sv;
8713 }
8714
8715 /*
8716 =for apidoc newSVpvn
8717
8718 Creates a new SV and copies a buffer into it, which may contain NUL characters
8719 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8720 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8721 are responsible for ensuring that the source buffer is at least
8722 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8723 undefined.
8724
8725 =cut
8726 */
8727
8728 SV *
8729 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8730 {
8731     dVAR;
8732     SV *sv;
8733
8734     new_SV(sv);
8735     sv_setpvn(sv,buffer,len);
8736     return sv;
8737 }
8738
8739 /*
8740 =for apidoc newSVhek
8741
8742 Creates a new SV from the hash key structure.  It will generate scalars that
8743 point to the shared string table where possible.  Returns a new (undefined)
8744 SV if the hek is NULL.
8745
8746 =cut
8747 */
8748
8749 SV *
8750 Perl_newSVhek(pTHX_ const HEK *const hek)
8751 {
8752     dVAR;
8753     if (!hek) {
8754         SV *sv;
8755
8756         new_SV(sv);
8757         return sv;
8758     }
8759
8760     if (HEK_LEN(hek) == HEf_SVKEY) {
8761         return newSVsv(*(SV**)HEK_KEY(hek));
8762     } else {
8763         const int flags = HEK_FLAGS(hek);
8764         if (flags & HVhek_WASUTF8) {
8765             /* Trouble :-)
8766                Andreas would like keys he put in as utf8 to come back as utf8
8767             */
8768             STRLEN utf8_len = HEK_LEN(hek);
8769             SV * const sv = newSV_type(SVt_PV);
8770             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8771             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8772             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8773             SvUTF8_on (sv);
8774             return sv;
8775         } else if (flags & HVhek_UNSHARED) {
8776             /* A hash that isn't using shared hash keys has to have
8777                the flag in every key so that we know not to try to call
8778                share_hek_hek on it.  */
8779
8780             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8781             if (HEK_UTF8(hek))
8782                 SvUTF8_on (sv);
8783             return sv;
8784         }
8785         /* This will be overwhelminly the most common case.  */
8786         {
8787             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8788                more efficient than sharepvn().  */
8789             SV *sv;
8790
8791             new_SV(sv);
8792             sv_upgrade(sv, SVt_PV);
8793             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8794             SvCUR_set(sv, HEK_LEN(hek));
8795             SvLEN_set(sv, 0);
8796             SvIsCOW_on(sv);
8797             SvPOK_on(sv);
8798             if (HEK_UTF8(hek))
8799                 SvUTF8_on(sv);
8800             return sv;
8801         }
8802     }
8803 }
8804
8805 /*
8806 =for apidoc newSVpvn_share
8807
8808 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8809 table.  If the string does not already exist in the table, it is
8810 created first.  Turns on the SvIsCOW flag (or READONLY
8811 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8812 is non-zero, that value is used; otherwise the hash is computed.
8813 The string's hash can later be retrieved from the SV
8814 with the C<SvSHARED_HASH()> macro.  The idea here is
8815 that as the string table is used for shared hash keys these strings will have
8816 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8817
8818 =cut
8819 */
8820
8821 SV *
8822 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8823 {
8824     dVAR;
8825     SV *sv;
8826     bool is_utf8 = FALSE;
8827     const char *const orig_src = src;
8828
8829     if (len < 0) {
8830         STRLEN tmplen = -len;
8831         is_utf8 = TRUE;
8832         /* See the note in hv.c:hv_fetch() --jhi */
8833         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8834         len = tmplen;
8835     }
8836     if (!hash)
8837         PERL_HASH(hash, src, len);
8838     new_SV(sv);
8839     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8840        changes here, update it there too.  */
8841     sv_upgrade(sv, SVt_PV);
8842     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8843     SvCUR_set(sv, len);
8844     SvLEN_set(sv, 0);
8845     SvIsCOW_on(sv);
8846     SvPOK_on(sv);
8847     if (is_utf8)
8848         SvUTF8_on(sv);
8849     if (src != orig_src)
8850         Safefree(src);
8851     return sv;
8852 }
8853
8854 /*
8855 =for apidoc newSVpv_share
8856
8857 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8858 string/length pair.
8859
8860 =cut
8861 */
8862
8863 SV *
8864 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8865 {
8866     return newSVpvn_share(src, strlen(src), hash);
8867 }
8868
8869 #if defined(PERL_IMPLICIT_CONTEXT)
8870
8871 /* pTHX_ magic can't cope with varargs, so this is a no-context
8872  * version of the main function, (which may itself be aliased to us).
8873  * Don't access this version directly.
8874  */
8875
8876 SV *
8877 Perl_newSVpvf_nocontext(const char *const pat, ...)
8878 {
8879     dTHX;
8880     SV *sv;
8881     va_list args;
8882
8883     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8884
8885     va_start(args, pat);
8886     sv = vnewSVpvf(pat, &args);
8887     va_end(args);
8888     return sv;
8889 }
8890 #endif
8891
8892 /*
8893 =for apidoc newSVpvf
8894
8895 Creates a new SV and initializes it with the string formatted like
8896 C<sprintf>.
8897
8898 =cut
8899 */
8900
8901 SV *
8902 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8903 {
8904     SV *sv;
8905     va_list args;
8906
8907     PERL_ARGS_ASSERT_NEWSVPVF;
8908
8909     va_start(args, pat);
8910     sv = vnewSVpvf(pat, &args);
8911     va_end(args);
8912     return sv;
8913 }
8914
8915 /* backend for newSVpvf() and newSVpvf_nocontext() */
8916
8917 SV *
8918 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8919 {
8920     dVAR;
8921     SV *sv;
8922
8923     PERL_ARGS_ASSERT_VNEWSVPVF;
8924
8925     new_SV(sv);
8926     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8927     return sv;
8928 }
8929
8930 /*
8931 =for apidoc newSVnv
8932
8933 Creates a new SV and copies a floating point value into it.
8934 The reference count for the SV is set to 1.
8935
8936 =cut
8937 */
8938
8939 SV *
8940 Perl_newSVnv(pTHX_ const NV n)
8941 {
8942     dVAR;
8943     SV *sv;
8944
8945     new_SV(sv);
8946     sv_setnv(sv,n);
8947     return sv;
8948 }
8949
8950 /*
8951 =for apidoc newSViv
8952
8953 Creates a new SV and copies an integer into it.  The reference count for the
8954 SV is set to 1.
8955
8956 =cut
8957 */
8958
8959 SV *
8960 Perl_newSViv(pTHX_ const IV i)
8961 {
8962     dVAR;
8963     SV *sv;
8964
8965     new_SV(sv);
8966     sv_setiv(sv,i);
8967     return sv;
8968 }
8969
8970 /*
8971 =for apidoc newSVuv
8972
8973 Creates a new SV and copies an unsigned integer into it.
8974 The reference count for the SV is set to 1.
8975
8976 =cut
8977 */
8978
8979 SV *
8980 Perl_newSVuv(pTHX_ const UV u)
8981 {
8982     dVAR;
8983     SV *sv;
8984
8985     new_SV(sv);
8986     sv_setuv(sv,u);
8987     return sv;
8988 }
8989
8990 /*
8991 =for apidoc newSV_type
8992
8993 Creates a new SV, of the type specified.  The reference count for the new SV
8994 is set to 1.
8995
8996 =cut
8997 */
8998
8999 SV *
9000 Perl_newSV_type(pTHX_ const svtype type)
9001 {
9002     SV *sv;
9003
9004     new_SV(sv);
9005     sv_upgrade(sv, type);
9006     return sv;
9007 }
9008
9009 /*
9010 =for apidoc newRV_noinc
9011
9012 Creates an RV wrapper for an SV.  The reference count for the original
9013 SV is B<not> incremented.
9014
9015 =cut
9016 */
9017
9018 SV *
9019 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9020 {
9021     dVAR;
9022     SV *sv = newSV_type(SVt_IV);
9023
9024     PERL_ARGS_ASSERT_NEWRV_NOINC;
9025
9026     SvTEMP_off(tmpRef);
9027     SvRV_set(sv, tmpRef);
9028     SvROK_on(sv);
9029     return sv;
9030 }
9031
9032 /* newRV_inc is the official function name to use now.
9033  * newRV_inc is in fact #defined to newRV in sv.h
9034  */
9035
9036 SV *
9037 Perl_newRV(pTHX_ SV *const sv)
9038 {
9039     dVAR;
9040
9041     PERL_ARGS_ASSERT_NEWRV;
9042
9043     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9044 }
9045
9046 /*
9047 =for apidoc newSVsv
9048
9049 Creates a new SV which is an exact duplicate of the original SV.
9050 (Uses C<sv_setsv>.)
9051
9052 =cut
9053 */
9054
9055 SV *
9056 Perl_newSVsv(pTHX_ SV *const old)
9057 {
9058     dVAR;
9059     SV *sv;
9060
9061     if (!old)
9062         return NULL;
9063     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9064         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9065         return NULL;
9066     }
9067     /* Do this here, otherwise we leak the new SV if this croaks. */
9068     SvGETMAGIC(old);
9069     new_SV(sv);
9070     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9071        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9072     sv_setsv_flags(sv, old, SV_NOSTEAL);
9073     return sv;
9074 }
9075
9076 /*
9077 =for apidoc sv_reset
9078
9079 Underlying implementation for the C<reset> Perl function.
9080 Note that the perl-level function is vaguely deprecated.
9081
9082 =cut
9083 */
9084
9085 void
9086 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9087 {
9088     PERL_ARGS_ASSERT_SV_RESET;
9089
9090     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9091 }
9092
9093 void
9094 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9095 {
9096     dVAR;
9097     char todo[PERL_UCHAR_MAX+1];
9098     const char *send;
9099
9100     if (!stash || SvTYPE(stash) != SVt_PVHV)
9101         return;
9102
9103     if (!s) {           /* reset ?? searches */
9104         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9105         if (mg) {
9106             const U32 count = mg->mg_len / sizeof(PMOP**);
9107             PMOP **pmp = (PMOP**) mg->mg_ptr;
9108             PMOP *const *const end = pmp + count;
9109
9110             while (pmp < end) {
9111 #ifdef USE_ITHREADS
9112                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9113 #else
9114                 (*pmp)->op_pmflags &= ~PMf_USED;
9115 #endif
9116                 ++pmp;
9117             }
9118         }
9119         return;
9120     }
9121
9122     /* reset variables */
9123
9124     if (!HvARRAY(stash))
9125         return;
9126
9127     Zero(todo, 256, char);
9128     send = s + len;
9129     while (s < send) {
9130         I32 max;
9131         I32 i = (unsigned char)*s;
9132         if (s[1] == '-') {
9133             s += 2;
9134         }
9135         max = (unsigned char)*s++;
9136         for ( ; i <= max; i++) {
9137             todo[i] = 1;
9138         }
9139         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9140             HE *entry;
9141             for (entry = HvARRAY(stash)[i];
9142                  entry;
9143                  entry = HeNEXT(entry))
9144             {
9145                 GV *gv;
9146                 SV *sv;
9147
9148                 if (!todo[(U8)*HeKEY(entry)])
9149                     continue;
9150                 gv = MUTABLE_GV(HeVAL(entry));
9151                 sv = GvSV(gv);
9152                 if (sv) {
9153                     if (SvTHINKFIRST(sv)) {
9154                         if (!SvREADONLY(sv) && SvROK(sv))
9155                             sv_unref(sv);
9156                         /* XXX Is this continue a bug? Why should THINKFIRST
9157                            exempt us from resetting arrays and hashes?  */
9158                         continue;
9159                     }
9160                     SvOK_off(sv);
9161                     if (SvTYPE(sv) >= SVt_PV) {
9162                         SvCUR_set(sv, 0);
9163                         if (SvPVX_const(sv) != NULL)
9164                             *SvPVX(sv) = '\0';
9165                         SvTAINT(sv);
9166                     }
9167                 }
9168                 if (GvAV(gv)) {
9169                     av_clear(GvAV(gv));
9170                 }
9171                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9172 #if defined(VMS)
9173                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9174 #else /* ! VMS */
9175                     hv_clear(GvHV(gv));
9176 #  if defined(USE_ENVIRON_ARRAY)
9177                     if (gv == PL_envgv)
9178                         my_clearenv();
9179 #  endif /* USE_ENVIRON_ARRAY */
9180 #endif /* VMS */
9181                 }
9182             }
9183         }
9184     }
9185 }
9186
9187 /*
9188 =for apidoc sv_2io
9189
9190 Using various gambits, try to get an IO from an SV: the IO slot if its a
9191 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9192 named after the PV if we're a string.
9193
9194 'Get' magic is ignored on the sv passed in, but will be called on
9195 C<SvRV(sv)> if sv is an RV.
9196
9197 =cut
9198 */
9199
9200 IO*
9201 Perl_sv_2io(pTHX_ SV *const sv)
9202 {
9203     IO* io;
9204     GV* gv;
9205
9206     PERL_ARGS_ASSERT_SV_2IO;
9207
9208     switch (SvTYPE(sv)) {
9209     case SVt_PVIO:
9210         io = MUTABLE_IO(sv);
9211         break;
9212     case SVt_PVGV:
9213     case SVt_PVLV:
9214         if (isGV_with_GP(sv)) {
9215             gv = MUTABLE_GV(sv);
9216             io = GvIO(gv);
9217             if (!io)
9218                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9219                                     HEKfARG(GvNAME_HEK(gv)));
9220             break;
9221         }
9222         /* FALL THROUGH */
9223     default:
9224         if (!SvOK(sv))
9225             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9226         if (SvROK(sv)) {
9227             SvGETMAGIC(SvRV(sv));
9228             return sv_2io(SvRV(sv));
9229         }
9230         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9231         if (gv)
9232             io = GvIO(gv);
9233         else
9234             io = 0;
9235         if (!io) {
9236             SV *newsv = sv;
9237             if (SvGMAGICAL(sv)) {
9238                 newsv = sv_newmortal();
9239                 sv_setsv_nomg(newsv, sv);
9240             }
9241             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9242         }
9243         break;
9244     }
9245     return io;
9246 }
9247
9248 /*
9249 =for apidoc sv_2cv
9250
9251 Using various gambits, try to get a CV from an SV; in addition, try if
9252 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9253 The flags in C<lref> are passed to gv_fetchsv.
9254
9255 =cut
9256 */
9257
9258 CV *
9259 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9260 {
9261     dVAR;
9262     GV *gv = NULL;
9263     CV *cv = NULL;
9264
9265     PERL_ARGS_ASSERT_SV_2CV;
9266
9267     if (!sv) {
9268         *st = NULL;
9269         *gvp = NULL;
9270         return NULL;
9271     }
9272     switch (SvTYPE(sv)) {
9273     case SVt_PVCV:
9274         *st = CvSTASH(sv);
9275         *gvp = NULL;
9276         return MUTABLE_CV(sv);
9277     case SVt_PVHV:
9278     case SVt_PVAV:
9279         *st = NULL;
9280         *gvp = NULL;
9281         return NULL;
9282     default:
9283         SvGETMAGIC(sv);
9284         if (SvROK(sv)) {
9285             if (SvAMAGIC(sv))
9286                 sv = amagic_deref_call(sv, to_cv_amg);
9287
9288             sv = SvRV(sv);
9289             if (SvTYPE(sv) == SVt_PVCV) {
9290                 cv = MUTABLE_CV(sv);
9291                 *gvp = NULL;
9292                 *st = CvSTASH(cv);
9293                 return cv;
9294             }
9295             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9296                 gv = MUTABLE_GV(sv);
9297             else
9298                 Perl_croak(aTHX_ "Not a subroutine reference");
9299         }
9300         else if (isGV_with_GP(sv)) {
9301             gv = MUTABLE_GV(sv);
9302         }
9303         else {
9304             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9305         }
9306         *gvp = gv;
9307         if (!gv) {
9308             *st = NULL;
9309             return NULL;
9310         }
9311         /* Some flags to gv_fetchsv mean don't really create the GV  */
9312         if (!isGV_with_GP(gv)) {
9313             *st = NULL;
9314             return NULL;
9315         }
9316         *st = GvESTASH(gv);
9317         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9318             /* XXX this is probably not what they think they're getting.
9319              * It has the same effect as "sub name;", i.e. just a forward
9320              * declaration! */
9321             newSTUB(gv,0);
9322         }
9323         return GvCVu(gv);
9324     }
9325 }
9326
9327 /*
9328 =for apidoc sv_true
9329
9330 Returns true if the SV has a true value by Perl's rules.
9331 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9332 instead use an in-line version.
9333
9334 =cut
9335 */
9336
9337 I32
9338 Perl_sv_true(pTHX_ SV *const sv)
9339 {
9340     if (!sv)
9341         return 0;
9342     if (SvPOK(sv)) {
9343         const XPV* const tXpv = (XPV*)SvANY(sv);
9344         if (tXpv &&
9345                 (tXpv->xpv_cur > 1 ||
9346                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9347             return 1;
9348         else
9349             return 0;
9350     }
9351     else {
9352         if (SvIOK(sv))
9353             return SvIVX(sv) != 0;
9354         else {
9355             if (SvNOK(sv))
9356                 return SvNVX(sv) != 0.0;
9357             else
9358                 return sv_2bool(sv);
9359         }
9360     }
9361 }
9362
9363 /*
9364 =for apidoc sv_pvn_force
9365
9366 Get a sensible string out of the SV somehow.
9367 A private implementation of the C<SvPV_force> macro for compilers which
9368 can't cope with complex macro expressions.  Always use the macro instead.
9369
9370 =for apidoc sv_pvn_force_flags
9371
9372 Get a sensible string out of the SV somehow.
9373 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9374 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9375 implemented in terms of this function.
9376 You normally want to use the various wrapper macros instead: see
9377 C<SvPV_force> and C<SvPV_force_nomg>
9378
9379 =cut
9380 */
9381
9382 char *
9383 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9384 {
9385     dVAR;
9386
9387     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9388
9389     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9390     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9391         sv_force_normal_flags(sv, 0);
9392
9393     if (SvPOK(sv)) {
9394         if (lp)
9395             *lp = SvCUR(sv);
9396     }
9397     else {
9398         char *s;
9399         STRLEN len;
9400  
9401         if (SvTYPE(sv) > SVt_PVLV
9402             || isGV_with_GP(sv))
9403             /* diag_listed_as: Can't coerce %s to %s in %s */
9404             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9405                 OP_DESC(PL_op));
9406         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9407         if (!s) {
9408           s = (char *)"";
9409         }
9410         if (lp)
9411             *lp = len;
9412
9413         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9414             if (SvROK(sv))
9415                 sv_unref(sv);
9416             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9417             SvGROW(sv, len + 1);
9418             Move(s,SvPVX(sv),len,char);
9419             SvCUR_set(sv, len);
9420             SvPVX(sv)[len] = '\0';
9421         }
9422         if (!SvPOK(sv)) {
9423             SvPOK_on(sv);               /* validate pointer */
9424             SvTAINT(sv);
9425             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9426                                   PTR2UV(sv),SvPVX_const(sv)));
9427         }
9428     }
9429     (void)SvPOK_only_UTF8(sv);
9430     return SvPVX_mutable(sv);
9431 }
9432
9433 /*
9434 =for apidoc sv_pvbyten_force
9435
9436 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9437 instead.
9438
9439 =cut
9440 */
9441
9442 char *
9443 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9444 {
9445     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9446
9447     sv_pvn_force(sv,lp);
9448     sv_utf8_downgrade(sv,0);
9449     *lp = SvCUR(sv);
9450     return SvPVX(sv);
9451 }
9452
9453 /*
9454 =for apidoc sv_pvutf8n_force
9455
9456 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9457 instead.
9458
9459 =cut
9460 */
9461
9462 char *
9463 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9464 {
9465     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9466
9467     sv_pvn_force(sv,0);
9468     sv_utf8_upgrade_nomg(sv);
9469     *lp = SvCUR(sv);
9470     return SvPVX(sv);
9471 }
9472
9473 /*
9474 =for apidoc sv_reftype
9475
9476 Returns a string describing what the SV is a reference to.
9477
9478 =cut
9479 */
9480
9481 const char *
9482 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9483 {
9484     PERL_ARGS_ASSERT_SV_REFTYPE;
9485     if (ob && SvOBJECT(sv)) {
9486         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9487     }
9488     else {
9489         switch (SvTYPE(sv)) {
9490         case SVt_NULL:
9491         case SVt_IV:
9492         case SVt_NV:
9493         case SVt_PV:
9494         case SVt_PVIV:
9495         case SVt_PVNV:
9496         case SVt_PVMG:
9497                                 if (SvVOK(sv))
9498                                     return "VSTRING";
9499                                 if (SvROK(sv))
9500                                     return "REF";
9501                                 else
9502                                     return "SCALAR";
9503
9504         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9505                                 /* tied lvalues should appear to be
9506                                  * scalars for backwards compatibility */
9507                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9508                                     ? "SCALAR" : "LVALUE");
9509         case SVt_PVAV:          return "ARRAY";
9510         case SVt_PVHV:          return "HASH";
9511         case SVt_PVCV:          return "CODE";
9512         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9513                                     ? "GLOB" : "SCALAR");
9514         case SVt_PVFM:          return "FORMAT";
9515         case SVt_PVIO:          return "IO";
9516         case SVt_INVLIST:       return "INVLIST";
9517         case SVt_REGEXP:        return "REGEXP";
9518         default:                return "UNKNOWN";
9519         }
9520     }
9521 }
9522
9523 /*
9524 =for apidoc sv_ref
9525
9526 Returns a SV describing what the SV passed in is a reference to.
9527
9528 =cut
9529 */
9530
9531 SV *
9532 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9533 {
9534     PERL_ARGS_ASSERT_SV_REF;
9535
9536     if (!dst)
9537         dst = sv_newmortal();
9538
9539     if (ob && SvOBJECT(sv)) {
9540         HvNAME_get(SvSTASH(sv))
9541                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9542                     : sv_setpvn(dst, "__ANON__", 8);
9543     }
9544     else {
9545         const char * reftype = sv_reftype(sv, 0);
9546         sv_setpv(dst, reftype);
9547     }
9548     return dst;
9549 }
9550
9551 /*
9552 =for apidoc sv_isobject
9553
9554 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9555 object.  If the SV is not an RV, or if the object is not blessed, then this
9556 will return false.
9557
9558 =cut
9559 */
9560
9561 int
9562 Perl_sv_isobject(pTHX_ SV *sv)
9563 {
9564     if (!sv)
9565         return 0;
9566     SvGETMAGIC(sv);
9567     if (!SvROK(sv))
9568         return 0;
9569     sv = SvRV(sv);
9570     if (!SvOBJECT(sv))
9571         return 0;
9572     return 1;
9573 }
9574
9575 /*
9576 =for apidoc sv_isa
9577
9578 Returns a boolean indicating whether the SV is blessed into the specified
9579 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9580 an inheritance relationship.
9581
9582 =cut
9583 */
9584
9585 int
9586 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9587 {
9588     const char *hvname;
9589
9590     PERL_ARGS_ASSERT_SV_ISA;
9591
9592     if (!sv)
9593         return 0;
9594     SvGETMAGIC(sv);
9595     if (!SvROK(sv))
9596         return 0;
9597     sv = SvRV(sv);
9598     if (!SvOBJECT(sv))
9599         return 0;
9600     hvname = HvNAME_get(SvSTASH(sv));
9601     if (!hvname)
9602         return 0;
9603
9604     return strEQ(hvname, name);
9605 }
9606
9607 /*
9608 =for apidoc newSVrv
9609
9610 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9611 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9612 SV will be blessed in the specified package.  The new SV is returned and its
9613 reference count is 1. The reference count 1 is owned by C<rv>.
9614
9615 =cut
9616 */
9617
9618 SV*
9619 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9620 {
9621     dVAR;
9622     SV *sv;
9623
9624     PERL_ARGS_ASSERT_NEWSVRV;
9625
9626     new_SV(sv);
9627
9628     SV_CHECK_THINKFIRST_COW_DROP(rv);
9629
9630     if (SvTYPE(rv) >= SVt_PVMG) {
9631         const U32 refcnt = SvREFCNT(rv);
9632         SvREFCNT(rv) = 0;
9633         sv_clear(rv);
9634         SvFLAGS(rv) = 0;
9635         SvREFCNT(rv) = refcnt;
9636
9637         sv_upgrade(rv, SVt_IV);
9638     } else if (SvROK(rv)) {
9639         SvREFCNT_dec(SvRV(rv));
9640     } else {
9641         prepare_SV_for_RV(rv);
9642     }
9643
9644     SvOK_off(rv);
9645     SvRV_set(rv, sv);
9646     SvROK_on(rv);
9647
9648     if (classname) {
9649         HV* const stash = gv_stashpv(classname, GV_ADD);
9650         (void)sv_bless(rv, stash);
9651     }
9652     return sv;
9653 }
9654
9655 /*
9656 =for apidoc sv_setref_pv
9657
9658 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9659 argument will be upgraded to an RV.  That RV will be modified to point to
9660 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9661 into the SV.  The C<classname> argument indicates the package for the
9662 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9663 will have a reference count of 1, and the RV will be returned.
9664
9665 Do not use with other Perl types such as HV, AV, SV, CV, because those
9666 objects will become corrupted by the pointer copy process.
9667
9668 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9669
9670 =cut
9671 */
9672
9673 SV*
9674 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9675 {
9676     dVAR;
9677
9678     PERL_ARGS_ASSERT_SV_SETREF_PV;
9679
9680     if (!pv) {
9681         sv_setsv(rv, &PL_sv_undef);
9682         SvSETMAGIC(rv);
9683     }
9684     else
9685         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9686     return rv;
9687 }
9688
9689 /*
9690 =for apidoc sv_setref_iv
9691
9692 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9693 argument will be upgraded to an RV.  That RV will be modified to point to
9694 the new SV.  The C<classname> argument indicates the package for the
9695 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9696 will have a reference count of 1, and the RV will be returned.
9697
9698 =cut
9699 */
9700
9701 SV*
9702 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9703 {
9704     PERL_ARGS_ASSERT_SV_SETREF_IV;
9705
9706     sv_setiv(newSVrv(rv,classname), iv);
9707     return rv;
9708 }
9709
9710 /*
9711 =for apidoc sv_setref_uv
9712
9713 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9714 argument will be upgraded to an RV.  That RV will be modified to point to
9715 the new SV.  The C<classname> argument indicates the package for the
9716 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9717 will have a reference count of 1, and the RV will be returned.
9718
9719 =cut
9720 */
9721
9722 SV*
9723 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9724 {
9725     PERL_ARGS_ASSERT_SV_SETREF_UV;
9726
9727     sv_setuv(newSVrv(rv,classname), uv);
9728     return rv;
9729 }
9730
9731 /*
9732 =for apidoc sv_setref_nv
9733
9734 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9735 argument will be upgraded to an RV.  That RV will be modified to point to
9736 the new SV.  The C<classname> argument indicates the package for the
9737 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9738 will have a reference count of 1, and the RV will be returned.
9739
9740 =cut
9741 */
9742
9743 SV*
9744 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9745 {
9746     PERL_ARGS_ASSERT_SV_SETREF_NV;
9747
9748     sv_setnv(newSVrv(rv,classname), nv);
9749     return rv;
9750 }
9751
9752 /*
9753 =for apidoc sv_setref_pvn
9754
9755 Copies a string into a new SV, optionally blessing the SV.  The length of the
9756 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9757 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9758 argument indicates the package for the blessing.  Set C<classname> to
9759 C<NULL> to avoid the blessing.  The new SV will have a reference count
9760 of 1, and the RV will be returned.
9761
9762 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9763
9764 =cut
9765 */
9766
9767 SV*
9768 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9769                    const char *const pv, const STRLEN n)
9770 {
9771     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9772
9773     sv_setpvn(newSVrv(rv,classname), pv, n);
9774     return rv;
9775 }
9776
9777 /*
9778 =for apidoc sv_bless
9779
9780 Blesses an SV into a specified package.  The SV must be an RV.  The package
9781 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9782 of the SV is unaffected.
9783
9784 =cut
9785 */
9786
9787 SV*
9788 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9789 {
9790     dVAR;
9791     SV *tmpRef;
9792
9793     PERL_ARGS_ASSERT_SV_BLESS;
9794
9795     if (!SvROK(sv))
9796         Perl_croak(aTHX_ "Can't bless non-reference value");
9797     tmpRef = SvRV(sv);
9798     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9799         if (SvREADONLY(tmpRef))
9800             Perl_croak_no_modify();
9801         if (SvOBJECT(tmpRef)) {
9802             SvREFCNT_dec(SvSTASH(tmpRef));
9803         }
9804     }
9805     SvOBJECT_on(tmpRef);
9806     SvUPGRADE(tmpRef, SVt_PVMG);
9807     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9808
9809     if(SvSMAGICAL(tmpRef))
9810         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9811             mg_set(tmpRef);
9812
9813
9814
9815     return sv;
9816 }
9817
9818 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9819  * as it is after unglobbing it.
9820  */
9821
9822 PERL_STATIC_INLINE void
9823 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9824 {
9825     dVAR;
9826     void *xpvmg;
9827     HV *stash;
9828     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9829
9830     PERL_ARGS_ASSERT_SV_UNGLOB;
9831
9832     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9833     SvFAKE_off(sv);
9834     if (!(flags & SV_COW_DROP_PV))
9835         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9836
9837     if (GvGP(sv)) {
9838         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9839            && HvNAME_get(stash))
9840             mro_method_changed_in(stash);
9841         gp_free(MUTABLE_GV(sv));
9842     }
9843     if (GvSTASH(sv)) {
9844         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9845         GvSTASH(sv) = NULL;
9846     }
9847     GvMULTI_off(sv);
9848     if (GvNAME_HEK(sv)) {
9849         unshare_hek(GvNAME_HEK(sv));
9850     }
9851     isGV_with_GP_off(sv);
9852
9853     if(SvTYPE(sv) == SVt_PVGV) {
9854         /* need to keep SvANY(sv) in the right arena */
9855         xpvmg = new_XPVMG();
9856         StructCopy(SvANY(sv), xpvmg, XPVMG);
9857         del_XPVGV(SvANY(sv));
9858         SvANY(sv) = xpvmg;
9859
9860         SvFLAGS(sv) &= ~SVTYPEMASK;
9861         SvFLAGS(sv) |= SVt_PVMG;
9862     }
9863
9864     /* Intentionally not calling any local SET magic, as this isn't so much a
9865        set operation as merely an internal storage change.  */
9866     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9867     else sv_setsv_flags(sv, temp, 0);
9868
9869     if ((const GV *)sv == PL_last_in_gv)
9870         PL_last_in_gv = NULL;
9871     else if ((const GV *)sv == PL_statgv)
9872         PL_statgv = NULL;
9873 }
9874
9875 /*
9876 =for apidoc sv_unref_flags
9877
9878 Unsets the RV status of the SV, and decrements the reference count of
9879 whatever was being referenced by the RV.  This can almost be thought of
9880 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9881 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9882 (otherwise the decrementing is conditional on the reference count being
9883 different from one or the reference being a readonly SV).
9884 See C<SvROK_off>.
9885
9886 =cut
9887 */
9888
9889 void
9890 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9891 {
9892     SV* const target = SvRV(ref);
9893
9894     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9895
9896     if (SvWEAKREF(ref)) {
9897         sv_del_backref(target, ref);
9898         SvWEAKREF_off(ref);
9899         SvRV_set(ref, NULL);
9900         return;
9901     }
9902     SvRV_set(ref, NULL);
9903     SvROK_off(ref);
9904     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9905        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9906     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9907         SvREFCNT_dec_NN(target);
9908     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9909         sv_2mortal(target);     /* Schedule for freeing later */
9910 }
9911
9912 /*
9913 =for apidoc sv_untaint
9914
9915 Untaint an SV.  Use C<SvTAINTED_off> instead.
9916
9917 =cut
9918 */
9919
9920 void
9921 Perl_sv_untaint(pTHX_ SV *const sv)
9922 {
9923     PERL_ARGS_ASSERT_SV_UNTAINT;
9924
9925     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9926         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9927         if (mg)
9928             mg->mg_len &= ~1;
9929     }
9930 }
9931
9932 /*
9933 =for apidoc sv_tainted
9934
9935 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9936
9937 =cut
9938 */
9939
9940 bool
9941 Perl_sv_tainted(pTHX_ SV *const sv)
9942 {
9943     PERL_ARGS_ASSERT_SV_TAINTED;
9944
9945     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9946         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9947         if (mg && (mg->mg_len & 1) )
9948             return TRUE;
9949     }
9950     return FALSE;
9951 }
9952
9953 /*
9954 =for apidoc sv_setpviv
9955
9956 Copies an integer into the given SV, also updating its string value.
9957 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9958
9959 =cut
9960 */
9961
9962 void
9963 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9964 {
9965     char buf[TYPE_CHARS(UV)];
9966     char *ebuf;
9967     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9968
9969     PERL_ARGS_ASSERT_SV_SETPVIV;
9970
9971     sv_setpvn(sv, ptr, ebuf - ptr);
9972 }
9973
9974 /*
9975 =for apidoc sv_setpviv_mg
9976
9977 Like C<sv_setpviv>, but also handles 'set' magic.
9978
9979 =cut
9980 */
9981
9982 void
9983 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9984 {
9985     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9986
9987     sv_setpviv(sv, iv);
9988     SvSETMAGIC(sv);
9989 }
9990
9991 #if defined(PERL_IMPLICIT_CONTEXT)
9992
9993 /* pTHX_ magic can't cope with varargs, so this is a no-context
9994  * version of the main function, (which may itself be aliased to us).
9995  * Don't access this version directly.
9996  */
9997
9998 void
9999 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10000 {
10001     dTHX;
10002     va_list args;
10003
10004     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10005
10006     va_start(args, pat);
10007     sv_vsetpvf(sv, pat, &args);
10008     va_end(args);
10009 }
10010
10011 /* pTHX_ magic can't cope with varargs, so this is a no-context
10012  * version of the main function, (which may itself be aliased to us).
10013  * Don't access this version directly.
10014  */
10015
10016 void
10017 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10018 {
10019     dTHX;
10020     va_list args;
10021
10022     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10023
10024     va_start(args, pat);
10025     sv_vsetpvf_mg(sv, pat, &args);
10026     va_end(args);
10027 }
10028 #endif
10029
10030 /*
10031 =for apidoc sv_setpvf
10032
10033 Works like C<sv_catpvf> but copies the text into the SV instead of
10034 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10035
10036 =cut
10037 */
10038
10039 void
10040 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10041 {
10042     va_list args;
10043
10044     PERL_ARGS_ASSERT_SV_SETPVF;
10045
10046     va_start(args, pat);
10047     sv_vsetpvf(sv, pat, &args);
10048     va_end(args);
10049 }
10050
10051 /*
10052 =for apidoc sv_vsetpvf
10053
10054 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10055 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10056
10057 Usually used via its frontend C<sv_setpvf>.
10058
10059 =cut
10060 */
10061
10062 void
10063 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10064 {
10065     PERL_ARGS_ASSERT_SV_VSETPVF;
10066
10067     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10068 }
10069
10070 /*
10071 =for apidoc sv_setpvf_mg
10072
10073 Like C<sv_setpvf>, but also handles 'set' magic.
10074
10075 =cut
10076 */
10077
10078 void
10079 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10080 {
10081     va_list args;
10082
10083     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10084
10085     va_start(args, pat);
10086     sv_vsetpvf_mg(sv, pat, &args);
10087     va_end(args);
10088 }
10089
10090 /*
10091 =for apidoc sv_vsetpvf_mg
10092
10093 Like C<sv_vsetpvf>, but also handles 'set' magic.
10094
10095 Usually used via its frontend C<sv_setpvf_mg>.
10096
10097 =cut
10098 */
10099
10100 void
10101 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10102 {
10103     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10104
10105     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10106     SvSETMAGIC(sv);
10107 }
10108
10109 #if defined(PERL_IMPLICIT_CONTEXT)
10110
10111 /* pTHX_ magic can't cope with varargs, so this is a no-context
10112  * version of the main function, (which may itself be aliased to us).
10113  * Don't access this version directly.
10114  */
10115
10116 void
10117 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10118 {
10119     dTHX;
10120     va_list args;
10121
10122     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10123
10124     va_start(args, pat);
10125     sv_vcatpvf(sv, pat, &args);
10126     va_end(args);
10127 }
10128
10129 /* pTHX_ magic can't cope with varargs, so this is a no-context
10130  * version of the main function, (which may itself be aliased to us).
10131  * Don't access this version directly.
10132  */
10133
10134 void
10135 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10136 {
10137     dTHX;
10138     va_list args;
10139
10140     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10141
10142     va_start(args, pat);
10143     sv_vcatpvf_mg(sv, pat, &args);
10144     va_end(args);
10145 }
10146 #endif
10147
10148 /*
10149 =for apidoc sv_catpvf
10150
10151 Processes its arguments like C<sprintf> and appends the formatted
10152 output to an SV.  If the appended data contains "wide" characters
10153 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10154 and characters >255 formatted with %c), the original SV might get
10155 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10156 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10157 valid UTF-8; if the original SV was bytes, the pattern should be too.
10158
10159 =cut */
10160
10161 void
10162 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10163 {
10164     va_list args;
10165
10166     PERL_ARGS_ASSERT_SV_CATPVF;
10167
10168     va_start(args, pat);
10169     sv_vcatpvf(sv, pat, &args);
10170     va_end(args);
10171 }
10172
10173 /*
10174 =for apidoc sv_vcatpvf
10175
10176 Processes its arguments like C<vsprintf> and appends the formatted output
10177 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10178
10179 Usually used via its frontend C<sv_catpvf>.
10180
10181 =cut
10182 */
10183
10184 void
10185 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10186 {
10187     PERL_ARGS_ASSERT_SV_VCATPVF;
10188
10189     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10190 }
10191
10192 /*
10193 =for apidoc sv_catpvf_mg
10194
10195 Like C<sv_catpvf>, but also handles 'set' magic.
10196
10197 =cut
10198 */
10199
10200 void
10201 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10202 {
10203     va_list args;
10204
10205     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10206
10207     va_start(args, pat);
10208     sv_vcatpvf_mg(sv, pat, &args);
10209     va_end(args);
10210 }
10211
10212 /*
10213 =for apidoc sv_vcatpvf_mg
10214
10215 Like C<sv_vcatpvf>, but also handles 'set' magic.
10216
10217 Usually used via its frontend C<sv_catpvf_mg>.
10218
10219 =cut
10220 */
10221
10222 void
10223 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10224 {
10225     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10226
10227     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10228     SvSETMAGIC(sv);
10229 }
10230
10231 /*
10232 =for apidoc sv_vsetpvfn
10233
10234 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10235 appending it.
10236
10237 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10238
10239 =cut
10240 */
10241
10242 void
10243 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10244                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10245 {
10246     PERL_ARGS_ASSERT_SV_VSETPVFN;
10247
10248     sv_setpvs(sv, "");
10249     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10250 }
10251
10252
10253 /*
10254  * Warn of missing argument to sprintf, and then return a defined value
10255  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10256  */
10257 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10258 STATIC SV*
10259 S_vcatpvfn_missing_argument(pTHX) {
10260     if (ckWARN(WARN_MISSING)) {
10261         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10262                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10263     }
10264     return &PL_sv_no;
10265 }
10266
10267
10268 STATIC I32
10269 S_expect_number(pTHX_ char **const pattern)
10270 {
10271     dVAR;
10272     I32 var = 0;
10273
10274     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10275
10276     switch (**pattern) {
10277     case '1': case '2': case '3':
10278     case '4': case '5': case '6':
10279     case '7': case '8': case '9':
10280         var = *(*pattern)++ - '0';
10281         while (isDIGIT(**pattern)) {
10282             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10283             if (tmp < var)
10284                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10285             var = tmp;
10286         }
10287     }
10288     return var;
10289 }
10290
10291 STATIC char *
10292 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10293 {
10294     const int neg = nv < 0;
10295     UV uv;
10296
10297     PERL_ARGS_ASSERT_F0CONVERT;
10298
10299     if (neg)
10300         nv = -nv;
10301     if (nv < UV_MAX) {
10302         char *p = endbuf;
10303         nv += 0.5;
10304         uv = (UV)nv;
10305         if (uv & 1 && uv == nv)
10306             uv--;                       /* Round to even */
10307         do {
10308             const unsigned dig = uv % 10;
10309             *--p = '0' + dig;
10310         } while (uv /= 10);
10311         if (neg)
10312             *--p = '-';
10313         *len = endbuf - p;
10314         return p;
10315     }
10316     return NULL;
10317 }
10318
10319
10320 /*
10321 =for apidoc sv_vcatpvfn
10322
10323 =for apidoc sv_vcatpvfn_flags
10324
10325 Processes its arguments like C<vsprintf> and appends the formatted output
10326 to an SV.  Uses an array of SVs if the C style variable argument list is
10327 missing (NULL).  When running with taint checks enabled, indicates via
10328 C<maybe_tainted> if results are untrustworthy (often due to the use of
10329 locales).
10330
10331 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10332
10333 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10334
10335 =cut
10336 */
10337
10338 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10339                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10340                         vec_utf8 = DO_UTF8(vecsv);
10341
10342 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10343
10344 void
10345 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10346                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10347 {
10348     PERL_ARGS_ASSERT_SV_VCATPVFN;
10349
10350     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10351 }
10352
10353 void
10354 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10355                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10356                        const U32 flags)
10357 {
10358     dVAR;
10359     char *p;
10360     char *q;
10361     const char *patend;
10362     STRLEN origlen;
10363     I32 svix = 0;
10364     static const char nullstr[] = "(null)";
10365     SV *argsv = NULL;
10366     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10367     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10368     SV *nsv = NULL;
10369     /* Times 4: a decimal digit takes more than 3 binary digits.
10370      * NV_DIG: mantissa takes than many decimal digits.
10371      * Plus 32: Playing safe. */
10372     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10373     /* large enough for "%#.#f" --chip */
10374     /* what about long double NVs? --jhi */
10375
10376     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10377     PERL_UNUSED_ARG(maybe_tainted);
10378
10379     if (flags & SV_GMAGIC)
10380         SvGETMAGIC(sv);
10381
10382     /* no matter what, this is a string now */
10383     (void)SvPV_force_nomg(sv, origlen);
10384
10385     /* special-case "", "%s", and "%-p" (SVf - see below) */
10386     if (patlen == 0)
10387         return;
10388     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10389         if (args) {
10390             const char * const s = va_arg(*args, char*);
10391             sv_catpv_nomg(sv, s ? s : nullstr);
10392         }
10393         else if (svix < svmax) {
10394             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10395             SvGETMAGIC(*svargs);
10396             sv_catsv_nomg(sv, *svargs);
10397         }
10398         else
10399             S_vcatpvfn_missing_argument(aTHX);
10400         return;
10401     }
10402     if (args && patlen == 3 && pat[0] == '%' &&
10403                 pat[1] == '-' && pat[2] == 'p') {
10404         argsv = MUTABLE_SV(va_arg(*args, void*));
10405         sv_catsv_nomg(sv, argsv);
10406         return;
10407     }
10408
10409 #ifndef USE_LONG_DOUBLE
10410     /* special-case "%.<number>[gf]" */
10411     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10412          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10413         unsigned digits = 0;
10414         const char *pp;
10415
10416         pp = pat + 2;
10417         while (*pp >= '0' && *pp <= '9')
10418             digits = 10 * digits + (*pp++ - '0');
10419         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10420             const NV nv = SvNV(*svargs);
10421             if (*pp == 'g') {
10422                 /* Add check for digits != 0 because it seems that some
10423                    gconverts are buggy in this case, and we don't yet have
10424                    a Configure test for this.  */
10425                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10426                      /* 0, point, slack */
10427                     Gconvert(nv, (int)digits, 0, ebuf);
10428                     sv_catpv_nomg(sv, ebuf);
10429                     if (*ebuf)  /* May return an empty string for digits==0 */
10430                         return;
10431                 }
10432             } else if (!digits) {
10433                 STRLEN l;
10434
10435                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10436                     sv_catpvn_nomg(sv, p, l);
10437                     return;
10438                 }
10439             }
10440         }
10441     }
10442 #endif /* !USE_LONG_DOUBLE */
10443
10444     if (!args && svix < svmax && DO_UTF8(*svargs))
10445         has_utf8 = TRUE;
10446
10447     patend = (char*)pat + patlen;
10448     for (p = (char*)pat; p < patend; p = q) {
10449         bool alt = FALSE;
10450         bool left = FALSE;
10451         bool vectorize = FALSE;
10452         bool vectorarg = FALSE;
10453         bool vec_utf8 = FALSE;
10454         char fill = ' ';
10455         char plus = 0;
10456         char intsize = 0;
10457         STRLEN width = 0;
10458         STRLEN zeros = 0;
10459         bool has_precis = FALSE;
10460         STRLEN precis = 0;
10461         const I32 osvix = svix;
10462         bool is_utf8 = FALSE;  /* is this item utf8?   */
10463 #ifdef HAS_LDBL_SPRINTF_BUG
10464         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10465            with sfio - Allen <allens@cpan.org> */
10466         bool fix_ldbl_sprintf_bug = FALSE;
10467 #endif
10468
10469         char esignbuf[4];
10470         U8 utf8buf[UTF8_MAXBYTES+1];
10471         STRLEN esignlen = 0;
10472
10473         const char *eptr = NULL;
10474         const char *fmtstart;
10475         STRLEN elen = 0;
10476         SV *vecsv = NULL;
10477         const U8 *vecstr = NULL;
10478         STRLEN veclen = 0;
10479         char c = 0;
10480         int i;
10481         unsigned base = 0;
10482         IV iv = 0;
10483         UV uv = 0;
10484         /* we need a long double target in case HAS_LONG_DOUBLE but
10485            not USE_LONG_DOUBLE
10486         */
10487 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10488         long double nv;
10489 #else
10490         NV nv;
10491 #endif
10492         STRLEN have;
10493         STRLEN need;
10494         STRLEN gap;
10495         const char *dotstr = ".";
10496         STRLEN dotstrlen = 1;
10497         I32 efix = 0; /* explicit format parameter index */
10498         I32 ewix = 0; /* explicit width index */
10499         I32 epix = 0; /* explicit precision index */
10500         I32 evix = 0; /* explicit vector index */
10501         bool asterisk = FALSE;
10502
10503         /* echo everything up to the next format specification */
10504         for (q = p; q < patend && *q != '%'; ++q) ;
10505         if (q > p) {
10506             if (has_utf8 && !pat_utf8)
10507                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10508             else
10509                 sv_catpvn_nomg(sv, p, q - p);
10510             p = q;
10511         }
10512         if (q++ >= patend)
10513             break;
10514
10515         fmtstart = q;
10516
10517 /*
10518     We allow format specification elements in this order:
10519         \d+\$              explicit format parameter index
10520         [-+ 0#]+           flags
10521         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10522         0                  flag (as above): repeated to allow "v02"     
10523         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10524         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10525         [hlqLV]            size
10526     [%bcdefginopsuxDFOUX] format (mandatory)
10527 */
10528
10529         if (args) {
10530 /*  
10531         As of perl5.9.3, printf format checking is on by default.
10532         Internally, perl uses %p formats to provide an escape to
10533         some extended formatting.  This block deals with those
10534         extensions: if it does not match, (char*)q is reset and
10535         the normal format processing code is used.
10536
10537         Currently defined extensions are:
10538                 %p              include pointer address (standard)      
10539                 %-p     (SVf)   include an SV (previously %_)
10540                 %-<num>p        include an SV with precision <num>      
10541                 %2p             include a HEK
10542                 %3p             include a HEK with precision of 256
10543                 %4p             char* preceded by utf8 flag and length
10544                 %<num>p         (where num is 1 or > 4) reserved for future
10545                                 extensions
10546
10547         Robin Barker 2005-07-14 (but modified since)
10548
10549                 %1p     (VDf)   removed.  RMB 2007-10-19
10550 */
10551             char* r = q; 
10552             bool sv = FALSE;    
10553             STRLEN n = 0;
10554             if (*q == '-')
10555                 sv = *q++;
10556             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10557                 /* The argument has already gone through cBOOL, so the cast
10558                    is safe. */
10559                 is_utf8 = (bool)va_arg(*args, int);
10560                 elen = va_arg(*args, UV);
10561                 eptr = va_arg(*args, char *);
10562                 q += sizeof(UTF8f)-1;
10563                 goto string;
10564             }
10565             n = expect_number(&q);
10566             if (*q++ == 'p') {
10567                 if (sv) {                       /* SVf */
10568                     if (n) {
10569                         precis = n;
10570                         has_precis = TRUE;
10571                     }
10572                     argsv = MUTABLE_SV(va_arg(*args, void*));
10573                     eptr = SvPV_const(argsv, elen);
10574                     if (DO_UTF8(argsv))
10575                         is_utf8 = TRUE;
10576                     goto string;
10577                 }
10578                 else if (n==2 || n==3) {        /* HEKf */
10579                     HEK * const hek = va_arg(*args, HEK *);
10580                     eptr = HEK_KEY(hek);
10581                     elen = HEK_LEN(hek);
10582                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10583                     if (n==3) precis = 256, has_precis = TRUE;
10584                     goto string;
10585                 }
10586                 else if (n) {
10587                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10588                                      "internal %%<num>p might conflict with future printf extensions");
10589                 }
10590             }
10591             q = r; 
10592         }
10593
10594         if ( (width = expect_number(&q)) ) {
10595             if (*q == '$') {
10596                 ++q;
10597                 efix = width;
10598             } else {
10599                 goto gotwidth;
10600             }
10601         }
10602
10603         /* FLAGS */
10604
10605         while (*q) {
10606             switch (*q) {
10607             case ' ':
10608             case '+':
10609                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10610                     q++;
10611                 else
10612                     plus = *q++;
10613                 continue;
10614
10615             case '-':
10616                 left = TRUE;
10617                 q++;
10618                 continue;
10619
10620             case '0':
10621                 fill = *q++;
10622                 continue;
10623
10624             case '#':
10625                 alt = TRUE;
10626                 q++;
10627                 continue;
10628
10629             default:
10630                 break;
10631             }
10632             break;
10633         }
10634
10635       tryasterisk:
10636         if (*q == '*') {
10637             q++;
10638             if ( (ewix = expect_number(&q)) )
10639                 if (*q++ != '$')
10640                     goto unknown;
10641             asterisk = TRUE;
10642         }
10643         if (*q == 'v') {
10644             q++;
10645             if (vectorize)
10646                 goto unknown;
10647             if ((vectorarg = asterisk)) {
10648                 evix = ewix;
10649                 ewix = 0;
10650                 asterisk = FALSE;
10651             }
10652             vectorize = TRUE;
10653             goto tryasterisk;
10654         }
10655
10656         if (!asterisk)
10657         {
10658             if( *q == '0' )
10659                 fill = *q++;
10660             width = expect_number(&q);
10661         }
10662
10663         if (vectorize && vectorarg) {
10664             /* vectorizing, but not with the default "." */
10665             if (args)
10666                 vecsv = va_arg(*args, SV*);
10667             else if (evix) {
10668                 vecsv = (evix > 0 && evix <= svmax)
10669                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10670             } else {
10671                 vecsv = svix < svmax
10672                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10673             }
10674             dotstr = SvPV_const(vecsv, dotstrlen);
10675             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10676                bad with tied or overloaded values that return UTF8.  */
10677             if (DO_UTF8(vecsv))
10678                 is_utf8 = TRUE;
10679             else if (has_utf8) {
10680                 vecsv = sv_mortalcopy(vecsv);
10681                 sv_utf8_upgrade(vecsv);
10682                 dotstr = SvPV_const(vecsv, dotstrlen);
10683                 is_utf8 = TRUE;
10684             }               
10685         }
10686
10687         if (asterisk) {
10688             if (args)
10689                 i = va_arg(*args, int);
10690             else
10691                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10692                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10693             left |= (i < 0);
10694             width = (i < 0) ? -i : i;
10695         }
10696       gotwidth:
10697
10698         /* PRECISION */
10699
10700         if (*q == '.') {
10701             q++;
10702             if (*q == '*') {
10703                 q++;
10704                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10705                     goto unknown;
10706                 /* XXX: todo, support specified precision parameter */
10707                 if (epix)
10708                     goto unknown;
10709                 if (args)
10710                     i = va_arg(*args, int);
10711                 else
10712                     i = (ewix ? ewix <= svmax : svix < svmax)
10713                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10714                 precis = i;
10715                 has_precis = !(i < 0);
10716             }
10717             else {
10718                 precis = 0;
10719                 while (isDIGIT(*q))
10720                     precis = precis * 10 + (*q++ - '0');
10721                 has_precis = TRUE;
10722             }
10723         }
10724
10725         if (vectorize) {
10726             if (args) {
10727                 VECTORIZE_ARGS
10728             }
10729             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10730                 vecsv = svargs[efix ? efix-1 : svix++];
10731                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10732                 vec_utf8 = DO_UTF8(vecsv);
10733
10734                 /* if this is a version object, we need to convert
10735                  * back into v-string notation and then let the
10736                  * vectorize happen normally
10737                  */
10738                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10739                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10740                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10741                         "vector argument not supported with alpha versions");
10742                         goto vdblank;
10743                     }
10744                     vecsv = sv_newmortal();
10745                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10746                                  vecsv);
10747                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10748                     vec_utf8 = DO_UTF8(vecsv);
10749                 }
10750             }
10751             else {
10752               vdblank:
10753                 vecstr = (U8*)"";
10754                 veclen = 0;
10755             }
10756         }
10757
10758         /* SIZE */
10759
10760         switch (*q) {
10761 #ifdef WIN32
10762         case 'I':                       /* Ix, I32x, and I64x */
10763 #  ifdef USE_64_BIT_INT
10764             if (q[1] == '6' && q[2] == '4') {
10765                 q += 3;
10766                 intsize = 'q';
10767                 break;
10768             }
10769 #  endif
10770             if (q[1] == '3' && q[2] == '2') {
10771                 q += 3;
10772                 break;
10773             }
10774 #  ifdef USE_64_BIT_INT
10775             intsize = 'q';
10776 #  endif
10777             q++;
10778             break;
10779 #endif
10780 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10781         case 'L':                       /* Ld */
10782             /*FALLTHROUGH*/
10783 #ifdef HAS_QUAD
10784         case 'q':                       /* qd */
10785 #endif
10786             intsize = 'q';
10787             q++;
10788             break;
10789 #endif
10790         case 'l':
10791             ++q;
10792 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10793             if (*q == 'l') {    /* lld, llf */
10794                 intsize = 'q';
10795                 ++q;
10796             }
10797             else
10798 #endif
10799                 intsize = 'l';
10800             break;
10801         case 'h':
10802             if (*++q == 'h') {  /* hhd, hhu */
10803                 intsize = 'c';
10804                 ++q;
10805             }
10806             else
10807                 intsize = 'h';
10808             break;
10809         case 'V':
10810         case 'z':
10811         case 't':
10812 #if HAS_C99
10813         case 'j':
10814 #endif
10815             intsize = *q++;
10816             break;
10817         }
10818
10819         /* CONVERSION */
10820
10821         if (*q == '%') {
10822             eptr = q++;
10823             elen = 1;
10824             if (vectorize) {
10825                 c = '%';
10826                 goto unknown;
10827             }
10828             goto string;
10829         }
10830
10831         if (!vectorize && !args) {
10832             if (efix) {
10833                 const I32 i = efix-1;
10834                 argsv = (i >= 0 && i < svmax)
10835                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10836             } else {
10837                 argsv = (svix >= 0 && svix < svmax)
10838                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10839             }
10840         }
10841
10842         switch (c = *q++) {
10843
10844             /* STRINGS */
10845
10846         case 'c':
10847             if (vectorize)
10848                 goto unknown;
10849             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10850             if ((uv > 255 ||
10851                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10852                 && !IN_BYTES) {
10853                 eptr = (char*)utf8buf;
10854                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10855                 is_utf8 = TRUE;
10856             }
10857             else {
10858                 c = (char)uv;
10859                 eptr = &c;
10860                 elen = 1;
10861             }
10862             goto string;
10863
10864         case 's':
10865             if (vectorize)
10866                 goto unknown;
10867             if (args) {
10868                 eptr = va_arg(*args, char*);
10869                 if (eptr)
10870                     elen = strlen(eptr);
10871                 else {
10872                     eptr = (char *)nullstr;
10873                     elen = sizeof nullstr - 1;
10874                 }
10875             }
10876             else {
10877                 eptr = SvPV_const(argsv, elen);
10878                 if (DO_UTF8(argsv)) {
10879                     STRLEN old_precis = precis;
10880                     if (has_precis && precis < elen) {
10881                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10882                         STRLEN p = precis > ulen ? ulen : precis;
10883                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10884                                                         /* sticks at end */
10885                     }
10886                     if (width) { /* fudge width (can't fudge elen) */
10887                         if (has_precis && precis < elen)
10888                             width += precis - old_precis;
10889                         else
10890                             width +=
10891                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10892                     }
10893                     is_utf8 = TRUE;
10894                 }
10895             }
10896
10897         string:
10898             if (has_precis && precis < elen)
10899                 elen = precis;
10900             break;
10901
10902             /* INTEGERS */
10903
10904         case 'p':
10905             if (alt || vectorize)
10906                 goto unknown;
10907             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10908             base = 16;
10909             goto integer;
10910
10911         case 'D':
10912 #ifdef IV_IS_QUAD
10913             intsize = 'q';
10914 #else
10915             intsize = 'l';
10916 #endif
10917             /*FALLTHROUGH*/
10918         case 'd':
10919         case 'i':
10920 #if vdNUMBER
10921         format_vd:
10922 #endif
10923             if (vectorize) {
10924                 STRLEN ulen;
10925                 if (!veclen)
10926                     continue;
10927                 if (vec_utf8)
10928                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10929                                         UTF8_ALLOW_ANYUV);
10930                 else {
10931                     uv = *vecstr;
10932                     ulen = 1;
10933                 }
10934                 vecstr += ulen;
10935                 veclen -= ulen;
10936                 if (plus)
10937                      esignbuf[esignlen++] = plus;
10938             }
10939             else if (args) {
10940                 switch (intsize) {
10941                 case 'c':       iv = (char)va_arg(*args, int); break;
10942                 case 'h':       iv = (short)va_arg(*args, int); break;
10943                 case 'l':       iv = va_arg(*args, long); break;
10944                 case 'V':       iv = va_arg(*args, IV); break;
10945                 case 'z':       iv = va_arg(*args, SSize_t); break;
10946                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10947                 default:        iv = va_arg(*args, int); break;
10948 #if HAS_C99
10949                 case 'j':       iv = va_arg(*args, intmax_t); break;
10950 #endif
10951                 case 'q':
10952 #ifdef HAS_QUAD
10953                                 iv = va_arg(*args, Quad_t); break;
10954 #else
10955                                 goto unknown;
10956 #endif
10957                 }
10958             }
10959             else {
10960                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10961                 switch (intsize) {
10962                 case 'c':       iv = (char)tiv; break;
10963                 case 'h':       iv = (short)tiv; break;
10964                 case 'l':       iv = (long)tiv; break;
10965                 case 'V':
10966                 default:        iv = tiv; break;
10967                 case 'q':
10968 #ifdef HAS_QUAD
10969                                 iv = (Quad_t)tiv; break;
10970 #else
10971                                 goto unknown;
10972 #endif
10973                 }
10974             }
10975             if ( !vectorize )   /* we already set uv above */
10976             {
10977                 if (iv >= 0) {
10978                     uv = iv;
10979                     if (plus)
10980                         esignbuf[esignlen++] = plus;
10981                 }
10982                 else {
10983                     uv = -iv;
10984                     esignbuf[esignlen++] = '-';
10985                 }
10986             }
10987             base = 10;
10988             goto integer;
10989
10990         case 'U':
10991 #ifdef IV_IS_QUAD
10992             intsize = 'q';
10993 #else
10994             intsize = 'l';
10995 #endif
10996             /*FALLTHROUGH*/
10997         case 'u':
10998             base = 10;
10999             goto uns_integer;
11000
11001         case 'B':
11002         case 'b':
11003             base = 2;
11004             goto uns_integer;
11005
11006         case 'O':
11007 #ifdef IV_IS_QUAD
11008             intsize = 'q';
11009 #else
11010             intsize = 'l';
11011 #endif
11012             /*FALLTHROUGH*/
11013         case 'o':
11014             base = 8;
11015             goto uns_integer;
11016
11017         case 'X':
11018         case 'x':
11019             base = 16;
11020
11021         uns_integer:
11022             if (vectorize) {
11023                 STRLEN ulen;
11024         vector:
11025                 if (!veclen)
11026                     continue;
11027                 if (vec_utf8)
11028                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11029                                         UTF8_ALLOW_ANYUV);
11030                 else {
11031                     uv = *vecstr;
11032                     ulen = 1;
11033                 }
11034                 vecstr += ulen;
11035                 veclen -= ulen;
11036             }
11037             else if (args) {
11038                 switch (intsize) {
11039                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11040                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11041                 case 'l':  uv = va_arg(*args, unsigned long); break;
11042                 case 'V':  uv = va_arg(*args, UV); break;
11043                 case 'z':  uv = va_arg(*args, Size_t); break;
11044                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11045 #if HAS_C99
11046                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11047 #endif
11048                 default:   uv = va_arg(*args, unsigned); break;
11049                 case 'q':
11050 #ifdef HAS_QUAD
11051                            uv = va_arg(*args, Uquad_t); break;
11052 #else
11053                            goto unknown;
11054 #endif
11055                 }
11056             }
11057             else {
11058                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11059                 switch (intsize) {
11060                 case 'c':       uv = (unsigned char)tuv; break;
11061                 case 'h':       uv = (unsigned short)tuv; break;
11062                 case 'l':       uv = (unsigned long)tuv; break;
11063                 case 'V':
11064                 default:        uv = tuv; break;
11065                 case 'q':
11066 #ifdef HAS_QUAD
11067                                 uv = (Uquad_t)tuv; break;
11068 #else
11069                                 goto unknown;
11070 #endif
11071                 }
11072             }
11073
11074         integer:
11075             {
11076                 char *ptr = ebuf + sizeof ebuf;
11077                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11078                 zeros = 0;
11079
11080                 switch (base) {
11081                     unsigned dig;
11082                 case 16:
11083                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11084                     do {
11085                         dig = uv & 15;
11086                         *--ptr = p[dig];
11087                     } while (uv >>= 4);
11088                     if (tempalt) {
11089                         esignbuf[esignlen++] = '0';
11090                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11091                     }
11092                     break;
11093                 case 8:
11094                     do {
11095                         dig = uv & 7;
11096                         *--ptr = '0' + dig;
11097                     } while (uv >>= 3);
11098                     if (alt && *ptr != '0')
11099                         *--ptr = '0';
11100                     break;
11101                 case 2:
11102                     do {
11103                         dig = uv & 1;
11104                         *--ptr = '0' + dig;
11105                     } while (uv >>= 1);
11106                     if (tempalt) {
11107                         esignbuf[esignlen++] = '0';
11108                         esignbuf[esignlen++] = c;
11109                     }
11110                     break;
11111                 default:                /* it had better be ten or less */
11112                     do {
11113                         dig = uv % base;
11114                         *--ptr = '0' + dig;
11115                     } while (uv /= base);
11116                     break;
11117                 }
11118                 elen = (ebuf + sizeof ebuf) - ptr;
11119                 eptr = ptr;
11120                 if (has_precis) {
11121                     if (precis > elen)
11122                         zeros = precis - elen;
11123                     else if (precis == 0 && elen == 1 && *eptr == '0'
11124                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11125                         elen = 0;
11126
11127                 /* a precision nullifies the 0 flag. */
11128                     if (fill == '0')
11129                         fill = ' ';
11130                 }
11131             }
11132             break;
11133
11134             /* FLOATING POINT */
11135
11136         case 'F':
11137             c = 'f';            /* maybe %F isn't supported here */
11138             /*FALLTHROUGH*/
11139         case 'e': case 'E':
11140         case 'f':
11141         case 'g': case 'G':
11142             if (vectorize)
11143                 goto unknown;
11144
11145             /* This is evil, but floating point is even more evil */
11146
11147             /* for SV-style calling, we can only get NV
11148                for C-style calling, we assume %f is double;
11149                for simplicity we allow any of %Lf, %llf, %qf for long double
11150             */
11151             switch (intsize) {
11152             case 'V':
11153 #if defined(USE_LONG_DOUBLE)
11154                 intsize = 'q';
11155 #endif
11156                 break;
11157 /* [perl #20339] - we should accept and ignore %lf rather than die */
11158             case 'l':
11159                 /*FALLTHROUGH*/
11160             default:
11161 #if defined(USE_LONG_DOUBLE)
11162                 intsize = args ? 0 : 'q';
11163 #endif
11164                 break;
11165             case 'q':
11166 #if defined(HAS_LONG_DOUBLE)
11167                 break;
11168 #else
11169                 /*FALLTHROUGH*/
11170 #endif
11171             case 'c':
11172             case 'h':
11173             case 'z':
11174             case 't':
11175             case 'j':
11176                 goto unknown;
11177             }
11178
11179             /* now we need (long double) if intsize == 'q', else (double) */
11180             nv = (args) ?
11181 #if LONG_DOUBLESIZE > DOUBLESIZE
11182                 intsize == 'q' ?
11183                     va_arg(*args, long double) :
11184                     va_arg(*args, double)
11185 #else
11186                     va_arg(*args, double)
11187 #endif
11188                 : SvNV(argsv);
11189
11190             need = 0;
11191             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11192                else. frexp() has some unspecified behaviour for those three */
11193             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11194                 i = PERL_INT_MIN;
11195                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11196                    will cast our (long double) to (double) */
11197                 (void)Perl_frexp(nv, &i);
11198                 if (i == PERL_INT_MIN)
11199                     Perl_die(aTHX_ "panic: frexp");
11200                 if (i > 0)
11201                     need = BIT_DIGITS(i);
11202             }
11203             need += has_precis ? precis : 6; /* known default */
11204
11205             if (need < width)
11206                 need = width;
11207
11208 #ifdef HAS_LDBL_SPRINTF_BUG
11209             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11210                with sfio - Allen <allens@cpan.org> */
11211
11212 #  ifdef DBL_MAX
11213 #    define MY_DBL_MAX DBL_MAX
11214 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11215 #    if DOUBLESIZE >= 8
11216 #      define MY_DBL_MAX 1.7976931348623157E+308L
11217 #    else
11218 #      define MY_DBL_MAX 3.40282347E+38L
11219 #    endif
11220 #  endif
11221
11222 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11223 #    define MY_DBL_MAX_BUG 1L
11224 #  else
11225 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11226 #  endif
11227
11228 #  ifdef DBL_MIN
11229 #    define MY_DBL_MIN DBL_MIN
11230 #  else  /* XXX guessing! -Allen */
11231 #    if DOUBLESIZE >= 8
11232 #      define MY_DBL_MIN 2.2250738585072014E-308L
11233 #    else
11234 #      define MY_DBL_MIN 1.17549435E-38L
11235 #    endif
11236 #  endif
11237
11238             if ((intsize == 'q') && (c == 'f') &&
11239                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11240                 (need < DBL_DIG)) {
11241                 /* it's going to be short enough that
11242                  * long double precision is not needed */
11243
11244                 if ((nv <= 0L) && (nv >= -0L))
11245                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11246                 else {
11247                     /* would use Perl_fp_class as a double-check but not
11248                      * functional on IRIX - see perl.h comments */
11249
11250                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11251                         /* It's within the range that a double can represent */
11252 #if defined(DBL_MAX) && !defined(DBL_MIN)
11253                         if ((nv >= ((long double)1/DBL_MAX)) ||
11254                             (nv <= (-(long double)1/DBL_MAX)))
11255 #endif
11256                         fix_ldbl_sprintf_bug = TRUE;
11257                     }
11258                 }
11259                 if (fix_ldbl_sprintf_bug == TRUE) {
11260                     double temp;
11261
11262                     intsize = 0;
11263                     temp = (double)nv;
11264                     nv = (NV)temp;
11265                 }
11266             }
11267
11268 #  undef MY_DBL_MAX
11269 #  undef MY_DBL_MAX_BUG
11270 #  undef MY_DBL_MIN
11271
11272 #endif /* HAS_LDBL_SPRINTF_BUG */
11273
11274             need += 20; /* fudge factor */
11275             if (PL_efloatsize < need) {
11276                 Safefree(PL_efloatbuf);
11277                 PL_efloatsize = need + 20; /* more fudge */
11278                 Newx(PL_efloatbuf, PL_efloatsize, char);
11279                 PL_efloatbuf[0] = '\0';
11280             }
11281
11282             if ( !(width || left || plus || alt) && fill != '0'
11283                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11284                 /* See earlier comment about buggy Gconvert when digits,
11285                    aka precis is 0  */
11286                 if ( c == 'g' && precis) {
11287                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11288                     /* May return an empty string for digits==0 */
11289                     if (*PL_efloatbuf) {
11290                         elen = strlen(PL_efloatbuf);
11291                         goto float_converted;
11292                     }
11293                 } else if ( c == 'f' && !precis) {
11294                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11295                         break;
11296                 }
11297             }
11298             {
11299                 char *ptr = ebuf + sizeof ebuf;
11300                 *--ptr = '\0';
11301                 *--ptr = c;
11302                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11303 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11304                 if (intsize == 'q') {
11305                     /* Copy the one or more characters in a long double
11306                      * format before the 'base' ([efgEFG]) character to
11307                      * the format string. */
11308                     static char const prifldbl[] = PERL_PRIfldbl;
11309                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11310                     while (p >= prifldbl) { *--ptr = *p--; }
11311                 }
11312 #endif
11313                 if (has_precis) {
11314                     base = precis;
11315                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11316                     *--ptr = '.';
11317                 }
11318                 if (width) {
11319                     base = width;
11320                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11321                 }
11322                 if (fill == '0')
11323                     *--ptr = fill;
11324                 if (left)
11325                     *--ptr = '-';
11326                 if (plus)
11327                     *--ptr = plus;
11328                 if (alt)
11329                     *--ptr = '#';
11330                 *--ptr = '%';
11331
11332                 /* No taint.  Otherwise we are in the strange situation
11333                  * where printf() taints but print($float) doesn't.
11334                  * --jhi */
11335 #if defined(HAS_LONG_DOUBLE)
11336                 elen = ((intsize == 'q')
11337                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11338                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11339 #else
11340                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11341 #endif
11342             }
11343         float_converted:
11344             eptr = PL_efloatbuf;
11345             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
11346                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
11347             {
11348                 is_utf8 = TRUE;
11349             }
11350
11351             break;
11352
11353             /* SPECIAL */
11354
11355         case 'n':
11356             if (vectorize)
11357                 goto unknown;
11358             i = SvCUR(sv) - origlen;
11359             if (args) {
11360                 switch (intsize) {
11361                 case 'c':       *(va_arg(*args, char*)) = i; break;
11362                 case 'h':       *(va_arg(*args, short*)) = i; break;
11363                 default:        *(va_arg(*args, int*)) = i; break;
11364                 case 'l':       *(va_arg(*args, long*)) = i; break;
11365                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11366                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11367                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11368 #if HAS_C99
11369                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11370 #endif
11371                 case 'q':
11372 #ifdef HAS_QUAD
11373                                 *(va_arg(*args, Quad_t*)) = i; break;
11374 #else
11375                                 goto unknown;
11376 #endif
11377                 }
11378             }
11379             else
11380                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11381             continue;   /* not "break" */
11382
11383             /* UNKNOWN */
11384
11385         default:
11386       unknown:
11387             if (!args
11388                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11389                 && ckWARN(WARN_PRINTF))
11390             {
11391                 SV * const msg = sv_newmortal();
11392                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11393                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11394                 if (fmtstart < patend) {
11395                     const char * const fmtend = q < patend ? q : patend;
11396                     const char * f;
11397                     sv_catpvs(msg, "\"%");
11398                     for (f = fmtstart; f < fmtend; f++) {
11399                         if (isPRINT(*f)) {
11400                             sv_catpvn_nomg(msg, f, 1);
11401                         } else {
11402                             Perl_sv_catpvf(aTHX_ msg,
11403                                            "\\%03"UVof, (UV)*f & 0xFF);
11404                         }
11405                     }
11406                     sv_catpvs(msg, "\"");
11407                 } else {
11408                     sv_catpvs(msg, "end of string");
11409                 }
11410                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11411             }
11412
11413             /* output mangled stuff ... */
11414             if (c == '\0')
11415                 --q;
11416             eptr = p;
11417             elen = q - p;
11418
11419             /* ... right here, because formatting flags should not apply */
11420             SvGROW(sv, SvCUR(sv) + elen + 1);
11421             p = SvEND(sv);
11422             Copy(eptr, p, elen, char);
11423             p += elen;
11424             *p = '\0';
11425             SvCUR_set(sv, p - SvPVX_const(sv));
11426             svix = osvix;
11427             continue;   /* not "break" */
11428         }
11429
11430         if (is_utf8 != has_utf8) {
11431             if (is_utf8) {
11432                 if (SvCUR(sv))
11433                     sv_utf8_upgrade(sv);
11434             }
11435             else {
11436                 const STRLEN old_elen = elen;
11437                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11438                 sv_utf8_upgrade(nsv);
11439                 eptr = SvPVX_const(nsv);
11440                 elen = SvCUR(nsv);
11441
11442                 if (width) { /* fudge width (can't fudge elen) */
11443                     width += elen - old_elen;
11444                 }
11445                 is_utf8 = TRUE;
11446             }
11447         }
11448
11449         have = esignlen + zeros + elen;
11450         if (have < zeros)
11451             croak_memory_wrap();
11452
11453         need = (have > width ? have : width);
11454         gap = need - have;
11455
11456         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11457             croak_memory_wrap();
11458         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11459         p = SvEND(sv);
11460         if (esignlen && fill == '0') {
11461             int i;
11462             for (i = 0; i < (int)esignlen; i++)
11463                 *p++ = esignbuf[i];
11464         }
11465         if (gap && !left) {
11466             memset(p, fill, gap);
11467             p += gap;
11468         }
11469         if (esignlen && fill != '0') {
11470             int i;
11471             for (i = 0; i < (int)esignlen; i++)
11472                 *p++ = esignbuf[i];
11473         }
11474         if (zeros) {
11475             int i;
11476             for (i = zeros; i; i--)
11477                 *p++ = '0';
11478         }
11479         if (elen) {
11480             Copy(eptr, p, elen, char);
11481             p += elen;
11482         }
11483         if (gap && left) {
11484             memset(p, ' ', gap);
11485             p += gap;
11486         }
11487         if (vectorize) {
11488             if (veclen) {
11489                 Copy(dotstr, p, dotstrlen, char);
11490                 p += dotstrlen;
11491             }
11492             else
11493                 vectorize = FALSE;              /* done iterating over vecstr */
11494         }
11495         if (is_utf8)
11496             has_utf8 = TRUE;
11497         if (has_utf8)
11498             SvUTF8_on(sv);
11499         *p = '\0';
11500         SvCUR_set(sv, p - SvPVX_const(sv));
11501         if (vectorize) {
11502             esignlen = 0;
11503             goto vector;
11504         }
11505     }
11506     SvTAINT(sv);
11507 }
11508
11509 /* =========================================================================
11510
11511 =head1 Cloning an interpreter
11512
11513 All the macros and functions in this section are for the private use of
11514 the main function, perl_clone().
11515
11516 The foo_dup() functions make an exact copy of an existing foo thingy.
11517 During the course of a cloning, a hash table is used to map old addresses
11518 to new addresses.  The table is created and manipulated with the
11519 ptr_table_* functions.
11520
11521 =cut
11522
11523  * =========================================================================*/
11524
11525
11526 #if defined(USE_ITHREADS)
11527
11528 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11529 #ifndef GpREFCNT_inc
11530 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11531 #endif
11532
11533
11534 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11535    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11536    If this changes, please unmerge ss_dup.
11537    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11538 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11539 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11540 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11541 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11542 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11543 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11544 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11545 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11546 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11547 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11548 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11549 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11550 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11551
11552 /* clone a parser */
11553
11554 yy_parser *
11555 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11556 {
11557     yy_parser *parser;
11558
11559     PERL_ARGS_ASSERT_PARSER_DUP;
11560
11561     if (!proto)
11562         return NULL;
11563
11564     /* look for it in the table first */
11565     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11566     if (parser)
11567         return parser;
11568
11569     /* create anew and remember what it is */
11570     Newxz(parser, 1, yy_parser);
11571     ptr_table_store(PL_ptr_table, proto, parser);
11572
11573     /* XXX these not yet duped */
11574     parser->old_parser = NULL;
11575     parser->stack = NULL;
11576     parser->ps = NULL;
11577     parser->stack_size = 0;
11578     /* XXX parser->stack->state = 0; */
11579
11580     /* XXX eventually, just Copy() most of the parser struct ? */
11581
11582     parser->lex_brackets = proto->lex_brackets;
11583     parser->lex_casemods = proto->lex_casemods;
11584     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11585                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11586     parser->lex_casestack = savepvn(proto->lex_casestack,
11587                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11588     parser->lex_defer   = proto->lex_defer;
11589     parser->lex_dojoin  = proto->lex_dojoin;
11590     parser->lex_expect  = proto->lex_expect;
11591     parser->lex_formbrack = proto->lex_formbrack;
11592     parser->lex_inpat   = proto->lex_inpat;
11593     parser->lex_inwhat  = proto->lex_inwhat;
11594     parser->lex_op      = proto->lex_op;
11595     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11596     parser->lex_starts  = proto->lex_starts;
11597     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11598     parser->multi_close = proto->multi_close;
11599     parser->multi_open  = proto->multi_open;
11600     parser->multi_start = proto->multi_start;
11601     parser->multi_end   = proto->multi_end;
11602     parser->preambled   = proto->preambled;
11603     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11604     parser->linestr     = sv_dup_inc(proto->linestr, param);
11605     parser->expect      = proto->expect;
11606     parser->copline     = proto->copline;
11607     parser->last_lop_op = proto->last_lop_op;
11608     parser->lex_state   = proto->lex_state;
11609     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11610     /* rsfp_filters entries have fake IoDIRP() */
11611     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11612     parser->in_my       = proto->in_my;
11613     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11614     parser->error_count = proto->error_count;
11615
11616
11617     parser->linestr     = sv_dup_inc(proto->linestr, param);
11618
11619     {
11620         char * const ols = SvPVX(proto->linestr);
11621         char * const ls  = SvPVX(parser->linestr);
11622
11623         parser->bufptr      = ls + (proto->bufptr >= ols ?
11624                                     proto->bufptr -  ols : 0);
11625         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11626                                     proto->oldbufptr -  ols : 0);
11627         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11628                                     proto->oldoldbufptr -  ols : 0);
11629         parser->linestart   = ls + (proto->linestart >= ols ?
11630                                     proto->linestart -  ols : 0);
11631         parser->last_uni    = ls + (proto->last_uni >= ols ?
11632                                     proto->last_uni -  ols : 0);
11633         parser->last_lop    = ls + (proto->last_lop >= ols ?
11634                                     proto->last_lop -  ols : 0);
11635
11636         parser->bufend      = ls + SvCUR(parser->linestr);
11637     }
11638
11639     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11640
11641
11642 #ifdef PERL_MAD
11643     parser->endwhite    = proto->endwhite;
11644     parser->faketokens  = proto->faketokens;
11645     parser->lasttoke    = proto->lasttoke;
11646     parser->nextwhite   = proto->nextwhite;
11647     parser->realtokenstart = proto->realtokenstart;
11648     parser->skipwhite   = proto->skipwhite;
11649     parser->thisclose   = proto->thisclose;
11650     parser->thismad     = proto->thismad;
11651     parser->thisopen    = proto->thisopen;
11652     parser->thisstuff   = proto->thisstuff;
11653     parser->thistoken   = proto->thistoken;
11654     parser->thiswhite   = proto->thiswhite;
11655
11656     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11657     parser->curforce    = proto->curforce;
11658 #else
11659     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11660     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11661     parser->nexttoke    = proto->nexttoke;
11662 #endif
11663
11664     /* XXX should clone saved_curcop here, but we aren't passed
11665      * proto_perl; so do it in perl_clone_using instead */
11666
11667     return parser;
11668 }
11669
11670
11671 /* duplicate a file handle */
11672
11673 PerlIO *
11674 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11675 {
11676     PerlIO *ret;
11677
11678     PERL_ARGS_ASSERT_FP_DUP;
11679     PERL_UNUSED_ARG(type);
11680
11681     if (!fp)
11682         return (PerlIO*)NULL;
11683
11684     /* look for it in the table first */
11685     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11686     if (ret)
11687         return ret;
11688
11689     /* create anew and remember what it is */
11690     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11691     ptr_table_store(PL_ptr_table, fp, ret);
11692     return ret;
11693 }
11694
11695 /* duplicate a directory handle */
11696
11697 DIR *
11698 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11699 {
11700     DIR *ret;
11701
11702 #ifdef HAS_FCHDIR
11703     DIR *pwd;
11704     const Direntry_t *dirent;
11705     char smallbuf[256];
11706     char *name = NULL;
11707     STRLEN len = 0;
11708     long pos;
11709 #endif
11710
11711     PERL_UNUSED_CONTEXT;
11712     PERL_ARGS_ASSERT_DIRP_DUP;
11713
11714     if (!dp)
11715         return (DIR*)NULL;
11716
11717     /* look for it in the table first */
11718     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11719     if (ret)
11720         return ret;
11721
11722 #ifdef HAS_FCHDIR
11723
11724     PERL_UNUSED_ARG(param);
11725
11726     /* create anew */
11727
11728     /* open the current directory (so we can switch back) */
11729     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11730
11731     /* chdir to our dir handle and open the present working directory */
11732     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11733         PerlDir_close(pwd);
11734         return (DIR *)NULL;
11735     }
11736     /* Now we should have two dir handles pointing to the same dir. */
11737
11738     /* Be nice to the calling code and chdir back to where we were. */
11739     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11740
11741     /* We have no need of the pwd handle any more. */
11742     PerlDir_close(pwd);
11743
11744 #ifdef DIRNAMLEN
11745 # define d_namlen(d) (d)->d_namlen
11746 #else
11747 # define d_namlen(d) strlen((d)->d_name)
11748 #endif
11749     /* Iterate once through dp, to get the file name at the current posi-
11750        tion. Then step back. */
11751     pos = PerlDir_tell(dp);
11752     if ((dirent = PerlDir_read(dp))) {
11753         len = d_namlen(dirent);
11754         if (len <= sizeof smallbuf) name = smallbuf;
11755         else Newx(name, len, char);
11756         Move(dirent->d_name, name, len, char);
11757     }
11758     PerlDir_seek(dp, pos);
11759
11760     /* Iterate through the new dir handle, till we find a file with the
11761        right name. */
11762     if (!dirent) /* just before the end */
11763         for(;;) {
11764             pos = PerlDir_tell(ret);
11765             if (PerlDir_read(ret)) continue; /* not there yet */
11766             PerlDir_seek(ret, pos); /* step back */
11767             break;
11768         }
11769     else {
11770         const long pos0 = PerlDir_tell(ret);
11771         for(;;) {
11772             pos = PerlDir_tell(ret);
11773             if ((dirent = PerlDir_read(ret))) {
11774                 if (len == d_namlen(dirent)
11775                  && memEQ(name, dirent->d_name, len)) {
11776                     /* found it */
11777                     PerlDir_seek(ret, pos); /* step back */
11778                     break;
11779                 }
11780                 /* else we are not there yet; keep iterating */
11781             }
11782             else { /* This is not meant to happen. The best we can do is
11783                       reset the iterator to the beginning. */
11784                 PerlDir_seek(ret, pos0);
11785                 break;
11786             }
11787         }
11788     }
11789 #undef d_namlen
11790
11791     if (name && name != smallbuf)
11792         Safefree(name);
11793 #endif
11794
11795 #ifdef WIN32
11796     ret = win32_dirp_dup(dp, param);
11797 #endif
11798
11799     /* pop it in the pointer table */
11800     if (ret)
11801         ptr_table_store(PL_ptr_table, dp, ret);
11802
11803     return ret;
11804 }
11805
11806 /* duplicate a typeglob */
11807
11808 GP *
11809 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11810 {
11811     GP *ret;
11812
11813     PERL_ARGS_ASSERT_GP_DUP;
11814
11815     if (!gp)
11816         return (GP*)NULL;
11817     /* look for it in the table first */
11818     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11819     if (ret)
11820         return ret;
11821
11822     /* create anew and remember what it is */
11823     Newxz(ret, 1, GP);
11824     ptr_table_store(PL_ptr_table, gp, ret);
11825
11826     /* clone */
11827     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11828        on Newxz() to do this for us.  */
11829     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11830     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11831     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11832     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11833     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11834     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11835     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11836     ret->gp_cvgen       = gp->gp_cvgen;
11837     ret->gp_line        = gp->gp_line;
11838     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11839     return ret;
11840 }
11841
11842 /* duplicate a chain of magic */
11843
11844 MAGIC *
11845 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11846 {
11847     MAGIC *mgret = NULL;
11848     MAGIC **mgprev_p = &mgret;
11849
11850     PERL_ARGS_ASSERT_MG_DUP;
11851
11852     for (; mg; mg = mg->mg_moremagic) {
11853         MAGIC *nmg;
11854
11855         if ((param->flags & CLONEf_JOIN_IN)
11856                 && mg->mg_type == PERL_MAGIC_backref)
11857             /* when joining, we let the individual SVs add themselves to
11858              * backref as needed. */
11859             continue;
11860
11861         Newx(nmg, 1, MAGIC);
11862         *mgprev_p = nmg;
11863         mgprev_p = &(nmg->mg_moremagic);
11864
11865         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11866            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11867            from the original commit adding Perl_mg_dup() - revision 4538.
11868            Similarly there is the annotation "XXX random ptr?" next to the
11869            assignment to nmg->mg_ptr.  */
11870         *nmg = *mg;
11871
11872         /* FIXME for plugins
11873         if (nmg->mg_type == PERL_MAGIC_qr) {
11874             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11875         }
11876         else
11877         */
11878         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11879                           ? nmg->mg_type == PERL_MAGIC_backref
11880                                 /* The backref AV has its reference
11881                                  * count deliberately bumped by 1 */
11882                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11883                                                     nmg->mg_obj, param))
11884                                 : sv_dup_inc(nmg->mg_obj, param)
11885                           : sv_dup(nmg->mg_obj, param);
11886
11887         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11888             if (nmg->mg_len > 0) {
11889                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11890                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11891                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11892                 {
11893                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11894                     sv_dup_inc_multiple((SV**)(namtp->table),
11895                                         (SV**)(namtp->table), NofAMmeth, param);
11896                 }
11897             }
11898             else if (nmg->mg_len == HEf_SVKEY)
11899                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11900         }
11901         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11902             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11903         }
11904     }
11905     return mgret;
11906 }
11907
11908 #endif /* USE_ITHREADS */
11909
11910 struct ptr_tbl_arena {
11911     struct ptr_tbl_arena *next;
11912     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11913 };
11914
11915 /* create a new pointer-mapping table */
11916
11917 PTR_TBL_t *
11918 Perl_ptr_table_new(pTHX)
11919 {
11920     PTR_TBL_t *tbl;
11921     PERL_UNUSED_CONTEXT;
11922
11923     Newx(tbl, 1, PTR_TBL_t);
11924     tbl->tbl_max        = 511;
11925     tbl->tbl_items      = 0;
11926     tbl->tbl_arena      = NULL;
11927     tbl->tbl_arena_next = NULL;
11928     tbl->tbl_arena_end  = NULL;
11929     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11930     return tbl;
11931 }
11932
11933 #define PTR_TABLE_HASH(ptr) \
11934   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11935
11936 /* map an existing pointer using a table */
11937
11938 STATIC PTR_TBL_ENT_t *
11939 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11940 {
11941     PTR_TBL_ENT_t *tblent;
11942     const UV hash = PTR_TABLE_HASH(sv);
11943
11944     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11945
11946     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11947     for (; tblent; tblent = tblent->next) {
11948         if (tblent->oldval == sv)
11949             return tblent;
11950     }
11951     return NULL;
11952 }
11953
11954 void *
11955 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11956 {
11957     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11958
11959     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11960     PERL_UNUSED_CONTEXT;
11961
11962     return tblent ? tblent->newval : NULL;
11963 }
11964
11965 /* add a new entry to a pointer-mapping table */
11966
11967 void
11968 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11969 {
11970     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11971
11972     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11973     PERL_UNUSED_CONTEXT;
11974
11975     if (tblent) {
11976         tblent->newval = newsv;
11977     } else {
11978         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11979
11980         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11981             struct ptr_tbl_arena *new_arena;
11982
11983             Newx(new_arena, 1, struct ptr_tbl_arena);
11984             new_arena->next = tbl->tbl_arena;
11985             tbl->tbl_arena = new_arena;
11986             tbl->tbl_arena_next = new_arena->array;
11987             tbl->tbl_arena_end = new_arena->array
11988                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11989         }
11990
11991         tblent = tbl->tbl_arena_next++;
11992
11993         tblent->oldval = oldsv;
11994         tblent->newval = newsv;
11995         tblent->next = tbl->tbl_ary[entry];
11996         tbl->tbl_ary[entry] = tblent;
11997         tbl->tbl_items++;
11998         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11999             ptr_table_split(tbl);
12000     }
12001 }
12002
12003 /* double the hash bucket size of an existing ptr table */
12004
12005 void
12006 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12007 {
12008     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12009     const UV oldsize = tbl->tbl_max + 1;
12010     UV newsize = oldsize * 2;
12011     UV i;
12012
12013     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12014     PERL_UNUSED_CONTEXT;
12015
12016     Renew(ary, newsize, PTR_TBL_ENT_t*);
12017     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12018     tbl->tbl_max = --newsize;
12019     tbl->tbl_ary = ary;
12020     for (i=0; i < oldsize; i++, ary++) {
12021         PTR_TBL_ENT_t **entp = ary;
12022         PTR_TBL_ENT_t *ent = *ary;
12023         PTR_TBL_ENT_t **curentp;
12024         if (!ent)
12025             continue;
12026         curentp = ary + oldsize;
12027         do {
12028             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12029                 *entp = ent->next;
12030                 ent->next = *curentp;
12031                 *curentp = ent;
12032             }
12033             else
12034                 entp = &ent->next;
12035             ent = *entp;
12036         } while (ent);
12037     }
12038 }
12039
12040 /* remove all the entries from a ptr table */
12041 /* Deprecated - will be removed post 5.14 */
12042
12043 void
12044 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12045 {
12046     if (tbl && tbl->tbl_items) {
12047         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12048
12049         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12050
12051         while (arena) {
12052             struct ptr_tbl_arena *next = arena->next;
12053
12054             Safefree(arena);
12055             arena = next;
12056         };
12057
12058         tbl->tbl_items = 0;
12059         tbl->tbl_arena = NULL;
12060         tbl->tbl_arena_next = NULL;
12061         tbl->tbl_arena_end = NULL;
12062     }
12063 }
12064
12065 /* clear and free a ptr table */
12066
12067 void
12068 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12069 {
12070     struct ptr_tbl_arena *arena;
12071
12072     if (!tbl) {
12073         return;
12074     }
12075
12076     arena = tbl->tbl_arena;
12077
12078     while (arena) {
12079         struct ptr_tbl_arena *next = arena->next;
12080
12081         Safefree(arena);
12082         arena = next;
12083     }
12084
12085     Safefree(tbl->tbl_ary);
12086     Safefree(tbl);
12087 }
12088
12089 #if defined(USE_ITHREADS)
12090
12091 void
12092 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12093 {
12094     PERL_ARGS_ASSERT_RVPV_DUP;
12095
12096     assert(!isREGEXP(sstr));
12097     if (SvROK(sstr)) {
12098         if (SvWEAKREF(sstr)) {
12099             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12100             if (param->flags & CLONEf_JOIN_IN) {
12101                 /* if joining, we add any back references individually rather
12102                  * than copying the whole backref array */
12103                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12104             }
12105         }
12106         else
12107             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12108     }
12109     else if (SvPVX_const(sstr)) {
12110         /* Has something there */
12111         if (SvLEN(sstr)) {
12112             /* Normal PV - clone whole allocated space */
12113             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12114             /* sstr may not be that normal, but actually copy on write.
12115                But we are a true, independent SV, so:  */
12116             SvIsCOW_off(dstr);
12117         }
12118         else {
12119             /* Special case - not normally malloced for some reason */
12120             if (isGV_with_GP(sstr)) {
12121                 /* Don't need to do anything here.  */
12122             }
12123             else if ((SvIsCOW(sstr))) {
12124                 /* A "shared" PV - clone it as "shared" PV */
12125                 SvPV_set(dstr,
12126                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12127                                          param)));
12128             }
12129             else {
12130                 /* Some other special case - random pointer */
12131                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12132             }
12133         }
12134     }
12135     else {
12136         /* Copy the NULL */
12137         SvPV_set(dstr, NULL);
12138     }
12139 }
12140
12141 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12142 static SV **
12143 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12144                       SSize_t items, CLONE_PARAMS *const param)
12145 {
12146     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12147
12148     while (items-- > 0) {
12149         *dest++ = sv_dup_inc(*source++, param);
12150     }
12151
12152     return dest;
12153 }
12154
12155 /* duplicate an SV of any type (including AV, HV etc) */
12156
12157 static SV *
12158 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12159 {
12160     dVAR;
12161     SV *dstr;
12162
12163     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12164
12165     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12166 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12167         abort();
12168 #endif
12169         return NULL;
12170     }
12171     /* look for it in the table first */
12172     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12173     if (dstr)
12174         return dstr;
12175
12176     if(param->flags & CLONEf_JOIN_IN) {
12177         /** We are joining here so we don't want do clone
12178             something that is bad **/
12179         if (SvTYPE(sstr) == SVt_PVHV) {
12180             const HEK * const hvname = HvNAME_HEK(sstr);
12181             if (hvname) {
12182                 /** don't clone stashes if they already exist **/
12183                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12184                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12185                 ptr_table_store(PL_ptr_table, sstr, dstr);
12186                 return dstr;
12187             }
12188         }
12189         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12190             HV *stash = GvSTASH(sstr);
12191             const HEK * hvname;
12192             if (stash && (hvname = HvNAME_HEK(stash))) {
12193                 /** don't clone GVs if they already exist **/
12194                 SV **svp;
12195                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12196                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12197                 svp = hv_fetch(
12198                         stash, GvNAME(sstr),
12199                         GvNAMEUTF8(sstr)
12200                             ? -GvNAMELEN(sstr)
12201                             :  GvNAMELEN(sstr),
12202                         0
12203                       );
12204                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12205                     ptr_table_store(PL_ptr_table, sstr, *svp);
12206                     return *svp;
12207                 }
12208             }
12209         }
12210     }
12211
12212     /* create anew and remember what it is */
12213     new_SV(dstr);
12214
12215 #ifdef DEBUG_LEAKING_SCALARS
12216     dstr->sv_debug_optype = sstr->sv_debug_optype;
12217     dstr->sv_debug_line = sstr->sv_debug_line;
12218     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12219     dstr->sv_debug_parent = (SV*)sstr;
12220     FREE_SV_DEBUG_FILE(dstr);
12221     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12222 #endif
12223
12224     ptr_table_store(PL_ptr_table, sstr, dstr);
12225
12226     /* clone */
12227     SvFLAGS(dstr)       = SvFLAGS(sstr);
12228     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12229     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12230
12231 #ifdef DEBUGGING
12232     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12233         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12234                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12235 #endif
12236
12237     /* don't clone objects whose class has asked us not to */
12238     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12239         SvFLAGS(dstr) = 0;
12240         return dstr;
12241     }
12242
12243     switch (SvTYPE(sstr)) {
12244     case SVt_NULL:
12245         SvANY(dstr)     = NULL;
12246         break;
12247     case SVt_IV:
12248         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12249         if(SvROK(sstr)) {
12250             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12251         } else {
12252             SvIV_set(dstr, SvIVX(sstr));
12253         }
12254         break;
12255     case SVt_NV:
12256         SvANY(dstr)     = new_XNV();
12257         SvNV_set(dstr, SvNVX(sstr));
12258         break;
12259     default:
12260         {
12261             /* These are all the types that need complex bodies allocating.  */
12262             void *new_body;
12263             const svtype sv_type = SvTYPE(sstr);
12264             const struct body_details *const sv_type_details
12265                 = bodies_by_type + sv_type;
12266
12267             switch (sv_type) {
12268             default:
12269                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12270                 break;
12271
12272             case SVt_PVGV:
12273             case SVt_PVIO:
12274             case SVt_PVFM:
12275             case SVt_PVHV:
12276             case SVt_PVAV:
12277             case SVt_PVCV:
12278             case SVt_PVLV:
12279             case SVt_REGEXP:
12280             case SVt_PVMG:
12281             case SVt_PVNV:
12282             case SVt_PVIV:
12283             case SVt_INVLIST:
12284             case SVt_PV:
12285                 assert(sv_type_details->body_size);
12286                 if (sv_type_details->arena) {
12287                     new_body_inline(new_body, sv_type);
12288                     new_body
12289                         = (void*)((char*)new_body - sv_type_details->offset);
12290                 } else {
12291                     new_body = new_NOARENA(sv_type_details);
12292                 }
12293             }
12294             assert(new_body);
12295             SvANY(dstr) = new_body;
12296
12297 #ifndef PURIFY
12298             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12299                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12300                  sv_type_details->copy, char);
12301 #else
12302             Copy(((char*)SvANY(sstr)),
12303                  ((char*)SvANY(dstr)),
12304                  sv_type_details->body_size + sv_type_details->offset, char);
12305 #endif
12306
12307             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12308                 && !isGV_with_GP(dstr)
12309                 && !isREGEXP(dstr)
12310                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12311                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12312
12313             /* The Copy above means that all the source (unduplicated) pointers
12314                are now in the destination.  We can check the flags and the
12315                pointers in either, but it's possible that there's less cache
12316                missing by always going for the destination.
12317                FIXME - instrument and check that assumption  */
12318             if (sv_type >= SVt_PVMG) {
12319                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12320                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12321                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
12322                     NOOP;
12323                 } else if (SvMAGIC(dstr))
12324                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12325                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12326                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12327                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12328             }
12329
12330             /* The cast silences a GCC warning about unhandled types.  */
12331             switch ((int)sv_type) {
12332             case SVt_PV:
12333                 break;
12334             case SVt_PVIV:
12335                 break;
12336             case SVt_PVNV:
12337                 break;
12338             case SVt_PVMG:
12339                 break;
12340             case SVt_REGEXP:
12341               duprex:
12342                 /* FIXME for plugins */
12343                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12344                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12345                 break;
12346             case SVt_PVLV:
12347                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12348                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12349                     LvTARG(dstr) = dstr;
12350                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12351                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12352                 else
12353                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12354                 if (isREGEXP(sstr)) goto duprex;
12355             case SVt_PVGV:
12356                 /* non-GP case already handled above */
12357                 if(isGV_with_GP(sstr)) {
12358                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12359                     /* Don't call sv_add_backref here as it's going to be
12360                        created as part of the magic cloning of the symbol
12361                        table--unless this is during a join and the stash
12362                        is not actually being cloned.  */
12363                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12364                        at the point of this comment.  */
12365                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12366                     if (param->flags & CLONEf_JOIN_IN)
12367                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12368                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12369                     (void)GpREFCNT_inc(GvGP(dstr));
12370                 }
12371                 break;
12372             case SVt_PVIO:
12373                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12374                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12375                     /* I have no idea why fake dirp (rsfps)
12376                        should be treated differently but otherwise
12377                        we end up with leaks -- sky*/
12378                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12379                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12380                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12381                 } else {
12382                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12383                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12384                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12385                     if (IoDIRP(dstr)) {
12386                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12387                     } else {
12388                         NOOP;
12389                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12390                     }
12391                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12392                 }
12393                 if (IoOFP(dstr) == IoIFP(sstr))
12394                     IoOFP(dstr) = IoIFP(dstr);
12395                 else
12396                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12397                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12398                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12399                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12400                 break;
12401             case SVt_PVAV:
12402                 /* avoid cloning an empty array */
12403                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12404                     SV **dst_ary, **src_ary;
12405                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12406
12407                     src_ary = AvARRAY((const AV *)sstr);
12408                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12409                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12410                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12411                     AvALLOC((const AV *)dstr) = dst_ary;
12412                     if (AvREAL((const AV *)sstr)) {
12413                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12414                                                       param);
12415                     }
12416                     else {
12417                         while (items-- > 0)
12418                             *dst_ary++ = sv_dup(*src_ary++, param);
12419                     }
12420                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12421                     while (items-- > 0) {
12422                         *dst_ary++ = &PL_sv_undef;
12423                     }
12424                 }
12425                 else {
12426                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12427                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12428                     AvMAX(  (const AV *)dstr)   = -1;
12429                     AvFILLp((const AV *)dstr)   = -1;
12430                 }
12431                 break;
12432             case SVt_PVHV:
12433                 if (HvARRAY((const HV *)sstr)) {
12434                     STRLEN i = 0;
12435                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12436                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12437                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12438                     char *darray;
12439                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12440                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12441                         char);
12442                     HvARRAY(dstr) = (HE**)darray;
12443                     while (i <= sxhv->xhv_max) {
12444                         const HE * const source = HvARRAY(sstr)[i];
12445                         HvARRAY(dstr)[i] = source
12446                             ? he_dup(source, sharekeys, param) : 0;
12447                         ++i;
12448                     }
12449                     if (SvOOK(sstr)) {
12450                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12451                         struct xpvhv_aux * const daux = HvAUX(dstr);
12452                         /* This flag isn't copied.  */
12453                         SvOOK_on(dstr);
12454
12455                         if (saux->xhv_name_count) {
12456                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12457                             const I32 count
12458                              = saux->xhv_name_count < 0
12459                                 ? -saux->xhv_name_count
12460                                 :  saux->xhv_name_count;
12461                             HEK **shekp = sname + count;
12462                             HEK **dhekp;
12463                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12464                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12465                             while (shekp-- > sname) {
12466                                 dhekp--;
12467                                 *dhekp = hek_dup(*shekp, param);
12468                             }
12469                         }
12470                         else {
12471                             daux->xhv_name_u.xhvnameu_name
12472                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12473                                           param);
12474                         }
12475                         daux->xhv_name_count = saux->xhv_name_count;
12476
12477                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12478                         daux->xhv_riter = saux->xhv_riter;
12479                         daux->xhv_eiter = saux->xhv_eiter
12480                             ? he_dup(saux->xhv_eiter,
12481                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12482                         /* backref array needs refcnt=2; see sv_add_backref */
12483                         daux->xhv_backreferences =
12484                             (param->flags & CLONEf_JOIN_IN)
12485                                 /* when joining, we let the individual GVs and
12486                                  * CVs add themselves to backref as
12487                                  * needed. This avoids pulling in stuff
12488                                  * that isn't required, and simplifies the
12489                                  * case where stashes aren't cloned back
12490                                  * if they already exist in the parent
12491                                  * thread */
12492                             ? NULL
12493                             : saux->xhv_backreferences
12494                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12495                                     ? MUTABLE_AV(SvREFCNT_inc(
12496                                           sv_dup_inc((const SV *)
12497                                             saux->xhv_backreferences, param)))
12498                                     : MUTABLE_AV(sv_dup((const SV *)
12499                                             saux->xhv_backreferences, param))
12500                                 : 0;
12501
12502                         daux->xhv_mro_meta = saux->xhv_mro_meta
12503                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12504                             : 0;
12505                         daux->xhv_super = NULL;
12506
12507                         /* Record stashes for possible cloning in Perl_clone(). */
12508                         if (HvNAME(sstr))
12509                             av_push(param->stashes, dstr);
12510                     }
12511                 }
12512                 else
12513                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12514                 break;
12515             case SVt_PVCV:
12516                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12517                     CvDEPTH(dstr) = 0;
12518                 }
12519                 /*FALLTHROUGH*/
12520             case SVt_PVFM:
12521                 /* NOTE: not refcounted */
12522                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12523                     hv_dup(CvSTASH(dstr), param);
12524                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12525                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12526                 if (!CvISXSUB(dstr)) {
12527                     OP_REFCNT_LOCK;
12528                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12529                     OP_REFCNT_UNLOCK;
12530                     CvSLABBED_off(dstr);
12531                 } else if (CvCONST(dstr)) {
12532                     CvXSUBANY(dstr).any_ptr =
12533                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12534                 }
12535                 assert(!CvSLABBED(dstr));
12536                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12537                 if (CvNAMED(dstr))
12538                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12539                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12540                 /* don't dup if copying back - CvGV isn't refcounted, so the
12541                  * duped GV may never be freed. A bit of a hack! DAPM */
12542                 else
12543                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12544                     CvCVGV_RC(dstr)
12545                     ? gv_dup_inc(CvGV(sstr), param)
12546                     : (param->flags & CLONEf_JOIN_IN)
12547                         ? NULL
12548                         : gv_dup(CvGV(sstr), param);
12549
12550                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12551                 CvOUTSIDE(dstr) =
12552                     CvWEAKOUTSIDE(sstr)
12553                     ? cv_dup(    CvOUTSIDE(dstr), param)
12554                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12555                 break;
12556             }
12557         }
12558     }
12559
12560     return dstr;
12561  }
12562
12563 SV *
12564 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12565 {
12566     PERL_ARGS_ASSERT_SV_DUP_INC;
12567     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12568 }
12569
12570 SV *
12571 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12572 {
12573     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12574     PERL_ARGS_ASSERT_SV_DUP;
12575
12576     /* Track every SV that (at least initially) had a reference count of 0.
12577        We need to do this by holding an actual reference to it in this array.
12578        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12579        (akin to the stashes hash, and the perl stack), we come unstuck if
12580        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12581        thread) is manipulated in a CLONE method, because CLONE runs before the
12582        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12583        (and fix things up by giving each a reference via the temps stack).
12584        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12585        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12586        before the walk of unreferenced happens and a reference to that is SV
12587        added to the temps stack. At which point we have the same SV considered
12588        to be in use, and free to be re-used. Not good.
12589     */
12590     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12591         assert(param->unreferenced);
12592         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12593     }
12594
12595     return dstr;
12596 }
12597
12598 /* duplicate a context */
12599
12600 PERL_CONTEXT *
12601 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12602 {
12603     PERL_CONTEXT *ncxs;
12604
12605     PERL_ARGS_ASSERT_CX_DUP;
12606
12607     if (!cxs)
12608         return (PERL_CONTEXT*)NULL;
12609
12610     /* look for it in the table first */
12611     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12612     if (ncxs)
12613         return ncxs;
12614
12615     /* create anew and remember what it is */
12616     Newx(ncxs, max + 1, PERL_CONTEXT);
12617     ptr_table_store(PL_ptr_table, cxs, ncxs);
12618     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12619
12620     while (ix >= 0) {
12621         PERL_CONTEXT * const ncx = &ncxs[ix];
12622         if (CxTYPE(ncx) == CXt_SUBST) {
12623             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12624         }
12625         else {
12626             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12627             switch (CxTYPE(ncx)) {
12628             case CXt_SUB:
12629                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12630                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12631                                            : cv_dup(ncx->blk_sub.cv,param));
12632                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12633                                            ? av_dup_inc(ncx->blk_sub.argarray,
12634                                                         param)
12635                                            : NULL);
12636                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12637                                                      param);
12638                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12639                                            ncx->blk_sub.oldcomppad);
12640                 break;
12641             case CXt_EVAL:
12642                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12643                                                       param);
12644                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12645                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12646                 break;
12647             case CXt_LOOP_LAZYSV:
12648                 ncx->blk_loop.state_u.lazysv.end
12649                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12650                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12651                    actually being the same function, and order equivalence of
12652                    the two unions.
12653                    We can assert the later [but only at run time :-(]  */
12654                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12655                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12656             case CXt_LOOP_FOR:
12657                 ncx->blk_loop.state_u.ary.ary
12658                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12659             case CXt_LOOP_LAZYIV:
12660             case CXt_LOOP_PLAIN:
12661                 if (CxPADLOOP(ncx)) {
12662                     ncx->blk_loop.itervar_u.oldcomppad
12663                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12664                                         ncx->blk_loop.itervar_u.oldcomppad);
12665                 } else {
12666                     ncx->blk_loop.itervar_u.gv
12667                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12668                                     param);
12669                 }
12670                 break;
12671             case CXt_FORMAT:
12672                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12673                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12674                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12675                                                      param);
12676                 break;
12677             case CXt_BLOCK:
12678             case CXt_NULL:
12679             case CXt_WHEN:
12680             case CXt_GIVEN:
12681                 break;
12682             }
12683         }
12684         --ix;
12685     }
12686     return ncxs;
12687 }
12688
12689 /* duplicate a stack info structure */
12690
12691 PERL_SI *
12692 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12693 {
12694     PERL_SI *nsi;
12695
12696     PERL_ARGS_ASSERT_SI_DUP;
12697
12698     if (!si)
12699         return (PERL_SI*)NULL;
12700
12701     /* look for it in the table first */
12702     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12703     if (nsi)
12704         return nsi;
12705
12706     /* create anew and remember what it is */
12707     Newxz(nsi, 1, PERL_SI);
12708     ptr_table_store(PL_ptr_table, si, nsi);
12709
12710     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12711     nsi->si_cxix        = si->si_cxix;
12712     nsi->si_cxmax       = si->si_cxmax;
12713     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12714     nsi->si_type        = si->si_type;
12715     nsi->si_prev        = si_dup(si->si_prev, param);
12716     nsi->si_next        = si_dup(si->si_next, param);
12717     nsi->si_markoff     = si->si_markoff;
12718
12719     return nsi;
12720 }
12721
12722 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12723 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12724 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12725 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12726 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12727 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12728 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12729 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12730 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12731 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12732 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12733 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12734 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12735 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12736 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12737 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12738
12739 /* XXXXX todo */
12740 #define pv_dup_inc(p)   SAVEPV(p)
12741 #define pv_dup(p)       SAVEPV(p)
12742 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12743
12744 /* map any object to the new equivent - either something in the
12745  * ptr table, or something in the interpreter structure
12746  */
12747
12748 void *
12749 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12750 {
12751     void *ret;
12752
12753     PERL_ARGS_ASSERT_ANY_DUP;
12754
12755     if (!v)
12756         return (void*)NULL;
12757
12758     /* look for it in the table first */
12759     ret = ptr_table_fetch(PL_ptr_table, v);
12760     if (ret)
12761         return ret;
12762
12763     /* see if it is part of the interpreter structure */
12764     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12765         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12766     else {
12767         ret = v;
12768     }
12769
12770     return ret;
12771 }
12772
12773 /* duplicate the save stack */
12774
12775 ANY *
12776 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12777 {
12778     dVAR;
12779     ANY * const ss      = proto_perl->Isavestack;
12780     const I32 max       = proto_perl->Isavestack_max;
12781     I32 ix              = proto_perl->Isavestack_ix;
12782     ANY *nss;
12783     const SV *sv;
12784     const GV *gv;
12785     const AV *av;
12786     const HV *hv;
12787     void* ptr;
12788     int intval;
12789     long longval;
12790     GP *gp;
12791     IV iv;
12792     I32 i;
12793     char *c = NULL;
12794     void (*dptr) (void*);
12795     void (*dxptr) (pTHX_ void*);
12796
12797     PERL_ARGS_ASSERT_SS_DUP;
12798
12799     Newxz(nss, max, ANY);
12800
12801     while (ix > 0) {
12802         const UV uv = POPUV(ss,ix);
12803         const U8 type = (U8)uv & SAVE_MASK;
12804
12805         TOPUV(nss,ix) = uv;
12806         switch (type) {
12807         case SAVEt_CLEARSV:
12808         case SAVEt_CLEARPADRANGE:
12809             break;
12810         case SAVEt_HELEM:               /* hash element */
12811             sv = (const SV *)POPPTR(ss,ix);
12812             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12813             /* fall through */
12814         case SAVEt_ITEM:                        /* normal string */
12815         case SAVEt_GVSV:                        /* scalar slot in GV */
12816         case SAVEt_SV:                          /* scalar reference */
12817             sv = (const SV *)POPPTR(ss,ix);
12818             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12819             /* fall through */
12820         case SAVEt_FREESV:
12821         case SAVEt_MORTALIZESV:
12822         case SAVEt_READONLY_OFF:
12823             sv = (const SV *)POPPTR(ss,ix);
12824             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12825             break;
12826         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12827             c = (char*)POPPTR(ss,ix);
12828             TOPPTR(nss,ix) = savesharedpv(c);
12829             ptr = POPPTR(ss,ix);
12830             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12831             break;
12832         case SAVEt_GENERIC_SVREF:               /* generic sv */
12833         case SAVEt_SVREF:                       /* scalar reference */
12834             sv = (const SV *)POPPTR(ss,ix);
12835             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12836             ptr = POPPTR(ss,ix);
12837             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12838             break;
12839         case SAVEt_GVSLOT:              /* any slot in GV */
12840             sv = (const SV *)POPPTR(ss,ix);
12841             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12842             ptr = POPPTR(ss,ix);
12843             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12844             sv = (const SV *)POPPTR(ss,ix);
12845             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12846             break;
12847         case SAVEt_HV:                          /* hash reference */
12848         case SAVEt_AV:                          /* array reference */
12849             sv = (const SV *) POPPTR(ss,ix);
12850             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12851             /* fall through */
12852         case SAVEt_COMPPAD:
12853         case SAVEt_NSTAB:
12854             sv = (const SV *) POPPTR(ss,ix);
12855             TOPPTR(nss,ix) = sv_dup(sv, param);
12856             break;
12857         case SAVEt_INT:                         /* int reference */
12858             ptr = POPPTR(ss,ix);
12859             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12860             intval = (int)POPINT(ss,ix);
12861             TOPINT(nss,ix) = intval;
12862             break;
12863         case SAVEt_LONG:                        /* long reference */
12864             ptr = POPPTR(ss,ix);
12865             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12866             longval = (long)POPLONG(ss,ix);
12867             TOPLONG(nss,ix) = longval;
12868             break;
12869         case SAVEt_I32:                         /* I32 reference */
12870             ptr = POPPTR(ss,ix);
12871             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12872             i = POPINT(ss,ix);
12873             TOPINT(nss,ix) = i;
12874             break;
12875         case SAVEt_IV:                          /* IV reference */
12876             ptr = POPPTR(ss,ix);
12877             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12878             iv = POPIV(ss,ix);
12879             TOPIV(nss,ix) = iv;
12880             break;
12881         case SAVEt_HPTR:                        /* HV* reference */
12882         case SAVEt_APTR:                        /* AV* reference */
12883         case SAVEt_SPTR:                        /* SV* reference */
12884             ptr = POPPTR(ss,ix);
12885             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12886             sv = (const SV *)POPPTR(ss,ix);
12887             TOPPTR(nss,ix) = sv_dup(sv, param);
12888             break;
12889         case SAVEt_VPTR:                        /* random* reference */
12890             ptr = POPPTR(ss,ix);
12891             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12892             /* Fall through */
12893         case SAVEt_INT_SMALL:
12894         case SAVEt_I32_SMALL:
12895         case SAVEt_I16:                         /* I16 reference */
12896         case SAVEt_I8:                          /* I8 reference */
12897         case SAVEt_BOOL:
12898             ptr = POPPTR(ss,ix);
12899             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12900             break;
12901         case SAVEt_GENERIC_PVREF:               /* generic char* */
12902         case SAVEt_PPTR:                        /* char* reference */
12903             ptr = POPPTR(ss,ix);
12904             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12905             c = (char*)POPPTR(ss,ix);
12906             TOPPTR(nss,ix) = pv_dup(c);
12907             break;
12908         case SAVEt_GP:                          /* scalar reference */
12909             gp = (GP*)POPPTR(ss,ix);
12910             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12911             (void)GpREFCNT_inc(gp);
12912             gv = (const GV *)POPPTR(ss,ix);
12913             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12914             break;
12915         case SAVEt_FREEOP:
12916             ptr = POPPTR(ss,ix);
12917             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12918                 /* these are assumed to be refcounted properly */
12919                 OP *o;
12920                 switch (((OP*)ptr)->op_type) {
12921                 case OP_LEAVESUB:
12922                 case OP_LEAVESUBLV:
12923                 case OP_LEAVEEVAL:
12924                 case OP_LEAVE:
12925                 case OP_SCOPE:
12926                 case OP_LEAVEWRITE:
12927                     TOPPTR(nss,ix) = ptr;
12928                     o = (OP*)ptr;
12929                     OP_REFCNT_LOCK;
12930                     (void) OpREFCNT_inc(o);
12931                     OP_REFCNT_UNLOCK;
12932                     break;
12933                 default:
12934                     TOPPTR(nss,ix) = NULL;
12935                     break;
12936                 }
12937             }
12938             else
12939                 TOPPTR(nss,ix) = NULL;
12940             break;
12941         case SAVEt_FREECOPHH:
12942             ptr = POPPTR(ss,ix);
12943             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12944             break;
12945         case SAVEt_ADELETE:
12946             av = (const AV *)POPPTR(ss,ix);
12947             TOPPTR(nss,ix) = av_dup_inc(av, param);
12948             i = POPINT(ss,ix);
12949             TOPINT(nss,ix) = i;
12950             break;
12951         case SAVEt_DELETE:
12952             hv = (const HV *)POPPTR(ss,ix);
12953             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12954             i = POPINT(ss,ix);
12955             TOPINT(nss,ix) = i;
12956             /* Fall through */
12957         case SAVEt_FREEPV:
12958             c = (char*)POPPTR(ss,ix);
12959             TOPPTR(nss,ix) = pv_dup_inc(c);
12960             break;
12961         case SAVEt_STACK_POS:           /* Position on Perl stack */
12962             i = POPINT(ss,ix);
12963             TOPINT(nss,ix) = i;
12964             break;
12965         case SAVEt_DESTRUCTOR:
12966             ptr = POPPTR(ss,ix);
12967             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12968             dptr = POPDPTR(ss,ix);
12969             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12970                                         any_dup(FPTR2DPTR(void *, dptr),
12971                                                 proto_perl));
12972             break;
12973         case SAVEt_DESTRUCTOR_X:
12974             ptr = POPPTR(ss,ix);
12975             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12976             dxptr = POPDXPTR(ss,ix);
12977             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12978                                          any_dup(FPTR2DPTR(void *, dxptr),
12979                                                  proto_perl));
12980             break;
12981         case SAVEt_REGCONTEXT:
12982         case SAVEt_ALLOC:
12983             ix -= uv >> SAVE_TIGHT_SHIFT;
12984             break;
12985         case SAVEt_AELEM:               /* array element */
12986             sv = (const SV *)POPPTR(ss,ix);
12987             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12988             i = POPINT(ss,ix);
12989             TOPINT(nss,ix) = i;
12990             av = (const AV *)POPPTR(ss,ix);
12991             TOPPTR(nss,ix) = av_dup_inc(av, param);
12992             break;
12993         case SAVEt_OP:
12994             ptr = POPPTR(ss,ix);
12995             TOPPTR(nss,ix) = ptr;
12996             break;
12997         case SAVEt_HINTS:
12998             ptr = POPPTR(ss,ix);
12999             ptr = cophh_copy((COPHH*)ptr);
13000             TOPPTR(nss,ix) = ptr;
13001             i = POPINT(ss,ix);
13002             TOPINT(nss,ix) = i;
13003             if (i & HINT_LOCALIZE_HH) {
13004                 hv = (const HV *)POPPTR(ss,ix);
13005                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13006             }
13007             break;
13008         case SAVEt_PADSV_AND_MORTALIZE:
13009             longval = (long)POPLONG(ss,ix);
13010             TOPLONG(nss,ix) = longval;
13011             ptr = POPPTR(ss,ix);
13012             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13013             sv = (const SV *)POPPTR(ss,ix);
13014             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13015             break;
13016         case SAVEt_SET_SVFLAGS:
13017             i = POPINT(ss,ix);
13018             TOPINT(nss,ix) = i;
13019             i = POPINT(ss,ix);
13020             TOPINT(nss,ix) = i;
13021             sv = (const SV *)POPPTR(ss,ix);
13022             TOPPTR(nss,ix) = sv_dup(sv, param);
13023             break;
13024         case SAVEt_COMPILE_WARNINGS:
13025             ptr = POPPTR(ss,ix);
13026             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13027             break;
13028         case SAVEt_PARSER:
13029             ptr = POPPTR(ss,ix);
13030             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13031             break;
13032         default:
13033             Perl_croak(aTHX_
13034                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13035         }
13036     }
13037
13038     return nss;
13039 }
13040
13041
13042 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13043  * flag to the result. This is done for each stash before cloning starts,
13044  * so we know which stashes want their objects cloned */
13045
13046 static void
13047 do_mark_cloneable_stash(pTHX_ SV *const sv)
13048 {
13049     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13050     if (hvname) {
13051         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13052         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13053         if (cloner && GvCV(cloner)) {
13054             dSP;
13055             UV status;
13056
13057             ENTER;
13058             SAVETMPS;
13059             PUSHMARK(SP);
13060             mXPUSHs(newSVhek(hvname));
13061             PUTBACK;
13062             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13063             SPAGAIN;
13064             status = POPu;
13065             PUTBACK;
13066             FREETMPS;
13067             LEAVE;
13068             if (status)
13069                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13070         }
13071     }
13072 }
13073
13074
13075
13076 /*
13077 =for apidoc perl_clone
13078
13079 Create and return a new interpreter by cloning the current one.
13080
13081 perl_clone takes these flags as parameters:
13082
13083 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13084 without it we only clone the data and zero the stacks,
13085 with it we copy the stacks and the new perl interpreter is
13086 ready to run at the exact same point as the previous one.
13087 The pseudo-fork code uses COPY_STACKS while the
13088 threads->create doesn't.
13089
13090 CLONEf_KEEP_PTR_TABLE -
13091 perl_clone keeps a ptr_table with the pointer of the old
13092 variable as a key and the new variable as a value,
13093 this allows it to check if something has been cloned and not
13094 clone it again but rather just use the value and increase the
13095 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13096 the ptr_table using the function
13097 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13098 reason to keep it around is if you want to dup some of your own
13099 variable who are outside the graph perl scans, example of this
13100 code is in threads.xs create.
13101
13102 CLONEf_CLONE_HOST -
13103 This is a win32 thing, it is ignored on unix, it tells perls
13104 win32host code (which is c++) to clone itself, this is needed on
13105 win32 if you want to run two threads at the same time,
13106 if you just want to do some stuff in a separate perl interpreter
13107 and then throw it away and return to the original one,
13108 you don't need to do anything.
13109
13110 =cut
13111 */
13112
13113 /* XXX the above needs expanding by someone who actually understands it ! */
13114 EXTERN_C PerlInterpreter *
13115 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13116
13117 PerlInterpreter *
13118 perl_clone(PerlInterpreter *proto_perl, UV flags)
13119 {
13120    dVAR;
13121 #ifdef PERL_IMPLICIT_SYS
13122
13123     PERL_ARGS_ASSERT_PERL_CLONE;
13124
13125    /* perlhost.h so we need to call into it
13126    to clone the host, CPerlHost should have a c interface, sky */
13127
13128    if (flags & CLONEf_CLONE_HOST) {
13129        return perl_clone_host(proto_perl,flags);
13130    }
13131    return perl_clone_using(proto_perl, flags,
13132                             proto_perl->IMem,
13133                             proto_perl->IMemShared,
13134                             proto_perl->IMemParse,
13135                             proto_perl->IEnv,
13136                             proto_perl->IStdIO,
13137                             proto_perl->ILIO,
13138                             proto_perl->IDir,
13139                             proto_perl->ISock,
13140                             proto_perl->IProc);
13141 }
13142
13143 PerlInterpreter *
13144 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13145                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13146                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13147                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13148                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13149                  struct IPerlProc* ipP)
13150 {
13151     /* XXX many of the string copies here can be optimized if they're
13152      * constants; they need to be allocated as common memory and just
13153      * their pointers copied. */
13154
13155     IV i;
13156     CLONE_PARAMS clone_params;
13157     CLONE_PARAMS* const param = &clone_params;
13158
13159     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13160
13161     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13162 #else           /* !PERL_IMPLICIT_SYS */
13163     IV i;
13164     CLONE_PARAMS clone_params;
13165     CLONE_PARAMS* param = &clone_params;
13166     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13167
13168     PERL_ARGS_ASSERT_PERL_CLONE;
13169 #endif          /* PERL_IMPLICIT_SYS */
13170
13171     /* for each stash, determine whether its objects should be cloned */
13172     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13173     PERL_SET_THX(my_perl);
13174
13175 #ifdef DEBUGGING
13176     PoisonNew(my_perl, 1, PerlInterpreter);
13177     PL_op = NULL;
13178     PL_curcop = NULL;
13179     PL_defstash = NULL; /* may be used by perl malloc() */
13180     PL_markstack = 0;
13181     PL_scopestack = 0;
13182     PL_scopestack_name = 0;
13183     PL_savestack = 0;
13184     PL_savestack_ix = 0;
13185     PL_savestack_max = -1;
13186     PL_sig_pending = 0;
13187     PL_parser = NULL;
13188     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13189 #  ifdef DEBUG_LEAKING_SCALARS
13190     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13191 #  endif
13192 #else   /* !DEBUGGING */
13193     Zero(my_perl, 1, PerlInterpreter);
13194 #endif  /* DEBUGGING */
13195
13196 #ifdef PERL_IMPLICIT_SYS
13197     /* host pointers */
13198     PL_Mem              = ipM;
13199     PL_MemShared        = ipMS;
13200     PL_MemParse         = ipMP;
13201     PL_Env              = ipE;
13202     PL_StdIO            = ipStd;
13203     PL_LIO              = ipLIO;
13204     PL_Dir              = ipD;
13205     PL_Sock             = ipS;
13206     PL_Proc             = ipP;
13207 #endif          /* PERL_IMPLICIT_SYS */
13208
13209
13210     param->flags = flags;
13211     /* Nothing in the core code uses this, but we make it available to
13212        extensions (using mg_dup).  */
13213     param->proto_perl = proto_perl;
13214     /* Likely nothing will use this, but it is initialised to be consistent
13215        with Perl_clone_params_new().  */
13216     param->new_perl = my_perl;
13217     param->unreferenced = NULL;
13218
13219
13220     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13221
13222     PL_body_arenas = NULL;
13223     Zero(&PL_body_roots, 1, PL_body_roots);
13224     
13225     PL_sv_count         = 0;
13226     PL_sv_root          = NULL;
13227     PL_sv_arenaroot     = NULL;
13228
13229     PL_debug            = proto_perl->Idebug;
13230
13231     /* dbargs array probably holds garbage */
13232     PL_dbargs           = NULL;
13233
13234     PL_compiling = proto_perl->Icompiling;
13235
13236     /* pseudo environmental stuff */
13237     PL_origargc         = proto_perl->Iorigargc;
13238     PL_origargv         = proto_perl->Iorigargv;
13239
13240 #if !NO_TAINT_SUPPORT
13241     /* Set tainting stuff before PerlIO_debug can possibly get called */
13242     PL_tainting         = proto_perl->Itainting;
13243     PL_taint_warn       = proto_perl->Itaint_warn;
13244 #else
13245     PL_tainting         = FALSE;
13246     PL_taint_warn       = FALSE;
13247 #endif
13248
13249     PL_minus_c          = proto_perl->Iminus_c;
13250
13251     PL_localpatches     = proto_perl->Ilocalpatches;
13252     PL_splitstr         = proto_perl->Isplitstr;
13253     PL_minus_n          = proto_perl->Iminus_n;
13254     PL_minus_p          = proto_perl->Iminus_p;
13255     PL_minus_l          = proto_perl->Iminus_l;
13256     PL_minus_a          = proto_perl->Iminus_a;
13257     PL_minus_E          = proto_perl->Iminus_E;
13258     PL_minus_F          = proto_perl->Iminus_F;
13259     PL_doswitches       = proto_perl->Idoswitches;
13260     PL_dowarn           = proto_perl->Idowarn;
13261 #ifdef PERL_SAWAMPERSAND
13262     PL_sawampersand     = proto_perl->Isawampersand;
13263 #endif
13264     PL_unsafe           = proto_perl->Iunsafe;
13265     PL_perldb           = proto_perl->Iperldb;
13266     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13267     PL_exit_flags       = proto_perl->Iexit_flags;
13268
13269     /* XXX time(&PL_basetime) when asked for? */
13270     PL_basetime         = proto_perl->Ibasetime;
13271
13272     PL_maxsysfd         = proto_perl->Imaxsysfd;
13273     PL_statusvalue      = proto_perl->Istatusvalue;
13274 #ifdef VMS
13275     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13276 #else
13277     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13278 #endif
13279
13280     /* RE engine related */
13281     PL_regmatch_slab    = NULL;
13282     PL_reg_curpm        = NULL;
13283
13284     PL_sub_generation   = proto_perl->Isub_generation;
13285
13286     /* funky return mechanisms */
13287     PL_forkprocess      = proto_perl->Iforkprocess;
13288
13289     /* internal state */
13290     PL_maxo             = proto_perl->Imaxo;
13291
13292     PL_main_start       = proto_perl->Imain_start;
13293     PL_eval_root        = proto_perl->Ieval_root;
13294     PL_eval_start       = proto_perl->Ieval_start;
13295
13296     PL_filemode         = proto_perl->Ifilemode;
13297     PL_lastfd           = proto_perl->Ilastfd;
13298     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13299     PL_Argv             = NULL;
13300     PL_Cmd              = NULL;
13301     PL_gensym           = proto_perl->Igensym;
13302
13303     PL_laststatval      = proto_perl->Ilaststatval;
13304     PL_laststype        = proto_perl->Ilaststype;
13305     PL_mess_sv          = NULL;
13306
13307     PL_profiledata      = NULL;
13308
13309     PL_generation       = proto_perl->Igeneration;
13310
13311     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13312     PL_in_clean_all     = proto_perl->Iin_clean_all;
13313
13314     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13315     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13316     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13317     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13318     PL_nomemok          = proto_perl->Inomemok;
13319     PL_an               = proto_perl->Ian;
13320     PL_evalseq          = proto_perl->Ievalseq;
13321     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13322     PL_origalen         = proto_perl->Iorigalen;
13323
13324     PL_sighandlerp      = proto_perl->Isighandlerp;
13325
13326     PL_runops           = proto_perl->Irunops;
13327
13328     PL_subline          = proto_perl->Isubline;
13329
13330 #ifdef FCRYPT
13331     PL_cryptseen        = proto_perl->Icryptseen;
13332 #endif
13333
13334     PL_hints            = proto_perl->Ihints;
13335
13336 #ifdef USE_LOCALE_COLLATE
13337     PL_collation_ix     = proto_perl->Icollation_ix;
13338     PL_collation_standard       = proto_perl->Icollation_standard;
13339     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13340     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13341 #endif /* USE_LOCALE_COLLATE */
13342
13343 #ifdef USE_LOCALE_NUMERIC
13344     PL_numeric_standard = proto_perl->Inumeric_standard;
13345     PL_numeric_local    = proto_perl->Inumeric_local;
13346 #endif /* !USE_LOCALE_NUMERIC */
13347
13348     /* Did the locale setup indicate UTF-8? */
13349     PL_utf8locale       = proto_perl->Iutf8locale;
13350     /* Unicode features (see perlrun/-C) */
13351     PL_unicode          = proto_perl->Iunicode;
13352
13353     /* Pre-5.8 signals control */
13354     PL_signals          = proto_perl->Isignals;
13355
13356     /* times() ticks per second */
13357     PL_clocktick        = proto_perl->Iclocktick;
13358
13359     /* Recursion stopper for PerlIO_find_layer */
13360     PL_in_load_module   = proto_perl->Iin_load_module;
13361
13362     /* sort() routine */
13363     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13364
13365     /* Not really needed/useful since the reenrant_retint is "volatile",
13366      * but do it for consistency's sake. */
13367     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13368
13369     /* Hooks to shared SVs and locks. */
13370     PL_sharehook        = proto_perl->Isharehook;
13371     PL_lockhook         = proto_perl->Ilockhook;
13372     PL_unlockhook       = proto_perl->Iunlockhook;
13373     PL_threadhook       = proto_perl->Ithreadhook;
13374     PL_destroyhook      = proto_perl->Idestroyhook;
13375     PL_signalhook       = proto_perl->Isignalhook;
13376
13377     PL_globhook         = proto_perl->Iglobhook;
13378
13379     /* swatch cache */
13380     PL_last_swash_hv    = NULL; /* reinits on demand */
13381     PL_last_swash_klen  = 0;
13382     PL_last_swash_key[0]= '\0';
13383     PL_last_swash_tmps  = (U8*)NULL;
13384     PL_last_swash_slen  = 0;
13385
13386     PL_srand_called     = proto_perl->Isrand_called;
13387
13388     if (flags & CLONEf_COPY_STACKS) {
13389         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13390         PL_tmps_ix              = proto_perl->Itmps_ix;
13391         PL_tmps_max             = proto_perl->Itmps_max;
13392         PL_tmps_floor           = proto_perl->Itmps_floor;
13393
13394         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13395          * NOTE: unlike the others! */
13396         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13397         PL_scopestack_max       = proto_perl->Iscopestack_max;
13398
13399         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13400          * NOTE: unlike the others! */
13401         PL_savestack_ix         = proto_perl->Isavestack_ix;
13402         PL_savestack_max        = proto_perl->Isavestack_max;
13403     }
13404
13405     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13406     PL_top_env          = &PL_start_env;
13407
13408     PL_op               = proto_perl->Iop;
13409
13410     PL_Sv               = NULL;
13411     PL_Xpv              = (XPV*)NULL;
13412     my_perl->Ina        = proto_perl->Ina;
13413
13414     PL_statbuf          = proto_perl->Istatbuf;
13415     PL_statcache        = proto_perl->Istatcache;
13416
13417 #ifdef HAS_TIMES
13418     PL_timesbuf         = proto_perl->Itimesbuf;
13419 #endif
13420
13421 #if !NO_TAINT_SUPPORT
13422     PL_tainted          = proto_perl->Itainted;
13423 #else
13424     PL_tainted          = FALSE;
13425 #endif
13426     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13427
13428     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13429
13430     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13431     PL_restartop        = proto_perl->Irestartop;
13432     PL_in_eval          = proto_perl->Iin_eval;
13433     PL_delaymagic       = proto_perl->Idelaymagic;
13434     PL_phase            = proto_perl->Iphase;
13435     PL_localizing       = proto_perl->Ilocalizing;
13436
13437     PL_hv_fetch_ent_mh  = NULL;
13438     PL_modcount         = proto_perl->Imodcount;
13439     PL_lastgotoprobe    = NULL;
13440     PL_dumpindent       = proto_perl->Idumpindent;
13441
13442     PL_efloatbuf        = NULL;         /* reinits on demand */
13443     PL_efloatsize       = 0;                    /* reinits on demand */
13444
13445     /* regex stuff */
13446
13447     PL_colorset         = 0;            /* reinits PL_colors[] */
13448     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13449
13450     /* Pluggable optimizer */
13451     PL_peepp            = proto_perl->Ipeepp;
13452     PL_rpeepp           = proto_perl->Irpeepp;
13453     /* op_free() hook */
13454     PL_opfreehook       = proto_perl->Iopfreehook;
13455
13456 #ifdef USE_REENTRANT_API
13457     /* XXX: things like -Dm will segfault here in perlio, but doing
13458      *  PERL_SET_CONTEXT(proto_perl);
13459      * breaks too many other things
13460      */
13461     Perl_reentrant_init(aTHX);
13462 #endif
13463
13464     /* create SV map for pointer relocation */
13465     PL_ptr_table = ptr_table_new();
13466
13467     /* initialize these special pointers as early as possible */
13468     init_constants();
13469     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13470     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13471     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13472
13473     /* create (a non-shared!) shared string table */
13474     PL_strtab           = newHV();
13475     HvSHAREKEYS_off(PL_strtab);
13476     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13477     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13478
13479     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13480
13481     /* This PV will be free'd special way so must set it same way op.c does */
13482     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13483     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13484
13485     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13486     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13487     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13488     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13489
13490     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13491     /* This makes no difference to the implementation, as it always pushes
13492        and shifts pointers to other SVs without changing their reference
13493        count, with the array becoming empty before it is freed. However, it
13494        makes it conceptually clear what is going on, and will avoid some
13495        work inside av.c, filling slots between AvFILL() and AvMAX() with
13496        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13497     AvREAL_off(param->stashes);
13498
13499     if (!(flags & CLONEf_COPY_STACKS)) {
13500         param->unreferenced = newAV();
13501     }
13502
13503 #ifdef PERLIO_LAYERS
13504     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13505     PerlIO_clone(aTHX_ proto_perl, param);
13506 #endif
13507
13508     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13509     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13510     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13511     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13512     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13513     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13514
13515     /* switches */
13516     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13517     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13518     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13519     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13520
13521     /* magical thingies */
13522
13523     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13524
13525     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13526     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13527     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13528
13529    
13530     /* Clone the regex array */
13531     /* ORANGE FIXME for plugins, probably in the SV dup code.
13532        newSViv(PTR2IV(CALLREGDUPE(
13533        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13534     */
13535     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13536     PL_regex_pad = AvARRAY(PL_regex_padav);
13537
13538     PL_stashpadmax      = proto_perl->Istashpadmax;
13539     PL_stashpadix       = proto_perl->Istashpadix ;
13540     Newx(PL_stashpad, PL_stashpadmax, HV *);
13541     {
13542         PADOFFSET o = 0;
13543         for (; o < PL_stashpadmax; ++o)
13544             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13545     }
13546
13547     /* shortcuts to various I/O objects */
13548     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13549     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13550     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13551     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13552     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13553     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13554     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13555
13556     /* shortcuts to regexp stuff */
13557     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13558
13559     /* shortcuts to misc objects */
13560     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13561
13562     /* shortcuts to debugging objects */
13563     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13564     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13565     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13566     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13567     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13568     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13569
13570     /* symbol tables */
13571     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13572     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13573     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13574     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13575     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13576
13577     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13578     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13579     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13580     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13581     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13582     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13583     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13584     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13585
13586     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13587
13588     /* subprocess state */
13589     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13590
13591     if (proto_perl->Iop_mask)
13592         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13593     else
13594         PL_op_mask      = NULL;
13595     /* PL_asserting        = proto_perl->Iasserting; */
13596
13597     /* current interpreter roots */
13598     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13599     OP_REFCNT_LOCK;
13600     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13601     OP_REFCNT_UNLOCK;
13602
13603     /* runtime control stuff */
13604     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13605
13606     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13607
13608     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13609
13610     /* interpreter atexit processing */
13611     PL_exitlistlen      = proto_perl->Iexitlistlen;
13612     if (PL_exitlistlen) {
13613         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13614         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13615     }
13616     else
13617         PL_exitlist     = (PerlExitListEntry*)NULL;
13618
13619     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13620     if (PL_my_cxt_size) {
13621         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13622         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13623 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13624         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13625         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13626 #endif
13627     }
13628     else {
13629         PL_my_cxt_list  = (void**)NULL;
13630 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13631         PL_my_cxt_keys  = (const char**)NULL;
13632 #endif
13633     }
13634     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13635     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13636     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13637     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13638
13639     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13640
13641     PAD_CLONE_VARS(proto_perl, param);
13642
13643 #ifdef HAVE_INTERP_INTERN
13644     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13645 #endif
13646
13647     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13648
13649 #ifdef PERL_USES_PL_PIDSTATUS
13650     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13651 #endif
13652     PL_osname           = SAVEPV(proto_perl->Iosname);
13653     PL_parser           = parser_dup(proto_perl->Iparser, param);
13654
13655     /* XXX this only works if the saved cop has already been cloned */
13656     if (proto_perl->Iparser) {
13657         PL_parser->saved_curcop = (COP*)any_dup(
13658                                     proto_perl->Iparser->saved_curcop,
13659                                     proto_perl);
13660     }
13661
13662     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13663
13664 #ifdef USE_LOCALE_COLLATE
13665     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13666 #endif /* USE_LOCALE_COLLATE */
13667
13668 #ifdef USE_LOCALE_NUMERIC
13669     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13670     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13671 #endif /* !USE_LOCALE_NUMERIC */
13672
13673     /* Unicode inversion lists */
13674     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13675     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13676     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13677
13678     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13679     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13680
13681     /* utf8 character class swashes */
13682     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13683         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13684     }
13685     for (i = 0; i < POSIX_CC_COUNT; i++) {
13686         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13687         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13688         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13689     }
13690     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13691     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13692     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13693     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13694     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13695     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13696     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13697     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13698     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13699     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13700     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13701     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13702     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13703     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13704     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13705     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13706
13707     if (proto_perl->Ipsig_pend) {
13708         Newxz(PL_psig_pend, SIG_SIZE, int);
13709     }
13710     else {
13711         PL_psig_pend    = (int*)NULL;
13712     }
13713
13714     if (proto_perl->Ipsig_name) {
13715         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13716         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13717                             param);
13718         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13719     }
13720     else {
13721         PL_psig_ptr     = (SV**)NULL;
13722         PL_psig_name    = (SV**)NULL;
13723     }
13724
13725     if (flags & CLONEf_COPY_STACKS) {
13726         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13727         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13728                             PL_tmps_ix+1, param);
13729
13730         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13731         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13732         Newxz(PL_markstack, i, I32);
13733         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13734                                                   - proto_perl->Imarkstack);
13735         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13736                                                   - proto_perl->Imarkstack);
13737         Copy(proto_perl->Imarkstack, PL_markstack,
13738              PL_markstack_ptr - PL_markstack + 1, I32);
13739
13740         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13741          * NOTE: unlike the others! */
13742         Newxz(PL_scopestack, PL_scopestack_max, I32);
13743         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13744
13745 #ifdef DEBUGGING
13746         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13747         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13748 #endif
13749         /* reset stack AV to correct length before its duped via
13750          * PL_curstackinfo */
13751         AvFILLp(proto_perl->Icurstack) =
13752                             proto_perl->Istack_sp - proto_perl->Istack_base;
13753
13754         /* NOTE: si_dup() looks at PL_markstack */
13755         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13756
13757         /* PL_curstack          = PL_curstackinfo->si_stack; */
13758         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13759         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13760
13761         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13762         PL_stack_base           = AvARRAY(PL_curstack);
13763         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13764                                                    - proto_perl->Istack_base);
13765         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13766
13767         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13768         PL_savestack            = ss_dup(proto_perl, param);
13769     }
13770     else {
13771         init_stacks();
13772         ENTER;                  /* perl_destruct() wants to LEAVE; */
13773     }
13774
13775     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13776     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13777
13778     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13779     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13780     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13781     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13782     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13783     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13784
13785     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13786
13787     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13788     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13789     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13790
13791     PL_stashcache       = newHV();
13792
13793     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13794                                             proto_perl->Iwatchaddr);
13795     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13796     if (PL_debug && PL_watchaddr) {
13797         PerlIO_printf(Perl_debug_log,
13798           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13799           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13800           PTR2UV(PL_watchok));
13801     }
13802
13803     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13804     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13805     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13806
13807     /* Call the ->CLONE method, if it exists, for each of the stashes
13808        identified by sv_dup() above.
13809     */
13810     while(av_len(param->stashes) != -1) {
13811         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13812         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13813         if (cloner && GvCV(cloner)) {
13814             dSP;
13815             ENTER;
13816             SAVETMPS;
13817             PUSHMARK(SP);
13818             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13819             PUTBACK;
13820             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13821             FREETMPS;
13822             LEAVE;
13823         }
13824     }
13825
13826     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13827         ptr_table_free(PL_ptr_table);
13828         PL_ptr_table = NULL;
13829     }
13830
13831     if (!(flags & CLONEf_COPY_STACKS)) {
13832         unreferenced_to_tmp_stack(param->unreferenced);
13833     }
13834
13835     SvREFCNT_dec(param->stashes);
13836
13837     /* orphaned? eg threads->new inside BEGIN or use */
13838     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13839         SvREFCNT_inc_simple_void(PL_compcv);
13840         SAVEFREESV(PL_compcv);
13841     }
13842
13843     return my_perl;
13844 }
13845
13846 static void
13847 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13848 {
13849     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13850     
13851     if (AvFILLp(unreferenced) > -1) {
13852         SV **svp = AvARRAY(unreferenced);
13853         SV **const last = svp + AvFILLp(unreferenced);
13854         SSize_t count = 0;
13855
13856         do {
13857             if (SvREFCNT(*svp) == 1)
13858                 ++count;
13859         } while (++svp <= last);
13860
13861         EXTEND_MORTAL(count);
13862         svp = AvARRAY(unreferenced);
13863
13864         do {
13865             if (SvREFCNT(*svp) == 1) {
13866                 /* Our reference is the only one to this SV. This means that
13867                    in this thread, the scalar effectively has a 0 reference.
13868                    That doesn't work (cleanup never happens), so donate our
13869                    reference to it onto the save stack. */
13870                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13871             } else {
13872                 /* As an optimisation, because we are already walking the
13873                    entire array, instead of above doing either
13874                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13875                    release our reference to the scalar, so that at the end of
13876                    the array owns zero references to the scalars it happens to
13877                    point to. We are effectively converting the array from
13878                    AvREAL() on to AvREAL() off. This saves the av_clear()
13879                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13880                    walking the array a second time.  */
13881                 SvREFCNT_dec(*svp);
13882             }
13883
13884         } while (++svp <= last);
13885         AvREAL_off(unreferenced);
13886     }
13887     SvREFCNT_dec_NN(unreferenced);
13888 }
13889
13890 void
13891 Perl_clone_params_del(CLONE_PARAMS *param)
13892 {
13893     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13894        happy: */
13895     PerlInterpreter *const to = param->new_perl;
13896     dTHXa(to);
13897     PerlInterpreter *const was = PERL_GET_THX;
13898
13899     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13900
13901     if (was != to) {
13902         PERL_SET_THX(to);
13903     }
13904
13905     SvREFCNT_dec(param->stashes);
13906     if (param->unreferenced)
13907         unreferenced_to_tmp_stack(param->unreferenced);
13908
13909     Safefree(param);
13910
13911     if (was != to) {
13912         PERL_SET_THX(was);
13913     }
13914 }
13915
13916 CLONE_PARAMS *
13917 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13918 {
13919     dVAR;
13920     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13921        does a dTHX; to get the context from thread local storage.
13922        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13923        a version that passes in my_perl.  */
13924     PerlInterpreter *const was = PERL_GET_THX;
13925     CLONE_PARAMS *param;
13926
13927     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13928
13929     if (was != to) {
13930         PERL_SET_THX(to);
13931     }
13932
13933     /* Given that we've set the context, we can do this unshared.  */
13934     Newx(param, 1, CLONE_PARAMS);
13935
13936     param->flags = 0;
13937     param->proto_perl = from;
13938     param->new_perl = to;
13939     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13940     AvREAL_off(param->stashes);
13941     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13942
13943     if (was != to) {
13944         PERL_SET_THX(was);
13945     }
13946     return param;
13947 }
13948
13949 #endif /* USE_ITHREADS */
13950
13951 void
13952 Perl_init_constants(pTHX)
13953 {
13954     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13955     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13956     SvANY(&PL_sv_undef)         = NULL;
13957
13958     SvANY(&PL_sv_no)            = new_XPVNV();
13959     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13960     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13961                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13962                                   |SVp_POK|SVf_POK;
13963
13964     SvANY(&PL_sv_yes)           = new_XPVNV();
13965     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13966     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13967                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13968                                   |SVp_POK|SVf_POK;
13969
13970     SvPV_set(&PL_sv_no, (char*)PL_No);
13971     SvCUR_set(&PL_sv_no, 0);
13972     SvLEN_set(&PL_sv_no, 0);
13973     SvIV_set(&PL_sv_no, 0);
13974     SvNV_set(&PL_sv_no, 0);
13975
13976     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13977     SvCUR_set(&PL_sv_yes, 1);
13978     SvLEN_set(&PL_sv_yes, 0);
13979     SvIV_set(&PL_sv_yes, 1);
13980     SvNV_set(&PL_sv_yes, 1);
13981 }
13982
13983 /*
13984 =head1 Unicode Support
13985
13986 =for apidoc sv_recode_to_utf8
13987
13988 The encoding is assumed to be an Encode object, on entry the PV
13989 of the sv is assumed to be octets in that encoding, and the sv
13990 will be converted into Unicode (and UTF-8).
13991
13992 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13993 is not a reference, nothing is done to the sv.  If the encoding is not
13994 an C<Encode::XS> Encoding object, bad things will happen.
13995 (See F<lib/encoding.pm> and L<Encode>.)
13996
13997 The PV of the sv is returned.
13998
13999 =cut */
14000
14001 char *
14002 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14003 {
14004     dVAR;
14005
14006     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14007
14008     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14009         SV *uni;
14010         STRLEN len;
14011         const char *s;
14012         dSP;
14013         ENTER;
14014         SAVETMPS;
14015         save_re_context();
14016         PUSHMARK(sp);
14017         EXTEND(SP, 3);
14018         PUSHs(encoding);
14019         PUSHs(sv);
14020 /*
14021   NI-S 2002/07/09
14022   Passing sv_yes is wrong - it needs to be or'ed set of constants
14023   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14024   remove converted chars from source.
14025
14026   Both will default the value - let them.
14027
14028         XPUSHs(&PL_sv_yes);
14029 */
14030         PUTBACK;
14031         call_method("decode", G_SCALAR);
14032         SPAGAIN;
14033         uni = POPs;
14034         PUTBACK;
14035         s = SvPV_const(uni, len);
14036         if (s != SvPVX_const(sv)) {
14037             SvGROW(sv, len + 1);
14038             Move(s, SvPVX(sv), len + 1, char);
14039             SvCUR_set(sv, len);
14040         }
14041         FREETMPS;
14042         LEAVE;
14043         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14044             /* clear pos and any utf8 cache */
14045             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14046             if (mg)
14047                 mg->mg_len = -1;
14048             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14049                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14050         }
14051         SvUTF8_on(sv);
14052         return SvPVX(sv);
14053     }
14054     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14055 }
14056
14057 /*
14058 =for apidoc sv_cat_decode
14059
14060 The encoding is assumed to be an Encode object, the PV of the ssv is
14061 assumed to be octets in that encoding and decoding the input starts
14062 from the position which (PV + *offset) pointed to.  The dsv will be
14063 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14064 when the string tstr appears in decoding output or the input ends on
14065 the PV of the ssv.  The value which the offset points will be modified
14066 to the last input position on the ssv.
14067
14068 Returns TRUE if the terminator was found, else returns FALSE.
14069
14070 =cut */
14071
14072 bool
14073 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14074                    SV *ssv, int *offset, char *tstr, int tlen)
14075 {
14076     dVAR;
14077     bool ret = FALSE;
14078
14079     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14080
14081     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14082         SV *offsv;
14083         dSP;
14084         ENTER;
14085         SAVETMPS;
14086         save_re_context();
14087         PUSHMARK(sp);
14088         EXTEND(SP, 6);
14089         PUSHs(encoding);
14090         PUSHs(dsv);
14091         PUSHs(ssv);
14092         offsv = newSViv(*offset);
14093         mPUSHs(offsv);
14094         mPUSHp(tstr, tlen);
14095         PUTBACK;
14096         call_method("cat_decode", G_SCALAR);
14097         SPAGAIN;
14098         ret = SvTRUE(TOPs);
14099         *offset = SvIV(offsv);
14100         PUTBACK;
14101         FREETMPS;
14102         LEAVE;
14103     }
14104     else
14105         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14106     return ret;
14107
14108 }
14109
14110 /* ---------------------------------------------------------------------
14111  *
14112  * support functions for report_uninit()
14113  */
14114
14115 /* the maxiumum size of array or hash where we will scan looking
14116  * for the undefined element that triggered the warning */
14117
14118 #define FUV_MAX_SEARCH_SIZE 1000
14119
14120 /* Look for an entry in the hash whose value has the same SV as val;
14121  * If so, return a mortal copy of the key. */
14122
14123 STATIC SV*
14124 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14125 {
14126     dVAR;
14127     HE **array;
14128     I32 i;
14129
14130     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14131
14132     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14133                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14134         return NULL;
14135
14136     array = HvARRAY(hv);
14137
14138     for (i=HvMAX(hv); i>=0; i--) {
14139         HE *entry;
14140         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14141             if (HeVAL(entry) != val)
14142                 continue;
14143             if (    HeVAL(entry) == &PL_sv_undef ||
14144                     HeVAL(entry) == &PL_sv_placeholder)
14145                 continue;
14146             if (!HeKEY(entry))
14147                 return NULL;
14148             if (HeKLEN(entry) == HEf_SVKEY)
14149                 return sv_mortalcopy(HeKEY_sv(entry));
14150             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14151         }
14152     }
14153     return NULL;
14154 }
14155
14156 /* Look for an entry in the array whose value has the same SV as val;
14157  * If so, return the index, otherwise return -1. */
14158
14159 STATIC I32
14160 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14161 {
14162     dVAR;
14163
14164     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14165
14166     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14167                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14168         return -1;
14169
14170     if (val != &PL_sv_undef) {
14171         SV ** const svp = AvARRAY(av);
14172         I32 i;
14173
14174         for (i=AvFILLp(av); i>=0; i--)
14175             if (svp[i] == val)
14176                 return i;
14177     }
14178     return -1;
14179 }
14180
14181 /* varname(): return the name of a variable, optionally with a subscript.
14182  * If gv is non-zero, use the name of that global, along with gvtype (one
14183  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14184  * targ.  Depending on the value of the subscript_type flag, return:
14185  */
14186
14187 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14188 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14189 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14190 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14191
14192 SV*
14193 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14194         const SV *const keyname, I32 aindex, int subscript_type)
14195 {
14196
14197     SV * const name = sv_newmortal();
14198     if (gv && isGV(gv)) {
14199         char buffer[2];
14200         buffer[0] = gvtype;
14201         buffer[1] = 0;
14202
14203         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14204
14205         gv_fullname4(name, gv, buffer, 0);
14206
14207         if ((unsigned int)SvPVX(name)[1] <= 26) {
14208             buffer[0] = '^';
14209             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14210
14211             /* Swap the 1 unprintable control character for the 2 byte pretty
14212                version - ie substr($name, 1, 1) = $buffer; */
14213             sv_insert(name, 1, 1, buffer, 2);
14214         }
14215     }
14216     else {
14217         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14218         SV *sv;
14219         AV *av;
14220
14221         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14222
14223         if (!cv || !CvPADLIST(cv))
14224             return NULL;
14225         av = *PadlistARRAY(CvPADLIST(cv));
14226         sv = *av_fetch(av, targ, FALSE);
14227         sv_setsv_flags(name, sv, 0);
14228     }
14229
14230     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14231         SV * const sv = newSV(0);
14232         *SvPVX(name) = '$';
14233         Perl_sv_catpvf(aTHX_ name, "{%s}",
14234             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14235                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14236         SvREFCNT_dec_NN(sv);
14237     }
14238     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14239         *SvPVX(name) = '$';
14240         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14241     }
14242     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14243         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14244         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14245     }
14246
14247     return name;
14248 }
14249
14250
14251 /*
14252 =for apidoc find_uninit_var
14253
14254 Find the name of the undefined variable (if any) that caused the operator
14255 to issue a "Use of uninitialized value" warning.
14256 If match is true, only return a name if its value matches uninit_sv.
14257 So roughly speaking, if a unary operator (such as OP_COS) generates a
14258 warning, then following the direct child of the op may yield an
14259 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14260 other hand, with OP_ADD there are two branches to follow, so we only print
14261 the variable name if we get an exact match.
14262
14263 The name is returned as a mortal SV.
14264
14265 Assumes that PL_op is the op that originally triggered the error, and that
14266 PL_comppad/PL_curpad points to the currently executing pad.
14267
14268 =cut
14269 */
14270
14271 STATIC SV *
14272 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14273                   bool match)
14274 {
14275     dVAR;
14276     SV *sv;
14277     const GV *gv;
14278     const OP *o, *o2, *kid;
14279
14280     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14281                             uninit_sv == &PL_sv_placeholder)))
14282         return NULL;
14283
14284     switch (obase->op_type) {
14285
14286     case OP_RV2AV:
14287     case OP_RV2HV:
14288     case OP_PADAV:
14289     case OP_PADHV:
14290       {
14291         const bool pad  = (    obase->op_type == OP_PADAV
14292                             || obase->op_type == OP_PADHV
14293                             || obase->op_type == OP_PADRANGE
14294                           );
14295
14296         const bool hash = (    obase->op_type == OP_PADHV
14297                             || obase->op_type == OP_RV2HV
14298                             || (obase->op_type == OP_PADRANGE
14299                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14300                           );
14301         I32 index = 0;
14302         SV *keysv = NULL;
14303         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14304
14305         if (pad) { /* @lex, %lex */
14306             sv = PAD_SVl(obase->op_targ);
14307             gv = NULL;
14308         }
14309         else {
14310             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14311             /* @global, %global */
14312                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14313                 if (!gv)
14314                     break;
14315                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14316             }
14317             else if (obase == PL_op) /* @{expr}, %{expr} */
14318                 return find_uninit_var(cUNOPx(obase)->op_first,
14319                                                     uninit_sv, match);
14320             else /* @{expr}, %{expr} as a sub-expression */
14321                 return NULL;
14322         }
14323
14324         /* attempt to find a match within the aggregate */
14325         if (hash) {
14326             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14327             if (keysv)
14328                 subscript_type = FUV_SUBSCRIPT_HASH;
14329         }
14330         else {
14331             index = find_array_subscript((const AV *)sv, uninit_sv);
14332             if (index >= 0)
14333                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14334         }
14335
14336         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14337             break;
14338
14339         return varname(gv, hash ? '%' : '@', obase->op_targ,
14340                                     keysv, index, subscript_type);
14341       }
14342
14343     case OP_RV2SV:
14344         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14345             /* $global */
14346             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14347             if (!gv || !GvSTASH(gv))
14348                 break;
14349             if (match && (GvSV(gv) != uninit_sv))
14350                 break;
14351             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14352         }
14353         /* ${expr} */
14354         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14355
14356     case OP_PADSV:
14357         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14358             break;
14359         return varname(NULL, '$', obase->op_targ,
14360                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14361
14362     case OP_GVSV:
14363         gv = cGVOPx_gv(obase);
14364         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14365             break;
14366         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14367
14368     case OP_AELEMFAST_LEX:
14369         if (match) {
14370             SV **svp;
14371             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14372             if (!av || SvRMAGICAL(av))
14373                 break;
14374             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14375             if (!svp || *svp != uninit_sv)
14376                 break;
14377         }
14378         return varname(NULL, '$', obase->op_targ,
14379                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14380     case OP_AELEMFAST:
14381         {
14382             gv = cGVOPx_gv(obase);
14383             if (!gv)
14384                 break;
14385             if (match) {
14386                 SV **svp;
14387                 AV *const av = GvAV(gv);
14388                 if (!av || SvRMAGICAL(av))
14389                     break;
14390                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14391                 if (!svp || *svp != uninit_sv)
14392                     break;
14393             }
14394             return varname(gv, '$', 0,
14395                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14396         }
14397         break;
14398
14399     case OP_EXISTS:
14400         o = cUNOPx(obase)->op_first;
14401         if (!o || o->op_type != OP_NULL ||
14402                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14403             break;
14404         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14405
14406     case OP_AELEM:
14407     case OP_HELEM:
14408     {
14409         bool negate = FALSE;
14410
14411         if (PL_op == obase)
14412             /* $a[uninit_expr] or $h{uninit_expr} */
14413             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14414
14415         gv = NULL;
14416         o = cBINOPx(obase)->op_first;
14417         kid = cBINOPx(obase)->op_last;
14418
14419         /* get the av or hv, and optionally the gv */
14420         sv = NULL;
14421         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14422             sv = PAD_SV(o->op_targ);
14423         }
14424         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14425                 && cUNOPo->op_first->op_type == OP_GV)
14426         {
14427             gv = cGVOPx_gv(cUNOPo->op_first);
14428             if (!gv)
14429                 break;
14430             sv = o->op_type
14431                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14432         }
14433         if (!sv)
14434             break;
14435
14436         if (kid && kid->op_type == OP_NEGATE) {
14437             negate = TRUE;
14438             kid = cUNOPx(kid)->op_first;
14439         }
14440
14441         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14442             /* index is constant */
14443             SV* kidsv;
14444             if (negate) {
14445                 kidsv = sv_2mortal(newSVpvs("-"));
14446                 sv_catsv(kidsv, cSVOPx_sv(kid));
14447             }
14448             else
14449                 kidsv = cSVOPx_sv(kid);
14450             if (match) {
14451                 if (SvMAGICAL(sv))
14452                     break;
14453                 if (obase->op_type == OP_HELEM) {
14454                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14455                     if (!he || HeVAL(he) != uninit_sv)
14456                         break;
14457                 }
14458                 else {
14459                     SV * const  opsv = cSVOPx_sv(kid);
14460                     const IV  opsviv = SvIV(opsv);
14461                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14462                         negate ? - opsviv : opsviv,
14463                         FALSE);
14464                     if (!svp || *svp != uninit_sv)
14465                         break;
14466                 }
14467             }
14468             if (obase->op_type == OP_HELEM)
14469                 return varname(gv, '%', o->op_targ,
14470                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14471             else
14472                 return varname(gv, '@', o->op_targ, NULL,
14473                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14474                     FUV_SUBSCRIPT_ARRAY);
14475         }
14476         else  {
14477             /* index is an expression;
14478              * attempt to find a match within the aggregate */
14479             if (obase->op_type == OP_HELEM) {
14480                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14481                 if (keysv)
14482                     return varname(gv, '%', o->op_targ,
14483                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14484             }
14485             else {
14486                 const I32 index
14487                     = find_array_subscript((const AV *)sv, uninit_sv);
14488                 if (index >= 0)
14489                     return varname(gv, '@', o->op_targ,
14490                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14491             }
14492             if (match)
14493                 break;
14494             return varname(gv,
14495                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14496                 ? '@' : '%',
14497                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14498         }
14499         break;
14500     }
14501
14502     case OP_AASSIGN:
14503         /* only examine RHS */
14504         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14505
14506     case OP_OPEN:
14507         o = cUNOPx(obase)->op_first;
14508         if (   o->op_type == OP_PUSHMARK
14509            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14510         )
14511             o = o->op_sibling;
14512
14513         if (!o->op_sibling) {
14514             /* one-arg version of open is highly magical */
14515
14516             if (o->op_type == OP_GV) { /* open FOO; */
14517                 gv = cGVOPx_gv(o);
14518                 if (match && GvSV(gv) != uninit_sv)
14519                     break;
14520                 return varname(gv, '$', 0,
14521                             NULL, 0, FUV_SUBSCRIPT_NONE);
14522             }
14523             /* other possibilities not handled are:
14524              * open $x; or open my $x;  should return '${*$x}'
14525              * open expr;               should return '$'.expr ideally
14526              */
14527              break;
14528         }
14529         goto do_op;
14530
14531     /* ops where $_ may be an implicit arg */
14532     case OP_TRANS:
14533     case OP_TRANSR:
14534     case OP_SUBST:
14535     case OP_MATCH:
14536         if ( !(obase->op_flags & OPf_STACKED)) {
14537             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14538                                  ? PAD_SVl(obase->op_targ)
14539                                  : DEFSV))
14540             {
14541                 sv = sv_newmortal();
14542                 sv_setpvs(sv, "$_");
14543                 return sv;
14544             }
14545         }
14546         goto do_op;
14547
14548     case OP_PRTF:
14549     case OP_PRINT:
14550     case OP_SAY:
14551         match = 1; /* print etc can return undef on defined args */
14552         /* skip filehandle as it can't produce 'undef' warning  */
14553         o = cUNOPx(obase)->op_first;
14554         if ((obase->op_flags & OPf_STACKED)
14555             &&
14556                (   o->op_type == OP_PUSHMARK
14557                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14558             o = o->op_sibling->op_sibling;
14559         goto do_op2;
14560
14561
14562     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14563     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14564
14565         /* the following ops are capable of returning PL_sv_undef even for
14566          * defined arg(s) */
14567
14568     case OP_BACKTICK:
14569     case OP_PIPE_OP:
14570     case OP_FILENO:
14571     case OP_BINMODE:
14572     case OP_TIED:
14573     case OP_GETC:
14574     case OP_SYSREAD:
14575     case OP_SEND:
14576     case OP_IOCTL:
14577     case OP_SOCKET:
14578     case OP_SOCKPAIR:
14579     case OP_BIND:
14580     case OP_CONNECT:
14581     case OP_LISTEN:
14582     case OP_ACCEPT:
14583     case OP_SHUTDOWN:
14584     case OP_SSOCKOPT:
14585     case OP_GETPEERNAME:
14586     case OP_FTRREAD:
14587     case OP_FTRWRITE:
14588     case OP_FTREXEC:
14589     case OP_FTROWNED:
14590     case OP_FTEREAD:
14591     case OP_FTEWRITE:
14592     case OP_FTEEXEC:
14593     case OP_FTEOWNED:
14594     case OP_FTIS:
14595     case OP_FTZERO:
14596     case OP_FTSIZE:
14597     case OP_FTFILE:
14598     case OP_FTDIR:
14599     case OP_FTLINK:
14600     case OP_FTPIPE:
14601     case OP_FTSOCK:
14602     case OP_FTBLK:
14603     case OP_FTCHR:
14604     case OP_FTTTY:
14605     case OP_FTSUID:
14606     case OP_FTSGID:
14607     case OP_FTSVTX:
14608     case OP_FTTEXT:
14609     case OP_FTBINARY:
14610     case OP_FTMTIME:
14611     case OP_FTATIME:
14612     case OP_FTCTIME:
14613     case OP_READLINK:
14614     case OP_OPEN_DIR:
14615     case OP_READDIR:
14616     case OP_TELLDIR:
14617     case OP_SEEKDIR:
14618     case OP_REWINDDIR:
14619     case OP_CLOSEDIR:
14620     case OP_GMTIME:
14621     case OP_ALARM:
14622     case OP_SEMGET:
14623     case OP_GETLOGIN:
14624     case OP_UNDEF:
14625     case OP_SUBSTR:
14626     case OP_AEACH:
14627     case OP_EACH:
14628     case OP_SORT:
14629     case OP_CALLER:
14630     case OP_DOFILE:
14631     case OP_PROTOTYPE:
14632     case OP_NCMP:
14633     case OP_SMARTMATCH:
14634     case OP_UNPACK:
14635     case OP_SYSOPEN:
14636     case OP_SYSSEEK:
14637         match = 1;
14638         goto do_op;
14639
14640     case OP_ENTERSUB:
14641     case OP_GOTO:
14642         /* XXX tmp hack: these two may call an XS sub, and currently
14643           XS subs don't have a SUB entry on the context stack, so CV and
14644           pad determination goes wrong, and BAD things happen. So, just
14645           don't try to determine the value under those circumstances.
14646           Need a better fix at dome point. DAPM 11/2007 */
14647         break;
14648
14649     case OP_FLIP:
14650     case OP_FLOP:
14651     {
14652         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14653         if (gv && GvSV(gv) == uninit_sv)
14654             return newSVpvs_flags("$.", SVs_TEMP);
14655         goto do_op;
14656     }
14657
14658     case OP_POS:
14659         /* def-ness of rval pos() is independent of the def-ness of its arg */
14660         if ( !(obase->op_flags & OPf_MOD))
14661             break;
14662
14663     case OP_SCHOMP:
14664     case OP_CHOMP:
14665         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14666             return newSVpvs_flags("${$/}", SVs_TEMP);
14667         /*FALLTHROUGH*/
14668
14669     default:
14670     do_op:
14671         if (!(obase->op_flags & OPf_KIDS))
14672             break;
14673         o = cUNOPx(obase)->op_first;
14674         
14675     do_op2:
14676         if (!o)
14677             break;
14678
14679         /* This loop checks all the kid ops, skipping any that cannot pos-
14680          * sibly be responsible for the uninitialized value; i.e., defined
14681          * constants and ops that return nothing.  If there is only one op
14682          * left that is not skipped, then we *know* it is responsible for
14683          * the uninitialized value.  If there is more than one op left, we
14684          * have to look for an exact match in the while() loop below.
14685          * Note that we skip padrange, because the individual pad ops that
14686          * it replaced are still in the tree, so we work on them instead.
14687          */
14688         o2 = NULL;
14689         for (kid=o; kid; kid = kid->op_sibling) {
14690             if (kid) {
14691                 const OPCODE type = kid->op_type;
14692                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14693                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14694                   || (type == OP_PUSHMARK)
14695                   || (type == OP_PADRANGE)
14696                 )
14697                 continue;
14698             }
14699             if (o2) { /* more than one found */
14700                 o2 = NULL;
14701                 break;
14702             }
14703             o2 = kid;
14704         }
14705         if (o2)
14706             return find_uninit_var(o2, uninit_sv, match);
14707
14708         /* scan all args */
14709         while (o) {
14710             sv = find_uninit_var(o, uninit_sv, 1);
14711             if (sv)
14712                 return sv;
14713             o = o->op_sibling;
14714         }
14715         break;
14716     }
14717     return NULL;
14718 }
14719
14720
14721 /*
14722 =for apidoc report_uninit
14723
14724 Print appropriate "Use of uninitialized variable" warning.
14725
14726 =cut
14727 */
14728
14729 void
14730 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14731 {
14732     dVAR;
14733     if (PL_op) {
14734         SV* varname = NULL;
14735         if (uninit_sv && PL_curpad) {
14736             varname = find_uninit_var(PL_op, uninit_sv,0);
14737             if (varname)
14738                 sv_insert(varname, 0, 0, " ", 1);
14739         }
14740         /* diag_listed_as: Use of uninitialized value%s */
14741         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14742                 SVfARG(varname ? varname : &PL_sv_no),
14743                 " in ", OP_DESC(PL_op));
14744     }
14745     else
14746         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14747                     "", "", "");
14748 }
14749
14750 /*
14751  * Local variables:
14752  * c-indentation-style: bsd
14753  * c-basic-offset: 4
14754  * indent-tabs-mode: nil
14755  * End:
14756  *
14757  * ex: set ts=8 sts=4 sw=4 et:
14758  */