This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Unbreak Concise glob output
[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 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1474
1475 char *
1476 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1477 {
1478     char *s;
1479
1480     PERL_ARGS_ASSERT_SV_GROW;
1481
1482 #ifdef HAS_64K_LIMIT
1483     if (newlen >= 0x10000) {
1484         PerlIO_printf(Perl_debug_log,
1485                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1486         my_exit(1);
1487     }
1488 #endif /* HAS_64K_LIMIT */
1489     if (SvROK(sv))
1490         sv_unref(sv);
1491     if (SvTYPE(sv) < SVt_PV) {
1492         sv_upgrade(sv, SVt_PV);
1493         s = SvPVX_mutable(sv);
1494     }
1495     else if (SvOOK(sv)) {       /* pv is offset? */
1496         sv_backoff(sv);
1497         s = SvPVX_mutable(sv);
1498         if (newlen > SvLEN(sv))
1499             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1500 #ifdef HAS_64K_LIMIT
1501         if (newlen >= 0x10000)
1502             newlen = 0xFFFF;
1503 #endif
1504     }
1505     else
1506     {
1507         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1508         s = SvPVX_mutable(sv);
1509     }
1510
1511 #ifdef PERL_NEW_COPY_ON_WRITE
1512     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1513      * to store the COW count. So in general, allocate one more byte than
1514      * asked for, to make it likely this byte is always spare: and thus
1515      * make more strings COW-able.
1516      * If the new size is a big power of two, don't bother: we assume the
1517      * caller wanted a nice 2^N sized block and will be annoyed at getting
1518      * 2^N+1 */
1519     if (newlen & 0xff)
1520         newlen++;
1521 #endif
1522
1523     if (newlen > SvLEN(sv)) {           /* need more room? */
1524         STRLEN minlen = SvCUR(sv);
1525         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1526         if (newlen < minlen)
1527             newlen = minlen;
1528 #ifndef Perl_safesysmalloc_size
1529         newlen = PERL_STRLEN_ROUNDUP(newlen);
1530 #endif
1531         if (SvLEN(sv) && s) {
1532             s = (char*)saferealloc(s, newlen);
1533         }
1534         else {
1535             s = (char*)safemalloc(newlen);
1536             if (SvPVX_const(sv) && SvCUR(sv)) {
1537                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1538             }
1539         }
1540         SvPV_set(sv, s);
1541 #ifdef Perl_safesysmalloc_size
1542         /* Do this here, do it once, do it right, and then we will never get
1543            called back into sv_grow() unless there really is some growing
1544            needed.  */
1545         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1546 #else
1547         SvLEN_set(sv, newlen);
1548 #endif
1549     }
1550     return s;
1551 }
1552
1553 /*
1554 =for apidoc sv_setiv
1555
1556 Copies an integer into the given SV, upgrading first if necessary.
1557 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1558
1559 =cut
1560 */
1561
1562 void
1563 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1564 {
1565     dVAR;
1566
1567     PERL_ARGS_ASSERT_SV_SETIV;
1568
1569     SV_CHECK_THINKFIRST_COW_DROP(sv);
1570     switch (SvTYPE(sv)) {
1571     case SVt_NULL:
1572     case SVt_NV:
1573         sv_upgrade(sv, SVt_IV);
1574         break;
1575     case SVt_PV:
1576         sv_upgrade(sv, SVt_PVIV);
1577         break;
1578
1579     case SVt_PVGV:
1580         if (!isGV_with_GP(sv))
1581             break;
1582     case SVt_PVAV:
1583     case SVt_PVHV:
1584     case SVt_PVCV:
1585     case SVt_PVFM:
1586     case SVt_PVIO:
1587         /* diag_listed_as: Can't coerce %s to %s in %s */
1588         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1589                    OP_DESC(PL_op));
1590     default: NOOP;
1591     }
1592     (void)SvIOK_only(sv);                       /* validate number */
1593     SvIV_set(sv, i);
1594     SvTAINT(sv);
1595 }
1596
1597 /*
1598 =for apidoc sv_setiv_mg
1599
1600 Like C<sv_setiv>, but also handles 'set' magic.
1601
1602 =cut
1603 */
1604
1605 void
1606 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1607 {
1608     PERL_ARGS_ASSERT_SV_SETIV_MG;
1609
1610     sv_setiv(sv,i);
1611     SvSETMAGIC(sv);
1612 }
1613
1614 /*
1615 =for apidoc sv_setuv
1616
1617 Copies an unsigned integer into the given SV, upgrading first if necessary.
1618 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1619
1620 =cut
1621 */
1622
1623 void
1624 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1625 {
1626     PERL_ARGS_ASSERT_SV_SETUV;
1627
1628     /* With the if statement to ensure that integers are stored as IVs whenever
1629        possible:
1630        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1631
1632        without
1633        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1634
1635        If you wish to remove the following if statement, so that this routine
1636        (and its callers) always return UVs, please benchmark to see what the
1637        effect is. Modern CPUs may be different. Or may not :-)
1638     */
1639     if (u <= (UV)IV_MAX) {
1640        sv_setiv(sv, (IV)u);
1641        return;
1642     }
1643     sv_setiv(sv, 0);
1644     SvIsUV_on(sv);
1645     SvUV_set(sv, u);
1646 }
1647
1648 /*
1649 =for apidoc sv_setuv_mg
1650
1651 Like C<sv_setuv>, but also handles 'set' magic.
1652
1653 =cut
1654 */
1655
1656 void
1657 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1658 {
1659     PERL_ARGS_ASSERT_SV_SETUV_MG;
1660
1661     sv_setuv(sv,u);
1662     SvSETMAGIC(sv);
1663 }
1664
1665 /*
1666 =for apidoc sv_setnv
1667
1668 Copies a double into the given SV, upgrading first if necessary.
1669 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1670
1671 =cut
1672 */
1673
1674 void
1675 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1676 {
1677     dVAR;
1678
1679     PERL_ARGS_ASSERT_SV_SETNV;
1680
1681     SV_CHECK_THINKFIRST_COW_DROP(sv);
1682     switch (SvTYPE(sv)) {
1683     case SVt_NULL:
1684     case SVt_IV:
1685         sv_upgrade(sv, SVt_NV);
1686         break;
1687     case SVt_PV:
1688     case SVt_PVIV:
1689         sv_upgrade(sv, SVt_PVNV);
1690         break;
1691
1692     case SVt_PVGV:
1693         if (!isGV_with_GP(sv))
1694             break;
1695     case SVt_PVAV:
1696     case SVt_PVHV:
1697     case SVt_PVCV:
1698     case SVt_PVFM:
1699     case SVt_PVIO:
1700         /* diag_listed_as: Can't coerce %s to %s in %s */
1701         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1702                    OP_DESC(PL_op));
1703     default: NOOP;
1704     }
1705     SvNV_set(sv, num);
1706     (void)SvNOK_only(sv);                       /* validate number */
1707     SvTAINT(sv);
1708 }
1709
1710 /*
1711 =for apidoc sv_setnv_mg
1712
1713 Like C<sv_setnv>, but also handles 'set' magic.
1714
1715 =cut
1716 */
1717
1718 void
1719 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1720 {
1721     PERL_ARGS_ASSERT_SV_SETNV_MG;
1722
1723     sv_setnv(sv,num);
1724     SvSETMAGIC(sv);
1725 }
1726
1727 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1728  * not incrementable warning display.
1729  * Originally part of S_not_a_number().
1730  * The return value may be != tmpbuf.
1731  */
1732
1733 STATIC const char *
1734 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1735     const char *pv;
1736
1737      PERL_ARGS_ASSERT_SV_DISPLAY;
1738
1739      if (DO_UTF8(sv)) {
1740           SV *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 + tmpbuf_size - 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     return pv;
1794 }
1795
1796 /* Print an "isn't numeric" warning, using a cleaned-up,
1797  * printable version of the offending string
1798  */
1799
1800 STATIC void
1801 S_not_a_number(pTHX_ SV *const sv)
1802 {
1803      dVAR;
1804      char tmpbuf[64];
1805      const char *pv;
1806
1807      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1808
1809      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1810
1811     if (PL_op)
1812         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1813                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1814                     "Argument \"%s\" isn't numeric in %s", pv,
1815                     OP_DESC(PL_op));
1816     else
1817         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1818                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1819                     "Argument \"%s\" isn't numeric", pv);
1820 }
1821
1822 STATIC void
1823 S_not_incrementable(pTHX_ SV *const sv) {
1824      dVAR;
1825      char tmpbuf[64];
1826      const char *pv;
1827
1828      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1829
1830      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1831
1832      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1833                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1834 }
1835
1836 /*
1837 =for apidoc looks_like_number
1838
1839 Test if the content of an SV looks like a number (or is a number).
1840 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1841 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1842 ignored.
1843
1844 =cut
1845 */
1846
1847 I32
1848 Perl_looks_like_number(pTHX_ SV *const sv)
1849 {
1850     const char *sbegin;
1851     STRLEN len;
1852
1853     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1854
1855     if (SvPOK(sv) || SvPOKp(sv)) {
1856         sbegin = SvPV_nomg_const(sv, len);
1857     }
1858     else
1859         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1860     return grok_number(sbegin, len, NULL);
1861 }
1862
1863 STATIC bool
1864 S_glob_2number(pTHX_ GV * const gv)
1865 {
1866     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1867
1868     /* We know that all GVs stringify to something that is not-a-number,
1869         so no need to test that.  */
1870     if (ckWARN(WARN_NUMERIC))
1871     {
1872         SV *const buffer = sv_newmortal();
1873         gv_efullname3(buffer, gv, "*");
1874         not_a_number(buffer);
1875     }
1876     /* We just want something true to return, so that S_sv_2iuv_common
1877         can tail call us and return true.  */
1878     return TRUE;
1879 }
1880
1881 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1882    until proven guilty, assume that things are not that bad... */
1883
1884 /*
1885    NV_PRESERVES_UV:
1886
1887    As 64 bit platforms often have an NV that doesn't preserve all bits of
1888    an IV (an assumption perl has been based on to date) it becomes necessary
1889    to remove the assumption that the NV always carries enough precision to
1890    recreate the IV whenever needed, and that the NV is the canonical form.
1891    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1892    precision as a side effect of conversion (which would lead to insanity
1893    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1894    1) to distinguish between IV/UV/NV slots that have cached a valid
1895       conversion where precision was lost and IV/UV/NV slots that have a
1896       valid conversion which has lost no precision
1897    2) to ensure that if a numeric conversion to one form is requested that
1898       would lose precision, the precise conversion (or differently
1899       imprecise conversion) is also performed and cached, to prevent
1900       requests for different numeric formats on the same SV causing
1901       lossy conversion chains. (lossless conversion chains are perfectly
1902       acceptable (still))
1903
1904
1905    flags are used:
1906    SvIOKp is true if the IV slot contains a valid value
1907    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1908    SvNOKp is true if the NV slot contains a valid value
1909    SvNOK  is true only if the NV value is accurate
1910
1911    so
1912    while converting from PV to NV, check to see if converting that NV to an
1913    IV(or UV) would lose accuracy over a direct conversion from PV to
1914    IV(or UV). If it would, cache both conversions, return NV, but mark
1915    SV as IOK NOKp (ie not NOK).
1916
1917    While converting from PV to IV, check to see if converting that IV to an
1918    NV would lose accuracy over a direct conversion from PV to NV. If it
1919    would, cache both conversions, flag similarly.
1920
1921    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1922    correctly because if IV & NV were set NV *always* overruled.
1923    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1924    changes - now IV and NV together means that the two are interchangeable:
1925    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1926
1927    The benefit of this is that operations such as pp_add know that if
1928    SvIOK is true for both left and right operands, then integer addition
1929    can be used instead of floating point (for cases where the result won't
1930    overflow). Before, floating point was always used, which could lead to
1931    loss of precision compared with integer addition.
1932
1933    * making IV and NV equal status should make maths accurate on 64 bit
1934      platforms
1935    * may speed up maths somewhat if pp_add and friends start to use
1936      integers when possible instead of fp. (Hopefully the overhead in
1937      looking for SvIOK and checking for overflow will not outweigh the
1938      fp to integer speedup)
1939    * will slow down integer operations (callers of SvIV) on "inaccurate"
1940      values, as the change from SvIOK to SvIOKp will cause a call into
1941      sv_2iv each time rather than a macro access direct to the IV slot
1942    * should speed up number->string conversion on integers as IV is
1943      favoured when IV and NV are equally accurate
1944
1945    ####################################################################
1946    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1947    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1948    On the other hand, SvUOK is true iff UV.
1949    ####################################################################
1950
1951    Your mileage will vary depending your CPU's relative fp to integer
1952    performance ratio.
1953 */
1954
1955 #ifndef NV_PRESERVES_UV
1956 #  define IS_NUMBER_UNDERFLOW_IV 1
1957 #  define IS_NUMBER_UNDERFLOW_UV 2
1958 #  define IS_NUMBER_IV_AND_UV    2
1959 #  define IS_NUMBER_OVERFLOW_IV  4
1960 #  define IS_NUMBER_OVERFLOW_UV  5
1961
1962 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1963
1964 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1965 STATIC int
1966 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1967 #  ifdef DEBUGGING
1968                        , I32 numtype
1969 #  endif
1970                        )
1971 {
1972     dVAR;
1973
1974     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1975
1976     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));
1977     if (SvNVX(sv) < (NV)IV_MIN) {
1978         (void)SvIOKp_on(sv);
1979         (void)SvNOK_on(sv);
1980         SvIV_set(sv, IV_MIN);
1981         return IS_NUMBER_UNDERFLOW_IV;
1982     }
1983     if (SvNVX(sv) > (NV)UV_MAX) {
1984         (void)SvIOKp_on(sv);
1985         (void)SvNOK_on(sv);
1986         SvIsUV_on(sv);
1987         SvUV_set(sv, UV_MAX);
1988         return IS_NUMBER_OVERFLOW_UV;
1989     }
1990     (void)SvIOKp_on(sv);
1991     (void)SvNOK_on(sv);
1992     /* Can't use strtol etc to convert this string.  (See truth table in
1993        sv_2iv  */
1994     if (SvNVX(sv) <= (UV)IV_MAX) {
1995         SvIV_set(sv, I_V(SvNVX(sv)));
1996         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1997             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1998         } else {
1999             /* Integer is imprecise. NOK, IOKp */
2000         }
2001         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2002     }
2003     SvIsUV_on(sv);
2004     SvUV_set(sv, U_V(SvNVX(sv)));
2005     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2006         if (SvUVX(sv) == UV_MAX) {
2007             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2008                possibly be preserved by NV. Hence, it must be overflow.
2009                NOK, IOKp */
2010             return IS_NUMBER_OVERFLOW_UV;
2011         }
2012         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2013     } else {
2014         /* Integer is imprecise. NOK, IOKp */
2015     }
2016     return IS_NUMBER_OVERFLOW_IV;
2017 }
2018 #endif /* !NV_PRESERVES_UV*/
2019
2020 STATIC bool
2021 S_sv_2iuv_common(pTHX_ SV *const sv)
2022 {
2023     dVAR;
2024
2025     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2026
2027     if (SvNOKp(sv)) {
2028         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2029          * without also getting a cached IV/UV from it at the same time
2030          * (ie PV->NV conversion should detect loss of accuracy and cache
2031          * IV or UV at same time to avoid this. */
2032         /* IV-over-UV optimisation - choose to cache IV if possible */
2033
2034         if (SvTYPE(sv) == SVt_NV)
2035             sv_upgrade(sv, SVt_PVNV);
2036
2037         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2038         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2039            certainly cast into the IV range at IV_MAX, whereas the correct
2040            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2041            cases go to UV */
2042 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2043         if (Perl_isnan(SvNVX(sv))) {
2044             SvUV_set(sv, 0);
2045             SvIsUV_on(sv);
2046             return FALSE;
2047         }
2048 #endif
2049         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2050             SvIV_set(sv, I_V(SvNVX(sv)));
2051             if (SvNVX(sv) == (NV) SvIVX(sv)
2052 #ifndef NV_PRESERVES_UV
2053                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2054                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2055                 /* Don't flag it as "accurately an integer" if the number
2056                    came from a (by definition imprecise) NV operation, and
2057                    we're outside the range of NV integer precision */
2058 #endif
2059                 ) {
2060                 if (SvNOK(sv))
2061                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2062                 else {
2063                     /* scalar has trailing garbage, eg "42a" */
2064                 }
2065                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2066                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2067                                       PTR2UV(sv),
2068                                       SvNVX(sv),
2069                                       SvIVX(sv)));
2070
2071             } else {
2072                 /* IV not precise.  No need to convert from PV, as NV
2073                    conversion would already have cached IV if it detected
2074                    that PV->IV would be better than PV->NV->IV
2075                    flags already correct - don't set public IOK.  */
2076                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2077                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2078                                       PTR2UV(sv),
2079                                       SvNVX(sv),
2080                                       SvIVX(sv)));
2081             }
2082             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2083                but the cast (NV)IV_MIN rounds to a the value less (more
2084                negative) than IV_MIN which happens to be equal to SvNVX ??
2085                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2086                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2087                (NV)UVX == NVX are both true, but the values differ. :-(
2088                Hopefully for 2s complement IV_MIN is something like
2089                0x8000000000000000 which will be exact. NWC */
2090         }
2091         else {
2092             SvUV_set(sv, U_V(SvNVX(sv)));
2093             if (
2094                 (SvNVX(sv) == (NV) SvUVX(sv))
2095 #ifndef  NV_PRESERVES_UV
2096                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2097                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2098                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2099                 /* Don't flag it as "accurately an integer" if the number
2100                    came from a (by definition imprecise) NV operation, and
2101                    we're outside the range of NV integer precision */
2102 #endif
2103                 && SvNOK(sv)
2104                 )
2105                 SvIOK_on(sv);
2106             SvIsUV_on(sv);
2107             DEBUG_c(PerlIO_printf(Perl_debug_log,
2108                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2109                                   PTR2UV(sv),
2110                                   SvUVX(sv),
2111                                   SvUVX(sv)));
2112         }
2113     }
2114     else if (SvPOKp(sv)) {
2115         UV value;
2116         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2117         /* We want to avoid a possible problem when we cache an IV/ a UV which
2118            may be later translated to an NV, and the resulting NV is not
2119            the same as the direct translation of the initial string
2120            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2121            be careful to ensure that the value with the .456 is around if the
2122            NV value is requested in the future).
2123         
2124            This means that if we cache such an IV/a UV, we need to cache the
2125            NV as well.  Moreover, we trade speed for space, and do not
2126            cache the NV if we are sure it's not needed.
2127          */
2128
2129         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2130         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2131              == IS_NUMBER_IN_UV) {
2132             /* It's definitely an integer, only upgrade to PVIV */
2133             if (SvTYPE(sv) < SVt_PVIV)
2134                 sv_upgrade(sv, SVt_PVIV);
2135             (void)SvIOK_on(sv);
2136         } else if (SvTYPE(sv) < SVt_PVNV)
2137             sv_upgrade(sv, SVt_PVNV);
2138
2139         /* If NVs preserve UVs then we only use the UV value if we know that
2140            we aren't going to call atof() below. If NVs don't preserve UVs
2141            then the value returned may have more precision than atof() will
2142            return, even though value isn't perfectly accurate.  */
2143         if ((numtype & (IS_NUMBER_IN_UV
2144 #ifdef NV_PRESERVES_UV
2145                         | IS_NUMBER_NOT_INT
2146 #endif
2147             )) == IS_NUMBER_IN_UV) {
2148             /* This won't turn off the public IOK flag if it was set above  */
2149             (void)SvIOKp_on(sv);
2150
2151             if (!(numtype & IS_NUMBER_NEG)) {
2152                 /* positive */;
2153                 if (value <= (UV)IV_MAX) {
2154                     SvIV_set(sv, (IV)value);
2155                 } else {
2156                     /* it didn't overflow, and it was positive. */
2157                     SvUV_set(sv, value);
2158                     SvIsUV_on(sv);
2159                 }
2160             } else {
2161                 /* 2s complement assumption  */
2162                 if (value <= (UV)IV_MIN) {
2163                     SvIV_set(sv, -(IV)value);
2164                 } else {
2165                     /* Too negative for an IV.  This is a double upgrade, but
2166                        I'm assuming it will be rare.  */
2167                     if (SvTYPE(sv) < SVt_PVNV)
2168                         sv_upgrade(sv, SVt_PVNV);
2169                     SvNOK_on(sv);
2170                     SvIOK_off(sv);
2171                     SvIOKp_on(sv);
2172                     SvNV_set(sv, -(NV)value);
2173                     SvIV_set(sv, IV_MIN);
2174                 }
2175             }
2176         }
2177         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2178            will be in the previous block to set the IV slot, and the next
2179            block to set the NV slot.  So no else here.  */
2180         
2181         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2182             != IS_NUMBER_IN_UV) {
2183             /* It wasn't an (integer that doesn't overflow the UV). */
2184             SvNV_set(sv, Atof(SvPVX_const(sv)));
2185
2186             if (! numtype && ckWARN(WARN_NUMERIC))
2187                 not_a_number(sv);
2188
2189 #if defined(USE_LONG_DOUBLE)
2190             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2191                                   PTR2UV(sv), SvNVX(sv)));
2192 #else
2193             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2194                                   PTR2UV(sv), SvNVX(sv)));
2195 #endif
2196
2197 #ifdef NV_PRESERVES_UV
2198             (void)SvIOKp_on(sv);
2199             (void)SvNOK_on(sv);
2200             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2201                 SvIV_set(sv, I_V(SvNVX(sv)));
2202                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2203                     SvIOK_on(sv);
2204                 } else {
2205                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2206                 }
2207                 /* UV will not work better than IV */
2208             } else {
2209                 if (SvNVX(sv) > (NV)UV_MAX) {
2210                     SvIsUV_on(sv);
2211                     /* Integer is inaccurate. NOK, IOKp, is UV */
2212                     SvUV_set(sv, UV_MAX);
2213                 } else {
2214                     SvUV_set(sv, U_V(SvNVX(sv)));
2215                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2216                        NV preservse UV so can do correct comparison.  */
2217                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2218                         SvIOK_on(sv);
2219                     } else {
2220                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2221                     }
2222                 }
2223                 SvIsUV_on(sv);
2224             }
2225 #else /* NV_PRESERVES_UV */
2226             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2227                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2228                 /* The IV/UV slot will have been set from value returned by
2229                    grok_number above.  The NV slot has just been set using
2230                    Atof.  */
2231                 SvNOK_on(sv);
2232                 assert (SvIOKp(sv));
2233             } else {
2234                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2235                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2236                     /* Small enough to preserve all bits. */
2237                     (void)SvIOKp_on(sv);
2238                     SvNOK_on(sv);
2239                     SvIV_set(sv, I_V(SvNVX(sv)));
2240                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2241                         SvIOK_on(sv);
2242                     /* Assumption: first non-preserved integer is < IV_MAX,
2243                        this NV is in the preserved range, therefore: */
2244                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2245                           < (UV)IV_MAX)) {
2246                         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);
2247                     }
2248                 } else {
2249                     /* IN_UV NOT_INT
2250                          0      0       already failed to read UV.
2251                          0      1       already failed to read UV.
2252                          1      0       you won't get here in this case. IV/UV
2253                                         slot set, public IOK, Atof() unneeded.
2254                          1      1       already read UV.
2255                        so there's no point in sv_2iuv_non_preserve() attempting
2256                        to use atol, strtol, strtoul etc.  */
2257 #  ifdef DEBUGGING
2258                     sv_2iuv_non_preserve (sv, numtype);
2259 #  else
2260                     sv_2iuv_non_preserve (sv);
2261 #  endif
2262                 }
2263             }
2264 #endif /* NV_PRESERVES_UV */
2265         /* It might be more code efficient to go through the entire logic above
2266            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2267            gets complex and potentially buggy, so more programmer efficient
2268            to do it this way, by turning off the public flags:  */
2269         if (!numtype)
2270             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2271         }
2272     }
2273     else  {
2274         if (isGV_with_GP(sv))
2275             return glob_2number(MUTABLE_GV(sv));
2276
2277         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2278                 report_uninit(sv);
2279         if (SvTYPE(sv) < SVt_IV)
2280             /* Typically the caller expects that sv_any is not NULL now.  */
2281             sv_upgrade(sv, SVt_IV);
2282         /* Return 0 from the caller.  */
2283         return TRUE;
2284     }
2285     return FALSE;
2286 }
2287
2288 /*
2289 =for apidoc sv_2iv_flags
2290
2291 Return the integer value of an SV, doing any necessary string
2292 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2293 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2294
2295 =cut
2296 */
2297
2298 IV
2299 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2300 {
2301     dVAR;
2302
2303     if (!sv)
2304         return 0;
2305
2306     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2307          && SvTYPE(sv) != SVt_PVFM);
2308
2309     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2310         mg_get(sv);
2311
2312     if (SvROK(sv)) {
2313         if (SvAMAGIC(sv)) {
2314             SV * tmpstr;
2315             if (flags & SV_SKIP_OVERLOAD)
2316                 return 0;
2317             tmpstr = AMG_CALLunary(sv, numer_amg);
2318             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2319                 return SvIV(tmpstr);
2320             }
2321         }
2322         return PTR2IV(SvRV(sv));
2323     }
2324
2325     if (SvVALID(sv) || isREGEXP(sv)) {
2326         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2327            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2328            In practice they are extremely unlikely to actually get anywhere
2329            accessible by user Perl code - the only way that I'm aware of is when
2330            a constant subroutine which is used as the second argument to index.
2331
2332            Regexps have no SvIVX and SvNVX fields.
2333         */
2334         assert(isREGEXP(sv) || SvPOKp(sv));
2335         {
2336             UV value;
2337             const char * const ptr =
2338                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2339             const int numtype
2340                 = grok_number(ptr, SvCUR(sv), &value);
2341
2342             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2343                 == IS_NUMBER_IN_UV) {
2344                 /* It's definitely an integer */
2345                 if (numtype & IS_NUMBER_NEG) {
2346                     if (value < (UV)IV_MIN)
2347                         return -(IV)value;
2348                 } else {
2349                     if (value < (UV)IV_MAX)
2350                         return (IV)value;
2351                 }
2352             }
2353             if (!numtype) {
2354                 if (ckWARN(WARN_NUMERIC))
2355                     not_a_number(sv);
2356             }
2357             return I_V(Atof(ptr));
2358         }
2359     }
2360
2361     if (SvTHINKFIRST(sv)) {
2362 #ifdef PERL_OLD_COPY_ON_WRITE
2363         if (SvIsCOW(sv)) {
2364             sv_force_normal_flags(sv, 0);
2365         }
2366 #endif
2367         if (SvREADONLY(sv) && !SvOK(sv)) {
2368             if (ckWARN(WARN_UNINITIALIZED))
2369                 report_uninit(sv);
2370             return 0;
2371         }
2372     }
2373
2374     if (!SvIOKp(sv)) {
2375         if (S_sv_2iuv_common(aTHX_ sv))
2376             return 0;
2377     }
2378
2379     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2380         PTR2UV(sv),SvIVX(sv)));
2381     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2382 }
2383
2384 /*
2385 =for apidoc sv_2uv_flags
2386
2387 Return the unsigned integer value of an SV, doing any necessary string
2388 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2389 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2390
2391 =cut
2392 */
2393
2394 UV
2395 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2396 {
2397     dVAR;
2398
2399     if (!sv)
2400         return 0;
2401
2402     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2403         mg_get(sv);
2404
2405     if (SvROK(sv)) {
2406         if (SvAMAGIC(sv)) {
2407             SV *tmpstr;
2408             if (flags & SV_SKIP_OVERLOAD)
2409                 return 0;
2410             tmpstr = AMG_CALLunary(sv, numer_amg);
2411             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2412                 return SvUV(tmpstr);
2413             }
2414         }
2415         return PTR2UV(SvRV(sv));
2416     }
2417
2418     if (SvVALID(sv) || isREGEXP(sv)) {
2419         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2420            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2421            Regexps have no SvIVX and SvNVX fields. */
2422         assert(isREGEXP(sv) || SvPOKp(sv));
2423         {
2424             UV value;
2425             const char * const ptr =
2426                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2427             const int numtype
2428                 = grok_number(ptr, SvCUR(sv), &value);
2429
2430             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2431                 == IS_NUMBER_IN_UV) {
2432                 /* It's definitely an integer */
2433                 if (!(numtype & IS_NUMBER_NEG))
2434                     return value;
2435             }
2436             if (!numtype) {
2437                 if (ckWARN(WARN_NUMERIC))
2438                     not_a_number(sv);
2439             }
2440             return U_V(Atof(ptr));
2441         }
2442     }
2443
2444     if (SvTHINKFIRST(sv)) {
2445 #ifdef PERL_OLD_COPY_ON_WRITE
2446         if (SvIsCOW(sv)) {
2447             sv_force_normal_flags(sv, 0);
2448         }
2449 #endif
2450         if (SvREADONLY(sv) && !SvOK(sv)) {
2451             if (ckWARN(WARN_UNINITIALIZED))
2452                 report_uninit(sv);
2453             return 0;
2454         }
2455     }
2456
2457     if (!SvIOKp(sv)) {
2458         if (S_sv_2iuv_common(aTHX_ sv))
2459             return 0;
2460     }
2461
2462     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2463                           PTR2UV(sv),SvUVX(sv)));
2464     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2465 }
2466
2467 /*
2468 =for apidoc sv_2nv_flags
2469
2470 Return the num value of an SV, doing any necessary string or integer
2471 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2472 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2473
2474 =cut
2475 */
2476
2477 NV
2478 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2479 {
2480     dVAR;
2481     if (!sv)
2482         return 0.0;
2483     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2484          && SvTYPE(sv) != SVt_PVFM);
2485     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2486         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2487            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2488            Regexps have no SvIVX and SvNVX fields.  */
2489         const char *ptr;
2490         if (flags & SV_GMAGIC)
2491             mg_get(sv);
2492         if (SvNOKp(sv))
2493             return SvNVX(sv);
2494         if (SvPOKp(sv) && !SvIOKp(sv)) {
2495             ptr = SvPVX_const(sv);
2496           grokpv:
2497             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2498                 !grok_number(ptr, SvCUR(sv), NULL))
2499                 not_a_number(sv);
2500             return Atof(ptr);
2501         }
2502         if (SvIOKp(sv)) {
2503             if (SvIsUV(sv))
2504                 return (NV)SvUVX(sv);
2505             else
2506                 return (NV)SvIVX(sv);
2507         }
2508         if (SvROK(sv)) {
2509             goto return_rok;
2510         }
2511         if (isREGEXP(sv)) {
2512             ptr = RX_WRAPPED((REGEXP *)sv);
2513             goto grokpv;
2514         }
2515         assert(SvTYPE(sv) >= SVt_PVMG);
2516         /* This falls through to the report_uninit near the end of the
2517            function. */
2518     } else if (SvTHINKFIRST(sv)) {
2519         if (SvROK(sv)) {
2520         return_rok:
2521             if (SvAMAGIC(sv)) {
2522                 SV *tmpstr;
2523                 if (flags & SV_SKIP_OVERLOAD)
2524                     return 0;
2525                 tmpstr = AMG_CALLunary(sv, numer_amg);
2526                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2527                     return SvNV(tmpstr);
2528                 }
2529             }
2530             return PTR2NV(SvRV(sv));
2531         }
2532 #ifdef PERL_OLD_COPY_ON_WRITE
2533         if (SvIsCOW(sv)) {
2534             sv_force_normal_flags(sv, 0);
2535         }
2536 #endif
2537         if (SvREADONLY(sv) && !SvOK(sv)) {
2538             if (ckWARN(WARN_UNINITIALIZED))
2539                 report_uninit(sv);
2540             return 0.0;
2541         }
2542     }
2543     if (SvTYPE(sv) < SVt_NV) {
2544         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2545         sv_upgrade(sv, SVt_NV);
2546 #ifdef USE_LONG_DOUBLE
2547         DEBUG_c({
2548             STORE_NUMERIC_LOCAL_SET_STANDARD();
2549             PerlIO_printf(Perl_debug_log,
2550                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2551                           PTR2UV(sv), SvNVX(sv));
2552             RESTORE_NUMERIC_LOCAL();
2553         });
2554 #else
2555         DEBUG_c({
2556             STORE_NUMERIC_LOCAL_SET_STANDARD();
2557             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2558                           PTR2UV(sv), SvNVX(sv));
2559             RESTORE_NUMERIC_LOCAL();
2560         });
2561 #endif
2562     }
2563     else if (SvTYPE(sv) < SVt_PVNV)
2564         sv_upgrade(sv, SVt_PVNV);
2565     if (SvNOKp(sv)) {
2566         return SvNVX(sv);
2567     }
2568     if (SvIOKp(sv)) {
2569         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2570 #ifdef NV_PRESERVES_UV
2571         if (SvIOK(sv))
2572             SvNOK_on(sv);
2573         else
2574             SvNOKp_on(sv);
2575 #else
2576         /* Only set the public NV OK flag if this NV preserves the IV  */
2577         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2578         if (SvIOK(sv) &&
2579             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2580                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2581             SvNOK_on(sv);
2582         else
2583             SvNOKp_on(sv);
2584 #endif
2585     }
2586     else if (SvPOKp(sv)) {
2587         UV value;
2588         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2589         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2590             not_a_number(sv);
2591 #ifdef NV_PRESERVES_UV
2592         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2593             == IS_NUMBER_IN_UV) {
2594             /* It's definitely an integer */
2595             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2596         } else
2597             SvNV_set(sv, Atof(SvPVX_const(sv)));
2598         if (numtype)
2599             SvNOK_on(sv);
2600         else
2601             SvNOKp_on(sv);
2602 #else
2603         SvNV_set(sv, Atof(SvPVX_const(sv)));
2604         /* Only set the public NV OK flag if this NV preserves the value in
2605            the PV at least as well as an IV/UV would.
2606            Not sure how to do this 100% reliably. */
2607         /* if that shift count is out of range then Configure's test is
2608            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2609            UV_BITS */
2610         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2611             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2612             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2613         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2614             /* Can't use strtol etc to convert this string, so don't try.
2615                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2616             SvNOK_on(sv);
2617         } else {
2618             /* value has been set.  It may not be precise.  */
2619             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2620                 /* 2s complement assumption for (UV)IV_MIN  */
2621                 SvNOK_on(sv); /* Integer is too negative.  */
2622             } else {
2623                 SvNOKp_on(sv);
2624                 SvIOKp_on(sv);
2625
2626                 if (numtype & IS_NUMBER_NEG) {
2627                     SvIV_set(sv, -(IV)value);
2628                 } else if (value <= (UV)IV_MAX) {
2629                     SvIV_set(sv, (IV)value);
2630                 } else {
2631                     SvUV_set(sv, value);
2632                     SvIsUV_on(sv);
2633                 }
2634
2635                 if (numtype & IS_NUMBER_NOT_INT) {
2636                     /* I believe that even if the original PV had decimals,
2637                        they are lost beyond the limit of the FP precision.
2638                        However, neither is canonical, so both only get p
2639                        flags.  NWC, 2000/11/25 */
2640                     /* Both already have p flags, so do nothing */
2641                 } else {
2642                     const NV nv = SvNVX(sv);
2643                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2644                         if (SvIVX(sv) == I_V(nv)) {
2645                             SvNOK_on(sv);
2646                         } else {
2647                             /* It had no "." so it must be integer.  */
2648                         }
2649                         SvIOK_on(sv);
2650                     } else {
2651                         /* between IV_MAX and NV(UV_MAX).
2652                            Could be slightly > UV_MAX */
2653
2654                         if (numtype & IS_NUMBER_NOT_INT) {
2655                             /* UV and NV both imprecise.  */
2656                         } else {
2657                             const UV nv_as_uv = U_V(nv);
2658
2659                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2660                                 SvNOK_on(sv);
2661                             }
2662                             SvIOK_on(sv);
2663                         }
2664                     }
2665                 }
2666             }
2667         }
2668         /* It might be more code efficient to go through the entire logic above
2669            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2670            gets complex and potentially buggy, so more programmer efficient
2671            to do it this way, by turning off the public flags:  */
2672         if (!numtype)
2673             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2674 #endif /* NV_PRESERVES_UV */
2675     }
2676     else  {
2677         if (isGV_with_GP(sv)) {
2678             glob_2number(MUTABLE_GV(sv));
2679             return 0.0;
2680         }
2681
2682         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2683             report_uninit(sv);
2684         assert (SvTYPE(sv) >= SVt_NV);
2685         /* Typically the caller expects that sv_any is not NULL now.  */
2686         /* XXX Ilya implies that this is a bug in callers that assume this
2687            and ideally should be fixed.  */
2688         return 0.0;
2689     }
2690 #if defined(USE_LONG_DOUBLE)
2691     DEBUG_c({
2692         STORE_NUMERIC_LOCAL_SET_STANDARD();
2693         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2694                       PTR2UV(sv), SvNVX(sv));
2695         RESTORE_NUMERIC_LOCAL();
2696     });
2697 #else
2698     DEBUG_c({
2699         STORE_NUMERIC_LOCAL_SET_STANDARD();
2700         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2701                       PTR2UV(sv), SvNVX(sv));
2702         RESTORE_NUMERIC_LOCAL();
2703     });
2704 #endif
2705     return SvNVX(sv);
2706 }
2707
2708 /*
2709 =for apidoc sv_2num
2710
2711 Return an SV with the numeric value of the source SV, doing any necessary
2712 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2713 access this function.
2714
2715 =cut
2716 */
2717
2718 SV *
2719 Perl_sv_2num(pTHX_ SV *const sv)
2720 {
2721     PERL_ARGS_ASSERT_SV_2NUM;
2722
2723     if (!SvROK(sv))
2724         return sv;
2725     if (SvAMAGIC(sv)) {
2726         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2727         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2728         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2729             return sv_2num(tmpsv);
2730     }
2731     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2732 }
2733
2734 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2735  * UV as a string towards the end of buf, and return pointers to start and
2736  * end of it.
2737  *
2738  * We assume that buf is at least TYPE_CHARS(UV) long.
2739  */
2740
2741 static char *
2742 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2743 {
2744     char *ptr = buf + TYPE_CHARS(UV);
2745     char * const ebuf = ptr;
2746     int sign;
2747
2748     PERL_ARGS_ASSERT_UIV_2BUF;
2749
2750     if (is_uv)
2751         sign = 0;
2752     else if (iv >= 0) {
2753         uv = iv;
2754         sign = 0;
2755     } else {
2756         uv = -iv;
2757         sign = 1;
2758     }
2759     do {
2760         *--ptr = '0' + (char)(uv % 10);
2761     } while (uv /= 10);
2762     if (sign)
2763         *--ptr = '-';
2764     *peob = ebuf;
2765     return ptr;
2766 }
2767
2768 /*
2769 =for apidoc sv_2pv_flags
2770
2771 Returns a pointer to the string value of an SV, and sets *lp to its length.
2772 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2773 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2774 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2775
2776 =cut
2777 */
2778
2779 char *
2780 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2781 {
2782     dVAR;
2783     char *s;
2784
2785     if (!sv) {
2786         if (lp)
2787             *lp = 0;
2788         return (char *)"";
2789     }
2790     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2791          && SvTYPE(sv) != SVt_PVFM);
2792     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2793         mg_get(sv);
2794     if (SvROK(sv)) {
2795         if (SvAMAGIC(sv)) {
2796             SV *tmpstr;
2797             if (flags & SV_SKIP_OVERLOAD)
2798                 return NULL;
2799             tmpstr = AMG_CALLunary(sv, string_amg);
2800             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2801             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2802                 /* Unwrap this:  */
2803                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2804                  */
2805
2806                 char *pv;
2807                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2808                     if (flags & SV_CONST_RETURN) {
2809                         pv = (char *) SvPVX_const(tmpstr);
2810                     } else {
2811                         pv = (flags & SV_MUTABLE_RETURN)
2812                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2813                     }
2814                     if (lp)
2815                         *lp = SvCUR(tmpstr);
2816                 } else {
2817                     pv = sv_2pv_flags(tmpstr, lp, flags);
2818                 }
2819                 if (SvUTF8(tmpstr))
2820                     SvUTF8_on(sv);
2821                 else
2822                     SvUTF8_off(sv);
2823                 return pv;
2824             }
2825         }
2826         {
2827             STRLEN len;
2828             char *retval;
2829             char *buffer;
2830             SV *const referent = SvRV(sv);
2831
2832             if (!referent) {
2833                 len = 7;
2834                 retval = buffer = savepvn("NULLREF", len);
2835             } else if (SvTYPE(referent) == SVt_REGEXP &&
2836                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2837                         amagic_is_enabled(string_amg))) {
2838                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2839
2840                 assert(re);
2841                         
2842                 /* If the regex is UTF-8 we want the containing scalar to
2843                    have an UTF-8 flag too */
2844                 if (RX_UTF8(re))
2845                     SvUTF8_on(sv);
2846                 else
2847                     SvUTF8_off(sv);     
2848
2849                 if (lp)
2850                     *lp = RX_WRAPLEN(re);
2851  
2852                 return RX_WRAPPED(re);
2853             } else {
2854                 const char *const typestr = sv_reftype(referent, 0);
2855                 const STRLEN typelen = strlen(typestr);
2856                 UV addr = PTR2UV(referent);
2857                 const char *stashname = NULL;
2858                 STRLEN stashnamelen = 0; /* hush, gcc */
2859                 const char *buffer_end;
2860
2861                 if (SvOBJECT(referent)) {
2862                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2863
2864                     if (name) {
2865                         stashname = HEK_KEY(name);
2866                         stashnamelen = HEK_LEN(name);
2867
2868                         if (HEK_UTF8(name)) {
2869                             SvUTF8_on(sv);
2870                         } else {
2871                             SvUTF8_off(sv);
2872                         }
2873                     } else {
2874                         stashname = "__ANON__";
2875                         stashnamelen = 8;
2876                     }
2877                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2878                         + 2 * sizeof(UV) + 2 /* )\0 */;
2879                 } else {
2880                     len = typelen + 3 /* (0x */
2881                         + 2 * sizeof(UV) + 2 /* )\0 */;
2882                 }
2883
2884                 Newx(buffer, len, char);
2885                 buffer_end = retval = buffer + len;
2886
2887                 /* Working backwards  */
2888                 *--retval = '\0';
2889                 *--retval = ')';
2890                 do {
2891                     *--retval = PL_hexdigit[addr & 15];
2892                 } while (addr >>= 4);
2893                 *--retval = 'x';
2894                 *--retval = '0';
2895                 *--retval = '(';
2896
2897                 retval -= typelen;
2898                 memcpy(retval, typestr, typelen);
2899
2900                 if (stashname) {
2901                     *--retval = '=';
2902                     retval -= stashnamelen;
2903                     memcpy(retval, stashname, stashnamelen);
2904                 }
2905                 /* retval may not necessarily have reached the start of the
2906                    buffer here.  */
2907                 assert (retval >= buffer);
2908
2909                 len = buffer_end - retval - 1; /* -1 for that \0  */
2910             }
2911             if (lp)
2912                 *lp = len;
2913             SAVEFREEPV(buffer);
2914             return retval;
2915         }
2916     }
2917
2918     if (SvPOKp(sv)) {
2919         if (lp)
2920             *lp = SvCUR(sv);
2921         if (flags & SV_MUTABLE_RETURN)
2922             return SvPVX_mutable(sv);
2923         if (flags & SV_CONST_RETURN)
2924             return (char *)SvPVX_const(sv);
2925         return SvPVX(sv);
2926     }
2927
2928     if (SvIOK(sv)) {
2929         /* I'm assuming that if both IV and NV are equally valid then
2930            converting the IV is going to be more efficient */
2931         const U32 isUIOK = SvIsUV(sv);
2932         char buf[TYPE_CHARS(UV)];
2933         char *ebuf, *ptr;
2934         STRLEN len;
2935
2936         if (SvTYPE(sv) < SVt_PVIV)
2937             sv_upgrade(sv, SVt_PVIV);
2938         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2939         len = ebuf - ptr;
2940         /* inlined from sv_setpvn */
2941         s = SvGROW_mutable(sv, len + 1);
2942         Move(ptr, s, len, char);
2943         s += len;
2944         *s = '\0';
2945         SvPOK_on(sv);
2946     }
2947     else if (SvNOK(sv)) {
2948         if (SvTYPE(sv) < SVt_PVNV)
2949             sv_upgrade(sv, SVt_PVNV);
2950         if (SvNVX(sv) == 0.0) {
2951             s = SvGROW_mutable(sv, 2);
2952             *s++ = '0';
2953             *s = '\0';
2954         } else {
2955             dSAVE_ERRNO;
2956             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2957             s = SvGROW_mutable(sv, NV_DIG + 20);
2958             /* some Xenix systems wipe out errno here */
2959
2960 #ifndef USE_LOCALE_NUMERIC
2961             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2962             SvPOK_on(sv);
2963 #else
2964             /* Gconvert always uses the current locale.  That's the right thing
2965              * to do if we're supposed to be using locales.  But otherwise, we
2966              * want the result to be based on the C locale, so we need to
2967              * change to the C locale during the Gconvert and then change back.
2968              * But if we're already in the C locale (PL_numeric_standard is
2969              * TRUE in that case), no need to do any changing */
2970             if (PL_numeric_standard || IN_SOME_LOCALE_FORM_RUNTIME) {
2971                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2972
2973                 /* If the radix character is UTF-8, and actually is in the
2974                  * output, turn on the UTF-8 flag for the scalar */
2975                 if (! PL_numeric_standard
2976                     && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
2977                     && instr(s, SvPVX_const(PL_numeric_radix_sv)))
2978                 {
2979                     SvUTF8_on(sv);
2980                 }
2981             }
2982             else {
2983                 char *loc = savepv(setlocale(LC_NUMERIC, NULL));
2984                 setlocale(LC_NUMERIC, "C");
2985                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2986                 setlocale(LC_NUMERIC, loc);
2987                 Safefree(loc);
2988
2989             }
2990
2991             /* We don't call SvPOK_on(), because it may come to pass that the
2992              * locale changes so that the stringification we just did is no
2993              * longer correct.  We will have to re-stringify every time it is
2994              * needed */
2995 #endif
2996             RESTORE_ERRNO;
2997             while (*s) s++;
2998         }
2999 #ifdef hcx
3000         if (s[-1] == '.')
3001             *--s = '\0';
3002 #endif
3003     }
3004     else if (isGV_with_GP(sv)) {
3005         GV *const gv = MUTABLE_GV(sv);
3006         SV *const buffer = sv_newmortal();
3007
3008         gv_efullname3(buffer, gv, "*");
3009
3010         assert(SvPOK(buffer));
3011         if (SvUTF8(buffer))
3012             SvUTF8_on(sv);
3013         if (lp)
3014             *lp = SvCUR(buffer);
3015         return SvPVX(buffer);
3016     }
3017     else if (isREGEXP(sv)) {
3018         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3019         return RX_WRAPPED((REGEXP *)sv);
3020     }
3021     else {
3022         if (lp)
3023             *lp = 0;
3024         if (flags & SV_UNDEF_RETURNS_NULL)
3025             return NULL;
3026         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3027             report_uninit(sv);
3028         /* Typically the caller expects that sv_any is not NULL now.  */
3029         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3030             sv_upgrade(sv, SVt_PV);
3031         return (char *)"";
3032     }
3033
3034     {
3035         const STRLEN len = s - SvPVX_const(sv);
3036         if (lp) 
3037             *lp = len;
3038         SvCUR_set(sv, len);
3039     }
3040     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3041                           PTR2UV(sv),SvPVX_const(sv)));
3042     if (flags & SV_CONST_RETURN)
3043         return (char *)SvPVX_const(sv);
3044     if (flags & SV_MUTABLE_RETURN)
3045         return SvPVX_mutable(sv);
3046     return SvPVX(sv);
3047 }
3048
3049 /*
3050 =for apidoc sv_copypv
3051
3052 Copies a stringified representation of the source SV into the
3053 destination SV.  Automatically performs any necessary mg_get and
3054 coercion of numeric values into strings.  Guaranteed to preserve
3055 UTF8 flag even from overloaded objects.  Similar in nature to
3056 sv_2pv[_flags] but operates directly on an SV instead of just the
3057 string.  Mostly uses sv_2pv_flags to do its work, except when that
3058 would lose the UTF-8'ness of the PV.
3059
3060 =for apidoc sv_copypv_nomg
3061
3062 Like sv_copypv, but doesn't invoke get magic first.
3063
3064 =for apidoc sv_copypv_flags
3065
3066 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3067 include SV_GMAGIC.
3068
3069 =cut
3070 */
3071
3072 void
3073 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3074 {
3075     PERL_ARGS_ASSERT_SV_COPYPV;
3076
3077     sv_copypv_flags(dsv, ssv, 0);
3078 }
3079
3080 void
3081 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3082 {
3083     STRLEN len;
3084     const char *s;
3085
3086     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3087
3088     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3089         mg_get(ssv);
3090     s = SvPV_nomg_const(ssv,len);
3091     sv_setpvn(dsv,s,len);
3092     if (SvUTF8(ssv))
3093         SvUTF8_on(dsv);
3094     else
3095         SvUTF8_off(dsv);
3096 }
3097
3098 /*
3099 =for apidoc sv_2pvbyte
3100
3101 Return a pointer to the byte-encoded representation of the SV, and set *lp
3102 to its length.  May cause the SV to be downgraded from UTF-8 as a
3103 side-effect.
3104
3105 Usually accessed via the C<SvPVbyte> macro.
3106
3107 =cut
3108 */
3109
3110 char *
3111 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3112 {
3113     PERL_ARGS_ASSERT_SV_2PVBYTE;
3114
3115     SvGETMAGIC(sv);
3116     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3117      || isGV_with_GP(sv) || SvROK(sv)) {
3118         SV *sv2 = sv_newmortal();
3119         sv_copypv_nomg(sv2,sv);
3120         sv = sv2;
3121     }
3122     sv_utf8_downgrade(sv,0);
3123     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3124 }
3125
3126 /*
3127 =for apidoc sv_2pvutf8
3128
3129 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3130 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3131
3132 Usually accessed via the C<SvPVutf8> macro.
3133
3134 =cut
3135 */
3136
3137 char *
3138 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3139 {
3140     PERL_ARGS_ASSERT_SV_2PVUTF8;
3141
3142     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3143      || isGV_with_GP(sv) || SvROK(sv))
3144         sv = sv_mortalcopy(sv);
3145     else
3146         SvGETMAGIC(sv);
3147     sv_utf8_upgrade_nomg(sv);
3148     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3149 }
3150
3151
3152 /*
3153 =for apidoc sv_2bool
3154
3155 This macro is only used by sv_true() or its macro equivalent, and only if
3156 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3157 It calls sv_2bool_flags with the SV_GMAGIC flag.
3158
3159 =for apidoc sv_2bool_flags
3160
3161 This function is only used by sv_true() and friends,  and only if
3162 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3163 contain SV_GMAGIC, then it does an mg_get() first.
3164
3165
3166 =cut
3167 */
3168
3169 bool
3170 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
3171 {
3172     dVAR;
3173
3174     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3175
3176     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3177
3178     if (!SvOK(sv))
3179         return 0;
3180     if (SvROK(sv)) {
3181         if (SvAMAGIC(sv)) {
3182             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3183             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3184                 return cBOOL(SvTRUE(tmpsv));
3185         }
3186         return SvRV(sv) != 0;
3187     }
3188     if (isREGEXP(sv))
3189         return
3190           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3191     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3192 }
3193
3194 /*
3195 =for apidoc sv_utf8_upgrade
3196
3197 Converts the PV of an SV to its UTF-8-encoded form.
3198 Forces the SV to string form if it is not already.
3199 Will C<mg_get> on C<sv> if appropriate.
3200 Always sets the SvUTF8 flag to avoid future validity checks even
3201 if the whole string is the same in UTF-8 as not.
3202 Returns the number of bytes in the converted string
3203
3204 This is not a general purpose byte encoding to Unicode interface:
3205 use the Encode extension for that.
3206
3207 =for apidoc sv_utf8_upgrade_nomg
3208
3209 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3210
3211 =for apidoc sv_utf8_upgrade_flags
3212
3213 Converts the PV of an SV to its UTF-8-encoded form.
3214 Forces the SV to string form if it is not already.
3215 Always sets the SvUTF8 flag to avoid future validity checks even
3216 if all the bytes are invariant in UTF-8.
3217 If C<flags> has C<SV_GMAGIC> bit set,
3218 will C<mg_get> on C<sv> if appropriate, else not.
3219 Returns the number of bytes in the converted string
3220 C<sv_utf8_upgrade> and
3221 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3222
3223 This is not a general purpose byte encoding to Unicode interface:
3224 use the Encode extension for that.
3225
3226 =cut
3227
3228 The grow version is currently not externally documented.  It adds a parameter,
3229 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3230 have free after it upon return.  This allows the caller to reserve extra space
3231 that it intends to fill, to avoid extra grows.
3232
3233 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3234 which can be used to tell this function to not first check to see if there are
3235 any characters that are different in UTF-8 (variant characters) which would
3236 force it to allocate a new string to sv, but to assume there are.  Typically
3237 this flag is used by a routine that has already parsed the string to find that
3238 there are such characters, and passes this information on so that the work
3239 doesn't have to be repeated.
3240
3241 (One might think that the calling routine could pass in the position of the
3242 first such variant, so it wouldn't have to be found again.  But that is not the
3243 case, because typically when the caller is likely to use this flag, it won't be
3244 calling this routine unless it finds something that won't fit into a byte.
3245 Otherwise it tries to not upgrade and just use bytes.  But some things that
3246 do fit into a byte are variants in utf8, and the caller may not have been
3247 keeping track of these.)
3248
3249 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3250 isn't guaranteed due to having other routines do the work in some input cases,
3251 or if the input is already flagged as being in utf8.
3252
3253 The speed of this could perhaps be improved for many cases if someone wanted to
3254 write a fast function that counts the number of variant characters in a string,
3255 especially if it could return the position of the first one.
3256
3257 */
3258
3259 STRLEN
3260 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3261 {
3262     dVAR;
3263
3264     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3265
3266     if (sv == &PL_sv_undef)
3267         return 0;
3268     if (!SvPOK_nog(sv)) {
3269         STRLEN len = 0;
3270         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3271             (void) sv_2pv_flags(sv,&len, flags);
3272             if (SvUTF8(sv)) {
3273                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3274                 return len;
3275             }
3276         } else {
3277             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3278         }
3279     }
3280
3281     if (SvUTF8(sv)) {
3282         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3283         return SvCUR(sv);
3284     }
3285
3286     if (SvIsCOW(sv)) {
3287         S_sv_uncow(aTHX_ sv, 0);
3288     }
3289
3290     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3291         sv_recode_to_utf8(sv, PL_encoding);
3292         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3293         return SvCUR(sv);
3294     }
3295
3296     if (SvCUR(sv) == 0) {
3297         if (extra) SvGROW(sv, extra);
3298     } else { /* Assume Latin-1/EBCDIC */
3299         /* This function could be much more efficient if we
3300          * had a FLAG in SVs to signal if there are any variant
3301          * chars in the PV.  Given that there isn't such a flag
3302          * make the loop as fast as possible (although there are certainly ways
3303          * to speed this up, eg. through vectorization) */
3304         U8 * s = (U8 *) SvPVX_const(sv);
3305         U8 * e = (U8 *) SvEND(sv);
3306         U8 *t = s;
3307         STRLEN two_byte_count = 0;
3308         
3309         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3310
3311         /* See if really will need to convert to utf8.  We mustn't rely on our
3312          * incoming SV being well formed and having a trailing '\0', as certain
3313          * code in pp_formline can send us partially built SVs. */
3314
3315         while (t < e) {
3316             const U8 ch = *t++;
3317             if (NATIVE_IS_INVARIANT(ch)) continue;
3318
3319             t--;    /* t already incremented; re-point to first variant */
3320             two_byte_count = 1;
3321             goto must_be_utf8;
3322         }
3323
3324         /* utf8 conversion not needed because all are invariants.  Mark as
3325          * UTF-8 even if no variant - saves scanning loop */
3326         SvUTF8_on(sv);
3327         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3328         return SvCUR(sv);
3329
3330 must_be_utf8:
3331
3332         /* Here, the string should be converted to utf8, either because of an
3333          * input flag (two_byte_count = 0), or because a character that
3334          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3335          * the beginning of the string (if we didn't examine anything), or to
3336          * the first variant.  In either case, everything from s to t - 1 will
3337          * occupy only 1 byte each on output.
3338          *
3339          * There are two main ways to convert.  One is to create a new string
3340          * and go through the input starting from the beginning, appending each
3341          * converted value onto the new string as we go along.  It's probably
3342          * best to allocate enough space in the string for the worst possible
3343          * case rather than possibly running out of space and having to
3344          * reallocate and then copy what we've done so far.  Since everything
3345          * from s to t - 1 is invariant, the destination can be initialized
3346          * with these using a fast memory copy
3347          *
3348          * The other way is to figure out exactly how big the string should be
3349          * by parsing the entire input.  Then you don't have to make it big
3350          * enough to handle the worst possible case, and more importantly, if
3351          * the string you already have is large enough, you don't have to
3352          * allocate a new string, you can copy the last character in the input
3353          * string to the final position(s) that will be occupied by the
3354          * converted string and go backwards, stopping at t, since everything
3355          * before that is invariant.
3356          *
3357          * There are advantages and disadvantages to each method.
3358          *
3359          * In the first method, we can allocate a new string, do the memory
3360          * copy from the s to t - 1, and then proceed through the rest of the
3361          * string byte-by-byte.
3362          *
3363          * In the second method, we proceed through the rest of the input
3364          * string just calculating how big the converted string will be.  Then
3365          * there are two cases:
3366          *  1)  if the string has enough extra space to handle the converted
3367          *      value.  We go backwards through the string, converting until we
3368          *      get to the position we are at now, and then stop.  If this
3369          *      position is far enough along in the string, this method is
3370          *      faster than the other method.  If the memory copy were the same
3371          *      speed as the byte-by-byte loop, that position would be about
3372          *      half-way, as at the half-way mark, parsing to the end and back
3373          *      is one complete string's parse, the same amount as starting
3374          *      over and going all the way through.  Actually, it would be
3375          *      somewhat less than half-way, as it's faster to just count bytes
3376          *      than to also copy, and we don't have the overhead of allocating
3377          *      a new string, changing the scalar to use it, and freeing the
3378          *      existing one.  But if the memory copy is fast, the break-even
3379          *      point is somewhere after half way.  The counting loop could be
3380          *      sped up by vectorization, etc, to move the break-even point
3381          *      further towards the beginning.
3382          *  2)  if the string doesn't have enough space to handle the converted
3383          *      value.  A new string will have to be allocated, and one might
3384          *      as well, given that, start from the beginning doing the first
3385          *      method.  We've spent extra time parsing the string and in
3386          *      exchange all we've gotten is that we know precisely how big to
3387          *      make the new one.  Perl is more optimized for time than space,
3388          *      so this case is a loser.
3389          * So what I've decided to do is not use the 2nd method unless it is
3390          * guaranteed that a new string won't have to be allocated, assuming
3391          * the worst case.  I also decided not to put any more conditions on it
3392          * than this, for now.  It seems likely that, since the worst case is
3393          * twice as big as the unknown portion of the string (plus 1), we won't
3394          * be guaranteed enough space, causing us to go to the first method,
3395          * unless the string is short, or the first variant character is near
3396          * the end of it.  In either of these cases, it seems best to use the
3397          * 2nd method.  The only circumstance I can think of where this would
3398          * be really slower is if the string had once had much more data in it
3399          * than it does now, but there is still a substantial amount in it  */
3400
3401         {
3402             STRLEN invariant_head = t - s;
3403             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3404             if (SvLEN(sv) < size) {
3405
3406                 /* Here, have decided to allocate a new string */
3407
3408                 U8 *dst;
3409                 U8 *d;
3410
3411                 Newx(dst, size, U8);
3412
3413                 /* If no known invariants at the beginning of the input string,
3414                  * set so starts from there.  Otherwise, can use memory copy to
3415                  * get up to where we are now, and then start from here */
3416
3417                 if (invariant_head <= 0) {
3418                     d = dst;
3419                 } else {
3420                     Copy(s, dst, invariant_head, char);
3421                     d = dst + invariant_head;
3422                 }
3423
3424                 while (t < e) {
3425                     const UV uv = NATIVE8_TO_UNI(*t++);
3426                     if (UNI_IS_INVARIANT(uv))
3427                         *d++ = (U8)UNI_TO_NATIVE(uv);
3428                     else {
3429                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3430                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3431                     }
3432                 }
3433                 *d = '\0';
3434                 SvPV_free(sv); /* No longer using pre-existing string */
3435                 SvPV_set(sv, (char*)dst);
3436                 SvCUR_set(sv, d - dst);
3437                 SvLEN_set(sv, size);
3438             } else {
3439
3440                 /* Here, have decided to get the exact size of the string.
3441                  * Currently this happens only when we know that there is
3442                  * guaranteed enough space to fit the converted string, so
3443                  * don't have to worry about growing.  If two_byte_count is 0,
3444                  * then t points to the first byte of the string which hasn't
3445                  * been examined yet.  Otherwise two_byte_count is 1, and t
3446                  * points to the first byte in the string that will expand to
3447                  * two.  Depending on this, start examining at t or 1 after t.
3448                  * */
3449
3450                 U8 *d = t + two_byte_count;
3451
3452
3453                 /* Count up the remaining bytes that expand to two */
3454
3455                 while (d < e) {
3456                     const U8 chr = *d++;
3457                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3458                 }
3459
3460                 /* The string will expand by just the number of bytes that
3461                  * occupy two positions.  But we are one afterwards because of
3462                  * the increment just above.  This is the place to put the
3463                  * trailing NUL, and to set the length before we decrement */
3464
3465                 d += two_byte_count;
3466                 SvCUR_set(sv, d - s);
3467                 *d-- = '\0';
3468
3469
3470                 /* Having decremented d, it points to the position to put the
3471                  * very last byte of the expanded string.  Go backwards through
3472                  * the string, copying and expanding as we go, stopping when we
3473                  * get to the part that is invariant the rest of the way down */
3474
3475                 e--;
3476                 while (e >= t) {
3477                     const U8 ch = NATIVE8_TO_UNI(*e--);
3478                     if (UNI_IS_INVARIANT(ch)) {
3479                         *d-- = UNI_TO_NATIVE(ch);
3480                     } else {
3481                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3482                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3483                     }
3484                 }
3485             }
3486
3487             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3488                 /* Update pos. We do it at the end rather than during
3489                  * the upgrade, to avoid slowing down the common case
3490                  * (upgrade without pos) */
3491                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3492                 if (mg) {
3493                     I32 pos = mg->mg_len;
3494                     if (pos > 0 && (U32)pos > invariant_head) {
3495                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3496                         STRLEN n = (U32)pos - invariant_head;
3497                         while (n > 0) {
3498                             if (UTF8_IS_START(*d))
3499                                 d++;
3500                             d++;
3501                             n--;
3502                         }
3503                         mg->mg_len  = d - (U8*)SvPVX(sv);
3504                     }
3505                 }
3506                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3507                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3508             }
3509         }
3510     }
3511
3512     /* Mark as UTF-8 even if no variant - saves scanning loop */
3513     SvUTF8_on(sv);
3514     return SvCUR(sv);
3515 }
3516
3517 /*
3518 =for apidoc sv_utf8_downgrade
3519
3520 Attempts to convert the PV of an SV from characters to bytes.
3521 If the PV contains a character that cannot fit
3522 in a byte, this conversion will fail;
3523 in this case, either returns false or, if C<fail_ok> is not
3524 true, croaks.
3525
3526 This is not a general purpose Unicode to byte encoding interface:
3527 use the Encode extension for that.
3528
3529 =cut
3530 */
3531
3532 bool
3533 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3534 {
3535     dVAR;
3536
3537     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3538
3539     if (SvPOKp(sv) && SvUTF8(sv)) {
3540         if (SvCUR(sv)) {
3541             U8 *s;
3542             STRLEN len;
3543             int mg_flags = SV_GMAGIC;
3544
3545             if (SvIsCOW(sv)) {
3546                 S_sv_uncow(aTHX_ sv, 0);
3547             }
3548             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3549                 /* update pos */
3550                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3551                 if (mg) {
3552                     I32 pos = mg->mg_len;
3553                     if (pos > 0) {
3554                         sv_pos_b2u(sv, &pos);
3555                         mg_flags = 0; /* sv_pos_b2u does get magic */
3556                         mg->mg_len  = pos;
3557                     }
3558                 }
3559                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3560                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3561
3562             }
3563             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3564
3565             if (!utf8_to_bytes(s, &len)) {
3566                 if (fail_ok)
3567                     return FALSE;
3568                 else {
3569                     if (PL_op)
3570                         Perl_croak(aTHX_ "Wide character in %s",
3571                                    OP_DESC(PL_op));
3572                     else
3573                         Perl_croak(aTHX_ "Wide character");
3574                 }
3575             }
3576             SvCUR_set(sv, len);
3577         }
3578     }
3579     SvUTF8_off(sv);
3580     return TRUE;
3581 }
3582
3583 /*
3584 =for apidoc sv_utf8_encode
3585
3586 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3587 flag off so that it looks like octets again.
3588
3589 =cut
3590 */
3591
3592 void
3593 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3594 {
3595     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3596
3597     if (SvREADONLY(sv)) {
3598         sv_force_normal_flags(sv, 0);
3599     }
3600     (void) sv_utf8_upgrade(sv);
3601     SvUTF8_off(sv);
3602 }
3603
3604 /*
3605 =for apidoc sv_utf8_decode
3606
3607 If the PV of the SV is an octet sequence in UTF-8
3608 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3609 so that it looks like a character.  If the PV contains only single-byte
3610 characters, the C<SvUTF8> flag stays off.
3611 Scans PV for validity and returns false if the PV is invalid UTF-8.
3612
3613 =cut
3614 */
3615
3616 bool
3617 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3618 {
3619     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3620
3621     if (SvPOKp(sv)) {
3622         const U8 *start, *c;
3623         const U8 *e;
3624
3625         /* The octets may have got themselves encoded - get them back as
3626          * bytes
3627          */
3628         if (!sv_utf8_downgrade(sv, TRUE))
3629             return FALSE;
3630
3631         /* it is actually just a matter of turning the utf8 flag on, but
3632          * we want to make sure everything inside is valid utf8 first.
3633          */
3634         c = start = (const U8 *) SvPVX_const(sv);
3635         if (!is_utf8_string(c, SvCUR(sv)))
3636             return FALSE;
3637         e = (const U8 *) SvEND(sv);
3638         while (c < e) {
3639             const U8 ch = *c++;
3640             if (!UTF8_IS_INVARIANT(ch)) {
3641                 SvUTF8_on(sv);
3642                 break;
3643             }
3644         }
3645         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3646             /* adjust pos to the start of a UTF8 char sequence */
3647             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3648             if (mg) {
3649                 I32 pos = mg->mg_len;
3650                 if (pos > 0) {
3651                     for (c = start + pos; c > start; c--) {
3652                         if (UTF8_IS_START(*c))
3653                             break;
3654                     }
3655                     mg->mg_len  = c - start;
3656                 }
3657             }
3658             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3659                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3660         }
3661     }
3662     return TRUE;
3663 }
3664
3665 /*
3666 =for apidoc sv_setsv
3667
3668 Copies the contents of the source SV C<ssv> into the destination SV
3669 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3670 function if the source SV needs to be reused.  Does not handle 'set' magic.
3671 Loosely speaking, it performs a copy-by-value, obliterating any previous
3672 content of the destination.
3673
3674 You probably want to use one of the assortment of wrappers, such as
3675 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3676 C<SvSetMagicSV_nosteal>.
3677
3678 =for apidoc sv_setsv_flags
3679
3680 Copies the contents of the source SV C<ssv> into the destination SV
3681 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3682 function if the source SV needs to be reused.  Does not handle 'set' magic.
3683 Loosely speaking, it performs a copy-by-value, obliterating any previous
3684 content of the destination.
3685 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3686 C<ssv> if appropriate, else not.  If the C<flags>
3687 parameter has the C<NOSTEAL> bit set then the
3688 buffers of temps will not be stolen.  <sv_setsv>
3689 and C<sv_setsv_nomg> are implemented in terms of this function.
3690
3691 You probably want to use one of the assortment of wrappers, such as
3692 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3693 C<SvSetMagicSV_nosteal>.
3694
3695 This is the primary function for copying scalars, and most other
3696 copy-ish functions and macros use this underneath.
3697
3698 =cut
3699 */
3700
3701 static void
3702 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3703 {
3704     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3705     HV *old_stash = NULL;
3706
3707     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3708
3709     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3710         const char * const name = GvNAME(sstr);
3711         const STRLEN len = GvNAMELEN(sstr);
3712         {
3713             if (dtype >= SVt_PV) {
3714                 SvPV_free(dstr);
3715                 SvPV_set(dstr, 0);
3716                 SvLEN_set(dstr, 0);
3717                 SvCUR_set(dstr, 0);
3718             }
3719             SvUPGRADE(dstr, SVt_PVGV);
3720             (void)SvOK_off(dstr);
3721             /* We have to turn this on here, even though we turn it off
3722                below, as GvSTASH will fail an assertion otherwise. */
3723             isGV_with_GP_on(dstr);
3724         }
3725         GvSTASH(dstr) = GvSTASH(sstr);
3726         if (GvSTASH(dstr))
3727             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3728         gv_name_set(MUTABLE_GV(dstr), name, len,
3729                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3730         SvFAKE_on(dstr);        /* can coerce to non-glob */
3731     }
3732
3733     if(GvGP(MUTABLE_GV(sstr))) {
3734         /* If source has method cache entry, clear it */
3735         if(GvCVGEN(sstr)) {
3736             SvREFCNT_dec(GvCV(sstr));
3737             GvCV_set(sstr, NULL);
3738             GvCVGEN(sstr) = 0;
3739         }
3740         /* If source has a real method, then a method is
3741            going to change */
3742         else if(
3743          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3744         ) {
3745             mro_changes = 1;
3746         }
3747     }
3748
3749     /* If dest already had a real method, that's a change as well */
3750     if(
3751         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3752      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3753     ) {
3754         mro_changes = 1;
3755     }
3756
3757     /* We don't need to check the name of the destination if it was not a
3758        glob to begin with. */
3759     if(dtype == SVt_PVGV) {
3760         const char * const name = GvNAME((const GV *)dstr);
3761         if(
3762             strEQ(name,"ISA")
3763          /* The stash may have been detached from the symbol table, so
3764             check its name. */
3765          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3766         )
3767             mro_changes = 2;
3768         else {
3769             const STRLEN len = GvNAMELEN(dstr);
3770             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3771              || (len == 1 && name[0] == ':')) {
3772                 mro_changes = 3;
3773
3774                 /* Set aside the old stash, so we can reset isa caches on
3775                    its subclasses. */
3776                 if((old_stash = GvHV(dstr)))
3777                     /* Make sure we do not lose it early. */
3778                     SvREFCNT_inc_simple_void_NN(
3779                      sv_2mortal((SV *)old_stash)
3780                     );
3781             }
3782         }
3783     }
3784
3785     gp_free(MUTABLE_GV(dstr));
3786     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3787     (void)SvOK_off(dstr);
3788     isGV_with_GP_on(dstr);
3789     GvINTRO_off(dstr);          /* one-shot flag */
3790     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3791     if (SvTAINTED(sstr))
3792         SvTAINT(dstr);
3793     if (GvIMPORTED(dstr) != GVf_IMPORTED
3794         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3795         {
3796             GvIMPORTED_on(dstr);
3797         }
3798     GvMULTI_on(dstr);
3799     if(mro_changes == 2) {
3800       if (GvAV((const GV *)sstr)) {
3801         MAGIC *mg;
3802         SV * const sref = (SV *)GvAV((const GV *)dstr);
3803         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3804             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3805                 AV * const ary = newAV();
3806                 av_push(ary, mg->mg_obj); /* takes the refcount */
3807                 mg->mg_obj = (SV *)ary;
3808             }
3809             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3810         }
3811         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3812       }
3813       mro_isa_changed_in(GvSTASH(dstr));
3814     }
3815     else if(mro_changes == 3) {
3816         HV * const stash = GvHV(dstr);
3817         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3818             mro_package_moved(
3819                 stash, old_stash,
3820                 (GV *)dstr, 0
3821             );
3822     }
3823     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3824     if (GvIO(dstr) && dtype == SVt_PVGV) {
3825         DEBUG_o(Perl_deb(aTHX_
3826                         "glob_assign_glob clearing PL_stashcache\n"));
3827         /* It's a cache. It will rebuild itself quite happily.
3828            It's a lot of effort to work out exactly which key (or keys)
3829            might be invalidated by the creation of the this file handle.
3830          */
3831         hv_clear(PL_stashcache);
3832     }
3833     return;
3834 }
3835
3836 static void
3837 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3838 {
3839     SV * const sref = SvRV(sstr);
3840     SV *dref;
3841     const int intro = GvINTRO(dstr);
3842     SV **location;
3843     U8 import_flag = 0;
3844     const U32 stype = SvTYPE(sref);
3845
3846     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3847
3848     if (intro) {
3849         GvINTRO_off(dstr);      /* one-shot flag */
3850         GvLINE(dstr) = CopLINE(PL_curcop);
3851         GvEGV(dstr) = MUTABLE_GV(dstr);
3852     }
3853     GvMULTI_on(dstr);
3854     switch (stype) {
3855     case SVt_PVCV:
3856         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3857         import_flag = GVf_IMPORTED_CV;
3858         goto common;
3859     case SVt_PVHV:
3860         location = (SV **) &GvHV(dstr);
3861         import_flag = GVf_IMPORTED_HV;
3862         goto common;
3863     case SVt_PVAV:
3864         location = (SV **) &GvAV(dstr);
3865         import_flag = GVf_IMPORTED_AV;
3866         goto common;
3867     case SVt_PVIO:
3868         location = (SV **) &GvIOp(dstr);
3869         goto common;
3870     case SVt_PVFM:
3871         location = (SV **) &GvFORM(dstr);
3872         goto common;
3873     default:
3874         location = &GvSV(dstr);
3875         import_flag = GVf_IMPORTED_SV;
3876     common:
3877         if (intro) {
3878             if (stype == SVt_PVCV) {
3879                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3880                 if (GvCVGEN(dstr)) {
3881                     SvREFCNT_dec(GvCV(dstr));
3882                     GvCV_set(dstr, NULL);
3883                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3884                 }
3885             }
3886             /* SAVEt_GVSLOT takes more room on the savestack and has more
3887                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3888                leave_scope needs access to the GV so it can reset method
3889                caches.  We must use SAVEt_GVSLOT whenever the type is
3890                SVt_PVCV, even if the stash is anonymous, as the stash may
3891                gain a name somehow before leave_scope. */
3892             if (stype == SVt_PVCV) {
3893                 /* There is no save_pushptrptrptr.  Creating it for this
3894                    one call site would be overkill.  So inline the ss add
3895                    routines here. */
3896                 dSS_ADD;
3897                 SS_ADD_PTR(dstr);
3898                 SS_ADD_PTR(location);
3899                 SS_ADD_PTR(SvREFCNT_inc(*location));
3900                 SS_ADD_UV(SAVEt_GVSLOT);
3901                 SS_ADD_END(4);
3902             }
3903             else SAVEGENERICSV(*location);
3904         }
3905         dref = *location;
3906         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3907             CV* const cv = MUTABLE_CV(*location);
3908             if (cv) {
3909                 if (!GvCVGEN((const GV *)dstr) &&
3910                     (CvROOT(cv) || CvXSUB(cv)) &&
3911                     /* redundant check that avoids creating the extra SV
3912                        most of the time: */
3913                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3914                     {
3915                         SV * const new_const_sv =
3916                             CvCONST((const CV *)sref)
3917                                  ? cv_const_sv((const CV *)sref)
3918                                  : NULL;
3919                         report_redefined_cv(
3920                            sv_2mortal(Perl_newSVpvf(aTHX_
3921                                 "%"HEKf"::%"HEKf,
3922                                 HEKfARG(
3923                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3924                                 ),
3925                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3926                            )),
3927                            cv,
3928                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3929                         );
3930                     }
3931                 if (!intro)
3932                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3933                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3934                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3935                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3936             }
3937             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3938             GvASSUMECV_on(dstr);
3939             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3940         }
3941         *location = SvREFCNT_inc_simple_NN(sref);
3942         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3943             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3944             GvFLAGS(dstr) |= import_flag;
3945         }
3946         if (stype == SVt_PVHV) {
3947             const char * const name = GvNAME((GV*)dstr);
3948             const STRLEN len = GvNAMELEN(dstr);
3949             if (
3950                 (
3951                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3952                 || (len == 1 && name[0] == ':')
3953                 )
3954              && (!dref || HvENAME_get(dref))
3955             ) {
3956                 mro_package_moved(
3957                     (HV *)sref, (HV *)dref,
3958                     (GV *)dstr, 0
3959                 );
3960             }
3961         }
3962         else if (
3963             stype == SVt_PVAV && sref != dref
3964          && strEQ(GvNAME((GV*)dstr), "ISA")
3965          /* The stash may have been detached from the symbol table, so
3966             check its name before doing anything. */
3967          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3968         ) {
3969             MAGIC *mg;
3970             MAGIC * const omg = dref && SvSMAGICAL(dref)
3971                                  ? mg_find(dref, PERL_MAGIC_isa)
3972                                  : NULL;
3973             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3974                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3975                     AV * const ary = newAV();
3976                     av_push(ary, mg->mg_obj); /* takes the refcount */
3977                     mg->mg_obj = (SV *)ary;
3978                 }
3979                 if (omg) {
3980                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3981                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3982                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3983                         while (items--)
3984                             av_push(
3985                              (AV *)mg->mg_obj,
3986                              SvREFCNT_inc_simple_NN(*svp++)
3987                             );
3988                     }
3989                     else
3990                         av_push(
3991                          (AV *)mg->mg_obj,
3992                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3993                         );
3994                 }
3995                 else
3996                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3997             }
3998             else
3999             {
4000                 sv_magic(
4001                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4002                 );
4003                 mg = mg_find(sref, PERL_MAGIC_isa);
4004             }
4005             /* Since the *ISA assignment could have affected more than
4006                one stash, don't call mro_isa_changed_in directly, but let
4007                magic_clearisa do it for us, as it already has the logic for
4008                dealing with globs vs arrays of globs. */
4009             assert(mg);
4010             Perl_magic_clearisa(aTHX_ NULL, mg);
4011         }
4012         else if (stype == SVt_PVIO) {
4013             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4014             /* It's a cache. It will rebuild itself quite happily.
4015                It's a lot of effort to work out exactly which key (or keys)
4016                might be invalidated by the creation of the this file handle.
4017             */
4018             hv_clear(PL_stashcache);
4019         }
4020         break;
4021     }
4022     if (!intro) SvREFCNT_dec(dref);
4023     if (SvTAINTED(sstr))
4024         SvTAINT(dstr);
4025     return;
4026 }
4027
4028 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
4029    hold is 0. */
4030 #if SV_COW_THRESHOLD
4031 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
4032 #else
4033 # define GE_COW_THRESHOLD(len)          1
4034 #endif
4035 #if SV_COWBUF_THRESHOLD
4036 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
4037 #else
4038 # define GE_COWBUF_THRESHOLD(len)       1
4039 #endif
4040
4041 void
4042 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4043 {
4044     dVAR;
4045     U32 sflags;
4046     int dtype;
4047     svtype stype;
4048
4049     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4050
4051     if (sstr == dstr)
4052         return;
4053
4054     if (SvIS_FREED(dstr)) {
4055         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4056                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4057     }
4058     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4059     if (!sstr)
4060         sstr = &PL_sv_undef;
4061     if (SvIS_FREED(sstr)) {
4062         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4063                    (void*)sstr, (void*)dstr);
4064     }
4065     stype = SvTYPE(sstr);
4066     dtype = SvTYPE(dstr);
4067
4068     /* There's a lot of redundancy below but we're going for speed here */
4069
4070     switch (stype) {
4071     case SVt_NULL:
4072       undef_sstr:
4073         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4074             (void)SvOK_off(dstr);
4075             return;
4076         }
4077         break;
4078     case SVt_IV:
4079         if (SvIOK(sstr)) {
4080             switch (dtype) {
4081             case SVt_NULL:
4082                 sv_upgrade(dstr, SVt_IV);
4083                 break;
4084             case SVt_NV:
4085             case SVt_PV:
4086                 sv_upgrade(dstr, SVt_PVIV);
4087                 break;
4088             case SVt_PVGV:
4089             case SVt_PVLV:
4090                 goto end_of_first_switch;
4091             }
4092             (void)SvIOK_only(dstr);
4093             SvIV_set(dstr,  SvIVX(sstr));
4094             if (SvIsUV(sstr))
4095                 SvIsUV_on(dstr);
4096             /* SvTAINTED can only be true if the SV has taint magic, which in
4097                turn means that the SV type is PVMG (or greater). This is the
4098                case statement for SVt_IV, so this cannot be true (whatever gcov
4099                may say).  */
4100             assert(!SvTAINTED(sstr));
4101             return;
4102         }
4103         if (!SvROK(sstr))
4104             goto undef_sstr;
4105         if (dtype < SVt_PV && dtype != SVt_IV)
4106             sv_upgrade(dstr, SVt_IV);
4107         break;
4108
4109     case SVt_NV:
4110         if (SvNOK(sstr)) {
4111             switch (dtype) {
4112             case SVt_NULL:
4113             case SVt_IV:
4114                 sv_upgrade(dstr, SVt_NV);
4115                 break;
4116             case SVt_PV:
4117             case SVt_PVIV:
4118                 sv_upgrade(dstr, SVt_PVNV);
4119                 break;
4120             case SVt_PVGV:
4121             case SVt_PVLV:
4122                 goto end_of_first_switch;
4123             }
4124             SvNV_set(dstr, SvNVX(sstr));
4125             (void)SvNOK_only(dstr);
4126             /* SvTAINTED can only be true if the SV has taint magic, which in
4127                turn means that the SV type is PVMG (or greater). This is the
4128                case statement for SVt_NV, so this cannot be true (whatever gcov
4129                may say).  */
4130             assert(!SvTAINTED(sstr));
4131             return;
4132         }
4133         goto undef_sstr;
4134
4135     case SVt_PV:
4136         if (dtype < SVt_PV)
4137             sv_upgrade(dstr, SVt_PV);
4138         break;
4139     case SVt_PVIV:
4140         if (dtype < SVt_PVIV)
4141             sv_upgrade(dstr, SVt_PVIV);
4142         break;
4143     case SVt_PVNV:
4144         if (dtype < SVt_PVNV)
4145             sv_upgrade(dstr, SVt_PVNV);
4146         break;
4147     default:
4148         {
4149         const char * const type = sv_reftype(sstr,0);
4150         if (PL_op)
4151             /* diag_listed_as: Bizarre copy of %s */
4152             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4153         else
4154             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4155         }
4156         break;
4157
4158     case SVt_REGEXP:
4159       upgregexp:
4160         if (dtype < SVt_REGEXP)
4161         {
4162             if (dtype >= SVt_PV) {
4163                 SvPV_free(dstr);
4164                 SvPV_set(dstr, 0);
4165                 SvLEN_set(dstr, 0);
4166                 SvCUR_set(dstr, 0);
4167             }
4168             sv_upgrade(dstr, SVt_REGEXP);
4169         }
4170         break;
4171
4172         case SVt_INVLIST:
4173     case SVt_PVLV:
4174     case SVt_PVGV:
4175     case SVt_PVMG:
4176         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4177             mg_get(sstr);
4178             if (SvTYPE(sstr) != stype)
4179                 stype = SvTYPE(sstr);
4180         }
4181         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4182                     glob_assign_glob(dstr, sstr, dtype);
4183                     return;
4184         }
4185         if (stype == SVt_PVLV)
4186         {
4187             if (isREGEXP(sstr)) goto upgregexp;
4188             SvUPGRADE(dstr, SVt_PVNV);
4189         }
4190         else
4191             SvUPGRADE(dstr, (svtype)stype);
4192     }
4193  end_of_first_switch:
4194
4195     /* dstr may have been upgraded.  */
4196     dtype = SvTYPE(dstr);
4197     sflags = SvFLAGS(sstr);
4198
4199     if (dtype == SVt_PVCV) {
4200         /* Assigning to a subroutine sets the prototype.  */
4201         if (SvOK(sstr)) {
4202             STRLEN len;
4203             const char *const ptr = SvPV_const(sstr, len);
4204
4205             SvGROW(dstr, len + 1);
4206             Copy(ptr, SvPVX(dstr), len + 1, char);
4207             SvCUR_set(dstr, len);
4208             SvPOK_only(dstr);
4209             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4210             CvAUTOLOAD_off(dstr);
4211         } else {
4212             SvOK_off(dstr);
4213         }
4214     }
4215     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4216         const char * const type = sv_reftype(dstr,0);
4217         if (PL_op)
4218             /* diag_listed_as: Cannot copy to %s */
4219             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4220         else
4221             Perl_croak(aTHX_ "Cannot copy to %s", type);
4222     } else if (sflags & SVf_ROK) {
4223         if (isGV_with_GP(dstr)
4224             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4225             sstr = SvRV(sstr);
4226             if (sstr == dstr) {
4227                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4228                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4229                 {
4230                     GvIMPORTED_on(dstr);
4231                 }
4232                 GvMULTI_on(dstr);
4233                 return;
4234             }
4235             glob_assign_glob(dstr, sstr, dtype);
4236             return;
4237         }
4238
4239         if (dtype >= SVt_PV) {
4240             if (isGV_with_GP(dstr)) {
4241                 glob_assign_ref(dstr, sstr);
4242                 return;
4243             }
4244             if (SvPVX_const(dstr)) {
4245                 SvPV_free(dstr);
4246                 SvLEN_set(dstr, 0);
4247                 SvCUR_set(dstr, 0);
4248             }
4249         }
4250         (void)SvOK_off(dstr);
4251         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4252         SvFLAGS(dstr) |= sflags & SVf_ROK;
4253         assert(!(sflags & SVp_NOK));
4254         assert(!(sflags & SVp_IOK));
4255         assert(!(sflags & SVf_NOK));
4256         assert(!(sflags & SVf_IOK));
4257     }
4258     else if (isGV_with_GP(dstr)) {
4259         if (!(sflags & SVf_OK)) {
4260             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4261                            "Undefined value assigned to typeglob");
4262         }
4263         else {
4264             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4265             if (dstr != (const SV *)gv) {
4266                 const char * const name = GvNAME((const GV *)dstr);
4267                 const STRLEN len = GvNAMELEN(dstr);
4268                 HV *old_stash = NULL;
4269                 bool reset_isa = FALSE;
4270                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4271                  || (len == 1 && name[0] == ':')) {
4272                     /* Set aside the old stash, so we can reset isa caches
4273                        on its subclasses. */
4274                     if((old_stash = GvHV(dstr))) {
4275                         /* Make sure we do not lose it early. */
4276                         SvREFCNT_inc_simple_void_NN(
4277                          sv_2mortal((SV *)old_stash)
4278                         );
4279                     }
4280                     reset_isa = TRUE;
4281                 }
4282
4283                 if (GvGP(dstr))
4284                     gp_free(MUTABLE_GV(dstr));
4285                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4286
4287                 if (reset_isa) {
4288                     HV * const stash = GvHV(dstr);
4289                     if(
4290                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4291                     )
4292                         mro_package_moved(
4293                          stash, old_stash,
4294                          (GV *)dstr, 0
4295                         );
4296                 }
4297             }
4298         }
4299     }
4300     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4301           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4302         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4303     }
4304     else if (sflags & SVp_POK) {
4305         bool isSwipe = 0;
4306         const STRLEN cur = SvCUR(sstr);
4307         const STRLEN len = SvLEN(sstr);
4308
4309         /*
4310          * Check to see if we can just swipe the string.  If so, it's a
4311          * possible small lose on short strings, but a big win on long ones.
4312          * It might even be a win on short strings if SvPVX_const(dstr)
4313          * has to be allocated and SvPVX_const(sstr) has to be freed.
4314          * Likewise if we can set up COW rather than doing an actual copy, we
4315          * drop to the else clause, as the swipe code and the COW setup code
4316          * have much in common.
4317          */
4318
4319         /* Whichever path we take through the next code, we want this true,
4320            and doing it now facilitates the COW check.  */
4321         (void)SvPOK_only(dstr);
4322
4323         if (
4324             /* If we're already COW then this clause is not true, and if COW
4325                is allowed then we drop down to the else and make dest COW 
4326                with us.  If caller hasn't said that we're allowed to COW
4327                shared hash keys then we don't do the COW setup, even if the
4328                source scalar is a shared hash key scalar.  */
4329             (((flags & SV_COW_SHARED_HASH_KEYS)
4330                ? !(sflags & SVf_IsCOW)
4331 #ifdef PERL_NEW_COPY_ON_WRITE
4332                 || (len &&
4333                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4334                    /* If this is a regular (non-hek) COW, only so many COW
4335                       "copies" are possible. */
4336                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4337 #endif
4338                : 1 /* If making a COW copy is forbidden then the behaviour we
4339                        desire is as if the source SV isn't actually already
4340                        COW, even if it is.  So we act as if the source flags
4341                        are not COW, rather than actually testing them.  */
4342               )
4343 #ifndef PERL_ANY_COW
4344              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4345                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4346                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4347                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4348                 but in turn, it's somewhat dead code, never expected to go
4349                 live, but more kept as a placeholder on how to do it better
4350                 in a newer implementation.  */
4351              /* If we are COW and dstr is a suitable target then we drop down
4352                 into the else and make dest a COW of us.  */
4353              || (SvFLAGS(dstr) & SVf_BREAK)
4354 #endif
4355              )
4356             &&
4357             !(isSwipe =
4358 #ifdef PERL_NEW_COPY_ON_WRITE
4359                                 /* slated for free anyway (and not COW)? */
4360                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4361 #else
4362                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4363 #endif
4364                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4365                  (!(flags & SV_NOSTEAL)) &&
4366                                         /* and we're allowed to steal temps */
4367                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4368                  len)             /* and really is a string */
4369 #ifdef PERL_ANY_COW
4370             && ((flags & SV_COW_SHARED_HASH_KEYS)
4371                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4372 # ifdef PERL_OLD_COPY_ON_WRITE
4373                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4374                      && SvTYPE(sstr) >= SVt_PVIV && len
4375 # else
4376                      && !(SvFLAGS(dstr) & SVf_BREAK)
4377                      && !(sflags & SVf_IsCOW)
4378                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4379                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4380 # endif
4381                     ))
4382                 : 1)
4383 #endif
4384             ) {
4385             /* Failed the swipe test, and it's not a shared hash key either.
4386                Have to copy the string.  */
4387             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4388             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4389             SvCUR_set(dstr, cur);
4390             *SvEND(dstr) = '\0';
4391         } else {
4392             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4393                be true in here.  */
4394             /* Either it's a shared hash key, or it's suitable for
4395                copy-on-write or we can swipe the string.  */
4396             if (DEBUG_C_TEST) {
4397                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4398                 sv_dump(sstr);
4399                 sv_dump(dstr);
4400             }
4401 #ifdef PERL_ANY_COW
4402             if (!isSwipe) {
4403                 if (!(sflags & SVf_IsCOW)) {
4404                     SvIsCOW_on(sstr);
4405 # ifdef PERL_OLD_COPY_ON_WRITE
4406                     /* Make the source SV into a loop of 1.
4407                        (about to become 2) */
4408                     SV_COW_NEXT_SV_SET(sstr, sstr);
4409 # else
4410                     CowREFCNT(sstr) = 0;
4411 # endif
4412                 }
4413             }
4414 #endif
4415             /* Initial code is common.  */
4416             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4417                 SvPV_free(dstr);
4418             }
4419
4420             if (!isSwipe) {
4421                 /* making another shared SV.  */
4422 #ifdef PERL_ANY_COW
4423                 if (len) {
4424 # ifdef PERL_OLD_COPY_ON_WRITE
4425                     assert (SvTYPE(dstr) >= SVt_PVIV);
4426                     /* SvIsCOW_normal */
4427                     /* splice us in between source and next-after-source.  */
4428                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4429                     SV_COW_NEXT_SV_SET(sstr, dstr);
4430 # else
4431                     CowREFCNT(sstr)++;
4432 # endif
4433                     SvPV_set(dstr, SvPVX_mutable(sstr));
4434                 } else
4435 #endif
4436                 {
4437                     /* SvIsCOW_shared_hash */
4438                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4439                                           "Copy on write: Sharing hash\n"));
4440
4441                     assert (SvTYPE(dstr) >= SVt_PV);
4442                     SvPV_set(dstr,
4443                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4444                 }
4445                 SvLEN_set(dstr, len);
4446                 SvCUR_set(dstr, cur);
4447                 SvIsCOW_on(dstr);
4448             }
4449             else
4450                 {       /* Passes the swipe test.  */
4451                 SvPV_set(dstr, SvPVX_mutable(sstr));
4452                 SvLEN_set(dstr, SvLEN(sstr));
4453                 SvCUR_set(dstr, SvCUR(sstr));
4454
4455                 SvTEMP_off(dstr);
4456                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4457                 SvPV_set(sstr, NULL);
4458                 SvLEN_set(sstr, 0);
4459                 SvCUR_set(sstr, 0);
4460                 SvTEMP_off(sstr);
4461             }
4462         }
4463         if (sflags & SVp_NOK) {
4464             SvNV_set(dstr, SvNVX(sstr));
4465         }
4466         if (sflags & SVp_IOK) {
4467             SvIV_set(dstr, SvIVX(sstr));
4468             /* Must do this otherwise some other overloaded use of 0x80000000
4469                gets confused. I guess SVpbm_VALID */
4470             if (sflags & SVf_IVisUV)
4471                 SvIsUV_on(dstr);
4472         }
4473         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4474         {
4475             const MAGIC * const smg = SvVSTRING_mg(sstr);
4476             if (smg) {
4477                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4478                          smg->mg_ptr, smg->mg_len);
4479                 SvRMAGICAL_on(dstr);
4480             }
4481         }
4482     }
4483     else if (sflags & (SVp_IOK|SVp_NOK)) {
4484         (void)SvOK_off(dstr);
4485         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4486         if (sflags & SVp_IOK) {
4487             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4488             SvIV_set(dstr, SvIVX(sstr));
4489         }
4490         if (sflags & SVp_NOK) {
4491             SvNV_set(dstr, SvNVX(sstr));
4492         }
4493     }
4494     else {
4495         if (isGV_with_GP(sstr)) {
4496             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4497         }
4498         else
4499             (void)SvOK_off(dstr);
4500     }
4501     if (SvTAINTED(sstr))
4502         SvTAINT(dstr);
4503 }
4504
4505 /*
4506 =for apidoc sv_setsv_mg
4507
4508 Like C<sv_setsv>, but also handles 'set' magic.
4509
4510 =cut
4511 */
4512
4513 void
4514 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4515 {
4516     PERL_ARGS_ASSERT_SV_SETSV_MG;
4517
4518     sv_setsv(dstr,sstr);
4519     SvSETMAGIC(dstr);
4520 }
4521
4522 #ifdef PERL_ANY_COW
4523 # ifdef PERL_OLD_COPY_ON_WRITE
4524 #  define SVt_COW SVt_PVIV
4525 # else
4526 #  define SVt_COW SVt_PV
4527 # endif
4528 SV *
4529 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4530 {
4531     STRLEN cur = SvCUR(sstr);
4532     STRLEN len = SvLEN(sstr);
4533     char *new_pv;
4534
4535     PERL_ARGS_ASSERT_SV_SETSV_COW;
4536
4537     if (DEBUG_C_TEST) {
4538         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4539                       (void*)sstr, (void*)dstr);
4540         sv_dump(sstr);
4541         if (dstr)
4542                     sv_dump(dstr);
4543     }
4544
4545     if (dstr) {
4546         if (SvTHINKFIRST(dstr))
4547             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4548         else if (SvPVX_const(dstr))
4549             Safefree(SvPVX_mutable(dstr));
4550     }
4551     else
4552         new_SV(dstr);
4553     SvUPGRADE(dstr, SVt_COW);
4554
4555     assert (SvPOK(sstr));
4556     assert (SvPOKp(sstr));
4557 # ifdef PERL_OLD_COPY_ON_WRITE
4558     assert (!SvIOK(sstr));
4559     assert (!SvIOKp(sstr));
4560     assert (!SvNOK(sstr));
4561     assert (!SvNOKp(sstr));
4562 # endif
4563
4564     if (SvIsCOW(sstr)) {
4565
4566         if (SvLEN(sstr) == 0) {
4567             /* source is a COW shared hash key.  */
4568             DEBUG_C(PerlIO_printf(Perl_debug_log,
4569                                   "Fast copy on write: Sharing hash\n"));
4570             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4571             goto common_exit;
4572         }
4573 # ifdef PERL_OLD_COPY_ON_WRITE
4574         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4575 # else
4576         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4577         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4578 # endif
4579     } else {
4580         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4581         SvUPGRADE(sstr, SVt_COW);
4582         SvIsCOW_on(sstr);
4583         DEBUG_C(PerlIO_printf(Perl_debug_log,
4584                               "Fast copy on write: Converting sstr to COW\n"));
4585 # ifdef PERL_OLD_COPY_ON_WRITE
4586         SV_COW_NEXT_SV_SET(dstr, sstr);
4587 # else
4588         CowREFCNT(sstr) = 0;    
4589 # endif
4590     }
4591 # ifdef PERL_OLD_COPY_ON_WRITE
4592     SV_COW_NEXT_SV_SET(sstr, dstr);
4593 # else
4594     CowREFCNT(sstr)++;  
4595 # endif
4596     new_pv = SvPVX_mutable(sstr);
4597
4598   common_exit:
4599     SvPV_set(dstr, new_pv);
4600     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4601     if (SvUTF8(sstr))
4602         SvUTF8_on(dstr);
4603     SvLEN_set(dstr, len);
4604     SvCUR_set(dstr, cur);
4605     if (DEBUG_C_TEST) {
4606         sv_dump(dstr);
4607     }
4608     return dstr;
4609 }
4610 #endif
4611
4612 /*
4613 =for apidoc sv_setpvn
4614
4615 Copies a string into an SV.  The C<len> parameter indicates the number of
4616 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4617 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4618
4619 =cut
4620 */
4621
4622 void
4623 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4624 {
4625     dVAR;
4626     char *dptr;
4627
4628     PERL_ARGS_ASSERT_SV_SETPVN;
4629
4630     SV_CHECK_THINKFIRST_COW_DROP(sv);
4631     if (!ptr) {
4632         (void)SvOK_off(sv);
4633         return;
4634     }
4635     else {
4636         /* len is STRLEN which is unsigned, need to copy to signed */
4637         const IV iv = len;
4638         if (iv < 0)
4639             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4640                        IVdf, iv);
4641     }
4642     SvUPGRADE(sv, SVt_PV);
4643
4644     dptr = SvGROW(sv, len + 1);
4645     Move(ptr,dptr,len,char);
4646     dptr[len] = '\0';
4647     SvCUR_set(sv, len);
4648     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4649     SvTAINT(sv);
4650     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4651 }
4652
4653 /*
4654 =for apidoc sv_setpvn_mg
4655
4656 Like C<sv_setpvn>, but also handles 'set' magic.
4657
4658 =cut
4659 */
4660
4661 void
4662 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4663 {
4664     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4665
4666     sv_setpvn(sv,ptr,len);
4667     SvSETMAGIC(sv);
4668 }
4669
4670 /*
4671 =for apidoc sv_setpv
4672
4673 Copies a string into an SV.  The string must be null-terminated.  Does not
4674 handle 'set' magic.  See C<sv_setpv_mg>.
4675
4676 =cut
4677 */
4678
4679 void
4680 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4681 {
4682     dVAR;
4683     STRLEN len;
4684
4685     PERL_ARGS_ASSERT_SV_SETPV;
4686
4687     SV_CHECK_THINKFIRST_COW_DROP(sv);
4688     if (!ptr) {
4689         (void)SvOK_off(sv);
4690         return;
4691     }
4692     len = strlen(ptr);
4693     SvUPGRADE(sv, SVt_PV);
4694
4695     SvGROW(sv, len + 1);
4696     Move(ptr,SvPVX(sv),len+1,char);
4697     SvCUR_set(sv, len);
4698     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4699     SvTAINT(sv);
4700     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4701 }
4702
4703 /*
4704 =for apidoc sv_setpv_mg
4705
4706 Like C<sv_setpv>, but also handles 'set' magic.
4707
4708 =cut
4709 */
4710
4711 void
4712 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4713 {
4714     PERL_ARGS_ASSERT_SV_SETPV_MG;
4715
4716     sv_setpv(sv,ptr);
4717     SvSETMAGIC(sv);
4718 }
4719
4720 void
4721 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4722 {
4723     dVAR;
4724
4725     PERL_ARGS_ASSERT_SV_SETHEK;
4726
4727     if (!hek) {
4728         return;
4729     }
4730
4731     if (HEK_LEN(hek) == HEf_SVKEY) {
4732         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4733         return;
4734     } else {
4735         const int flags = HEK_FLAGS(hek);
4736         if (flags & HVhek_WASUTF8) {
4737             STRLEN utf8_len = HEK_LEN(hek);
4738             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4739             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4740             SvUTF8_on(sv);
4741             return;
4742         } else if (flags & HVhek_UNSHARED) {
4743             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4744             if (HEK_UTF8(hek))
4745                 SvUTF8_on(sv);
4746             else SvUTF8_off(sv);
4747             return;
4748         }
4749         {
4750             SV_CHECK_THINKFIRST_COW_DROP(sv);
4751             SvUPGRADE(sv, SVt_PV);
4752             SvPV_free(sv);
4753             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4754             SvCUR_set(sv, HEK_LEN(hek));
4755             SvLEN_set(sv, 0);
4756             SvIsCOW_on(sv);
4757             SvPOK_on(sv);
4758             if (HEK_UTF8(hek))
4759                 SvUTF8_on(sv);
4760             else SvUTF8_off(sv);
4761             return;
4762         }
4763     }
4764 }
4765
4766
4767 /*
4768 =for apidoc sv_usepvn_flags
4769
4770 Tells an SV to use C<ptr> to find its string value.  Normally the
4771 string is stored inside the SV but sv_usepvn allows the SV to use an
4772 outside string.  The C<ptr> should point to memory that was allocated
4773 by C<malloc>.  It must be the start of a mallocked block
4774 of memory, and not a pointer to the middle of it.  The
4775 string length, C<len>, must be supplied.  By default
4776 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4777 so that pointer should not be freed or used by the programmer after
4778 giving it to sv_usepvn, and neither should any pointers from "behind"
4779 that pointer (e.g. ptr + 1) be used.
4780
4781 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4782 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4783 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4784 C<len>, and already meets the requirements for storing in C<SvPVX>).
4785
4786 =cut
4787 */
4788
4789 void
4790 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4791 {
4792     dVAR;
4793     STRLEN allocate;
4794
4795     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4796
4797     SV_CHECK_THINKFIRST_COW_DROP(sv);
4798     SvUPGRADE(sv, SVt_PV);
4799     if (!ptr) {
4800         (void)SvOK_off(sv);
4801         if (flags & SV_SMAGIC)
4802             SvSETMAGIC(sv);
4803         return;
4804     }
4805     if (SvPVX_const(sv))
4806         SvPV_free(sv);
4807
4808 #ifdef DEBUGGING
4809     if (flags & SV_HAS_TRAILING_NUL)
4810         assert(ptr[len] == '\0');
4811 #endif
4812
4813     allocate = (flags & SV_HAS_TRAILING_NUL)
4814         ? len + 1 :
4815 #ifdef Perl_safesysmalloc_size
4816         len + 1;
4817 #else 
4818         PERL_STRLEN_ROUNDUP(len + 1);
4819 #endif
4820     if (flags & SV_HAS_TRAILING_NUL) {
4821         /* It's long enough - do nothing.
4822            Specifically Perl_newCONSTSUB is relying on this.  */
4823     } else {
4824 #ifdef DEBUGGING
4825         /* Force a move to shake out bugs in callers.  */
4826         char *new_ptr = (char*)safemalloc(allocate);
4827         Copy(ptr, new_ptr, len, char);
4828         PoisonFree(ptr,len,char);
4829         Safefree(ptr);
4830         ptr = new_ptr;
4831 #else
4832         ptr = (char*) saferealloc (ptr, allocate);
4833 #endif
4834     }
4835 #ifdef Perl_safesysmalloc_size
4836     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4837 #else
4838     SvLEN_set(sv, allocate);
4839 #endif
4840     SvCUR_set(sv, len);
4841     SvPV_set(sv, ptr);
4842     if (!(flags & SV_HAS_TRAILING_NUL)) {
4843         ptr[len] = '\0';
4844     }
4845     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4846     SvTAINT(sv);
4847     if (flags & SV_SMAGIC)
4848         SvSETMAGIC(sv);
4849 }
4850
4851 #ifdef PERL_OLD_COPY_ON_WRITE
4852 /* Need to do this *after* making the SV normal, as we need the buffer
4853    pointer to remain valid until after we've copied it.  If we let go too early,
4854    another thread could invalidate it by unsharing last of the same hash key
4855    (which it can do by means other than releasing copy-on-write Svs)
4856    or by changing the other copy-on-write SVs in the loop.  */
4857 STATIC void
4858 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4859 {
4860     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4861
4862     { /* this SV was SvIsCOW_normal(sv) */
4863          /* we need to find the SV pointing to us.  */
4864         SV *current = SV_COW_NEXT_SV(after);
4865
4866         if (current == sv) {
4867             /* The SV we point to points back to us (there were only two of us
4868                in the loop.)
4869                Hence other SV is no longer copy on write either.  */
4870             SvIsCOW_off(after);
4871         } else {
4872             /* We need to follow the pointers around the loop.  */
4873             SV *next;
4874             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4875                 assert (next);
4876                 current = next;
4877                  /* don't loop forever if the structure is bust, and we have
4878                     a pointer into a closed loop.  */
4879                 assert (current != after);
4880                 assert (SvPVX_const(current) == pvx);
4881             }
4882             /* Make the SV before us point to the SV after us.  */
4883             SV_COW_NEXT_SV_SET(current, after);
4884         }
4885     }
4886 }
4887 #endif
4888 /*
4889 =for apidoc sv_force_normal_flags
4890
4891 Undo various types of fakery on an SV, where fakery means
4892 "more than" a string: if the PV is a shared string, make
4893 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4894 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4895 we do the copy, and is also used locally; if this is a
4896 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4897 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4898 SvPOK_off rather than making a copy.  (Used where this
4899 scalar is about to be set to some other value.)  In addition,
4900 the C<flags> parameter gets passed to C<sv_unref_flags()>
4901 when unreffing.  C<sv_force_normal> calls this function
4902 with flags set to 0.
4903
4904 =cut
4905 */
4906
4907 static void
4908 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
4909 {
4910     dVAR;
4911
4912     assert(SvIsCOW(sv));
4913     {
4914 #ifdef PERL_ANY_COW
4915         const char * const pvx = SvPVX_const(sv);
4916         const STRLEN len = SvLEN(sv);
4917         const STRLEN cur = SvCUR(sv);
4918 # ifdef PERL_OLD_COPY_ON_WRITE
4919         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4920            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4921            we'll fail an assertion.  */
4922         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4923 # endif
4924
4925         if (DEBUG_C_TEST) {
4926                 PerlIO_printf(Perl_debug_log,
4927                               "Copy on write: Force normal %ld\n",
4928                               (long) flags);
4929                 sv_dump(sv);
4930         }
4931         SvIsCOW_off(sv);
4932 # ifdef PERL_NEW_COPY_ON_WRITE
4933         if (len && CowREFCNT(sv) == 0)
4934             /* We own the buffer ourselves. */
4935             NOOP;
4936         else
4937 # endif
4938         {
4939                 
4940             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4941 # ifdef PERL_NEW_COPY_ON_WRITE
4942             /* Must do this first, since the macro uses SvPVX. */
4943             if (len) CowREFCNT(sv)--;
4944 # endif
4945             SvPV_set(sv, NULL);
4946             SvLEN_set(sv, 0);
4947             if (flags & SV_COW_DROP_PV) {
4948                 /* OK, so we don't need to copy our buffer.  */
4949                 SvPOK_off(sv);
4950             } else {
4951                 SvGROW(sv, cur + 1);
4952                 Move(pvx,SvPVX(sv),cur,char);
4953                 SvCUR_set(sv, cur);
4954                 *SvEND(sv) = '\0';
4955             }
4956             if (len) {
4957 # ifdef PERL_OLD_COPY_ON_WRITE
4958                 sv_release_COW(sv, pvx, next);
4959 # endif
4960             } else {
4961                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4962             }
4963             if (DEBUG_C_TEST) {
4964                 sv_dump(sv);
4965             }
4966         }
4967 #else
4968             const char * const pvx = SvPVX_const(sv);
4969             const STRLEN len = SvCUR(sv);
4970             SvIsCOW_off(sv);
4971             SvPV_set(sv, NULL);
4972             SvLEN_set(sv, 0);
4973             if (flags & SV_COW_DROP_PV) {
4974                 /* OK, so we don't need to copy our buffer.  */
4975                 SvPOK_off(sv);
4976             } else {
4977                 SvGROW(sv, len + 1);
4978                 Move(pvx,SvPVX(sv),len,char);
4979                 *SvEND(sv) = '\0';
4980             }
4981             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4982 #endif
4983     }
4984 }
4985
4986 void
4987 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4988 {
4989     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4990
4991     if (SvREADONLY(sv))
4992         Perl_croak_no_modify();
4993     else if (SvIsCOW(sv))
4994         S_sv_uncow(aTHX_ sv, flags);
4995     if (SvROK(sv))
4996         sv_unref_flags(sv, flags);
4997     else if (SvFAKE(sv) && isGV_with_GP(sv))
4998         sv_unglob(sv, flags);
4999     else if (SvFAKE(sv) && isREGEXP(sv)) {
5000         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5001            to sv_unglob. We only need it here, so inline it.  */
5002         const bool islv = SvTYPE(sv) == SVt_PVLV;
5003         const svtype new_type =
5004           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5005         SV *const temp = newSV_type(new_type);
5006         regexp *const temp_p = ReANY((REGEXP *)sv);
5007
5008         if (new_type == SVt_PVMG) {
5009             SvMAGIC_set(temp, SvMAGIC(sv));
5010             SvMAGIC_set(sv, NULL);
5011             SvSTASH_set(temp, SvSTASH(sv));
5012             SvSTASH_set(sv, NULL);
5013         }
5014         if (!islv) SvCUR_set(temp, SvCUR(sv));
5015         /* Remember that SvPVX is in the head, not the body.  But
5016            RX_WRAPPED is in the body. */
5017         assert(ReANY((REGEXP *)sv)->mother_re);
5018         /* Their buffer is already owned by someone else. */
5019         if (flags & SV_COW_DROP_PV) {
5020             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5021                zeroed body.  For SVt_PVLV, it should have been set to 0
5022                before turning into a regexp. */
5023             assert(!SvLEN(islv ? sv : temp));
5024             sv->sv_u.svu_pv = 0;
5025         }
5026         else {
5027             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5028             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5029             SvPOK_on(sv);
5030         }
5031
5032         /* Now swap the rest of the bodies. */
5033
5034         SvFAKE_off(sv);
5035         if (!islv) {
5036             SvFLAGS(sv) &= ~SVTYPEMASK;
5037             SvFLAGS(sv) |= new_type;
5038             SvANY(sv) = SvANY(temp);
5039         }
5040
5041         SvFLAGS(temp) &= ~(SVTYPEMASK);
5042         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5043         SvANY(temp) = temp_p;
5044         temp->sv_u.svu_rx = (regexp *)temp_p;
5045
5046         SvREFCNT_dec_NN(temp);
5047     }
5048     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5049 }
5050
5051 /*
5052 =for apidoc sv_chop
5053
5054 Efficient removal of characters from the beginning of the string buffer.
5055 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5056 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5057 character of the adjusted string.  Uses the "OOK hack".  On return, only
5058 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5059
5060 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5061 refer to the same chunk of data.
5062
5063 The unfortunate similarity of this function's name to that of Perl's C<chop>
5064 operator is strictly coincidental.  This function works from the left;
5065 C<chop> works from the right.
5066
5067 =cut
5068 */
5069
5070 void
5071 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5072 {
5073     STRLEN delta;
5074     STRLEN old_delta;
5075     U8 *p;
5076 #ifdef DEBUGGING
5077     const U8 *evacp;
5078     STRLEN evacn;
5079 #endif
5080     STRLEN max_delta;
5081
5082     PERL_ARGS_ASSERT_SV_CHOP;
5083
5084     if (!ptr || !SvPOKp(sv))
5085         return;
5086     delta = ptr - SvPVX_const(sv);
5087     if (!delta) {
5088         /* Nothing to do.  */
5089         return;
5090     }
5091     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5092     if (delta > max_delta)
5093         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5094                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5095     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5096     SV_CHECK_THINKFIRST(sv);
5097     SvPOK_only_UTF8(sv);
5098
5099     if (!SvOOK(sv)) {
5100         if (!SvLEN(sv)) { /* make copy of shared string */
5101             const char *pvx = SvPVX_const(sv);
5102             const STRLEN len = SvCUR(sv);
5103             SvGROW(sv, len + 1);
5104             Move(pvx,SvPVX(sv),len,char);
5105             *SvEND(sv) = '\0';
5106         }
5107         SvOOK_on(sv);
5108         old_delta = 0;
5109     } else {
5110         SvOOK_offset(sv, old_delta);
5111     }
5112     SvLEN_set(sv, SvLEN(sv) - delta);
5113     SvCUR_set(sv, SvCUR(sv) - delta);
5114     SvPV_set(sv, SvPVX(sv) + delta);
5115
5116     p = (U8 *)SvPVX_const(sv);
5117
5118 #ifdef DEBUGGING
5119     /* how many bytes were evacuated?  we will fill them with sentinel
5120        bytes, except for the part holding the new offset of course. */
5121     evacn = delta;
5122     if (old_delta)
5123         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5124     assert(evacn);
5125     assert(evacn <= delta + old_delta);
5126     evacp = p - evacn;
5127 #endif
5128
5129     /* This sets 'delta' to the accumulated value of all deltas so far */
5130     delta += old_delta;
5131     assert(delta);
5132
5133     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5134      * the string; otherwise store a 0 byte there and store 'delta' just prior
5135      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5136      * portion of the chopped part of the string */
5137     if (delta < 0x100) {
5138         *--p = (U8) delta;
5139     } else {
5140         *--p = 0;
5141         p -= sizeof(STRLEN);
5142         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5143     }
5144
5145 #ifdef DEBUGGING
5146     /* Fill the preceding buffer with sentinals to verify that no-one is
5147        using it.  */
5148     while (p > evacp) {
5149         --p;
5150         *p = (U8)PTR2UV(p);
5151     }
5152 #endif
5153 }
5154
5155 /*
5156 =for apidoc sv_catpvn
5157
5158 Concatenates the string onto the end of the string which is in the SV.  The
5159 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5160 status set, then the bytes appended should be valid UTF-8.
5161 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5162
5163 =for apidoc sv_catpvn_flags
5164
5165 Concatenates the string onto the end of the string which is in the SV.  The
5166 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5167 status set, then the bytes appended should be valid UTF-8.
5168 If C<flags> has the C<SV_SMAGIC> bit set, will
5169 C<mg_set> on C<dsv> afterwards if appropriate.
5170 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5171 in terms of this function.
5172
5173 =cut
5174 */
5175
5176 void
5177 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5178 {
5179     dVAR;
5180     STRLEN dlen;
5181     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5182
5183     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5184     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5185
5186     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5187       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5188          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5189          dlen = SvCUR(dsv);
5190       }
5191       else SvGROW(dsv, dlen + slen + 1);
5192       if (sstr == dstr)
5193         sstr = SvPVX_const(dsv);
5194       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5195       SvCUR_set(dsv, SvCUR(dsv) + slen);
5196     }
5197     else {
5198         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5199         const char * const send = sstr + slen;
5200         U8 *d;
5201
5202         /* Something this code does not account for, which I think is
5203            impossible; it would require the same pv to be treated as
5204            bytes *and* utf8, which would indicate a bug elsewhere. */
5205         assert(sstr != dstr);
5206
5207         SvGROW(dsv, dlen + slen * 2 + 1);
5208         d = (U8 *)SvPVX(dsv) + dlen;
5209
5210         while (sstr < send) {
5211             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5212             if (UNI_IS_INVARIANT(uv))
5213                 *d++ = (U8)UTF_TO_NATIVE(uv);
5214             else {
5215                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5216                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5217             }
5218         }
5219         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5220     }
5221     *SvEND(dsv) = '\0';
5222     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5223     SvTAINT(dsv);
5224     if (flags & SV_SMAGIC)
5225         SvSETMAGIC(dsv);
5226 }
5227
5228 /*
5229 =for apidoc sv_catsv
5230
5231 Concatenates the string from SV C<ssv> onto the end of the string in SV
5232 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5233 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5234 C<sv_catsv_nomg>.
5235
5236 =for apidoc sv_catsv_flags
5237
5238 Concatenates the string from SV C<ssv> onto the end of the string in SV
5239 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5240 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5241 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5242 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5243 and C<sv_catsv_mg> are implemented in terms of this function.
5244
5245 =cut */
5246
5247 void
5248 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5249 {
5250     dVAR;
5251  
5252     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5253
5254     if (ssv) {
5255         STRLEN slen;
5256         const char *spv = SvPV_flags_const(ssv, slen, flags);
5257         if (spv) {
5258             if (flags & SV_GMAGIC)
5259                 SvGETMAGIC(dsv);
5260             sv_catpvn_flags(dsv, spv, slen,
5261                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5262             if (flags & SV_SMAGIC)
5263                 SvSETMAGIC(dsv);
5264         }
5265     }
5266 }
5267
5268 /*
5269 =for apidoc sv_catpv
5270
5271 Concatenates the string onto the end of the string which is in the SV.
5272 If the SV has the UTF-8 status set, then the bytes appended should be
5273 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5274
5275 =cut */
5276
5277 void
5278 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5279 {
5280     dVAR;
5281     STRLEN len;
5282     STRLEN tlen;
5283     char *junk;
5284
5285     PERL_ARGS_ASSERT_SV_CATPV;
5286
5287     if (!ptr)
5288         return;
5289     junk = SvPV_force(sv, tlen);
5290     len = strlen(ptr);
5291     SvGROW(sv, tlen + len + 1);
5292     if (ptr == junk)
5293         ptr = SvPVX_const(sv);
5294     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5295     SvCUR_set(sv, SvCUR(sv) + len);
5296     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5297     SvTAINT(sv);
5298 }
5299
5300 /*
5301 =for apidoc sv_catpv_flags
5302
5303 Concatenates the string onto the end of the string which is in the SV.
5304 If the SV has the UTF-8 status set, then the bytes appended should
5305 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5306 on the modified SV if appropriate.
5307
5308 =cut
5309 */
5310
5311 void
5312 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5313 {
5314     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5315     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5316 }
5317
5318 /*
5319 =for apidoc sv_catpv_mg
5320
5321 Like C<sv_catpv>, but also handles 'set' magic.
5322
5323 =cut
5324 */
5325
5326 void
5327 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5328 {
5329     PERL_ARGS_ASSERT_SV_CATPV_MG;
5330
5331     sv_catpv(sv,ptr);
5332     SvSETMAGIC(sv);
5333 }
5334
5335 /*
5336 =for apidoc newSV
5337
5338 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5339 bytes of preallocated string space the SV should have.  An extra byte for a
5340 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5341 space is allocated.)  The reference count for the new SV is set to 1.
5342
5343 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5344 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5345 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5346 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5347 modules supporting older perls.
5348
5349 =cut
5350 */
5351
5352 SV *
5353 Perl_newSV(pTHX_ const STRLEN len)
5354 {
5355     dVAR;
5356     SV *sv;
5357
5358     new_SV(sv);
5359     if (len) {
5360         sv_upgrade(sv, SVt_PV);
5361         SvGROW(sv, len + 1);
5362     }
5363     return sv;
5364 }
5365 /*
5366 =for apidoc sv_magicext
5367
5368 Adds magic to an SV, upgrading it if necessary.  Applies the
5369 supplied vtable and returns a pointer to the magic added.
5370
5371 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5372 In particular, you can add magic to SvREADONLY SVs, and add more than
5373 one instance of the same 'how'.
5374
5375 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5376 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5377 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5378 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5379
5380 (This is now used as a subroutine by C<sv_magic>.)
5381
5382 =cut
5383 */
5384 MAGIC * 
5385 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5386                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5387 {
5388     dVAR;
5389     MAGIC* mg;
5390
5391     PERL_ARGS_ASSERT_SV_MAGICEXT;
5392
5393     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5394
5395     SvUPGRADE(sv, SVt_PVMG);
5396     Newxz(mg, 1, MAGIC);
5397     mg->mg_moremagic = SvMAGIC(sv);
5398     SvMAGIC_set(sv, mg);
5399
5400     /* Sometimes a magic contains a reference loop, where the sv and
5401        object refer to each other.  To prevent a reference loop that
5402        would prevent such objects being freed, we look for such loops
5403        and if we find one we avoid incrementing the object refcount.
5404
5405        Note we cannot do this to avoid self-tie loops as intervening RV must
5406        have its REFCNT incremented to keep it in existence.
5407
5408     */
5409     if (!obj || obj == sv ||
5410         how == PERL_MAGIC_arylen ||
5411         how == PERL_MAGIC_symtab ||
5412         (SvTYPE(obj) == SVt_PVGV &&
5413             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5414              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5415              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5416     {
5417         mg->mg_obj = obj;
5418     }
5419     else {
5420         mg->mg_obj = SvREFCNT_inc_simple(obj);
5421         mg->mg_flags |= MGf_REFCOUNTED;
5422     }
5423
5424     /* Normal self-ties simply pass a null object, and instead of
5425        using mg_obj directly, use the SvTIED_obj macro to produce a
5426        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5427        with an RV obj pointing to the glob containing the PVIO.  In
5428        this case, to avoid a reference loop, we need to weaken the
5429        reference.
5430     */
5431
5432     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5433         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5434     {
5435       sv_rvweaken(obj);
5436     }
5437
5438     mg->mg_type = how;
5439     mg->mg_len = namlen;
5440     if (name) {
5441         if (namlen > 0)
5442             mg->mg_ptr = savepvn(name, namlen);
5443         else if (namlen == HEf_SVKEY) {
5444             /* Yes, this is casting away const. This is only for the case of
5445                HEf_SVKEY. I think we need to document this aberation of the
5446                constness of the API, rather than making name non-const, as
5447                that change propagating outwards a long way.  */
5448             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5449         } else
5450             mg->mg_ptr = (char *) name;
5451     }
5452     mg->mg_virtual = (MGVTBL *) vtable;
5453
5454     mg_magical(sv);
5455     return mg;
5456 }
5457
5458 MAGIC *
5459 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5460 {
5461     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5462     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5463         /* This sv is only a delegate.  //g magic must be attached to
5464            its target. */
5465         vivify_defelem(sv);
5466         sv = LvTARG(sv);
5467     }
5468 #ifdef PERL_OLD_COPY_ON_WRITE
5469     if (SvIsCOW(sv))
5470         sv_force_normal_flags(sv, 0);
5471 #endif
5472     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5473                        &PL_vtbl_mglob, 0, 0);
5474 }
5475
5476 /*
5477 =for apidoc sv_magic
5478
5479 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5480 necessary, then adds a new magic item of type C<how> to the head of the
5481 magic list.
5482
5483 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5484 handling of the C<name> and C<namlen> arguments.
5485
5486 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5487 to add more than one instance of the same 'how'.
5488
5489 =cut
5490 */
5491
5492 void
5493 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5494              const char *const name, const I32 namlen)
5495 {
5496     dVAR;
5497     const MGVTBL *vtable;
5498     MAGIC* mg;
5499     unsigned int flags;
5500     unsigned int vtable_index;
5501
5502     PERL_ARGS_ASSERT_SV_MAGIC;
5503
5504     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5505         || ((flags = PL_magic_data[how]),
5506             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5507             > magic_vtable_max))
5508         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5509
5510     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5511        Useful for attaching extension internal data to perl vars.
5512        Note that multiple extensions may clash if magical scalars
5513        etc holding private data from one are passed to another. */
5514
5515     vtable = (vtable_index == magic_vtable_max)
5516         ? NULL : PL_magic_vtables + vtable_index;
5517
5518 #ifdef PERL_OLD_COPY_ON_WRITE
5519     if (SvIsCOW(sv))
5520         sv_force_normal_flags(sv, 0);
5521 #endif
5522     if (SvREADONLY(sv)) {
5523         if (
5524             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5525            )
5526         {
5527             Perl_croak_no_modify();
5528         }
5529     }
5530     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5531         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5532             /* sv_magic() refuses to add a magic of the same 'how' as an
5533                existing one
5534              */
5535             if (how == PERL_MAGIC_taint)
5536                 mg->mg_len |= 1;
5537             return;
5538         }
5539     }
5540
5541     /* Rest of work is done else where */
5542     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5543
5544     switch (how) {
5545     case PERL_MAGIC_taint:
5546         mg->mg_len = 1;
5547         break;
5548     case PERL_MAGIC_ext:
5549     case PERL_MAGIC_dbfile:
5550         SvRMAGICAL_on(sv);
5551         break;
5552     }
5553 }
5554
5555 static int
5556 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5557 {
5558     MAGIC* mg;
5559     MAGIC** mgp;
5560
5561     assert(flags <= 1);
5562
5563     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5564         return 0;
5565     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5566     for (mg = *mgp; mg; mg = *mgp) {
5567         const MGVTBL* const virt = mg->mg_virtual;
5568         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5569             *mgp = mg->mg_moremagic;
5570             if (virt && virt->svt_free)
5571                 virt->svt_free(aTHX_ sv, mg);
5572             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5573                 if (mg->mg_len > 0)
5574                     Safefree(mg->mg_ptr);
5575                 else if (mg->mg_len == HEf_SVKEY)
5576                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5577                 else if (mg->mg_type == PERL_MAGIC_utf8)
5578                     Safefree(mg->mg_ptr);
5579             }
5580             if (mg->mg_flags & MGf_REFCOUNTED)
5581                 SvREFCNT_dec(mg->mg_obj);
5582             Safefree(mg);
5583         }
5584         else
5585             mgp = &mg->mg_moremagic;
5586     }
5587     if (SvMAGIC(sv)) {
5588         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5589             mg_magical(sv);     /*    else fix the flags now */
5590     }
5591     else {
5592         SvMAGICAL_off(sv);
5593         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5594     }
5595     return 0;
5596 }
5597
5598 /*
5599 =for apidoc sv_unmagic
5600
5601 Removes all magic of type C<type> from an SV.
5602
5603 =cut
5604 */
5605
5606 int
5607 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5608 {
5609     PERL_ARGS_ASSERT_SV_UNMAGIC;
5610     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5611 }
5612
5613 /*
5614 =for apidoc sv_unmagicext
5615
5616 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5617
5618 =cut
5619 */
5620
5621 int
5622 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5623 {
5624     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5625     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5626 }
5627
5628 /*
5629 =for apidoc sv_rvweaken
5630
5631 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5632 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5633 push a back-reference to this RV onto the array of backreferences
5634 associated with that magic.  If the RV is magical, set magic will be
5635 called after the RV is cleared.
5636
5637 =cut
5638 */
5639
5640 SV *
5641 Perl_sv_rvweaken(pTHX_ SV *const sv)
5642 {
5643     SV *tsv;
5644
5645     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5646
5647     if (!SvOK(sv))  /* let undefs pass */
5648         return sv;
5649     if (!SvROK(sv))
5650         Perl_croak(aTHX_ "Can't weaken a nonreference");
5651     else if (SvWEAKREF(sv)) {
5652         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5653         return sv;
5654     }
5655     else if (SvREADONLY(sv)) croak_no_modify();
5656     tsv = SvRV(sv);
5657     Perl_sv_add_backref(aTHX_ tsv, sv);
5658     SvWEAKREF_on(sv);
5659     SvREFCNT_dec_NN(tsv);
5660     return sv;
5661 }
5662
5663 /* Give tsv backref magic if it hasn't already got it, then push a
5664  * back-reference to sv onto the array associated with the backref magic.
5665  *
5666  * As an optimisation, if there's only one backref and it's not an AV,
5667  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5668  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5669  * active.)
5670  */
5671
5672 /* A discussion about the backreferences array and its refcount:
5673  *
5674  * The AV holding the backreferences is pointed to either as the mg_obj of
5675  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5676  * xhv_backreferences field. The array is created with a refcount
5677  * of 2. This means that if during global destruction the array gets
5678  * picked on before its parent to have its refcount decremented by the
5679  * random zapper, it won't actually be freed, meaning it's still there for
5680  * when its parent gets freed.
5681  *
5682  * When the parent SV is freed, the extra ref is killed by
5683  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5684  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5685  *
5686  * When a single backref SV is stored directly, it is not reference
5687  * counted.
5688  */
5689
5690 void
5691 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5692 {
5693     dVAR;
5694     SV **svp;
5695     AV *av = NULL;
5696     MAGIC *mg = NULL;
5697
5698     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5699
5700     /* find slot to store array or singleton backref */
5701
5702     if (SvTYPE(tsv) == SVt_PVHV) {
5703         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5704     } else {
5705         if (! ((mg =
5706             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5707         {
5708             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5709             mg = mg_find(tsv, PERL_MAGIC_backref);
5710         }
5711         svp = &(mg->mg_obj);
5712     }
5713
5714     /* create or retrieve the array */
5715
5716     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5717         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5718     ) {
5719         /* create array */
5720         av = newAV();
5721         AvREAL_off(av);
5722         SvREFCNT_inc_simple_void(av);
5723         /* av now has a refcnt of 2; see discussion above */
5724         if (*svp) {
5725             /* move single existing backref to the array */
5726             av_extend(av, 1);
5727             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5728         }
5729         *svp = (SV*)av;
5730         if (mg)
5731             mg->mg_flags |= MGf_REFCOUNTED;
5732     }
5733     else
5734         av = MUTABLE_AV(*svp);
5735
5736     if (!av) {
5737         /* optimisation: store single backref directly in HvAUX or mg_obj */
5738         *svp = sv;
5739         return;
5740     }
5741     /* push new backref */
5742     assert(SvTYPE(av) == SVt_PVAV);
5743     if (AvFILLp(av) >= AvMAX(av)) {
5744         av_extend(av, AvFILLp(av)+1);
5745     }
5746     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5747 }
5748
5749 /* delete a back-reference to ourselves from the backref magic associated
5750  * with the SV we point to.
5751  */
5752
5753 void
5754 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5755 {
5756     dVAR;
5757     SV **svp = NULL;
5758
5759     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5760
5761     if (SvTYPE(tsv) == SVt_PVHV) {
5762         if (SvOOK(tsv))
5763             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5764     }
5765     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5766         /* It's possible for the the last (strong) reference to tsv to have
5767            become freed *before* the last thing holding a weak reference.
5768            If both survive longer than the backreferences array, then when
5769            the referent's reference count drops to 0 and it is freed, it's
5770            not able to chase the backreferences, so they aren't NULLed.
5771
5772            For example, a CV holds a weak reference to its stash. If both the
5773            CV and the stash survive longer than the backreferences array,
5774            and the CV gets picked for the SvBREAK() treatment first,
5775            *and* it turns out that the stash is only being kept alive because
5776            of an our variable in the pad of the CV, then midway during CV
5777            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5778            It ends up pointing to the freed HV. Hence it's chased in here, and
5779            if this block wasn't here, it would hit the !svp panic just below.
5780
5781            I don't believe that "better" destruction ordering is going to help
5782            here - during global destruction there's always going to be the
5783            chance that something goes out of order. We've tried to make it
5784            foolproof before, and it only resulted in evolutionary pressure on
5785            fools. Which made us look foolish for our hubris. :-(
5786         */
5787         return;
5788     }
5789     else {
5790         MAGIC *const mg
5791             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5792         svp =  mg ? &(mg->mg_obj) : NULL;
5793     }
5794
5795     if (!svp)
5796         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5797     if (!*svp) {
5798         /* It's possible that sv is being freed recursively part way through the
5799            freeing of tsv. If this happens, the backreferences array of tsv has
5800            already been freed, and so svp will be NULL. If this is the case,
5801            we should not panic. Instead, nothing needs doing, so return.  */
5802         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5803             return;
5804         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5805                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5806     }
5807
5808     if (SvTYPE(*svp) == SVt_PVAV) {
5809 #ifdef DEBUGGING
5810         int count = 1;
5811 #endif
5812         AV * const av = (AV*)*svp;
5813         SSize_t fill;
5814         assert(!SvIS_FREED(av));
5815         fill = AvFILLp(av);
5816         assert(fill > -1);
5817         svp = AvARRAY(av);
5818         /* for an SV with N weak references to it, if all those
5819          * weak refs are deleted, then sv_del_backref will be called
5820          * N times and O(N^2) compares will be done within the backref
5821          * array. To ameliorate this potential slowness, we:
5822          * 1) make sure this code is as tight as possible;
5823          * 2) when looking for SV, look for it at both the head and tail of the
5824          *    array first before searching the rest, since some create/destroy
5825          *    patterns will cause the backrefs to be freed in order.
5826          */
5827         if (*svp == sv) {
5828             AvARRAY(av)++;
5829             AvMAX(av)--;
5830         }
5831         else {
5832             SV **p = &svp[fill];
5833             SV *const topsv = *p;
5834             if (topsv != sv) {
5835 #ifdef DEBUGGING
5836                 count = 0;
5837 #endif
5838                 while (--p > svp) {
5839                     if (*p == sv) {
5840                         /* We weren't the last entry.
5841                            An unordered list has this property that you
5842                            can take the last element off the end to fill
5843                            the hole, and it's still an unordered list :-)
5844                         */
5845                         *p = topsv;
5846 #ifdef DEBUGGING
5847                         count++;
5848 #else
5849                         break; /* should only be one */
5850 #endif
5851                     }
5852                 }
5853             }
5854         }
5855         assert(count ==1);
5856         AvFILLp(av) = fill-1;
5857     }
5858     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5859         /* freed AV; skip */
5860     }
5861     else {
5862         /* optimisation: only a single backref, stored directly */
5863         if (*svp != sv)
5864             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5865         *svp = NULL;
5866     }
5867
5868 }
5869
5870 void
5871 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5872 {
5873     SV **svp;
5874     SV **last;
5875     bool is_array;
5876
5877     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5878
5879     if (!av)
5880         return;
5881
5882     /* after multiple passes through Perl_sv_clean_all() for a thingy
5883      * that has badly leaked, the backref array may have gotten freed,
5884      * since we only protect it against 1 round of cleanup */
5885     if (SvIS_FREED(av)) {
5886         if (PL_in_clean_all) /* All is fair */
5887             return;
5888         Perl_croak(aTHX_
5889                    "panic: magic_killbackrefs (freed backref AV/SV)");
5890     }
5891
5892
5893     is_array = (SvTYPE(av) == SVt_PVAV);
5894     if (is_array) {
5895         assert(!SvIS_FREED(av));
5896         svp = AvARRAY(av);
5897         if (svp)
5898             last = svp + AvFILLp(av);
5899     }
5900     else {
5901         /* optimisation: only a single backref, stored directly */
5902         svp = (SV**)&av;
5903         last = svp;
5904     }
5905
5906     if (svp) {
5907         while (svp <= last) {
5908             if (*svp) {
5909                 SV *const referrer = *svp;
5910                 if (SvWEAKREF(referrer)) {
5911                     /* XXX Should we check that it hasn't changed? */
5912                     assert(SvROK(referrer));
5913                     SvRV_set(referrer, 0);
5914                     SvOK_off(referrer);
5915                     SvWEAKREF_off(referrer);
5916                     SvSETMAGIC(referrer);
5917                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5918                            SvTYPE(referrer) == SVt_PVLV) {
5919                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5920                     /* You lookin' at me?  */
5921                     assert(GvSTASH(referrer));
5922                     assert(GvSTASH(referrer) == (const HV *)sv);
5923                     GvSTASH(referrer) = 0;
5924                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5925                            SvTYPE(referrer) == SVt_PVFM) {
5926                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5927                         /* You lookin' at me?  */
5928                         assert(CvSTASH(referrer));
5929                         assert(CvSTASH(referrer) == (const HV *)sv);
5930                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5931                     }
5932                     else {
5933                         assert(SvTYPE(sv) == SVt_PVGV);
5934                         /* You lookin' at me?  */
5935                         assert(CvGV(referrer));
5936                         assert(CvGV(referrer) == (const GV *)sv);
5937                         anonymise_cv_maybe(MUTABLE_GV(sv),
5938                                                 MUTABLE_CV(referrer));
5939                     }
5940
5941                 } else {
5942                     Perl_croak(aTHX_
5943                                "panic: magic_killbackrefs (flags=%"UVxf")",
5944                                (UV)SvFLAGS(referrer));
5945                 }
5946
5947                 if (is_array)
5948                     *svp = NULL;
5949             }
5950             svp++;
5951         }
5952     }
5953     if (is_array) {
5954         AvFILLp(av) = -1;
5955         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5956     }
5957     return;
5958 }
5959
5960 /*
5961 =for apidoc sv_insert
5962
5963 Inserts a string at the specified offset/length within the SV.  Similar to
5964 the Perl substr() function.  Handles get magic.
5965
5966 =for apidoc sv_insert_flags
5967
5968 Same as C<sv_insert>, but the extra C<flags> are passed to the
5969 C<SvPV_force_flags> that applies to C<bigstr>.
5970
5971 =cut
5972 */
5973
5974 void
5975 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5976 {
5977     dVAR;
5978     char *big;
5979     char *mid;
5980     char *midend;
5981     char *bigend;
5982     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5983     STRLEN curlen;
5984
5985     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5986
5987     if (!bigstr)
5988         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5989     SvPV_force_flags(bigstr, curlen, flags);
5990     (void)SvPOK_only_UTF8(bigstr);
5991     if (offset + len > curlen) {
5992         SvGROW(bigstr, offset+len+1);
5993         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5994         SvCUR_set(bigstr, offset+len);
5995     }
5996
5997     SvTAINT(bigstr);
5998     i = littlelen - len;
5999     if (i > 0) {                        /* string might grow */
6000         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6001         mid = big + offset + len;
6002         midend = bigend = big + SvCUR(bigstr);
6003         bigend += i;
6004         *bigend = '\0';
6005         while (midend > mid)            /* shove everything down */
6006             *--bigend = *--midend;
6007         Move(little,big+offset,littlelen,char);
6008         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6009         SvSETMAGIC(bigstr);
6010         return;
6011     }
6012     else if (i == 0) {
6013         Move(little,SvPVX(bigstr)+offset,len,char);
6014         SvSETMAGIC(bigstr);
6015         return;
6016     }
6017
6018     big = SvPVX(bigstr);
6019     mid = big + offset;
6020     midend = mid + len;
6021     bigend = big + SvCUR(bigstr);
6022
6023     if (midend > bigend)
6024         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6025                    midend, bigend);
6026
6027     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6028         if (littlelen) {
6029             Move(little, mid, littlelen,char);
6030             mid += littlelen;
6031         }
6032         i = bigend - midend;
6033         if (i > 0) {
6034             Move(midend, mid, i,char);
6035             mid += i;
6036         }
6037         *mid = '\0';
6038         SvCUR_set(bigstr, mid - big);
6039     }
6040     else if ((i = mid - big)) { /* faster from front */
6041         midend -= littlelen;
6042         mid = midend;
6043         Move(big, midend - i, i, char);
6044         sv_chop(bigstr,midend-i);
6045         if (littlelen)
6046             Move(little, mid, littlelen,char);
6047     }
6048     else if (littlelen) {
6049         midend -= littlelen;
6050         sv_chop(bigstr,midend);
6051         Move(little,midend,littlelen,char);
6052     }
6053     else {
6054         sv_chop(bigstr,midend);
6055     }
6056     SvSETMAGIC(bigstr);
6057 }
6058
6059 /*
6060 =for apidoc sv_replace
6061
6062 Make the first argument a copy of the second, then delete the original.
6063 The target SV physically takes over ownership of the body of the source SV
6064 and inherits its flags; however, the target keeps any magic it owns,
6065 and any magic in the source is discarded.
6066 Note that this is a rather specialist SV copying operation; most of the
6067 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6068
6069 =cut
6070 */
6071
6072 void
6073 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6074 {
6075     dVAR;
6076     const U32 refcnt = SvREFCNT(sv);
6077
6078     PERL_ARGS_ASSERT_SV_REPLACE;
6079
6080     SV_CHECK_THINKFIRST_COW_DROP(sv);
6081     if (SvREFCNT(nsv) != 1) {
6082         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6083                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6084     }
6085     if (SvMAGICAL(sv)) {
6086         if (SvMAGICAL(nsv))
6087             mg_free(nsv);
6088         else
6089             sv_upgrade(nsv, SVt_PVMG);
6090         SvMAGIC_set(nsv, SvMAGIC(sv));
6091         SvFLAGS(nsv) |= SvMAGICAL(sv);
6092         SvMAGICAL_off(sv);
6093         SvMAGIC_set(sv, NULL);
6094     }
6095     SvREFCNT(sv) = 0;
6096     sv_clear(sv);
6097     assert(!SvREFCNT(sv));
6098 #ifdef DEBUG_LEAKING_SCALARS
6099     sv->sv_flags  = nsv->sv_flags;
6100     sv->sv_any    = nsv->sv_any;
6101     sv->sv_refcnt = nsv->sv_refcnt;
6102     sv->sv_u      = nsv->sv_u;
6103 #else
6104     StructCopy(nsv,sv,SV);
6105 #endif
6106     if(SvTYPE(sv) == SVt_IV) {
6107         SvANY(sv)
6108             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6109     }
6110         
6111
6112 #ifdef PERL_OLD_COPY_ON_WRITE
6113     if (SvIsCOW_normal(nsv)) {
6114         /* We need to follow the pointers around the loop to make the
6115            previous SV point to sv, rather than nsv.  */
6116         SV *next;
6117         SV *current = nsv;
6118         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6119             assert(next);
6120             current = next;
6121             assert(SvPVX_const(current) == SvPVX_const(nsv));
6122         }
6123         /* Make the SV before us point to the SV after us.  */
6124         if (DEBUG_C_TEST) {
6125             PerlIO_printf(Perl_debug_log, "previous is\n");
6126             sv_dump(current);
6127             PerlIO_printf(Perl_debug_log,
6128                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6129                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6130         }
6131         SV_COW_NEXT_SV_SET(current, sv);
6132     }
6133 #endif
6134     SvREFCNT(sv) = refcnt;
6135     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6136     SvREFCNT(nsv) = 0;
6137     del_SV(nsv);
6138 }
6139
6140 /* We're about to free a GV which has a CV that refers back to us.
6141  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6142  * field) */
6143
6144 STATIC void
6145 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6146 {
6147     SV *gvname;
6148     GV *anongv;
6149
6150     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6151
6152     /* be assertive! */
6153     assert(SvREFCNT(gv) == 0);
6154     assert(isGV(gv) && isGV_with_GP(gv));
6155     assert(GvGP(gv));
6156     assert(!CvANON(cv));
6157     assert(CvGV(cv) == gv);
6158     assert(!CvNAMED(cv));
6159
6160     /* will the CV shortly be freed by gp_free() ? */
6161     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6162         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6163         return;
6164     }
6165
6166     /* if not, anonymise: */
6167     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6168                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6169                     : newSVpvn_flags( "__ANON__", 8, 0 );
6170     sv_catpvs(gvname, "::__ANON__");
6171     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6172     SvREFCNT_dec_NN(gvname);
6173
6174     CvANON_on(cv);
6175     CvCVGV_RC_on(cv);
6176     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6177 }
6178
6179
6180 /*
6181 =for apidoc sv_clear
6182
6183 Clear an SV: call any destructors, free up any memory used by the body,
6184 and free the body itself.  The SV's head is I<not> freed, although
6185 its type is set to all 1's so that it won't inadvertently be assumed
6186 to be live during global destruction etc.
6187 This function should only be called when REFCNT is zero.  Most of the time
6188 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6189 instead.
6190
6191 =cut
6192 */
6193
6194 void
6195 Perl_sv_clear(pTHX_ SV *const orig_sv)
6196 {
6197     dVAR;
6198     HV *stash;
6199     U32 type;
6200     const struct body_details *sv_type_details;
6201     SV* iter_sv = NULL;
6202     SV* next_sv = NULL;
6203     SV *sv = orig_sv;
6204     STRLEN hash_index;
6205
6206     PERL_ARGS_ASSERT_SV_CLEAR;
6207
6208     /* within this loop, sv is the SV currently being freed, and
6209      * iter_sv is the most recent AV or whatever that's being iterated
6210      * over to provide more SVs */
6211
6212     while (sv) {
6213
6214         type = SvTYPE(sv);
6215
6216         assert(SvREFCNT(sv) == 0);
6217         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6218
6219         if (type <= SVt_IV) {
6220             /* See the comment in sv.h about the collusion between this
6221              * early return and the overloading of the NULL slots in the
6222              * size table.  */
6223             if (SvROK(sv))
6224                 goto free_rv;
6225             SvFLAGS(sv) &= SVf_BREAK;
6226             SvFLAGS(sv) |= SVTYPEMASK;
6227             goto free_head;
6228         }
6229
6230         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6231
6232         if (type >= SVt_PVMG) {
6233             if (SvOBJECT(sv)) {
6234                 if (!curse(sv, 1)) goto get_next_sv;
6235                 type = SvTYPE(sv); /* destructor may have changed it */
6236             }
6237             /* Free back-references before magic, in case the magic calls
6238              * Perl code that has weak references to sv. */
6239             if (type == SVt_PVHV) {
6240                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6241                 if (SvMAGIC(sv))
6242                     mg_free(sv);
6243             }
6244             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6245                 SvREFCNT_dec(SvOURSTASH(sv));
6246             }
6247             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6248                 assert(!SvMAGICAL(sv));
6249             } else if (SvMAGIC(sv)) {
6250                 /* Free back-references before other types of magic. */
6251                 sv_unmagic(sv, PERL_MAGIC_backref);
6252                 mg_free(sv);
6253             }
6254             SvMAGICAL_off(sv);
6255             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6256                 SvREFCNT_dec(SvSTASH(sv));
6257         }
6258         switch (type) {
6259             /* case SVt_INVLIST: */
6260         case SVt_PVIO:
6261             if (IoIFP(sv) &&
6262                 IoIFP(sv) != PerlIO_stdin() &&
6263                 IoIFP(sv) != PerlIO_stdout() &&
6264                 IoIFP(sv) != PerlIO_stderr() &&
6265                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6266             {
6267                 io_close(MUTABLE_IO(sv), FALSE);
6268             }
6269             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6270                 PerlDir_close(IoDIRP(sv));
6271             IoDIRP(sv) = (DIR*)NULL;
6272             Safefree(IoTOP_NAME(sv));
6273             Safefree(IoFMT_NAME(sv));
6274             Safefree(IoBOTTOM_NAME(sv));
6275             if ((const GV *)sv == PL_statgv)
6276                 PL_statgv = NULL;
6277             goto freescalar;
6278         case SVt_REGEXP:
6279             /* FIXME for plugins */
6280           freeregexp:
6281             pregfree2((REGEXP*) sv);
6282             goto freescalar;
6283         case SVt_PVCV:
6284         case SVt_PVFM:
6285             cv_undef(MUTABLE_CV(sv));
6286             /* If we're in a stash, we don't own a reference to it.
6287              * However it does have a back reference to us, which needs to
6288              * be cleared.  */
6289             if ((stash = CvSTASH(sv)))
6290                 sv_del_backref(MUTABLE_SV(stash), sv);
6291             goto freescalar;
6292         case SVt_PVHV:
6293             if (PL_last_swash_hv == (const HV *)sv) {
6294                 PL_last_swash_hv = NULL;
6295             }
6296             if (HvTOTALKEYS((HV*)sv) > 0) {
6297                 const char *name;
6298                 /* this statement should match the one at the beginning of
6299                  * hv_undef_flags() */
6300                 if (   PL_phase != PERL_PHASE_DESTRUCT
6301                     && (name = HvNAME((HV*)sv)))
6302                 {
6303                     if (PL_stashcache) {
6304                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6305                                      sv));
6306                         (void)hv_delete(PL_stashcache, name,
6307                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6308                     }
6309                     hv_name_set((HV*)sv, NULL, 0, 0);
6310                 }
6311
6312                 /* save old iter_sv in unused SvSTASH field */
6313                 assert(!SvOBJECT(sv));
6314                 SvSTASH(sv) = (HV*)iter_sv;
6315                 iter_sv = sv;
6316
6317                 /* save old hash_index in unused SvMAGIC field */
6318                 assert(!SvMAGICAL(sv));
6319                 assert(!SvMAGIC(sv));
6320                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6321                 hash_index = 0;
6322
6323                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6324                 goto get_next_sv; /* process this new sv */
6325             }
6326             /* free empty hash */
6327             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6328             assert(!HvARRAY((HV*)sv));
6329             break;
6330         case SVt_PVAV:
6331             {
6332                 AV* av = MUTABLE_AV(sv);
6333                 if (PL_comppad == av) {
6334                     PL_comppad = NULL;
6335                     PL_curpad = NULL;
6336                 }
6337                 if (AvREAL(av) && AvFILLp(av) > -1) {
6338                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6339                     /* save old iter_sv in top-most slot of AV,
6340                      * and pray that it doesn't get wiped in the meantime */
6341                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6342                     iter_sv = sv;
6343                     goto get_next_sv; /* process this new sv */
6344                 }
6345                 Safefree(AvALLOC(av));
6346             }
6347
6348             break;
6349         case SVt_PVLV:
6350             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6351                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6352                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6353                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6354             }
6355             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6356                 SvREFCNT_dec(LvTARG(sv));
6357             if (isREGEXP(sv)) goto freeregexp;
6358         case SVt_PVGV:
6359             if (isGV_with_GP(sv)) {
6360                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6361                    && HvENAME_get(stash))
6362                     mro_method_changed_in(stash);
6363                 gp_free(MUTABLE_GV(sv));
6364                 if (GvNAME_HEK(sv))
6365                     unshare_hek(GvNAME_HEK(sv));
6366                 /* If we're in a stash, we don't own a reference to it.
6367                  * However it does have a back reference to us, which
6368                  * needs to be cleared.  */
6369                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6370                         sv_del_backref(MUTABLE_SV(stash), sv);
6371             }
6372             /* FIXME. There are probably more unreferenced pointers to SVs
6373              * in the interpreter struct that we should check and tidy in
6374              * a similar fashion to this:  */
6375             /* See also S_sv_unglob, which does the same thing. */
6376             if ((const GV *)sv == PL_last_in_gv)
6377                 PL_last_in_gv = NULL;
6378             else if ((const GV *)sv == PL_statgv)
6379                 PL_statgv = NULL;
6380             else if ((const GV *)sv == PL_stderrgv)
6381                 PL_stderrgv = NULL;
6382         case SVt_PVMG:
6383         case SVt_PVNV:
6384         case SVt_PVIV:
6385         case SVt_INVLIST:
6386         case SVt_PV:
6387           freescalar:
6388             /* Don't bother with SvOOK_off(sv); as we're only going to
6389              * free it.  */
6390             if (SvOOK(sv)) {
6391                 STRLEN offset;
6392                 SvOOK_offset(sv, offset);
6393                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6394                 /* Don't even bother with turning off the OOK flag.  */
6395             }
6396             if (SvROK(sv)) {
6397             free_rv:
6398                 {
6399                     SV * const target = SvRV(sv);
6400                     if (SvWEAKREF(sv))
6401                         sv_del_backref(target, sv);
6402                     else
6403                         next_sv = target;
6404                 }
6405             }
6406 #ifdef PERL_ANY_COW
6407             else if (SvPVX_const(sv)
6408                      && !(SvTYPE(sv) == SVt_PVIO
6409                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6410             {
6411                 if (SvIsCOW(sv)) {
6412                     if (DEBUG_C_TEST) {
6413                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6414                         sv_dump(sv);
6415                     }
6416                     if (SvLEN(sv)) {
6417 # ifdef PERL_OLD_COPY_ON_WRITE
6418                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6419 # else
6420                         if (CowREFCNT(sv)) {
6421                             CowREFCNT(sv)--;
6422                             SvLEN_set(sv, 0);
6423                         }
6424 # endif
6425                     } else {
6426                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6427                     }
6428
6429                 }
6430 # ifdef PERL_OLD_COPY_ON_WRITE
6431                 else
6432 # endif
6433                 if (SvLEN(sv)) {
6434                     Safefree(SvPVX_mutable(sv));
6435                 }
6436             }
6437 #else
6438             else if (SvPVX_const(sv) && SvLEN(sv)
6439                      && !(SvTYPE(sv) == SVt_PVIO
6440                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6441                 Safefree(SvPVX_mutable(sv));
6442             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6443                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6444             }
6445 #endif
6446             break;
6447         case SVt_NV:
6448             break;
6449         }
6450
6451       free_body:
6452
6453         SvFLAGS(sv) &= SVf_BREAK;
6454         SvFLAGS(sv) |= SVTYPEMASK;
6455
6456         sv_type_details = bodies_by_type + type;
6457         if (sv_type_details->arena) {
6458             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6459                      &PL_body_roots[type]);
6460         }
6461         else if (sv_type_details->body_size) {
6462             safefree(SvANY(sv));
6463         }
6464
6465       free_head:
6466         /* caller is responsible for freeing the head of the original sv */
6467         if (sv != orig_sv && !SvREFCNT(sv))
6468             del_SV(sv);
6469
6470         /* grab and free next sv, if any */
6471       get_next_sv:
6472         while (1) {
6473             sv = NULL;
6474             if (next_sv) {
6475                 sv = next_sv;
6476                 next_sv = NULL;
6477             }
6478             else if (!iter_sv) {
6479                 break;
6480             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6481                 AV *const av = (AV*)iter_sv;
6482                 if (AvFILLp(av) > -1) {
6483                     sv = AvARRAY(av)[AvFILLp(av)--];
6484                 }
6485                 else { /* no more elements of current AV to free */
6486                     sv = iter_sv;
6487                     type = SvTYPE(sv);
6488                     /* restore previous value, squirrelled away */
6489                     iter_sv = AvARRAY(av)[AvMAX(av)];
6490                     Safefree(AvALLOC(av));
6491                     goto free_body;
6492                 }
6493             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6494                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6495                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6496                     /* no more elements of current HV to free */
6497                     sv = iter_sv;
6498                     type = SvTYPE(sv);
6499                     /* Restore previous values of iter_sv and hash_index,
6500                      * squirrelled away */
6501                     assert(!SvOBJECT(sv));
6502                     iter_sv = (SV*)SvSTASH(sv);
6503                     assert(!SvMAGICAL(sv));
6504                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6505 #ifdef DEBUGGING
6506                     /* perl -DA does not like rubbish in SvMAGIC. */
6507                     SvMAGIC_set(sv, 0);
6508 #endif
6509
6510                     /* free any remaining detritus from the hash struct */
6511                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6512                     assert(!HvARRAY((HV*)sv));
6513                     goto free_body;
6514                 }
6515             }
6516
6517             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6518
6519             if (!sv)
6520                 continue;
6521             if (!SvREFCNT(sv)) {
6522                 sv_free(sv);
6523                 continue;
6524             }
6525             if (--(SvREFCNT(sv)))
6526                 continue;
6527 #ifdef DEBUGGING
6528             if (SvTEMP(sv)) {
6529                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6530                          "Attempt to free temp prematurely: SV 0x%"UVxf
6531                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6532                 continue;
6533             }
6534 #endif
6535             if (SvIMMORTAL(sv)) {
6536                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6537                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6538                 continue;
6539             }
6540             break;
6541         } /* while 1 */
6542
6543     } /* while sv */
6544 }
6545
6546 /* This routine curses the sv itself, not the object referenced by sv. So
6547    sv does not have to be ROK. */
6548
6549 static bool
6550 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6551     dVAR;
6552
6553     PERL_ARGS_ASSERT_CURSE;
6554     assert(SvOBJECT(sv));
6555
6556     if (PL_defstash &&  /* Still have a symbol table? */
6557         SvDESTROYABLE(sv))
6558     {
6559         dSP;
6560         HV* stash;
6561         do {
6562           stash = SvSTASH(sv);
6563           assert(SvTYPE(stash) == SVt_PVHV);
6564           if (HvNAME(stash)) {
6565             CV* destructor = NULL;
6566             assert (SvOOK(stash));
6567             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6568             if (!destructor || HvMROMETA(stash)->destroy_gen
6569                                 != PL_sub_generation)
6570             {
6571                 GV * const gv =
6572                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6573                 if (gv) destructor = GvCV(gv);
6574                 if (!SvOBJECT(stash))
6575                 {
6576                     SvSTASH(stash) =
6577                         destructor ? (HV *)destructor : ((HV *)0)+1;
6578                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6579                         PL_sub_generation;
6580                 }
6581             }
6582             assert(!destructor || destructor == ((CV *)0)+1
6583                 || SvTYPE(destructor) == SVt_PVCV);
6584             if (destructor && destructor != ((CV *)0)+1
6585                 /* A constant subroutine can have no side effects, so
6586                    don't bother calling it.  */
6587                 && !CvCONST(destructor)
6588                 /* Don't bother calling an empty destructor or one that
6589                    returns immediately. */
6590                 && (CvISXSUB(destructor)
6591                 || (CvSTART(destructor)
6592                     && (CvSTART(destructor)->op_next->op_type
6593                                         != OP_LEAVESUB)
6594                     && (CvSTART(destructor)->op_next->op_type
6595                                         != OP_PUSHMARK
6596                         || CvSTART(destructor)->op_next->op_next->op_type
6597                                         != OP_RETURN
6598                        )
6599                    ))
6600                )
6601             {
6602                 SV* const tmpref = newRV(sv);
6603                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6604                 ENTER;
6605                 PUSHSTACKi(PERLSI_DESTROY);
6606                 EXTEND(SP, 2);
6607                 PUSHMARK(SP);
6608                 PUSHs(tmpref);
6609                 PUTBACK;
6610                 call_sv(MUTABLE_SV(destructor),
6611                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6612                 POPSTACK;
6613                 SPAGAIN;
6614                 LEAVE;
6615                 if(SvREFCNT(tmpref) < 2) {
6616                     /* tmpref is not kept alive! */
6617                     SvREFCNT(sv)--;
6618                     SvRV_set(tmpref, NULL);
6619                     SvROK_off(tmpref);
6620                 }
6621                 SvREFCNT_dec_NN(tmpref);
6622             }
6623           }
6624         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6625
6626
6627         if (check_refcnt && SvREFCNT(sv)) {
6628             if (PL_in_clean_objs)
6629                 Perl_croak(aTHX_
6630                   "DESTROY created new reference to dead object '%"HEKf"'",
6631                    HEKfARG(HvNAME_HEK(stash)));
6632             /* DESTROY gave object new lease on life */
6633             return FALSE;
6634         }
6635     }
6636
6637     if (SvOBJECT(sv)) {
6638         HV * const stash = SvSTASH(sv);
6639         /* Curse before freeing the stash, as freeing the stash could cause
6640            a recursive call into S_curse. */
6641         SvOBJECT_off(sv);       /* Curse the object. */
6642         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6643         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6644     }
6645     return TRUE;
6646 }
6647
6648 /*
6649 =for apidoc sv_newref
6650
6651 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6652 instead.
6653
6654 =cut
6655 */
6656
6657 SV *
6658 Perl_sv_newref(pTHX_ SV *const sv)
6659 {
6660     PERL_UNUSED_CONTEXT;
6661     if (sv)
6662         (SvREFCNT(sv))++;
6663     return sv;
6664 }
6665
6666 /*
6667 =for apidoc sv_free
6668
6669 Decrement an SV's reference count, and if it drops to zero, call
6670 C<sv_clear> to invoke destructors and free up any memory used by
6671 the body; finally, deallocate the SV's head itself.
6672 Normally called via a wrapper macro C<SvREFCNT_dec>.
6673
6674 =cut
6675 */
6676
6677 void
6678 Perl_sv_free(pTHX_ SV *const sv)
6679 {
6680     SvREFCNT_dec(sv);
6681 }
6682
6683
6684 /* Private helper function for SvREFCNT_dec().
6685  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6686
6687 void
6688 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6689 {
6690     dVAR;
6691
6692     PERL_ARGS_ASSERT_SV_FREE2;
6693
6694     if (LIKELY( rc == 1 )) {
6695         /* normal case */
6696         SvREFCNT(sv) = 0;
6697
6698 #ifdef DEBUGGING
6699         if (SvTEMP(sv)) {
6700             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6701                              "Attempt to free temp prematurely: SV 0x%"UVxf
6702                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6703             return;
6704         }
6705 #endif
6706         if (SvIMMORTAL(sv)) {
6707             /* make sure SvREFCNT(sv)==0 happens very seldom */
6708             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6709             return;
6710         }
6711         sv_clear(sv);
6712         if (! SvREFCNT(sv)) /* may have have been resurrected */
6713             del_SV(sv);
6714         return;
6715     }
6716
6717     /* handle exceptional cases */
6718
6719     assert(rc == 0);
6720
6721     if (SvFLAGS(sv) & SVf_BREAK)
6722         /* this SV's refcnt has been artificially decremented to
6723          * trigger cleanup */
6724         return;
6725     if (PL_in_clean_all) /* All is fair */
6726         return;
6727     if (SvIMMORTAL(sv)) {
6728         /* make sure SvREFCNT(sv)==0 happens very seldom */
6729         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6730         return;
6731     }
6732     if (ckWARN_d(WARN_INTERNAL)) {
6733 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6734         Perl_dump_sv_child(aTHX_ sv);
6735 #else
6736     #ifdef DEBUG_LEAKING_SCALARS
6737         sv_dump(sv);
6738     #endif
6739 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6740         if (PL_warnhook == PERL_WARNHOOK_FATAL
6741             || ckDEAD(packWARN(WARN_INTERNAL))) {
6742             /* Don't let Perl_warner cause us to escape our fate:  */
6743             abort();
6744         }
6745 #endif
6746         /* This may not return:  */
6747         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6748                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6749                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6750 #endif
6751     }
6752 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6753     abort();
6754 #endif
6755
6756 }
6757
6758
6759 /*
6760 =for apidoc sv_len
6761
6762 Returns the length of the string in the SV.  Handles magic and type
6763 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6764 gives raw access to the xpv_cur slot.
6765
6766 =cut
6767 */
6768
6769 STRLEN
6770 Perl_sv_len(pTHX_ SV *const sv)
6771 {
6772     STRLEN len;
6773
6774     if (!sv)
6775         return 0;
6776
6777     (void)SvPV_const(sv, len);
6778     return len;
6779 }
6780
6781 /*
6782 =for apidoc sv_len_utf8
6783
6784 Returns the number of characters in the string in an SV, counting wide
6785 UTF-8 bytes as a single character.  Handles magic and type coercion.
6786
6787 =cut
6788 */
6789
6790 /*
6791  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6792  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6793  * (Note that the mg_len is not the length of the mg_ptr field.
6794  * This allows the cache to store the character length of the string without
6795  * needing to malloc() extra storage to attach to the mg_ptr.)
6796  *
6797  */
6798
6799 STRLEN
6800 Perl_sv_len_utf8(pTHX_ SV *const sv)
6801 {
6802     if (!sv)
6803         return 0;
6804
6805     SvGETMAGIC(sv);
6806     return sv_len_utf8_nomg(sv);
6807 }
6808
6809 STRLEN
6810 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6811 {
6812     dVAR;
6813     STRLEN len;
6814     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6815
6816     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6817
6818     if (PL_utf8cache && SvUTF8(sv)) {
6819             STRLEN ulen;
6820             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6821
6822             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6823                 if (mg->mg_len != -1)
6824                     ulen = mg->mg_len;
6825                 else {
6826                     /* We can use the offset cache for a headstart.
6827                        The longer value is stored in the first pair.  */
6828                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6829
6830                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6831                                                        s + len);
6832                 }
6833                 
6834                 if (PL_utf8cache < 0) {
6835                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6836                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6837                 }
6838             }
6839             else {
6840                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6841                 utf8_mg_len_cache_update(sv, &mg, ulen);
6842             }
6843             return ulen;
6844     }
6845     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6846 }
6847
6848 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6849    offset.  */
6850 static STRLEN
6851 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6852                       STRLEN *const uoffset_p, bool *const at_end)
6853 {
6854     const U8 *s = start;
6855     STRLEN uoffset = *uoffset_p;
6856
6857     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6858
6859     while (s < send && uoffset) {
6860         --uoffset;
6861         s += UTF8SKIP(s);
6862     }
6863     if (s == send) {
6864         *at_end = TRUE;
6865     }
6866     else if (s > send) {
6867         *at_end = TRUE;
6868         /* This is the existing behaviour. Possibly it should be a croak, as
6869            it's actually a bounds error  */
6870         s = send;
6871     }
6872     *uoffset_p -= uoffset;
6873     return s - start;
6874 }
6875
6876 /* Given the length of the string in both bytes and UTF-8 characters, decide
6877    whether to walk forwards or backwards to find the byte corresponding to
6878    the passed in UTF-8 offset.  */
6879 static STRLEN
6880 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6881                     STRLEN uoffset, const STRLEN uend)
6882 {
6883     STRLEN backw = uend - uoffset;
6884
6885     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6886
6887     if (uoffset < 2 * backw) {
6888         /* The assumption is that going forwards is twice the speed of going
6889            forward (that's where the 2 * backw comes from).
6890            (The real figure of course depends on the UTF-8 data.)  */
6891         const U8 *s = start;
6892
6893         while (s < send && uoffset--)
6894             s += UTF8SKIP(s);
6895         assert (s <= send);
6896         if (s > send)
6897             s = send;
6898         return s - start;
6899     }
6900
6901     while (backw--) {
6902         send--;
6903         while (UTF8_IS_CONTINUATION(*send))
6904             send--;
6905     }
6906     return send - start;
6907 }
6908
6909 /* For the string representation of the given scalar, find the byte
6910    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6911    give another position in the string, *before* the sought offset, which
6912    (which is always true, as 0, 0 is a valid pair of positions), which should
6913    help reduce the amount of linear searching.
6914    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6915    will be used to reduce the amount of linear searching. The cache will be
6916    created if necessary, and the found value offered to it for update.  */
6917 static STRLEN
6918 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6919                     const U8 *const send, STRLEN uoffset,
6920                     STRLEN uoffset0, STRLEN boffset0)
6921 {
6922     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6923     bool found = FALSE;
6924     bool at_end = FALSE;
6925
6926     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6927
6928     assert (uoffset >= uoffset0);
6929
6930     if (!uoffset)
6931         return 0;
6932
6933     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6934         && PL_utf8cache
6935         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6936                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6937         if ((*mgp)->mg_ptr) {
6938             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6939             if (cache[0] == uoffset) {
6940                 /* An exact match. */
6941                 return cache[1];
6942             }
6943             if (cache[2] == uoffset) {
6944                 /* An exact match. */
6945                 return cache[3];
6946             }
6947
6948             if (cache[0] < uoffset) {
6949                 /* The cache already knows part of the way.   */
6950                 if (cache[0] > uoffset0) {
6951                     /* The cache knows more than the passed in pair  */
6952                     uoffset0 = cache[0];
6953                     boffset0 = cache[1];
6954                 }
6955                 if ((*mgp)->mg_len != -1) {
6956                     /* And we know the end too.  */
6957                     boffset = boffset0
6958                         + sv_pos_u2b_midway(start + boffset0, send,
6959                                               uoffset - uoffset0,
6960                                               (*mgp)->mg_len - uoffset0);
6961                 } else {
6962                     uoffset -= uoffset0;
6963                     boffset = boffset0
6964                         + sv_pos_u2b_forwards(start + boffset0,
6965                                               send, &uoffset, &at_end);
6966                     uoffset += uoffset0;
6967                 }
6968             }
6969             else if (cache[2] < uoffset) {
6970                 /* We're between the two cache entries.  */
6971                 if (cache[2] > uoffset0) {
6972                     /* and the cache knows more than the passed in pair  */
6973                     uoffset0 = cache[2];
6974                     boffset0 = cache[3];
6975                 }
6976
6977                 boffset = boffset0
6978                     + sv_pos_u2b_midway(start + boffset0,
6979                                           start + cache[1],
6980                                           uoffset - uoffset0,
6981                                           cache[0] - uoffset0);
6982             } else {
6983                 boffset = boffset0
6984                     + sv_pos_u2b_midway(start + boffset0,
6985                                           start + cache[3],
6986                                           uoffset - uoffset0,
6987                                           cache[2] - uoffset0);
6988             }
6989             found = TRUE;
6990         }
6991         else if ((*mgp)->mg_len != -1) {
6992             /* If we can take advantage of a passed in offset, do so.  */
6993             /* In fact, offset0 is either 0, or less than offset, so don't
6994                need to worry about the other possibility.  */
6995             boffset = boffset0
6996                 + sv_pos_u2b_midway(start + boffset0, send,
6997                                       uoffset - uoffset0,
6998                                       (*mgp)->mg_len - uoffset0);
6999             found = TRUE;
7000         }
7001     }
7002
7003     if (!found || PL_utf8cache < 0) {
7004         STRLEN real_boffset;
7005         uoffset -= uoffset0;
7006         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7007                                                       send, &uoffset, &at_end);
7008         uoffset += uoffset0;
7009
7010         if (found && PL_utf8cache < 0)
7011             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7012                                        real_boffset, sv);
7013         boffset = real_boffset;
7014     }
7015
7016     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7017         if (at_end)
7018             utf8_mg_len_cache_update(sv, mgp, uoffset);
7019         else
7020             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7021     }
7022     return boffset;
7023 }
7024
7025
7026 /*
7027 =for apidoc sv_pos_u2b_flags
7028
7029 Converts the offset from a count of UTF-8 chars from
7030 the start of the string, to a count of the equivalent number of bytes; if
7031 lenp is non-zero, it does the same to lenp, but this time starting from
7032 the offset, rather than from the start
7033 of the string.  Handles type coercion.
7034 I<flags> is passed to C<SvPV_flags>, and usually should be
7035 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7036
7037 =cut
7038 */
7039
7040 /*
7041  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7042  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7043  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7044  *
7045  */
7046
7047 STRLEN
7048 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7049                       U32 flags)
7050 {
7051     const U8 *start;
7052     STRLEN len;
7053     STRLEN boffset;
7054
7055     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7056
7057     start = (U8*)SvPV_flags(sv, len, flags);
7058     if (len) {
7059         const U8 * const send = start + len;
7060         MAGIC *mg = NULL;
7061         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7062
7063         if (lenp
7064             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7065                         is 0, and *lenp is already set to that.  */) {
7066             /* Convert the relative offset to absolute.  */
7067             const STRLEN uoffset2 = uoffset + *lenp;
7068             const STRLEN boffset2
7069                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7070                                       uoffset, boffset) - boffset;
7071
7072             *lenp = boffset2;
7073         }
7074     } else {
7075         if (lenp)
7076             *lenp = 0;
7077         boffset = 0;
7078     }
7079
7080     return boffset;
7081 }
7082
7083 /*
7084 =for apidoc sv_pos_u2b
7085
7086 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7087 the start of the string, to a count of the equivalent number of bytes; if
7088 lenp is non-zero, it does the same to lenp, but this time starting from
7089 the offset, rather than from the start of the string.  Handles magic and
7090 type coercion.
7091
7092 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7093 than 2Gb.
7094
7095 =cut
7096 */
7097
7098 /*
7099  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7100  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7101  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7102  *
7103  */
7104
7105 /* This function is subject to size and sign problems */
7106
7107 void
7108 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7109 {
7110     PERL_ARGS_ASSERT_SV_POS_U2B;
7111
7112     if (lenp) {
7113         STRLEN ulen = (STRLEN)*lenp;
7114         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7115                                          SV_GMAGIC|SV_CONST_RETURN);
7116         *lenp = (I32)ulen;
7117     } else {
7118         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7119                                          SV_GMAGIC|SV_CONST_RETURN);
7120     }
7121 }
7122
7123 static void
7124 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7125                            const STRLEN ulen)
7126 {
7127     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7128     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7129         return;
7130
7131     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7132                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7133         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7134     }
7135     assert(*mgp);
7136
7137     (*mgp)->mg_len = ulen;
7138 }
7139
7140 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7141    byte length pairing. The (byte) length of the total SV is passed in too,
7142    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7143    may not have updated SvCUR, so we can't rely on reading it directly.
7144
7145    The proffered utf8/byte length pairing isn't used if the cache already has
7146    two pairs, and swapping either for the proffered pair would increase the
7147    RMS of the intervals between known byte offsets.
7148
7149    The cache itself consists of 4 STRLEN values
7150    0: larger UTF-8 offset
7151    1: corresponding byte offset
7152    2: smaller UTF-8 offset
7153    3: corresponding byte offset
7154
7155    Unused cache pairs have the value 0, 0.
7156    Keeping the cache "backwards" means that the invariant of
7157    cache[0] >= cache[2] is maintained even with empty slots, which means that
7158    the code that uses it doesn't need to worry if only 1 entry has actually
7159    been set to non-zero.  It also makes the "position beyond the end of the
7160    cache" logic much simpler, as the first slot is always the one to start
7161    from.   
7162 */
7163 static void
7164 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7165                            const STRLEN utf8, const STRLEN blen)
7166 {
7167     STRLEN *cache;
7168
7169     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7170
7171     if (SvREADONLY(sv))
7172         return;
7173
7174     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7175                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7176         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7177                            0);
7178         (*mgp)->mg_len = -1;
7179     }
7180     assert(*mgp);
7181
7182     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7183         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7184         (*mgp)->mg_ptr = (char *) cache;
7185     }
7186     assert(cache);
7187
7188     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7189         /* SvPOKp() because it's possible that sv has string overloading, and
7190            therefore is a reference, hence SvPVX() is actually a pointer.
7191            This cures the (very real) symptoms of RT 69422, but I'm not actually
7192            sure whether we should even be caching the results of UTF-8
7193            operations on overloading, given that nothing stops overloading
7194            returning a different value every time it's called.  */
7195         const U8 *start = (const U8 *) SvPVX_const(sv);
7196         const STRLEN realutf8 = utf8_length(start, start + byte);
7197
7198         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7199                                    sv);
7200     }
7201
7202     /* Cache is held with the later position first, to simplify the code
7203        that deals with unbounded ends.  */
7204        
7205     ASSERT_UTF8_CACHE(cache);
7206     if (cache[1] == 0) {
7207         /* Cache is totally empty  */
7208         cache[0] = utf8;
7209         cache[1] = byte;
7210     } else if (cache[3] == 0) {
7211         if (byte > cache[1]) {
7212             /* New one is larger, so goes first.  */
7213             cache[2] = cache[0];
7214             cache[3] = cache[1];
7215             cache[0] = utf8;
7216             cache[1] = byte;
7217         } else {
7218             cache[2] = utf8;
7219             cache[3] = byte;
7220         }
7221     } else {
7222 #define THREEWAY_SQUARE(a,b,c,d) \
7223             ((float)((d) - (c))) * ((float)((d) - (c))) \
7224             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7225                + ((float)((b) - (a))) * ((float)((b) - (a)))
7226
7227         /* Cache has 2 slots in use, and we know three potential pairs.
7228            Keep the two that give the lowest RMS distance. Do the
7229            calculation in bytes simply because we always know the byte
7230            length.  squareroot has the same ordering as the positive value,
7231            so don't bother with the actual square root.  */
7232         if (byte > cache[1]) {
7233             /* New position is after the existing pair of pairs.  */
7234             const float keep_earlier
7235                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7236             const float keep_later
7237                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7238
7239             if (keep_later < keep_earlier) {
7240                 cache[2] = cache[0];
7241                 cache[3] = cache[1];
7242                 cache[0] = utf8;
7243                 cache[1] = byte;
7244             }
7245             else {
7246                 cache[0] = utf8;
7247                 cache[1] = byte;
7248             }
7249         }
7250         else if (byte > cache[3]) {
7251             /* New position is between the existing pair of pairs.  */
7252             const float keep_earlier
7253                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7254             const float keep_later
7255                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7256
7257             if (keep_later < keep_earlier) {
7258                 cache[2] = utf8;
7259                 cache[3] = byte;
7260             }
7261             else {
7262                 cache[0] = utf8;
7263                 cache[1] = byte;
7264             }
7265         }
7266         else {
7267             /* New position is before the existing pair of pairs.  */
7268             const float keep_earlier
7269                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7270             const float keep_later
7271                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7272
7273             if (keep_later < keep_earlier) {
7274                 cache[2] = utf8;
7275                 cache[3] = byte;
7276             }
7277             else {
7278                 cache[0] = cache[2];
7279                 cache[1] = cache[3];
7280                 cache[2] = utf8;
7281                 cache[3] = byte;
7282             }
7283         }
7284     }
7285     ASSERT_UTF8_CACHE(cache);
7286 }
7287
7288 /* We already know all of the way, now we may be able to walk back.  The same
7289    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7290    backward is half the speed of walking forward. */
7291 static STRLEN
7292 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7293                     const U8 *end, STRLEN endu)
7294 {
7295     const STRLEN forw = target - s;
7296     STRLEN backw = end - target;
7297
7298     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7299
7300     if (forw < 2 * backw) {
7301         return utf8_length(s, target);
7302     }
7303
7304     while (end > target) {
7305         end--;
7306         while (UTF8_IS_CONTINUATION(*end)) {
7307             end--;
7308         }
7309         endu--;
7310     }
7311     return endu;
7312 }
7313
7314 /*
7315 =for apidoc sv_pos_b2u_flags
7316
7317 Converts the offset from a count of bytes from the start of the string, to
7318 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7319 I<flags> is passed to C<SvPV_flags>, and usually should be
7320 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7321
7322 =cut
7323 */
7324
7325 /*
7326  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7327  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7328  * and byte offsets.
7329  *
7330  */
7331 STRLEN
7332 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7333 {
7334     const U8* s;
7335     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7336     STRLEN blen;
7337     MAGIC* mg = NULL;
7338     const U8* send;
7339     bool found = FALSE;
7340
7341     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7342
7343     s = (const U8*)SvPV_flags(sv, blen, flags);
7344
7345     if (blen < offset)
7346         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7347                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7348
7349     send = s + offset;
7350
7351     if (!SvREADONLY(sv)
7352         && PL_utf8cache
7353         && SvTYPE(sv) >= SVt_PVMG
7354         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7355     {
7356         if (mg->mg_ptr) {
7357             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7358             if (cache[1] == offset) {
7359                 /* An exact match. */
7360                 return cache[0];
7361             }
7362             if (cache[3] == offset) {
7363                 /* An exact match. */
7364                 return cache[2];
7365             }
7366
7367             if (cache[1] < offset) {
7368                 /* We already know part of the way. */
7369                 if (mg->mg_len != -1) {
7370                     /* Actually, we know the end too.  */
7371                     len = cache[0]
7372                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7373                                               s + blen, mg->mg_len - cache[0]);
7374                 } else {
7375                     len = cache[0] + utf8_length(s + cache[1], send);
7376                 }
7377             }
7378             else if (cache[3] < offset) {
7379                 /* We're between the two cached pairs, so we do the calculation
7380                    offset by the byte/utf-8 positions for the earlier pair,
7381                    then add the utf-8 characters from the string start to
7382                    there.  */
7383                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7384                                           s + cache[1], cache[0] - cache[2])
7385                     + cache[2];
7386
7387             }
7388             else { /* cache[3] > offset */
7389                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7390                                           cache[2]);
7391
7392             }
7393             ASSERT_UTF8_CACHE(cache);
7394             found = TRUE;
7395         } else if (mg->mg_len != -1) {
7396             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7397             found = TRUE;
7398         }
7399     }
7400     if (!found || PL_utf8cache < 0) {
7401         const STRLEN real_len = utf8_length(s, send);
7402
7403         if (found && PL_utf8cache < 0)
7404             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7405         len = real_len;
7406     }
7407
7408     if (PL_utf8cache) {
7409         if (blen == offset)
7410             utf8_mg_len_cache_update(sv, &mg, len);
7411         else
7412             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7413     }
7414
7415     return len;
7416 }
7417
7418 /*
7419 =for apidoc sv_pos_b2u
7420
7421 Converts the value pointed to by offsetp from a count of bytes from the
7422 start of the string, to a count of the equivalent number of UTF-8 chars.
7423 Handles magic and type coercion.
7424
7425 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7426 longer than 2Gb.
7427
7428 =cut
7429 */
7430
7431 /*
7432  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7433  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7434  * byte offsets.
7435  *
7436  */
7437 void
7438 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7439 {
7440     PERL_ARGS_ASSERT_SV_POS_B2U;
7441
7442     if (!sv)
7443         return;
7444
7445     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7446                                      SV_GMAGIC|SV_CONST_RETURN);
7447 }
7448
7449 static void
7450 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7451                              STRLEN real, SV *const sv)
7452 {
7453     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7454
7455     /* As this is debugging only code, save space by keeping this test here,
7456        rather than inlining it in all the callers.  */
7457     if (from_cache == real)
7458         return;
7459
7460     /* Need to turn the assertions off otherwise we may recurse infinitely
7461        while printing error messages.  */
7462     SAVEI8(PL_utf8cache);
7463     PL_utf8cache = 0;
7464     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7465                func, (UV) from_cache, (UV) real, SVfARG(sv));
7466 }
7467
7468 /*
7469 =for apidoc sv_eq
7470
7471 Returns a boolean indicating whether the strings in the two SVs are
7472 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7473 coerce its args to strings if necessary.
7474
7475 =for apidoc sv_eq_flags
7476
7477 Returns a boolean indicating whether the strings in the two SVs are
7478 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7479 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7480
7481 =cut
7482 */
7483
7484 I32
7485 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7486 {
7487     dVAR;
7488     const char *pv1;
7489     STRLEN cur1;
7490     const char *pv2;
7491     STRLEN cur2;
7492     I32  eq     = 0;
7493     SV* svrecode = NULL;
7494
7495     if (!sv1) {
7496         pv1 = "";
7497         cur1 = 0;
7498     }
7499     else {
7500         /* if pv1 and pv2 are the same, second SvPV_const call may
7501          * invalidate pv1 (if we are handling magic), so we may need to
7502          * make a copy */
7503         if (sv1 == sv2 && flags & SV_GMAGIC
7504          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7505             pv1 = SvPV_const(sv1, cur1);
7506             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7507         }
7508         pv1 = SvPV_flags_const(sv1, cur1, flags);
7509     }
7510
7511     if (!sv2){
7512         pv2 = "";
7513         cur2 = 0;
7514     }
7515     else
7516         pv2 = SvPV_flags_const(sv2, cur2, flags);
7517
7518     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7519         /* Differing utf8ness.
7520          * Do not UTF8size the comparands as a side-effect. */
7521          if (PL_encoding) {
7522               if (SvUTF8(sv1)) {
7523                    svrecode = newSVpvn(pv2, cur2);
7524                    sv_recode_to_utf8(svrecode, PL_encoding);
7525                    pv2 = SvPV_const(svrecode, cur2);
7526               }
7527               else {
7528                    svrecode = newSVpvn(pv1, cur1);
7529                    sv_recode_to_utf8(svrecode, PL_encoding);
7530                    pv1 = SvPV_const(svrecode, cur1);
7531               }
7532               /* Now both are in UTF-8. */
7533               if (cur1 != cur2) {
7534                    SvREFCNT_dec_NN(svrecode);
7535                    return FALSE;
7536               }
7537          }
7538          else {
7539               if (SvUTF8(sv1)) {
7540                   /* sv1 is the UTF-8 one  */
7541                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7542                                         (const U8*)pv1, cur1) == 0;
7543               }
7544               else {
7545                   /* sv2 is the UTF-8 one  */
7546                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7547                                         (const U8*)pv2, cur2) == 0;
7548               }
7549          }
7550     }
7551
7552     if (cur1 == cur2)
7553         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7554         
7555     SvREFCNT_dec(svrecode);
7556
7557     return eq;
7558 }
7559
7560 /*
7561 =for apidoc sv_cmp
7562
7563 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7564 string in C<sv1> is less than, equal to, or greater than the string in
7565 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7566 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7567
7568 =for apidoc sv_cmp_flags
7569
7570 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7571 string in C<sv1> is less than, equal to, or greater than the string in
7572 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7573 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7574 also C<sv_cmp_locale_flags>.
7575
7576 =cut
7577 */
7578
7579 I32
7580 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7581 {
7582     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7583 }
7584
7585 I32
7586 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7587                   const U32 flags)
7588 {
7589     dVAR;
7590     STRLEN cur1, cur2;
7591     const char *pv1, *pv2;
7592     I32  cmp;
7593     SV *svrecode = NULL;
7594
7595     if (!sv1) {
7596         pv1 = "";
7597         cur1 = 0;
7598     }
7599     else
7600         pv1 = SvPV_flags_const(sv1, cur1, flags);
7601
7602     if (!sv2) {
7603         pv2 = "";
7604         cur2 = 0;
7605     }
7606     else
7607         pv2 = SvPV_flags_const(sv2, cur2, flags);
7608
7609     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7610         /* Differing utf8ness.
7611          * Do not UTF8size the comparands as a side-effect. */
7612         if (SvUTF8(sv1)) {
7613             if (PL_encoding) {
7614                  svrecode = newSVpvn(pv2, cur2);
7615                  sv_recode_to_utf8(svrecode, PL_encoding);
7616                  pv2 = SvPV_const(svrecode, cur2);
7617             }
7618             else {
7619                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7620                                                    (const U8*)pv1, cur1);
7621                 return retval ? retval < 0 ? -1 : +1 : 0;
7622             }
7623         }
7624         else {
7625             if (PL_encoding) {
7626                  svrecode = newSVpvn(pv1, cur1);
7627                  sv_recode_to_utf8(svrecode, PL_encoding);
7628                  pv1 = SvPV_const(svrecode, cur1);
7629             }
7630             else {
7631                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7632                                                   (const U8*)pv2, cur2);
7633                 return retval ? retval < 0 ? -1 : +1 : 0;
7634             }
7635         }
7636     }
7637
7638     if (!cur1) {
7639         cmp = cur2 ? -1 : 0;
7640     } else if (!cur2) {
7641         cmp = 1;
7642     } else {
7643         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7644
7645         if (retval) {
7646             cmp = retval < 0 ? -1 : 1;
7647         } else if (cur1 == cur2) {
7648             cmp = 0;
7649         } else {
7650             cmp = cur1 < cur2 ? -1 : 1;
7651         }
7652     }
7653
7654     SvREFCNT_dec(svrecode);
7655
7656     return cmp;
7657 }
7658
7659 /*
7660 =for apidoc sv_cmp_locale
7661
7662 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7663 'use bytes' aware, handles get magic, and will coerce its args to strings
7664 if necessary.  See also C<sv_cmp>.
7665
7666 =for apidoc sv_cmp_locale_flags
7667
7668 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7669 'use bytes' aware and will coerce its args to strings if necessary.  If the
7670 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7671
7672 =cut
7673 */
7674
7675 I32
7676 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7677 {
7678     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7679 }
7680
7681 I32
7682 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7683                          const U32 flags)
7684 {
7685     dVAR;
7686 #ifdef USE_LOCALE_COLLATE
7687
7688     char *pv1, *pv2;
7689     STRLEN len1, len2;
7690     I32 retval;
7691
7692     if (PL_collation_standard)
7693         goto raw_compare;
7694
7695     len1 = 0;
7696     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7697     len2 = 0;
7698     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7699
7700     if (!pv1 || !len1) {
7701         if (pv2 && len2)
7702             return -1;
7703         else
7704             goto raw_compare;
7705     }
7706     else {
7707         if (!pv2 || !len2)
7708             return 1;
7709     }
7710
7711     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7712
7713     if (retval)
7714         return retval < 0 ? -1 : 1;
7715
7716     /*
7717      * When the result of collation is equality, that doesn't mean
7718      * that there are no differences -- some locales exclude some
7719      * characters from consideration.  So to avoid false equalities,
7720      * we use the raw string as a tiebreaker.
7721      */
7722
7723   raw_compare:
7724     /*FALLTHROUGH*/
7725
7726 #endif /* USE_LOCALE_COLLATE */
7727
7728     return sv_cmp(sv1, sv2);
7729 }
7730
7731
7732 #ifdef USE_LOCALE_COLLATE
7733
7734 /*
7735 =for apidoc sv_collxfrm
7736
7737 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7738 C<sv_collxfrm_flags>.
7739
7740 =for apidoc sv_collxfrm_flags
7741
7742 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7743 flags contain SV_GMAGIC, it handles get-magic.
7744
7745 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7746 scalar data of the variable, but transformed to such a format that a normal
7747 memory comparison can be used to compare the data according to the locale
7748 settings.
7749
7750 =cut
7751 */
7752
7753 char *
7754 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7755 {
7756     dVAR;
7757     MAGIC *mg;
7758
7759     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7760
7761     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7762     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7763         const char *s;
7764         char *xf;
7765         STRLEN len, xlen;
7766
7767         if (mg)
7768             Safefree(mg->mg_ptr);
7769         s = SvPV_flags_const(sv, len, flags);
7770         if ((xf = mem_collxfrm(s, len, &xlen))) {
7771             if (! mg) {
7772 #ifdef PERL_OLD_COPY_ON_WRITE
7773                 if (SvIsCOW(sv))
7774                     sv_force_normal_flags(sv, 0);
7775 #endif
7776                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7777                                  0, 0);
7778                 assert(mg);
7779             }
7780             mg->mg_ptr = xf;
7781             mg->mg_len = xlen;
7782         }
7783         else {
7784             if (mg) {
7785                 mg->mg_ptr = NULL;
7786                 mg->mg_len = -1;
7787             }
7788         }
7789     }
7790     if (mg && mg->mg_ptr) {
7791         *nxp = mg->mg_len;
7792         return mg->mg_ptr + sizeof(PL_collation_ix);
7793     }
7794     else {
7795         *nxp = 0;
7796         return NULL;
7797     }
7798 }
7799
7800 #endif /* USE_LOCALE_COLLATE */
7801
7802 static char *
7803 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7804 {
7805     SV * const tsv = newSV(0);
7806     ENTER;
7807     SAVEFREESV(tsv);
7808     sv_gets(tsv, fp, 0);
7809     sv_utf8_upgrade_nomg(tsv);
7810     SvCUR_set(sv,append);
7811     sv_catsv(sv,tsv);
7812     LEAVE;
7813     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7814 }
7815
7816 static char *
7817 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7818 {
7819     SSize_t bytesread;
7820     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7821       /* Grab the size of the record we're getting */
7822     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7823     
7824     /* Go yank in */
7825 #ifdef VMS
7826 #include <rms.h>
7827     int fd;
7828     Stat_t st;
7829
7830     /* With a true, record-oriented file on VMS, we need to use read directly
7831      * to ensure that we respect RMS record boundaries.  The user is responsible
7832      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7833      * record size) field.  N.B. This is likely to produce invalid results on
7834      * varying-width character data when a record ends mid-character.
7835      */
7836     fd = PerlIO_fileno(fp);
7837     if (fd != -1
7838         && PerlLIO_fstat(fd, &st) == 0
7839         && (st.st_fab_rfm == FAB$C_VAR
7840             || st.st_fab_rfm == FAB$C_VFC
7841             || st.st_fab_rfm == FAB$C_FIX)) {
7842
7843         bytesread = PerlLIO_read(fd, buffer, recsize);
7844     }
7845     else /* in-memory file from PerlIO::Scalar
7846           * or not a record-oriented file
7847           */
7848 #endif
7849     {
7850         bytesread = PerlIO_read(fp, buffer, recsize);
7851
7852         /* At this point, the logic in sv_get() means that sv will
7853            be treated as utf-8 if the handle is utf8.
7854         */
7855         if (PerlIO_isutf8(fp) && bytesread > 0) {
7856             char *bend = buffer + bytesread;
7857             char *bufp = buffer;
7858             size_t charcount = 0;
7859             bool charstart = TRUE;
7860             STRLEN skip = 0;
7861
7862             while (charcount < recsize) {
7863                 /* count accumulated characters */
7864                 while (bufp < bend) {
7865                     if (charstart) {
7866                         skip = UTF8SKIP(bufp);
7867                     }
7868                     if (bufp + skip > bend) {
7869                         /* partial at the end */
7870                         charstart = FALSE;
7871                         break;
7872                     }
7873                     else {
7874                         ++charcount;
7875                         bufp += skip;
7876                         charstart = TRUE;
7877                     }
7878                 }
7879
7880                 if (charcount < recsize) {
7881                     STRLEN readsize;
7882                     STRLEN bufp_offset = bufp - buffer;
7883                     SSize_t morebytesread;
7884
7885                     /* originally I read enough to fill any incomplete
7886                        character and the first byte of the next
7887                        character if needed, but if there's many
7888                        multi-byte encoded characters we're going to be
7889                        making a read call for every character beyond
7890                        the original read size.
7891
7892                        So instead, read the rest of the character if
7893                        any, and enough bytes to match at least the
7894                        start bytes for each character we're going to
7895                        read.
7896                     */
7897                     if (charstart)
7898                         readsize = recsize - charcount;
7899                     else 
7900                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7901                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7902                     bend = buffer + bytesread;
7903                     morebytesread = PerlIO_read(fp, bend, readsize);
7904                     if (morebytesread <= 0) {
7905                         /* we're done, if we still have incomplete
7906                            characters the check code in sv_gets() will
7907                            warn about them.
7908
7909                            I'd originally considered doing
7910                            PerlIO_ungetc() on all but the lead
7911                            character of the incomplete character, but
7912                            read() doesn't do that, so I don't.
7913                         */
7914                         break;
7915                     }
7916
7917                     /* prepare to scan some more */
7918                     bytesread += morebytesread;
7919                     bend = buffer + bytesread;
7920                     bufp = buffer + bufp_offset;
7921                 }
7922             }
7923         }
7924     }
7925
7926     if (bytesread < 0)
7927         bytesread = 0;
7928     SvCUR_set(sv, bytesread + append);
7929     buffer[bytesread] = '\0';
7930     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7931 }
7932
7933 /*
7934 =for apidoc sv_gets
7935
7936 Get a line from the filehandle and store it into the SV, optionally
7937 appending to the currently-stored string. If C<append> is not 0, the
7938 line is appended to the SV instead of overwriting it. C<append> should
7939 be set to the byte offset that the appended string should start at
7940 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7941
7942 =cut
7943 */
7944
7945 char *
7946 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7947 {
7948     dVAR;
7949     const char *rsptr;
7950     STRLEN rslen;
7951     STDCHAR rslast;
7952     STDCHAR *bp;
7953     I32 cnt;
7954     I32 i = 0;
7955     I32 rspara = 0;
7956
7957     PERL_ARGS_ASSERT_SV_GETS;
7958
7959     if (SvTHINKFIRST(sv))
7960         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7961     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7962        from <>.
7963        However, perlbench says it's slower, because the existing swipe code
7964        is faster than copy on write.
7965        Swings and roundabouts.  */
7966     SvUPGRADE(sv, SVt_PV);
7967
7968     if (append) {
7969         if (PerlIO_isutf8(fp)) {
7970             if (!SvUTF8(sv)) {
7971                 sv_utf8_upgrade_nomg(sv);
7972                 sv_pos_u2b(sv,&append,0);
7973             }
7974         } else if (SvUTF8(sv)) {
7975             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7976         }
7977     }
7978
7979     SvPOK_only(sv);
7980     if (!append) {
7981         SvCUR_set(sv,0);
7982     }
7983     if (PerlIO_isutf8(fp))
7984         SvUTF8_on(sv);
7985
7986     if (IN_PERL_COMPILETIME) {
7987         /* we always read code in line mode */
7988         rsptr = "\n";
7989         rslen = 1;
7990     }
7991     else if (RsSNARF(PL_rs)) {
7992         /* If it is a regular disk file use size from stat() as estimate
7993            of amount we are going to read -- may result in mallocing
7994            more memory than we really need if the layers below reduce
7995            the size we read (e.g. CRLF or a gzip layer).
7996          */
7997         Stat_t st;
7998         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7999             const Off_t offset = PerlIO_tell(fp);
8000             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8001                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8002             }
8003         }
8004         rsptr = NULL;
8005         rslen = 0;
8006     }
8007     else if (RsRECORD(PL_rs)) {
8008         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8009     }
8010     else if (RsPARA(PL_rs)) {
8011         rsptr = "\n\n";
8012         rslen = 2;
8013         rspara = 1;
8014     }
8015     else {
8016         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8017         if (PerlIO_isutf8(fp)) {
8018             rsptr = SvPVutf8(PL_rs, rslen);
8019         }
8020         else {
8021             if (SvUTF8(PL_rs)) {
8022                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8023                     Perl_croak(aTHX_ "Wide character in $/");
8024                 }
8025             }
8026             rsptr = SvPV_const(PL_rs, rslen);
8027         }
8028     }
8029
8030     rslast = rslen ? rsptr[rslen - 1] : '\0';
8031
8032     if (rspara) {               /* have to do this both before and after */
8033         do {                    /* to make sure file boundaries work right */
8034             if (PerlIO_eof(fp))
8035                 return 0;
8036             i = PerlIO_getc(fp);
8037             if (i != '\n') {
8038                 if (i == -1)
8039                     return 0;
8040                 PerlIO_ungetc(fp,i);
8041                 break;
8042             }
8043         } while (i != EOF);
8044     }
8045
8046     /* See if we know enough about I/O mechanism to cheat it ! */
8047
8048     /* This used to be #ifdef test - it is made run-time test for ease
8049        of abstracting out stdio interface. One call should be cheap
8050        enough here - and may even be a macro allowing compile
8051        time optimization.
8052      */
8053
8054     if (PerlIO_fast_gets(fp)) {
8055
8056     /*
8057      * We're going to steal some values from the stdio struct
8058      * and put EVERYTHING in the innermost loop into registers.
8059      */
8060     STDCHAR *ptr;
8061     STRLEN bpx;
8062     I32 shortbuffered;
8063
8064 #if defined(VMS) && defined(PERLIO_IS_STDIO)
8065     /* An ungetc()d char is handled separately from the regular
8066      * buffer, so we getc() it back out and stuff it in the buffer.
8067      */
8068     i = PerlIO_getc(fp);
8069     if (i == EOF) return 0;
8070     *(--((*fp)->_ptr)) = (unsigned char) i;
8071     (*fp)->_cnt++;
8072 #endif
8073
8074     /* Here is some breathtakingly efficient cheating */
8075
8076     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
8077     /* make sure we have the room */
8078     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8079         /* Not room for all of it
8080            if we are looking for a separator and room for some
8081          */
8082         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8083             /* just process what we have room for */
8084             shortbuffered = cnt - SvLEN(sv) + append + 1;
8085             cnt -= shortbuffered;
8086         }
8087         else {
8088             shortbuffered = 0;
8089             /* remember that cnt can be negative */
8090             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8091         }
8092     }
8093     else
8094         shortbuffered = 0;
8095     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8096     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8097     DEBUG_P(PerlIO_printf(Perl_debug_log,
8098         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8099     DEBUG_P(PerlIO_printf(Perl_debug_log,
8100         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8101                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8102                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8103     for (;;) {
8104       screamer:
8105         if (cnt > 0) {
8106             if (rslen) {
8107                 while (cnt > 0) {                    /* this     |  eat */
8108                     cnt--;
8109                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8110                         goto thats_all_folks;        /* screams  |  sed :-) */
8111                 }
8112             }
8113             else {
8114                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8115                 bp += cnt;                           /* screams  |  dust */
8116                 ptr += cnt;                          /* louder   |  sed :-) */
8117                 cnt = 0;
8118                 assert (!shortbuffered);
8119                 goto cannot_be_shortbuffered;
8120             }
8121         }
8122         
8123         if (shortbuffered) {            /* oh well, must extend */
8124             cnt = shortbuffered;
8125             shortbuffered = 0;
8126             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8127             SvCUR_set(sv, bpx);
8128             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8129             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8130             continue;
8131         }
8132
8133     cannot_be_shortbuffered:
8134         DEBUG_P(PerlIO_printf(Perl_debug_log,
8135                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
8136                               PTR2UV(ptr),(long)cnt));
8137         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8138
8139         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8140             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8141             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8142             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8143
8144         /* This used to call 'filbuf' in stdio form, but as that behaves like
8145            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8146            another abstraction.  */
8147         i   = PerlIO_getc(fp);          /* get more characters */
8148
8149         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8150             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8151             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8152             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8153
8154         cnt = PerlIO_get_cnt(fp);
8155         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8156         DEBUG_P(PerlIO_printf(Perl_debug_log,
8157             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8158
8159         if (i == EOF)                   /* all done for ever? */
8160             goto thats_really_all_folks;
8161
8162         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8163         SvCUR_set(sv, bpx);
8164         SvGROW(sv, bpx + cnt + 2);
8165         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8166
8167         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8168
8169         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8170             goto thats_all_folks;
8171     }
8172
8173 thats_all_folks:
8174     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8175           memNE((char*)bp - rslen, rsptr, rslen))
8176         goto screamer;                          /* go back to the fray */
8177 thats_really_all_folks:
8178     if (shortbuffered)
8179         cnt += shortbuffered;
8180         DEBUG_P(PerlIO_printf(Perl_debug_log,
8181             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8182     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8183     DEBUG_P(PerlIO_printf(Perl_debug_log,
8184         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8185         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8186         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8187     *bp = '\0';
8188     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8189     DEBUG_P(PerlIO_printf(Perl_debug_log,
8190         "Screamer: done, len=%ld, string=|%.*s|\n",
8191         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8192     }
8193    else
8194     {
8195        /*The big, slow, and stupid way. */
8196 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8197         STDCHAR *buf = NULL;
8198         Newx(buf, 8192, STDCHAR);
8199         assert(buf);
8200 #else
8201         STDCHAR buf[8192];
8202 #endif
8203
8204 screamer2:
8205         if (rslen) {
8206             const STDCHAR * const bpe = buf + sizeof(buf);
8207             bp = buf;
8208             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8209                 ; /* keep reading */
8210             cnt = bp - buf;
8211         }
8212         else {
8213             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8214             /* Accommodate broken VAXC compiler, which applies U8 cast to
8215              * both args of ?: operator, causing EOF to change into 255
8216              */
8217             if (cnt > 0)
8218                  i = (U8)buf[cnt - 1];
8219             else
8220                  i = EOF;
8221         }
8222
8223         if (cnt < 0)
8224             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8225         if (append)
8226             sv_catpvn_nomg(sv, (char *) buf, cnt);
8227         else
8228             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8229
8230         if (i != EOF &&                 /* joy */
8231             (!rslen ||
8232              SvCUR(sv) < rslen ||
8233              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8234         {
8235             append = -1;
8236             /*
8237              * If we're reading from a TTY and we get a short read,
8238              * indicating that the user hit his EOF character, we need
8239              * to notice it now, because if we try to read from the TTY
8240              * again, the EOF condition will disappear.
8241              *
8242              * The comparison of cnt to sizeof(buf) is an optimization
8243              * that prevents unnecessary calls to feof().
8244              *
8245              * - jik 9/25/96
8246              */
8247             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8248                 goto screamer2;
8249         }
8250
8251 #ifdef USE_HEAP_INSTEAD_OF_STACK
8252         Safefree(buf);
8253 #endif
8254     }
8255
8256     if (rspara) {               /* have to do this both before and after */
8257         while (i != EOF) {      /* to make sure file boundaries work right */
8258             i = PerlIO_getc(fp);
8259             if (i != '\n') {
8260                 PerlIO_ungetc(fp,i);
8261                 break;
8262             }
8263         }
8264     }
8265
8266     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8267 }
8268
8269 /*
8270 =for apidoc sv_inc
8271
8272 Auto-increment of the value in the SV, doing string to numeric conversion
8273 if necessary.  Handles 'get' magic and operator overloading.
8274
8275 =cut
8276 */
8277
8278 void
8279 Perl_sv_inc(pTHX_ SV *const sv)
8280 {
8281     if (!sv)
8282         return;
8283     SvGETMAGIC(sv);
8284     sv_inc_nomg(sv);
8285 }
8286
8287 /*
8288 =for apidoc sv_inc_nomg
8289
8290 Auto-increment of the value in the SV, doing string to numeric conversion
8291 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8292
8293 =cut
8294 */
8295
8296 void
8297 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8298 {
8299     dVAR;
8300     char *d;
8301     int flags;
8302
8303     if (!sv)
8304         return;
8305     if (SvTHINKFIRST(sv)) {
8306         if (SvREADONLY(sv)) {
8307                 Perl_croak_no_modify();
8308         }
8309         if (SvROK(sv)) {
8310             IV i;
8311             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8312                 return;
8313             i = PTR2IV(SvRV(sv));
8314             sv_unref(sv);
8315             sv_setiv(sv, i);
8316         }
8317         else sv_force_normal_flags(sv, 0);
8318     }
8319     flags = SvFLAGS(sv);
8320     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8321         /* It's (privately or publicly) a float, but not tested as an
8322            integer, so test it to see. */
8323         (void) SvIV(sv);
8324         flags = SvFLAGS(sv);
8325     }
8326     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8327         /* It's publicly an integer, or privately an integer-not-float */
8328 #ifdef PERL_PRESERVE_IVUV
8329       oops_its_int:
8330 #endif
8331         if (SvIsUV(sv)) {
8332             if (SvUVX(sv) == UV_MAX)
8333                 sv_setnv(sv, UV_MAX_P1);
8334             else
8335                 (void)SvIOK_only_UV(sv);
8336                 SvUV_set(sv, SvUVX(sv) + 1);
8337         } else {
8338             if (SvIVX(sv) == IV_MAX)
8339                 sv_setuv(sv, (UV)IV_MAX + 1);
8340             else {
8341                 (void)SvIOK_only(sv);
8342                 SvIV_set(sv, SvIVX(sv) + 1);
8343             }   
8344         }
8345         return;
8346     }
8347     if (flags & SVp_NOK) {
8348         const NV was = SvNVX(sv);
8349         if (NV_OVERFLOWS_INTEGERS_AT &&
8350             was >= NV_OVERFLOWS_INTEGERS_AT) {
8351             /* diag_listed_as: Lost precision when %s %f by 1 */
8352             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8353                            "Lost precision when incrementing %" NVff " by 1",
8354                            was);
8355         }
8356         (void)SvNOK_only(sv);
8357         SvNV_set(sv, was + 1.0);
8358         return;
8359     }
8360
8361     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8362         if ((flags & SVTYPEMASK) < SVt_PVIV)
8363             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8364         (void)SvIOK_only(sv);
8365         SvIV_set(sv, 1);
8366         return;
8367     }
8368     d = SvPVX(sv);
8369     while (isALPHA(*d)) d++;
8370     while (isDIGIT(*d)) d++;
8371     if (d < SvEND(sv)) {
8372         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8373 #ifdef PERL_PRESERVE_IVUV
8374         /* Got to punt this as an integer if needs be, but we don't issue
8375            warnings. Probably ought to make the sv_iv_please() that does
8376            the conversion if possible, and silently.  */
8377         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8378             /* Need to try really hard to see if it's an integer.
8379                9.22337203685478e+18 is an integer.
8380                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8381                so $a="9.22337203685478e+18"; $a+0; $a++
8382                needs to be the same as $a="9.22337203685478e+18"; $a++
8383                or we go insane. */
8384         
8385             (void) sv_2iv(sv);
8386             if (SvIOK(sv))
8387                 goto oops_its_int;
8388
8389             /* sv_2iv *should* have made this an NV */
8390             if (flags & SVp_NOK) {
8391                 (void)SvNOK_only(sv);
8392                 SvNV_set(sv, SvNVX(sv) + 1.0);
8393                 return;
8394             }
8395             /* I don't think we can get here. Maybe I should assert this
8396                And if we do get here I suspect that sv_setnv will croak. NWC
8397                Fall through. */
8398 #if defined(USE_LONG_DOUBLE)
8399             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",
8400                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8401 #else
8402             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8403                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8404 #endif
8405         }
8406 #endif /* PERL_PRESERVE_IVUV */
8407         if (!numtype && ckWARN(WARN_NUMERIC))
8408             not_incrementable(sv);
8409         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8410         return;
8411     }
8412     d--;
8413     while (d >= SvPVX_const(sv)) {
8414         if (isDIGIT(*d)) {
8415             if (++*d <= '9')
8416                 return;
8417             *(d--) = '0';
8418         }
8419         else {
8420 #ifdef EBCDIC
8421             /* MKS: The original code here died if letters weren't consecutive.
8422              * at least it didn't have to worry about non-C locales.  The
8423              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8424              * arranged in order (although not consecutively) and that only
8425              * [A-Za-z] are accepted by isALPHA in the C locale.
8426              */
8427             if (*d != 'z' && *d != 'Z') {
8428                 do { ++*d; } while (!isALPHA(*d));
8429                 return;
8430             }
8431             *(d--) -= 'z' - 'a';
8432 #else
8433             ++*d;
8434             if (isALPHA(*d))
8435                 return;
8436             *(d--) -= 'z' - 'a' + 1;
8437 #endif
8438         }
8439     }
8440     /* oh,oh, the number grew */
8441     SvGROW(sv, SvCUR(sv) + 2);
8442     SvCUR_set(sv, SvCUR(sv) + 1);
8443     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8444         *d = d[-1];
8445     if (isDIGIT(d[1]))
8446         *d = '1';
8447     else
8448         *d = d[1];
8449 }
8450
8451 /*
8452 =for apidoc sv_dec
8453
8454 Auto-decrement of the value in the SV, doing string to numeric conversion
8455 if necessary.  Handles 'get' magic and operator overloading.
8456
8457 =cut
8458 */
8459
8460 void
8461 Perl_sv_dec(pTHX_ SV *const sv)
8462 {
8463     dVAR;
8464     if (!sv)
8465         return;
8466     SvGETMAGIC(sv);
8467     sv_dec_nomg(sv);
8468 }
8469
8470 /*
8471 =for apidoc sv_dec_nomg
8472
8473 Auto-decrement of the value in the SV, doing string to numeric conversion
8474 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8475
8476 =cut
8477 */
8478
8479 void
8480 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8481 {
8482     dVAR;
8483     int flags;
8484
8485     if (!sv)
8486         return;
8487     if (SvTHINKFIRST(sv)) {
8488         if (SvREADONLY(sv)) {
8489                 Perl_croak_no_modify();
8490         }
8491         if (SvROK(sv)) {
8492             IV i;
8493             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8494                 return;
8495             i = PTR2IV(SvRV(sv));
8496             sv_unref(sv);
8497             sv_setiv(sv, i);
8498         }
8499         else sv_force_normal_flags(sv, 0);
8500     }
8501     /* Unlike sv_inc we don't have to worry about string-never-numbers
8502        and keeping them magic. But we mustn't warn on punting */
8503     flags = SvFLAGS(sv);
8504     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8505         /* It's publicly an integer, or privately an integer-not-float */
8506 #ifdef PERL_PRESERVE_IVUV
8507       oops_its_int:
8508 #endif
8509         if (SvIsUV(sv)) {
8510             if (SvUVX(sv) == 0) {
8511                 (void)SvIOK_only(sv);
8512                 SvIV_set(sv, -1);
8513             }
8514             else {
8515                 (void)SvIOK_only_UV(sv);
8516                 SvUV_set(sv, SvUVX(sv) - 1);
8517             }   
8518         } else {
8519             if (SvIVX(sv) == IV_MIN) {
8520                 sv_setnv(sv, (NV)IV_MIN);
8521                 goto oops_its_num;
8522             }
8523             else {
8524                 (void)SvIOK_only(sv);
8525                 SvIV_set(sv, SvIVX(sv) - 1);
8526             }   
8527         }
8528         return;
8529     }
8530     if (flags & SVp_NOK) {
8531     oops_its_num:
8532         {
8533             const NV was = SvNVX(sv);
8534             if (NV_OVERFLOWS_INTEGERS_AT &&
8535                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8536                 /* diag_listed_as: Lost precision when %s %f by 1 */
8537                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8538                                "Lost precision when decrementing %" NVff " by 1",
8539                                was);
8540             }
8541             (void)SvNOK_only(sv);
8542             SvNV_set(sv, was - 1.0);
8543             return;
8544         }
8545     }
8546     if (!(flags & SVp_POK)) {
8547         if ((flags & SVTYPEMASK) < SVt_PVIV)
8548             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8549         SvIV_set(sv, -1);
8550         (void)SvIOK_only(sv);
8551         return;
8552     }
8553 #ifdef PERL_PRESERVE_IVUV
8554     {
8555         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8556         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8557             /* Need to try really hard to see if it's an integer.
8558                9.22337203685478e+18 is an integer.
8559                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8560                so $a="9.22337203685478e+18"; $a+0; $a--
8561                needs to be the same as $a="9.22337203685478e+18"; $a--
8562                or we go insane. */
8563         
8564             (void) sv_2iv(sv);
8565             if (SvIOK(sv))
8566                 goto oops_its_int;
8567
8568             /* sv_2iv *should* have made this an NV */
8569             if (flags & SVp_NOK) {
8570                 (void)SvNOK_only(sv);
8571                 SvNV_set(sv, SvNVX(sv) - 1.0);
8572                 return;
8573             }
8574             /* I don't think we can get here. Maybe I should assert this
8575                And if we do get here I suspect that sv_setnv will croak. NWC
8576                Fall through. */
8577 #if defined(USE_LONG_DOUBLE)
8578             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",
8579                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8580 #else
8581             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8582                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8583 #endif
8584         }
8585     }
8586 #endif /* PERL_PRESERVE_IVUV */
8587     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8588 }
8589
8590 /* this define is used to eliminate a chunk of duplicated but shared logic
8591  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8592  * used anywhere but here - yves
8593  */
8594 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8595     STMT_START {      \
8596         EXTEND_MORTAL(1); \
8597         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8598     } STMT_END
8599
8600 /*
8601 =for apidoc sv_mortalcopy
8602
8603 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8604 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8605 explicit call to FREETMPS, or by an implicit call at places such as
8606 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8607
8608 =cut
8609 */
8610
8611 /* Make a string that will exist for the duration of the expression
8612  * evaluation.  Actually, it may have to last longer than that, but
8613  * hopefully we won't free it until it has been assigned to a
8614  * permanent location. */
8615
8616 SV *
8617 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8618 {
8619     dVAR;
8620     SV *sv;
8621
8622     if (flags & SV_GMAGIC)
8623         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8624     new_SV(sv);
8625     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8626     PUSH_EXTEND_MORTAL__SV_C(sv);
8627     SvTEMP_on(sv);
8628     return sv;
8629 }
8630
8631 /*
8632 =for apidoc sv_newmortal
8633
8634 Creates a new null SV which is mortal.  The reference count of the SV is
8635 set to 1.  It will be destroyed "soon", either by an explicit call to
8636 FREETMPS, or by an implicit call at places such as statement boundaries.
8637 See also C<sv_mortalcopy> and C<sv_2mortal>.
8638
8639 =cut
8640 */
8641
8642 SV *
8643 Perl_sv_newmortal(pTHX)
8644 {
8645     dVAR;
8646     SV *sv;
8647
8648     new_SV(sv);
8649     SvFLAGS(sv) = SVs_TEMP;
8650     PUSH_EXTEND_MORTAL__SV_C(sv);
8651     return sv;
8652 }
8653
8654
8655 /*
8656 =for apidoc newSVpvn_flags
8657
8658 Creates a new SV and copies a string into it.  The reference count for the
8659 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8660 string.  You are responsible for ensuring that the source string is at least
8661 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8662 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8663 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8664 returning.  If C<SVf_UTF8> is set, C<s>
8665 is considered to be in UTF-8 and the
8666 C<SVf_UTF8> flag will be set on the new SV.
8667 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8668
8669     #define newSVpvn_utf8(s, len, u)                    \
8670         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8671
8672 =cut
8673 */
8674
8675 SV *
8676 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8677 {
8678     dVAR;
8679     SV *sv;
8680
8681     /* All the flags we don't support must be zero.
8682        And we're new code so I'm going to assert this from the start.  */
8683     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8684     new_SV(sv);
8685     sv_setpvn(sv,s,len);
8686
8687     /* This code used to do a sv_2mortal(), however we now unroll the call to
8688      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8689      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8690      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8691      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8692      * means that we eliminate quite a few steps than it looks - Yves
8693      * (explaining patch by gfx) */
8694
8695     SvFLAGS(sv) |= flags;
8696
8697     if(flags & SVs_TEMP){
8698         PUSH_EXTEND_MORTAL__SV_C(sv);
8699     }
8700
8701     return sv;
8702 }
8703
8704 /*
8705 =for apidoc sv_2mortal
8706
8707 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8708 by an explicit call to FREETMPS, or by an implicit call at places such as
8709 statement boundaries.  SvTEMP() is turned on which means that the SV's
8710 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8711 and C<sv_mortalcopy>.
8712
8713 =cut
8714 */
8715
8716 SV *
8717 Perl_sv_2mortal(pTHX_ SV *const sv)
8718 {
8719     dVAR;
8720     if (!sv)
8721         return NULL;
8722     if (SvIMMORTAL(sv))
8723         return sv;
8724     PUSH_EXTEND_MORTAL__SV_C(sv);
8725     SvTEMP_on(sv);
8726     return sv;
8727 }
8728
8729 /*
8730 =for apidoc newSVpv
8731
8732 Creates a new SV and copies a string into it.  The reference count for the
8733 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8734 strlen().  For efficiency, consider using C<newSVpvn> instead.
8735
8736 =cut
8737 */
8738
8739 SV *
8740 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8741 {
8742     dVAR;
8743     SV *sv;
8744
8745     new_SV(sv);
8746     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8747     return sv;
8748 }
8749
8750 /*
8751 =for apidoc newSVpvn
8752
8753 Creates a new SV and copies a buffer into it, which may contain NUL characters
8754 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8755 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8756 are responsible for ensuring that the source buffer is at least
8757 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8758 undefined.
8759
8760 =cut
8761 */
8762
8763 SV *
8764 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8765 {
8766     dVAR;
8767     SV *sv;
8768
8769     new_SV(sv);
8770     sv_setpvn(sv,buffer,len);
8771     return sv;
8772 }
8773
8774 /*
8775 =for apidoc newSVhek
8776
8777 Creates a new SV from the hash key structure.  It will generate scalars that
8778 point to the shared string table where possible.  Returns a new (undefined)
8779 SV if the hek is NULL.
8780
8781 =cut
8782 */
8783
8784 SV *
8785 Perl_newSVhek(pTHX_ const HEK *const hek)
8786 {
8787     dVAR;
8788     if (!hek) {
8789         SV *sv;
8790
8791         new_SV(sv);
8792         return sv;
8793     }
8794
8795     if (HEK_LEN(hek) == HEf_SVKEY) {
8796         return newSVsv(*(SV**)HEK_KEY(hek));
8797     } else {
8798         const int flags = HEK_FLAGS(hek);
8799         if (flags & HVhek_WASUTF8) {
8800             /* Trouble :-)
8801                Andreas would like keys he put in as utf8 to come back as utf8
8802             */
8803             STRLEN utf8_len = HEK_LEN(hek);
8804             SV * const sv = newSV_type(SVt_PV);
8805             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8806             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8807             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8808             SvUTF8_on (sv);
8809             return sv;
8810         } else if (flags & HVhek_UNSHARED) {
8811             /* A hash that isn't using shared hash keys has to have
8812                the flag in every key so that we know not to try to call
8813                share_hek_hek on it.  */
8814
8815             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8816             if (HEK_UTF8(hek))
8817                 SvUTF8_on (sv);
8818             return sv;
8819         }
8820         /* This will be overwhelminly the most common case.  */
8821         {
8822             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8823                more efficient than sharepvn().  */
8824             SV *sv;
8825
8826             new_SV(sv);
8827             sv_upgrade(sv, SVt_PV);
8828             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8829             SvCUR_set(sv, HEK_LEN(hek));
8830             SvLEN_set(sv, 0);
8831             SvIsCOW_on(sv);
8832             SvPOK_on(sv);
8833             if (HEK_UTF8(hek))
8834                 SvUTF8_on(sv);
8835             return sv;
8836         }
8837     }
8838 }
8839
8840 /*
8841 =for apidoc newSVpvn_share
8842
8843 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8844 table.  If the string does not already exist in the table, it is
8845 created first.  Turns on the SvIsCOW flag (or READONLY
8846 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8847 is non-zero, that value is used; otherwise the hash is computed.
8848 The string's hash can later be retrieved from the SV
8849 with the C<SvSHARED_HASH()> macro.  The idea here is
8850 that as the string table is used for shared hash keys these strings will have
8851 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8852
8853 =cut
8854 */
8855
8856 SV *
8857 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8858 {
8859     dVAR;
8860     SV *sv;
8861     bool is_utf8 = FALSE;
8862     const char *const orig_src = src;
8863
8864     if (len < 0) {
8865         STRLEN tmplen = -len;
8866         is_utf8 = TRUE;
8867         /* See the note in hv.c:hv_fetch() --jhi */
8868         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8869         len = tmplen;
8870     }
8871     if (!hash)
8872         PERL_HASH(hash, src, len);
8873     new_SV(sv);
8874     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8875        changes here, update it there too.  */
8876     sv_upgrade(sv, SVt_PV);
8877     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8878     SvCUR_set(sv, len);
8879     SvLEN_set(sv, 0);
8880     SvIsCOW_on(sv);
8881     SvPOK_on(sv);
8882     if (is_utf8)
8883         SvUTF8_on(sv);
8884     if (src != orig_src)
8885         Safefree(src);
8886     return sv;
8887 }
8888
8889 /*
8890 =for apidoc newSVpv_share
8891
8892 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8893 string/length pair.
8894
8895 =cut
8896 */
8897
8898 SV *
8899 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8900 {
8901     return newSVpvn_share(src, strlen(src), hash);
8902 }
8903
8904 #if defined(PERL_IMPLICIT_CONTEXT)
8905
8906 /* pTHX_ magic can't cope with varargs, so this is a no-context
8907  * version of the main function, (which may itself be aliased to us).
8908  * Don't access this version directly.
8909  */
8910
8911 SV *
8912 Perl_newSVpvf_nocontext(const char *const pat, ...)
8913 {
8914     dTHX;
8915     SV *sv;
8916     va_list args;
8917
8918     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8919
8920     va_start(args, pat);
8921     sv = vnewSVpvf(pat, &args);
8922     va_end(args);
8923     return sv;
8924 }
8925 #endif
8926
8927 /*
8928 =for apidoc newSVpvf
8929
8930 Creates a new SV and initializes it with the string formatted like
8931 C<sprintf>.
8932
8933 =cut
8934 */
8935
8936 SV *
8937 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8938 {
8939     SV *sv;
8940     va_list args;
8941
8942     PERL_ARGS_ASSERT_NEWSVPVF;
8943
8944     va_start(args, pat);
8945     sv = vnewSVpvf(pat, &args);
8946     va_end(args);
8947     return sv;
8948 }
8949
8950 /* backend for newSVpvf() and newSVpvf_nocontext() */
8951
8952 SV *
8953 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8954 {
8955     dVAR;
8956     SV *sv;
8957
8958     PERL_ARGS_ASSERT_VNEWSVPVF;
8959
8960     new_SV(sv);
8961     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8962     return sv;
8963 }
8964
8965 /*
8966 =for apidoc newSVnv
8967
8968 Creates a new SV and copies a floating point value into it.
8969 The reference count for the SV is set to 1.
8970
8971 =cut
8972 */
8973
8974 SV *
8975 Perl_newSVnv(pTHX_ const NV n)
8976 {
8977     dVAR;
8978     SV *sv;
8979
8980     new_SV(sv);
8981     sv_setnv(sv,n);
8982     return sv;
8983 }
8984
8985 /*
8986 =for apidoc newSViv
8987
8988 Creates a new SV and copies an integer into it.  The reference count for the
8989 SV is set to 1.
8990
8991 =cut
8992 */
8993
8994 SV *
8995 Perl_newSViv(pTHX_ const IV i)
8996 {
8997     dVAR;
8998     SV *sv;
8999
9000     new_SV(sv);
9001     sv_setiv(sv,i);
9002     return sv;
9003 }
9004
9005 /*
9006 =for apidoc newSVuv
9007
9008 Creates a new SV and copies an unsigned integer into it.
9009 The reference count for the SV is set to 1.
9010
9011 =cut
9012 */
9013
9014 SV *
9015 Perl_newSVuv(pTHX_ const UV u)
9016 {
9017     dVAR;
9018     SV *sv;
9019
9020     new_SV(sv);
9021     sv_setuv(sv,u);
9022     return sv;
9023 }
9024
9025 /*
9026 =for apidoc newSV_type
9027
9028 Creates a new SV, of the type specified.  The reference count for the new SV
9029 is set to 1.
9030
9031 =cut
9032 */
9033
9034 SV *
9035 Perl_newSV_type(pTHX_ const svtype type)
9036 {
9037     SV *sv;
9038
9039     new_SV(sv);
9040     sv_upgrade(sv, type);
9041     return sv;
9042 }
9043
9044 /*
9045 =for apidoc newRV_noinc
9046
9047 Creates an RV wrapper for an SV.  The reference count for the original
9048 SV is B<not> incremented.
9049
9050 =cut
9051 */
9052
9053 SV *
9054 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9055 {
9056     dVAR;
9057     SV *sv = newSV_type(SVt_IV);
9058
9059     PERL_ARGS_ASSERT_NEWRV_NOINC;
9060
9061     SvTEMP_off(tmpRef);
9062     SvRV_set(sv, tmpRef);
9063     SvROK_on(sv);
9064     return sv;
9065 }
9066
9067 /* newRV_inc is the official function name to use now.
9068  * newRV_inc is in fact #defined to newRV in sv.h
9069  */
9070
9071 SV *
9072 Perl_newRV(pTHX_ SV *const sv)
9073 {
9074     dVAR;
9075
9076     PERL_ARGS_ASSERT_NEWRV;
9077
9078     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9079 }
9080
9081 /*
9082 =for apidoc newSVsv
9083
9084 Creates a new SV which is an exact duplicate of the original SV.
9085 (Uses C<sv_setsv>.)
9086
9087 =cut
9088 */
9089
9090 SV *
9091 Perl_newSVsv(pTHX_ SV *const old)
9092 {
9093     dVAR;
9094     SV *sv;
9095
9096     if (!old)
9097         return NULL;
9098     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9099         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9100         return NULL;
9101     }
9102     /* Do this here, otherwise we leak the new SV if this croaks. */
9103     SvGETMAGIC(old);
9104     new_SV(sv);
9105     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9106        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9107     sv_setsv_flags(sv, old, SV_NOSTEAL);
9108     return sv;
9109 }
9110
9111 /*
9112 =for apidoc sv_reset
9113
9114 Underlying implementation for the C<reset> Perl function.
9115 Note that the perl-level function is vaguely deprecated.
9116
9117 =cut
9118 */
9119
9120 void
9121 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9122 {
9123     PERL_ARGS_ASSERT_SV_RESET;
9124
9125     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9126 }
9127
9128 void
9129 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9130 {
9131     dVAR;
9132     char todo[PERL_UCHAR_MAX+1];
9133     const char *send;
9134
9135     if (!stash || SvTYPE(stash) != SVt_PVHV)
9136         return;
9137
9138     if (!s) {           /* reset ?? searches */
9139         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9140         if (mg) {
9141             const U32 count = mg->mg_len / sizeof(PMOP**);
9142             PMOP **pmp = (PMOP**) mg->mg_ptr;
9143             PMOP *const *const end = pmp + count;
9144
9145             while (pmp < end) {
9146 #ifdef USE_ITHREADS
9147                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9148 #else
9149                 (*pmp)->op_pmflags &= ~PMf_USED;
9150 #endif
9151                 ++pmp;
9152             }
9153         }
9154         return;
9155     }
9156
9157     /* reset variables */
9158
9159     if (!HvARRAY(stash))
9160         return;
9161
9162     Zero(todo, 256, char);
9163     send = s + len;
9164     while (s < send) {
9165         I32 max;
9166         I32 i = (unsigned char)*s;
9167         if (s[1] == '-') {
9168             s += 2;
9169         }
9170         max = (unsigned char)*s++;
9171         for ( ; i <= max; i++) {
9172             todo[i] = 1;
9173         }
9174         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9175             HE *entry;
9176             for (entry = HvARRAY(stash)[i];
9177                  entry;
9178                  entry = HeNEXT(entry))
9179             {
9180                 GV *gv;
9181                 SV *sv;
9182
9183                 if (!todo[(U8)*HeKEY(entry)])
9184                     continue;
9185                 gv = MUTABLE_GV(HeVAL(entry));
9186                 sv = GvSV(gv);
9187                 if (sv && !SvREADONLY(sv)) {
9188                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9189                     if (!isGV(sv)) SvOK_off(sv);
9190                 }
9191                 if (GvAV(gv)) {
9192                     av_clear(GvAV(gv));
9193                 }
9194                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9195                     hv_clear(GvHV(gv));
9196                 }
9197             }
9198         }
9199     }
9200 }
9201
9202 /*
9203 =for apidoc sv_2io
9204
9205 Using various gambits, try to get an IO from an SV: the IO slot if its a
9206 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9207 named after the PV if we're a string.
9208
9209 'Get' magic is ignored on the sv passed in, but will be called on
9210 C<SvRV(sv)> if sv is an RV.
9211
9212 =cut
9213 */
9214
9215 IO*
9216 Perl_sv_2io(pTHX_ SV *const sv)
9217 {
9218     IO* io;
9219     GV* gv;
9220
9221     PERL_ARGS_ASSERT_SV_2IO;
9222
9223     switch (SvTYPE(sv)) {
9224     case SVt_PVIO:
9225         io = MUTABLE_IO(sv);
9226         break;
9227     case SVt_PVGV:
9228     case SVt_PVLV:
9229         if (isGV_with_GP(sv)) {
9230             gv = MUTABLE_GV(sv);
9231             io = GvIO(gv);
9232             if (!io)
9233                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9234                                     HEKfARG(GvNAME_HEK(gv)));
9235             break;
9236         }
9237         /* FALL THROUGH */
9238     default:
9239         if (!SvOK(sv))
9240             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9241         if (SvROK(sv)) {
9242             SvGETMAGIC(SvRV(sv));
9243             return sv_2io(SvRV(sv));
9244         }
9245         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9246         if (gv)
9247             io = GvIO(gv);
9248         else
9249             io = 0;
9250         if (!io) {
9251             SV *newsv = sv;
9252             if (SvGMAGICAL(sv)) {
9253                 newsv = sv_newmortal();
9254                 sv_setsv_nomg(newsv, sv);
9255             }
9256             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9257         }
9258         break;
9259     }
9260     return io;
9261 }
9262
9263 /*
9264 =for apidoc sv_2cv
9265
9266 Using various gambits, try to get a CV from an SV; in addition, try if
9267 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9268 The flags in C<lref> are passed to gv_fetchsv.
9269
9270 =cut
9271 */
9272
9273 CV *
9274 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9275 {
9276     dVAR;
9277     GV *gv = NULL;
9278     CV *cv = NULL;
9279
9280     PERL_ARGS_ASSERT_SV_2CV;
9281
9282     if (!sv) {
9283         *st = NULL;
9284         *gvp = NULL;
9285         return NULL;
9286     }
9287     switch (SvTYPE(sv)) {
9288     case SVt_PVCV:
9289         *st = CvSTASH(sv);
9290         *gvp = NULL;
9291         return MUTABLE_CV(sv);
9292     case SVt_PVHV:
9293     case SVt_PVAV:
9294         *st = NULL;
9295         *gvp = NULL;
9296         return NULL;
9297     default:
9298         SvGETMAGIC(sv);
9299         if (SvROK(sv)) {
9300             if (SvAMAGIC(sv))
9301                 sv = amagic_deref_call(sv, to_cv_amg);
9302
9303             sv = SvRV(sv);
9304             if (SvTYPE(sv) == SVt_PVCV) {
9305                 cv = MUTABLE_CV(sv);
9306                 *gvp = NULL;
9307                 *st = CvSTASH(cv);
9308                 return cv;
9309             }
9310             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9311                 gv = MUTABLE_GV(sv);
9312             else
9313                 Perl_croak(aTHX_ "Not a subroutine reference");
9314         }
9315         else if (isGV_with_GP(sv)) {
9316             gv = MUTABLE_GV(sv);
9317         }
9318         else {
9319             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9320         }
9321         *gvp = gv;
9322         if (!gv) {
9323             *st = NULL;
9324             return NULL;
9325         }
9326         /* Some flags to gv_fetchsv mean don't really create the GV  */
9327         if (!isGV_with_GP(gv)) {
9328             *st = NULL;
9329             return NULL;
9330         }
9331         *st = GvESTASH(gv);
9332         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9333             /* XXX this is probably not what they think they're getting.
9334              * It has the same effect as "sub name;", i.e. just a forward
9335              * declaration! */
9336             newSTUB(gv,0);
9337         }
9338         return GvCVu(gv);
9339     }
9340 }
9341
9342 /*
9343 =for apidoc sv_true
9344
9345 Returns true if the SV has a true value by Perl's rules.
9346 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9347 instead use an in-line version.
9348
9349 =cut
9350 */
9351
9352 I32
9353 Perl_sv_true(pTHX_ SV *const sv)
9354 {
9355     if (!sv)
9356         return 0;
9357     if (SvPOK(sv)) {
9358         const XPV* const tXpv = (XPV*)SvANY(sv);
9359         if (tXpv &&
9360                 (tXpv->xpv_cur > 1 ||
9361                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9362             return 1;
9363         else
9364             return 0;
9365     }
9366     else {
9367         if (SvIOK(sv))
9368             return SvIVX(sv) != 0;
9369         else {
9370             if (SvNOK(sv))
9371                 return SvNVX(sv) != 0.0;
9372             else
9373                 return sv_2bool(sv);
9374         }
9375     }
9376 }
9377
9378 /*
9379 =for apidoc sv_pvn_force
9380
9381 Get a sensible string out of the SV somehow.
9382 A private implementation of the C<SvPV_force> macro for compilers which
9383 can't cope with complex macro expressions.  Always use the macro instead.
9384
9385 =for apidoc sv_pvn_force_flags
9386
9387 Get a sensible string out of the SV somehow.
9388 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9389 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9390 implemented in terms of this function.
9391 You normally want to use the various wrapper macros instead: see
9392 C<SvPV_force> and C<SvPV_force_nomg>
9393
9394 =cut
9395 */
9396
9397 char *
9398 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9399 {
9400     dVAR;
9401
9402     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9403
9404     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9405     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9406         sv_force_normal_flags(sv, 0);
9407
9408     if (SvPOK(sv)) {
9409         if (lp)
9410             *lp = SvCUR(sv);
9411     }
9412     else {
9413         char *s;
9414         STRLEN len;
9415  
9416         if (SvTYPE(sv) > SVt_PVLV
9417             || isGV_with_GP(sv))
9418             /* diag_listed_as: Can't coerce %s to %s in %s */
9419             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9420                 OP_DESC(PL_op));
9421         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9422         if (!s) {
9423           s = (char *)"";
9424         }
9425         if (lp)
9426             *lp = len;
9427
9428         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9429             if (SvROK(sv))
9430                 sv_unref(sv);
9431             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9432             SvGROW(sv, len + 1);
9433             Move(s,SvPVX(sv),len,char);
9434             SvCUR_set(sv, len);
9435             SvPVX(sv)[len] = '\0';
9436         }
9437         if (!SvPOK(sv)) {
9438             SvPOK_on(sv);               /* validate pointer */
9439             SvTAINT(sv);
9440             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9441                                   PTR2UV(sv),SvPVX_const(sv)));
9442         }
9443     }
9444     (void)SvPOK_only_UTF8(sv);
9445     return SvPVX_mutable(sv);
9446 }
9447
9448 /*
9449 =for apidoc sv_pvbyten_force
9450
9451 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9452 instead.
9453
9454 =cut
9455 */
9456
9457 char *
9458 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9459 {
9460     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9461
9462     sv_pvn_force(sv,lp);
9463     sv_utf8_downgrade(sv,0);
9464     *lp = SvCUR(sv);
9465     return SvPVX(sv);
9466 }
9467
9468 /*
9469 =for apidoc sv_pvutf8n_force
9470
9471 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9472 instead.
9473
9474 =cut
9475 */
9476
9477 char *
9478 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9479 {
9480     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9481
9482     sv_pvn_force(sv,0);
9483     sv_utf8_upgrade_nomg(sv);
9484     *lp = SvCUR(sv);
9485     return SvPVX(sv);
9486 }
9487
9488 /*
9489 =for apidoc sv_reftype
9490
9491 Returns a string describing what the SV is a reference to.
9492
9493 =cut
9494 */
9495
9496 const char *
9497 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9498 {
9499     PERL_ARGS_ASSERT_SV_REFTYPE;
9500     if (ob && SvOBJECT(sv)) {
9501         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9502     }
9503     else {
9504         switch (SvTYPE(sv)) {
9505         case SVt_NULL:
9506         case SVt_IV:
9507         case SVt_NV:
9508         case SVt_PV:
9509         case SVt_PVIV:
9510         case SVt_PVNV:
9511         case SVt_PVMG:
9512                                 if (SvVOK(sv))
9513                                     return "VSTRING";
9514                                 if (SvROK(sv))
9515                                     return "REF";
9516                                 else
9517                                     return "SCALAR";
9518
9519         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9520                                 /* tied lvalues should appear to be
9521                                  * scalars for backwards compatibility */
9522                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9523                                     ? "SCALAR" : "LVALUE");
9524         case SVt_PVAV:          return "ARRAY";
9525         case SVt_PVHV:          return "HASH";
9526         case SVt_PVCV:          return "CODE";
9527         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9528                                     ? "GLOB" : "SCALAR");
9529         case SVt_PVFM:          return "FORMAT";
9530         case SVt_PVIO:          return "IO";
9531         case SVt_INVLIST:       return "INVLIST";
9532         case SVt_REGEXP:        return "REGEXP";
9533         default:                return "UNKNOWN";
9534         }
9535     }
9536 }
9537
9538 /*
9539 =for apidoc sv_ref
9540
9541 Returns a SV describing what the SV passed in is a reference to.
9542
9543 =cut
9544 */
9545
9546 SV *
9547 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9548 {
9549     PERL_ARGS_ASSERT_SV_REF;
9550
9551     if (!dst)
9552         dst = sv_newmortal();
9553
9554     if (ob && SvOBJECT(sv)) {
9555         HvNAME_get(SvSTASH(sv))
9556                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9557                     : sv_setpvn(dst, "__ANON__", 8);
9558     }
9559     else {
9560         const char * reftype = sv_reftype(sv, 0);
9561         sv_setpv(dst, reftype);
9562     }
9563     return dst;
9564 }
9565
9566 /*
9567 =for apidoc sv_isobject
9568
9569 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9570 object.  If the SV is not an RV, or if the object is not blessed, then this
9571 will return false.
9572
9573 =cut
9574 */
9575
9576 int
9577 Perl_sv_isobject(pTHX_ SV *sv)
9578 {
9579     if (!sv)
9580         return 0;
9581     SvGETMAGIC(sv);
9582     if (!SvROK(sv))
9583         return 0;
9584     sv = SvRV(sv);
9585     if (!SvOBJECT(sv))
9586         return 0;
9587     return 1;
9588 }
9589
9590 /*
9591 =for apidoc sv_isa
9592
9593 Returns a boolean indicating whether the SV is blessed into the specified
9594 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9595 an inheritance relationship.
9596
9597 =cut
9598 */
9599
9600 int
9601 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9602 {
9603     const char *hvname;
9604
9605     PERL_ARGS_ASSERT_SV_ISA;
9606
9607     if (!sv)
9608         return 0;
9609     SvGETMAGIC(sv);
9610     if (!SvROK(sv))
9611         return 0;
9612     sv = SvRV(sv);
9613     if (!SvOBJECT(sv))
9614         return 0;
9615     hvname = HvNAME_get(SvSTASH(sv));
9616     if (!hvname)
9617         return 0;
9618
9619     return strEQ(hvname, name);
9620 }
9621
9622 /*
9623 =for apidoc newSVrv
9624
9625 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9626 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9627 SV will be blessed in the specified package.  The new SV is returned and its
9628 reference count is 1. The reference count 1 is owned by C<rv>.
9629
9630 =cut
9631 */
9632
9633 SV*
9634 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9635 {
9636     dVAR;
9637     SV *sv;
9638
9639     PERL_ARGS_ASSERT_NEWSVRV;
9640
9641     new_SV(sv);
9642
9643     SV_CHECK_THINKFIRST_COW_DROP(rv);
9644
9645     if (SvTYPE(rv) >= SVt_PVMG) {
9646         const U32 refcnt = SvREFCNT(rv);
9647         SvREFCNT(rv) = 0;
9648         sv_clear(rv);
9649         SvFLAGS(rv) = 0;
9650         SvREFCNT(rv) = refcnt;
9651
9652         sv_upgrade(rv, SVt_IV);
9653     } else if (SvROK(rv)) {
9654         SvREFCNT_dec(SvRV(rv));
9655     } else {
9656         prepare_SV_for_RV(rv);
9657     }
9658
9659     SvOK_off(rv);
9660     SvRV_set(rv, sv);
9661     SvROK_on(rv);
9662
9663     if (classname) {
9664         HV* const stash = gv_stashpv(classname, GV_ADD);
9665         (void)sv_bless(rv, stash);
9666     }
9667     return sv;
9668 }
9669
9670 /*
9671 =for apidoc sv_setref_pv
9672
9673 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9674 argument will be upgraded to an RV.  That RV will be modified to point to
9675 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9676 into the SV.  The C<classname> argument indicates the package for the
9677 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9678 will have a reference count of 1, and the RV will be returned.
9679
9680 Do not use with other Perl types such as HV, AV, SV, CV, because those
9681 objects will become corrupted by the pointer copy process.
9682
9683 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9684
9685 =cut
9686 */
9687
9688 SV*
9689 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9690 {
9691     dVAR;
9692
9693     PERL_ARGS_ASSERT_SV_SETREF_PV;
9694
9695     if (!pv) {
9696         sv_setsv(rv, &PL_sv_undef);
9697         SvSETMAGIC(rv);
9698     }
9699     else
9700         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9701     return rv;
9702 }
9703
9704 /*
9705 =for apidoc sv_setref_iv
9706
9707 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9708 argument will be upgraded to an RV.  That RV will be modified to point to
9709 the new SV.  The C<classname> argument indicates the package for the
9710 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9711 will have a reference count of 1, and the RV will be returned.
9712
9713 =cut
9714 */
9715
9716 SV*
9717 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9718 {
9719     PERL_ARGS_ASSERT_SV_SETREF_IV;
9720
9721     sv_setiv(newSVrv(rv,classname), iv);
9722     return rv;
9723 }
9724
9725 /*
9726 =for apidoc sv_setref_uv
9727
9728 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9729 argument will be upgraded to an RV.  That RV will be modified to point to
9730 the new SV.  The C<classname> argument indicates the package for the
9731 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9732 will have a reference count of 1, and the RV will be returned.
9733
9734 =cut
9735 */
9736
9737 SV*
9738 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9739 {
9740     PERL_ARGS_ASSERT_SV_SETREF_UV;
9741
9742     sv_setuv(newSVrv(rv,classname), uv);
9743     return rv;
9744 }
9745
9746 /*
9747 =for apidoc sv_setref_nv
9748
9749 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9750 argument will be upgraded to an RV.  That RV will be modified to point to
9751 the new SV.  The C<classname> argument indicates the package for the
9752 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9753 will have a reference count of 1, and the RV will be returned.
9754
9755 =cut
9756 */
9757
9758 SV*
9759 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9760 {
9761     PERL_ARGS_ASSERT_SV_SETREF_NV;
9762
9763     sv_setnv(newSVrv(rv,classname), nv);
9764     return rv;
9765 }
9766
9767 /*
9768 =for apidoc sv_setref_pvn
9769
9770 Copies a string into a new SV, optionally blessing the SV.  The length of the
9771 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9772 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9773 argument indicates the package for the blessing.  Set C<classname> to
9774 C<NULL> to avoid the blessing.  The new SV will have a reference count
9775 of 1, and the RV will be returned.
9776
9777 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9778
9779 =cut
9780 */
9781
9782 SV*
9783 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9784                    const char *const pv, const STRLEN n)
9785 {
9786     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9787
9788     sv_setpvn(newSVrv(rv,classname), pv, n);
9789     return rv;
9790 }
9791
9792 /*
9793 =for apidoc sv_bless
9794
9795 Blesses an SV into a specified package.  The SV must be an RV.  The package
9796 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9797 of the SV is unaffected.
9798
9799 =cut
9800 */
9801
9802 SV*
9803 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9804 {
9805     dVAR;
9806     SV *tmpRef;
9807
9808     PERL_ARGS_ASSERT_SV_BLESS;
9809
9810     SvGETMAGIC(sv);
9811     if (!SvROK(sv))
9812         Perl_croak(aTHX_ "Can't bless non-reference value");
9813     tmpRef = SvRV(sv);
9814     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9815         if (SvREADONLY(tmpRef))
9816             Perl_croak_no_modify();
9817         if (SvOBJECT(tmpRef)) {
9818             SvREFCNT_dec(SvSTASH(tmpRef));
9819         }
9820     }
9821     SvOBJECT_on(tmpRef);
9822     SvUPGRADE(tmpRef, SVt_PVMG);
9823     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9824
9825     if(SvSMAGICAL(tmpRef))
9826         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9827             mg_set(tmpRef);
9828
9829
9830
9831     return sv;
9832 }
9833
9834 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9835  * as it is after unglobbing it.
9836  */
9837
9838 PERL_STATIC_INLINE void
9839 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9840 {
9841     dVAR;
9842     void *xpvmg;
9843     HV *stash;
9844     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9845
9846     PERL_ARGS_ASSERT_SV_UNGLOB;
9847
9848     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9849     SvFAKE_off(sv);
9850     if (!(flags & SV_COW_DROP_PV))
9851         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9852
9853     if (GvGP(sv)) {
9854         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9855            && HvNAME_get(stash))
9856             mro_method_changed_in(stash);
9857         gp_free(MUTABLE_GV(sv));
9858     }
9859     if (GvSTASH(sv)) {
9860         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9861         GvSTASH(sv) = NULL;
9862     }
9863     GvMULTI_off(sv);
9864     if (GvNAME_HEK(sv)) {
9865         unshare_hek(GvNAME_HEK(sv));
9866     }
9867     isGV_with_GP_off(sv);
9868
9869     if(SvTYPE(sv) == SVt_PVGV) {
9870         /* need to keep SvANY(sv) in the right arena */
9871         xpvmg = new_XPVMG();
9872         StructCopy(SvANY(sv), xpvmg, XPVMG);
9873         del_XPVGV(SvANY(sv));
9874         SvANY(sv) = xpvmg;
9875
9876         SvFLAGS(sv) &= ~SVTYPEMASK;
9877         SvFLAGS(sv) |= SVt_PVMG;
9878     }
9879
9880     /* Intentionally not calling any local SET magic, as this isn't so much a
9881        set operation as merely an internal storage change.  */
9882     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9883     else sv_setsv_flags(sv, temp, 0);
9884
9885     if ((const GV *)sv == PL_last_in_gv)
9886         PL_last_in_gv = NULL;
9887     else if ((const GV *)sv == PL_statgv)
9888         PL_statgv = NULL;
9889 }
9890
9891 /*
9892 =for apidoc sv_unref_flags
9893
9894 Unsets the RV status of the SV, and decrements the reference count of
9895 whatever was being referenced by the RV.  This can almost be thought of
9896 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9897 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9898 (otherwise the decrementing is conditional on the reference count being
9899 different from one or the reference being a readonly SV).
9900 See C<SvROK_off>.
9901
9902 =cut
9903 */
9904
9905 void
9906 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9907 {
9908     SV* const target = SvRV(ref);
9909
9910     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9911
9912     if (SvWEAKREF(ref)) {
9913         sv_del_backref(target, ref);
9914         SvWEAKREF_off(ref);
9915         SvRV_set(ref, NULL);
9916         return;
9917     }
9918     SvRV_set(ref, NULL);
9919     SvROK_off(ref);
9920     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9921        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9922     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9923         SvREFCNT_dec_NN(target);
9924     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9925         sv_2mortal(target);     /* Schedule for freeing later */
9926 }
9927
9928 /*
9929 =for apidoc sv_untaint
9930
9931 Untaint an SV.  Use C<SvTAINTED_off> instead.
9932
9933 =cut
9934 */
9935
9936 void
9937 Perl_sv_untaint(pTHX_ SV *const sv)
9938 {
9939     PERL_ARGS_ASSERT_SV_UNTAINT;
9940
9941     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9942         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9943         if (mg)
9944             mg->mg_len &= ~1;
9945     }
9946 }
9947
9948 /*
9949 =for apidoc sv_tainted
9950
9951 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9952
9953 =cut
9954 */
9955
9956 bool
9957 Perl_sv_tainted(pTHX_ SV *const sv)
9958 {
9959     PERL_ARGS_ASSERT_SV_TAINTED;
9960
9961     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9962         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9963         if (mg && (mg->mg_len & 1) )
9964             return TRUE;
9965     }
9966     return FALSE;
9967 }
9968
9969 /*
9970 =for apidoc sv_setpviv
9971
9972 Copies an integer into the given SV, also updating its string value.
9973 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9974
9975 =cut
9976 */
9977
9978 void
9979 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9980 {
9981     char buf[TYPE_CHARS(UV)];
9982     char *ebuf;
9983     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9984
9985     PERL_ARGS_ASSERT_SV_SETPVIV;
9986
9987     sv_setpvn(sv, ptr, ebuf - ptr);
9988 }
9989
9990 /*
9991 =for apidoc sv_setpviv_mg
9992
9993 Like C<sv_setpviv>, but also handles 'set' magic.
9994
9995 =cut
9996 */
9997
9998 void
9999 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10000 {
10001     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10002
10003     sv_setpviv(sv, iv);
10004     SvSETMAGIC(sv);
10005 }
10006
10007 #if defined(PERL_IMPLICIT_CONTEXT)
10008
10009 /* pTHX_ magic can't cope with varargs, so this is a no-context
10010  * version of the main function, (which may itself be aliased to us).
10011  * Don't access this version directly.
10012  */
10013
10014 void
10015 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10016 {
10017     dTHX;
10018     va_list args;
10019
10020     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10021
10022     va_start(args, pat);
10023     sv_vsetpvf(sv, pat, &args);
10024     va_end(args);
10025 }
10026
10027 /* pTHX_ magic can't cope with varargs, so this is a no-context
10028  * version of the main function, (which may itself be aliased to us).
10029  * Don't access this version directly.
10030  */
10031
10032 void
10033 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10034 {
10035     dTHX;
10036     va_list args;
10037
10038     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10039
10040     va_start(args, pat);
10041     sv_vsetpvf_mg(sv, pat, &args);
10042     va_end(args);
10043 }
10044 #endif
10045
10046 /*
10047 =for apidoc sv_setpvf
10048
10049 Works like C<sv_catpvf> but copies the text into the SV instead of
10050 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10051
10052 =cut
10053 */
10054
10055 void
10056 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10057 {
10058     va_list args;
10059
10060     PERL_ARGS_ASSERT_SV_SETPVF;
10061
10062     va_start(args, pat);
10063     sv_vsetpvf(sv, pat, &args);
10064     va_end(args);
10065 }
10066
10067 /*
10068 =for apidoc sv_vsetpvf
10069
10070 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10071 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10072
10073 Usually used via its frontend C<sv_setpvf>.
10074
10075 =cut
10076 */
10077
10078 void
10079 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10080 {
10081     PERL_ARGS_ASSERT_SV_VSETPVF;
10082
10083     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10084 }
10085
10086 /*
10087 =for apidoc sv_setpvf_mg
10088
10089 Like C<sv_setpvf>, but also handles 'set' magic.
10090
10091 =cut
10092 */
10093
10094 void
10095 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10096 {
10097     va_list args;
10098
10099     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10100
10101     va_start(args, pat);
10102     sv_vsetpvf_mg(sv, pat, &args);
10103     va_end(args);
10104 }
10105
10106 /*
10107 =for apidoc sv_vsetpvf_mg
10108
10109 Like C<sv_vsetpvf>, but also handles 'set' magic.
10110
10111 Usually used via its frontend C<sv_setpvf_mg>.
10112
10113 =cut
10114 */
10115
10116 void
10117 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10118 {
10119     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10120
10121     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10122     SvSETMAGIC(sv);
10123 }
10124
10125 #if defined(PERL_IMPLICIT_CONTEXT)
10126
10127 /* pTHX_ magic can't cope with varargs, so this is a no-context
10128  * version of the main function, (which may itself be aliased to us).
10129  * Don't access this version directly.
10130  */
10131
10132 void
10133 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10134 {
10135     dTHX;
10136     va_list args;
10137
10138     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10139
10140     va_start(args, pat);
10141     sv_vcatpvf(sv, pat, &args);
10142     va_end(args);
10143 }
10144
10145 /* pTHX_ magic can't cope with varargs, so this is a no-context
10146  * version of the main function, (which may itself be aliased to us).
10147  * Don't access this version directly.
10148  */
10149
10150 void
10151 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10152 {
10153     dTHX;
10154     va_list args;
10155
10156     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10157
10158     va_start(args, pat);
10159     sv_vcatpvf_mg(sv, pat, &args);
10160     va_end(args);
10161 }
10162 #endif
10163
10164 /*
10165 =for apidoc sv_catpvf
10166
10167 Processes its arguments like C<sprintf> and appends the formatted
10168 output to an SV.  If the appended data contains "wide" characters
10169 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10170 and characters >255 formatted with %c), the original SV might get
10171 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10172 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10173 valid UTF-8; if the original SV was bytes, the pattern should be too.
10174
10175 =cut */
10176
10177 void
10178 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10179 {
10180     va_list args;
10181
10182     PERL_ARGS_ASSERT_SV_CATPVF;
10183
10184     va_start(args, pat);
10185     sv_vcatpvf(sv, pat, &args);
10186     va_end(args);
10187 }
10188
10189 /*
10190 =for apidoc sv_vcatpvf
10191
10192 Processes its arguments like C<vsprintf> and appends the formatted output
10193 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10194
10195 Usually used via its frontend C<sv_catpvf>.
10196
10197 =cut
10198 */
10199
10200 void
10201 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10202 {
10203     PERL_ARGS_ASSERT_SV_VCATPVF;
10204
10205     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10206 }
10207
10208 /*
10209 =for apidoc sv_catpvf_mg
10210
10211 Like C<sv_catpvf>, but also handles 'set' magic.
10212
10213 =cut
10214 */
10215
10216 void
10217 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10218 {
10219     va_list args;
10220
10221     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10222
10223     va_start(args, pat);
10224     sv_vcatpvf_mg(sv, pat, &args);
10225     va_end(args);
10226 }
10227
10228 /*
10229 =for apidoc sv_vcatpvf_mg
10230
10231 Like C<sv_vcatpvf>, but also handles 'set' magic.
10232
10233 Usually used via its frontend C<sv_catpvf_mg>.
10234
10235 =cut
10236 */
10237
10238 void
10239 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10240 {
10241     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10242
10243     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10244     SvSETMAGIC(sv);
10245 }
10246
10247 /*
10248 =for apidoc sv_vsetpvfn
10249
10250 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10251 appending it.
10252
10253 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10254
10255 =cut
10256 */
10257
10258 void
10259 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10260                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10261 {
10262     PERL_ARGS_ASSERT_SV_VSETPVFN;
10263
10264     sv_setpvs(sv, "");
10265     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10266 }
10267
10268
10269 /*
10270  * Warn of missing argument to sprintf, and then return a defined value
10271  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10272  */
10273 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10274 STATIC SV*
10275 S_vcatpvfn_missing_argument(pTHX) {
10276     if (ckWARN(WARN_MISSING)) {
10277         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10278                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10279     }
10280     return &PL_sv_no;
10281 }
10282
10283
10284 STATIC I32
10285 S_expect_number(pTHX_ char **const pattern)
10286 {
10287     dVAR;
10288     I32 var = 0;
10289
10290     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10291
10292     switch (**pattern) {
10293     case '1': case '2': case '3':
10294     case '4': case '5': case '6':
10295     case '7': case '8': case '9':
10296         var = *(*pattern)++ - '0';
10297         while (isDIGIT(**pattern)) {
10298             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10299             if (tmp < var)
10300                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10301             var = tmp;
10302         }
10303     }
10304     return var;
10305 }
10306
10307 STATIC char *
10308 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10309 {
10310     const int neg = nv < 0;
10311     UV uv;
10312
10313     PERL_ARGS_ASSERT_F0CONVERT;
10314
10315     if (neg)
10316         nv = -nv;
10317     if (nv < UV_MAX) {
10318         char *p = endbuf;
10319         nv += 0.5;
10320         uv = (UV)nv;
10321         if (uv & 1 && uv == nv)
10322             uv--;                       /* Round to even */
10323         do {
10324             const unsigned dig = uv % 10;
10325             *--p = '0' + dig;
10326         } while (uv /= 10);
10327         if (neg)
10328             *--p = '-';
10329         *len = endbuf - p;
10330         return p;
10331     }
10332     return NULL;
10333 }
10334
10335
10336 /*
10337 =for apidoc sv_vcatpvfn
10338
10339 =for apidoc sv_vcatpvfn_flags
10340
10341 Processes its arguments like C<vsprintf> and appends the formatted output
10342 to an SV.  Uses an array of SVs if the C style variable argument list is
10343 missing (NULL).  When running with taint checks enabled, indicates via
10344 C<maybe_tainted> if results are untrustworthy (often due to the use of
10345 locales).
10346
10347 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10348
10349 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10350
10351 =cut
10352 */
10353
10354 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10355                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10356                         vec_utf8 = DO_UTF8(vecsv);
10357
10358 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10359
10360 void
10361 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10362                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10363 {
10364     PERL_ARGS_ASSERT_SV_VCATPVFN;
10365
10366     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10367 }
10368
10369 void
10370 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10371                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10372                        const U32 flags)
10373 {
10374     dVAR;
10375     char *p;
10376     char *q;
10377     const char *patend;
10378     STRLEN origlen;
10379     I32 svix = 0;
10380     static const char nullstr[] = "(null)";
10381     SV *argsv = NULL;
10382     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10383     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10384     SV *nsv = NULL;
10385     /* Times 4: a decimal digit takes more than 3 binary digits.
10386      * NV_DIG: mantissa takes than many decimal digits.
10387      * Plus 32: Playing safe. */
10388     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10389     /* large enough for "%#.#f" --chip */
10390     /* what about long double NVs? --jhi */
10391
10392     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10393     PERL_UNUSED_ARG(maybe_tainted);
10394
10395     if (flags & SV_GMAGIC)
10396         SvGETMAGIC(sv);
10397
10398     /* no matter what, this is a string now */
10399     (void)SvPV_force_nomg(sv, origlen);
10400
10401     /* special-case "", "%s", and "%-p" (SVf - see below) */
10402     if (patlen == 0)
10403         return;
10404     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10405         if (args) {
10406             const char * const s = va_arg(*args, char*);
10407             sv_catpv_nomg(sv, s ? s : nullstr);
10408         }
10409         else if (svix < svmax) {
10410             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10411             SvGETMAGIC(*svargs);
10412             sv_catsv_nomg(sv, *svargs);
10413         }
10414         else
10415             S_vcatpvfn_missing_argument(aTHX);
10416         return;
10417     }
10418     if (args && patlen == 3 && pat[0] == '%' &&
10419                 pat[1] == '-' && pat[2] == 'p') {
10420         argsv = MUTABLE_SV(va_arg(*args, void*));
10421         sv_catsv_nomg(sv, argsv);
10422         return;
10423     }
10424
10425 #ifndef USE_LONG_DOUBLE
10426     /* special-case "%.<number>[gf]" */
10427     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10428          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10429         unsigned digits = 0;
10430         const char *pp;
10431
10432         pp = pat + 2;
10433         while (*pp >= '0' && *pp <= '9')
10434             digits = 10 * digits + (*pp++ - '0');
10435         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10436             const NV nv = SvNV(*svargs);
10437             if (*pp == 'g') {
10438                 /* Add check for digits != 0 because it seems that some
10439                    gconverts are buggy in this case, and we don't yet have
10440                    a Configure test for this.  */
10441                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10442                      /* 0, point, slack */
10443                     Gconvert(nv, (int)digits, 0, ebuf);
10444                     sv_catpv_nomg(sv, ebuf);
10445                     if (*ebuf)  /* May return an empty string for digits==0 */
10446                         return;
10447                 }
10448             } else if (!digits) {
10449                 STRLEN l;
10450
10451                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10452                     sv_catpvn_nomg(sv, p, l);
10453                     return;
10454                 }
10455             }
10456         }
10457     }
10458 #endif /* !USE_LONG_DOUBLE */
10459
10460     if (!args && svix < svmax && DO_UTF8(*svargs))
10461         has_utf8 = TRUE;
10462
10463     patend = (char*)pat + patlen;
10464     for (p = (char*)pat; p < patend; p = q) {
10465         bool alt = FALSE;
10466         bool left = FALSE;
10467         bool vectorize = FALSE;
10468         bool vectorarg = FALSE;
10469         bool vec_utf8 = FALSE;
10470         char fill = ' ';
10471         char plus = 0;
10472         char intsize = 0;
10473         STRLEN width = 0;
10474         STRLEN zeros = 0;
10475         bool has_precis = FALSE;
10476         STRLEN precis = 0;
10477         const I32 osvix = svix;
10478         bool is_utf8 = FALSE;  /* is this item utf8?   */
10479 #ifdef HAS_LDBL_SPRINTF_BUG
10480         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10481            with sfio - Allen <allens@cpan.org> */
10482         bool fix_ldbl_sprintf_bug = FALSE;
10483 #endif
10484
10485         char esignbuf[4];
10486         U8 utf8buf[UTF8_MAXBYTES+1];
10487         STRLEN esignlen = 0;
10488
10489         const char *eptr = NULL;
10490         const char *fmtstart;
10491         STRLEN elen = 0;
10492         SV *vecsv = NULL;
10493         const U8 *vecstr = NULL;
10494         STRLEN veclen = 0;
10495         char c = 0;
10496         int i;
10497         unsigned base = 0;
10498         IV iv = 0;
10499         UV uv = 0;
10500         /* we need a long double target in case HAS_LONG_DOUBLE but
10501            not USE_LONG_DOUBLE
10502         */
10503 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10504         long double nv;
10505 #else
10506         NV nv;
10507 #endif
10508         STRLEN have;
10509         STRLEN need;
10510         STRLEN gap;
10511         const char *dotstr = ".";
10512         STRLEN dotstrlen = 1;
10513         I32 efix = 0; /* explicit format parameter index */
10514         I32 ewix = 0; /* explicit width index */
10515         I32 epix = 0; /* explicit precision index */
10516         I32 evix = 0; /* explicit vector index */
10517         bool asterisk = FALSE;
10518
10519         /* echo everything up to the next format specification */
10520         for (q = p; q < patend && *q != '%'; ++q) ;
10521         if (q > p) {
10522             if (has_utf8 && !pat_utf8)
10523                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10524             else
10525                 sv_catpvn_nomg(sv, p, q - p);
10526             p = q;
10527         }
10528         if (q++ >= patend)
10529             break;
10530
10531         fmtstart = q;
10532
10533 /*
10534     We allow format specification elements in this order:
10535         \d+\$              explicit format parameter index
10536         [-+ 0#]+           flags
10537         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10538         0                  flag (as above): repeated to allow "v02"     
10539         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10540         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10541         [hlqLV]            size
10542     [%bcdefginopsuxDFOUX] format (mandatory)
10543 */
10544
10545         if (args) {
10546 /*  
10547         As of perl5.9.3, printf format checking is on by default.
10548         Internally, perl uses %p formats to provide an escape to
10549         some extended formatting.  This block deals with those
10550         extensions: if it does not match, (char*)q is reset and
10551         the normal format processing code is used.
10552
10553         Currently defined extensions are:
10554                 %p              include pointer address (standard)      
10555                 %-p     (SVf)   include an SV (previously %_)
10556                 %-<num>p        include an SV with precision <num>      
10557                 %2p             include a HEK
10558                 %3p             include a HEK with precision of 256
10559                 %4p             char* preceded by utf8 flag and length
10560                 %<num>p         (where num is 1 or > 4) reserved for future
10561                                 extensions
10562
10563         Robin Barker 2005-07-14 (but modified since)
10564
10565                 %1p     (VDf)   removed.  RMB 2007-10-19
10566 */
10567             char* r = q; 
10568             bool sv = FALSE;    
10569             STRLEN n = 0;
10570             if (*q == '-')
10571                 sv = *q++;
10572             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10573                 /* The argument has already gone through cBOOL, so the cast
10574                    is safe. */
10575                 is_utf8 = (bool)va_arg(*args, int);
10576                 elen = va_arg(*args, UV);
10577                 eptr = va_arg(*args, char *);
10578                 q += sizeof(UTF8f)-1;
10579                 goto string;
10580             }
10581             n = expect_number(&q);
10582             if (*q++ == 'p') {
10583                 if (sv) {                       /* SVf */
10584                     if (n) {
10585                         precis = n;
10586                         has_precis = TRUE;
10587                     }
10588                     argsv = MUTABLE_SV(va_arg(*args, void*));
10589                     eptr = SvPV_const(argsv, elen);
10590                     if (DO_UTF8(argsv))
10591                         is_utf8 = TRUE;
10592                     goto string;
10593                 }
10594                 else if (n==2 || n==3) {        /* HEKf */
10595                     HEK * const hek = va_arg(*args, HEK *);
10596                     eptr = HEK_KEY(hek);
10597                     elen = HEK_LEN(hek);
10598                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10599                     if (n==3) precis = 256, has_precis = TRUE;
10600                     goto string;
10601                 }
10602                 else if (n) {
10603                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10604                                      "internal %%<num>p might conflict with future printf extensions");
10605                 }
10606             }
10607             q = r; 
10608         }
10609
10610         if ( (width = expect_number(&q)) ) {
10611             if (*q == '$') {
10612                 ++q;
10613                 efix = width;
10614             } else {
10615                 goto gotwidth;
10616             }
10617         }
10618
10619         /* FLAGS */
10620
10621         while (*q) {
10622             switch (*q) {
10623             case ' ':
10624             case '+':
10625                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10626                     q++;
10627                 else
10628                     plus = *q++;
10629                 continue;
10630
10631             case '-':
10632                 left = TRUE;
10633                 q++;
10634                 continue;
10635
10636             case '0':
10637                 fill = *q++;
10638                 continue;
10639
10640             case '#':
10641                 alt = TRUE;
10642                 q++;
10643                 continue;
10644
10645             default:
10646                 break;
10647             }
10648             break;
10649         }
10650
10651       tryasterisk:
10652         if (*q == '*') {
10653             q++;
10654             if ( (ewix = expect_number(&q)) )
10655                 if (*q++ != '$')
10656                     goto unknown;
10657             asterisk = TRUE;
10658         }
10659         if (*q == 'v') {
10660             q++;
10661             if (vectorize)
10662                 goto unknown;
10663             if ((vectorarg = asterisk)) {
10664                 evix = ewix;
10665                 ewix = 0;
10666                 asterisk = FALSE;
10667             }
10668             vectorize = TRUE;
10669             goto tryasterisk;
10670         }
10671
10672         if (!asterisk)
10673         {
10674             if( *q == '0' )
10675                 fill = *q++;
10676             width = expect_number(&q);
10677         }
10678
10679         if (vectorize && vectorarg) {
10680             /* vectorizing, but not with the default "." */
10681             if (args)
10682                 vecsv = va_arg(*args, SV*);
10683             else if (evix) {
10684                 vecsv = (evix > 0 && evix <= svmax)
10685                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10686             } else {
10687                 vecsv = svix < svmax
10688                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10689             }
10690             dotstr = SvPV_const(vecsv, dotstrlen);
10691             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10692                bad with tied or overloaded values that return UTF8.  */
10693             if (DO_UTF8(vecsv))
10694                 is_utf8 = TRUE;
10695             else if (has_utf8) {
10696                 vecsv = sv_mortalcopy(vecsv);
10697                 sv_utf8_upgrade(vecsv);
10698                 dotstr = SvPV_const(vecsv, dotstrlen);
10699                 is_utf8 = TRUE;
10700             }               
10701         }
10702
10703         if (asterisk) {
10704             if (args)
10705                 i = va_arg(*args, int);
10706             else
10707                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10708                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10709             left |= (i < 0);
10710             width = (i < 0) ? -i : i;
10711         }
10712       gotwidth:
10713
10714         /* PRECISION */
10715
10716         if (*q == '.') {
10717             q++;
10718             if (*q == '*') {
10719                 q++;
10720                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10721                     goto unknown;
10722                 /* XXX: todo, support specified precision parameter */
10723                 if (epix)
10724                     goto unknown;
10725                 if (args)
10726                     i = va_arg(*args, int);
10727                 else
10728                     i = (ewix ? ewix <= svmax : svix < svmax)
10729                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10730                 precis = i;
10731                 has_precis = !(i < 0);
10732             }
10733             else {
10734                 precis = 0;
10735                 while (isDIGIT(*q))
10736                     precis = precis * 10 + (*q++ - '0');
10737                 has_precis = TRUE;
10738             }
10739         }
10740
10741         if (vectorize) {
10742             if (args) {
10743                 VECTORIZE_ARGS
10744             }
10745             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10746                 vecsv = svargs[efix ? efix-1 : svix++];
10747                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10748                 vec_utf8 = DO_UTF8(vecsv);
10749
10750                 /* if this is a version object, we need to convert
10751                  * back into v-string notation and then let the
10752                  * vectorize happen normally
10753                  */
10754                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10755                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10756                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10757                         "vector argument not supported with alpha versions");
10758                         goto vdblank;
10759                     }
10760                     vecsv = sv_newmortal();
10761                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10762                                  vecsv);
10763                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10764                     vec_utf8 = DO_UTF8(vecsv);
10765                 }
10766             }
10767             else {
10768               vdblank:
10769                 vecstr = (U8*)"";
10770                 veclen = 0;
10771             }
10772         }
10773
10774         /* SIZE */
10775
10776         switch (*q) {
10777 #ifdef WIN32
10778         case 'I':                       /* Ix, I32x, and I64x */
10779 #  ifdef USE_64_BIT_INT
10780             if (q[1] == '6' && q[2] == '4') {
10781                 q += 3;
10782                 intsize = 'q';
10783                 break;
10784             }
10785 #  endif
10786             if (q[1] == '3' && q[2] == '2') {
10787                 q += 3;
10788                 break;
10789             }
10790 #  ifdef USE_64_BIT_INT
10791             intsize = 'q';
10792 #  endif
10793             q++;
10794             break;
10795 #endif
10796 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10797         case 'L':                       /* Ld */
10798             /*FALLTHROUGH*/
10799 #ifdef HAS_QUAD
10800         case 'q':                       /* qd */
10801 #endif
10802             intsize = 'q';
10803             q++;
10804             break;
10805 #endif
10806         case 'l':
10807             ++q;
10808 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10809             if (*q == 'l') {    /* lld, llf */
10810                 intsize = 'q';
10811                 ++q;
10812             }
10813             else
10814 #endif
10815                 intsize = 'l';
10816             break;
10817         case 'h':
10818             if (*++q == 'h') {  /* hhd, hhu */
10819                 intsize = 'c';
10820                 ++q;
10821             }
10822             else
10823                 intsize = 'h';
10824             break;
10825         case 'V':
10826         case 'z':
10827         case 't':
10828 #if HAS_C99
10829         case 'j':
10830 #endif
10831             intsize = *q++;
10832             break;
10833         }
10834
10835         /* CONVERSION */
10836
10837         if (*q == '%') {
10838             eptr = q++;
10839             elen = 1;
10840             if (vectorize) {
10841                 c = '%';
10842                 goto unknown;
10843             }
10844             goto string;
10845         }
10846
10847         if (!vectorize && !args) {
10848             if (efix) {
10849                 const I32 i = efix-1;
10850                 argsv = (i >= 0 && i < svmax)
10851                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10852             } else {
10853                 argsv = (svix >= 0 && svix < svmax)
10854                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10855             }
10856         }
10857
10858         switch (c = *q++) {
10859
10860             /* STRINGS */
10861
10862         case 'c':
10863             if (vectorize)
10864                 goto unknown;
10865             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10866             if ((uv > 255 ||
10867                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10868                 && !IN_BYTES) {
10869                 eptr = (char*)utf8buf;
10870                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10871                 is_utf8 = TRUE;
10872             }
10873             else {
10874                 c = (char)uv;
10875                 eptr = &c;
10876                 elen = 1;
10877             }
10878             goto string;
10879
10880         case 's':
10881             if (vectorize)
10882                 goto unknown;
10883             if (args) {
10884                 eptr = va_arg(*args, char*);
10885                 if (eptr)
10886                     elen = strlen(eptr);
10887                 else {
10888                     eptr = (char *)nullstr;
10889                     elen = sizeof nullstr - 1;
10890                 }
10891             }
10892             else {
10893                 eptr = SvPV_const(argsv, elen);
10894                 if (DO_UTF8(argsv)) {
10895                     STRLEN old_precis = precis;
10896                     if (has_precis && precis < elen) {
10897                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10898                         STRLEN p = precis > ulen ? ulen : precis;
10899                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10900                                                         /* sticks at end */
10901                     }
10902                     if (width) { /* fudge width (can't fudge elen) */
10903                         if (has_precis && precis < elen)
10904                             width += precis - old_precis;
10905                         else
10906                             width +=
10907                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10908                     }
10909                     is_utf8 = TRUE;
10910                 }
10911             }
10912
10913         string:
10914             if (has_precis && precis < elen)
10915                 elen = precis;
10916             break;
10917
10918             /* INTEGERS */
10919
10920         case 'p':
10921             if (alt || vectorize)
10922                 goto unknown;
10923             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10924             base = 16;
10925             goto integer;
10926
10927         case 'D':
10928 #ifdef IV_IS_QUAD
10929             intsize = 'q';
10930 #else
10931             intsize = 'l';
10932 #endif
10933             /*FALLTHROUGH*/
10934         case 'd':
10935         case 'i':
10936 #if vdNUMBER
10937         format_vd:
10938 #endif
10939             if (vectorize) {
10940                 STRLEN ulen;
10941                 if (!veclen)
10942                     continue;
10943                 if (vec_utf8)
10944                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10945                                         UTF8_ALLOW_ANYUV);
10946                 else {
10947                     uv = *vecstr;
10948                     ulen = 1;
10949                 }
10950                 vecstr += ulen;
10951                 veclen -= ulen;
10952                 if (plus)
10953                      esignbuf[esignlen++] = plus;
10954             }
10955             else if (args) {
10956                 switch (intsize) {
10957                 case 'c':       iv = (char)va_arg(*args, int); break;
10958                 case 'h':       iv = (short)va_arg(*args, int); break;
10959                 case 'l':       iv = va_arg(*args, long); break;
10960                 case 'V':       iv = va_arg(*args, IV); break;
10961                 case 'z':       iv = va_arg(*args, SSize_t); break;
10962                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10963                 default:        iv = va_arg(*args, int); break;
10964 #if HAS_C99
10965                 case 'j':       iv = va_arg(*args, intmax_t); break;
10966 #endif
10967                 case 'q':
10968 #ifdef HAS_QUAD
10969                                 iv = va_arg(*args, Quad_t); break;
10970 #else
10971                                 goto unknown;
10972 #endif
10973                 }
10974             }
10975             else {
10976                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10977                 switch (intsize) {
10978                 case 'c':       iv = (char)tiv; break;
10979                 case 'h':       iv = (short)tiv; break;
10980                 case 'l':       iv = (long)tiv; break;
10981                 case 'V':
10982                 default:        iv = tiv; break;
10983                 case 'q':
10984 #ifdef HAS_QUAD
10985                                 iv = (Quad_t)tiv; break;
10986 #else
10987                                 goto unknown;
10988 #endif
10989                 }
10990             }
10991             if ( !vectorize )   /* we already set uv above */
10992             {
10993                 if (iv >= 0) {
10994                     uv = iv;
10995                     if (plus)
10996                         esignbuf[esignlen++] = plus;
10997                 }
10998                 else {
10999                     uv = -iv;
11000                     esignbuf[esignlen++] = '-';
11001                 }
11002             }
11003             base = 10;
11004             goto integer;
11005
11006         case 'U':
11007 #ifdef IV_IS_QUAD
11008             intsize = 'q';
11009 #else
11010             intsize = 'l';
11011 #endif
11012             /*FALLTHROUGH*/
11013         case 'u':
11014             base = 10;
11015             goto uns_integer;
11016
11017         case 'B':
11018         case 'b':
11019             base = 2;
11020             goto uns_integer;
11021
11022         case 'O':
11023 #ifdef IV_IS_QUAD
11024             intsize = 'q';
11025 #else
11026             intsize = 'l';
11027 #endif
11028             /*FALLTHROUGH*/
11029         case 'o':
11030             base = 8;
11031             goto uns_integer;
11032
11033         case 'X':
11034         case 'x':
11035             base = 16;
11036
11037         uns_integer:
11038             if (vectorize) {
11039                 STRLEN ulen;
11040         vector:
11041                 if (!veclen)
11042                     continue;
11043                 if (vec_utf8)
11044                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11045                                         UTF8_ALLOW_ANYUV);
11046                 else {
11047                     uv = *vecstr;
11048                     ulen = 1;
11049                 }
11050                 vecstr += ulen;
11051                 veclen -= ulen;
11052             }
11053             else if (args) {
11054                 switch (intsize) {
11055                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11056                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11057                 case 'l':  uv = va_arg(*args, unsigned long); break;
11058                 case 'V':  uv = va_arg(*args, UV); break;
11059                 case 'z':  uv = va_arg(*args, Size_t); break;
11060                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11061 #if HAS_C99
11062                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11063 #endif
11064                 default:   uv = va_arg(*args, unsigned); break;
11065                 case 'q':
11066 #ifdef HAS_QUAD
11067                            uv = va_arg(*args, Uquad_t); break;
11068 #else
11069                            goto unknown;
11070 #endif
11071                 }
11072             }
11073             else {
11074                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11075                 switch (intsize) {
11076                 case 'c':       uv = (unsigned char)tuv; break;
11077                 case 'h':       uv = (unsigned short)tuv; break;
11078                 case 'l':       uv = (unsigned long)tuv; break;
11079                 case 'V':
11080                 default:        uv = tuv; break;
11081                 case 'q':
11082 #ifdef HAS_QUAD
11083                                 uv = (Uquad_t)tuv; break;
11084 #else
11085                                 goto unknown;
11086 #endif
11087                 }
11088             }
11089
11090         integer:
11091             {
11092                 char *ptr = ebuf + sizeof ebuf;
11093                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11094                 zeros = 0;
11095
11096                 switch (base) {
11097                     unsigned dig;
11098                 case 16:
11099                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11100                     do {
11101                         dig = uv & 15;
11102                         *--ptr = p[dig];
11103                     } while (uv >>= 4);
11104                     if (tempalt) {
11105                         esignbuf[esignlen++] = '0';
11106                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11107                     }
11108                     break;
11109                 case 8:
11110                     do {
11111                         dig = uv & 7;
11112                         *--ptr = '0' + dig;
11113                     } while (uv >>= 3);
11114                     if (alt && *ptr != '0')
11115                         *--ptr = '0';
11116                     break;
11117                 case 2:
11118                     do {
11119                         dig = uv & 1;
11120                         *--ptr = '0' + dig;
11121                     } while (uv >>= 1);
11122                     if (tempalt) {
11123                         esignbuf[esignlen++] = '0';
11124                         esignbuf[esignlen++] = c;
11125                     }
11126                     break;
11127                 default:                /* it had better be ten or less */
11128                     do {
11129                         dig = uv % base;
11130                         *--ptr = '0' + dig;
11131                     } while (uv /= base);
11132                     break;
11133                 }
11134                 elen = (ebuf + sizeof ebuf) - ptr;
11135                 eptr = ptr;
11136                 if (has_precis) {
11137                     if (precis > elen)
11138                         zeros = precis - elen;
11139                     else if (precis == 0 && elen == 1 && *eptr == '0'
11140                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11141                         elen = 0;
11142
11143                 /* a precision nullifies the 0 flag. */
11144                     if (fill == '0')
11145                         fill = ' ';
11146                 }
11147             }
11148             break;
11149
11150             /* FLOATING POINT */
11151
11152         case 'F':
11153             c = 'f';            /* maybe %F isn't supported here */
11154             /*FALLTHROUGH*/
11155         case 'e': case 'E':
11156         case 'f':
11157         case 'g': case 'G':
11158             if (vectorize)
11159                 goto unknown;
11160
11161             /* This is evil, but floating point is even more evil */
11162
11163             /* for SV-style calling, we can only get NV
11164                for C-style calling, we assume %f is double;
11165                for simplicity we allow any of %Lf, %llf, %qf for long double
11166             */
11167             switch (intsize) {
11168             case 'V':
11169 #if defined(USE_LONG_DOUBLE)
11170                 intsize = 'q';
11171 #endif
11172                 break;
11173 /* [perl #20339] - we should accept and ignore %lf rather than die */
11174             case 'l':
11175                 /*FALLTHROUGH*/
11176             default:
11177 #if defined(USE_LONG_DOUBLE)
11178                 intsize = args ? 0 : 'q';
11179 #endif
11180                 break;
11181             case 'q':
11182 #if defined(HAS_LONG_DOUBLE)
11183                 break;
11184 #else
11185                 /*FALLTHROUGH*/
11186 #endif
11187             case 'c':
11188             case 'h':
11189             case 'z':
11190             case 't':
11191             case 'j':
11192                 goto unknown;
11193             }
11194
11195             /* now we need (long double) if intsize == 'q', else (double) */
11196             nv = (args) ?
11197 #if LONG_DOUBLESIZE > DOUBLESIZE
11198                 intsize == 'q' ?
11199                     va_arg(*args, long double) :
11200                     va_arg(*args, double)
11201 #else
11202                     va_arg(*args, double)
11203 #endif
11204                 : SvNV(argsv);
11205
11206             need = 0;
11207             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11208                else. frexp() has some unspecified behaviour for those three */
11209             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11210                 i = PERL_INT_MIN;
11211                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11212                    will cast our (long double) to (double) */
11213                 (void)Perl_frexp(nv, &i);
11214                 if (i == PERL_INT_MIN)
11215                     Perl_die(aTHX_ "panic: frexp");
11216                 if (i > 0)
11217                     need = BIT_DIGITS(i);
11218             }
11219             need += has_precis ? precis : 6; /* known default */
11220
11221             if (need < width)
11222                 need = width;
11223
11224 #ifdef HAS_LDBL_SPRINTF_BUG
11225             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11226                with sfio - Allen <allens@cpan.org> */
11227
11228 #  ifdef DBL_MAX
11229 #    define MY_DBL_MAX DBL_MAX
11230 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11231 #    if DOUBLESIZE >= 8
11232 #      define MY_DBL_MAX 1.7976931348623157E+308L
11233 #    else
11234 #      define MY_DBL_MAX 3.40282347E+38L
11235 #    endif
11236 #  endif
11237
11238 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11239 #    define MY_DBL_MAX_BUG 1L
11240 #  else
11241 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11242 #  endif
11243
11244 #  ifdef DBL_MIN
11245 #    define MY_DBL_MIN DBL_MIN
11246 #  else  /* XXX guessing! -Allen */
11247 #    if DOUBLESIZE >= 8
11248 #      define MY_DBL_MIN 2.2250738585072014E-308L
11249 #    else
11250 #      define MY_DBL_MIN 1.17549435E-38L
11251 #    endif
11252 #  endif
11253
11254             if ((intsize == 'q') && (c == 'f') &&
11255                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11256                 (need < DBL_DIG)) {
11257                 /* it's going to be short enough that
11258                  * long double precision is not needed */
11259
11260                 if ((nv <= 0L) && (nv >= -0L))
11261                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11262                 else {
11263                     /* would use Perl_fp_class as a double-check but not
11264                      * functional on IRIX - see perl.h comments */
11265
11266                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11267                         /* It's within the range that a double can represent */
11268 #if defined(DBL_MAX) && !defined(DBL_MIN)
11269                         if ((nv >= ((long double)1/DBL_MAX)) ||
11270                             (nv <= (-(long double)1/DBL_MAX)))
11271 #endif
11272                         fix_ldbl_sprintf_bug = TRUE;
11273                     }
11274                 }
11275                 if (fix_ldbl_sprintf_bug == TRUE) {
11276                     double temp;
11277
11278                     intsize = 0;
11279                     temp = (double)nv;
11280                     nv = (NV)temp;
11281                 }
11282             }
11283
11284 #  undef MY_DBL_MAX
11285 #  undef MY_DBL_MAX_BUG
11286 #  undef MY_DBL_MIN
11287
11288 #endif /* HAS_LDBL_SPRINTF_BUG */
11289
11290             need += 20; /* fudge factor */
11291             if (PL_efloatsize < need) {
11292                 Safefree(PL_efloatbuf);
11293                 PL_efloatsize = need + 20; /* more fudge */
11294                 Newx(PL_efloatbuf, PL_efloatsize, char);
11295                 PL_efloatbuf[0] = '\0';
11296             }
11297
11298             if ( !(width || left || plus || alt) && fill != '0'
11299                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11300                 /* See earlier comment about buggy Gconvert when digits,
11301                    aka precis is 0  */
11302                 if ( c == 'g' && precis) {
11303                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11304                     /* May return an empty string for digits==0 */
11305                     if (*PL_efloatbuf) {
11306                         elen = strlen(PL_efloatbuf);
11307                         goto float_converted;
11308                     }
11309                 } else if ( c == 'f' && !precis) {
11310                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11311                         break;
11312                 }
11313             }
11314             {
11315                 char *ptr = ebuf + sizeof ebuf;
11316                 *--ptr = '\0';
11317                 *--ptr = c;
11318                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11319 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11320                 if (intsize == 'q') {
11321                     /* Copy the one or more characters in a long double
11322                      * format before the 'base' ([efgEFG]) character to
11323                      * the format string. */
11324                     static char const prifldbl[] = PERL_PRIfldbl;
11325                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11326                     while (p >= prifldbl) { *--ptr = *p--; }
11327                 }
11328 #endif
11329                 if (has_precis) {
11330                     base = precis;
11331                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11332                     *--ptr = '.';
11333                 }
11334                 if (width) {
11335                     base = width;
11336                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11337                 }
11338                 if (fill == '0')
11339                     *--ptr = fill;
11340                 if (left)
11341                     *--ptr = '-';
11342                 if (plus)
11343                     *--ptr = plus;
11344                 if (alt)
11345                     *--ptr = '#';
11346                 *--ptr = '%';
11347
11348                 /* No taint.  Otherwise we are in the strange situation
11349                  * where printf() taints but print($float) doesn't.
11350                  * --jhi */
11351 #if defined(HAS_LONG_DOUBLE)
11352                 elen = ((intsize == 'q')
11353                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11354                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11355 #else
11356                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11357 #endif
11358             }
11359         float_converted:
11360             eptr = PL_efloatbuf;
11361
11362 #ifdef USE_LOCALE_NUMERIC
11363             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
11364                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
11365             {
11366                 is_utf8 = TRUE;
11367             }
11368 #endif
11369
11370             break;
11371
11372             /* SPECIAL */
11373
11374         case 'n':
11375             if (vectorize)
11376                 goto unknown;
11377             i = SvCUR(sv) - origlen;
11378             if (args) {
11379                 switch (intsize) {
11380                 case 'c':       *(va_arg(*args, char*)) = i; break;
11381                 case 'h':       *(va_arg(*args, short*)) = i; break;
11382                 default:        *(va_arg(*args, int*)) = i; break;
11383                 case 'l':       *(va_arg(*args, long*)) = i; break;
11384                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11385                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11386                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11387 #if HAS_C99
11388                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11389 #endif
11390                 case 'q':
11391 #ifdef HAS_QUAD
11392                                 *(va_arg(*args, Quad_t*)) = i; break;
11393 #else
11394                                 goto unknown;
11395 #endif
11396                 }
11397             }
11398             else
11399                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11400             continue;   /* not "break" */
11401
11402             /* UNKNOWN */
11403
11404         default:
11405       unknown:
11406             if (!args
11407                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11408                 && ckWARN(WARN_PRINTF))
11409             {
11410                 SV * const msg = sv_newmortal();
11411                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11412                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11413                 if (fmtstart < patend) {
11414                     const char * const fmtend = q < patend ? q : patend;
11415                     const char * f;
11416                     sv_catpvs(msg, "\"%");
11417                     for (f = fmtstart; f < fmtend; f++) {
11418                         if (isPRINT(*f)) {
11419                             sv_catpvn_nomg(msg, f, 1);
11420                         } else {
11421                             Perl_sv_catpvf(aTHX_ msg,
11422                                            "\\%03"UVof, (UV)*f & 0xFF);
11423                         }
11424                     }
11425                     sv_catpvs(msg, "\"");
11426                 } else {
11427                     sv_catpvs(msg, "end of string");
11428                 }
11429                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11430             }
11431
11432             /* output mangled stuff ... */
11433             if (c == '\0')
11434                 --q;
11435             eptr = p;
11436             elen = q - p;
11437
11438             /* ... right here, because formatting flags should not apply */
11439             SvGROW(sv, SvCUR(sv) + elen + 1);
11440             p = SvEND(sv);
11441             Copy(eptr, p, elen, char);
11442             p += elen;
11443             *p = '\0';
11444             SvCUR_set(sv, p - SvPVX_const(sv));
11445             svix = osvix;
11446             continue;   /* not "break" */
11447         }
11448
11449         if (is_utf8 != has_utf8) {
11450             if (is_utf8) {
11451                 if (SvCUR(sv))
11452                     sv_utf8_upgrade(sv);
11453             }
11454             else {
11455                 const STRLEN old_elen = elen;
11456                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11457                 sv_utf8_upgrade(nsv);
11458                 eptr = SvPVX_const(nsv);
11459                 elen = SvCUR(nsv);
11460
11461                 if (width) { /* fudge width (can't fudge elen) */
11462                     width += elen - old_elen;
11463                 }
11464                 is_utf8 = TRUE;
11465             }
11466         }
11467
11468         have = esignlen + zeros + elen;
11469         if (have < zeros)
11470             croak_memory_wrap();
11471
11472         need = (have > width ? have : width);
11473         gap = need - have;
11474
11475         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11476             croak_memory_wrap();
11477         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11478         p = SvEND(sv);
11479         if (esignlen && fill == '0') {
11480             int i;
11481             for (i = 0; i < (int)esignlen; i++)
11482                 *p++ = esignbuf[i];
11483         }
11484         if (gap && !left) {
11485             memset(p, fill, gap);
11486             p += gap;
11487         }
11488         if (esignlen && fill != '0') {
11489             int i;
11490             for (i = 0; i < (int)esignlen; i++)
11491                 *p++ = esignbuf[i];
11492         }
11493         if (zeros) {
11494             int i;
11495             for (i = zeros; i; i--)
11496                 *p++ = '0';
11497         }
11498         if (elen) {
11499             Copy(eptr, p, elen, char);
11500             p += elen;
11501         }
11502         if (gap && left) {
11503             memset(p, ' ', gap);
11504             p += gap;
11505         }
11506         if (vectorize) {
11507             if (veclen) {
11508                 Copy(dotstr, p, dotstrlen, char);
11509                 p += dotstrlen;
11510             }
11511             else
11512                 vectorize = FALSE;              /* done iterating over vecstr */
11513         }
11514         if (is_utf8)
11515             has_utf8 = TRUE;
11516         if (has_utf8)
11517             SvUTF8_on(sv);
11518         *p = '\0';
11519         SvCUR_set(sv, p - SvPVX_const(sv));
11520         if (vectorize) {
11521             esignlen = 0;
11522             goto vector;
11523         }
11524     }
11525     SvTAINT(sv);
11526 }
11527
11528 /* =========================================================================
11529
11530 =head1 Cloning an interpreter
11531
11532 All the macros and functions in this section are for the private use of
11533 the main function, perl_clone().
11534
11535 The foo_dup() functions make an exact copy of an existing foo thingy.
11536 During the course of a cloning, a hash table is used to map old addresses
11537 to new addresses.  The table is created and manipulated with the
11538 ptr_table_* functions.
11539
11540 =cut
11541
11542  * =========================================================================*/
11543
11544
11545 #if defined(USE_ITHREADS)
11546
11547 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11548 #ifndef GpREFCNT_inc
11549 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11550 #endif
11551
11552
11553 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11554    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11555    If this changes, please unmerge ss_dup.
11556    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11557 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11558 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11559 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11560 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11561 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11562 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11563 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11564 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11565 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11566 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11567 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11568 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11569 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11570
11571 /* clone a parser */
11572
11573 yy_parser *
11574 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11575 {
11576     yy_parser *parser;
11577
11578     PERL_ARGS_ASSERT_PARSER_DUP;
11579
11580     if (!proto)
11581         return NULL;
11582
11583     /* look for it in the table first */
11584     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11585     if (parser)
11586         return parser;
11587
11588     /* create anew and remember what it is */
11589     Newxz(parser, 1, yy_parser);
11590     ptr_table_store(PL_ptr_table, proto, parser);
11591
11592     /* XXX these not yet duped */
11593     parser->old_parser = NULL;
11594     parser->stack = NULL;
11595     parser->ps = NULL;
11596     parser->stack_size = 0;
11597     /* XXX parser->stack->state = 0; */
11598
11599     /* XXX eventually, just Copy() most of the parser struct ? */
11600
11601     parser->lex_brackets = proto->lex_brackets;
11602     parser->lex_casemods = proto->lex_casemods;
11603     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11604                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11605     parser->lex_casestack = savepvn(proto->lex_casestack,
11606                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11607     parser->lex_defer   = proto->lex_defer;
11608     parser->lex_dojoin  = proto->lex_dojoin;
11609     parser->lex_expect  = proto->lex_expect;
11610     parser->lex_formbrack = proto->lex_formbrack;
11611     parser->lex_inpat   = proto->lex_inpat;
11612     parser->lex_inwhat  = proto->lex_inwhat;
11613     parser->lex_op      = proto->lex_op;
11614     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11615     parser->lex_starts  = proto->lex_starts;
11616     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11617     parser->multi_close = proto->multi_close;
11618     parser->multi_open  = proto->multi_open;
11619     parser->multi_start = proto->multi_start;
11620     parser->multi_end   = proto->multi_end;
11621     parser->preambled   = proto->preambled;
11622     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11623     parser->linestr     = sv_dup_inc(proto->linestr, param);
11624     parser->expect      = proto->expect;
11625     parser->copline     = proto->copline;
11626     parser->last_lop_op = proto->last_lop_op;
11627     parser->lex_state   = proto->lex_state;
11628     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11629     /* rsfp_filters entries have fake IoDIRP() */
11630     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11631     parser->in_my       = proto->in_my;
11632     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11633     parser->error_count = proto->error_count;
11634
11635
11636     parser->linestr     = sv_dup_inc(proto->linestr, param);
11637
11638     {
11639         char * const ols = SvPVX(proto->linestr);
11640         char * const ls  = SvPVX(parser->linestr);
11641
11642         parser->bufptr      = ls + (proto->bufptr >= ols ?
11643                                     proto->bufptr -  ols : 0);
11644         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11645                                     proto->oldbufptr -  ols : 0);
11646         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11647                                     proto->oldoldbufptr -  ols : 0);
11648         parser->linestart   = ls + (proto->linestart >= ols ?
11649                                     proto->linestart -  ols : 0);
11650         parser->last_uni    = ls + (proto->last_uni >= ols ?
11651                                     proto->last_uni -  ols : 0);
11652         parser->last_lop    = ls + (proto->last_lop >= ols ?
11653                                     proto->last_lop -  ols : 0);
11654
11655         parser->bufend      = ls + SvCUR(parser->linestr);
11656     }
11657
11658     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11659
11660
11661 #ifdef PERL_MAD
11662     parser->endwhite    = proto->endwhite;
11663     parser->faketokens  = proto->faketokens;
11664     parser->lasttoke    = proto->lasttoke;
11665     parser->nextwhite   = proto->nextwhite;
11666     parser->realtokenstart = proto->realtokenstart;
11667     parser->skipwhite   = proto->skipwhite;
11668     parser->thisclose   = proto->thisclose;
11669     parser->thismad     = proto->thismad;
11670     parser->thisopen    = proto->thisopen;
11671     parser->thisstuff   = proto->thisstuff;
11672     parser->thistoken   = proto->thistoken;
11673     parser->thiswhite   = proto->thiswhite;
11674
11675     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11676     parser->curforce    = proto->curforce;
11677 #else
11678     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11679     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11680     parser->nexttoke    = proto->nexttoke;
11681 #endif
11682
11683     /* XXX should clone saved_curcop here, but we aren't passed
11684      * proto_perl; so do it in perl_clone_using instead */
11685
11686     return parser;
11687 }
11688
11689
11690 /* duplicate a file handle */
11691
11692 PerlIO *
11693 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11694 {
11695     PerlIO *ret;
11696
11697     PERL_ARGS_ASSERT_FP_DUP;
11698     PERL_UNUSED_ARG(type);
11699
11700     if (!fp)
11701         return (PerlIO*)NULL;
11702
11703     /* look for it in the table first */
11704     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11705     if (ret)
11706         return ret;
11707
11708     /* create anew and remember what it is */
11709     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11710     ptr_table_store(PL_ptr_table, fp, ret);
11711     return ret;
11712 }
11713
11714 /* duplicate a directory handle */
11715
11716 DIR *
11717 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11718 {
11719     DIR *ret;
11720
11721 #ifdef HAS_FCHDIR
11722     DIR *pwd;
11723     const Direntry_t *dirent;
11724     char smallbuf[256];
11725     char *name = NULL;
11726     STRLEN len = 0;
11727     long pos;
11728 #endif
11729
11730     PERL_UNUSED_CONTEXT;
11731     PERL_ARGS_ASSERT_DIRP_DUP;
11732
11733     if (!dp)
11734         return (DIR*)NULL;
11735
11736     /* look for it in the table first */
11737     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11738     if (ret)
11739         return ret;
11740
11741 #ifdef HAS_FCHDIR
11742
11743     PERL_UNUSED_ARG(param);
11744
11745     /* create anew */
11746
11747     /* open the current directory (so we can switch back) */
11748     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11749
11750     /* chdir to our dir handle and open the present working directory */
11751     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11752         PerlDir_close(pwd);
11753         return (DIR *)NULL;
11754     }
11755     /* Now we should have two dir handles pointing to the same dir. */
11756
11757     /* Be nice to the calling code and chdir back to where we were. */
11758     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11759
11760     /* We have no need of the pwd handle any more. */
11761     PerlDir_close(pwd);
11762
11763 #ifdef DIRNAMLEN
11764 # define d_namlen(d) (d)->d_namlen
11765 #else
11766 # define d_namlen(d) strlen((d)->d_name)
11767 #endif
11768     /* Iterate once through dp, to get the file name at the current posi-
11769        tion. Then step back. */
11770     pos = PerlDir_tell(dp);
11771     if ((dirent = PerlDir_read(dp))) {
11772         len = d_namlen(dirent);
11773         if (len <= sizeof smallbuf) name = smallbuf;
11774         else Newx(name, len, char);
11775         Move(dirent->d_name, name, len, char);
11776     }
11777     PerlDir_seek(dp, pos);
11778
11779     /* Iterate through the new dir handle, till we find a file with the
11780        right name. */
11781     if (!dirent) /* just before the end */
11782         for(;;) {
11783             pos = PerlDir_tell(ret);
11784             if (PerlDir_read(ret)) continue; /* not there yet */
11785             PerlDir_seek(ret, pos); /* step back */
11786             break;
11787         }
11788     else {
11789         const long pos0 = PerlDir_tell(ret);
11790         for(;;) {
11791             pos = PerlDir_tell(ret);
11792             if ((dirent = PerlDir_read(ret))) {
11793                 if (len == d_namlen(dirent)
11794                  && memEQ(name, dirent->d_name, len)) {
11795                     /* found it */
11796                     PerlDir_seek(ret, pos); /* step back */
11797                     break;
11798                 }
11799                 /* else we are not there yet; keep iterating */
11800             }
11801             else { /* This is not meant to happen. The best we can do is
11802                       reset the iterator to the beginning. */
11803                 PerlDir_seek(ret, pos0);
11804                 break;
11805             }
11806         }
11807     }
11808 #undef d_namlen
11809
11810     if (name && name != smallbuf)
11811         Safefree(name);
11812 #endif
11813
11814 #ifdef WIN32
11815     ret = win32_dirp_dup(dp, param);
11816 #endif
11817
11818     /* pop it in the pointer table */
11819     if (ret)
11820         ptr_table_store(PL_ptr_table, dp, ret);
11821
11822     return ret;
11823 }
11824
11825 /* duplicate a typeglob */
11826
11827 GP *
11828 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11829 {
11830     GP *ret;
11831
11832     PERL_ARGS_ASSERT_GP_DUP;
11833
11834     if (!gp)
11835         return (GP*)NULL;
11836     /* look for it in the table first */
11837     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11838     if (ret)
11839         return ret;
11840
11841     /* create anew and remember what it is */
11842     Newxz(ret, 1, GP);
11843     ptr_table_store(PL_ptr_table, gp, ret);
11844
11845     /* clone */
11846     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11847        on Newxz() to do this for us.  */
11848     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11849     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11850     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11851     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11852     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11853     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11854     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11855     ret->gp_cvgen       = gp->gp_cvgen;
11856     ret->gp_line        = gp->gp_line;
11857     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11858     return ret;
11859 }
11860
11861 /* duplicate a chain of magic */
11862
11863 MAGIC *
11864 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11865 {
11866     MAGIC *mgret = NULL;
11867     MAGIC **mgprev_p = &mgret;
11868
11869     PERL_ARGS_ASSERT_MG_DUP;
11870
11871     for (; mg; mg = mg->mg_moremagic) {
11872         MAGIC *nmg;
11873
11874         if ((param->flags & CLONEf_JOIN_IN)
11875                 && mg->mg_type == PERL_MAGIC_backref)
11876             /* when joining, we let the individual SVs add themselves to
11877              * backref as needed. */
11878             continue;
11879
11880         Newx(nmg, 1, MAGIC);
11881         *mgprev_p = nmg;
11882         mgprev_p = &(nmg->mg_moremagic);
11883
11884         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11885            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11886            from the original commit adding Perl_mg_dup() - revision 4538.
11887            Similarly there is the annotation "XXX random ptr?" next to the
11888            assignment to nmg->mg_ptr.  */
11889         *nmg = *mg;
11890
11891         /* FIXME for plugins
11892         if (nmg->mg_type == PERL_MAGIC_qr) {
11893             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11894         }
11895         else
11896         */
11897         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11898                           ? nmg->mg_type == PERL_MAGIC_backref
11899                                 /* The backref AV has its reference
11900                                  * count deliberately bumped by 1 */
11901                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11902                                                     nmg->mg_obj, param))
11903                                 : sv_dup_inc(nmg->mg_obj, param)
11904                           : sv_dup(nmg->mg_obj, param);
11905
11906         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11907             if (nmg->mg_len > 0) {
11908                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11909                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11910                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11911                 {
11912                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11913                     sv_dup_inc_multiple((SV**)(namtp->table),
11914                                         (SV**)(namtp->table), NofAMmeth, param);
11915                 }
11916             }
11917             else if (nmg->mg_len == HEf_SVKEY)
11918                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11919         }
11920         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11921             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11922         }
11923     }
11924     return mgret;
11925 }
11926
11927 #endif /* USE_ITHREADS */
11928
11929 struct ptr_tbl_arena {
11930     struct ptr_tbl_arena *next;
11931     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11932 };
11933
11934 /* create a new pointer-mapping table */
11935
11936 PTR_TBL_t *
11937 Perl_ptr_table_new(pTHX)
11938 {
11939     PTR_TBL_t *tbl;
11940     PERL_UNUSED_CONTEXT;
11941
11942     Newx(tbl, 1, PTR_TBL_t);
11943     tbl->tbl_max        = 511;
11944     tbl->tbl_items      = 0;
11945     tbl->tbl_arena      = NULL;
11946     tbl->tbl_arena_next = NULL;
11947     tbl->tbl_arena_end  = NULL;
11948     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11949     return tbl;
11950 }
11951
11952 #define PTR_TABLE_HASH(ptr) \
11953   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11954
11955 /* map an existing pointer using a table */
11956
11957 STATIC PTR_TBL_ENT_t *
11958 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11959 {
11960     PTR_TBL_ENT_t *tblent;
11961     const UV hash = PTR_TABLE_HASH(sv);
11962
11963     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11964
11965     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11966     for (; tblent; tblent = tblent->next) {
11967         if (tblent->oldval == sv)
11968             return tblent;
11969     }
11970     return NULL;
11971 }
11972
11973 void *
11974 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11975 {
11976     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11977
11978     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11979     PERL_UNUSED_CONTEXT;
11980
11981     return tblent ? tblent->newval : NULL;
11982 }
11983
11984 /* add a new entry to a pointer-mapping table */
11985
11986 void
11987 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11988 {
11989     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11990
11991     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11992     PERL_UNUSED_CONTEXT;
11993
11994     if (tblent) {
11995         tblent->newval = newsv;
11996     } else {
11997         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11998
11999         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12000             struct ptr_tbl_arena *new_arena;
12001
12002             Newx(new_arena, 1, struct ptr_tbl_arena);
12003             new_arena->next = tbl->tbl_arena;
12004             tbl->tbl_arena = new_arena;
12005             tbl->tbl_arena_next = new_arena->array;
12006             tbl->tbl_arena_end = new_arena->array
12007                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
12008         }
12009
12010         tblent = tbl->tbl_arena_next++;
12011
12012         tblent->oldval = oldsv;
12013         tblent->newval = newsv;
12014         tblent->next = tbl->tbl_ary[entry];
12015         tbl->tbl_ary[entry] = tblent;
12016         tbl->tbl_items++;
12017         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12018             ptr_table_split(tbl);
12019     }
12020 }
12021
12022 /* double the hash bucket size of an existing ptr table */
12023
12024 void
12025 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12026 {
12027     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12028     const UV oldsize = tbl->tbl_max + 1;
12029     UV newsize = oldsize * 2;
12030     UV i;
12031
12032     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12033     PERL_UNUSED_CONTEXT;
12034
12035     Renew(ary, newsize, PTR_TBL_ENT_t*);
12036     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12037     tbl->tbl_max = --newsize;
12038     tbl->tbl_ary = ary;
12039     for (i=0; i < oldsize; i++, ary++) {
12040         PTR_TBL_ENT_t **entp = ary;
12041         PTR_TBL_ENT_t *ent = *ary;
12042         PTR_TBL_ENT_t **curentp;
12043         if (!ent)
12044             continue;
12045         curentp = ary + oldsize;
12046         do {
12047             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12048                 *entp = ent->next;
12049                 ent->next = *curentp;
12050                 *curentp = ent;
12051             }
12052             else
12053                 entp = &ent->next;
12054             ent = *entp;
12055         } while (ent);
12056     }
12057 }
12058
12059 /* remove all the entries from a ptr table */
12060 /* Deprecated - will be removed post 5.14 */
12061
12062 void
12063 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12064 {
12065     if (tbl && tbl->tbl_items) {
12066         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12067
12068         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12069
12070         while (arena) {
12071             struct ptr_tbl_arena *next = arena->next;
12072
12073             Safefree(arena);
12074             arena = next;
12075         };
12076
12077         tbl->tbl_items = 0;
12078         tbl->tbl_arena = NULL;
12079         tbl->tbl_arena_next = NULL;
12080         tbl->tbl_arena_end = NULL;
12081     }
12082 }
12083
12084 /* clear and free a ptr table */
12085
12086 void
12087 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12088 {
12089     struct ptr_tbl_arena *arena;
12090
12091     if (!tbl) {
12092         return;
12093     }
12094
12095     arena = tbl->tbl_arena;
12096
12097     while (arena) {
12098         struct ptr_tbl_arena *next = arena->next;
12099
12100         Safefree(arena);
12101         arena = next;
12102     }
12103
12104     Safefree(tbl->tbl_ary);
12105     Safefree(tbl);
12106 }
12107
12108 #if defined(USE_ITHREADS)
12109
12110 void
12111 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12112 {
12113     PERL_ARGS_ASSERT_RVPV_DUP;
12114
12115     assert(!isREGEXP(sstr));
12116     if (SvROK(sstr)) {
12117         if (SvWEAKREF(sstr)) {
12118             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12119             if (param->flags & CLONEf_JOIN_IN) {
12120                 /* if joining, we add any back references individually rather
12121                  * than copying the whole backref array */
12122                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12123             }
12124         }
12125         else
12126             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12127     }
12128     else if (SvPVX_const(sstr)) {
12129         /* Has something there */
12130         if (SvLEN(sstr)) {
12131             /* Normal PV - clone whole allocated space */
12132             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12133             /* sstr may not be that normal, but actually copy on write.
12134                But we are a true, independent SV, so:  */
12135             SvIsCOW_off(dstr);
12136         }
12137         else {
12138             /* Special case - not normally malloced for some reason */
12139             if (isGV_with_GP(sstr)) {
12140                 /* Don't need to do anything here.  */
12141             }
12142             else if ((SvIsCOW(sstr))) {
12143                 /* A "shared" PV - clone it as "shared" PV */
12144                 SvPV_set(dstr,
12145                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12146                                          param)));
12147             }
12148             else {
12149                 /* Some other special case - random pointer */
12150                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12151             }
12152         }
12153     }
12154     else {
12155         /* Copy the NULL */
12156         SvPV_set(dstr, NULL);
12157     }
12158 }
12159
12160 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12161 static SV **
12162 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12163                       SSize_t items, CLONE_PARAMS *const param)
12164 {
12165     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12166
12167     while (items-- > 0) {
12168         *dest++ = sv_dup_inc(*source++, param);
12169     }
12170
12171     return dest;
12172 }
12173
12174 /* duplicate an SV of any type (including AV, HV etc) */
12175
12176 static SV *
12177 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12178 {
12179     dVAR;
12180     SV *dstr;
12181
12182     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12183
12184     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12185 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12186         abort();
12187 #endif
12188         return NULL;
12189     }
12190     /* look for it in the table first */
12191     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12192     if (dstr)
12193         return dstr;
12194
12195     if(param->flags & CLONEf_JOIN_IN) {
12196         /** We are joining here so we don't want do clone
12197             something that is bad **/
12198         if (SvTYPE(sstr) == SVt_PVHV) {
12199             const HEK * const hvname = HvNAME_HEK(sstr);
12200             if (hvname) {
12201                 /** don't clone stashes if they already exist **/
12202                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12203                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12204                 ptr_table_store(PL_ptr_table, sstr, dstr);
12205                 return dstr;
12206             }
12207         }
12208         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12209             HV *stash = GvSTASH(sstr);
12210             const HEK * hvname;
12211             if (stash && (hvname = HvNAME_HEK(stash))) {
12212                 /** don't clone GVs if they already exist **/
12213                 SV **svp;
12214                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12215                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12216                 svp = hv_fetch(
12217                         stash, GvNAME(sstr),
12218                         GvNAMEUTF8(sstr)
12219                             ? -GvNAMELEN(sstr)
12220                             :  GvNAMELEN(sstr),
12221                         0
12222                       );
12223                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12224                     ptr_table_store(PL_ptr_table, sstr, *svp);
12225                     return *svp;
12226                 }
12227             }
12228         }
12229     }
12230
12231     /* create anew and remember what it is */
12232     new_SV(dstr);
12233
12234 #ifdef DEBUG_LEAKING_SCALARS
12235     dstr->sv_debug_optype = sstr->sv_debug_optype;
12236     dstr->sv_debug_line = sstr->sv_debug_line;
12237     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12238     dstr->sv_debug_parent = (SV*)sstr;
12239     FREE_SV_DEBUG_FILE(dstr);
12240     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12241 #endif
12242
12243     ptr_table_store(PL_ptr_table, sstr, dstr);
12244
12245     /* clone */
12246     SvFLAGS(dstr)       = SvFLAGS(sstr);
12247     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12248     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12249
12250 #ifdef DEBUGGING
12251     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12252         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12253                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12254 #endif
12255
12256     /* don't clone objects whose class has asked us not to */
12257     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12258         SvFLAGS(dstr) = 0;
12259         return dstr;
12260     }
12261
12262     switch (SvTYPE(sstr)) {
12263     case SVt_NULL:
12264         SvANY(dstr)     = NULL;
12265         break;
12266     case SVt_IV:
12267         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12268         if(SvROK(sstr)) {
12269             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12270         } else {
12271             SvIV_set(dstr, SvIVX(sstr));
12272         }
12273         break;
12274     case SVt_NV:
12275         SvANY(dstr)     = new_XNV();
12276         SvNV_set(dstr, SvNVX(sstr));
12277         break;
12278     default:
12279         {
12280             /* These are all the types that need complex bodies allocating.  */
12281             void *new_body;
12282             const svtype sv_type = SvTYPE(sstr);
12283             const struct body_details *const sv_type_details
12284                 = bodies_by_type + sv_type;
12285
12286             switch (sv_type) {
12287             default:
12288                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12289                 break;
12290
12291             case SVt_PVGV:
12292             case SVt_PVIO:
12293             case SVt_PVFM:
12294             case SVt_PVHV:
12295             case SVt_PVAV:
12296             case SVt_PVCV:
12297             case SVt_PVLV:
12298             case SVt_REGEXP:
12299             case SVt_PVMG:
12300             case SVt_PVNV:
12301             case SVt_PVIV:
12302             case SVt_INVLIST:
12303             case SVt_PV:
12304                 assert(sv_type_details->body_size);
12305                 if (sv_type_details->arena) {
12306                     new_body_inline(new_body, sv_type);
12307                     new_body
12308                         = (void*)((char*)new_body - sv_type_details->offset);
12309                 } else {
12310                     new_body = new_NOARENA(sv_type_details);
12311                 }
12312             }
12313             assert(new_body);
12314             SvANY(dstr) = new_body;
12315
12316 #ifndef PURIFY
12317             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12318                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12319                  sv_type_details->copy, char);
12320 #else
12321             Copy(((char*)SvANY(sstr)),
12322                  ((char*)SvANY(dstr)),
12323                  sv_type_details->body_size + sv_type_details->offset, char);
12324 #endif
12325
12326             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12327                 && !isGV_with_GP(dstr)
12328                 && !isREGEXP(dstr)
12329                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12330                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12331
12332             /* The Copy above means that all the source (unduplicated) pointers
12333                are now in the destination.  We can check the flags and the
12334                pointers in either, but it's possible that there's less cache
12335                missing by always going for the destination.
12336                FIXME - instrument and check that assumption  */
12337             if (sv_type >= SVt_PVMG) {
12338                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12339                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12340                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
12341                     NOOP;
12342                 } else if (SvMAGIC(dstr))
12343                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12344                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12345                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12346                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12347             }
12348
12349             /* The cast silences a GCC warning about unhandled types.  */
12350             switch ((int)sv_type) {
12351             case SVt_PV:
12352                 break;
12353             case SVt_PVIV:
12354                 break;
12355             case SVt_PVNV:
12356                 break;
12357             case SVt_PVMG:
12358                 break;
12359             case SVt_REGEXP:
12360               duprex:
12361                 /* FIXME for plugins */
12362                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12363                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12364                 break;
12365             case SVt_PVLV:
12366                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12367                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12368                     LvTARG(dstr) = dstr;
12369                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12370                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12371                 else
12372                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12373                 if (isREGEXP(sstr)) goto duprex;
12374             case SVt_PVGV:
12375                 /* non-GP case already handled above */
12376                 if(isGV_with_GP(sstr)) {
12377                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12378                     /* Don't call sv_add_backref here as it's going to be
12379                        created as part of the magic cloning of the symbol
12380                        table--unless this is during a join and the stash
12381                        is not actually being cloned.  */
12382                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12383                        at the point of this comment.  */
12384                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12385                     if (param->flags & CLONEf_JOIN_IN)
12386                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12387                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12388                     (void)GpREFCNT_inc(GvGP(dstr));
12389                 }
12390                 break;
12391             case SVt_PVIO:
12392                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12393                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12394                     /* I have no idea why fake dirp (rsfps)
12395                        should be treated differently but otherwise
12396                        we end up with leaks -- sky*/
12397                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12398                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12399                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12400                 } else {
12401                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12402                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12403                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12404                     if (IoDIRP(dstr)) {
12405                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12406                     } else {
12407                         NOOP;
12408                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12409                     }
12410                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12411                 }
12412                 if (IoOFP(dstr) == IoIFP(sstr))
12413                     IoOFP(dstr) = IoIFP(dstr);
12414                 else
12415                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12416                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12417                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12418                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12419                 break;
12420             case SVt_PVAV:
12421                 /* avoid cloning an empty array */
12422                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12423                     SV **dst_ary, **src_ary;
12424                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12425
12426                     src_ary = AvARRAY((const AV *)sstr);
12427                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12428                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12429                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12430                     AvALLOC((const AV *)dstr) = dst_ary;
12431                     if (AvREAL((const AV *)sstr)) {
12432                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12433                                                       param);
12434                     }
12435                     else {
12436                         while (items-- > 0)
12437                             *dst_ary++ = sv_dup(*src_ary++, param);
12438                     }
12439                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12440                     while (items-- > 0) {
12441                         *dst_ary++ = &PL_sv_undef;
12442                     }
12443                 }
12444                 else {
12445                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12446                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12447                     AvMAX(  (const AV *)dstr)   = -1;
12448                     AvFILLp((const AV *)dstr)   = -1;
12449                 }
12450                 break;
12451             case SVt_PVHV:
12452                 if (HvARRAY((const HV *)sstr)) {
12453                     STRLEN i = 0;
12454                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12455                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12456                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12457                     char *darray;
12458                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12459                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12460                         char);
12461                     HvARRAY(dstr) = (HE**)darray;
12462                     while (i <= sxhv->xhv_max) {
12463                         const HE * const source = HvARRAY(sstr)[i];
12464                         HvARRAY(dstr)[i] = source
12465                             ? he_dup(source, sharekeys, param) : 0;
12466                         ++i;
12467                     }
12468                     if (SvOOK(sstr)) {
12469                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12470                         struct xpvhv_aux * const daux = HvAUX(dstr);
12471                         /* This flag isn't copied.  */
12472                         SvOOK_on(dstr);
12473
12474                         if (saux->xhv_name_count) {
12475                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12476                             const I32 count
12477                              = saux->xhv_name_count < 0
12478                                 ? -saux->xhv_name_count
12479                                 :  saux->xhv_name_count;
12480                             HEK **shekp = sname + count;
12481                             HEK **dhekp;
12482                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12483                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12484                             while (shekp-- > sname) {
12485                                 dhekp--;
12486                                 *dhekp = hek_dup(*shekp, param);
12487                             }
12488                         }
12489                         else {
12490                             daux->xhv_name_u.xhvnameu_name
12491                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12492                                           param);
12493                         }
12494                         daux->xhv_name_count = saux->xhv_name_count;
12495
12496                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12497                         daux->xhv_riter = saux->xhv_riter;
12498                         daux->xhv_eiter = saux->xhv_eiter
12499                             ? he_dup(saux->xhv_eiter,
12500                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12501                         /* backref array needs refcnt=2; see sv_add_backref */
12502                         daux->xhv_backreferences =
12503                             (param->flags & CLONEf_JOIN_IN)
12504                                 /* when joining, we let the individual GVs and
12505                                  * CVs add themselves to backref as
12506                                  * needed. This avoids pulling in stuff
12507                                  * that isn't required, and simplifies the
12508                                  * case where stashes aren't cloned back
12509                                  * if they already exist in the parent
12510                                  * thread */
12511                             ? NULL
12512                             : saux->xhv_backreferences
12513                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12514                                     ? MUTABLE_AV(SvREFCNT_inc(
12515                                           sv_dup_inc((const SV *)
12516                                             saux->xhv_backreferences, param)))
12517                                     : MUTABLE_AV(sv_dup((const SV *)
12518                                             saux->xhv_backreferences, param))
12519                                 : 0;
12520
12521                         daux->xhv_mro_meta = saux->xhv_mro_meta
12522                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12523                             : 0;
12524
12525                         /* Record stashes for possible cloning in Perl_clone(). */
12526                         if (HvNAME(sstr))
12527                             av_push(param->stashes, dstr);
12528                     }
12529                 }
12530                 else
12531                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12532                 break;
12533             case SVt_PVCV:
12534                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12535                     CvDEPTH(dstr) = 0;
12536                 }
12537                 /*FALLTHROUGH*/
12538             case SVt_PVFM:
12539                 /* NOTE: not refcounted */
12540                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12541                     hv_dup(CvSTASH(dstr), param);
12542                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12543                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12544                 if (!CvISXSUB(dstr)) {
12545                     OP_REFCNT_LOCK;
12546                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12547                     OP_REFCNT_UNLOCK;
12548                     CvSLABBED_off(dstr);
12549                 } else if (CvCONST(dstr)) {
12550                     CvXSUBANY(dstr).any_ptr =
12551                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12552                 }
12553                 assert(!CvSLABBED(dstr));
12554                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12555                 if (CvNAMED(dstr))
12556                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12557                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12558                 /* don't dup if copying back - CvGV isn't refcounted, so the
12559                  * duped GV may never be freed. A bit of a hack! DAPM */
12560                 else
12561                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12562                     CvCVGV_RC(dstr)
12563                     ? gv_dup_inc(CvGV(sstr), param)
12564                     : (param->flags & CLONEf_JOIN_IN)
12565                         ? NULL
12566                         : gv_dup(CvGV(sstr), param);
12567
12568                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12569                 CvOUTSIDE(dstr) =
12570                     CvWEAKOUTSIDE(sstr)
12571                     ? cv_dup(    CvOUTSIDE(dstr), param)
12572                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12573                 break;
12574             }
12575         }
12576     }
12577
12578     return dstr;
12579  }
12580
12581 SV *
12582 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12583 {
12584     PERL_ARGS_ASSERT_SV_DUP_INC;
12585     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12586 }
12587
12588 SV *
12589 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12590 {
12591     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12592     PERL_ARGS_ASSERT_SV_DUP;
12593
12594     /* Track every SV that (at least initially) had a reference count of 0.
12595        We need to do this by holding an actual reference to it in this array.
12596        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12597        (akin to the stashes hash, and the perl stack), we come unstuck if
12598        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12599        thread) is manipulated in a CLONE method, because CLONE runs before the
12600        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12601        (and fix things up by giving each a reference via the temps stack).
12602        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12603        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12604        before the walk of unreferenced happens and a reference to that is SV
12605        added to the temps stack. At which point we have the same SV considered
12606        to be in use, and free to be re-used. Not good.
12607     */
12608     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12609         assert(param->unreferenced);
12610         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12611     }
12612
12613     return dstr;
12614 }
12615
12616 /* duplicate a context */
12617
12618 PERL_CONTEXT *
12619 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12620 {
12621     PERL_CONTEXT *ncxs;
12622
12623     PERL_ARGS_ASSERT_CX_DUP;
12624
12625     if (!cxs)
12626         return (PERL_CONTEXT*)NULL;
12627
12628     /* look for it in the table first */
12629     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12630     if (ncxs)
12631         return ncxs;
12632
12633     /* create anew and remember what it is */
12634     Newx(ncxs, max + 1, PERL_CONTEXT);
12635     ptr_table_store(PL_ptr_table, cxs, ncxs);
12636     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12637
12638     while (ix >= 0) {
12639         PERL_CONTEXT * const ncx = &ncxs[ix];
12640         if (CxTYPE(ncx) == CXt_SUBST) {
12641             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12642         }
12643         else {
12644             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12645             switch (CxTYPE(ncx)) {
12646             case CXt_SUB:
12647                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12648                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12649                                            : cv_dup(ncx->blk_sub.cv,param));
12650                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12651                                            ? av_dup_inc(ncx->blk_sub.argarray,
12652                                                         param)
12653                                            : NULL);
12654                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12655                                                      param);
12656                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12657                                            ncx->blk_sub.oldcomppad);
12658                 break;
12659             case CXt_EVAL:
12660                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12661                                                       param);
12662                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12663                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12664                 break;
12665             case CXt_LOOP_LAZYSV:
12666                 ncx->blk_loop.state_u.lazysv.end
12667                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12668                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12669                    actually being the same function, and order equivalence of
12670                    the two unions.
12671                    We can assert the later [but only at run time :-(]  */
12672                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12673                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12674             case CXt_LOOP_FOR:
12675                 ncx->blk_loop.state_u.ary.ary
12676                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12677             case CXt_LOOP_LAZYIV:
12678             case CXt_LOOP_PLAIN:
12679                 if (CxPADLOOP(ncx)) {
12680                     ncx->blk_loop.itervar_u.oldcomppad
12681                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12682                                         ncx->blk_loop.itervar_u.oldcomppad);
12683                 } else {
12684                     ncx->blk_loop.itervar_u.gv
12685                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12686                                     param);
12687                 }
12688                 break;
12689             case CXt_FORMAT:
12690                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12691                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12692                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12693                                                      param);
12694                 break;
12695             case CXt_BLOCK:
12696             case CXt_NULL:
12697             case CXt_WHEN:
12698             case CXt_GIVEN:
12699                 break;
12700             }
12701         }
12702         --ix;
12703     }
12704     return ncxs;
12705 }
12706
12707 /* duplicate a stack info structure */
12708
12709 PERL_SI *
12710 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12711 {
12712     PERL_SI *nsi;
12713
12714     PERL_ARGS_ASSERT_SI_DUP;
12715
12716     if (!si)
12717         return (PERL_SI*)NULL;
12718
12719     /* look for it in the table first */
12720     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12721     if (nsi)
12722         return nsi;
12723
12724     /* create anew and remember what it is */
12725     Newxz(nsi, 1, PERL_SI);
12726     ptr_table_store(PL_ptr_table, si, nsi);
12727
12728     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12729     nsi->si_cxix        = si->si_cxix;
12730     nsi->si_cxmax       = si->si_cxmax;
12731     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12732     nsi->si_type        = si->si_type;
12733     nsi->si_prev        = si_dup(si->si_prev, param);
12734     nsi->si_next        = si_dup(si->si_next, param);
12735     nsi->si_markoff     = si->si_markoff;
12736
12737     return nsi;
12738 }
12739
12740 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12741 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12742 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12743 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12744 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12745 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12746 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12747 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12748 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12749 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12750 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12751 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12752 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12753 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12754 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12755 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12756
12757 /* XXXXX todo */
12758 #define pv_dup_inc(p)   SAVEPV(p)
12759 #define pv_dup(p)       SAVEPV(p)
12760 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12761
12762 /* map any object to the new equivent - either something in the
12763  * ptr table, or something in the interpreter structure
12764  */
12765
12766 void *
12767 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12768 {
12769     void *ret;
12770
12771     PERL_ARGS_ASSERT_ANY_DUP;
12772
12773     if (!v)
12774         return (void*)NULL;
12775
12776     /* look for it in the table first */
12777     ret = ptr_table_fetch(PL_ptr_table, v);
12778     if (ret)
12779         return ret;
12780
12781     /* see if it is part of the interpreter structure */
12782     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12783         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12784     else {
12785         ret = v;
12786     }
12787
12788     return ret;
12789 }
12790
12791 /* duplicate the save stack */
12792
12793 ANY *
12794 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12795 {
12796     dVAR;
12797     ANY * const ss      = proto_perl->Isavestack;
12798     const I32 max       = proto_perl->Isavestack_max;
12799     I32 ix              = proto_perl->Isavestack_ix;
12800     ANY *nss;
12801     const SV *sv;
12802     const GV *gv;
12803     const AV *av;
12804     const HV *hv;
12805     void* ptr;
12806     int intval;
12807     long longval;
12808     GP *gp;
12809     IV iv;
12810     I32 i;
12811     char *c = NULL;
12812     void (*dptr) (void*);
12813     void (*dxptr) (pTHX_ void*);
12814
12815     PERL_ARGS_ASSERT_SS_DUP;
12816
12817     Newxz(nss, max, ANY);
12818
12819     while (ix > 0) {
12820         const UV uv = POPUV(ss,ix);
12821         const U8 type = (U8)uv & SAVE_MASK;
12822
12823         TOPUV(nss,ix) = uv;
12824         switch (type) {
12825         case SAVEt_CLEARSV:
12826         case SAVEt_CLEARPADRANGE:
12827             break;
12828         case SAVEt_HELEM:               /* hash element */
12829             sv = (const SV *)POPPTR(ss,ix);
12830             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12831             /* fall through */
12832         case SAVEt_ITEM:                        /* normal string */
12833         case SAVEt_GVSV:                        /* scalar slot in GV */
12834         case SAVEt_SV:                          /* scalar reference */
12835             sv = (const SV *)POPPTR(ss,ix);
12836             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12837             /* fall through */
12838         case SAVEt_FREESV:
12839         case SAVEt_MORTALIZESV:
12840         case SAVEt_READONLY_OFF:
12841             sv = (const SV *)POPPTR(ss,ix);
12842             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12843             break;
12844         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12845             c = (char*)POPPTR(ss,ix);
12846             TOPPTR(nss,ix) = savesharedpv(c);
12847             ptr = POPPTR(ss,ix);
12848             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12849             break;
12850         case SAVEt_GENERIC_SVREF:               /* generic sv */
12851         case SAVEt_SVREF:                       /* scalar reference */
12852             sv = (const SV *)POPPTR(ss,ix);
12853             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12854             ptr = POPPTR(ss,ix);
12855             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12856             break;
12857         case SAVEt_GVSLOT:              /* any slot in GV */
12858             sv = (const SV *)POPPTR(ss,ix);
12859             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12860             ptr = POPPTR(ss,ix);
12861             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12862             sv = (const SV *)POPPTR(ss,ix);
12863             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12864             break;
12865         case SAVEt_HV:                          /* hash reference */
12866         case SAVEt_AV:                          /* array reference */
12867             sv = (const SV *) POPPTR(ss,ix);
12868             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12869             /* fall through */
12870         case SAVEt_COMPPAD:
12871         case SAVEt_NSTAB:
12872             sv = (const SV *) POPPTR(ss,ix);
12873             TOPPTR(nss,ix) = sv_dup(sv, param);
12874             break;
12875         case SAVEt_INT:                         /* int reference */
12876             ptr = POPPTR(ss,ix);
12877             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12878             intval = (int)POPINT(ss,ix);
12879             TOPINT(nss,ix) = intval;
12880             break;
12881         case SAVEt_LONG:                        /* long reference */
12882             ptr = POPPTR(ss,ix);
12883             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12884             longval = (long)POPLONG(ss,ix);
12885             TOPLONG(nss,ix) = longval;
12886             break;
12887         case SAVEt_I32:                         /* I32 reference */
12888             ptr = POPPTR(ss,ix);
12889             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12890             i = POPINT(ss,ix);
12891             TOPINT(nss,ix) = i;
12892             break;
12893         case SAVEt_IV:                          /* IV reference */
12894         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
12895             ptr = POPPTR(ss,ix);
12896             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12897             iv = POPIV(ss,ix);
12898             TOPIV(nss,ix) = iv;
12899             break;
12900         case SAVEt_HPTR:                        /* HV* reference */
12901         case SAVEt_APTR:                        /* AV* reference */
12902         case SAVEt_SPTR:                        /* SV* reference */
12903             ptr = POPPTR(ss,ix);
12904             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12905             sv = (const SV *)POPPTR(ss,ix);
12906             TOPPTR(nss,ix) = sv_dup(sv, param);
12907             break;
12908         case SAVEt_VPTR:                        /* random* reference */
12909             ptr = POPPTR(ss,ix);
12910             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12911             /* Fall through */
12912         case SAVEt_INT_SMALL:
12913         case SAVEt_I32_SMALL:
12914         case SAVEt_I16:                         /* I16 reference */
12915         case SAVEt_I8:                          /* I8 reference */
12916         case SAVEt_BOOL:
12917             ptr = POPPTR(ss,ix);
12918             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12919             break;
12920         case SAVEt_GENERIC_PVREF:               /* generic char* */
12921         case SAVEt_PPTR:                        /* char* reference */
12922             ptr = POPPTR(ss,ix);
12923             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12924             c = (char*)POPPTR(ss,ix);
12925             TOPPTR(nss,ix) = pv_dup(c);
12926             break;
12927         case SAVEt_GP:                          /* scalar reference */
12928             gp = (GP*)POPPTR(ss,ix);
12929             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12930             (void)GpREFCNT_inc(gp);
12931             gv = (const GV *)POPPTR(ss,ix);
12932             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12933             break;
12934         case SAVEt_FREEOP:
12935             ptr = POPPTR(ss,ix);
12936             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12937                 /* these are assumed to be refcounted properly */
12938                 OP *o;
12939                 switch (((OP*)ptr)->op_type) {
12940                 case OP_LEAVESUB:
12941                 case OP_LEAVESUBLV:
12942                 case OP_LEAVEEVAL:
12943                 case OP_LEAVE:
12944                 case OP_SCOPE:
12945                 case OP_LEAVEWRITE:
12946                     TOPPTR(nss,ix) = ptr;
12947                     o = (OP*)ptr;
12948                     OP_REFCNT_LOCK;
12949                     (void) OpREFCNT_inc(o);
12950                     OP_REFCNT_UNLOCK;
12951                     break;
12952                 default:
12953                     TOPPTR(nss,ix) = NULL;
12954                     break;
12955                 }
12956             }
12957             else
12958                 TOPPTR(nss,ix) = NULL;
12959             break;
12960         case SAVEt_FREECOPHH:
12961             ptr = POPPTR(ss,ix);
12962             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12963             break;
12964         case SAVEt_ADELETE:
12965             av = (const AV *)POPPTR(ss,ix);
12966             TOPPTR(nss,ix) = av_dup_inc(av, param);
12967             i = POPINT(ss,ix);
12968             TOPINT(nss,ix) = i;
12969             break;
12970         case SAVEt_DELETE:
12971             hv = (const HV *)POPPTR(ss,ix);
12972             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12973             i = POPINT(ss,ix);
12974             TOPINT(nss,ix) = i;
12975             /* Fall through */
12976         case SAVEt_FREEPV:
12977             c = (char*)POPPTR(ss,ix);
12978             TOPPTR(nss,ix) = pv_dup_inc(c);
12979             break;
12980         case SAVEt_STACK_POS:           /* Position on Perl stack */
12981             i = POPINT(ss,ix);
12982             TOPINT(nss,ix) = i;
12983             break;
12984         case SAVEt_DESTRUCTOR:
12985             ptr = POPPTR(ss,ix);
12986             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12987             dptr = POPDPTR(ss,ix);
12988             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12989                                         any_dup(FPTR2DPTR(void *, dptr),
12990                                                 proto_perl));
12991             break;
12992         case SAVEt_DESTRUCTOR_X:
12993             ptr = POPPTR(ss,ix);
12994             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12995             dxptr = POPDXPTR(ss,ix);
12996             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12997                                          any_dup(FPTR2DPTR(void *, dxptr),
12998                                                  proto_perl));
12999             break;
13000         case SAVEt_REGCONTEXT:
13001         case SAVEt_ALLOC:
13002             ix -= uv >> SAVE_TIGHT_SHIFT;
13003             break;
13004         case SAVEt_AELEM:               /* array element */
13005             sv = (const SV *)POPPTR(ss,ix);
13006             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13007             i = POPINT(ss,ix);
13008             TOPINT(nss,ix) = i;
13009             av = (const AV *)POPPTR(ss,ix);
13010             TOPPTR(nss,ix) = av_dup_inc(av, param);
13011             break;
13012         case SAVEt_OP:
13013             ptr = POPPTR(ss,ix);
13014             TOPPTR(nss,ix) = ptr;
13015             break;
13016         case SAVEt_HINTS:
13017             ptr = POPPTR(ss,ix);
13018             ptr = cophh_copy((COPHH*)ptr);
13019             TOPPTR(nss,ix) = ptr;
13020             i = POPINT(ss,ix);
13021             TOPINT(nss,ix) = i;
13022             if (i & HINT_LOCALIZE_HH) {
13023                 hv = (const HV *)POPPTR(ss,ix);
13024                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13025             }
13026             break;
13027         case SAVEt_PADSV_AND_MORTALIZE:
13028             longval = (long)POPLONG(ss,ix);
13029             TOPLONG(nss,ix) = longval;
13030             ptr = POPPTR(ss,ix);
13031             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13032             sv = (const SV *)POPPTR(ss,ix);
13033             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13034             break;
13035         case SAVEt_SET_SVFLAGS:
13036             i = POPINT(ss,ix);
13037             TOPINT(nss,ix) = i;
13038             i = POPINT(ss,ix);
13039             TOPINT(nss,ix) = i;
13040             sv = (const SV *)POPPTR(ss,ix);
13041             TOPPTR(nss,ix) = sv_dup(sv, param);
13042             break;
13043         case SAVEt_COMPILE_WARNINGS:
13044             ptr = POPPTR(ss,ix);
13045             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13046             break;
13047         case SAVEt_PARSER:
13048             ptr = POPPTR(ss,ix);
13049             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13050             break;
13051         default:
13052             Perl_croak(aTHX_
13053                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13054         }
13055     }
13056
13057     return nss;
13058 }
13059
13060
13061 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13062  * flag to the result. This is done for each stash before cloning starts,
13063  * so we know which stashes want their objects cloned */
13064
13065 static void
13066 do_mark_cloneable_stash(pTHX_ SV *const sv)
13067 {
13068     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13069     if (hvname) {
13070         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13071         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13072         if (cloner && GvCV(cloner)) {
13073             dSP;
13074             UV status;
13075
13076             ENTER;
13077             SAVETMPS;
13078             PUSHMARK(SP);
13079             mXPUSHs(newSVhek(hvname));
13080             PUTBACK;
13081             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13082             SPAGAIN;
13083             status = POPu;
13084             PUTBACK;
13085             FREETMPS;
13086             LEAVE;
13087             if (status)
13088                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13089         }
13090     }
13091 }
13092
13093
13094
13095 /*
13096 =for apidoc perl_clone
13097
13098 Create and return a new interpreter by cloning the current one.
13099
13100 perl_clone takes these flags as parameters:
13101
13102 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13103 without it we only clone the data and zero the stacks,
13104 with it we copy the stacks and the new perl interpreter is
13105 ready to run at the exact same point as the previous one.
13106 The pseudo-fork code uses COPY_STACKS while the
13107 threads->create doesn't.
13108
13109 CLONEf_KEEP_PTR_TABLE -
13110 perl_clone keeps a ptr_table with the pointer of the old
13111 variable as a key and the new variable as a value,
13112 this allows it to check if something has been cloned and not
13113 clone it again but rather just use the value and increase the
13114 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13115 the ptr_table using the function
13116 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13117 reason to keep it around is if you want to dup some of your own
13118 variable who are outside the graph perl scans, example of this
13119 code is in threads.xs create.
13120
13121 CLONEf_CLONE_HOST -
13122 This is a win32 thing, it is ignored on unix, it tells perls
13123 win32host code (which is c++) to clone itself, this is needed on
13124 win32 if you want to run two threads at the same time,
13125 if you just want to do some stuff in a separate perl interpreter
13126 and then throw it away and return to the original one,
13127 you don't need to do anything.
13128
13129 =cut
13130 */
13131
13132 /* XXX the above needs expanding by someone who actually understands it ! */
13133 EXTERN_C PerlInterpreter *
13134 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13135
13136 PerlInterpreter *
13137 perl_clone(PerlInterpreter *proto_perl, UV flags)
13138 {
13139    dVAR;
13140 #ifdef PERL_IMPLICIT_SYS
13141
13142     PERL_ARGS_ASSERT_PERL_CLONE;
13143
13144    /* perlhost.h so we need to call into it
13145    to clone the host, CPerlHost should have a c interface, sky */
13146
13147    if (flags & CLONEf_CLONE_HOST) {
13148        return perl_clone_host(proto_perl,flags);
13149    }
13150    return perl_clone_using(proto_perl, flags,
13151                             proto_perl->IMem,
13152                             proto_perl->IMemShared,
13153                             proto_perl->IMemParse,
13154                             proto_perl->IEnv,
13155                             proto_perl->IStdIO,
13156                             proto_perl->ILIO,
13157                             proto_perl->IDir,
13158                             proto_perl->ISock,
13159                             proto_perl->IProc);
13160 }
13161
13162 PerlInterpreter *
13163 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13164                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13165                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13166                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13167                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13168                  struct IPerlProc* ipP)
13169 {
13170     /* XXX many of the string copies here can be optimized if they're
13171      * constants; they need to be allocated as common memory and just
13172      * their pointers copied. */
13173
13174     IV i;
13175     CLONE_PARAMS clone_params;
13176     CLONE_PARAMS* const param = &clone_params;
13177
13178     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13179
13180     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13181 #else           /* !PERL_IMPLICIT_SYS */
13182     IV i;
13183     CLONE_PARAMS clone_params;
13184     CLONE_PARAMS* param = &clone_params;
13185     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13186
13187     PERL_ARGS_ASSERT_PERL_CLONE;
13188 #endif          /* PERL_IMPLICIT_SYS */
13189
13190     /* for each stash, determine whether its objects should be cloned */
13191     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13192     PERL_SET_THX(my_perl);
13193
13194 #ifdef DEBUGGING
13195     PoisonNew(my_perl, 1, PerlInterpreter);
13196     PL_op = NULL;
13197     PL_curcop = NULL;
13198     PL_defstash = NULL; /* may be used by perl malloc() */
13199     PL_markstack = 0;
13200     PL_scopestack = 0;
13201     PL_scopestack_name = 0;
13202     PL_savestack = 0;
13203     PL_savestack_ix = 0;
13204     PL_savestack_max = -1;
13205     PL_sig_pending = 0;
13206     PL_parser = NULL;
13207     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13208 #  ifdef DEBUG_LEAKING_SCALARS
13209     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13210 #  endif
13211 #else   /* !DEBUGGING */
13212     Zero(my_perl, 1, PerlInterpreter);
13213 #endif  /* DEBUGGING */
13214
13215 #ifdef PERL_IMPLICIT_SYS
13216     /* host pointers */
13217     PL_Mem              = ipM;
13218     PL_MemShared        = ipMS;
13219     PL_MemParse         = ipMP;
13220     PL_Env              = ipE;
13221     PL_StdIO            = ipStd;
13222     PL_LIO              = ipLIO;
13223     PL_Dir              = ipD;
13224     PL_Sock             = ipS;
13225     PL_Proc             = ipP;
13226 #endif          /* PERL_IMPLICIT_SYS */
13227
13228
13229     param->flags = flags;
13230     /* Nothing in the core code uses this, but we make it available to
13231        extensions (using mg_dup).  */
13232     param->proto_perl = proto_perl;
13233     /* Likely nothing will use this, but it is initialised to be consistent
13234        with Perl_clone_params_new().  */
13235     param->new_perl = my_perl;
13236     param->unreferenced = NULL;
13237
13238
13239     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13240
13241     PL_body_arenas = NULL;
13242     Zero(&PL_body_roots, 1, PL_body_roots);
13243     
13244     PL_sv_count         = 0;
13245     PL_sv_root          = NULL;
13246     PL_sv_arenaroot     = NULL;
13247
13248     PL_debug            = proto_perl->Idebug;
13249
13250     /* dbargs array probably holds garbage */
13251     PL_dbargs           = NULL;
13252
13253     PL_compiling = proto_perl->Icompiling;
13254
13255     /* pseudo environmental stuff */
13256     PL_origargc         = proto_perl->Iorigargc;
13257     PL_origargv         = proto_perl->Iorigargv;
13258
13259 #if !NO_TAINT_SUPPORT
13260     /* Set tainting stuff before PerlIO_debug can possibly get called */
13261     PL_tainting         = proto_perl->Itainting;
13262     PL_taint_warn       = proto_perl->Itaint_warn;
13263 #else
13264     PL_tainting         = FALSE;
13265     PL_taint_warn       = FALSE;
13266 #endif
13267
13268     PL_minus_c          = proto_perl->Iminus_c;
13269
13270     PL_localpatches     = proto_perl->Ilocalpatches;
13271     PL_splitstr         = proto_perl->Isplitstr;
13272     PL_minus_n          = proto_perl->Iminus_n;
13273     PL_minus_p          = proto_perl->Iminus_p;
13274     PL_minus_l          = proto_perl->Iminus_l;
13275     PL_minus_a          = proto_perl->Iminus_a;
13276     PL_minus_E          = proto_perl->Iminus_E;
13277     PL_minus_F          = proto_perl->Iminus_F;
13278     PL_doswitches       = proto_perl->Idoswitches;
13279     PL_dowarn           = proto_perl->Idowarn;
13280 #ifdef PERL_SAWAMPERSAND
13281     PL_sawampersand     = proto_perl->Isawampersand;
13282 #endif
13283     PL_unsafe           = proto_perl->Iunsafe;
13284     PL_perldb           = proto_perl->Iperldb;
13285     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13286     PL_exit_flags       = proto_perl->Iexit_flags;
13287
13288     /* XXX time(&PL_basetime) when asked for? */
13289     PL_basetime         = proto_perl->Ibasetime;
13290
13291     PL_maxsysfd         = proto_perl->Imaxsysfd;
13292     PL_statusvalue      = proto_perl->Istatusvalue;
13293 #ifdef VMS
13294     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13295 #else
13296     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13297 #endif
13298
13299     /* RE engine related */
13300     PL_regmatch_slab    = NULL;
13301     PL_reg_curpm        = NULL;
13302
13303     PL_sub_generation   = proto_perl->Isub_generation;
13304
13305     /* funky return mechanisms */
13306     PL_forkprocess      = proto_perl->Iforkprocess;
13307
13308     /* internal state */
13309     PL_maxo             = proto_perl->Imaxo;
13310
13311     PL_main_start       = proto_perl->Imain_start;
13312     PL_eval_root        = proto_perl->Ieval_root;
13313     PL_eval_start       = proto_perl->Ieval_start;
13314
13315     PL_filemode         = proto_perl->Ifilemode;
13316     PL_lastfd           = proto_perl->Ilastfd;
13317     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13318     PL_Argv             = NULL;
13319     PL_Cmd              = NULL;
13320     PL_gensym           = proto_perl->Igensym;
13321
13322     PL_laststatval      = proto_perl->Ilaststatval;
13323     PL_laststype        = proto_perl->Ilaststype;
13324     PL_mess_sv          = NULL;
13325
13326     PL_profiledata      = NULL;
13327
13328     PL_generation       = proto_perl->Igeneration;
13329
13330     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13331     PL_in_clean_all     = proto_perl->Iin_clean_all;
13332
13333     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13334     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13335     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13336     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13337     PL_nomemok          = proto_perl->Inomemok;
13338     PL_an               = proto_perl->Ian;
13339     PL_evalseq          = proto_perl->Ievalseq;
13340     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13341     PL_origalen         = proto_perl->Iorigalen;
13342
13343     PL_sighandlerp      = proto_perl->Isighandlerp;
13344
13345     PL_runops           = proto_perl->Irunops;
13346
13347     PL_subline          = proto_perl->Isubline;
13348
13349 #ifdef FCRYPT
13350     PL_cryptseen        = proto_perl->Icryptseen;
13351 #endif
13352
13353 #ifdef USE_LOCALE_COLLATE
13354     PL_collation_ix     = proto_perl->Icollation_ix;
13355     PL_collation_standard       = proto_perl->Icollation_standard;
13356     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13357     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13358 #endif /* USE_LOCALE_COLLATE */
13359
13360 #ifdef USE_LOCALE_NUMERIC
13361     PL_numeric_standard = proto_perl->Inumeric_standard;
13362     PL_numeric_local    = proto_perl->Inumeric_local;
13363 #endif /* !USE_LOCALE_NUMERIC */
13364
13365     /* Did the locale setup indicate UTF-8? */
13366     PL_utf8locale       = proto_perl->Iutf8locale;
13367     /* Unicode features (see perlrun/-C) */
13368     PL_unicode          = proto_perl->Iunicode;
13369
13370     /* Pre-5.8 signals control */
13371     PL_signals          = proto_perl->Isignals;
13372
13373     /* times() ticks per second */
13374     PL_clocktick        = proto_perl->Iclocktick;
13375
13376     /* Recursion stopper for PerlIO_find_layer */
13377     PL_in_load_module   = proto_perl->Iin_load_module;
13378
13379     /* sort() routine */
13380     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13381
13382     /* Not really needed/useful since the reenrant_retint is "volatile",
13383      * but do it for consistency's sake. */
13384     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13385
13386     /* Hooks to shared SVs and locks. */
13387     PL_sharehook        = proto_perl->Isharehook;
13388     PL_lockhook         = proto_perl->Ilockhook;
13389     PL_unlockhook       = proto_perl->Iunlockhook;
13390     PL_threadhook       = proto_perl->Ithreadhook;
13391     PL_destroyhook      = proto_perl->Idestroyhook;
13392     PL_signalhook       = proto_perl->Isignalhook;
13393
13394     PL_globhook         = proto_perl->Iglobhook;
13395
13396     /* swatch cache */
13397     PL_last_swash_hv    = NULL; /* reinits on demand */
13398     PL_last_swash_klen  = 0;
13399     PL_last_swash_key[0]= '\0';
13400     PL_last_swash_tmps  = (U8*)NULL;
13401     PL_last_swash_slen  = 0;
13402
13403     PL_srand_called     = proto_perl->Isrand_called;
13404
13405     if (flags & CLONEf_COPY_STACKS) {
13406         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13407         PL_tmps_ix              = proto_perl->Itmps_ix;
13408         PL_tmps_max             = proto_perl->Itmps_max;
13409         PL_tmps_floor           = proto_perl->Itmps_floor;
13410
13411         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13412          * NOTE: unlike the others! */
13413         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13414         PL_scopestack_max       = proto_perl->Iscopestack_max;
13415
13416         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13417          * NOTE: unlike the others! */
13418         PL_savestack_ix         = proto_perl->Isavestack_ix;
13419         PL_savestack_max        = proto_perl->Isavestack_max;
13420     }
13421
13422     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13423     PL_top_env          = &PL_start_env;
13424
13425     PL_op               = proto_perl->Iop;
13426
13427     PL_Sv               = NULL;
13428     PL_Xpv              = (XPV*)NULL;
13429     my_perl->Ina        = proto_perl->Ina;
13430
13431     PL_statbuf          = proto_perl->Istatbuf;
13432     PL_statcache        = proto_perl->Istatcache;
13433
13434 #ifdef HAS_TIMES
13435     PL_timesbuf         = proto_perl->Itimesbuf;
13436 #endif
13437
13438 #if !NO_TAINT_SUPPORT
13439     PL_tainted          = proto_perl->Itainted;
13440 #else
13441     PL_tainted          = FALSE;
13442 #endif
13443     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13444
13445     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13446
13447     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13448     PL_restartop        = proto_perl->Irestartop;
13449     PL_in_eval          = proto_perl->Iin_eval;
13450     PL_delaymagic       = proto_perl->Idelaymagic;
13451     PL_phase            = proto_perl->Iphase;
13452     PL_localizing       = proto_perl->Ilocalizing;
13453
13454     PL_hv_fetch_ent_mh  = NULL;
13455     PL_modcount         = proto_perl->Imodcount;
13456     PL_lastgotoprobe    = NULL;
13457     PL_dumpindent       = proto_perl->Idumpindent;
13458
13459     PL_efloatbuf        = NULL;         /* reinits on demand */
13460     PL_efloatsize       = 0;                    /* reinits on demand */
13461
13462     /* regex stuff */
13463
13464     PL_colorset         = 0;            /* reinits PL_colors[] */
13465     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13466
13467     /* Pluggable optimizer */
13468     PL_peepp            = proto_perl->Ipeepp;
13469     PL_rpeepp           = proto_perl->Irpeepp;
13470     /* op_free() hook */
13471     PL_opfreehook       = proto_perl->Iopfreehook;
13472
13473 #ifdef USE_REENTRANT_API
13474     /* XXX: things like -Dm will segfault here in perlio, but doing
13475      *  PERL_SET_CONTEXT(proto_perl);
13476      * breaks too many other things
13477      */
13478     Perl_reentrant_init(aTHX);
13479 #endif
13480
13481     /* create SV map for pointer relocation */
13482     PL_ptr_table = ptr_table_new();
13483
13484     /* initialize these special pointers as early as possible */
13485     init_constants();
13486     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13487     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13488     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13489
13490     /* create (a non-shared!) shared string table */
13491     PL_strtab           = newHV();
13492     HvSHAREKEYS_off(PL_strtab);
13493     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13494     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13495
13496     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13497
13498     /* This PV will be free'd special way so must set it same way op.c does */
13499     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13500     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13501
13502     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13503     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13504     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13505     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13506
13507     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13508     /* This makes no difference to the implementation, as it always pushes
13509        and shifts pointers to other SVs without changing their reference
13510        count, with the array becoming empty before it is freed. However, it
13511        makes it conceptually clear what is going on, and will avoid some
13512        work inside av.c, filling slots between AvFILL() and AvMAX() with
13513        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13514     AvREAL_off(param->stashes);
13515
13516     if (!(flags & CLONEf_COPY_STACKS)) {
13517         param->unreferenced = newAV();
13518     }
13519
13520 #ifdef PERLIO_LAYERS
13521     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13522     PerlIO_clone(aTHX_ proto_perl, param);
13523 #endif
13524
13525     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13526     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13527     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13528     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13529     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13530     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13531
13532     /* switches */
13533     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13534     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13535     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13536     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13537
13538     /* magical thingies */
13539
13540     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13541
13542     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13543     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13544     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13545
13546    
13547     /* Clone the regex array */
13548     /* ORANGE FIXME for plugins, probably in the SV dup code.
13549        newSViv(PTR2IV(CALLREGDUPE(
13550        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13551     */
13552     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13553     PL_regex_pad = AvARRAY(PL_regex_padav);
13554
13555     PL_stashpadmax      = proto_perl->Istashpadmax;
13556     PL_stashpadix       = proto_perl->Istashpadix ;
13557     Newx(PL_stashpad, PL_stashpadmax, HV *);
13558     {
13559         PADOFFSET o = 0;
13560         for (; o < PL_stashpadmax; ++o)
13561             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13562     }
13563
13564     /* shortcuts to various I/O objects */
13565     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13566     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13567     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13568     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13569     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13570     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13571     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13572
13573     /* shortcuts to regexp stuff */
13574     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13575
13576     /* shortcuts to misc objects */
13577     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13578
13579     /* shortcuts to debugging objects */
13580     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13581     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13582     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13583     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13584     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13585     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13586
13587     /* symbol tables */
13588     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13589     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13590     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13591     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13592     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13593
13594     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13595     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13596     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13597     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13598     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13599     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13600     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13601     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13602
13603     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13604
13605     /* subprocess state */
13606     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13607
13608     if (proto_perl->Iop_mask)
13609         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13610     else
13611         PL_op_mask      = NULL;
13612     /* PL_asserting        = proto_perl->Iasserting; */
13613
13614     /* current interpreter roots */
13615     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13616     OP_REFCNT_LOCK;
13617     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13618     OP_REFCNT_UNLOCK;
13619
13620     /* runtime control stuff */
13621     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13622
13623     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13624
13625     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13626
13627     /* interpreter atexit processing */
13628     PL_exitlistlen      = proto_perl->Iexitlistlen;
13629     if (PL_exitlistlen) {
13630         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13631         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13632     }
13633     else
13634         PL_exitlist     = (PerlExitListEntry*)NULL;
13635
13636     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13637     if (PL_my_cxt_size) {
13638         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13639         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13640 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13641         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13642         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13643 #endif
13644     }
13645     else {
13646         PL_my_cxt_list  = (void**)NULL;
13647 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13648         PL_my_cxt_keys  = (const char**)NULL;
13649 #endif
13650     }
13651     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13652     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13653     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13654     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13655
13656     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13657
13658     PAD_CLONE_VARS(proto_perl, param);
13659
13660 #ifdef HAVE_INTERP_INTERN
13661     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13662 #endif
13663
13664     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13665
13666 #ifdef PERL_USES_PL_PIDSTATUS
13667     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13668 #endif
13669     PL_osname           = SAVEPV(proto_perl->Iosname);
13670     PL_parser           = parser_dup(proto_perl->Iparser, param);
13671
13672     /* XXX this only works if the saved cop has already been cloned */
13673     if (proto_perl->Iparser) {
13674         PL_parser->saved_curcop = (COP*)any_dup(
13675                                     proto_perl->Iparser->saved_curcop,
13676                                     proto_perl);
13677     }
13678
13679     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13680
13681 #ifdef USE_LOCALE_COLLATE
13682     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13683 #endif /* USE_LOCALE_COLLATE */
13684
13685 #ifdef USE_LOCALE_NUMERIC
13686     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13687     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13688 #endif /* !USE_LOCALE_NUMERIC */
13689
13690     /* Unicode inversion lists */
13691     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13692     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13693     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13694
13695     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13696     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13697
13698     /* utf8 character class swashes */
13699     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13700         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13701     }
13702     for (i = 0; i < POSIX_CC_COUNT; i++) {
13703         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13704         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13705         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13706     }
13707     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13708     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13709     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13710     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13711     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13712     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13713     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13714     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13715     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13716     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13717     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13718     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13719     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13720     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13721     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13722     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13723
13724     if (proto_perl->Ipsig_pend) {
13725         Newxz(PL_psig_pend, SIG_SIZE, int);
13726     }
13727     else {
13728         PL_psig_pend    = (int*)NULL;
13729     }
13730
13731     if (proto_perl->Ipsig_name) {
13732         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13733         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13734                             param);
13735         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13736     }
13737     else {
13738         PL_psig_ptr     = (SV**)NULL;
13739         PL_psig_name    = (SV**)NULL;
13740     }
13741
13742     if (flags & CLONEf_COPY_STACKS) {
13743         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13744         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13745                             PL_tmps_ix+1, param);
13746
13747         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13748         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13749         Newxz(PL_markstack, i, I32);
13750         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13751                                                   - proto_perl->Imarkstack);
13752         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13753                                                   - proto_perl->Imarkstack);
13754         Copy(proto_perl->Imarkstack, PL_markstack,
13755              PL_markstack_ptr - PL_markstack + 1, I32);
13756
13757         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13758          * NOTE: unlike the others! */
13759         Newxz(PL_scopestack, PL_scopestack_max, I32);
13760         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13761
13762 #ifdef DEBUGGING
13763         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13764         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13765 #endif
13766         /* reset stack AV to correct length before its duped via
13767          * PL_curstackinfo */
13768         AvFILLp(proto_perl->Icurstack) =
13769                             proto_perl->Istack_sp - proto_perl->Istack_base;
13770
13771         /* NOTE: si_dup() looks at PL_markstack */
13772         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13773
13774         /* PL_curstack          = PL_curstackinfo->si_stack; */
13775         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13776         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13777
13778         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13779         PL_stack_base           = AvARRAY(PL_curstack);
13780         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13781                                                    - proto_perl->Istack_base);
13782         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13783
13784         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13785         PL_savestack            = ss_dup(proto_perl, param);
13786     }
13787     else {
13788         init_stacks();
13789         ENTER;                  /* perl_destruct() wants to LEAVE; */
13790     }
13791
13792     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13793     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13794
13795     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13796     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13797     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13798     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13799     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13800     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13801
13802     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13803
13804     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13805     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13806     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13807
13808     PL_stashcache       = newHV();
13809
13810     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13811                                             proto_perl->Iwatchaddr);
13812     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13813     if (PL_debug && PL_watchaddr) {
13814         PerlIO_printf(Perl_debug_log,
13815           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13816           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13817           PTR2UV(PL_watchok));
13818     }
13819
13820     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13821     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13822     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13823
13824     /* Call the ->CLONE method, if it exists, for each of the stashes
13825        identified by sv_dup() above.
13826     */
13827     while(av_len(param->stashes) != -1) {
13828         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13829         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13830         if (cloner && GvCV(cloner)) {
13831             dSP;
13832             ENTER;
13833             SAVETMPS;
13834             PUSHMARK(SP);
13835             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13836             PUTBACK;
13837             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13838             FREETMPS;
13839             LEAVE;
13840         }
13841     }
13842
13843     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13844         ptr_table_free(PL_ptr_table);
13845         PL_ptr_table = NULL;
13846     }
13847
13848     if (!(flags & CLONEf_COPY_STACKS)) {
13849         unreferenced_to_tmp_stack(param->unreferenced);
13850     }
13851
13852     SvREFCNT_dec(param->stashes);
13853
13854     /* orphaned? eg threads->new inside BEGIN or use */
13855     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13856         SvREFCNT_inc_simple_void(PL_compcv);
13857         SAVEFREESV(PL_compcv);
13858     }
13859
13860     return my_perl;
13861 }
13862
13863 static void
13864 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13865 {
13866     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13867     
13868     if (AvFILLp(unreferenced) > -1) {
13869         SV **svp = AvARRAY(unreferenced);
13870         SV **const last = svp + AvFILLp(unreferenced);
13871         SSize_t count = 0;
13872
13873         do {
13874             if (SvREFCNT(*svp) == 1)
13875                 ++count;
13876         } while (++svp <= last);
13877
13878         EXTEND_MORTAL(count);
13879         svp = AvARRAY(unreferenced);
13880
13881         do {
13882             if (SvREFCNT(*svp) == 1) {
13883                 /* Our reference is the only one to this SV. This means that
13884                    in this thread, the scalar effectively has a 0 reference.
13885                    That doesn't work (cleanup never happens), so donate our
13886                    reference to it onto the save stack. */
13887                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13888             } else {
13889                 /* As an optimisation, because we are already walking the
13890                    entire array, instead of above doing either
13891                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13892                    release our reference to the scalar, so that at the end of
13893                    the array owns zero references to the scalars it happens to
13894                    point to. We are effectively converting the array from
13895                    AvREAL() on to AvREAL() off. This saves the av_clear()
13896                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13897                    walking the array a second time.  */
13898                 SvREFCNT_dec(*svp);
13899             }
13900
13901         } while (++svp <= last);
13902         AvREAL_off(unreferenced);
13903     }
13904     SvREFCNT_dec_NN(unreferenced);
13905 }
13906
13907 void
13908 Perl_clone_params_del(CLONE_PARAMS *param)
13909 {
13910     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13911        happy: */
13912     PerlInterpreter *const to = param->new_perl;
13913     dTHXa(to);
13914     PerlInterpreter *const was = PERL_GET_THX;
13915
13916     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13917
13918     if (was != to) {
13919         PERL_SET_THX(to);
13920     }
13921
13922     SvREFCNT_dec(param->stashes);
13923     if (param->unreferenced)
13924         unreferenced_to_tmp_stack(param->unreferenced);
13925
13926     Safefree(param);
13927
13928     if (was != to) {
13929         PERL_SET_THX(was);
13930     }
13931 }
13932
13933 CLONE_PARAMS *
13934 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13935 {
13936     dVAR;
13937     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13938        does a dTHX; to get the context from thread local storage.
13939        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13940        a version that passes in my_perl.  */
13941     PerlInterpreter *const was = PERL_GET_THX;
13942     CLONE_PARAMS *param;
13943
13944     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13945
13946     if (was != to) {
13947         PERL_SET_THX(to);
13948     }
13949
13950     /* Given that we've set the context, we can do this unshared.  */
13951     Newx(param, 1, CLONE_PARAMS);
13952
13953     param->flags = 0;
13954     param->proto_perl = from;
13955     param->new_perl = to;
13956     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13957     AvREAL_off(param->stashes);
13958     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13959
13960     if (was != to) {
13961         PERL_SET_THX(was);
13962     }
13963     return param;
13964 }
13965
13966 #endif /* USE_ITHREADS */
13967
13968 void
13969 Perl_init_constants(pTHX)
13970 {
13971     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13972     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13973     SvANY(&PL_sv_undef)         = NULL;
13974
13975     SvANY(&PL_sv_no)            = new_XPVNV();
13976     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13977     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13978                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13979                                   |SVp_POK|SVf_POK;
13980
13981     SvANY(&PL_sv_yes)           = new_XPVNV();
13982     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13983     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13984                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13985                                   |SVp_POK|SVf_POK;
13986
13987     SvPV_set(&PL_sv_no, (char*)PL_No);
13988     SvCUR_set(&PL_sv_no, 0);
13989     SvLEN_set(&PL_sv_no, 0);
13990     SvIV_set(&PL_sv_no, 0);
13991     SvNV_set(&PL_sv_no, 0);
13992
13993     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13994     SvCUR_set(&PL_sv_yes, 1);
13995     SvLEN_set(&PL_sv_yes, 0);
13996     SvIV_set(&PL_sv_yes, 1);
13997     SvNV_set(&PL_sv_yes, 1);
13998 }
13999
14000 /*
14001 =head1 Unicode Support
14002
14003 =for apidoc sv_recode_to_utf8
14004
14005 The encoding is assumed to be an Encode object, on entry the PV
14006 of the sv is assumed to be octets in that encoding, and the sv
14007 will be converted into Unicode (and UTF-8).
14008
14009 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14010 is not a reference, nothing is done to the sv.  If the encoding is not
14011 an C<Encode::XS> Encoding object, bad things will happen.
14012 (See F<lib/encoding.pm> and L<Encode>.)
14013
14014 The PV of the sv is returned.
14015
14016 =cut */
14017
14018 char *
14019 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14020 {
14021     dVAR;
14022
14023     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14024
14025     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14026         SV *uni;
14027         STRLEN len;
14028         const char *s;
14029         dSP;
14030         ENTER;
14031         SAVETMPS;
14032         save_re_context();
14033         PUSHMARK(sp);
14034         EXTEND(SP, 3);
14035         PUSHs(encoding);
14036         PUSHs(sv);
14037 /*
14038   NI-S 2002/07/09
14039   Passing sv_yes is wrong - it needs to be or'ed set of constants
14040   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14041   remove converted chars from source.
14042
14043   Both will default the value - let them.
14044
14045         XPUSHs(&PL_sv_yes);
14046 */
14047         PUTBACK;
14048         call_method("decode", G_SCALAR);
14049         SPAGAIN;
14050         uni = POPs;
14051         PUTBACK;
14052         s = SvPV_const(uni, len);
14053         if (s != SvPVX_const(sv)) {
14054             SvGROW(sv, len + 1);
14055             Move(s, SvPVX(sv), len + 1, char);
14056             SvCUR_set(sv, len);
14057         }
14058         FREETMPS;
14059         LEAVE;
14060         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14061             /* clear pos and any utf8 cache */
14062             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14063             if (mg)
14064                 mg->mg_len = -1;
14065             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14066                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14067         }
14068         SvUTF8_on(sv);
14069         return SvPVX(sv);
14070     }
14071     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14072 }
14073
14074 /*
14075 =for apidoc sv_cat_decode
14076
14077 The encoding is assumed to be an Encode object, the PV of the ssv is
14078 assumed to be octets in that encoding and decoding the input starts
14079 from the position which (PV + *offset) pointed to.  The dsv will be
14080 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14081 when the string tstr appears in decoding output or the input ends on
14082 the PV of the ssv.  The value which the offset points will be modified
14083 to the last input position on the ssv.
14084
14085 Returns TRUE if the terminator was found, else returns FALSE.
14086
14087 =cut */
14088
14089 bool
14090 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14091                    SV *ssv, int *offset, char *tstr, int tlen)
14092 {
14093     dVAR;
14094     bool ret = FALSE;
14095
14096     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14097
14098     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14099         SV *offsv;
14100         dSP;
14101         ENTER;
14102         SAVETMPS;
14103         save_re_context();
14104         PUSHMARK(sp);
14105         EXTEND(SP, 6);
14106         PUSHs(encoding);
14107         PUSHs(dsv);
14108         PUSHs(ssv);
14109         offsv = newSViv(*offset);
14110         mPUSHs(offsv);
14111         mPUSHp(tstr, tlen);
14112         PUTBACK;
14113         call_method("cat_decode", G_SCALAR);
14114         SPAGAIN;
14115         ret = SvTRUE(TOPs);
14116         *offset = SvIV(offsv);
14117         PUTBACK;
14118         FREETMPS;
14119         LEAVE;
14120     }
14121     else
14122         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14123     return ret;
14124
14125 }
14126
14127 /* ---------------------------------------------------------------------
14128  *
14129  * support functions for report_uninit()
14130  */
14131
14132 /* the maxiumum size of array or hash where we will scan looking
14133  * for the undefined element that triggered the warning */
14134
14135 #define FUV_MAX_SEARCH_SIZE 1000
14136
14137 /* Look for an entry in the hash whose value has the same SV as val;
14138  * If so, return a mortal copy of the key. */
14139
14140 STATIC SV*
14141 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14142 {
14143     dVAR;
14144     HE **array;
14145     I32 i;
14146
14147     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14148
14149     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14150                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14151         return NULL;
14152
14153     array = HvARRAY(hv);
14154
14155     for (i=HvMAX(hv); i>=0; i--) {
14156         HE *entry;
14157         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14158             if (HeVAL(entry) != val)
14159                 continue;
14160             if (    HeVAL(entry) == &PL_sv_undef ||
14161                     HeVAL(entry) == &PL_sv_placeholder)
14162                 continue;
14163             if (!HeKEY(entry))
14164                 return NULL;
14165             if (HeKLEN(entry) == HEf_SVKEY)
14166                 return sv_mortalcopy(HeKEY_sv(entry));
14167             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14168         }
14169     }
14170     return NULL;
14171 }
14172
14173 /* Look for an entry in the array whose value has the same SV as val;
14174  * If so, return the index, otherwise return -1. */
14175
14176 STATIC I32
14177 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14178 {
14179     dVAR;
14180
14181     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14182
14183     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14184                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14185         return -1;
14186
14187     if (val != &PL_sv_undef) {
14188         SV ** const svp = AvARRAY(av);
14189         I32 i;
14190
14191         for (i=AvFILLp(av); i>=0; i--)
14192             if (svp[i] == val)
14193                 return i;
14194     }
14195     return -1;
14196 }
14197
14198 /* varname(): return the name of a variable, optionally with a subscript.
14199  * If gv is non-zero, use the name of that global, along with gvtype (one
14200  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14201  * targ.  Depending on the value of the subscript_type flag, return:
14202  */
14203
14204 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14205 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14206 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14207 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14208
14209 SV*
14210 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14211         const SV *const keyname, I32 aindex, int subscript_type)
14212 {
14213
14214     SV * const name = sv_newmortal();
14215     if (gv && isGV(gv)) {
14216         char buffer[2];
14217         buffer[0] = gvtype;
14218         buffer[1] = 0;
14219
14220         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14221
14222         gv_fullname4(name, gv, buffer, 0);
14223
14224         if ((unsigned int)SvPVX(name)[1] <= 26) {
14225             buffer[0] = '^';
14226             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14227
14228             /* Swap the 1 unprintable control character for the 2 byte pretty
14229                version - ie substr($name, 1, 1) = $buffer; */
14230             sv_insert(name, 1, 1, buffer, 2);
14231         }
14232     }
14233     else {
14234         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14235         SV *sv;
14236         AV *av;
14237
14238         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14239
14240         if (!cv || !CvPADLIST(cv))
14241             return NULL;
14242         av = *PadlistARRAY(CvPADLIST(cv));
14243         sv = *av_fetch(av, targ, FALSE);
14244         sv_setsv_flags(name, sv, 0);
14245     }
14246
14247     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14248         SV * const sv = newSV(0);
14249         *SvPVX(name) = '$';
14250         Perl_sv_catpvf(aTHX_ name, "{%s}",
14251             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14252                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14253         SvREFCNT_dec_NN(sv);
14254     }
14255     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14256         *SvPVX(name) = '$';
14257         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14258     }
14259     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14260         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14261         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14262     }
14263
14264     return name;
14265 }
14266
14267
14268 /*
14269 =for apidoc find_uninit_var
14270
14271 Find the name of the undefined variable (if any) that caused the operator
14272 to issue a "Use of uninitialized value" warning.
14273 If match is true, only return a name if its value matches uninit_sv.
14274 So roughly speaking, if a unary operator (such as OP_COS) generates a
14275 warning, then following the direct child of the op may yield an
14276 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14277 other hand, with OP_ADD there are two branches to follow, so we only print
14278 the variable name if we get an exact match.
14279
14280 The name is returned as a mortal SV.
14281
14282 Assumes that PL_op is the op that originally triggered the error, and that
14283 PL_comppad/PL_curpad points to the currently executing pad.
14284
14285 =cut
14286 */
14287
14288 STATIC SV *
14289 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14290                   bool match)
14291 {
14292     dVAR;
14293     SV *sv;
14294     const GV *gv;
14295     const OP *o, *o2, *kid;
14296
14297     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14298                             uninit_sv == &PL_sv_placeholder)))
14299         return NULL;
14300
14301     switch (obase->op_type) {
14302
14303     case OP_RV2AV:
14304     case OP_RV2HV:
14305     case OP_PADAV:
14306     case OP_PADHV:
14307       {
14308         const bool pad  = (    obase->op_type == OP_PADAV
14309                             || obase->op_type == OP_PADHV
14310                             || obase->op_type == OP_PADRANGE
14311                           );
14312
14313         const bool hash = (    obase->op_type == OP_PADHV
14314                             || obase->op_type == OP_RV2HV
14315                             || (obase->op_type == OP_PADRANGE
14316                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14317                           );
14318         I32 index = 0;
14319         SV *keysv = NULL;
14320         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14321
14322         if (pad) { /* @lex, %lex */
14323             sv = PAD_SVl(obase->op_targ);
14324             gv = NULL;
14325         }
14326         else {
14327             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14328             /* @global, %global */
14329                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14330                 if (!gv)
14331                     break;
14332                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14333             }
14334             else if (obase == PL_op) /* @{expr}, %{expr} */
14335                 return find_uninit_var(cUNOPx(obase)->op_first,
14336                                                     uninit_sv, match);
14337             else /* @{expr}, %{expr} as a sub-expression */
14338                 return NULL;
14339         }
14340
14341         /* attempt to find a match within the aggregate */
14342         if (hash) {
14343             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14344             if (keysv)
14345                 subscript_type = FUV_SUBSCRIPT_HASH;
14346         }
14347         else {
14348             index = find_array_subscript((const AV *)sv, uninit_sv);
14349             if (index >= 0)
14350                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14351         }
14352
14353         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14354             break;
14355
14356         return varname(gv, hash ? '%' : '@', obase->op_targ,
14357                                     keysv, index, subscript_type);
14358       }
14359
14360     case OP_RV2SV:
14361         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14362             /* $global */
14363             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14364             if (!gv || !GvSTASH(gv))
14365                 break;
14366             if (match && (GvSV(gv) != uninit_sv))
14367                 break;
14368             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14369         }
14370         /* ${expr} */
14371         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14372
14373     case OP_PADSV:
14374         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14375             break;
14376         return varname(NULL, '$', obase->op_targ,
14377                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14378
14379     case OP_GVSV:
14380         gv = cGVOPx_gv(obase);
14381         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14382             break;
14383         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14384
14385     case OP_AELEMFAST_LEX:
14386         if (match) {
14387             SV **svp;
14388             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14389             if (!av || SvRMAGICAL(av))
14390                 break;
14391             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14392             if (!svp || *svp != uninit_sv)
14393                 break;
14394         }
14395         return varname(NULL, '$', obase->op_targ,
14396                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14397     case OP_AELEMFAST:
14398         {
14399             gv = cGVOPx_gv(obase);
14400             if (!gv)
14401                 break;
14402             if (match) {
14403                 SV **svp;
14404                 AV *const av = GvAV(gv);
14405                 if (!av || SvRMAGICAL(av))
14406                     break;
14407                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14408                 if (!svp || *svp != uninit_sv)
14409                     break;
14410             }
14411             return varname(gv, '$', 0,
14412                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14413         }
14414         break;
14415
14416     case OP_EXISTS:
14417         o = cUNOPx(obase)->op_first;
14418         if (!o || o->op_type != OP_NULL ||
14419                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14420             break;
14421         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14422
14423     case OP_AELEM:
14424     case OP_HELEM:
14425     {
14426         bool negate = FALSE;
14427
14428         if (PL_op == obase)
14429             /* $a[uninit_expr] or $h{uninit_expr} */
14430             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14431
14432         gv = NULL;
14433         o = cBINOPx(obase)->op_first;
14434         kid = cBINOPx(obase)->op_last;
14435
14436         /* get the av or hv, and optionally the gv */
14437         sv = NULL;
14438         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14439             sv = PAD_SV(o->op_targ);
14440         }
14441         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14442                 && cUNOPo->op_first->op_type == OP_GV)
14443         {
14444             gv = cGVOPx_gv(cUNOPo->op_first);
14445             if (!gv)
14446                 break;
14447             sv = o->op_type
14448                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14449         }
14450         if (!sv)
14451             break;
14452
14453         if (kid && kid->op_type == OP_NEGATE) {
14454             negate = TRUE;
14455             kid = cUNOPx(kid)->op_first;
14456         }
14457
14458         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14459             /* index is constant */
14460             SV* kidsv;
14461             if (negate) {
14462                 kidsv = sv_2mortal(newSVpvs("-"));
14463                 sv_catsv(kidsv, cSVOPx_sv(kid));
14464             }
14465             else
14466                 kidsv = cSVOPx_sv(kid);
14467             if (match) {
14468                 if (SvMAGICAL(sv))
14469                     break;
14470                 if (obase->op_type == OP_HELEM) {
14471                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14472                     if (!he || HeVAL(he) != uninit_sv)
14473                         break;
14474                 }
14475                 else {
14476                     SV * const  opsv = cSVOPx_sv(kid);
14477                     const IV  opsviv = SvIV(opsv);
14478                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14479                         negate ? - opsviv : opsviv,
14480                         FALSE);
14481                     if (!svp || *svp != uninit_sv)
14482                         break;
14483                 }
14484             }
14485             if (obase->op_type == OP_HELEM)
14486                 return varname(gv, '%', o->op_targ,
14487                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14488             else
14489                 return varname(gv, '@', o->op_targ, NULL,
14490                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14491                     FUV_SUBSCRIPT_ARRAY);
14492         }
14493         else  {
14494             /* index is an expression;
14495              * attempt to find a match within the aggregate */
14496             if (obase->op_type == OP_HELEM) {
14497                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14498                 if (keysv)
14499                     return varname(gv, '%', o->op_targ,
14500                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14501             }
14502             else {
14503                 const I32 index
14504                     = find_array_subscript((const AV *)sv, uninit_sv);
14505                 if (index >= 0)
14506                     return varname(gv, '@', o->op_targ,
14507                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14508             }
14509             if (match)
14510                 break;
14511             return varname(gv,
14512                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14513                 ? '@' : '%',
14514                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14515         }
14516         break;
14517     }
14518
14519     case OP_AASSIGN:
14520         /* only examine RHS */
14521         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14522
14523     case OP_OPEN:
14524         o = cUNOPx(obase)->op_first;
14525         if (   o->op_type == OP_PUSHMARK
14526            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14527         )
14528             o = o->op_sibling;
14529
14530         if (!o->op_sibling) {
14531             /* one-arg version of open is highly magical */
14532
14533             if (o->op_type == OP_GV) { /* open FOO; */
14534                 gv = cGVOPx_gv(o);
14535                 if (match && GvSV(gv) != uninit_sv)
14536                     break;
14537                 return varname(gv, '$', 0,
14538                             NULL, 0, FUV_SUBSCRIPT_NONE);
14539             }
14540             /* other possibilities not handled are:
14541              * open $x; or open my $x;  should return '${*$x}'
14542              * open expr;               should return '$'.expr ideally
14543              */
14544              break;
14545         }
14546         goto do_op;
14547
14548     /* ops where $_ may be an implicit arg */
14549     case OP_TRANS:
14550     case OP_TRANSR:
14551     case OP_SUBST:
14552     case OP_MATCH:
14553         if ( !(obase->op_flags & OPf_STACKED)) {
14554             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14555                                  ? PAD_SVl(obase->op_targ)
14556                                  : DEFSV))
14557             {
14558                 sv = sv_newmortal();
14559                 sv_setpvs(sv, "$_");
14560                 return sv;
14561             }
14562         }
14563         goto do_op;
14564
14565     case OP_PRTF:
14566     case OP_PRINT:
14567     case OP_SAY:
14568         match = 1; /* print etc can return undef on defined args */
14569         /* skip filehandle as it can't produce 'undef' warning  */
14570         o = cUNOPx(obase)->op_first;
14571         if ((obase->op_flags & OPf_STACKED)
14572             &&
14573                (   o->op_type == OP_PUSHMARK
14574                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14575             o = o->op_sibling->op_sibling;
14576         goto do_op2;
14577
14578
14579     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14580     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14581
14582         /* the following ops are capable of returning PL_sv_undef even for
14583          * defined arg(s) */
14584
14585     case OP_BACKTICK:
14586     case OP_PIPE_OP:
14587     case OP_FILENO:
14588     case OP_BINMODE:
14589     case OP_TIED:
14590     case OP_GETC:
14591     case OP_SYSREAD:
14592     case OP_SEND:
14593     case OP_IOCTL:
14594     case OP_SOCKET:
14595     case OP_SOCKPAIR:
14596     case OP_BIND:
14597     case OP_CONNECT:
14598     case OP_LISTEN:
14599     case OP_ACCEPT:
14600     case OP_SHUTDOWN:
14601     case OP_SSOCKOPT:
14602     case OP_GETPEERNAME:
14603     case OP_FTRREAD:
14604     case OP_FTRWRITE:
14605     case OP_FTREXEC:
14606     case OP_FTROWNED:
14607     case OP_FTEREAD:
14608     case OP_FTEWRITE:
14609     case OP_FTEEXEC:
14610     case OP_FTEOWNED:
14611     case OP_FTIS:
14612     case OP_FTZERO:
14613     case OP_FTSIZE:
14614     case OP_FTFILE:
14615     case OP_FTDIR:
14616     case OP_FTLINK:
14617     case OP_FTPIPE:
14618     case OP_FTSOCK:
14619     case OP_FTBLK:
14620     case OP_FTCHR:
14621     case OP_FTTTY:
14622     case OP_FTSUID:
14623     case OP_FTSGID:
14624     case OP_FTSVTX:
14625     case OP_FTTEXT:
14626     case OP_FTBINARY:
14627     case OP_FTMTIME:
14628     case OP_FTATIME:
14629     case OP_FTCTIME:
14630     case OP_READLINK:
14631     case OP_OPEN_DIR:
14632     case OP_READDIR:
14633     case OP_TELLDIR:
14634     case OP_SEEKDIR:
14635     case OP_REWINDDIR:
14636     case OP_CLOSEDIR:
14637     case OP_GMTIME:
14638     case OP_ALARM:
14639     case OP_SEMGET:
14640     case OP_GETLOGIN:
14641     case OP_UNDEF:
14642     case OP_SUBSTR:
14643     case OP_AEACH:
14644     case OP_EACH:
14645     case OP_SORT:
14646     case OP_CALLER:
14647     case OP_DOFILE:
14648     case OP_PROTOTYPE:
14649     case OP_NCMP:
14650     case OP_SMARTMATCH:
14651     case OP_UNPACK:
14652     case OP_SYSOPEN:
14653     case OP_SYSSEEK:
14654         match = 1;
14655         goto do_op;
14656
14657     case OP_ENTERSUB:
14658     case OP_GOTO:
14659         /* XXX tmp hack: these two may call an XS sub, and currently
14660           XS subs don't have a SUB entry on the context stack, so CV and
14661           pad determination goes wrong, and BAD things happen. So, just
14662           don't try to determine the value under those circumstances.
14663           Need a better fix at dome point. DAPM 11/2007 */
14664         break;
14665
14666     case OP_FLIP:
14667     case OP_FLOP:
14668     {
14669         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14670         if (gv && GvSV(gv) == uninit_sv)
14671             return newSVpvs_flags("$.", SVs_TEMP);
14672         goto do_op;
14673     }
14674
14675     case OP_POS:
14676         /* def-ness of rval pos() is independent of the def-ness of its arg */
14677         if ( !(obase->op_flags & OPf_MOD))
14678             break;
14679
14680     case OP_SCHOMP:
14681     case OP_CHOMP:
14682         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14683             return newSVpvs_flags("${$/}", SVs_TEMP);
14684         /*FALLTHROUGH*/
14685
14686     default:
14687     do_op:
14688         if (!(obase->op_flags & OPf_KIDS))
14689             break;
14690         o = cUNOPx(obase)->op_first;
14691         
14692     do_op2:
14693         if (!o)
14694             break;
14695
14696         /* This loop checks all the kid ops, skipping any that cannot pos-
14697          * sibly be responsible for the uninitialized value; i.e., defined
14698          * constants and ops that return nothing.  If there is only one op
14699          * left that is not skipped, then we *know* it is responsible for
14700          * the uninitialized value.  If there is more than one op left, we
14701          * have to look for an exact match in the while() loop below.
14702          * Note that we skip padrange, because the individual pad ops that
14703          * it replaced are still in the tree, so we work on them instead.
14704          */
14705         o2 = NULL;
14706         for (kid=o; kid; kid = kid->op_sibling) {
14707             if (kid) {
14708                 const OPCODE type = kid->op_type;
14709                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14710                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14711                   || (type == OP_PUSHMARK)
14712                   || (type == OP_PADRANGE)
14713                 )
14714                 continue;
14715             }
14716             if (o2) { /* more than one found */
14717                 o2 = NULL;
14718                 break;
14719             }
14720             o2 = kid;
14721         }
14722         if (o2)
14723             return find_uninit_var(o2, uninit_sv, match);
14724
14725         /* scan all args */
14726         while (o) {
14727             sv = find_uninit_var(o, uninit_sv, 1);
14728             if (sv)
14729                 return sv;
14730             o = o->op_sibling;
14731         }
14732         break;
14733     }
14734     return NULL;
14735 }
14736
14737
14738 /*
14739 =for apidoc report_uninit
14740
14741 Print appropriate "Use of uninitialized variable" warning.
14742
14743 =cut
14744 */
14745
14746 void
14747 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14748 {
14749     dVAR;
14750     if (PL_op) {
14751         SV* varname = NULL;
14752         if (uninit_sv && PL_curpad) {
14753             varname = find_uninit_var(PL_op, uninit_sv,0);
14754             if (varname)
14755                 sv_insert(varname, 0, 0, " ", 1);
14756         }
14757         /* diag_listed_as: Use of uninitialized value%s */
14758         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14759                 SVfARG(varname ? varname : &PL_sv_no),
14760                 " in ", OP_DESC(PL_op));
14761     }
14762     else
14763         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14764                     "", "", "");
14765 }
14766
14767 /*
14768  * Local variables:
14769  * c-indentation-style: bsd
14770  * c-basic-offset: 4
14771  * indent-tabs-mode: nil
14772  * End:
14773  *
14774  * ex: set ts=8 sts=4 sw=4 et:
14775  */