This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Also fix wince for caretx after e2051532106.
[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 #ifdef __Lynx__
45 /* Missing proto on LynxOS */
46   char *gconvert(double, int, int,  char *);
47 #endif
48
49 #ifdef PERL_UTF8_CACHE_ASSERT
50 /* if adding more checks watch out for the following tests:
51  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
52  *   lib/utf8.t lib/Unicode/Collate/t/index.t
53  * --jhi
54  */
55 #   define ASSERT_UTF8_CACHE(cache) \
56     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
57                               assert((cache)[2] <= (cache)[3]); \
58                               assert((cache)[3] <= (cache)[1]);} \
59                               } STMT_END
60 #else
61 #   define ASSERT_UTF8_CACHE(cache) NOOP
62 #endif
63
64 #ifdef PERL_OLD_COPY_ON_WRITE
65 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
66 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
67 #endif
68
69 /* ============================================================================
70
71 =head1 Allocation and deallocation of SVs.
72
73 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
74 sv, av, hv...) contains type and reference count information, and for
75 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
76 contains fields specific to each type.  Some types store all they need
77 in the head, so don't have a body.
78
79 In all but the most memory-paranoid configurations (ex: PURIFY), heads
80 and bodies are allocated out of arenas, which by default are
81 approximately 4K chunks of memory parcelled up into N heads or bodies.
82 Sv-bodies are allocated by their sv-type, guaranteeing size
83 consistency needed to allocate safely from arrays.
84
85 For SV-heads, the first slot in each arena is reserved, and holds a
86 link to the next arena, some flags, and a note of the number of slots.
87 Snaked through each arena chain is a linked list of free items; when
88 this becomes empty, an extra arena is allocated and divided up into N
89 items which are threaded into the free list.
90
91 SV-bodies are similar, but they use arena-sets by default, which
92 separate the link and info from the arena itself, and reclaim the 1st
93 slot in the arena.  SV-bodies are further described later.
94
95 The following global variables are associated with arenas:
96
97     PL_sv_arenaroot     pointer to list of SV arenas
98     PL_sv_root          pointer to list of free SV structures
99
100     PL_body_arenas      head of linked-list of body arenas
101     PL_body_roots[]     array of pointers to list of free bodies of svtype
102                         arrays are indexed by the svtype needed
103
104 A few special SV heads are not allocated from an arena, but are
105 instead directly created in the interpreter structure, eg PL_sv_undef.
106 The size of arenas can be changed from the default by setting
107 PERL_ARENA_SIZE appropriately at compile time.
108
109 The SV arena serves the secondary purpose of allowing still-live SVs
110 to be located and destroyed during final cleanup.
111
112 At the lowest level, the macros new_SV() and del_SV() grab and free
113 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
114 to return the SV to the free list with error checking.) new_SV() calls
115 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
116 SVs in the free list have their SvTYPE field set to all ones.
117
118 At the time of very final cleanup, sv_free_arenas() is called from
119 perl_destruct() to physically free all the arenas allocated since the
120 start of the interpreter.
121
122 The function visit() scans the SV arenas list, and calls a specified
123 function for each SV it finds which is still live - ie which has an SvTYPE
124 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
125 following functions (specified as [function that calls visit()] / [function
126 called by visit() for each SV]):
127
128     sv_report_used() / do_report_used()
129                         dump all remaining SVs (debugging aid)
130
131     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
132                       do_clean_named_io_objs(),do_curse()
133                         Attempt to free all objects pointed to by RVs,
134                         try to do the same for all objects indir-
135                         ectly referenced by typeglobs too, and
136                         then do a final sweep, cursing any
137                         objects that remain.  Called once from
138                         perl_destruct(), prior to calling sv_clean_all()
139                         below.
140
141     sv_clean_all() / do_clean_all()
142                         SvREFCNT_dec(sv) each remaining SV, possibly
143                         triggering an sv_free(). It also sets the
144                         SVf_BREAK flag on the SV to indicate that the
145                         refcnt has been artificially lowered, and thus
146                         stopping sv_free() from giving spurious warnings
147                         about SVs which unexpectedly have a refcnt
148                         of zero.  called repeatedly from perl_destruct()
149                         until there are no SVs left.
150
151 =head2 Arena allocator API Summary
152
153 Private API to rest of sv.c
154
155     new_SV(),  del_SV(),
156
157     new_XPVNV(), del_XPVGV(),
158     etc
159
160 Public API:
161
162     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
163
164 =cut
165
166  * ========================================================================= */
167
168 /*
169  * "A time to plant, and a time to uproot what was planted..."
170  */
171
172 #ifdef PERL_MEM_LOG
173 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
174             Perl_mem_log_new_sv(sv, file, line, func)
175 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
176             Perl_mem_log_del_sv(sv, file, line, func)
177 #else
178 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
179 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
180 #endif
181
182 #ifdef DEBUG_LEAKING_SCALARS
183 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
184         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
185     } STMT_END
186 #  define DEBUG_SV_SERIAL(sv)                                               \
187     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
188             PTR2UV(sv), (long)(sv)->sv_debug_serial))
189 #else
190 #  define FREE_SV_DEBUG_FILE(sv)
191 #  define DEBUG_SV_SERIAL(sv)   NOOP
192 #endif
193
194 #ifdef PERL_POISON
195 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
196 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
197 /* Whilst I'd love to do this, it seems that things like to check on
198    unreferenced scalars
199 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
200 */
201 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
202                                 PoisonNew(&SvREFCNT(sv), 1, U32)
203 #else
204 #  define SvARENA_CHAIN(sv)     SvANY(sv)
205 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
206 #  define POSION_SV_HEAD(sv)
207 #endif
208
209 /* Mark an SV head as unused, and add to free list.
210  *
211  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
212  * its refcount artificially decremented during global destruction, so
213  * there may be dangling pointers to it. The last thing we want in that
214  * case is for it to be reused. */
215
216 #define plant_SV(p) \
217     STMT_START {                                        \
218         const U32 old_flags = SvFLAGS(p);                       \
219         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
220         DEBUG_SV_SERIAL(p);                             \
221         FREE_SV_DEBUG_FILE(p);                          \
222         POSION_SV_HEAD(p);                              \
223         SvFLAGS(p) = SVTYPEMASK;                        \
224         if (!(old_flags & SVf_BREAK)) {         \
225             SvARENA_CHAIN_SET(p, PL_sv_root);   \
226             PL_sv_root = (p);                           \
227         }                                               \
228         --PL_sv_count;                                  \
229     } STMT_END
230
231 #define uproot_SV(p) \
232     STMT_START {                                        \
233         (p) = PL_sv_root;                               \
234         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
235         ++PL_sv_count;                                  \
236     } STMT_END
237
238
239 /* make some more SVs by adding another arena */
240
241 STATIC SV*
242 S_more_sv(pTHX)
243 {
244     dVAR;
245     SV* sv;
246     char *chunk;                /* must use New here to match call to */
247     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
248     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
249     uproot_SV(sv);
250     return sv;
251 }
252
253 /* new_SV(): return a new, empty SV head */
254
255 #ifdef DEBUG_LEAKING_SCALARS
256 /* provide a real function for a debugger to play with */
257 STATIC SV*
258 S_new_SV(pTHX_ const char *file, int line, const char *func)
259 {
260     SV* sv;
261
262     if (PL_sv_root)
263         uproot_SV(sv);
264     else
265         sv = S_more_sv(aTHX);
266     SvANY(sv) = 0;
267     SvREFCNT(sv) = 1;
268     SvFLAGS(sv) = 0;
269     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
270     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
271                 ? PL_parser->copline
272                 :  PL_curcop
273                     ? CopLINE(PL_curcop)
274                     : 0
275             );
276     sv->sv_debug_inpad = 0;
277     sv->sv_debug_parent = NULL;
278     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
279
280     sv->sv_debug_serial = PL_sv_serial++;
281
282     MEM_LOG_NEW_SV(sv, file, line, func);
283     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
284             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
285
286     return sv;
287 }
288 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
289
290 #else
291 #  define new_SV(p) \
292     STMT_START {                                        \
293         if (PL_sv_root)                                 \
294             uproot_SV(p);                               \
295         else                                            \
296             (p) = S_more_sv(aTHX);                      \
297         SvANY(p) = 0;                                   \
298         SvREFCNT(p) = 1;                                \
299         SvFLAGS(p) = 0;                                 \
300         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
301     } STMT_END
302 #endif
303
304
305 /* del_SV(): return an empty SV head to the free list */
306
307 #ifdef DEBUGGING
308
309 #define del_SV(p) \
310     STMT_START {                                        \
311         if (DEBUG_D_TEST)                               \
312             del_sv(p);                                  \
313         else                                            \
314             plant_SV(p);                                \
315     } STMT_END
316
317 STATIC void
318 S_del_sv(pTHX_ SV *p)
319 {
320     dVAR;
321
322     PERL_ARGS_ASSERT_DEL_SV;
323
324     if (DEBUG_D_TEST) {
325         SV* sva;
326         bool ok = 0;
327         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
328             const SV * const sv = sva + 1;
329             const SV * const svend = &sva[SvREFCNT(sva)];
330             if (p >= sv && p < svend) {
331                 ok = 1;
332                 break;
333             }
334         }
335         if (!ok) {
336             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
337                              "Attempt to free non-arena SV: 0x%"UVxf
338                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
339             return;
340         }
341     }
342     plant_SV(p);
343 }
344
345 #else /* ! DEBUGGING */
346
347 #define del_SV(p)   plant_SV(p)
348
349 #endif /* DEBUGGING */
350
351
352 /*
353 =head1 SV Manipulation Functions
354
355 =for apidoc sv_add_arena
356
357 Given a chunk of memory, link it to the head of the list of arenas,
358 and split it into a list of free SVs.
359
360 =cut
361 */
362
363 static void
364 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
365 {
366     dVAR;
367     SV *const sva = MUTABLE_SV(ptr);
368     SV* sv;
369     SV* svend;
370
371     PERL_ARGS_ASSERT_SV_ADD_ARENA;
372
373     /* The first SV in an arena isn't an SV. */
374     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
375     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
376     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
377
378     PL_sv_arenaroot = sva;
379     PL_sv_root = sva + 1;
380
381     svend = &sva[SvREFCNT(sva) - 1];
382     sv = sva + 1;
383     while (sv < svend) {
384         SvARENA_CHAIN_SET(sv, (sv + 1));
385 #ifdef DEBUGGING
386         SvREFCNT(sv) = 0;
387 #endif
388         /* Must always set typemask because it's always checked in on cleanup
389            when the arenas are walked looking for objects.  */
390         SvFLAGS(sv) = SVTYPEMASK;
391         sv++;
392     }
393     SvARENA_CHAIN_SET(sv, 0);
394 #ifdef DEBUGGING
395     SvREFCNT(sv) = 0;
396 #endif
397     SvFLAGS(sv) = SVTYPEMASK;
398 }
399
400 /* visit(): call the named function for each non-free SV in the arenas
401  * whose flags field matches the flags/mask args. */
402
403 STATIC I32
404 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
405 {
406     dVAR;
407     SV* sva;
408     I32 visited = 0;
409
410     PERL_ARGS_ASSERT_VISIT;
411
412     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
413         const SV * const svend = &sva[SvREFCNT(sva)];
414         SV* sv;
415         for (sv = sva + 1; sv < svend; ++sv) {
416             if (SvTYPE(sv) != (svtype)SVTYPEMASK
417                     && (sv->sv_flags & mask) == flags
418                     && SvREFCNT(sv))
419             {
420                 (*f)(aTHX_ sv);
421                 ++visited;
422             }
423         }
424     }
425     return visited;
426 }
427
428 #ifdef DEBUGGING
429
430 /* called by sv_report_used() for each live SV */
431
432 static void
433 do_report_used(pTHX_ SV *const sv)
434 {
435     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
436         PerlIO_printf(Perl_debug_log, "****\n");
437         sv_dump(sv);
438     }
439 }
440 #endif
441
442 /*
443 =for apidoc sv_report_used
444
445 Dump the contents of all SVs not yet freed (debugging aid).
446
447 =cut
448 */
449
450 void
451 Perl_sv_report_used(pTHX)
452 {
453 #ifdef DEBUGGING
454     visit(do_report_used, 0, 0);
455 #else
456     PERL_UNUSED_CONTEXT;
457 #endif
458 }
459
460 /* called by sv_clean_objs() for each live SV */
461
462 static void
463 do_clean_objs(pTHX_ SV *const ref)
464 {
465     dVAR;
466     assert (SvROK(ref));
467     {
468         SV * const target = SvRV(ref);
469         if (SvOBJECT(target)) {
470             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
471             if (SvWEAKREF(ref)) {
472                 sv_del_backref(target, ref);
473                 SvWEAKREF_off(ref);
474                 SvRV_set(ref, NULL);
475             } else {
476                 SvROK_off(ref);
477                 SvRV_set(ref, NULL);
478                 SvREFCNT_dec_NN(target);
479             }
480         }
481     }
482 }
483
484
485 /* clear any slots in a GV which hold objects - except IO;
486  * called by sv_clean_objs() for each live GV */
487
488 static void
489 do_clean_named_objs(pTHX_ SV *const sv)
490 {
491     dVAR;
492     SV *obj;
493     assert(SvTYPE(sv) == SVt_PVGV);
494     assert(isGV_with_GP(sv));
495     if (!GvGP(sv))
496         return;
497
498     /* freeing GP entries may indirectly free the current GV;
499      * hold onto it while we mess with the GP slots */
500     SvREFCNT_inc(sv);
501
502     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
503         DEBUG_D((PerlIO_printf(Perl_debug_log,
504                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
505         GvSV(sv) = NULL;
506         SvREFCNT_dec_NN(obj);
507     }
508     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
509         DEBUG_D((PerlIO_printf(Perl_debug_log,
510                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
511         GvAV(sv) = NULL;
512         SvREFCNT_dec_NN(obj);
513     }
514     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
515         DEBUG_D((PerlIO_printf(Perl_debug_log,
516                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
517         GvHV(sv) = NULL;
518         SvREFCNT_dec_NN(obj);
519     }
520     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
521         DEBUG_D((PerlIO_printf(Perl_debug_log,
522                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
523         GvCV_set(sv, NULL);
524         SvREFCNT_dec_NN(obj);
525     }
526     SvREFCNT_dec_NN(sv); /* undo the inc above */
527 }
528
529 /* clear any IO slots in a GV which hold objects (except stderr, defout);
530  * called by sv_clean_objs() for each live GV */
531
532 static void
533 do_clean_named_io_objs(pTHX_ SV *const sv)
534 {
535     dVAR;
536     SV *obj;
537     assert(SvTYPE(sv) == SVt_PVGV);
538     assert(isGV_with_GP(sv));
539     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
540         return;
541
542     SvREFCNT_inc(sv);
543     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
544         DEBUG_D((PerlIO_printf(Perl_debug_log,
545                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
546         GvIOp(sv) = NULL;
547         SvREFCNT_dec_NN(obj);
548     }
549     SvREFCNT_dec_NN(sv); /* undo the inc above */
550 }
551
552 /* Void wrapper to pass to visit() */
553 static void
554 do_curse(pTHX_ SV * const sv) {
555     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
556      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
557         return;
558     (void)curse(sv, 0);
559 }
560
561 /*
562 =for apidoc sv_clean_objs
563
564 Attempt to destroy all objects not yet freed.
565
566 =cut
567 */
568
569 void
570 Perl_sv_clean_objs(pTHX)
571 {
572     dVAR;
573     GV *olddef, *olderr;
574     PL_in_clean_objs = TRUE;
575     visit(do_clean_objs, SVf_ROK, SVf_ROK);
576     /* Some barnacles may yet remain, clinging to typeglobs.
577      * Run the non-IO destructors first: they may want to output
578      * error messages, close files etc */
579     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
580     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
581     /* And if there are some very tenacious barnacles clinging to arrays,
582        closures, or what have you.... */
583     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
584     olddef = PL_defoutgv;
585     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
586     if (olddef && isGV_with_GP(olddef))
587         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
588     olderr = PL_stderrgv;
589     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
590     if (olderr && isGV_with_GP(olderr))
591         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
592     SvREFCNT_dec(olddef);
593     PL_in_clean_objs = FALSE;
594 }
595
596 /* called by sv_clean_all() for each live SV */
597
598 static void
599 do_clean_all(pTHX_ SV *const sv)
600 {
601     dVAR;
602     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
603         /* don't clean pid table and strtab */
604         return;
605     }
606     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
607     SvFLAGS(sv) |= SVf_BREAK;
608     SvREFCNT_dec_NN(sv);
609 }
610
611 /*
612 =for apidoc sv_clean_all
613
614 Decrement the refcnt of each remaining SV, possibly triggering a
615 cleanup.  This function may have to be called multiple times to free
616 SVs which are in complex self-referential hierarchies.
617
618 =cut
619 */
620
621 I32
622 Perl_sv_clean_all(pTHX)
623 {
624     dVAR;
625     I32 cleaned;
626     PL_in_clean_all = TRUE;
627     cleaned = visit(do_clean_all, 0,0);
628     return cleaned;
629 }
630
631 /*
632   ARENASETS: a meta-arena implementation which separates arena-info
633   into struct arena_set, which contains an array of struct
634   arena_descs, each holding info for a single arena.  By separating
635   the meta-info from the arena, we recover the 1st slot, formerly
636   borrowed for list management.  The arena_set is about the size of an
637   arena, avoiding the needless malloc overhead of a naive linked-list.
638
639   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
640   memory in the last arena-set (1/2 on average).  In trade, we get
641   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
642   smaller types).  The recovery of the wasted space allows use of
643   small arenas for large, rare body types, by changing array* fields
644   in body_details_by_type[] below.
645 */
646 struct arena_desc {
647     char       *arena;          /* the raw storage, allocated aligned */
648     size_t      size;           /* its size ~4k typ */
649     svtype      utype;          /* bodytype stored in arena */
650 };
651
652 struct arena_set;
653
654 /* Get the maximum number of elements in set[] such that struct arena_set
655    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
656    therefore likely to be 1 aligned memory page.  */
657
658 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
659                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
660
661 struct arena_set {
662     struct arena_set* next;
663     unsigned int   set_size;    /* ie ARENAS_PER_SET */
664     unsigned int   curr;        /* index of next available arena-desc */
665     struct arena_desc set[ARENAS_PER_SET];
666 };
667
668 /*
669 =for apidoc sv_free_arenas
670
671 Deallocate the memory used by all arenas.  Note that all the individual SV
672 heads and bodies within the arenas must already have been freed.
673
674 =cut
675 */
676 void
677 Perl_sv_free_arenas(pTHX)
678 {
679     dVAR;
680     SV* sva;
681     SV* svanext;
682     unsigned int i;
683
684     /* Free arenas here, but be careful about fake ones.  (We assume
685        contiguity of the fake ones with the corresponding real ones.) */
686
687     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
688         svanext = MUTABLE_SV(SvANY(sva));
689         while (svanext && SvFAKE(svanext))
690             svanext = MUTABLE_SV(SvANY(svanext));
691
692         if (!SvFAKE(sva))
693             Safefree(sva);
694     }
695
696     {
697         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
698
699         while (aroot) {
700             struct arena_set *current = aroot;
701             i = aroot->curr;
702             while (i--) {
703                 assert(aroot->set[i].arena);
704                 Safefree(aroot->set[i].arena);
705             }
706             aroot = aroot->next;
707             Safefree(current);
708         }
709     }
710     PL_body_arenas = 0;
711
712     i = PERL_ARENA_ROOTS_SIZE;
713     while (i--)
714         PL_body_roots[i] = 0;
715
716     PL_sv_arenaroot = 0;
717     PL_sv_root = 0;
718 }
719
720 /*
721   Here are mid-level routines that manage the allocation of bodies out
722   of the various arenas.  There are 5 kinds of arenas:
723
724   1. SV-head arenas, which are discussed and handled above
725   2. regular body arenas
726   3. arenas for reduced-size bodies
727   4. Hash-Entry arenas
728
729   Arena types 2 & 3 are chained by body-type off an array of
730   arena-root pointers, which is indexed by svtype.  Some of the
731   larger/less used body types are malloced singly, since a large
732   unused block of them is wasteful.  Also, several svtypes dont have
733   bodies; the data fits into the sv-head itself.  The arena-root
734   pointer thus has a few unused root-pointers (which may be hijacked
735   later for arena types 4,5)
736
737   3 differs from 2 as an optimization; some body types have several
738   unused fields in the front of the structure (which are kept in-place
739   for consistency).  These bodies can be allocated in smaller chunks,
740   because the leading fields arent accessed.  Pointers to such bodies
741   are decremented to point at the unused 'ghost' memory, knowing that
742   the pointers are used with offsets to the real memory.
743
744
745 =head1 SV-Body Allocation
746
747 Allocation of SV-bodies is similar to SV-heads, differing as follows;
748 the allocation mechanism is used for many body types, so is somewhat
749 more complicated, it uses arena-sets, and has no need for still-live
750 SV detection.
751
752 At the outermost level, (new|del)_X*V macros return bodies of the
753 appropriate type.  These macros call either (new|del)_body_type or
754 (new|del)_body_allocated macro pairs, depending on specifics of the
755 type.  Most body types use the former pair, the latter pair is used to
756 allocate body types with "ghost fields".
757
758 "ghost fields" are fields that are unused in certain types, and
759 consequently don't need to actually exist.  They are declared because
760 they're part of a "base type", which allows use of functions as
761 methods.  The simplest examples are AVs and HVs, 2 aggregate types
762 which don't use the fields which support SCALAR semantics.
763
764 For these types, the arenas are carved up into appropriately sized
765 chunks, we thus avoid wasted memory for those unaccessed members.
766 When bodies are allocated, we adjust the pointer back in memory by the
767 size of the part not allocated, so it's as if we allocated the full
768 structure.  (But things will all go boom if you write to the part that
769 is "not there", because you'll be overwriting the last members of the
770 preceding structure in memory.)
771
772 We calculate the correction using the STRUCT_OFFSET macro on the first
773 member present. If the allocated structure is smaller (no initial NV
774 actually allocated) then the net effect is to subtract the size of the NV
775 from the pointer, to return a new pointer as if an initial NV were actually
776 allocated. (We were using structures named *_allocated for this, but
777 this turned out to be a subtle bug, because a structure without an NV
778 could have a lower alignment constraint, but the compiler is allowed to
779 optimised accesses based on the alignment constraint of the actual pointer
780 to the full structure, for example, using a single 64 bit load instruction
781 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
782
783 This is the same trick as was used for NV and IV bodies. Ironically it
784 doesn't need to be used for NV bodies any more, because NV is now at
785 the start of the structure. IV bodies don't need it either, because
786 they are no longer allocated.
787
788 In turn, the new_body_* allocators call S_new_body(), which invokes
789 new_body_inline macro, which takes a lock, and takes a body off the
790 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
791 necessary to refresh an empty list.  Then the lock is released, and
792 the body is returned.
793
794 Perl_more_bodies allocates a new arena, and carves it up into an array of N
795 bodies, which it strings into a linked list.  It looks up arena-size
796 and body-size from the body_details table described below, thus
797 supporting the multiple body-types.
798
799 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
800 the (new|del)_X*V macros are mapped directly to malloc/free.
801
802 For each sv-type, struct body_details bodies_by_type[] carries
803 parameters which control these aspects of SV handling:
804
805 Arena_size determines whether arenas are used for this body type, and if
806 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
807 zero, forcing individual mallocs and frees.
808
809 Body_size determines how big a body is, and therefore how many fit into
810 each arena.  Offset carries the body-pointer adjustment needed for
811 "ghost fields", and is used in *_allocated macros.
812
813 But its main purpose is to parameterize info needed in
814 Perl_sv_upgrade().  The info here dramatically simplifies the function
815 vs the implementation in 5.8.8, making it table-driven.  All fields
816 are used for this, except for arena_size.
817
818 For the sv-types that have no bodies, arenas are not used, so those
819 PL_body_roots[sv_type] are unused, and can be overloaded.  In
820 something of a special case, SVt_NULL is borrowed for HE arenas;
821 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
822 bodies_by_type[SVt_NULL] slot is not used, as the table is not
823 available in hv.c.
824
825 */
826
827 struct body_details {
828     U8 body_size;       /* Size to allocate  */
829     U8 copy;            /* Size of structure to copy (may be shorter)  */
830     U8 offset;
831     unsigned int type : 4;          /* We have space for a sanity check.  */
832     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
833     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
834     unsigned int arena : 1;         /* Allocated from an arena */
835     size_t arena_size;              /* Size of arena to allocate */
836 };
837
838 #define HADNV FALSE
839 #define NONV TRUE
840
841
842 #ifdef PURIFY
843 /* With -DPURFIY we allocate everything directly, and don't use arenas.
844    This seems a rather elegant way to simplify some of the code below.  */
845 #define HASARENA FALSE
846 #else
847 #define HASARENA TRUE
848 #endif
849 #define NOARENA FALSE
850
851 /* Size the arenas to exactly fit a given number of bodies.  A count
852    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
853    simplifying the default.  If count > 0, the arena is sized to fit
854    only that many bodies, allowing arenas to be used for large, rare
855    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
856    limited by PERL_ARENA_SIZE, so we can safely oversize the
857    declarations.
858  */
859 #define FIT_ARENA0(body_size)                           \
860     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
861 #define FIT_ARENAn(count,body_size)                     \
862     ( count * body_size <= PERL_ARENA_SIZE)             \
863     ? count * body_size                                 \
864     : FIT_ARENA0 (body_size)
865 #define FIT_ARENA(count,body_size)                      \
866     count                                               \
867     ? FIT_ARENAn (count, body_size)                     \
868     : FIT_ARENA0 (body_size)
869
870 /* Calculate the length to copy. Specifically work out the length less any
871    final padding the compiler needed to add.  See the comment in sv_upgrade
872    for why copying the padding proved to be a bug.  */
873
874 #define copy_length(type, last_member) \
875         STRUCT_OFFSET(type, last_member) \
876         + sizeof (((type*)SvANY((const SV *)0))->last_member)
877
878 static const struct body_details bodies_by_type[] = {
879     /* HEs use this offset for their arena.  */
880     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
881
882     /* IVs are in the head, so the allocation size is 0.  */
883     { 0,
884       sizeof(IV), /* This is used to copy out the IV body.  */
885       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
886       NOARENA /* IVS don't need an arena  */, 0
887     },
888
889     { sizeof(NV), sizeof(NV),
890       STRUCT_OFFSET(XPVNV, xnv_u),
891       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
892
893     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
894       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
895       + STRUCT_OFFSET(XPV, xpv_cur),
896       SVt_PV, FALSE, NONV, HASARENA,
897       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
898
899     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
900       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
901       + STRUCT_OFFSET(XPV, xpv_cur),
902       SVt_INVLIST, TRUE, NONV, HASARENA,
903       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
904
905     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
906       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
907       + STRUCT_OFFSET(XPV, xpv_cur),
908       SVt_PVIV, FALSE, NONV, HASARENA,
909       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
910
911     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
912       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
913       + STRUCT_OFFSET(XPV, xpv_cur),
914       SVt_PVNV, FALSE, HADNV, HASARENA,
915       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
916
917     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
918       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
919
920     { sizeof(regexp),
921       sizeof(regexp),
922       0,
923       SVt_REGEXP, TRUE, NONV, HASARENA,
924       FIT_ARENA(0, sizeof(regexp))
925     },
926
927     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
928       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
929     
930     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
931       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
932
933     { sizeof(XPVAV),
934       copy_length(XPVAV, xav_alloc),
935       0,
936       SVt_PVAV, TRUE, NONV, HASARENA,
937       FIT_ARENA(0, sizeof(XPVAV)) },
938
939     { sizeof(XPVHV),
940       copy_length(XPVHV, xhv_max),
941       0,
942       SVt_PVHV, TRUE, NONV, HASARENA,
943       FIT_ARENA(0, sizeof(XPVHV)) },
944
945     { sizeof(XPVCV),
946       sizeof(XPVCV),
947       0,
948       SVt_PVCV, TRUE, NONV, HASARENA,
949       FIT_ARENA(0, sizeof(XPVCV)) },
950
951     { sizeof(XPVFM),
952       sizeof(XPVFM),
953       0,
954       SVt_PVFM, TRUE, NONV, NOARENA,
955       FIT_ARENA(20, sizeof(XPVFM)) },
956
957     { sizeof(XPVIO),
958       sizeof(XPVIO),
959       0,
960       SVt_PVIO, TRUE, NONV, HASARENA,
961       FIT_ARENA(24, sizeof(XPVIO)) },
962 };
963
964 #define new_body_allocated(sv_type)             \
965     (void *)((char *)S_new_body(aTHX_ sv_type)  \
966              - bodies_by_type[sv_type].offset)
967
968 /* return a thing to the free list */
969
970 #define del_body(thing, root)                           \
971     STMT_START {                                        \
972         void ** const thing_copy = (void **)thing;      \
973         *thing_copy = *root;                            \
974         *root = (void*)thing_copy;                      \
975     } STMT_END
976
977 #ifdef PURIFY
978
979 #define new_XNV()       safemalloc(sizeof(XPVNV))
980 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
981 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
982
983 #define del_XPVGV(p)    safefree(p)
984
985 #else /* !PURIFY */
986
987 #define new_XNV()       new_body_allocated(SVt_NV)
988 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
989 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
990
991 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
992                                  &PL_body_roots[SVt_PVGV])
993
994 #endif /* PURIFY */
995
996 /* no arena for you! */
997
998 #define new_NOARENA(details) \
999         safemalloc((details)->body_size + (details)->offset)
1000 #define new_NOARENAZ(details) \
1001         safecalloc((details)->body_size + (details)->offset, 1)
1002
1003 void *
1004 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1005                   const size_t arena_size)
1006 {
1007     dVAR;
1008     void ** const root = &PL_body_roots[sv_type];
1009     struct arena_desc *adesc;
1010     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1011     unsigned int curr;
1012     char *start;
1013     const char *end;
1014     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1015 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1016     static bool done_sanity_check;
1017
1018     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1019      * variables like done_sanity_check. */
1020     if (!done_sanity_check) {
1021         unsigned int i = SVt_LAST;
1022
1023         done_sanity_check = TRUE;
1024
1025         while (i--)
1026             assert (bodies_by_type[i].type == i);
1027     }
1028 #endif
1029
1030     assert(arena_size);
1031
1032     /* may need new arena-set to hold new arena */
1033     if (!aroot || aroot->curr >= aroot->set_size) {
1034         struct arena_set *newroot;
1035         Newxz(newroot, 1, struct arena_set);
1036         newroot->set_size = ARENAS_PER_SET;
1037         newroot->next = aroot;
1038         aroot = newroot;
1039         PL_body_arenas = (void *) newroot;
1040         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1041     }
1042
1043     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1044     curr = aroot->curr++;
1045     adesc = &(aroot->set[curr]);
1046     assert(!adesc->arena);
1047     
1048     Newx(adesc->arena, good_arena_size, char);
1049     adesc->size = good_arena_size;
1050     adesc->utype = sv_type;
1051     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1052                           curr, (void*)adesc->arena, (UV)good_arena_size));
1053
1054     start = (char *) adesc->arena;
1055
1056     /* Get the address of the byte after the end of the last body we can fit.
1057        Remember, this is integer division:  */
1058     end = start + good_arena_size / body_size * body_size;
1059
1060     /* computed count doesn't reflect the 1st slot reservation */
1061 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1062     DEBUG_m(PerlIO_printf(Perl_debug_log,
1063                           "arena %p end %p arena-size %d (from %d) type %d "
1064                           "size %d ct %d\n",
1065                           (void*)start, (void*)end, (int)good_arena_size,
1066                           (int)arena_size, sv_type, (int)body_size,
1067                           (int)good_arena_size / (int)body_size));
1068 #else
1069     DEBUG_m(PerlIO_printf(Perl_debug_log,
1070                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1071                           (void*)start, (void*)end,
1072                           (int)arena_size, sv_type, (int)body_size,
1073                           (int)good_arena_size / (int)body_size));
1074 #endif
1075     *root = (void *)start;
1076
1077     while (1) {
1078         /* Where the next body would start:  */
1079         char * const next = start + body_size;
1080
1081         if (next >= end) {
1082             /* This is the last body:  */
1083             assert(next == end);
1084
1085             *(void **)start = 0;
1086             return *root;
1087         }
1088
1089         *(void**) start = (void *)next;
1090         start = next;
1091     }
1092 }
1093
1094 /* grab a new thing from the free list, allocating more if necessary.
1095    The inline version is used for speed in hot routines, and the
1096    function using it serves the rest (unless PURIFY).
1097 */
1098 #define new_body_inline(xpv, sv_type) \
1099     STMT_START { \
1100         void ** const r3wt = &PL_body_roots[sv_type]; \
1101         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1102           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1103                                              bodies_by_type[sv_type].body_size,\
1104                                              bodies_by_type[sv_type].arena_size)); \
1105         *(r3wt) = *(void**)(xpv); \
1106     } STMT_END
1107
1108 #ifndef PURIFY
1109
1110 STATIC void *
1111 S_new_body(pTHX_ const svtype sv_type)
1112 {
1113     dVAR;
1114     void *xpv;
1115     new_body_inline(xpv, sv_type);
1116     return xpv;
1117 }
1118
1119 #endif
1120
1121 static const struct body_details fake_rv =
1122     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1123
1124 /*
1125 =for apidoc sv_upgrade
1126
1127 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1128 SV, then copies across as much information as possible from the old body.
1129 It croaks if the SV is already in a more complex form than requested.  You
1130 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1131 before calling C<sv_upgrade>, and hence does not croak.  See also
1132 C<svtype>.
1133
1134 =cut
1135 */
1136
1137 void
1138 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1139 {
1140     dVAR;
1141     void*       old_body;
1142     void*       new_body;
1143     const svtype old_type = SvTYPE(sv);
1144     const struct body_details *new_type_details;
1145     const struct body_details *old_type_details
1146         = bodies_by_type + old_type;
1147     SV *referant = NULL;
1148
1149     PERL_ARGS_ASSERT_SV_UPGRADE;
1150
1151     if (old_type == new_type)
1152         return;
1153
1154     /* This clause was purposefully added ahead of the early return above to
1155        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1156        inference by Nick I-S that it would fix other troublesome cases. See
1157        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1158
1159        Given that shared hash key scalars are no longer PVIV, but PV, there is
1160        no longer need to unshare so as to free up the IVX slot for its proper
1161        purpose. So it's safe to move the early return earlier.  */
1162
1163     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1164         sv_force_normal_flags(sv, 0);
1165     }
1166
1167     old_body = SvANY(sv);
1168
1169     /* Copying structures onto other structures that have been neatly zeroed
1170        has a subtle gotcha. Consider XPVMG
1171
1172        +------+------+------+------+------+-------+-------+
1173        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1174        +------+------+------+------+------+-------+-------+
1175        0      4      8     12     16     20      24      28
1176
1177        where NVs are aligned to 8 bytes, so that sizeof that structure is
1178        actually 32 bytes long, with 4 bytes of padding at the end:
1179
1180        +------+------+------+------+------+-------+-------+------+
1181        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1182        +------+------+------+------+------+-------+-------+------+
1183        0      4      8     12     16     20      24      28     32
1184
1185        so what happens if you allocate memory for this structure:
1186
1187        +------+------+------+------+------+-------+-------+------+------+...
1188        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1189        +------+------+------+------+------+-------+-------+------+------+...
1190        0      4      8     12     16     20      24      28     32     36
1191
1192        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1193        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1194        started out as zero once, but it's quite possible that it isn't. So now,
1195        rather than a nicely zeroed GP, you have it pointing somewhere random.
1196        Bugs ensue.
1197
1198        (In fact, GP ends up pointing at a previous GP structure, because the
1199        principle cause of the padding in XPVMG getting garbage is a copy of
1200        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1201        this happens to be moot because XPVGV has been re-ordered, with GP
1202        no longer after STASH)
1203
1204        So we are careful and work out the size of used parts of all the
1205        structures.  */
1206
1207     switch (old_type) {
1208     case SVt_NULL:
1209         break;
1210     case SVt_IV:
1211         if (SvROK(sv)) {
1212             referant = SvRV(sv);
1213             old_type_details = &fake_rv;
1214             if (new_type == SVt_NV)
1215                 new_type = SVt_PVNV;
1216         } else {
1217             if (new_type < SVt_PVIV) {
1218                 new_type = (new_type == SVt_NV)
1219                     ? SVt_PVNV : SVt_PVIV;
1220             }
1221         }
1222         break;
1223     case SVt_NV:
1224         if (new_type < SVt_PVNV) {
1225             new_type = SVt_PVNV;
1226         }
1227         break;
1228     case SVt_PV:
1229         assert(new_type > SVt_PV);
1230         assert(SVt_IV < SVt_PV);
1231         assert(SVt_NV < SVt_PV);
1232         break;
1233     case SVt_PVIV:
1234         break;
1235     case SVt_PVNV:
1236         break;
1237     case SVt_PVMG:
1238         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1239            there's no way that it can be safely upgraded, because perl.c
1240            expects to Safefree(SvANY(PL_mess_sv))  */
1241         assert(sv != PL_mess_sv);
1242         /* This flag bit is used to mean other things in other scalar types.
1243            Given that it only has meaning inside the pad, it shouldn't be set
1244            on anything that can get upgraded.  */
1245         assert(!SvPAD_TYPED(sv));
1246         break;
1247     default:
1248         if (UNLIKELY(old_type_details->cant_upgrade))
1249             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1250                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1251     }
1252
1253     if (UNLIKELY(old_type > new_type))
1254         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1255                 (int)old_type, (int)new_type);
1256
1257     new_type_details = bodies_by_type + new_type;
1258
1259     SvFLAGS(sv) &= ~SVTYPEMASK;
1260     SvFLAGS(sv) |= new_type;
1261
1262     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1263        the return statements above will have triggered.  */
1264     assert (new_type != SVt_NULL);
1265     switch (new_type) {
1266     case SVt_IV:
1267         assert(old_type == SVt_NULL);
1268         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1269         SvIV_set(sv, 0);
1270         return;
1271     case SVt_NV:
1272         assert(old_type == SVt_NULL);
1273         SvANY(sv) = new_XNV();
1274         SvNV_set(sv, 0);
1275         return;
1276     case SVt_PVHV:
1277     case SVt_PVAV:
1278         assert(new_type_details->body_size);
1279
1280 #ifndef PURIFY  
1281         assert(new_type_details->arena);
1282         assert(new_type_details->arena_size);
1283         /* This points to the start of the allocated area.  */
1284         new_body_inline(new_body, new_type);
1285         Zero(new_body, new_type_details->body_size, char);
1286         new_body = ((char *)new_body) - new_type_details->offset;
1287 #else
1288         /* We always allocated the full length item with PURIFY. To do this
1289            we fake things so that arena is false for all 16 types..  */
1290         new_body = new_NOARENAZ(new_type_details);
1291 #endif
1292         SvANY(sv) = new_body;
1293         if (new_type == SVt_PVAV) {
1294             AvMAX(sv)   = -1;
1295             AvFILLp(sv) = -1;
1296             AvREAL_only(sv);
1297             if (old_type_details->body_size) {
1298                 AvALLOC(sv) = 0;
1299             } else {
1300                 /* It will have been zeroed when the new body was allocated.
1301                    Lets not write to it, in case it confuses a write-back
1302                    cache.  */
1303             }
1304         } else {
1305             assert(!SvOK(sv));
1306             SvOK_off(sv);
1307 #ifndef NODEFAULT_SHAREKEYS
1308             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1309 #endif
1310             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1311             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332     case SVt_PVIV:
1333         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1334            no route from NV to PVIV, NOK can never be true  */
1335         assert(!SvNOKp(sv));
1336         assert(!SvNOK(sv));
1337     case SVt_PVIO:
1338     case SVt_PVFM:
1339     case SVt_PVGV:
1340     case SVt_PVCV:
1341     case SVt_PVLV:
1342     case SVt_INVLIST:
1343     case SVt_REGEXP:
1344     case SVt_PVMG:
1345     case SVt_PVNV:
1346     case SVt_PV:
1347
1348         assert(new_type_details->body_size);
1349         /* We always allocated the full length item with PURIFY. To do this
1350            we fake things so that arena is false for all 16 types..  */
1351         if(new_type_details->arena) {
1352             /* This points to the start of the allocated area.  */
1353             new_body_inline(new_body, new_type);
1354             Zero(new_body, new_type_details->body_size, char);
1355             new_body = ((char *)new_body) - new_type_details->offset;
1356         } else {
1357             new_body = new_NOARENAZ(new_type_details);
1358         }
1359         SvANY(sv) = new_body;
1360
1361         if (old_type_details->copy) {
1362             /* There is now the potential for an upgrade from something without
1363                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1364             int offset = old_type_details->offset;
1365             int length = old_type_details->copy;
1366
1367             if (new_type_details->offset > old_type_details->offset) {
1368                 const int difference
1369                     = new_type_details->offset - old_type_details->offset;
1370                 offset += difference;
1371                 length -= difference;
1372             }
1373             assert (length >= 0);
1374                 
1375             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1376                  char);
1377         }
1378
1379 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1380         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1381          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1382          * NV slot, but the new one does, then we need to initialise the
1383          * freshly created NV slot with whatever the correct bit pattern is
1384          * for 0.0  */
1385         if (old_type_details->zero_nv && !new_type_details->zero_nv
1386             && !isGV_with_GP(sv))
1387             SvNV_set(sv, 0);
1388 #endif
1389
1390         if (UNLIKELY(new_type == SVt_PVIO)) {
1391             IO * const io = MUTABLE_IO(sv);
1392             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1393
1394             SvOBJECT_on(io);
1395             /* Clear the stashcache because a new IO could overrule a package
1396                name */
1397             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1398             hv_clear(PL_stashcache);
1399
1400             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1401             IoPAGE_LEN(sv) = 60;
1402         }
1403         if (UNLIKELY(new_type == SVt_REGEXP))
1404             sv->sv_u.svu_rx = (regexp *)new_body;
1405         else if (old_type < SVt_PV) {
1406             /* referant will be NULL unless the old type was SVt_IV emulating
1407                SVt_RV */
1408             sv->sv_u.svu_rv = referant;
1409         }
1410         break;
1411     default:
1412         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1413                    (unsigned long)new_type);
1414     }
1415
1416     if (old_type > SVt_IV) {
1417 #ifdef PURIFY
1418         safefree(old_body);
1419 #else
1420         /* Note that there is an assumption that all bodies of types that
1421            can be upgraded came from arenas. Only the more complex non-
1422            upgradable types are allowed to be directly malloc()ed.  */
1423         assert(old_type_details->arena);
1424         del_body((void*)((char*)old_body + old_type_details->offset),
1425                  &PL_body_roots[old_type]);
1426 #endif
1427     }
1428 }
1429
1430 /*
1431 =for apidoc sv_backoff
1432
1433 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1434 wrapper instead.
1435
1436 =cut
1437 */
1438
1439 int
1440 Perl_sv_backoff(pTHX_ SV *const sv)
1441 {
1442     STRLEN delta;
1443     const char * const s = SvPVX_const(sv);
1444
1445     PERL_ARGS_ASSERT_SV_BACKOFF;
1446     PERL_UNUSED_CONTEXT;
1447
1448     assert(SvOOK(sv));
1449     assert(SvTYPE(sv) != SVt_PVHV);
1450     assert(SvTYPE(sv) != SVt_PVAV);
1451
1452     SvOOK_offset(sv, delta);
1453     
1454     SvLEN_set(sv, SvLEN(sv) + delta);
1455     SvPV_set(sv, SvPVX(sv) - delta);
1456     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1457     SvFLAGS(sv) &= ~SVf_OOK;
1458     return 0;
1459 }
1460
1461 /*
1462 =for apidoc sv_grow
1463
1464 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1465 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1466 Use the C<SvGROW> wrapper instead.
1467
1468 =cut
1469 */
1470
1471 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1472
1473 char *
1474 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1475 {
1476     char *s;
1477
1478     PERL_ARGS_ASSERT_SV_GROW;
1479
1480     if (SvROK(sv))
1481         sv_unref(sv);
1482     if (SvTYPE(sv) < SVt_PV) {
1483         sv_upgrade(sv, SVt_PV);
1484         s = SvPVX_mutable(sv);
1485     }
1486     else if (SvOOK(sv)) {       /* pv is offset? */
1487         sv_backoff(sv);
1488         s = SvPVX_mutable(sv);
1489         if (newlen > SvLEN(sv))
1490             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1491     }
1492     else
1493     {
1494         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1495         s = SvPVX_mutable(sv);
1496     }
1497
1498 #ifdef PERL_NEW_COPY_ON_WRITE
1499     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1500      * to store the COW count. So in general, allocate one more byte than
1501      * asked for, to make it likely this byte is always spare: and thus
1502      * make more strings COW-able.
1503      * If the new size is a big power of two, don't bother: we assume the
1504      * caller wanted a nice 2^N sized block and will be annoyed at getting
1505      * 2^N+1 */
1506     if (newlen & 0xff)
1507         newlen++;
1508 #endif
1509
1510     if (newlen > SvLEN(sv)) {           /* need more room? */
1511         STRLEN minlen = SvCUR(sv);
1512         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1513         if (newlen < minlen)
1514             newlen = minlen;
1515 #ifndef Perl_safesysmalloc_size
1516         newlen = PERL_STRLEN_ROUNDUP(newlen);
1517 #endif
1518         if (SvLEN(sv) && s) {
1519             s = (char*)saferealloc(s, newlen);
1520         }
1521         else {
1522             s = (char*)safemalloc(newlen);
1523             if (SvPVX_const(sv) && SvCUR(sv)) {
1524                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1525             }
1526         }
1527         SvPV_set(sv, s);
1528 #ifdef Perl_safesysmalloc_size
1529         /* Do this here, do it once, do it right, and then we will never get
1530            called back into sv_grow() unless there really is some growing
1531            needed.  */
1532         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1533 #else
1534         SvLEN_set(sv, newlen);
1535 #endif
1536     }
1537     return s;
1538 }
1539
1540 /*
1541 =for apidoc sv_setiv
1542
1543 Copies an integer into the given SV, upgrading first if necessary.
1544 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1545
1546 =cut
1547 */
1548
1549 void
1550 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1551 {
1552     dVAR;
1553
1554     PERL_ARGS_ASSERT_SV_SETIV;
1555
1556     SV_CHECK_THINKFIRST_COW_DROP(sv);
1557     switch (SvTYPE(sv)) {
1558     case SVt_NULL:
1559     case SVt_NV:
1560         sv_upgrade(sv, SVt_IV);
1561         break;
1562     case SVt_PV:
1563         sv_upgrade(sv, SVt_PVIV);
1564         break;
1565
1566     case SVt_PVGV:
1567         if (!isGV_with_GP(sv))
1568             break;
1569     case SVt_PVAV:
1570     case SVt_PVHV:
1571     case SVt_PVCV:
1572     case SVt_PVFM:
1573     case SVt_PVIO:
1574         /* diag_listed_as: Can't coerce %s to %s in %s */
1575         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1576                    OP_DESC(PL_op));
1577     default: NOOP;
1578     }
1579     (void)SvIOK_only(sv);                       /* validate number */
1580     SvIV_set(sv, i);
1581     SvTAINT(sv);
1582 }
1583
1584 /*
1585 =for apidoc sv_setiv_mg
1586
1587 Like C<sv_setiv>, but also handles 'set' magic.
1588
1589 =cut
1590 */
1591
1592 void
1593 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1594 {
1595     PERL_ARGS_ASSERT_SV_SETIV_MG;
1596
1597     sv_setiv(sv,i);
1598     SvSETMAGIC(sv);
1599 }
1600
1601 /*
1602 =for apidoc sv_setuv
1603
1604 Copies an unsigned integer into the given SV, upgrading first if necessary.
1605 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1606
1607 =cut
1608 */
1609
1610 void
1611 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1612 {
1613     PERL_ARGS_ASSERT_SV_SETUV;
1614
1615     /* With the if statement to ensure that integers are stored as IVs whenever
1616        possible:
1617        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1618
1619        without
1620        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1621
1622        If you wish to remove the following if statement, so that this routine
1623        (and its callers) always return UVs, please benchmark to see what the
1624        effect is. Modern CPUs may be different. Or may not :-)
1625     */
1626     if (u <= (UV)IV_MAX) {
1627        sv_setiv(sv, (IV)u);
1628        return;
1629     }
1630     sv_setiv(sv, 0);
1631     SvIsUV_on(sv);
1632     SvUV_set(sv, u);
1633 }
1634
1635 /*
1636 =for apidoc sv_setuv_mg
1637
1638 Like C<sv_setuv>, but also handles 'set' magic.
1639
1640 =cut
1641 */
1642
1643 void
1644 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1645 {
1646     PERL_ARGS_ASSERT_SV_SETUV_MG;
1647
1648     sv_setuv(sv,u);
1649     SvSETMAGIC(sv);
1650 }
1651
1652 /*
1653 =for apidoc sv_setnv
1654
1655 Copies a double into the given SV, upgrading first if necessary.
1656 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1657
1658 =cut
1659 */
1660
1661 void
1662 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1663 {
1664     dVAR;
1665
1666     PERL_ARGS_ASSERT_SV_SETNV;
1667
1668     SV_CHECK_THINKFIRST_COW_DROP(sv);
1669     switch (SvTYPE(sv)) {
1670     case SVt_NULL:
1671     case SVt_IV:
1672         sv_upgrade(sv, SVt_NV);
1673         break;
1674     case SVt_PV:
1675     case SVt_PVIV:
1676         sv_upgrade(sv, SVt_PVNV);
1677         break;
1678
1679     case SVt_PVGV:
1680         if (!isGV_with_GP(sv))
1681             break;
1682     case SVt_PVAV:
1683     case SVt_PVHV:
1684     case SVt_PVCV:
1685     case SVt_PVFM:
1686     case SVt_PVIO:
1687         /* diag_listed_as: Can't coerce %s to %s in %s */
1688         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1689                    OP_DESC(PL_op));
1690     default: NOOP;
1691     }
1692     SvNV_set(sv, num);
1693     (void)SvNOK_only(sv);                       /* validate number */
1694     SvTAINT(sv);
1695 }
1696
1697 /*
1698 =for apidoc sv_setnv_mg
1699
1700 Like C<sv_setnv>, but also handles 'set' magic.
1701
1702 =cut
1703 */
1704
1705 void
1706 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1707 {
1708     PERL_ARGS_ASSERT_SV_SETNV_MG;
1709
1710     sv_setnv(sv,num);
1711     SvSETMAGIC(sv);
1712 }
1713
1714 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1715  * not incrementable warning display.
1716  * Originally part of S_not_a_number().
1717  * The return value may be != tmpbuf.
1718  */
1719
1720 STATIC const char *
1721 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1722     const char *pv;
1723
1724      PERL_ARGS_ASSERT_SV_DISPLAY;
1725
1726      if (DO_UTF8(sv)) {
1727           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1728           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1729      } else {
1730           char *d = tmpbuf;
1731           const char * const limit = tmpbuf + tmpbuf_size - 8;
1732           /* each *s can expand to 4 chars + "...\0",
1733              i.e. need room for 8 chars */
1734         
1735           const char *s = SvPVX_const(sv);
1736           const char * const end = s + SvCUR(sv);
1737           for ( ; s < end && d < limit; s++ ) {
1738                int ch = *s & 0xFF;
1739                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1740                     *d++ = 'M';
1741                     *d++ = '-';
1742
1743                     /* Map to ASCII "equivalent" of Latin1 */
1744                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1745                }
1746                if (ch == '\n') {
1747                     *d++ = '\\';
1748                     *d++ = 'n';
1749                }
1750                else if (ch == '\r') {
1751                     *d++ = '\\';
1752                     *d++ = 'r';
1753                }
1754                else if (ch == '\f') {
1755                     *d++ = '\\';
1756                     *d++ = 'f';
1757                }
1758                else if (ch == '\\') {
1759                     *d++ = '\\';
1760                     *d++ = '\\';
1761                }
1762                else if (ch == '\0') {
1763                     *d++ = '\\';
1764                     *d++ = '0';
1765                }
1766                else if (isPRINT_LC(ch))
1767                     *d++ = ch;
1768                else {
1769                     *d++ = '^';
1770                     *d++ = toCTRL(ch);
1771                }
1772           }
1773           if (s < end) {
1774                *d++ = '.';
1775                *d++ = '.';
1776                *d++ = '.';
1777           }
1778           *d = '\0';
1779           pv = tmpbuf;
1780     }
1781
1782     return pv;
1783 }
1784
1785 /* Print an "isn't numeric" warning, using a cleaned-up,
1786  * printable version of the offending string
1787  */
1788
1789 STATIC void
1790 S_not_a_number(pTHX_ SV *const sv)
1791 {
1792      dVAR;
1793      char tmpbuf[64];
1794      const char *pv;
1795
1796      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1797
1798      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1799
1800     if (PL_op)
1801         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1802                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1803                     "Argument \"%s\" isn't numeric in %s", pv,
1804                     OP_DESC(PL_op));
1805     else
1806         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1807                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1808                     "Argument \"%s\" isn't numeric", pv);
1809 }
1810
1811 STATIC void
1812 S_not_incrementable(pTHX_ SV *const sv) {
1813      dVAR;
1814      char tmpbuf[64];
1815      const char *pv;
1816
1817      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1818
1819      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1820
1821      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1822                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1823 }
1824
1825 /*
1826 =for apidoc looks_like_number
1827
1828 Test if the content of an SV looks like a number (or is a number).
1829 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1830 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1831 ignored.
1832
1833 =cut
1834 */
1835
1836 I32
1837 Perl_looks_like_number(pTHX_ SV *const sv)
1838 {
1839     const char *sbegin;
1840     STRLEN len;
1841
1842     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1843
1844     if (SvPOK(sv) || SvPOKp(sv)) {
1845         sbegin = SvPV_nomg_const(sv, len);
1846     }
1847     else
1848         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1849     return grok_number(sbegin, len, NULL);
1850 }
1851
1852 STATIC bool
1853 S_glob_2number(pTHX_ GV * const gv)
1854 {
1855     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1856
1857     /* We know that all GVs stringify to something that is not-a-number,
1858         so no need to test that.  */
1859     if (ckWARN(WARN_NUMERIC))
1860     {
1861         SV *const buffer = sv_newmortal();
1862         gv_efullname3(buffer, gv, "*");
1863         not_a_number(buffer);
1864     }
1865     /* We just want something true to return, so that S_sv_2iuv_common
1866         can tail call us and return true.  */
1867     return TRUE;
1868 }
1869
1870 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1871    until proven guilty, assume that things are not that bad... */
1872
1873 /*
1874    NV_PRESERVES_UV:
1875
1876    As 64 bit platforms often have an NV that doesn't preserve all bits of
1877    an IV (an assumption perl has been based on to date) it becomes necessary
1878    to remove the assumption that the NV always carries enough precision to
1879    recreate the IV whenever needed, and that the NV is the canonical form.
1880    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1881    precision as a side effect of conversion (which would lead to insanity
1882    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1883    1) to distinguish between IV/UV/NV slots that have cached a valid
1884       conversion where precision was lost and IV/UV/NV slots that have a
1885       valid conversion which has lost no precision
1886    2) to ensure that if a numeric conversion to one form is requested that
1887       would lose precision, the precise conversion (or differently
1888       imprecise conversion) is also performed and cached, to prevent
1889       requests for different numeric formats on the same SV causing
1890       lossy conversion chains. (lossless conversion chains are perfectly
1891       acceptable (still))
1892
1893
1894    flags are used:
1895    SvIOKp is true if the IV slot contains a valid value
1896    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1897    SvNOKp is true if the NV slot contains a valid value
1898    SvNOK  is true only if the NV value is accurate
1899
1900    so
1901    while converting from PV to NV, check to see if converting that NV to an
1902    IV(or UV) would lose accuracy over a direct conversion from PV to
1903    IV(or UV). If it would, cache both conversions, return NV, but mark
1904    SV as IOK NOKp (ie not NOK).
1905
1906    While converting from PV to IV, check to see if converting that IV to an
1907    NV would lose accuracy over a direct conversion from PV to NV. If it
1908    would, cache both conversions, flag similarly.
1909
1910    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1911    correctly because if IV & NV were set NV *always* overruled.
1912    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1913    changes - now IV and NV together means that the two are interchangeable:
1914    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1915
1916    The benefit of this is that operations such as pp_add know that if
1917    SvIOK is true for both left and right operands, then integer addition
1918    can be used instead of floating point (for cases where the result won't
1919    overflow). Before, floating point was always used, which could lead to
1920    loss of precision compared with integer addition.
1921
1922    * making IV and NV equal status should make maths accurate on 64 bit
1923      platforms
1924    * may speed up maths somewhat if pp_add and friends start to use
1925      integers when possible instead of fp. (Hopefully the overhead in
1926      looking for SvIOK and checking for overflow will not outweigh the
1927      fp to integer speedup)
1928    * will slow down integer operations (callers of SvIV) on "inaccurate"
1929      values, as the change from SvIOK to SvIOKp will cause a call into
1930      sv_2iv each time rather than a macro access direct to the IV slot
1931    * should speed up number->string conversion on integers as IV is
1932      favoured when IV and NV are equally accurate
1933
1934    ####################################################################
1935    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1936    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1937    On the other hand, SvUOK is true iff UV.
1938    ####################################################################
1939
1940    Your mileage will vary depending your CPU's relative fp to integer
1941    performance ratio.
1942 */
1943
1944 #ifndef NV_PRESERVES_UV
1945 #  define IS_NUMBER_UNDERFLOW_IV 1
1946 #  define IS_NUMBER_UNDERFLOW_UV 2
1947 #  define IS_NUMBER_IV_AND_UV    2
1948 #  define IS_NUMBER_OVERFLOW_IV  4
1949 #  define IS_NUMBER_OVERFLOW_UV  5
1950
1951 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1952
1953 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1954 STATIC int
1955 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1956 #  ifdef DEBUGGING
1957                        , I32 numtype
1958 #  endif
1959                        )
1960 {
1961     dVAR;
1962
1963     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1964
1965     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));
1966     if (SvNVX(sv) < (NV)IV_MIN) {
1967         (void)SvIOKp_on(sv);
1968         (void)SvNOK_on(sv);
1969         SvIV_set(sv, IV_MIN);
1970         return IS_NUMBER_UNDERFLOW_IV;
1971     }
1972     if (SvNVX(sv) > (NV)UV_MAX) {
1973         (void)SvIOKp_on(sv);
1974         (void)SvNOK_on(sv);
1975         SvIsUV_on(sv);
1976         SvUV_set(sv, UV_MAX);
1977         return IS_NUMBER_OVERFLOW_UV;
1978     }
1979     (void)SvIOKp_on(sv);
1980     (void)SvNOK_on(sv);
1981     /* Can't use strtol etc to convert this string.  (See truth table in
1982        sv_2iv  */
1983     if (SvNVX(sv) <= (UV)IV_MAX) {
1984         SvIV_set(sv, I_V(SvNVX(sv)));
1985         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1986             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1987         } else {
1988             /* Integer is imprecise. NOK, IOKp */
1989         }
1990         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1991     }
1992     SvIsUV_on(sv);
1993     SvUV_set(sv, U_V(SvNVX(sv)));
1994     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1995         if (SvUVX(sv) == UV_MAX) {
1996             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1997                possibly be preserved by NV. Hence, it must be overflow.
1998                NOK, IOKp */
1999             return IS_NUMBER_OVERFLOW_UV;
2000         }
2001         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2002     } else {
2003         /* Integer is imprecise. NOK, IOKp */
2004     }
2005     return IS_NUMBER_OVERFLOW_IV;
2006 }
2007 #endif /* !NV_PRESERVES_UV*/
2008
2009 STATIC bool
2010 S_sv_2iuv_common(pTHX_ SV *const sv)
2011 {
2012     dVAR;
2013
2014     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2015
2016     if (SvNOKp(sv)) {
2017         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2018          * without also getting a cached IV/UV from it at the same time
2019          * (ie PV->NV conversion should detect loss of accuracy and cache
2020          * IV or UV at same time to avoid this. */
2021         /* IV-over-UV optimisation - choose to cache IV if possible */
2022
2023         if (SvTYPE(sv) == SVt_NV)
2024             sv_upgrade(sv, SVt_PVNV);
2025
2026         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2027         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2028            certainly cast into the IV range at IV_MAX, whereas the correct
2029            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2030            cases go to UV */
2031 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2032         if (Perl_isnan(SvNVX(sv))) {
2033             SvUV_set(sv, 0);
2034             SvIsUV_on(sv);
2035             return FALSE;
2036         }
2037 #endif
2038         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2039             SvIV_set(sv, I_V(SvNVX(sv)));
2040             if (SvNVX(sv) == (NV) SvIVX(sv)
2041 #ifndef NV_PRESERVES_UV
2042                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2043                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2044                 /* Don't flag it as "accurately an integer" if the number
2045                    came from a (by definition imprecise) NV operation, and
2046                    we're outside the range of NV integer precision */
2047 #endif
2048                 ) {
2049                 if (SvNOK(sv))
2050                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2051                 else {
2052                     /* scalar has trailing garbage, eg "42a" */
2053                 }
2054                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2055                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2056                                       PTR2UV(sv),
2057                                       SvNVX(sv),
2058                                       SvIVX(sv)));
2059
2060             } else {
2061                 /* IV not precise.  No need to convert from PV, as NV
2062                    conversion would already have cached IV if it detected
2063                    that PV->IV would be better than PV->NV->IV
2064                    flags already correct - don't set public IOK.  */
2065                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2066                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2067                                       PTR2UV(sv),
2068                                       SvNVX(sv),
2069                                       SvIVX(sv)));
2070             }
2071             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2072                but the cast (NV)IV_MIN rounds to a the value less (more
2073                negative) than IV_MIN which happens to be equal to SvNVX ??
2074                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2075                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2076                (NV)UVX == NVX are both true, but the values differ. :-(
2077                Hopefully for 2s complement IV_MIN is something like
2078                0x8000000000000000 which will be exact. NWC */
2079         }
2080         else {
2081             SvUV_set(sv, U_V(SvNVX(sv)));
2082             if (
2083                 (SvNVX(sv) == (NV) SvUVX(sv))
2084 #ifndef  NV_PRESERVES_UV
2085                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2086                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2087                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2088                 /* Don't flag it as "accurately an integer" if the number
2089                    came from a (by definition imprecise) NV operation, and
2090                    we're outside the range of NV integer precision */
2091 #endif
2092                 && SvNOK(sv)
2093                 )
2094                 SvIOK_on(sv);
2095             SvIsUV_on(sv);
2096             DEBUG_c(PerlIO_printf(Perl_debug_log,
2097                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2098                                   PTR2UV(sv),
2099                                   SvUVX(sv),
2100                                   SvUVX(sv)));
2101         }
2102     }
2103     else if (SvPOKp(sv)) {
2104         UV value;
2105         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2106         /* We want to avoid a possible problem when we cache an IV/ a UV which
2107            may be later translated to an NV, and the resulting NV is not
2108            the same as the direct translation of the initial string
2109            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2110            be careful to ensure that the value with the .456 is around if the
2111            NV value is requested in the future).
2112         
2113            This means that if we cache such an IV/a UV, we need to cache the
2114            NV as well.  Moreover, we trade speed for space, and do not
2115            cache the NV if we are sure it's not needed.
2116          */
2117
2118         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2119         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2120              == IS_NUMBER_IN_UV) {
2121             /* It's definitely an integer, only upgrade to PVIV */
2122             if (SvTYPE(sv) < SVt_PVIV)
2123                 sv_upgrade(sv, SVt_PVIV);
2124             (void)SvIOK_on(sv);
2125         } else if (SvTYPE(sv) < SVt_PVNV)
2126             sv_upgrade(sv, SVt_PVNV);
2127
2128         /* If NVs preserve UVs then we only use the UV value if we know that
2129            we aren't going to call atof() below. If NVs don't preserve UVs
2130            then the value returned may have more precision than atof() will
2131            return, even though value isn't perfectly accurate.  */
2132         if ((numtype & (IS_NUMBER_IN_UV
2133 #ifdef NV_PRESERVES_UV
2134                         | IS_NUMBER_NOT_INT
2135 #endif
2136             )) == IS_NUMBER_IN_UV) {
2137             /* This won't turn off the public IOK flag if it was set above  */
2138             (void)SvIOKp_on(sv);
2139
2140             if (!(numtype & IS_NUMBER_NEG)) {
2141                 /* positive */;
2142                 if (value <= (UV)IV_MAX) {
2143                     SvIV_set(sv, (IV)value);
2144                 } else {
2145                     /* it didn't overflow, and it was positive. */
2146                     SvUV_set(sv, value);
2147                     SvIsUV_on(sv);
2148                 }
2149             } else {
2150                 /* 2s complement assumption  */
2151                 if (value <= (UV)IV_MIN) {
2152                     SvIV_set(sv, -(IV)value);
2153                 } else {
2154                     /* Too negative for an IV.  This is a double upgrade, but
2155                        I'm assuming it will be rare.  */
2156                     if (SvTYPE(sv) < SVt_PVNV)
2157                         sv_upgrade(sv, SVt_PVNV);
2158                     SvNOK_on(sv);
2159                     SvIOK_off(sv);
2160                     SvIOKp_on(sv);
2161                     SvNV_set(sv, -(NV)value);
2162                     SvIV_set(sv, IV_MIN);
2163                 }
2164             }
2165         }
2166         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2167            will be in the previous block to set the IV slot, and the next
2168            block to set the NV slot.  So no else here.  */
2169         
2170         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2171             != IS_NUMBER_IN_UV) {
2172             /* It wasn't an (integer that doesn't overflow the UV). */
2173             SvNV_set(sv, Atof(SvPVX_const(sv)));
2174
2175             if (! numtype && ckWARN(WARN_NUMERIC))
2176                 not_a_number(sv);
2177
2178 #if defined(USE_LONG_DOUBLE)
2179             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2180                                   PTR2UV(sv), SvNVX(sv)));
2181 #else
2182             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2183                                   PTR2UV(sv), SvNVX(sv)));
2184 #endif
2185
2186 #ifdef NV_PRESERVES_UV
2187             (void)SvIOKp_on(sv);
2188             (void)SvNOK_on(sv);
2189             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2190                 SvIV_set(sv, I_V(SvNVX(sv)));
2191                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2192                     SvIOK_on(sv);
2193                 } else {
2194                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2195                 }
2196                 /* UV will not work better than IV */
2197             } else {
2198                 if (SvNVX(sv) > (NV)UV_MAX) {
2199                     SvIsUV_on(sv);
2200                     /* Integer is inaccurate. NOK, IOKp, is UV */
2201                     SvUV_set(sv, UV_MAX);
2202                 } else {
2203                     SvUV_set(sv, U_V(SvNVX(sv)));
2204                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2205                        NV preservse UV so can do correct comparison.  */
2206                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2207                         SvIOK_on(sv);
2208                     } else {
2209                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2210                     }
2211                 }
2212                 SvIsUV_on(sv);
2213             }
2214 #else /* NV_PRESERVES_UV */
2215             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2216                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2217                 /* The IV/UV slot will have been set from value returned by
2218                    grok_number above.  The NV slot has just been set using
2219                    Atof.  */
2220                 SvNOK_on(sv);
2221                 assert (SvIOKp(sv));
2222             } else {
2223                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2224                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2225                     /* Small enough to preserve all bits. */
2226                     (void)SvIOKp_on(sv);
2227                     SvNOK_on(sv);
2228                     SvIV_set(sv, I_V(SvNVX(sv)));
2229                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2230                         SvIOK_on(sv);
2231                     /* Assumption: first non-preserved integer is < IV_MAX,
2232                        this NV is in the preserved range, therefore: */
2233                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2234                           < (UV)IV_MAX)) {
2235                         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);
2236                     }
2237                 } else {
2238                     /* IN_UV NOT_INT
2239                          0      0       already failed to read UV.
2240                          0      1       already failed to read UV.
2241                          1      0       you won't get here in this case. IV/UV
2242                                         slot set, public IOK, Atof() unneeded.
2243                          1      1       already read UV.
2244                        so there's no point in sv_2iuv_non_preserve() attempting
2245                        to use atol, strtol, strtoul etc.  */
2246 #  ifdef DEBUGGING
2247                     sv_2iuv_non_preserve (sv, numtype);
2248 #  else
2249                     sv_2iuv_non_preserve (sv);
2250 #  endif
2251                 }
2252             }
2253 #endif /* NV_PRESERVES_UV */
2254         /* It might be more code efficient to go through the entire logic above
2255            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2256            gets complex and potentially buggy, so more programmer efficient
2257            to do it this way, by turning off the public flags:  */
2258         if (!numtype)
2259             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2260         }
2261     }
2262     else  {
2263         if (isGV_with_GP(sv))
2264             return glob_2number(MUTABLE_GV(sv));
2265
2266         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2267                 report_uninit(sv);
2268         if (SvTYPE(sv) < SVt_IV)
2269             /* Typically the caller expects that sv_any is not NULL now.  */
2270             sv_upgrade(sv, SVt_IV);
2271         /* Return 0 from the caller.  */
2272         return TRUE;
2273     }
2274     return FALSE;
2275 }
2276
2277 /*
2278 =for apidoc sv_2iv_flags
2279
2280 Return the integer value of an SV, doing any necessary string
2281 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2282 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2283
2284 =cut
2285 */
2286
2287 IV
2288 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2289 {
2290     dVAR;
2291
2292     if (!sv)
2293         return 0;
2294
2295     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2296          && SvTYPE(sv) != SVt_PVFM);
2297
2298     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2299         mg_get(sv);
2300
2301     if (SvROK(sv)) {
2302         if (SvAMAGIC(sv)) {
2303             SV * tmpstr;
2304             if (flags & SV_SKIP_OVERLOAD)
2305                 return 0;
2306             tmpstr = AMG_CALLunary(sv, numer_amg);
2307             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2308                 return SvIV(tmpstr);
2309             }
2310         }
2311         return PTR2IV(SvRV(sv));
2312     }
2313
2314     if (SvVALID(sv) || isREGEXP(sv)) {
2315         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2316            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2317            In practice they are extremely unlikely to actually get anywhere
2318            accessible by user Perl code - the only way that I'm aware of is when
2319            a constant subroutine which is used as the second argument to index.
2320
2321            Regexps have no SvIVX and SvNVX fields.
2322         */
2323         assert(isREGEXP(sv) || SvPOKp(sv));
2324         {
2325             UV value;
2326             const char * const ptr =
2327                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2328             const int numtype
2329                 = grok_number(ptr, SvCUR(sv), &value);
2330
2331             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2332                 == IS_NUMBER_IN_UV) {
2333                 /* It's definitely an integer */
2334                 if (numtype & IS_NUMBER_NEG) {
2335                     if (value < (UV)IV_MIN)
2336                         return -(IV)value;
2337                 } else {
2338                     if (value < (UV)IV_MAX)
2339                         return (IV)value;
2340                 }
2341             }
2342             if (!numtype) {
2343                 if (ckWARN(WARN_NUMERIC))
2344                     not_a_number(sv);
2345             }
2346             return I_V(Atof(ptr));
2347         }
2348     }
2349
2350     if (SvTHINKFIRST(sv)) {
2351 #ifdef PERL_OLD_COPY_ON_WRITE
2352         if (SvIsCOW(sv)) {
2353             sv_force_normal_flags(sv, 0);
2354         }
2355 #endif
2356         if (SvREADONLY(sv) && !SvOK(sv)) {
2357             if (ckWARN(WARN_UNINITIALIZED))
2358                 report_uninit(sv);
2359             return 0;
2360         }
2361     }
2362
2363     if (!SvIOKp(sv)) {
2364         if (S_sv_2iuv_common(aTHX_ sv))
2365             return 0;
2366     }
2367
2368     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2369         PTR2UV(sv),SvIVX(sv)));
2370     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2371 }
2372
2373 /*
2374 =for apidoc sv_2uv_flags
2375
2376 Return the unsigned integer value of an SV, doing any necessary string
2377 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2378 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2379
2380 =cut
2381 */
2382
2383 UV
2384 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2385 {
2386     dVAR;
2387
2388     if (!sv)
2389         return 0;
2390
2391     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2392         mg_get(sv);
2393
2394     if (SvROK(sv)) {
2395         if (SvAMAGIC(sv)) {
2396             SV *tmpstr;
2397             if (flags & SV_SKIP_OVERLOAD)
2398                 return 0;
2399             tmpstr = AMG_CALLunary(sv, numer_amg);
2400             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2401                 return SvUV(tmpstr);
2402             }
2403         }
2404         return PTR2UV(SvRV(sv));
2405     }
2406
2407     if (SvVALID(sv) || isREGEXP(sv)) {
2408         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2409            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2410            Regexps have no SvIVX and SvNVX fields. */
2411         assert(isREGEXP(sv) || SvPOKp(sv));
2412         {
2413             UV value;
2414             const char * const ptr =
2415                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2416             const int numtype
2417                 = grok_number(ptr, SvCUR(sv), &value);
2418
2419             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2420                 == IS_NUMBER_IN_UV) {
2421                 /* It's definitely an integer */
2422                 if (!(numtype & IS_NUMBER_NEG))
2423                     return value;
2424             }
2425             if (!numtype) {
2426                 if (ckWARN(WARN_NUMERIC))
2427                     not_a_number(sv);
2428             }
2429             return U_V(Atof(ptr));
2430         }
2431     }
2432
2433     if (SvTHINKFIRST(sv)) {
2434 #ifdef PERL_OLD_COPY_ON_WRITE
2435         if (SvIsCOW(sv)) {
2436             sv_force_normal_flags(sv, 0);
2437         }
2438 #endif
2439         if (SvREADONLY(sv) && !SvOK(sv)) {
2440             if (ckWARN(WARN_UNINITIALIZED))
2441                 report_uninit(sv);
2442             return 0;
2443         }
2444     }
2445
2446     if (!SvIOKp(sv)) {
2447         if (S_sv_2iuv_common(aTHX_ sv))
2448             return 0;
2449     }
2450
2451     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2452                           PTR2UV(sv),SvUVX(sv)));
2453     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2454 }
2455
2456 /*
2457 =for apidoc sv_2nv_flags
2458
2459 Return the num value of an SV, doing any necessary string or integer
2460 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2461 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2462
2463 =cut
2464 */
2465
2466 NV
2467 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2468 {
2469     dVAR;
2470     if (!sv)
2471         return 0.0;
2472     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2473          && SvTYPE(sv) != SVt_PVFM);
2474     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2475         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2476            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2477            Regexps have no SvIVX and SvNVX fields.  */
2478         const char *ptr;
2479         if (flags & SV_GMAGIC)
2480             mg_get(sv);
2481         if (SvNOKp(sv))
2482             return SvNVX(sv);
2483         if (SvPOKp(sv) && !SvIOKp(sv)) {
2484             ptr = SvPVX_const(sv);
2485           grokpv:
2486             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2487                 !grok_number(ptr, SvCUR(sv), NULL))
2488                 not_a_number(sv);
2489             return Atof(ptr);
2490         }
2491         if (SvIOKp(sv)) {
2492             if (SvIsUV(sv))
2493                 return (NV)SvUVX(sv);
2494             else
2495                 return (NV)SvIVX(sv);
2496         }
2497         if (SvROK(sv)) {
2498             goto return_rok;
2499         }
2500         if (isREGEXP(sv)) {
2501             ptr = RX_WRAPPED((REGEXP *)sv);
2502             goto grokpv;
2503         }
2504         assert(SvTYPE(sv) >= SVt_PVMG);
2505         /* This falls through to the report_uninit near the end of the
2506            function. */
2507     } else if (SvTHINKFIRST(sv)) {
2508         if (SvROK(sv)) {
2509         return_rok:
2510             if (SvAMAGIC(sv)) {
2511                 SV *tmpstr;
2512                 if (flags & SV_SKIP_OVERLOAD)
2513                     return 0;
2514                 tmpstr = AMG_CALLunary(sv, numer_amg);
2515                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2516                     return SvNV(tmpstr);
2517                 }
2518             }
2519             return PTR2NV(SvRV(sv));
2520         }
2521 #ifdef PERL_OLD_COPY_ON_WRITE
2522         if (SvIsCOW(sv)) {
2523             sv_force_normal_flags(sv, 0);
2524         }
2525 #endif
2526         if (SvREADONLY(sv) && !SvOK(sv)) {
2527             if (ckWARN(WARN_UNINITIALIZED))
2528                 report_uninit(sv);
2529             return 0.0;
2530         }
2531     }
2532     if (SvTYPE(sv) < SVt_NV) {
2533         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2534         sv_upgrade(sv, SVt_NV);
2535 #ifdef USE_LONG_DOUBLE
2536         DEBUG_c({
2537             STORE_NUMERIC_LOCAL_SET_STANDARD();
2538             PerlIO_printf(Perl_debug_log,
2539                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2540                           PTR2UV(sv), SvNVX(sv));
2541             RESTORE_NUMERIC_LOCAL();
2542         });
2543 #else
2544         DEBUG_c({
2545             STORE_NUMERIC_LOCAL_SET_STANDARD();
2546             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2547                           PTR2UV(sv), SvNVX(sv));
2548             RESTORE_NUMERIC_LOCAL();
2549         });
2550 #endif
2551     }
2552     else if (SvTYPE(sv) < SVt_PVNV)
2553         sv_upgrade(sv, SVt_PVNV);
2554     if (SvNOKp(sv)) {
2555         return SvNVX(sv);
2556     }
2557     if (SvIOKp(sv)) {
2558         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2559 #ifdef NV_PRESERVES_UV
2560         if (SvIOK(sv))
2561             SvNOK_on(sv);
2562         else
2563             SvNOKp_on(sv);
2564 #else
2565         /* Only set the public NV OK flag if this NV preserves the IV  */
2566         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2567         if (SvIOK(sv) &&
2568             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2569                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2570             SvNOK_on(sv);
2571         else
2572             SvNOKp_on(sv);
2573 #endif
2574     }
2575     else if (SvPOKp(sv)) {
2576         UV value;
2577         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2578         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2579             not_a_number(sv);
2580 #ifdef NV_PRESERVES_UV
2581         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2582             == IS_NUMBER_IN_UV) {
2583             /* It's definitely an integer */
2584             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2585         } else
2586             SvNV_set(sv, Atof(SvPVX_const(sv)));
2587         if (numtype)
2588             SvNOK_on(sv);
2589         else
2590             SvNOKp_on(sv);
2591 #else
2592         SvNV_set(sv, Atof(SvPVX_const(sv)));
2593         /* Only set the public NV OK flag if this NV preserves the value in
2594            the PV at least as well as an IV/UV would.
2595            Not sure how to do this 100% reliably. */
2596         /* if that shift count is out of range then Configure's test is
2597            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2598            UV_BITS */
2599         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2600             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2601             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2602         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2603             /* Can't use strtol etc to convert this string, so don't try.
2604                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2605             SvNOK_on(sv);
2606         } else {
2607             /* value has been set.  It may not be precise.  */
2608             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2609                 /* 2s complement assumption for (UV)IV_MIN  */
2610                 SvNOK_on(sv); /* Integer is too negative.  */
2611             } else {
2612                 SvNOKp_on(sv);
2613                 SvIOKp_on(sv);
2614
2615                 if (numtype & IS_NUMBER_NEG) {
2616                     SvIV_set(sv, -(IV)value);
2617                 } else if (value <= (UV)IV_MAX) {
2618                     SvIV_set(sv, (IV)value);
2619                 } else {
2620                     SvUV_set(sv, value);
2621                     SvIsUV_on(sv);
2622                 }
2623
2624                 if (numtype & IS_NUMBER_NOT_INT) {
2625                     /* I believe that even if the original PV had decimals,
2626                        they are lost beyond the limit of the FP precision.
2627                        However, neither is canonical, so both only get p
2628                        flags.  NWC, 2000/11/25 */
2629                     /* Both already have p flags, so do nothing */
2630                 } else {
2631                     const NV nv = SvNVX(sv);
2632                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2633                         if (SvIVX(sv) == I_V(nv)) {
2634                             SvNOK_on(sv);
2635                         } else {
2636                             /* It had no "." so it must be integer.  */
2637                         }
2638                         SvIOK_on(sv);
2639                     } else {
2640                         /* between IV_MAX and NV(UV_MAX).
2641                            Could be slightly > UV_MAX */
2642
2643                         if (numtype & IS_NUMBER_NOT_INT) {
2644                             /* UV and NV both imprecise.  */
2645                         } else {
2646                             const UV nv_as_uv = U_V(nv);
2647
2648                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2649                                 SvNOK_on(sv);
2650                             }
2651                             SvIOK_on(sv);
2652                         }
2653                     }
2654                 }
2655             }
2656         }
2657         /* It might be more code efficient to go through the entire logic above
2658            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2659            gets complex and potentially buggy, so more programmer efficient
2660            to do it this way, by turning off the public flags:  */
2661         if (!numtype)
2662             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2663 #endif /* NV_PRESERVES_UV */
2664     }
2665     else  {
2666         if (isGV_with_GP(sv)) {
2667             glob_2number(MUTABLE_GV(sv));
2668             return 0.0;
2669         }
2670
2671         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2672             report_uninit(sv);
2673         assert (SvTYPE(sv) >= SVt_NV);
2674         /* Typically the caller expects that sv_any is not NULL now.  */
2675         /* XXX Ilya implies that this is a bug in callers that assume this
2676            and ideally should be fixed.  */
2677         return 0.0;
2678     }
2679 #if defined(USE_LONG_DOUBLE)
2680     DEBUG_c({
2681         STORE_NUMERIC_LOCAL_SET_STANDARD();
2682         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2683                       PTR2UV(sv), SvNVX(sv));
2684         RESTORE_NUMERIC_LOCAL();
2685     });
2686 #else
2687     DEBUG_c({
2688         STORE_NUMERIC_LOCAL_SET_STANDARD();
2689         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2690                       PTR2UV(sv), SvNVX(sv));
2691         RESTORE_NUMERIC_LOCAL();
2692     });
2693 #endif
2694     return SvNVX(sv);
2695 }
2696
2697 /*
2698 =for apidoc sv_2num
2699
2700 Return an SV with the numeric value of the source SV, doing any necessary
2701 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2702 access this function.
2703
2704 =cut
2705 */
2706
2707 SV *
2708 Perl_sv_2num(pTHX_ SV *const sv)
2709 {
2710     PERL_ARGS_ASSERT_SV_2NUM;
2711
2712     if (!SvROK(sv))
2713         return sv;
2714     if (SvAMAGIC(sv)) {
2715         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2716         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2717         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2718             return sv_2num(tmpsv);
2719     }
2720     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2721 }
2722
2723 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2724  * UV as a string towards the end of buf, and return pointers to start and
2725  * end of it.
2726  *
2727  * We assume that buf is at least TYPE_CHARS(UV) long.
2728  */
2729
2730 static char *
2731 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2732 {
2733     char *ptr = buf + TYPE_CHARS(UV);
2734     char * const ebuf = ptr;
2735     int sign;
2736
2737     PERL_ARGS_ASSERT_UIV_2BUF;
2738
2739     if (is_uv)
2740         sign = 0;
2741     else if (iv >= 0) {
2742         uv = iv;
2743         sign = 0;
2744     } else {
2745         uv = -iv;
2746         sign = 1;
2747     }
2748     do {
2749         *--ptr = '0' + (char)(uv % 10);
2750     } while (uv /= 10);
2751     if (sign)
2752         *--ptr = '-';
2753     *peob = ebuf;
2754     return ptr;
2755 }
2756
2757 /*
2758 =for apidoc sv_2pv_flags
2759
2760 Returns a pointer to the string value of an SV, and sets *lp to its length.
2761 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2762 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2763 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2764
2765 =cut
2766 */
2767
2768 char *
2769 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2770 {
2771     dVAR;
2772     char *s;
2773
2774     if (!sv) {
2775         if (lp)
2776             *lp = 0;
2777         return (char *)"";
2778     }
2779     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2780          && SvTYPE(sv) != SVt_PVFM);
2781     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2782         mg_get(sv);
2783     if (SvROK(sv)) {
2784         if (SvAMAGIC(sv)) {
2785             SV *tmpstr;
2786             if (flags & SV_SKIP_OVERLOAD)
2787                 return NULL;
2788             tmpstr = AMG_CALLunary(sv, string_amg);
2789             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2790             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2791                 /* Unwrap this:  */
2792                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2793                  */
2794
2795                 char *pv;
2796                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2797                     if (flags & SV_CONST_RETURN) {
2798                         pv = (char *) SvPVX_const(tmpstr);
2799                     } else {
2800                         pv = (flags & SV_MUTABLE_RETURN)
2801                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2802                     }
2803                     if (lp)
2804                         *lp = SvCUR(tmpstr);
2805                 } else {
2806                     pv = sv_2pv_flags(tmpstr, lp, flags);
2807                 }
2808                 if (SvUTF8(tmpstr))
2809                     SvUTF8_on(sv);
2810                 else
2811                     SvUTF8_off(sv);
2812                 return pv;
2813             }
2814         }
2815         {
2816             STRLEN len;
2817             char *retval;
2818             char *buffer;
2819             SV *const referent = SvRV(sv);
2820
2821             if (!referent) {
2822                 len = 7;
2823                 retval = buffer = savepvn("NULLREF", len);
2824             } else if (SvTYPE(referent) == SVt_REGEXP &&
2825                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2826                         amagic_is_enabled(string_amg))) {
2827                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2828
2829                 assert(re);
2830                         
2831                 /* If the regex is UTF-8 we want the containing scalar to
2832                    have an UTF-8 flag too */
2833                 if (RX_UTF8(re))
2834                     SvUTF8_on(sv);
2835                 else
2836                     SvUTF8_off(sv);     
2837
2838                 if (lp)
2839                     *lp = RX_WRAPLEN(re);
2840  
2841                 return RX_WRAPPED(re);
2842             } else {
2843                 const char *const typestr = sv_reftype(referent, 0);
2844                 const STRLEN typelen = strlen(typestr);
2845                 UV addr = PTR2UV(referent);
2846                 const char *stashname = NULL;
2847                 STRLEN stashnamelen = 0; /* hush, gcc */
2848                 const char *buffer_end;
2849
2850                 if (SvOBJECT(referent)) {
2851                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2852
2853                     if (name) {
2854                         stashname = HEK_KEY(name);
2855                         stashnamelen = HEK_LEN(name);
2856
2857                         if (HEK_UTF8(name)) {
2858                             SvUTF8_on(sv);
2859                         } else {
2860                             SvUTF8_off(sv);
2861                         }
2862                     } else {
2863                         stashname = "__ANON__";
2864                         stashnamelen = 8;
2865                     }
2866                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2867                         + 2 * sizeof(UV) + 2 /* )\0 */;
2868                 } else {
2869                     len = typelen + 3 /* (0x */
2870                         + 2 * sizeof(UV) + 2 /* )\0 */;
2871                 }
2872
2873                 Newx(buffer, len, char);
2874                 buffer_end = retval = buffer + len;
2875
2876                 /* Working backwards  */
2877                 *--retval = '\0';
2878                 *--retval = ')';
2879                 do {
2880                     *--retval = PL_hexdigit[addr & 15];
2881                 } while (addr >>= 4);
2882                 *--retval = 'x';
2883                 *--retval = '0';
2884                 *--retval = '(';
2885
2886                 retval -= typelen;
2887                 memcpy(retval, typestr, typelen);
2888
2889                 if (stashname) {
2890                     *--retval = '=';
2891                     retval -= stashnamelen;
2892                     memcpy(retval, stashname, stashnamelen);
2893                 }
2894                 /* retval may not necessarily have reached the start of the
2895                    buffer here.  */
2896                 assert (retval >= buffer);
2897
2898                 len = buffer_end - retval - 1; /* -1 for that \0  */
2899             }
2900             if (lp)
2901                 *lp = len;
2902             SAVEFREEPV(buffer);
2903             return retval;
2904         }
2905     }
2906
2907     if (SvPOKp(sv)) {
2908         if (lp)
2909             *lp = SvCUR(sv);
2910         if (flags & SV_MUTABLE_RETURN)
2911             return SvPVX_mutable(sv);
2912         if (flags & SV_CONST_RETURN)
2913             return (char *)SvPVX_const(sv);
2914         return SvPVX(sv);
2915     }
2916
2917     if (SvIOK(sv)) {
2918         /* I'm assuming that if both IV and NV are equally valid then
2919            converting the IV is going to be more efficient */
2920         const U32 isUIOK = SvIsUV(sv);
2921         char buf[TYPE_CHARS(UV)];
2922         char *ebuf, *ptr;
2923         STRLEN len;
2924
2925         if (SvTYPE(sv) < SVt_PVIV)
2926             sv_upgrade(sv, SVt_PVIV);
2927         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2928         len = ebuf - ptr;
2929         /* inlined from sv_setpvn */
2930         s = SvGROW_mutable(sv, len + 1);
2931         Move(ptr, s, len, char);
2932         s += len;
2933         *s = '\0';
2934         SvPOK_on(sv);
2935     }
2936     else if (SvNOK(sv)) {
2937         if (SvTYPE(sv) < SVt_PVNV)
2938             sv_upgrade(sv, SVt_PVNV);
2939         if (SvNVX(sv) == 0.0) {
2940             s = SvGROW_mutable(sv, 2);
2941             *s++ = '0';
2942             *s = '\0';
2943         } else {
2944             dSAVE_ERRNO;
2945             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2946             s = SvGROW_mutable(sv, NV_DIG + 20);
2947             /* some Xenix systems wipe out errno here */
2948
2949 #ifndef USE_LOCALE_NUMERIC
2950             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2951             SvPOK_on(sv);
2952 #else
2953             /* Gconvert always uses the current locale.  That's the right thing
2954              * to do if we're supposed to be using locales.  But otherwise, we
2955              * want the result to be based on the C locale, so we need to
2956              * change to the C locale during the Gconvert and then change back.
2957              * But if we're already in the C locale (PL_numeric_standard is
2958              * TRUE in that case), no need to do any changing */
2959             if (PL_numeric_standard || IN_SOME_LOCALE_FORM_RUNTIME) {
2960                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2961
2962                 /* If the radix character is UTF-8, and actually is in the
2963                  * output, turn on the UTF-8 flag for the scalar */
2964                 if (! PL_numeric_standard
2965                     && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
2966                     && instr(s, SvPVX_const(PL_numeric_radix_sv)))
2967                 {
2968                     SvUTF8_on(sv);
2969                 }
2970             }
2971             else {
2972                 char *loc = savepv(setlocale(LC_NUMERIC, NULL));
2973                 setlocale(LC_NUMERIC, "C");
2974                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2975                 setlocale(LC_NUMERIC, loc);
2976                 Safefree(loc);
2977
2978             }
2979
2980             /* We don't call SvPOK_on(), because it may come to pass that the
2981              * locale changes so that the stringification we just did is no
2982              * longer correct.  We will have to re-stringify every time it is
2983              * needed */
2984 #endif
2985             RESTORE_ERRNO;
2986             while (*s) s++;
2987         }
2988     }
2989     else if (isGV_with_GP(sv)) {
2990         GV *const gv = MUTABLE_GV(sv);
2991         SV *const buffer = sv_newmortal();
2992
2993         gv_efullname3(buffer, gv, "*");
2994
2995         assert(SvPOK(buffer));
2996         if (SvUTF8(buffer))
2997             SvUTF8_on(sv);
2998         if (lp)
2999             *lp = SvCUR(buffer);
3000         return SvPVX(buffer);
3001     }
3002     else if (isREGEXP(sv)) {
3003         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3004         return RX_WRAPPED((REGEXP *)sv);
3005     }
3006     else {
3007         if (lp)
3008             *lp = 0;
3009         if (flags & SV_UNDEF_RETURNS_NULL)
3010             return NULL;
3011         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3012             report_uninit(sv);
3013         /* Typically the caller expects that sv_any is not NULL now.  */
3014         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3015             sv_upgrade(sv, SVt_PV);
3016         return (char *)"";
3017     }
3018
3019     {
3020         const STRLEN len = s - SvPVX_const(sv);
3021         if (lp) 
3022             *lp = len;
3023         SvCUR_set(sv, len);
3024     }
3025     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3026                           PTR2UV(sv),SvPVX_const(sv)));
3027     if (flags & SV_CONST_RETURN)
3028         return (char *)SvPVX_const(sv);
3029     if (flags & SV_MUTABLE_RETURN)
3030         return SvPVX_mutable(sv);
3031     return SvPVX(sv);
3032 }
3033
3034 /*
3035 =for apidoc sv_copypv
3036
3037 Copies a stringified representation of the source SV into the
3038 destination SV.  Automatically performs any necessary mg_get and
3039 coercion of numeric values into strings.  Guaranteed to preserve
3040 UTF8 flag even from overloaded objects.  Similar in nature to
3041 sv_2pv[_flags] but operates directly on an SV instead of just the
3042 string.  Mostly uses sv_2pv_flags to do its work, except when that
3043 would lose the UTF-8'ness of the PV.
3044
3045 =for apidoc sv_copypv_nomg
3046
3047 Like sv_copypv, but doesn't invoke get magic first.
3048
3049 =for apidoc sv_copypv_flags
3050
3051 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3052 include SV_GMAGIC.
3053
3054 =cut
3055 */
3056
3057 void
3058 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3059 {
3060     PERL_ARGS_ASSERT_SV_COPYPV;
3061
3062     sv_copypv_flags(dsv, ssv, 0);
3063 }
3064
3065 void
3066 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3067 {
3068     STRLEN len;
3069     const char *s;
3070
3071     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3072
3073     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3074         mg_get(ssv);
3075     s = SvPV_nomg_const(ssv,len);
3076     sv_setpvn(dsv,s,len);
3077     if (SvUTF8(ssv))
3078         SvUTF8_on(dsv);
3079     else
3080         SvUTF8_off(dsv);
3081 }
3082
3083 /*
3084 =for apidoc sv_2pvbyte
3085
3086 Return a pointer to the byte-encoded representation of the SV, and set *lp
3087 to its length.  May cause the SV to be downgraded from UTF-8 as a
3088 side-effect.
3089
3090 Usually accessed via the C<SvPVbyte> macro.
3091
3092 =cut
3093 */
3094
3095 char *
3096 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3097 {
3098     PERL_ARGS_ASSERT_SV_2PVBYTE;
3099
3100     SvGETMAGIC(sv);
3101     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3102      || isGV_with_GP(sv) || SvROK(sv)) {
3103         SV *sv2 = sv_newmortal();
3104         sv_copypv_nomg(sv2,sv);
3105         sv = sv2;
3106     }
3107     sv_utf8_downgrade(sv,0);
3108     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3109 }
3110
3111 /*
3112 =for apidoc sv_2pvutf8
3113
3114 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3115 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3116
3117 Usually accessed via the C<SvPVutf8> macro.
3118
3119 =cut
3120 */
3121
3122 char *
3123 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3124 {
3125     PERL_ARGS_ASSERT_SV_2PVUTF8;
3126
3127     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3128      || isGV_with_GP(sv) || SvROK(sv))
3129         sv = sv_mortalcopy(sv);
3130     else
3131         SvGETMAGIC(sv);
3132     sv_utf8_upgrade_nomg(sv);
3133     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3134 }
3135
3136
3137 /*
3138 =for apidoc sv_2bool
3139
3140 This macro is only used by sv_true() or its macro equivalent, and only if
3141 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3142 It calls sv_2bool_flags with the SV_GMAGIC flag.
3143
3144 =for apidoc sv_2bool_flags
3145
3146 This function is only used by sv_true() and friends,  and only if
3147 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3148 contain SV_GMAGIC, then it does an mg_get() first.
3149
3150
3151 =cut
3152 */
3153
3154 bool
3155 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3156 {
3157     dVAR;
3158
3159     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3160
3161     restart:
3162     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3163
3164     if (!SvOK(sv))
3165         return 0;
3166     if (SvROK(sv)) {
3167         if (SvAMAGIC(sv)) {
3168             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3169             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3170                 bool svb;
3171                 sv = tmpsv;
3172                 if(SvGMAGICAL(sv)) {
3173                     flags = SV_GMAGIC;
3174                     goto restart; /* call sv_2bool */
3175                 }
3176                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3177                 else if(!SvOK(sv)) {
3178                     svb = 0;
3179                 }
3180                 else if(SvPOK(sv)) {
3181                     svb = SvPVXtrue(sv);
3182                 }
3183                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3184                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3185                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3186                 }
3187                 else {
3188                     flags = 0;
3189                     goto restart; /* call sv_2bool_nomg */
3190                 }
3191                 return cBOOL(svb);
3192             }
3193         }
3194         return SvRV(sv) != 0;
3195     }
3196     if (isREGEXP(sv))
3197         return
3198           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3199     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3200 }
3201
3202 /*
3203 =for apidoc sv_utf8_upgrade
3204
3205 Converts the PV of an SV to its UTF-8-encoded form.
3206 Forces the SV to string form if it is not already.
3207 Will C<mg_get> on C<sv> if appropriate.
3208 Always sets the SvUTF8 flag to avoid future validity checks even
3209 if the whole string is the same in UTF-8 as not.
3210 Returns the number of bytes in the converted string
3211
3212 This is not a general purpose byte encoding to Unicode interface:
3213 use the Encode extension for that.
3214
3215 =for apidoc sv_utf8_upgrade_nomg
3216
3217 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3218
3219 =for apidoc sv_utf8_upgrade_flags
3220
3221 Converts the PV of an SV to its UTF-8-encoded form.
3222 Forces the SV to string form if it is not already.
3223 Always sets the SvUTF8 flag to avoid future validity checks even
3224 if all the bytes are invariant in UTF-8.
3225 If C<flags> has C<SV_GMAGIC> bit set,
3226 will C<mg_get> on C<sv> if appropriate, else not.
3227 Returns the number of bytes in the converted string
3228 C<sv_utf8_upgrade> and
3229 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3230
3231 This is not a general purpose byte encoding to Unicode interface:
3232 use the Encode extension for that.
3233
3234 =cut
3235
3236 The grow version is currently not externally documented.  It adds a parameter,
3237 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3238 have free after it upon return.  This allows the caller to reserve extra space
3239 that it intends to fill, to avoid extra grows.
3240
3241 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3242 which can be used to tell this function to not first check to see if there are
3243 any characters that are different in UTF-8 (variant characters) which would
3244 force it to allocate a new string to sv, but to assume there are.  Typically
3245 this flag is used by a routine that has already parsed the string to find that
3246 there are such characters, and passes this information on so that the work
3247 doesn't have to be repeated.
3248
3249 (One might think that the calling routine could pass in the position of the
3250 first such variant, so it wouldn't have to be found again.  But that is not the
3251 case, because typically when the caller is likely to use this flag, it won't be
3252 calling this routine unless it finds something that won't fit into a byte.
3253 Otherwise it tries to not upgrade and just use bytes.  But some things that
3254 do fit into a byte are variants in utf8, and the caller may not have been
3255 keeping track of these.)
3256
3257 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3258 isn't guaranteed due to having other routines do the work in some input cases,
3259 or if the input is already flagged as being in utf8.
3260
3261 The speed of this could perhaps be improved for many cases if someone wanted to
3262 write a fast function that counts the number of variant characters in a string,
3263 especially if it could return the position of the first one.
3264
3265 */
3266
3267 STRLEN
3268 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3269 {
3270     dVAR;
3271
3272     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3273
3274     if (sv == &PL_sv_undef)
3275         return 0;
3276     if (!SvPOK_nog(sv)) {
3277         STRLEN len = 0;
3278         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3279             (void) sv_2pv_flags(sv,&len, flags);
3280             if (SvUTF8(sv)) {
3281                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3282                 return len;
3283             }
3284         } else {
3285             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3286         }
3287     }
3288
3289     if (SvUTF8(sv)) {
3290         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3291         return SvCUR(sv);
3292     }
3293
3294     if (SvIsCOW(sv)) {
3295         S_sv_uncow(aTHX_ sv, 0);
3296     }
3297
3298     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3299         sv_recode_to_utf8(sv, PL_encoding);
3300         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3301         return SvCUR(sv);
3302     }
3303
3304     if (SvCUR(sv) == 0) {
3305         if (extra) SvGROW(sv, extra);
3306     } else { /* Assume Latin-1/EBCDIC */
3307         /* This function could be much more efficient if we
3308          * had a FLAG in SVs to signal if there are any variant
3309          * chars in the PV.  Given that there isn't such a flag
3310          * make the loop as fast as possible (although there are certainly ways
3311          * to speed this up, eg. through vectorization) */
3312         U8 * s = (U8 *) SvPVX_const(sv);
3313         U8 * e = (U8 *) SvEND(sv);
3314         U8 *t = s;
3315         STRLEN two_byte_count = 0;
3316         
3317         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3318
3319         /* See if really will need to convert to utf8.  We mustn't rely on our
3320          * incoming SV being well formed and having a trailing '\0', as certain
3321          * code in pp_formline can send us partially built SVs. */
3322
3323         while (t < e) {
3324             const U8 ch = *t++;
3325             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3326
3327             t--;    /* t already incremented; re-point to first variant */
3328             two_byte_count = 1;
3329             goto must_be_utf8;
3330         }
3331
3332         /* utf8 conversion not needed because all are invariants.  Mark as
3333          * UTF-8 even if no variant - saves scanning loop */
3334         SvUTF8_on(sv);
3335         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3336         return SvCUR(sv);
3337
3338 must_be_utf8:
3339
3340         /* Here, the string should be converted to utf8, either because of an
3341          * input flag (two_byte_count = 0), or because a character that
3342          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3343          * the beginning of the string (if we didn't examine anything), or to
3344          * the first variant.  In either case, everything from s to t - 1 will
3345          * occupy only 1 byte each on output.
3346          *
3347          * There are two main ways to convert.  One is to create a new string
3348          * and go through the input starting from the beginning, appending each
3349          * converted value onto the new string as we go along.  It's probably
3350          * best to allocate enough space in the string for the worst possible
3351          * case rather than possibly running out of space and having to
3352          * reallocate and then copy what we've done so far.  Since everything
3353          * from s to t - 1 is invariant, the destination can be initialized
3354          * with these using a fast memory copy
3355          *
3356          * The other way is to figure out exactly how big the string should be
3357          * by parsing the entire input.  Then you don't have to make it big
3358          * enough to handle the worst possible case, and more importantly, if
3359          * the string you already have is large enough, you don't have to
3360          * allocate a new string, you can copy the last character in the input
3361          * string to the final position(s) that will be occupied by the
3362          * converted string and go backwards, stopping at t, since everything
3363          * before that is invariant.
3364          *
3365          * There are advantages and disadvantages to each method.
3366          *
3367          * In the first method, we can allocate a new string, do the memory
3368          * copy from the s to t - 1, and then proceed through the rest of the
3369          * string byte-by-byte.
3370          *
3371          * In the second method, we proceed through the rest of the input
3372          * string just calculating how big the converted string will be.  Then
3373          * there are two cases:
3374          *  1)  if the string has enough extra space to handle the converted
3375          *      value.  We go backwards through the string, converting until we
3376          *      get to the position we are at now, and then stop.  If this
3377          *      position is far enough along in the string, this method is
3378          *      faster than the other method.  If the memory copy were the same
3379          *      speed as the byte-by-byte loop, that position would be about
3380          *      half-way, as at the half-way mark, parsing to the end and back
3381          *      is one complete string's parse, the same amount as starting
3382          *      over and going all the way through.  Actually, it would be
3383          *      somewhat less than half-way, as it's faster to just count bytes
3384          *      than to also copy, and we don't have the overhead of allocating
3385          *      a new string, changing the scalar to use it, and freeing the
3386          *      existing one.  But if the memory copy is fast, the break-even
3387          *      point is somewhere after half way.  The counting loop could be
3388          *      sped up by vectorization, etc, to move the break-even point
3389          *      further towards the beginning.
3390          *  2)  if the string doesn't have enough space to handle the converted
3391          *      value.  A new string will have to be allocated, and one might
3392          *      as well, given that, start from the beginning doing the first
3393          *      method.  We've spent extra time parsing the string and in
3394          *      exchange all we've gotten is that we know precisely how big to
3395          *      make the new one.  Perl is more optimized for time than space,
3396          *      so this case is a loser.
3397          * So what I've decided to do is not use the 2nd method unless it is
3398          * guaranteed that a new string won't have to be allocated, assuming
3399          * the worst case.  I also decided not to put any more conditions on it
3400          * than this, for now.  It seems likely that, since the worst case is
3401          * twice as big as the unknown portion of the string (plus 1), we won't
3402          * be guaranteed enough space, causing us to go to the first method,
3403          * unless the string is short, or the first variant character is near
3404          * the end of it.  In either of these cases, it seems best to use the
3405          * 2nd method.  The only circumstance I can think of where this would
3406          * be really slower is if the string had once had much more data in it
3407          * than it does now, but there is still a substantial amount in it  */
3408
3409         {
3410             STRLEN invariant_head = t - s;
3411             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3412             if (SvLEN(sv) < size) {
3413
3414                 /* Here, have decided to allocate a new string */
3415
3416                 U8 *dst;
3417                 U8 *d;
3418
3419                 Newx(dst, size, U8);
3420
3421                 /* If no known invariants at the beginning of the input string,
3422                  * set so starts from there.  Otherwise, can use memory copy to
3423                  * get up to where we are now, and then start from here */
3424
3425                 if (invariant_head <= 0) {
3426                     d = dst;
3427                 } else {
3428                     Copy(s, dst, invariant_head, char);
3429                     d = dst + invariant_head;
3430                 }
3431
3432                 while (t < e) {
3433                     append_utf8_from_native_byte(*t, &d);
3434                     t++;
3435                 }
3436                 *d = '\0';
3437                 SvPV_free(sv); /* No longer using pre-existing string */
3438                 SvPV_set(sv, (char*)dst);
3439                 SvCUR_set(sv, d - dst);
3440                 SvLEN_set(sv, size);
3441             } else {
3442
3443                 /* Here, have decided to get the exact size of the string.
3444                  * Currently this happens only when we know that there is
3445                  * guaranteed enough space to fit the converted string, so
3446                  * don't have to worry about growing.  If two_byte_count is 0,
3447                  * then t points to the first byte of the string which hasn't
3448                  * been examined yet.  Otherwise two_byte_count is 1, and t
3449                  * points to the first byte in the string that will expand to
3450                  * two.  Depending on this, start examining at t or 1 after t.
3451                  * */
3452
3453                 U8 *d = t + two_byte_count;
3454
3455
3456                 /* Count up the remaining bytes that expand to two */
3457
3458                 while (d < e) {
3459                     const U8 chr = *d++;
3460                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3461                 }
3462
3463                 /* The string will expand by just the number of bytes that
3464                  * occupy two positions.  But we are one afterwards because of
3465                  * the increment just above.  This is the place to put the
3466                  * trailing NUL, and to set the length before we decrement */
3467
3468                 d += two_byte_count;
3469                 SvCUR_set(sv, d - s);
3470                 *d-- = '\0';
3471
3472
3473                 /* Having decremented d, it points to the position to put the
3474                  * very last byte of the expanded string.  Go backwards through
3475                  * the string, copying and expanding as we go, stopping when we
3476                  * get to the part that is invariant the rest of the way down */
3477
3478                 e--;
3479                 while (e >= t) {
3480                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3481                         *d-- = *e;
3482                     } else {
3483                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3484                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3485                     }
3486                     e--;
3487                 }
3488             }
3489
3490             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3491                 /* Update pos. We do it at the end rather than during
3492                  * the upgrade, to avoid slowing down the common case
3493                  * (upgrade without pos).
3494                  * pos can be stored as either bytes or characters.  Since
3495                  * this was previously a byte string we can just turn off
3496                  * the bytes flag. */
3497                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3498                 if (mg) {
3499                     mg->mg_flags &= ~MGf_BYTES;
3500                 }
3501                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3502                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3503             }
3504         }
3505     }
3506
3507     /* Mark as UTF-8 even if no variant - saves scanning loop */
3508     SvUTF8_on(sv);
3509     return SvCUR(sv);
3510 }
3511
3512 /*
3513 =for apidoc sv_utf8_downgrade
3514
3515 Attempts to convert the PV of an SV from characters to bytes.
3516 If the PV contains a character that cannot fit
3517 in a byte, this conversion will fail;
3518 in this case, either returns false or, if C<fail_ok> is not
3519 true, croaks.
3520
3521 This is not a general purpose Unicode to byte encoding interface:
3522 use the Encode extension for that.
3523
3524 =cut
3525 */
3526
3527 bool
3528 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3529 {
3530     dVAR;
3531
3532     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3533
3534     if (SvPOKp(sv) && SvUTF8(sv)) {
3535         if (SvCUR(sv)) {
3536             U8 *s;
3537             STRLEN len;
3538             int mg_flags = SV_GMAGIC;
3539
3540             if (SvIsCOW(sv)) {
3541                 S_sv_uncow(aTHX_ sv, 0);
3542             }
3543             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3544                 /* update pos */
3545                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3546                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3547                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3548                                                 SV_GMAGIC|SV_CONST_RETURN);
3549                         mg_flags = 0; /* sv_pos_b2u does get magic */
3550                 }
3551                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3552                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3553
3554             }
3555             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3556
3557             if (!utf8_to_bytes(s, &len)) {
3558                 if (fail_ok)
3559                     return FALSE;
3560                 else {
3561                     if (PL_op)
3562                         Perl_croak(aTHX_ "Wide character in %s",
3563                                    OP_DESC(PL_op));
3564                     else
3565                         Perl_croak(aTHX_ "Wide character");
3566                 }
3567             }
3568             SvCUR_set(sv, len);
3569         }
3570     }
3571     SvUTF8_off(sv);
3572     return TRUE;
3573 }
3574
3575 /*
3576 =for apidoc sv_utf8_encode
3577
3578 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3579 flag off so that it looks like octets again.
3580
3581 =cut
3582 */
3583
3584 void
3585 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3586 {
3587     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3588
3589     if (SvREADONLY(sv)) {
3590         sv_force_normal_flags(sv, 0);
3591     }
3592     (void) sv_utf8_upgrade(sv);
3593     SvUTF8_off(sv);
3594 }
3595
3596 /*
3597 =for apidoc sv_utf8_decode
3598
3599 If the PV of the SV is an octet sequence in UTF-8
3600 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3601 so that it looks like a character.  If the PV contains only single-byte
3602 characters, the C<SvUTF8> flag stays off.
3603 Scans PV for validity and returns false if the PV is invalid UTF-8.
3604
3605 =cut
3606 */
3607
3608 bool
3609 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3610 {
3611     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3612
3613     if (SvPOKp(sv)) {
3614         const U8 *start, *c;
3615         const U8 *e;
3616
3617         /* The octets may have got themselves encoded - get them back as
3618          * bytes
3619          */
3620         if (!sv_utf8_downgrade(sv, TRUE))
3621             return FALSE;
3622
3623         /* it is actually just a matter of turning the utf8 flag on, but
3624          * we want to make sure everything inside is valid utf8 first.
3625          */
3626         c = start = (const U8 *) SvPVX_const(sv);
3627         if (!is_utf8_string(c, SvCUR(sv)))
3628             return FALSE;
3629         e = (const U8 *) SvEND(sv);
3630         while (c < e) {
3631             const U8 ch = *c++;
3632             if (!UTF8_IS_INVARIANT(ch)) {
3633                 SvUTF8_on(sv);
3634                 break;
3635             }
3636         }
3637         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3638             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3639                    after this, clearing pos.  Does anything on CPAN
3640                    need this? */
3641             /* adjust pos to the start of a UTF8 char sequence */
3642             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3643             if (mg) {
3644                 I32 pos = mg->mg_len;
3645                 if (pos > 0) {
3646                     for (c = start + pos; c > start; c--) {
3647                         if (UTF8_IS_START(*c))
3648                             break;
3649                     }
3650                     mg->mg_len  = c - start;
3651                 }
3652             }
3653             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3654                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3655         }
3656     }
3657     return TRUE;
3658 }
3659
3660 /*
3661 =for apidoc sv_setsv
3662
3663 Copies the contents of the source SV C<ssv> into the destination SV
3664 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3665 function if the source SV needs to be reused.  Does not handle 'set' magic.
3666 Loosely speaking, it performs a copy-by-value, obliterating any previous
3667 content of the destination.
3668
3669 You probably want to use one of the assortment of wrappers, such as
3670 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3671 C<SvSetMagicSV_nosteal>.
3672
3673 =for apidoc sv_setsv_flags
3674
3675 Copies the contents of the source SV C<ssv> into the destination SV
3676 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3677 function if the source SV needs to be reused.  Does not handle 'set' magic.
3678 Loosely speaking, it performs a copy-by-value, obliterating any previous
3679 content of the destination.
3680 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3681 C<ssv> if appropriate, else not.  If the C<flags>
3682 parameter has the C<NOSTEAL> bit set then the
3683 buffers of temps will not be stolen.  <sv_setsv>
3684 and C<sv_setsv_nomg> are implemented in terms of this function.
3685
3686 You probably want to use one of the assortment of wrappers, such as
3687 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3688 C<SvSetMagicSV_nosteal>.
3689
3690 This is the primary function for copying scalars, and most other
3691 copy-ish functions and macros use this underneath.
3692
3693 =cut
3694 */
3695
3696 static void
3697 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3698 {
3699     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3700     HV *old_stash = NULL;
3701
3702     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3703
3704     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3705         const char * const name = GvNAME(sstr);
3706         const STRLEN len = GvNAMELEN(sstr);
3707         {
3708             if (dtype >= SVt_PV) {
3709                 SvPV_free(dstr);
3710                 SvPV_set(dstr, 0);
3711                 SvLEN_set(dstr, 0);
3712                 SvCUR_set(dstr, 0);
3713             }
3714             SvUPGRADE(dstr, SVt_PVGV);
3715             (void)SvOK_off(dstr);
3716             /* We have to turn this on here, even though we turn it off
3717                below, as GvSTASH will fail an assertion otherwise. */
3718             isGV_with_GP_on(dstr);
3719         }
3720         GvSTASH(dstr) = GvSTASH(sstr);
3721         if (GvSTASH(dstr))
3722             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3723         gv_name_set(MUTABLE_GV(dstr), name, len,
3724                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3725         SvFAKE_on(dstr);        /* can coerce to non-glob */
3726     }
3727
3728     if(GvGP(MUTABLE_GV(sstr))) {
3729         /* If source has method cache entry, clear it */
3730         if(GvCVGEN(sstr)) {
3731             SvREFCNT_dec(GvCV(sstr));
3732             GvCV_set(sstr, NULL);
3733             GvCVGEN(sstr) = 0;
3734         }
3735         /* If source has a real method, then a method is
3736            going to change */
3737         else if(
3738          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3739         ) {
3740             mro_changes = 1;
3741         }
3742     }
3743
3744     /* If dest already had a real method, that's a change as well */
3745     if(
3746         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3747      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3748     ) {
3749         mro_changes = 1;
3750     }
3751
3752     /* We don't need to check the name of the destination if it was not a
3753        glob to begin with. */
3754     if(dtype == SVt_PVGV) {
3755         const char * const name = GvNAME((const GV *)dstr);
3756         if(
3757             strEQ(name,"ISA")
3758          /* The stash may have been detached from the symbol table, so
3759             check its name. */
3760          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3761         )
3762             mro_changes = 2;
3763         else {
3764             const STRLEN len = GvNAMELEN(dstr);
3765             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3766              || (len == 1 && name[0] == ':')) {
3767                 mro_changes = 3;
3768
3769                 /* Set aside the old stash, so we can reset isa caches on
3770                    its subclasses. */
3771                 if((old_stash = GvHV(dstr)))
3772                     /* Make sure we do not lose it early. */
3773                     SvREFCNT_inc_simple_void_NN(
3774                      sv_2mortal((SV *)old_stash)
3775                     );
3776             }
3777         }
3778     }
3779
3780     gp_free(MUTABLE_GV(dstr));
3781     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3782     (void)SvOK_off(dstr);
3783     isGV_with_GP_on(dstr);
3784     GvINTRO_off(dstr);          /* one-shot flag */
3785     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3786     if (SvTAINTED(sstr))
3787         SvTAINT(dstr);
3788     if (GvIMPORTED(dstr) != GVf_IMPORTED
3789         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3790         {
3791             GvIMPORTED_on(dstr);
3792         }
3793     GvMULTI_on(dstr);
3794     if(mro_changes == 2) {
3795       if (GvAV((const GV *)sstr)) {
3796         MAGIC *mg;
3797         SV * const sref = (SV *)GvAV((const GV *)dstr);
3798         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3799             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3800                 AV * const ary = newAV();
3801                 av_push(ary, mg->mg_obj); /* takes the refcount */
3802                 mg->mg_obj = (SV *)ary;
3803             }
3804             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3805         }
3806         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3807       }
3808       mro_isa_changed_in(GvSTASH(dstr));
3809     }
3810     else if(mro_changes == 3) {
3811         HV * const stash = GvHV(dstr);
3812         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3813             mro_package_moved(
3814                 stash, old_stash,
3815                 (GV *)dstr, 0
3816             );
3817     }
3818     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3819     if (GvIO(dstr) && dtype == SVt_PVGV) {
3820         DEBUG_o(Perl_deb(aTHX_
3821                         "glob_assign_glob clearing PL_stashcache\n"));
3822         /* It's a cache. It will rebuild itself quite happily.
3823            It's a lot of effort to work out exactly which key (or keys)
3824            might be invalidated by the creation of the this file handle.
3825          */
3826         hv_clear(PL_stashcache);
3827     }
3828     return;
3829 }
3830
3831 static void
3832 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3833 {
3834     SV * const sref = SvRV(sstr);
3835     SV *dref;
3836     const int intro = GvINTRO(dstr);
3837     SV **location;
3838     U8 import_flag = 0;
3839     const U32 stype = SvTYPE(sref);
3840
3841     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3842
3843     if (intro) {
3844         GvINTRO_off(dstr);      /* one-shot flag */
3845         GvLINE(dstr) = CopLINE(PL_curcop);
3846         GvEGV(dstr) = MUTABLE_GV(dstr);
3847     }
3848     GvMULTI_on(dstr);
3849     switch (stype) {
3850     case SVt_PVCV:
3851         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3852         import_flag = GVf_IMPORTED_CV;
3853         goto common;
3854     case SVt_PVHV:
3855         location = (SV **) &GvHV(dstr);
3856         import_flag = GVf_IMPORTED_HV;
3857         goto common;
3858     case SVt_PVAV:
3859         location = (SV **) &GvAV(dstr);
3860         import_flag = GVf_IMPORTED_AV;
3861         goto common;
3862     case SVt_PVIO:
3863         location = (SV **) &GvIOp(dstr);
3864         goto common;
3865     case SVt_PVFM:
3866         location = (SV **) &GvFORM(dstr);
3867         goto common;
3868     default:
3869         location = &GvSV(dstr);
3870         import_flag = GVf_IMPORTED_SV;
3871     common:
3872         if (intro) {
3873             if (stype == SVt_PVCV) {
3874                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3875                 if (GvCVGEN(dstr)) {
3876                     SvREFCNT_dec(GvCV(dstr));
3877                     GvCV_set(dstr, NULL);
3878                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3879                 }
3880             }
3881             /* SAVEt_GVSLOT takes more room on the savestack and has more
3882                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3883                leave_scope needs access to the GV so it can reset method
3884                caches.  We must use SAVEt_GVSLOT whenever the type is
3885                SVt_PVCV, even if the stash is anonymous, as the stash may
3886                gain a name somehow before leave_scope. */
3887             if (stype == SVt_PVCV) {
3888                 /* There is no save_pushptrptrptr.  Creating it for this
3889                    one call site would be overkill.  So inline the ss add
3890                    routines here. */
3891                 dSS_ADD;
3892                 SS_ADD_PTR(dstr);
3893                 SS_ADD_PTR(location);
3894                 SS_ADD_PTR(SvREFCNT_inc(*location));
3895                 SS_ADD_UV(SAVEt_GVSLOT);
3896                 SS_ADD_END(4);
3897             }
3898             else SAVEGENERICSV(*location);
3899         }
3900         dref = *location;
3901         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3902             CV* const cv = MUTABLE_CV(*location);
3903             if (cv) {
3904                 if (!GvCVGEN((const GV *)dstr) &&
3905                     (CvROOT(cv) || CvXSUB(cv)) &&
3906                     /* redundant check that avoids creating the extra SV
3907                        most of the time: */
3908                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3909                     {
3910                         SV * const new_const_sv =
3911                             CvCONST((const CV *)sref)
3912                                  ? cv_const_sv((const CV *)sref)
3913                                  : NULL;
3914                         report_redefined_cv(
3915                            sv_2mortal(Perl_newSVpvf(aTHX_
3916                                 "%"HEKf"::%"HEKf,
3917                                 HEKfARG(
3918                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3919                                 ),
3920                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3921                            )),
3922                            cv,
3923                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3924                         );
3925                     }
3926                 if (!intro)
3927                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3928                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3929                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3930                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3931             }
3932             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3933             GvASSUMECV_on(dstr);
3934             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3935         }
3936         *location = SvREFCNT_inc_simple_NN(sref);
3937         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3938             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3939             GvFLAGS(dstr) |= import_flag;
3940         }
3941         if (stype == SVt_PVHV) {
3942             const char * const name = GvNAME((GV*)dstr);
3943             const STRLEN len = GvNAMELEN(dstr);
3944             if (
3945                 (
3946                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3947                 || (len == 1 && name[0] == ':')
3948                 )
3949              && (!dref || HvENAME_get(dref))
3950             ) {
3951                 mro_package_moved(
3952                     (HV *)sref, (HV *)dref,
3953                     (GV *)dstr, 0
3954                 );
3955             }
3956         }
3957         else if (
3958             stype == SVt_PVAV && sref != dref
3959          && strEQ(GvNAME((GV*)dstr), "ISA")
3960          /* The stash may have been detached from the symbol table, so
3961             check its name before doing anything. */
3962          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3963         ) {
3964             MAGIC *mg;
3965             MAGIC * const omg = dref && SvSMAGICAL(dref)
3966                                  ? mg_find(dref, PERL_MAGIC_isa)
3967                                  : NULL;
3968             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3969                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3970                     AV * const ary = newAV();
3971                     av_push(ary, mg->mg_obj); /* takes the refcount */
3972                     mg->mg_obj = (SV *)ary;
3973                 }
3974                 if (omg) {
3975                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3976                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3977                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3978                         while (items--)
3979                             av_push(
3980                              (AV *)mg->mg_obj,
3981                              SvREFCNT_inc_simple_NN(*svp++)
3982                             );
3983                     }
3984                     else
3985                         av_push(
3986                          (AV *)mg->mg_obj,
3987                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3988                         );
3989                 }
3990                 else
3991                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3992             }
3993             else
3994             {
3995                 sv_magic(
3996                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3997                 );
3998                 mg = mg_find(sref, PERL_MAGIC_isa);
3999             }
4000             /* Since the *ISA assignment could have affected more than
4001                one stash, don't call mro_isa_changed_in directly, but let
4002                magic_clearisa do it for us, as it already has the logic for
4003                dealing with globs vs arrays of globs. */
4004             assert(mg);
4005             Perl_magic_clearisa(aTHX_ NULL, mg);
4006         }
4007         else if (stype == SVt_PVIO) {
4008             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4009             /* It's a cache. It will rebuild itself quite happily.
4010                It's a lot of effort to work out exactly which key (or keys)
4011                might be invalidated by the creation of the this file handle.
4012             */
4013             hv_clear(PL_stashcache);
4014         }
4015         break;
4016     }
4017     if (!intro) SvREFCNT_dec(dref);
4018     if (SvTAINTED(sstr))
4019         SvTAINT(dstr);
4020     return;
4021 }
4022
4023 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
4024    hold is 0. */
4025 #if SV_COW_THRESHOLD
4026 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
4027 #else
4028 # define GE_COW_THRESHOLD(len)          1
4029 #endif
4030 #if SV_COWBUF_THRESHOLD
4031 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
4032 #else
4033 # define GE_COWBUF_THRESHOLD(len)       1
4034 #endif
4035
4036 void
4037 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4038 {
4039     dVAR;
4040     U32 sflags;
4041     int dtype;
4042     svtype stype;
4043
4044     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4045
4046     if (sstr == dstr)
4047         return;
4048
4049     if (SvIS_FREED(dstr)) {
4050         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4051                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4052     }
4053     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4054     if (!sstr)
4055         sstr = &PL_sv_undef;
4056     if (SvIS_FREED(sstr)) {
4057         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4058                    (void*)sstr, (void*)dstr);
4059     }
4060     stype = SvTYPE(sstr);
4061     dtype = SvTYPE(dstr);
4062
4063     /* There's a lot of redundancy below but we're going for speed here */
4064
4065     switch (stype) {
4066     case SVt_NULL:
4067       undef_sstr:
4068         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4069             (void)SvOK_off(dstr);
4070             return;
4071         }
4072         break;
4073     case SVt_IV:
4074         if (SvIOK(sstr)) {
4075             switch (dtype) {
4076             case SVt_NULL:
4077                 sv_upgrade(dstr, SVt_IV);
4078                 break;
4079             case SVt_NV:
4080             case SVt_PV:
4081                 sv_upgrade(dstr, SVt_PVIV);
4082                 break;
4083             case SVt_PVGV:
4084             case SVt_PVLV:
4085                 goto end_of_first_switch;
4086             }
4087             (void)SvIOK_only(dstr);
4088             SvIV_set(dstr,  SvIVX(sstr));
4089             if (SvIsUV(sstr))
4090                 SvIsUV_on(dstr);
4091             /* SvTAINTED can only be true if the SV has taint magic, which in
4092                turn means that the SV type is PVMG (or greater). This is the
4093                case statement for SVt_IV, so this cannot be true (whatever gcov
4094                may say).  */
4095             assert(!SvTAINTED(sstr));
4096             return;
4097         }
4098         if (!SvROK(sstr))
4099             goto undef_sstr;
4100         if (dtype < SVt_PV && dtype != SVt_IV)
4101             sv_upgrade(dstr, SVt_IV);
4102         break;
4103
4104     case SVt_NV:
4105         if (SvNOK(sstr)) {
4106             switch (dtype) {
4107             case SVt_NULL:
4108             case SVt_IV:
4109                 sv_upgrade(dstr, SVt_NV);
4110                 break;
4111             case SVt_PV:
4112             case SVt_PVIV:
4113                 sv_upgrade(dstr, SVt_PVNV);
4114                 break;
4115             case SVt_PVGV:
4116             case SVt_PVLV:
4117                 goto end_of_first_switch;
4118             }
4119             SvNV_set(dstr, SvNVX(sstr));
4120             (void)SvNOK_only(dstr);
4121             /* SvTAINTED can only be true if the SV has taint magic, which in
4122                turn means that the SV type is PVMG (or greater). This is the
4123                case statement for SVt_NV, so this cannot be true (whatever gcov
4124                may say).  */
4125             assert(!SvTAINTED(sstr));
4126             return;
4127         }
4128         goto undef_sstr;
4129
4130     case SVt_PV:
4131         if (dtype < SVt_PV)
4132             sv_upgrade(dstr, SVt_PV);
4133         break;
4134     case SVt_PVIV:
4135         if (dtype < SVt_PVIV)
4136             sv_upgrade(dstr, SVt_PVIV);
4137         break;
4138     case SVt_PVNV:
4139         if (dtype < SVt_PVNV)
4140             sv_upgrade(dstr, SVt_PVNV);
4141         break;
4142     default:
4143         {
4144         const char * const type = sv_reftype(sstr,0);
4145         if (PL_op)
4146             /* diag_listed_as: Bizarre copy of %s */
4147             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4148         else
4149             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4150         }
4151         break;
4152
4153     case SVt_REGEXP:
4154       upgregexp:
4155         if (dtype < SVt_REGEXP)
4156         {
4157             if (dtype >= SVt_PV) {
4158                 SvPV_free(dstr);
4159                 SvPV_set(dstr, 0);
4160                 SvLEN_set(dstr, 0);
4161                 SvCUR_set(dstr, 0);
4162             }
4163             sv_upgrade(dstr, SVt_REGEXP);
4164         }
4165         break;
4166
4167         case SVt_INVLIST:
4168     case SVt_PVLV:
4169     case SVt_PVGV:
4170     case SVt_PVMG:
4171         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4172             mg_get(sstr);
4173             if (SvTYPE(sstr) != stype)
4174                 stype = SvTYPE(sstr);
4175         }
4176         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4177                     glob_assign_glob(dstr, sstr, dtype);
4178                     return;
4179         }
4180         if (stype == SVt_PVLV)
4181         {
4182             if (isREGEXP(sstr)) goto upgregexp;
4183             SvUPGRADE(dstr, SVt_PVNV);
4184         }
4185         else
4186             SvUPGRADE(dstr, (svtype)stype);
4187     }
4188  end_of_first_switch:
4189
4190     /* dstr may have been upgraded.  */
4191     dtype = SvTYPE(dstr);
4192     sflags = SvFLAGS(sstr);
4193
4194     if (dtype == SVt_PVCV) {
4195         /* Assigning to a subroutine sets the prototype.  */
4196         if (SvOK(sstr)) {
4197             STRLEN len;
4198             const char *const ptr = SvPV_const(sstr, len);
4199
4200             SvGROW(dstr, len + 1);
4201             Copy(ptr, SvPVX(dstr), len + 1, char);
4202             SvCUR_set(dstr, len);
4203             SvPOK_only(dstr);
4204             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4205             CvAUTOLOAD_off(dstr);
4206         } else {
4207             SvOK_off(dstr);
4208         }
4209     }
4210     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4211         const char * const type = sv_reftype(dstr,0);
4212         if (PL_op)
4213             /* diag_listed_as: Cannot copy to %s */
4214             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4215         else
4216             Perl_croak(aTHX_ "Cannot copy to %s", type);
4217     } else if (sflags & SVf_ROK) {
4218         if (isGV_with_GP(dstr)
4219             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4220             sstr = SvRV(sstr);
4221             if (sstr == dstr) {
4222                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4223                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4224                 {
4225                     GvIMPORTED_on(dstr);
4226                 }
4227                 GvMULTI_on(dstr);
4228                 return;
4229             }
4230             glob_assign_glob(dstr, sstr, dtype);
4231             return;
4232         }
4233
4234         if (dtype >= SVt_PV) {
4235             if (isGV_with_GP(dstr)) {
4236                 glob_assign_ref(dstr, sstr);
4237                 return;
4238             }
4239             if (SvPVX_const(dstr)) {
4240                 SvPV_free(dstr);
4241                 SvLEN_set(dstr, 0);
4242                 SvCUR_set(dstr, 0);
4243             }
4244         }
4245         (void)SvOK_off(dstr);
4246         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4247         SvFLAGS(dstr) |= sflags & SVf_ROK;
4248         assert(!(sflags & SVp_NOK));
4249         assert(!(sflags & SVp_IOK));
4250         assert(!(sflags & SVf_NOK));
4251         assert(!(sflags & SVf_IOK));
4252     }
4253     else if (isGV_with_GP(dstr)) {
4254         if (!(sflags & SVf_OK)) {
4255             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4256                            "Undefined value assigned to typeglob");
4257         }
4258         else {
4259             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4260             if (dstr != (const SV *)gv) {
4261                 const char * const name = GvNAME((const GV *)dstr);
4262                 const STRLEN len = GvNAMELEN(dstr);
4263                 HV *old_stash = NULL;
4264                 bool reset_isa = FALSE;
4265                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4266                  || (len == 1 && name[0] == ':')) {
4267                     /* Set aside the old stash, so we can reset isa caches
4268                        on its subclasses. */
4269                     if((old_stash = GvHV(dstr))) {
4270                         /* Make sure we do not lose it early. */
4271                         SvREFCNT_inc_simple_void_NN(
4272                          sv_2mortal((SV *)old_stash)
4273                         );
4274                     }
4275                     reset_isa = TRUE;
4276                 }
4277
4278                 if (GvGP(dstr))
4279                     gp_free(MUTABLE_GV(dstr));
4280                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4281
4282                 if (reset_isa) {
4283                     HV * const stash = GvHV(dstr);
4284                     if(
4285                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4286                     )
4287                         mro_package_moved(
4288                          stash, old_stash,
4289                          (GV *)dstr, 0
4290                         );
4291                 }
4292             }
4293         }
4294     }
4295     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4296           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4297         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4298     }
4299     else if (sflags & SVp_POK) {
4300         bool isSwipe = 0;
4301         const STRLEN cur = SvCUR(sstr);
4302         const STRLEN len = SvLEN(sstr);
4303
4304         /*
4305          * Check to see if we can just swipe the string.  If so, it's a
4306          * possible small lose on short strings, but a big win on long ones.
4307          * It might even be a win on short strings if SvPVX_const(dstr)
4308          * has to be allocated and SvPVX_const(sstr) has to be freed.
4309          * Likewise if we can set up COW rather than doing an actual copy, we
4310          * drop to the else clause, as the swipe code and the COW setup code
4311          * have much in common.
4312          */
4313
4314         /* Whichever path we take through the next code, we want this true,
4315            and doing it now facilitates the COW check.  */
4316         (void)SvPOK_only(dstr);
4317
4318         if (
4319             /* If we're already COW then this clause is not true, and if COW
4320                is allowed then we drop down to the else and make dest COW 
4321                with us.  If caller hasn't said that we're allowed to COW
4322                shared hash keys then we don't do the COW setup, even if the
4323                source scalar is a shared hash key scalar.  */
4324             (((flags & SV_COW_SHARED_HASH_KEYS)
4325                ? !(sflags & SVf_IsCOW)
4326 #ifdef PERL_NEW_COPY_ON_WRITE
4327                 || (len &&
4328                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4329                    /* If this is a regular (non-hek) COW, only so many COW
4330                       "copies" are possible. */
4331                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4332 #endif
4333                : 1 /* If making a COW copy is forbidden then the behaviour we
4334                        desire is as if the source SV isn't actually already
4335                        COW, even if it is.  So we act as if the source flags
4336                        are not COW, rather than actually testing them.  */
4337               )
4338 #ifndef PERL_ANY_COW
4339              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4340                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4341                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4342                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4343                 but in turn, it's somewhat dead code, never expected to go
4344                 live, but more kept as a placeholder on how to do it better
4345                 in a newer implementation.  */
4346              /* If we are COW and dstr is a suitable target then we drop down
4347                 into the else and make dest a COW of us.  */
4348              || (SvFLAGS(dstr) & SVf_BREAK)
4349 #endif
4350              )
4351             &&
4352             !(isSwipe =
4353 #ifdef PERL_NEW_COPY_ON_WRITE
4354                                 /* slated for free anyway (and not COW)? */
4355                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4356 #else
4357                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4358 #endif
4359                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4360                  (!(flags & SV_NOSTEAL)) &&
4361                                         /* and we're allowed to steal temps */
4362                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4363                  len)             /* and really is a string */
4364 #ifdef PERL_ANY_COW
4365             && ((flags & SV_COW_SHARED_HASH_KEYS)
4366                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4367 # ifdef PERL_OLD_COPY_ON_WRITE
4368                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4369                      && SvTYPE(sstr) >= SVt_PVIV && len
4370 # else
4371                      && !(SvFLAGS(dstr) & SVf_BREAK)
4372                      && !(sflags & SVf_IsCOW)
4373                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4374                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4375 # endif
4376                     ))
4377                 : 1)
4378 #endif
4379             ) {
4380             /* Failed the swipe test, and it's not a shared hash key either.
4381                Have to copy the string.  */
4382             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4383             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4384             SvCUR_set(dstr, cur);
4385             *SvEND(dstr) = '\0';
4386         } else {
4387             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4388                be true in here.  */
4389             /* Either it's a shared hash key, or it's suitable for
4390                copy-on-write or we can swipe the string.  */
4391             if (DEBUG_C_TEST) {
4392                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4393                 sv_dump(sstr);
4394                 sv_dump(dstr);
4395             }
4396 #ifdef PERL_ANY_COW
4397             if (!isSwipe) {
4398                 if (!(sflags & SVf_IsCOW)) {
4399                     SvIsCOW_on(sstr);
4400 # ifdef PERL_OLD_COPY_ON_WRITE
4401                     /* Make the source SV into a loop of 1.
4402                        (about to become 2) */
4403                     SV_COW_NEXT_SV_SET(sstr, sstr);
4404 # else
4405                     CowREFCNT(sstr) = 0;
4406 # endif
4407                 }
4408             }
4409 #endif
4410             /* Initial code is common.  */
4411             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4412                 SvPV_free(dstr);
4413             }
4414
4415             if (!isSwipe) {
4416                 /* making another shared SV.  */
4417 #ifdef PERL_ANY_COW
4418                 if (len) {
4419 # ifdef PERL_OLD_COPY_ON_WRITE
4420                     assert (SvTYPE(dstr) >= SVt_PVIV);
4421                     /* SvIsCOW_normal */
4422                     /* splice us in between source and next-after-source.  */
4423                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4424                     SV_COW_NEXT_SV_SET(sstr, dstr);
4425 # else
4426                     CowREFCNT(sstr)++;
4427 # endif
4428                     SvPV_set(dstr, SvPVX_mutable(sstr));
4429                 } else
4430 #endif
4431                 {
4432                     /* SvIsCOW_shared_hash */
4433                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4434                                           "Copy on write: Sharing hash\n"));
4435
4436                     assert (SvTYPE(dstr) >= SVt_PV);
4437                     SvPV_set(dstr,
4438                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4439                 }
4440                 SvLEN_set(dstr, len);
4441                 SvCUR_set(dstr, cur);
4442                 SvIsCOW_on(dstr);
4443             }
4444             else
4445                 {       /* Passes the swipe test.  */
4446                 SvPV_set(dstr, SvPVX_mutable(sstr));
4447                 SvLEN_set(dstr, SvLEN(sstr));
4448                 SvCUR_set(dstr, SvCUR(sstr));
4449
4450                 SvTEMP_off(dstr);
4451                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4452                 SvPV_set(sstr, NULL);
4453                 SvLEN_set(sstr, 0);
4454                 SvCUR_set(sstr, 0);
4455                 SvTEMP_off(sstr);
4456             }
4457         }
4458         if (sflags & SVp_NOK) {
4459             SvNV_set(dstr, SvNVX(sstr));
4460         }
4461         if (sflags & SVp_IOK) {
4462             SvIV_set(dstr, SvIVX(sstr));
4463             /* Must do this otherwise some other overloaded use of 0x80000000
4464                gets confused. I guess SVpbm_VALID */
4465             if (sflags & SVf_IVisUV)
4466                 SvIsUV_on(dstr);
4467         }
4468         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4469         {
4470             const MAGIC * const smg = SvVSTRING_mg(sstr);
4471             if (smg) {
4472                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4473                          smg->mg_ptr, smg->mg_len);
4474                 SvRMAGICAL_on(dstr);
4475             }
4476         }
4477     }
4478     else if (sflags & (SVp_IOK|SVp_NOK)) {
4479         (void)SvOK_off(dstr);
4480         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4481         if (sflags & SVp_IOK) {
4482             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4483             SvIV_set(dstr, SvIVX(sstr));
4484         }
4485         if (sflags & SVp_NOK) {
4486             SvNV_set(dstr, SvNVX(sstr));
4487         }
4488     }
4489     else {
4490         if (isGV_with_GP(sstr)) {
4491             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4492         }
4493         else
4494             (void)SvOK_off(dstr);
4495     }
4496     if (SvTAINTED(sstr))
4497         SvTAINT(dstr);
4498 }
4499
4500 /*
4501 =for apidoc sv_setsv_mg
4502
4503 Like C<sv_setsv>, but also handles 'set' magic.
4504
4505 =cut
4506 */
4507
4508 void
4509 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4510 {
4511     PERL_ARGS_ASSERT_SV_SETSV_MG;
4512
4513     sv_setsv(dstr,sstr);
4514     SvSETMAGIC(dstr);
4515 }
4516
4517 #ifdef PERL_ANY_COW
4518 # ifdef PERL_OLD_COPY_ON_WRITE
4519 #  define SVt_COW SVt_PVIV
4520 # else
4521 #  define SVt_COW SVt_PV
4522 # endif
4523 SV *
4524 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4525 {
4526     STRLEN cur = SvCUR(sstr);
4527     STRLEN len = SvLEN(sstr);
4528     char *new_pv;
4529
4530     PERL_ARGS_ASSERT_SV_SETSV_COW;
4531
4532     if (DEBUG_C_TEST) {
4533         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4534                       (void*)sstr, (void*)dstr);
4535         sv_dump(sstr);
4536         if (dstr)
4537                     sv_dump(dstr);
4538     }
4539
4540     if (dstr) {
4541         if (SvTHINKFIRST(dstr))
4542             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4543         else if (SvPVX_const(dstr))
4544             Safefree(SvPVX_mutable(dstr));
4545     }
4546     else
4547         new_SV(dstr);
4548     SvUPGRADE(dstr, SVt_COW);
4549
4550     assert (SvPOK(sstr));
4551     assert (SvPOKp(sstr));
4552 # ifdef PERL_OLD_COPY_ON_WRITE
4553     assert (!SvIOK(sstr));
4554     assert (!SvIOKp(sstr));
4555     assert (!SvNOK(sstr));
4556     assert (!SvNOKp(sstr));
4557 # endif
4558
4559     if (SvIsCOW(sstr)) {
4560
4561         if (SvLEN(sstr) == 0) {
4562             /* source is a COW shared hash key.  */
4563             DEBUG_C(PerlIO_printf(Perl_debug_log,
4564                                   "Fast copy on write: Sharing hash\n"));
4565             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4566             goto common_exit;
4567         }
4568 # ifdef PERL_OLD_COPY_ON_WRITE
4569         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4570 # else
4571         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4572         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4573 # endif
4574     } else {
4575         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4576         SvUPGRADE(sstr, SVt_COW);
4577         SvIsCOW_on(sstr);
4578         DEBUG_C(PerlIO_printf(Perl_debug_log,
4579                               "Fast copy on write: Converting sstr to COW\n"));
4580 # ifdef PERL_OLD_COPY_ON_WRITE
4581         SV_COW_NEXT_SV_SET(dstr, sstr);
4582 # else
4583         CowREFCNT(sstr) = 0;    
4584 # endif
4585     }
4586 # ifdef PERL_OLD_COPY_ON_WRITE
4587     SV_COW_NEXT_SV_SET(sstr, dstr);
4588 # else
4589     CowREFCNT(sstr)++;  
4590 # endif
4591     new_pv = SvPVX_mutable(sstr);
4592
4593   common_exit:
4594     SvPV_set(dstr, new_pv);
4595     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4596     if (SvUTF8(sstr))
4597         SvUTF8_on(dstr);
4598     SvLEN_set(dstr, len);
4599     SvCUR_set(dstr, cur);
4600     if (DEBUG_C_TEST) {
4601         sv_dump(dstr);
4602     }
4603     return dstr;
4604 }
4605 #endif
4606
4607 /*
4608 =for apidoc sv_setpvn
4609
4610 Copies a string into an SV.  The C<len> parameter indicates the number of
4611 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4612 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4613
4614 =cut
4615 */
4616
4617 void
4618 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4619 {
4620     dVAR;
4621     char *dptr;
4622
4623     PERL_ARGS_ASSERT_SV_SETPVN;
4624
4625     SV_CHECK_THINKFIRST_COW_DROP(sv);
4626     if (!ptr) {
4627         (void)SvOK_off(sv);
4628         return;
4629     }
4630     else {
4631         /* len is STRLEN which is unsigned, need to copy to signed */
4632         const IV iv = len;
4633         if (iv < 0)
4634             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4635                        IVdf, iv);
4636     }
4637     SvUPGRADE(sv, SVt_PV);
4638
4639     dptr = SvGROW(sv, len + 1);
4640     Move(ptr,dptr,len,char);
4641     dptr[len] = '\0';
4642     SvCUR_set(sv, len);
4643     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4644     SvTAINT(sv);
4645     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4646 }
4647
4648 /*
4649 =for apidoc sv_setpvn_mg
4650
4651 Like C<sv_setpvn>, but also handles 'set' magic.
4652
4653 =cut
4654 */
4655
4656 void
4657 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4658 {
4659     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4660
4661     sv_setpvn(sv,ptr,len);
4662     SvSETMAGIC(sv);
4663 }
4664
4665 /*
4666 =for apidoc sv_setpv
4667
4668 Copies a string into an SV.  The string must be null-terminated.  Does not
4669 handle 'set' magic.  See C<sv_setpv_mg>.
4670
4671 =cut
4672 */
4673
4674 void
4675 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4676 {
4677     dVAR;
4678     STRLEN len;
4679
4680     PERL_ARGS_ASSERT_SV_SETPV;
4681
4682     SV_CHECK_THINKFIRST_COW_DROP(sv);
4683     if (!ptr) {
4684         (void)SvOK_off(sv);
4685         return;
4686     }
4687     len = strlen(ptr);
4688     SvUPGRADE(sv, SVt_PV);
4689
4690     SvGROW(sv, len + 1);
4691     Move(ptr,SvPVX(sv),len+1,char);
4692     SvCUR_set(sv, len);
4693     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4694     SvTAINT(sv);
4695     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4696 }
4697
4698 /*
4699 =for apidoc sv_setpv_mg
4700
4701 Like C<sv_setpv>, but also handles 'set' magic.
4702
4703 =cut
4704 */
4705
4706 void
4707 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4708 {
4709     PERL_ARGS_ASSERT_SV_SETPV_MG;
4710
4711     sv_setpv(sv,ptr);
4712     SvSETMAGIC(sv);
4713 }
4714
4715 void
4716 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4717 {
4718     dVAR;
4719
4720     PERL_ARGS_ASSERT_SV_SETHEK;
4721
4722     if (!hek) {
4723         return;
4724     }
4725
4726     if (HEK_LEN(hek) == HEf_SVKEY) {
4727         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4728         return;
4729     } else {
4730         const int flags = HEK_FLAGS(hek);
4731         if (flags & HVhek_WASUTF8) {
4732             STRLEN utf8_len = HEK_LEN(hek);
4733             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4734             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4735             SvUTF8_on(sv);
4736             return;
4737         } else if (flags & HVhek_UNSHARED) {
4738             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4739             if (HEK_UTF8(hek))
4740                 SvUTF8_on(sv);
4741             else SvUTF8_off(sv);
4742             return;
4743         }
4744         {
4745             SV_CHECK_THINKFIRST_COW_DROP(sv);
4746             SvUPGRADE(sv, SVt_PV);
4747             SvPV_free(sv);
4748             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4749             SvCUR_set(sv, HEK_LEN(hek));
4750             SvLEN_set(sv, 0);
4751             SvIsCOW_on(sv);
4752             SvPOK_on(sv);
4753             if (HEK_UTF8(hek))
4754                 SvUTF8_on(sv);
4755             else SvUTF8_off(sv);
4756             return;
4757         }
4758     }
4759 }
4760
4761
4762 /*
4763 =for apidoc sv_usepvn_flags
4764
4765 Tells an SV to use C<ptr> to find its string value.  Normally the
4766 string is stored inside the SV but sv_usepvn allows the SV to use an
4767 outside string.  The C<ptr> should point to memory that was allocated
4768 by C<malloc>.  It must be the start of a mallocked block
4769 of memory, and not a pointer to the middle of it.  The
4770 string length, C<len>, must be supplied.  By default
4771 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4772 so that pointer should not be freed or used by the programmer after
4773 giving it to sv_usepvn, and neither should any pointers from "behind"
4774 that pointer (e.g. ptr + 1) be used.
4775
4776 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4777 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4778 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4779 C<len>, and already meets the requirements for storing in C<SvPVX>).
4780
4781 =cut
4782 */
4783
4784 void
4785 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4786 {
4787     dVAR;
4788     STRLEN allocate;
4789
4790     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4791
4792     SV_CHECK_THINKFIRST_COW_DROP(sv);
4793     SvUPGRADE(sv, SVt_PV);
4794     if (!ptr) {
4795         (void)SvOK_off(sv);
4796         if (flags & SV_SMAGIC)
4797             SvSETMAGIC(sv);
4798         return;
4799     }
4800     if (SvPVX_const(sv))
4801         SvPV_free(sv);
4802
4803 #ifdef DEBUGGING
4804     if (flags & SV_HAS_TRAILING_NUL)
4805         assert(ptr[len] == '\0');
4806 #endif
4807
4808     allocate = (flags & SV_HAS_TRAILING_NUL)
4809         ? len + 1 :
4810 #ifdef Perl_safesysmalloc_size
4811         len + 1;
4812 #else 
4813         PERL_STRLEN_ROUNDUP(len + 1);
4814 #endif
4815     if (flags & SV_HAS_TRAILING_NUL) {
4816         /* It's long enough - do nothing.
4817            Specifically Perl_newCONSTSUB is relying on this.  */
4818     } else {
4819 #ifdef DEBUGGING
4820         /* Force a move to shake out bugs in callers.  */
4821         char *new_ptr = (char*)safemalloc(allocate);
4822         Copy(ptr, new_ptr, len, char);
4823         PoisonFree(ptr,len,char);
4824         Safefree(ptr);
4825         ptr = new_ptr;
4826 #else
4827         ptr = (char*) saferealloc (ptr, allocate);
4828 #endif
4829     }
4830 #ifdef Perl_safesysmalloc_size
4831     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4832 #else
4833     SvLEN_set(sv, allocate);
4834 #endif
4835     SvCUR_set(sv, len);
4836     SvPV_set(sv, ptr);
4837     if (!(flags & SV_HAS_TRAILING_NUL)) {
4838         ptr[len] = '\0';
4839     }
4840     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4841     SvTAINT(sv);
4842     if (flags & SV_SMAGIC)
4843         SvSETMAGIC(sv);
4844 }
4845
4846 #ifdef PERL_OLD_COPY_ON_WRITE
4847 /* Need to do this *after* making the SV normal, as we need the buffer
4848    pointer to remain valid until after we've copied it.  If we let go too early,
4849    another thread could invalidate it by unsharing last of the same hash key
4850    (which it can do by means other than releasing copy-on-write Svs)
4851    or by changing the other copy-on-write SVs in the loop.  */
4852 STATIC void
4853 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4854 {
4855     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4856
4857     { /* this SV was SvIsCOW_normal(sv) */
4858          /* we need to find the SV pointing to us.  */
4859         SV *current = SV_COW_NEXT_SV(after);
4860
4861         if (current == sv) {
4862             /* The SV we point to points back to us (there were only two of us
4863                in the loop.)
4864                Hence other SV is no longer copy on write either.  */
4865             SvIsCOW_off(after);
4866         } else {
4867             /* We need to follow the pointers around the loop.  */
4868             SV *next;
4869             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4870                 assert (next);
4871                 current = next;
4872                  /* don't loop forever if the structure is bust, and we have
4873                     a pointer into a closed loop.  */
4874                 assert (current != after);
4875                 assert (SvPVX_const(current) == pvx);
4876             }
4877             /* Make the SV before us point to the SV after us.  */
4878             SV_COW_NEXT_SV_SET(current, after);
4879         }
4880     }
4881 }
4882 #endif
4883 /*
4884 =for apidoc sv_force_normal_flags
4885
4886 Undo various types of fakery on an SV, where fakery means
4887 "more than" a string: if the PV is a shared string, make
4888 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4889 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4890 we do the copy, and is also used locally; if this is a
4891 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4892 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4893 SvPOK_off rather than making a copy.  (Used where this
4894 scalar is about to be set to some other value.)  In addition,
4895 the C<flags> parameter gets passed to C<sv_unref_flags()>
4896 when unreffing.  C<sv_force_normal> calls this function
4897 with flags set to 0.
4898
4899 =cut
4900 */
4901
4902 static void
4903 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
4904 {
4905     dVAR;
4906
4907     assert(SvIsCOW(sv));
4908     {
4909 #ifdef PERL_ANY_COW
4910         const char * const pvx = SvPVX_const(sv);
4911         const STRLEN len = SvLEN(sv);
4912         const STRLEN cur = SvCUR(sv);
4913 # ifdef PERL_OLD_COPY_ON_WRITE
4914         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4915            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4916            we'll fail an assertion.  */
4917         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4918 # endif
4919
4920         if (DEBUG_C_TEST) {
4921                 PerlIO_printf(Perl_debug_log,
4922                               "Copy on write: Force normal %ld\n",
4923                               (long) flags);
4924                 sv_dump(sv);
4925         }
4926         SvIsCOW_off(sv);
4927 # ifdef PERL_NEW_COPY_ON_WRITE
4928         if (len && CowREFCNT(sv) == 0)
4929             /* We own the buffer ourselves. */
4930             NOOP;
4931         else
4932 # endif
4933         {
4934                 
4935             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4936 # ifdef PERL_NEW_COPY_ON_WRITE
4937             /* Must do this first, since the macro uses SvPVX. */
4938             if (len) CowREFCNT(sv)--;
4939 # endif
4940             SvPV_set(sv, NULL);
4941             SvLEN_set(sv, 0);
4942             if (flags & SV_COW_DROP_PV) {
4943                 /* OK, so we don't need to copy our buffer.  */
4944                 SvPOK_off(sv);
4945             } else {
4946                 SvGROW(sv, cur + 1);
4947                 Move(pvx,SvPVX(sv),cur,char);
4948                 SvCUR_set(sv, cur);
4949                 *SvEND(sv) = '\0';
4950             }
4951             if (len) {
4952 # ifdef PERL_OLD_COPY_ON_WRITE
4953                 sv_release_COW(sv, pvx, next);
4954 # endif
4955             } else {
4956                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4957             }
4958             if (DEBUG_C_TEST) {
4959                 sv_dump(sv);
4960             }
4961         }
4962 #else
4963             const char * const pvx = SvPVX_const(sv);
4964             const STRLEN len = SvCUR(sv);
4965             SvIsCOW_off(sv);
4966             SvPV_set(sv, NULL);
4967             SvLEN_set(sv, 0);
4968             if (flags & SV_COW_DROP_PV) {
4969                 /* OK, so we don't need to copy our buffer.  */
4970                 SvPOK_off(sv);
4971             } else {
4972                 SvGROW(sv, len + 1);
4973                 Move(pvx,SvPVX(sv),len,char);
4974                 *SvEND(sv) = '\0';
4975             }
4976             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4977 #endif
4978     }
4979 }
4980
4981 void
4982 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4983 {
4984     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4985
4986     if (SvREADONLY(sv))
4987         Perl_croak_no_modify();
4988     else if (SvIsCOW(sv))
4989         S_sv_uncow(aTHX_ sv, flags);
4990     if (SvROK(sv))
4991         sv_unref_flags(sv, flags);
4992     else if (SvFAKE(sv) && isGV_with_GP(sv))
4993         sv_unglob(sv, flags);
4994     else if (SvFAKE(sv) && isREGEXP(sv)) {
4995         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4996            to sv_unglob. We only need it here, so inline it.  */
4997         const bool islv = SvTYPE(sv) == SVt_PVLV;
4998         const svtype new_type =
4999           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5000         SV *const temp = newSV_type(new_type);
5001         regexp *const temp_p = ReANY((REGEXP *)sv);
5002
5003         if (new_type == SVt_PVMG) {
5004             SvMAGIC_set(temp, SvMAGIC(sv));
5005             SvMAGIC_set(sv, NULL);
5006             SvSTASH_set(temp, SvSTASH(sv));
5007             SvSTASH_set(sv, NULL);
5008         }
5009         if (!islv) SvCUR_set(temp, SvCUR(sv));
5010         /* Remember that SvPVX is in the head, not the body.  But
5011            RX_WRAPPED is in the body. */
5012         assert(ReANY((REGEXP *)sv)->mother_re);
5013         /* Their buffer is already owned by someone else. */
5014         if (flags & SV_COW_DROP_PV) {
5015             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5016                zeroed body.  For SVt_PVLV, it should have been set to 0
5017                before turning into a regexp. */
5018             assert(!SvLEN(islv ? sv : temp));
5019             sv->sv_u.svu_pv = 0;
5020         }
5021         else {
5022             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5023             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5024             SvPOK_on(sv);
5025         }
5026
5027         /* Now swap the rest of the bodies. */
5028
5029         SvFAKE_off(sv);
5030         if (!islv) {
5031             SvFLAGS(sv) &= ~SVTYPEMASK;
5032             SvFLAGS(sv) |= new_type;
5033             SvANY(sv) = SvANY(temp);
5034         }
5035
5036         SvFLAGS(temp) &= ~(SVTYPEMASK);
5037         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5038         SvANY(temp) = temp_p;
5039         temp->sv_u.svu_rx = (regexp *)temp_p;
5040
5041         SvREFCNT_dec_NN(temp);
5042     }
5043     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5044 }
5045
5046 /*
5047 =for apidoc sv_chop
5048
5049 Efficient removal of characters from the beginning of the string buffer.
5050 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5051 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5052 character of the adjusted string.  Uses the "OOK hack".  On return, only
5053 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5054
5055 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5056 refer to the same chunk of data.
5057
5058 The unfortunate similarity of this function's name to that of Perl's C<chop>
5059 operator is strictly coincidental.  This function works from the left;
5060 C<chop> works from the right.
5061
5062 =cut
5063 */
5064
5065 void
5066 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5067 {
5068     STRLEN delta;
5069     STRLEN old_delta;
5070     U8 *p;
5071 #ifdef DEBUGGING
5072     const U8 *evacp;
5073     STRLEN evacn;
5074 #endif
5075     STRLEN max_delta;
5076
5077     PERL_ARGS_ASSERT_SV_CHOP;
5078
5079     if (!ptr || !SvPOKp(sv))
5080         return;
5081     delta = ptr - SvPVX_const(sv);
5082     if (!delta) {
5083         /* Nothing to do.  */
5084         return;
5085     }
5086     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5087     if (delta > max_delta)
5088         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5089                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5090     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5091     SV_CHECK_THINKFIRST(sv);
5092     SvPOK_only_UTF8(sv);
5093
5094     if (!SvOOK(sv)) {
5095         if (!SvLEN(sv)) { /* make copy of shared string */
5096             const char *pvx = SvPVX_const(sv);
5097             const STRLEN len = SvCUR(sv);
5098             SvGROW(sv, len + 1);
5099             Move(pvx,SvPVX(sv),len,char);
5100             *SvEND(sv) = '\0';
5101         }
5102         SvOOK_on(sv);
5103         old_delta = 0;
5104     } else {
5105         SvOOK_offset(sv, old_delta);
5106     }
5107     SvLEN_set(sv, SvLEN(sv) - delta);
5108     SvCUR_set(sv, SvCUR(sv) - delta);
5109     SvPV_set(sv, SvPVX(sv) + delta);
5110
5111     p = (U8 *)SvPVX_const(sv);
5112
5113 #ifdef DEBUGGING
5114     /* how many bytes were evacuated?  we will fill them with sentinel
5115        bytes, except for the part holding the new offset of course. */
5116     evacn = delta;
5117     if (old_delta)
5118         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5119     assert(evacn);
5120     assert(evacn <= delta + old_delta);
5121     evacp = p - evacn;
5122 #endif
5123
5124     /* This sets 'delta' to the accumulated value of all deltas so far */
5125     delta += old_delta;
5126     assert(delta);
5127
5128     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5129      * the string; otherwise store a 0 byte there and store 'delta' just prior
5130      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5131      * portion of the chopped part of the string */
5132     if (delta < 0x100) {
5133         *--p = (U8) delta;
5134     } else {
5135         *--p = 0;
5136         p -= sizeof(STRLEN);
5137         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5138     }
5139
5140 #ifdef DEBUGGING
5141     /* Fill the preceding buffer with sentinals to verify that no-one is
5142        using it.  */
5143     while (p > evacp) {
5144         --p;
5145         *p = (U8)PTR2UV(p);
5146     }
5147 #endif
5148 }
5149
5150 /*
5151 =for apidoc sv_catpvn
5152
5153 Concatenates the string onto the end of the string which is in the SV.  The
5154 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5155 status set, then the bytes appended should be valid UTF-8.
5156 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5157
5158 =for apidoc sv_catpvn_flags
5159
5160 Concatenates the string onto the end of the string which is in the SV.  The
5161 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5162 status set, then the bytes appended should be valid UTF-8.
5163 If C<flags> has the C<SV_SMAGIC> bit set, will
5164 C<mg_set> on C<dsv> afterwards if appropriate.
5165 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5166 in terms of this function.
5167
5168 =cut
5169 */
5170
5171 void
5172 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5173 {
5174     dVAR;
5175     STRLEN dlen;
5176     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5177
5178     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5179     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5180
5181     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5182       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5183          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5184          dlen = SvCUR(dsv);
5185       }
5186       else SvGROW(dsv, dlen + slen + 1);
5187       if (sstr == dstr)
5188         sstr = SvPVX_const(dsv);
5189       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5190       SvCUR_set(dsv, SvCUR(dsv) + slen);
5191     }
5192     else {
5193         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5194         const char * const send = sstr + slen;
5195         U8 *d;
5196
5197         /* Something this code does not account for, which I think is
5198            impossible; it would require the same pv to be treated as
5199            bytes *and* utf8, which would indicate a bug elsewhere. */
5200         assert(sstr != dstr);
5201
5202         SvGROW(dsv, dlen + slen * 2 + 1);
5203         d = (U8 *)SvPVX(dsv) + dlen;
5204
5205         while (sstr < send) {
5206             append_utf8_from_native_byte(*sstr, &d);
5207             sstr++;
5208         }
5209         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5210     }
5211     *SvEND(dsv) = '\0';
5212     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5213     SvTAINT(dsv);
5214     if (flags & SV_SMAGIC)
5215         SvSETMAGIC(dsv);
5216 }
5217
5218 /*
5219 =for apidoc sv_catsv
5220
5221 Concatenates the string from SV C<ssv> onto the end of the string in SV
5222 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5223 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5224 C<sv_catsv_nomg>.
5225
5226 =for apidoc sv_catsv_flags
5227
5228 Concatenates the string from SV C<ssv> onto the end of the string in SV
5229 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5230 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5231 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5232 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5233 and C<sv_catsv_mg> are implemented in terms of this function.
5234
5235 =cut */
5236
5237 void
5238 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5239 {
5240     dVAR;
5241  
5242     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5243
5244     if (ssv) {
5245         STRLEN slen;
5246         const char *spv = SvPV_flags_const(ssv, slen, flags);
5247         if (spv) {
5248             if (flags & SV_GMAGIC)
5249                 SvGETMAGIC(dsv);
5250             sv_catpvn_flags(dsv, spv, slen,
5251                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5252             if (flags & SV_SMAGIC)
5253                 SvSETMAGIC(dsv);
5254         }
5255     }
5256 }
5257
5258 /*
5259 =for apidoc sv_catpv
5260
5261 Concatenates the string onto the end of the string which is in the SV.
5262 If the SV has the UTF-8 status set, then the bytes appended should be
5263 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5264
5265 =cut */
5266
5267 void
5268 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5269 {
5270     dVAR;
5271     STRLEN len;
5272     STRLEN tlen;
5273     char *junk;
5274
5275     PERL_ARGS_ASSERT_SV_CATPV;
5276
5277     if (!ptr)
5278         return;
5279     junk = SvPV_force(sv, tlen);
5280     len = strlen(ptr);
5281     SvGROW(sv, tlen + len + 1);
5282     if (ptr == junk)
5283         ptr = SvPVX_const(sv);
5284     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5285     SvCUR_set(sv, SvCUR(sv) + len);
5286     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5287     SvTAINT(sv);
5288 }
5289
5290 /*
5291 =for apidoc sv_catpv_flags
5292
5293 Concatenates the string onto the end of the string which is in the SV.
5294 If the SV has the UTF-8 status set, then the bytes appended should
5295 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5296 on the modified SV if appropriate.
5297
5298 =cut
5299 */
5300
5301 void
5302 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5303 {
5304     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5305     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5306 }
5307
5308 /*
5309 =for apidoc sv_catpv_mg
5310
5311 Like C<sv_catpv>, but also handles 'set' magic.
5312
5313 =cut
5314 */
5315
5316 void
5317 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5318 {
5319     PERL_ARGS_ASSERT_SV_CATPV_MG;
5320
5321     sv_catpv(sv,ptr);
5322     SvSETMAGIC(sv);
5323 }
5324
5325 /*
5326 =for apidoc newSV
5327
5328 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5329 bytes of preallocated string space the SV should have.  An extra byte for a
5330 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5331 space is allocated.)  The reference count for the new SV is set to 1.
5332
5333 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5334 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5335 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5336 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5337 modules supporting older perls.
5338
5339 =cut
5340 */
5341
5342 SV *
5343 Perl_newSV(pTHX_ const STRLEN len)
5344 {
5345     dVAR;
5346     SV *sv;
5347
5348     new_SV(sv);
5349     if (len) {
5350         sv_upgrade(sv, SVt_PV);
5351         SvGROW(sv, len + 1);
5352     }
5353     return sv;
5354 }
5355 /*
5356 =for apidoc sv_magicext
5357
5358 Adds magic to an SV, upgrading it if necessary.  Applies the
5359 supplied vtable and returns a pointer to the magic added.
5360
5361 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5362 In particular, you can add magic to SvREADONLY SVs, and add more than
5363 one instance of the same 'how'.
5364
5365 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5366 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5367 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5368 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5369
5370 (This is now used as a subroutine by C<sv_magic>.)
5371
5372 =cut
5373 */
5374 MAGIC * 
5375 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5376                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5377 {
5378     dVAR;
5379     MAGIC* mg;
5380
5381     PERL_ARGS_ASSERT_SV_MAGICEXT;
5382
5383     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5384
5385     SvUPGRADE(sv, SVt_PVMG);
5386     Newxz(mg, 1, MAGIC);
5387     mg->mg_moremagic = SvMAGIC(sv);
5388     SvMAGIC_set(sv, mg);
5389
5390     /* Sometimes a magic contains a reference loop, where the sv and
5391        object refer to each other.  To prevent a reference loop that
5392        would prevent such objects being freed, we look for such loops
5393        and if we find one we avoid incrementing the object refcount.
5394
5395        Note we cannot do this to avoid self-tie loops as intervening RV must
5396        have its REFCNT incremented to keep it in existence.
5397
5398     */
5399     if (!obj || obj == sv ||
5400         how == PERL_MAGIC_arylen ||
5401         how == PERL_MAGIC_symtab ||
5402         (SvTYPE(obj) == SVt_PVGV &&
5403             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5404              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5405              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5406     {
5407         mg->mg_obj = obj;
5408     }
5409     else {
5410         mg->mg_obj = SvREFCNT_inc_simple(obj);
5411         mg->mg_flags |= MGf_REFCOUNTED;
5412     }
5413
5414     /* Normal self-ties simply pass a null object, and instead of
5415        using mg_obj directly, use the SvTIED_obj macro to produce a
5416        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5417        with an RV obj pointing to the glob containing the PVIO.  In
5418        this case, to avoid a reference loop, we need to weaken the
5419        reference.
5420     */
5421
5422     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5423         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5424     {
5425       sv_rvweaken(obj);
5426     }
5427
5428     mg->mg_type = how;
5429     mg->mg_len = namlen;
5430     if (name) {
5431         if (namlen > 0)
5432             mg->mg_ptr = savepvn(name, namlen);
5433         else if (namlen == HEf_SVKEY) {
5434             /* Yes, this is casting away const. This is only for the case of
5435                HEf_SVKEY. I think we need to document this aberation of the
5436                constness of the API, rather than making name non-const, as
5437                that change propagating outwards a long way.  */
5438             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5439         } else
5440             mg->mg_ptr = (char *) name;
5441     }
5442     mg->mg_virtual = (MGVTBL *) vtable;
5443
5444     mg_magical(sv);
5445     return mg;
5446 }
5447
5448 MAGIC *
5449 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5450 {
5451     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5452     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5453         /* This sv is only a delegate.  //g magic must be attached to
5454            its target. */
5455         vivify_defelem(sv);
5456         sv = LvTARG(sv);
5457     }
5458 #ifdef PERL_OLD_COPY_ON_WRITE
5459     if (SvIsCOW(sv))
5460         sv_force_normal_flags(sv, 0);
5461 #endif
5462     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5463                        &PL_vtbl_mglob, 0, 0);
5464 }
5465
5466 /*
5467 =for apidoc sv_magic
5468
5469 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5470 necessary, then adds a new magic item of type C<how> to the head of the
5471 magic list.
5472
5473 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5474 handling of the C<name> and C<namlen> arguments.
5475
5476 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5477 to add more than one instance of the same 'how'.
5478
5479 =cut
5480 */
5481
5482 void
5483 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5484              const char *const name, const I32 namlen)
5485 {
5486     dVAR;
5487     const MGVTBL *vtable;
5488     MAGIC* mg;
5489     unsigned int flags;
5490     unsigned int vtable_index;
5491
5492     PERL_ARGS_ASSERT_SV_MAGIC;
5493
5494     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5495         || ((flags = PL_magic_data[how]),
5496             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5497             > magic_vtable_max))
5498         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5499
5500     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5501        Useful for attaching extension internal data to perl vars.
5502        Note that multiple extensions may clash if magical scalars
5503        etc holding private data from one are passed to another. */
5504
5505     vtable = (vtable_index == magic_vtable_max)
5506         ? NULL : PL_magic_vtables + vtable_index;
5507
5508 #ifdef PERL_OLD_COPY_ON_WRITE
5509     if (SvIsCOW(sv))
5510         sv_force_normal_flags(sv, 0);
5511 #endif
5512     if (SvREADONLY(sv)) {
5513         if (
5514             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5515            )
5516         {
5517             Perl_croak_no_modify();
5518         }
5519     }
5520     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5521         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5522             /* sv_magic() refuses to add a magic of the same 'how' as an
5523                existing one
5524              */
5525             if (how == PERL_MAGIC_taint)
5526                 mg->mg_len |= 1;
5527             return;
5528         }
5529     }
5530
5531     /* Force pos to be stored as characters, not bytes. */
5532     if (SvMAGICAL(sv) && DO_UTF8(sv)
5533       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5534       && mg->mg_len != -1
5535       && mg->mg_flags & MGf_BYTES) {
5536         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5537                                                SV_CONST_RETURN);
5538         mg->mg_flags &= ~MGf_BYTES;
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 (SvMAGICAL(tsv))
5706             mg = mg_find(tsv, PERL_MAGIC_backref);
5707         if (!mg)
5708             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5709         svp = &(mg->mg_obj);
5710     }
5711
5712     /* create or retrieve the array */
5713
5714     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5715         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5716     ) {
5717         /* create array */
5718         if (mg)
5719             mg->mg_flags |= MGf_REFCOUNTED;
5720         av = newAV();
5721         AvREAL_off(av);
5722         SvREFCNT_inc_simple_void_NN(av);
5723         /* av now has a refcnt of 2; see discussion above */
5724         av_extend(av, *svp ? 2 : 1);
5725         if (*svp) {
5726             /* move single existing backref to the array */
5727             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5728         }
5729         *svp = (SV*)av;
5730     }
5731     else {
5732         av = MUTABLE_AV(*svp);
5733         if (!av) {
5734             /* optimisation: store single backref directly in HvAUX or mg_obj */
5735             *svp = sv;
5736             return;
5737         }
5738         assert(SvTYPE(av) == SVt_PVAV);
5739         if (AvFILLp(av) >= AvMAX(av)) {
5740             av_extend(av, AvFILLp(av)+1);
5741         }
5742     }
5743     /* push new backref */
5744     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5745 }
5746
5747 /* delete a back-reference to ourselves from the backref magic associated
5748  * with the SV we point to.
5749  */
5750
5751 void
5752 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5753 {
5754     dVAR;
5755     SV **svp = NULL;
5756
5757     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5758
5759     if (SvTYPE(tsv) == SVt_PVHV) {
5760         if (SvOOK(tsv))
5761             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5762     }
5763     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5764         /* It's possible for the the last (strong) reference to tsv to have
5765            become freed *before* the last thing holding a weak reference.
5766            If both survive longer than the backreferences array, then when
5767            the referent's reference count drops to 0 and it is freed, it's
5768            not able to chase the backreferences, so they aren't NULLed.
5769
5770            For example, a CV holds a weak reference to its stash. If both the
5771            CV and the stash survive longer than the backreferences array,
5772            and the CV gets picked for the SvBREAK() treatment first,
5773            *and* it turns out that the stash is only being kept alive because
5774            of an our variable in the pad of the CV, then midway during CV
5775            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5776            It ends up pointing to the freed HV. Hence it's chased in here, and
5777            if this block wasn't here, it would hit the !svp panic just below.
5778
5779            I don't believe that "better" destruction ordering is going to help
5780            here - during global destruction there's always going to be the
5781            chance that something goes out of order. We've tried to make it
5782            foolproof before, and it only resulted in evolutionary pressure on
5783            fools. Which made us look foolish for our hubris. :-(
5784         */
5785         return;
5786     }
5787     else {
5788         MAGIC *const mg
5789             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5790         svp =  mg ? &(mg->mg_obj) : NULL;
5791     }
5792
5793     if (!svp)
5794         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5795     if (!*svp) {
5796         /* It's possible that sv is being freed recursively part way through the
5797            freeing of tsv. If this happens, the backreferences array of tsv has
5798            already been freed, and so svp will be NULL. If this is the case,
5799            we should not panic. Instead, nothing needs doing, so return.  */
5800         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5801             return;
5802         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5803                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5804     }
5805
5806     if (SvTYPE(*svp) == SVt_PVAV) {
5807 #ifdef DEBUGGING
5808         int count = 1;
5809 #endif
5810         AV * const av = (AV*)*svp;
5811         SSize_t fill;
5812         assert(!SvIS_FREED(av));
5813         fill = AvFILLp(av);
5814         assert(fill > -1);
5815         svp = AvARRAY(av);
5816         /* for an SV with N weak references to it, if all those
5817          * weak refs are deleted, then sv_del_backref will be called
5818          * N times and O(N^2) compares will be done within the backref
5819          * array. To ameliorate this potential slowness, we:
5820          * 1) make sure this code is as tight as possible;
5821          * 2) when looking for SV, look for it at both the head and tail of the
5822          *    array first before searching the rest, since some create/destroy
5823          *    patterns will cause the backrefs to be freed in order.
5824          */
5825         if (*svp == sv) {
5826             AvARRAY(av)++;
5827             AvMAX(av)--;
5828         }
5829         else {
5830             SV **p = &svp[fill];
5831             SV *const topsv = *p;
5832             if (topsv != sv) {
5833 #ifdef DEBUGGING
5834                 count = 0;
5835 #endif
5836                 while (--p > svp) {
5837                     if (*p == sv) {
5838                         /* We weren't the last entry.
5839                            An unordered list has this property that you
5840                            can take the last element off the end to fill
5841                            the hole, and it's still an unordered list :-)
5842                         */
5843                         *p = topsv;
5844 #ifdef DEBUGGING
5845                         count++;
5846 #else
5847                         break; /* should only be one */
5848 #endif
5849                     }
5850                 }
5851             }
5852         }
5853         assert(count ==1);
5854         AvFILLp(av) = fill-1;
5855     }
5856     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5857         /* freed AV; skip */
5858     }
5859     else {
5860         /* optimisation: only a single backref, stored directly */
5861         if (*svp != sv)
5862             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5863         *svp = NULL;
5864     }
5865
5866 }
5867
5868 void
5869 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5870 {
5871     SV **svp;
5872     SV **last;
5873     bool is_array;
5874
5875     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5876
5877     if (!av)
5878         return;
5879
5880     /* after multiple passes through Perl_sv_clean_all() for a thingy
5881      * that has badly leaked, the backref array may have gotten freed,
5882      * since we only protect it against 1 round of cleanup */
5883     if (SvIS_FREED(av)) {
5884         if (PL_in_clean_all) /* All is fair */
5885             return;
5886         Perl_croak(aTHX_
5887                    "panic: magic_killbackrefs (freed backref AV/SV)");
5888     }
5889
5890
5891     is_array = (SvTYPE(av) == SVt_PVAV);
5892     if (is_array) {
5893         assert(!SvIS_FREED(av));
5894         svp = AvARRAY(av);
5895         if (svp)
5896             last = svp + AvFILLp(av);
5897     }
5898     else {
5899         /* optimisation: only a single backref, stored directly */
5900         svp = (SV**)&av;
5901         last = svp;
5902     }
5903
5904     if (svp) {
5905         while (svp <= last) {
5906             if (*svp) {
5907                 SV *const referrer = *svp;
5908                 if (SvWEAKREF(referrer)) {
5909                     /* XXX Should we check that it hasn't changed? */
5910                     assert(SvROK(referrer));
5911                     SvRV_set(referrer, 0);
5912                     SvOK_off(referrer);
5913                     SvWEAKREF_off(referrer);
5914                     SvSETMAGIC(referrer);
5915                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5916                            SvTYPE(referrer) == SVt_PVLV) {
5917                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5918                     /* You lookin' at me?  */
5919                     assert(GvSTASH(referrer));
5920                     assert(GvSTASH(referrer) == (const HV *)sv);
5921                     GvSTASH(referrer) = 0;
5922                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5923                            SvTYPE(referrer) == SVt_PVFM) {
5924                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5925                         /* You lookin' at me?  */
5926                         assert(CvSTASH(referrer));
5927                         assert(CvSTASH(referrer) == (const HV *)sv);
5928                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5929                     }
5930                     else {
5931                         assert(SvTYPE(sv) == SVt_PVGV);
5932                         /* You lookin' at me?  */
5933                         assert(CvGV(referrer));
5934                         assert(CvGV(referrer) == (const GV *)sv);
5935                         anonymise_cv_maybe(MUTABLE_GV(sv),
5936                                                 MUTABLE_CV(referrer));
5937                     }
5938
5939                 } else {
5940                     Perl_croak(aTHX_
5941                                "panic: magic_killbackrefs (flags=%"UVxf")",
5942                                (UV)SvFLAGS(referrer));
5943                 }
5944
5945                 if (is_array)
5946                     *svp = NULL;
5947             }
5948             svp++;
5949         }
5950     }
5951     if (is_array) {
5952         AvFILLp(av) = -1;
5953         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5954     }
5955     return;
5956 }
5957
5958 /*
5959 =for apidoc sv_insert
5960
5961 Inserts a string at the specified offset/length within the SV.  Similar to
5962 the Perl substr() function.  Handles get magic.
5963
5964 =for apidoc sv_insert_flags
5965
5966 Same as C<sv_insert>, but the extra C<flags> are passed to the
5967 C<SvPV_force_flags> that applies to C<bigstr>.
5968
5969 =cut
5970 */
5971
5972 void
5973 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5974 {
5975     dVAR;
5976     char *big;
5977     char *mid;
5978     char *midend;
5979     char *bigend;
5980     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5981     STRLEN curlen;
5982
5983     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5984
5985     if (!bigstr)
5986         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5987     SvPV_force_flags(bigstr, curlen, flags);
5988     (void)SvPOK_only_UTF8(bigstr);
5989     if (offset + len > curlen) {
5990         SvGROW(bigstr, offset+len+1);
5991         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5992         SvCUR_set(bigstr, offset+len);
5993     }
5994
5995     SvTAINT(bigstr);
5996     i = littlelen - len;
5997     if (i > 0) {                        /* string might grow */
5998         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5999         mid = big + offset + len;
6000         midend = bigend = big + SvCUR(bigstr);
6001         bigend += i;
6002         *bigend = '\0';
6003         while (midend > mid)            /* shove everything down */
6004             *--bigend = *--midend;
6005         Move(little,big+offset,littlelen,char);
6006         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6007         SvSETMAGIC(bigstr);
6008         return;
6009     }
6010     else if (i == 0) {
6011         Move(little,SvPVX(bigstr)+offset,len,char);
6012         SvSETMAGIC(bigstr);
6013         return;
6014     }
6015
6016     big = SvPVX(bigstr);
6017     mid = big + offset;
6018     midend = mid + len;
6019     bigend = big + SvCUR(bigstr);
6020
6021     if (midend > bigend)
6022         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6023                    midend, bigend);
6024
6025     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6026         if (littlelen) {
6027             Move(little, mid, littlelen,char);
6028             mid += littlelen;
6029         }
6030         i = bigend - midend;
6031         if (i > 0) {
6032             Move(midend, mid, i,char);
6033             mid += i;
6034         }
6035         *mid = '\0';
6036         SvCUR_set(bigstr, mid - big);
6037     }
6038     else if ((i = mid - big)) { /* faster from front */
6039         midend -= littlelen;
6040         mid = midend;
6041         Move(big, midend - i, i, char);
6042         sv_chop(bigstr,midend-i);
6043         if (littlelen)
6044             Move(little, mid, littlelen,char);
6045     }
6046     else if (littlelen) {
6047         midend -= littlelen;
6048         sv_chop(bigstr,midend);
6049         Move(little,midend,littlelen,char);
6050     }
6051     else {
6052         sv_chop(bigstr,midend);
6053     }
6054     SvSETMAGIC(bigstr);
6055 }
6056
6057 /*
6058 =for apidoc sv_replace
6059
6060 Make the first argument a copy of the second, then delete the original.
6061 The target SV physically takes over ownership of the body of the source SV
6062 and inherits its flags; however, the target keeps any magic it owns,
6063 and any magic in the source is discarded.
6064 Note that this is a rather specialist SV copying operation; most of the
6065 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6066
6067 =cut
6068 */
6069
6070 void
6071 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6072 {
6073     dVAR;
6074     const U32 refcnt = SvREFCNT(sv);
6075
6076     PERL_ARGS_ASSERT_SV_REPLACE;
6077
6078     SV_CHECK_THINKFIRST_COW_DROP(sv);
6079     if (SvREFCNT(nsv) != 1) {
6080         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6081                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6082     }
6083     if (SvMAGICAL(sv)) {
6084         if (SvMAGICAL(nsv))
6085             mg_free(nsv);
6086         else
6087             sv_upgrade(nsv, SVt_PVMG);
6088         SvMAGIC_set(nsv, SvMAGIC(sv));
6089         SvFLAGS(nsv) |= SvMAGICAL(sv);
6090         SvMAGICAL_off(sv);
6091         SvMAGIC_set(sv, NULL);
6092     }
6093     SvREFCNT(sv) = 0;
6094     sv_clear(sv);
6095     assert(!SvREFCNT(sv));
6096 #ifdef DEBUG_LEAKING_SCALARS
6097     sv->sv_flags  = nsv->sv_flags;
6098     sv->sv_any    = nsv->sv_any;
6099     sv->sv_refcnt = nsv->sv_refcnt;
6100     sv->sv_u      = nsv->sv_u;
6101 #else
6102     StructCopy(nsv,sv,SV);
6103 #endif
6104     if(SvTYPE(sv) == SVt_IV) {
6105         SvANY(sv)
6106             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6107     }
6108         
6109
6110 #ifdef PERL_OLD_COPY_ON_WRITE
6111     if (SvIsCOW_normal(nsv)) {
6112         /* We need to follow the pointers around the loop to make the
6113            previous SV point to sv, rather than nsv.  */
6114         SV *next;
6115         SV *current = nsv;
6116         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6117             assert(next);
6118             current = next;
6119             assert(SvPVX_const(current) == SvPVX_const(nsv));
6120         }
6121         /* Make the SV before us point to the SV after us.  */
6122         if (DEBUG_C_TEST) {
6123             PerlIO_printf(Perl_debug_log, "previous is\n");
6124             sv_dump(current);
6125             PerlIO_printf(Perl_debug_log,
6126                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6127                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6128         }
6129         SV_COW_NEXT_SV_SET(current, sv);
6130     }
6131 #endif
6132     SvREFCNT(sv) = refcnt;
6133     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6134     SvREFCNT(nsv) = 0;
6135     del_SV(nsv);
6136 }
6137
6138 /* We're about to free a GV which has a CV that refers back to us.
6139  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6140  * field) */
6141
6142 STATIC void
6143 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6144 {
6145     SV *gvname;
6146     GV *anongv;
6147
6148     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6149
6150     /* be assertive! */
6151     assert(SvREFCNT(gv) == 0);
6152     assert(isGV(gv) && isGV_with_GP(gv));
6153     assert(GvGP(gv));
6154     assert(!CvANON(cv));
6155     assert(CvGV(cv) == gv);
6156     assert(!CvNAMED(cv));
6157
6158     /* will the CV shortly be freed by gp_free() ? */
6159     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6160         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6161         return;
6162     }
6163
6164     /* if not, anonymise: */
6165     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6166                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6167                     : newSVpvn_flags( "__ANON__", 8, 0 );
6168     sv_catpvs(gvname, "::__ANON__");
6169     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6170     SvREFCNT_dec_NN(gvname);
6171
6172     CvANON_on(cv);
6173     CvCVGV_RC_on(cv);
6174     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6175 }
6176
6177
6178 /*
6179 =for apidoc sv_clear
6180
6181 Clear an SV: call any destructors, free up any memory used by the body,
6182 and free the body itself.  The SV's head is I<not> freed, although
6183 its type is set to all 1's so that it won't inadvertently be assumed
6184 to be live during global destruction etc.
6185 This function should only be called when REFCNT is zero.  Most of the time
6186 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6187 instead.
6188
6189 =cut
6190 */
6191
6192 void
6193 Perl_sv_clear(pTHX_ SV *const orig_sv)
6194 {
6195     dVAR;
6196     HV *stash;
6197     U32 type;
6198     const struct body_details *sv_type_details;
6199     SV* iter_sv = NULL;
6200     SV* next_sv = NULL;
6201     SV *sv = orig_sv;
6202     STRLEN hash_index;
6203
6204     PERL_ARGS_ASSERT_SV_CLEAR;
6205
6206     /* within this loop, sv is the SV currently being freed, and
6207      * iter_sv is the most recent AV or whatever that's being iterated
6208      * over to provide more SVs */
6209
6210     while (sv) {
6211
6212         type = SvTYPE(sv);
6213
6214         assert(SvREFCNT(sv) == 0);
6215         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6216
6217         if (type <= SVt_IV) {
6218             /* See the comment in sv.h about the collusion between this
6219              * early return and the overloading of the NULL slots in the
6220              * size table.  */
6221             if (SvROK(sv))
6222                 goto free_rv;
6223             SvFLAGS(sv) &= SVf_BREAK;
6224             SvFLAGS(sv) |= SVTYPEMASK;
6225             goto free_head;
6226         }
6227
6228         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6229
6230         if (type >= SVt_PVMG) {
6231             if (SvOBJECT(sv)) {
6232                 if (!curse(sv, 1)) goto get_next_sv;
6233                 type = SvTYPE(sv); /* destructor may have changed it */
6234             }
6235             /* Free back-references before magic, in case the magic calls
6236              * Perl code that has weak references to sv. */
6237             if (type == SVt_PVHV) {
6238                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6239                 if (SvMAGIC(sv))
6240                     mg_free(sv);
6241             }
6242             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6243                 SvREFCNT_dec(SvOURSTASH(sv));
6244             }
6245             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6246                 assert(!SvMAGICAL(sv));
6247             } else if (SvMAGIC(sv)) {
6248                 /* Free back-references before other types of magic. */
6249                 sv_unmagic(sv, PERL_MAGIC_backref);
6250                 mg_free(sv);
6251             }
6252             SvMAGICAL_off(sv);
6253             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6254                 SvREFCNT_dec(SvSTASH(sv));
6255         }
6256         switch (type) {
6257             /* case SVt_INVLIST: */
6258         case SVt_PVIO:
6259             if (IoIFP(sv) &&
6260                 IoIFP(sv) != PerlIO_stdin() &&
6261                 IoIFP(sv) != PerlIO_stdout() &&
6262                 IoIFP(sv) != PerlIO_stderr() &&
6263                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6264             {
6265                 io_close(MUTABLE_IO(sv), FALSE);
6266             }
6267             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6268                 PerlDir_close(IoDIRP(sv));
6269             IoDIRP(sv) = (DIR*)NULL;
6270             Safefree(IoTOP_NAME(sv));
6271             Safefree(IoFMT_NAME(sv));
6272             Safefree(IoBOTTOM_NAME(sv));
6273             if ((const GV *)sv == PL_statgv)
6274                 PL_statgv = NULL;
6275             goto freescalar;
6276         case SVt_REGEXP:
6277             /* FIXME for plugins */
6278           freeregexp:
6279             pregfree2((REGEXP*) sv);
6280             goto freescalar;
6281         case SVt_PVCV:
6282         case SVt_PVFM:
6283             cv_undef(MUTABLE_CV(sv));
6284             /* If we're in a stash, we don't own a reference to it.
6285              * However it does have a back reference to us, which needs to
6286              * be cleared.  */
6287             if ((stash = CvSTASH(sv)))
6288                 sv_del_backref(MUTABLE_SV(stash), sv);
6289             goto freescalar;
6290         case SVt_PVHV:
6291             if (PL_last_swash_hv == (const HV *)sv) {
6292                 PL_last_swash_hv = NULL;
6293             }
6294             if (HvTOTALKEYS((HV*)sv) > 0) {
6295                 const char *name;
6296                 /* this statement should match the one at the beginning of
6297                  * hv_undef_flags() */
6298                 if (   PL_phase != PERL_PHASE_DESTRUCT
6299                     && (name = HvNAME((HV*)sv)))
6300                 {
6301                     if (PL_stashcache) {
6302                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6303                                      sv));
6304                         (void)hv_deletehek(PL_stashcache,
6305                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6306                     }
6307                     hv_name_set((HV*)sv, NULL, 0, 0);
6308                 }
6309
6310                 /* save old iter_sv in unused SvSTASH field */
6311                 assert(!SvOBJECT(sv));
6312                 SvSTASH(sv) = (HV*)iter_sv;
6313                 iter_sv = sv;
6314
6315                 /* save old hash_index in unused SvMAGIC field */
6316                 assert(!SvMAGICAL(sv));
6317                 assert(!SvMAGIC(sv));
6318                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6319                 hash_index = 0;
6320
6321                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6322                 goto get_next_sv; /* process this new sv */
6323             }
6324             /* free empty hash */
6325             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6326             assert(!HvARRAY((HV*)sv));
6327             break;
6328         case SVt_PVAV:
6329             {
6330                 AV* av = MUTABLE_AV(sv);
6331                 if (PL_comppad == av) {
6332                     PL_comppad = NULL;
6333                     PL_curpad = NULL;
6334                 }
6335                 if (AvREAL(av) && AvFILLp(av) > -1) {
6336                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6337                     /* save old iter_sv in top-most slot of AV,
6338                      * and pray that it doesn't get wiped in the meantime */
6339                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6340                     iter_sv = sv;
6341                     goto get_next_sv; /* process this new sv */
6342                 }
6343                 Safefree(AvALLOC(av));
6344             }
6345
6346             break;
6347         case SVt_PVLV:
6348             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6349                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6350                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6351                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6352             }
6353             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6354                 SvREFCNT_dec(LvTARG(sv));
6355             if (isREGEXP(sv)) goto freeregexp;
6356         case SVt_PVGV:
6357             if (isGV_with_GP(sv)) {
6358                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6359                    && HvENAME_get(stash))
6360                     mro_method_changed_in(stash);
6361                 gp_free(MUTABLE_GV(sv));
6362                 if (GvNAME_HEK(sv))
6363                     unshare_hek(GvNAME_HEK(sv));
6364                 /* If we're in a stash, we don't own a reference to it.
6365                  * However it does have a back reference to us, which
6366                  * needs to be cleared.  */
6367                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6368                         sv_del_backref(MUTABLE_SV(stash), sv);
6369             }
6370             /* FIXME. There are probably more unreferenced pointers to SVs
6371              * in the interpreter struct that we should check and tidy in
6372              * a similar fashion to this:  */
6373             /* See also S_sv_unglob, which does the same thing. */
6374             if ((const GV *)sv == PL_last_in_gv)
6375                 PL_last_in_gv = NULL;
6376             else if ((const GV *)sv == PL_statgv)
6377                 PL_statgv = NULL;
6378             else if ((const GV *)sv == PL_stderrgv)
6379                 PL_stderrgv = NULL;
6380         case SVt_PVMG:
6381         case SVt_PVNV:
6382         case SVt_PVIV:
6383         case SVt_INVLIST:
6384         case SVt_PV:
6385           freescalar:
6386             /* Don't bother with SvOOK_off(sv); as we're only going to
6387              * free it.  */
6388             if (SvOOK(sv)) {
6389                 STRLEN offset;
6390                 SvOOK_offset(sv, offset);
6391                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6392                 /* Don't even bother with turning off the OOK flag.  */
6393             }
6394             if (SvROK(sv)) {
6395             free_rv:
6396                 {
6397                     SV * const target = SvRV(sv);
6398                     if (SvWEAKREF(sv))
6399                         sv_del_backref(target, sv);
6400                     else
6401                         next_sv = target;
6402                 }
6403             }
6404 #ifdef PERL_ANY_COW
6405             else if (SvPVX_const(sv)
6406                      && !(SvTYPE(sv) == SVt_PVIO
6407                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6408             {
6409                 if (SvIsCOW(sv)) {
6410                     if (DEBUG_C_TEST) {
6411                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6412                         sv_dump(sv);
6413                     }
6414                     if (SvLEN(sv)) {
6415 # ifdef PERL_OLD_COPY_ON_WRITE
6416                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6417 # else
6418                         if (CowREFCNT(sv)) {
6419                             CowREFCNT(sv)--;
6420                             SvLEN_set(sv, 0);
6421                         }
6422 # endif
6423                     } else {
6424                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6425                     }
6426
6427                 }
6428 # ifdef PERL_OLD_COPY_ON_WRITE
6429                 else
6430 # endif
6431                 if (SvLEN(sv)) {
6432                     Safefree(SvPVX_mutable(sv));
6433                 }
6434             }
6435 #else
6436             else if (SvPVX_const(sv) && SvLEN(sv)
6437                      && !(SvTYPE(sv) == SVt_PVIO
6438                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6439                 Safefree(SvPVX_mutable(sv));
6440             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6441                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6442             }
6443 #endif
6444             break;
6445         case SVt_NV:
6446             break;
6447         }
6448
6449       free_body:
6450
6451         SvFLAGS(sv) &= SVf_BREAK;
6452         SvFLAGS(sv) |= SVTYPEMASK;
6453
6454         sv_type_details = bodies_by_type + type;
6455         if (sv_type_details->arena) {
6456             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6457                      &PL_body_roots[type]);
6458         }
6459         else if (sv_type_details->body_size) {
6460             safefree(SvANY(sv));
6461         }
6462
6463       free_head:
6464         /* caller is responsible for freeing the head of the original sv */
6465         if (sv != orig_sv && !SvREFCNT(sv))
6466             del_SV(sv);
6467
6468         /* grab and free next sv, if any */
6469       get_next_sv:
6470         while (1) {
6471             sv = NULL;
6472             if (next_sv) {
6473                 sv = next_sv;
6474                 next_sv = NULL;
6475             }
6476             else if (!iter_sv) {
6477                 break;
6478             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6479                 AV *const av = (AV*)iter_sv;
6480                 if (AvFILLp(av) > -1) {
6481                     sv = AvARRAY(av)[AvFILLp(av)--];
6482                 }
6483                 else { /* no more elements of current AV to free */
6484                     sv = iter_sv;
6485                     type = SvTYPE(sv);
6486                     /* restore previous value, squirrelled away */
6487                     iter_sv = AvARRAY(av)[AvMAX(av)];
6488                     Safefree(AvALLOC(av));
6489                     goto free_body;
6490                 }
6491             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6492                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6493                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6494                     /* no more elements of current HV to free */
6495                     sv = iter_sv;
6496                     type = SvTYPE(sv);
6497                     /* Restore previous values of iter_sv and hash_index,
6498                      * squirrelled away */
6499                     assert(!SvOBJECT(sv));
6500                     iter_sv = (SV*)SvSTASH(sv);
6501                     assert(!SvMAGICAL(sv));
6502                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6503 #ifdef DEBUGGING
6504                     /* perl -DA does not like rubbish in SvMAGIC. */
6505                     SvMAGIC_set(sv, 0);
6506 #endif
6507
6508                     /* free any remaining detritus from the hash struct */
6509                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6510                     assert(!HvARRAY((HV*)sv));
6511                     goto free_body;
6512                 }
6513             }
6514
6515             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6516
6517             if (!sv)
6518                 continue;
6519             if (!SvREFCNT(sv)) {
6520                 sv_free(sv);
6521                 continue;
6522             }
6523             if (--(SvREFCNT(sv)))
6524                 continue;
6525 #ifdef DEBUGGING
6526             if (SvTEMP(sv)) {
6527                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6528                          "Attempt to free temp prematurely: SV 0x%"UVxf
6529                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6530                 continue;
6531             }
6532 #endif
6533             if (SvIMMORTAL(sv)) {
6534                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6535                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6536                 continue;
6537             }
6538             break;
6539         } /* while 1 */
6540
6541     } /* while sv */
6542 }
6543
6544 /* This routine curses the sv itself, not the object referenced by sv. So
6545    sv does not have to be ROK. */
6546
6547 static bool
6548 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6549     dVAR;
6550
6551     PERL_ARGS_ASSERT_CURSE;
6552     assert(SvOBJECT(sv));
6553
6554     if (PL_defstash &&  /* Still have a symbol table? */
6555         SvDESTROYABLE(sv))
6556     {
6557         dSP;
6558         HV* stash;
6559         do {
6560           stash = SvSTASH(sv);
6561           assert(SvTYPE(stash) == SVt_PVHV);
6562           if (HvNAME(stash)) {
6563             CV* destructor = NULL;
6564             assert (SvOOK(stash));
6565             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6566             if (!destructor || HvMROMETA(stash)->destroy_gen
6567                                 != PL_sub_generation)
6568             {
6569                 GV * const gv =
6570                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6571                 if (gv) destructor = GvCV(gv);
6572                 if (!SvOBJECT(stash))
6573                 {
6574                     SvSTASH(stash) =
6575                         destructor ? (HV *)destructor : ((HV *)0)+1;
6576                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6577                         PL_sub_generation;
6578                 }
6579             }
6580             assert(!destructor || destructor == ((CV *)0)+1
6581                 || SvTYPE(destructor) == SVt_PVCV);
6582             if (destructor && destructor != ((CV *)0)+1
6583                 /* A constant subroutine can have no side effects, so
6584                    don't bother calling it.  */
6585                 && !CvCONST(destructor)
6586                 /* Don't bother calling an empty destructor or one that
6587                    returns immediately. */
6588                 && (CvISXSUB(destructor)
6589                 || (CvSTART(destructor)
6590                     && (CvSTART(destructor)->op_next->op_type
6591                                         != OP_LEAVESUB)
6592                     && (CvSTART(destructor)->op_next->op_type
6593                                         != OP_PUSHMARK
6594                         || CvSTART(destructor)->op_next->op_next->op_type
6595                                         != OP_RETURN
6596                        )
6597                    ))
6598                )
6599             {
6600                 SV* const tmpref = newRV(sv);
6601                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6602                 ENTER;
6603                 PUSHSTACKi(PERLSI_DESTROY);
6604                 EXTEND(SP, 2);
6605                 PUSHMARK(SP);
6606                 PUSHs(tmpref);
6607                 PUTBACK;
6608                 call_sv(MUTABLE_SV(destructor),
6609                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6610                 POPSTACK;
6611                 SPAGAIN;
6612                 LEAVE;
6613                 if(SvREFCNT(tmpref) < 2) {
6614                     /* tmpref is not kept alive! */
6615                     SvREFCNT(sv)--;
6616                     SvRV_set(tmpref, NULL);
6617                     SvROK_off(tmpref);
6618                 }
6619                 SvREFCNT_dec_NN(tmpref);
6620             }
6621           }
6622         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6623
6624
6625         if (check_refcnt && SvREFCNT(sv)) {
6626             if (PL_in_clean_objs)
6627                 Perl_croak(aTHX_
6628                   "DESTROY created new reference to dead object '%"HEKf"'",
6629                    HEKfARG(HvNAME_HEK(stash)));
6630             /* DESTROY gave object new lease on life */
6631             return FALSE;
6632         }
6633     }
6634
6635     if (SvOBJECT(sv)) {
6636         HV * const stash = SvSTASH(sv);
6637         /* Curse before freeing the stash, as freeing the stash could cause
6638            a recursive call into S_curse. */
6639         SvOBJECT_off(sv);       /* Curse the object. */
6640         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6641         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6642     }
6643     return TRUE;
6644 }
6645
6646 /*
6647 =for apidoc sv_newref
6648
6649 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6650 instead.
6651
6652 =cut
6653 */
6654
6655 SV *
6656 Perl_sv_newref(pTHX_ SV *const sv)
6657 {
6658     PERL_UNUSED_CONTEXT;
6659     if (sv)
6660         (SvREFCNT(sv))++;
6661     return sv;
6662 }
6663
6664 /*
6665 =for apidoc sv_free
6666
6667 Decrement an SV's reference count, and if it drops to zero, call
6668 C<sv_clear> to invoke destructors and free up any memory used by
6669 the body; finally, deallocate the SV's head itself.
6670 Normally called via a wrapper macro C<SvREFCNT_dec>.
6671
6672 =cut
6673 */
6674
6675 void
6676 Perl_sv_free(pTHX_ SV *const sv)
6677 {
6678     SvREFCNT_dec(sv);
6679 }
6680
6681
6682 /* Private helper function for SvREFCNT_dec().
6683  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6684
6685 void
6686 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6687 {
6688     dVAR;
6689
6690     PERL_ARGS_ASSERT_SV_FREE2;
6691
6692     if (LIKELY( rc == 1 )) {
6693         /* normal case */
6694         SvREFCNT(sv) = 0;
6695
6696 #ifdef DEBUGGING
6697         if (SvTEMP(sv)) {
6698             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6699                              "Attempt to free temp prematurely: SV 0x%"UVxf
6700                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6701             return;
6702         }
6703 #endif
6704         if (SvIMMORTAL(sv)) {
6705             /* make sure SvREFCNT(sv)==0 happens very seldom */
6706             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6707             return;
6708         }
6709         sv_clear(sv);
6710         if (! SvREFCNT(sv)) /* may have have been resurrected */
6711             del_SV(sv);
6712         return;
6713     }
6714
6715     /* handle exceptional cases */
6716
6717     assert(rc == 0);
6718
6719     if (SvFLAGS(sv) & SVf_BREAK)
6720         /* this SV's refcnt has been artificially decremented to
6721          * trigger cleanup */
6722         return;
6723     if (PL_in_clean_all) /* All is fair */
6724         return;
6725     if (SvIMMORTAL(sv)) {
6726         /* make sure SvREFCNT(sv)==0 happens very seldom */
6727         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6728         return;
6729     }
6730     if (ckWARN_d(WARN_INTERNAL)) {
6731 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6732         Perl_dump_sv_child(aTHX_ sv);
6733 #else
6734     #ifdef DEBUG_LEAKING_SCALARS
6735         sv_dump(sv);
6736     #endif
6737 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6738         if (PL_warnhook == PERL_WARNHOOK_FATAL
6739             || ckDEAD(packWARN(WARN_INTERNAL))) {
6740             /* Don't let Perl_warner cause us to escape our fate:  */
6741             abort();
6742         }
6743 #endif
6744         /* This may not return:  */
6745         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6746                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6747                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6748 #endif
6749     }
6750 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6751     abort();
6752 #endif
6753
6754 }
6755
6756
6757 /*
6758 =for apidoc sv_len
6759
6760 Returns the length of the string in the SV.  Handles magic and type
6761 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6762 gives raw access to the xpv_cur slot.
6763
6764 =cut
6765 */
6766
6767 STRLEN
6768 Perl_sv_len(pTHX_ SV *const sv)
6769 {
6770     STRLEN len;
6771
6772     if (!sv)
6773         return 0;
6774
6775     (void)SvPV_const(sv, len);
6776     return len;
6777 }
6778
6779 /*
6780 =for apidoc sv_len_utf8
6781
6782 Returns the number of characters in the string in an SV, counting wide
6783 UTF-8 bytes as a single character.  Handles magic and type coercion.
6784
6785 =cut
6786 */
6787
6788 /*
6789  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6790  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6791  * (Note that the mg_len is not the length of the mg_ptr field.
6792  * This allows the cache to store the character length of the string without
6793  * needing to malloc() extra storage to attach to the mg_ptr.)
6794  *
6795  */
6796
6797 STRLEN
6798 Perl_sv_len_utf8(pTHX_ SV *const sv)
6799 {
6800     if (!sv)
6801         return 0;
6802
6803     SvGETMAGIC(sv);
6804     return sv_len_utf8_nomg(sv);
6805 }
6806
6807 STRLEN
6808 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6809 {
6810     dVAR;
6811     STRLEN len;
6812     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6813
6814     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6815
6816     if (PL_utf8cache && SvUTF8(sv)) {
6817             STRLEN ulen;
6818             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6819
6820             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6821                 if (mg->mg_len != -1)
6822                     ulen = mg->mg_len;
6823                 else {
6824                     /* We can use the offset cache for a headstart.
6825                        The longer value is stored in the first pair.  */
6826                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6827
6828                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6829                                                        s + len);
6830                 }
6831                 
6832                 if (PL_utf8cache < 0) {
6833                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6834                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6835                 }
6836             }
6837             else {
6838                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6839                 utf8_mg_len_cache_update(sv, &mg, ulen);
6840             }
6841             return ulen;
6842     }
6843     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6844 }
6845
6846 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6847    offset.  */
6848 static STRLEN
6849 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6850                       STRLEN *const uoffset_p, bool *const at_end)
6851 {
6852     const U8 *s = start;
6853     STRLEN uoffset = *uoffset_p;
6854
6855     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6856
6857     while (s < send && uoffset) {
6858         --uoffset;
6859         s += UTF8SKIP(s);
6860     }
6861     if (s == send) {
6862         *at_end = TRUE;
6863     }
6864     else if (s > send) {
6865         *at_end = TRUE;
6866         /* This is the existing behaviour. Possibly it should be a croak, as
6867            it's actually a bounds error  */
6868         s = send;
6869     }
6870     *uoffset_p -= uoffset;
6871     return s - start;
6872 }
6873
6874 /* Given the length of the string in both bytes and UTF-8 characters, decide
6875    whether to walk forwards or backwards to find the byte corresponding to
6876    the passed in UTF-8 offset.  */
6877 static STRLEN
6878 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6879                     STRLEN uoffset, const STRLEN uend)
6880 {
6881     STRLEN backw = uend - uoffset;
6882
6883     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6884
6885     if (uoffset < 2 * backw) {
6886         /* The assumption is that going forwards is twice the speed of going
6887            forward (that's where the 2 * backw comes from).
6888            (The real figure of course depends on the UTF-8 data.)  */
6889         const U8 *s = start;
6890
6891         while (s < send && uoffset--)
6892             s += UTF8SKIP(s);
6893         assert (s <= send);
6894         if (s > send)
6895             s = send;
6896         return s - start;
6897     }
6898
6899     while (backw--) {
6900         send--;
6901         while (UTF8_IS_CONTINUATION(*send))
6902             send--;
6903     }
6904     return send - start;
6905 }
6906
6907 /* For the string representation of the given scalar, find the byte
6908    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6909    give another position in the string, *before* the sought offset, which
6910    (which is always true, as 0, 0 is a valid pair of positions), which should
6911    help reduce the amount of linear searching.
6912    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6913    will be used to reduce the amount of linear searching. The cache will be
6914    created if necessary, and the found value offered to it for update.  */
6915 static STRLEN
6916 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6917                     const U8 *const send, STRLEN uoffset,
6918                     STRLEN uoffset0, STRLEN boffset0)
6919 {
6920     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6921     bool found = FALSE;
6922     bool at_end = FALSE;
6923
6924     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6925
6926     assert (uoffset >= uoffset0);
6927
6928     if (!uoffset)
6929         return 0;
6930
6931     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6932         && PL_utf8cache
6933         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6934                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6935         if ((*mgp)->mg_ptr) {
6936             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6937             if (cache[0] == uoffset) {
6938                 /* An exact match. */
6939                 return cache[1];
6940             }
6941             if (cache[2] == uoffset) {
6942                 /* An exact match. */
6943                 return cache[3];
6944             }
6945
6946             if (cache[0] < uoffset) {
6947                 /* The cache already knows part of the way.   */
6948                 if (cache[0] > uoffset0) {
6949                     /* The cache knows more than the passed in pair  */
6950                     uoffset0 = cache[0];
6951                     boffset0 = cache[1];
6952                 }
6953                 if ((*mgp)->mg_len != -1) {
6954                     /* And we know the end too.  */
6955                     boffset = boffset0
6956                         + sv_pos_u2b_midway(start + boffset0, send,
6957                                               uoffset - uoffset0,
6958                                               (*mgp)->mg_len - uoffset0);
6959                 } else {
6960                     uoffset -= uoffset0;
6961                     boffset = boffset0
6962                         + sv_pos_u2b_forwards(start + boffset0,
6963                                               send, &uoffset, &at_end);
6964                     uoffset += uoffset0;
6965                 }
6966             }
6967             else if (cache[2] < uoffset) {
6968                 /* We're between the two cache entries.  */
6969                 if (cache[2] > uoffset0) {
6970                     /* and the cache knows more than the passed in pair  */
6971                     uoffset0 = cache[2];
6972                     boffset0 = cache[3];
6973                 }
6974
6975                 boffset = boffset0
6976                     + sv_pos_u2b_midway(start + boffset0,
6977                                           start + cache[1],
6978                                           uoffset - uoffset0,
6979                                           cache[0] - uoffset0);
6980             } else {
6981                 boffset = boffset0
6982                     + sv_pos_u2b_midway(start + boffset0,
6983                                           start + cache[3],
6984                                           uoffset - uoffset0,
6985                                           cache[2] - uoffset0);
6986             }
6987             found = TRUE;
6988         }
6989         else if ((*mgp)->mg_len != -1) {
6990             /* If we can take advantage of a passed in offset, do so.  */
6991             /* In fact, offset0 is either 0, or less than offset, so don't
6992                need to worry about the other possibility.  */
6993             boffset = boffset0
6994                 + sv_pos_u2b_midway(start + boffset0, send,
6995                                       uoffset - uoffset0,
6996                                       (*mgp)->mg_len - uoffset0);
6997             found = TRUE;
6998         }
6999     }
7000
7001     if (!found || PL_utf8cache < 0) {
7002         STRLEN real_boffset;
7003         uoffset -= uoffset0;
7004         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7005                                                       send, &uoffset, &at_end);
7006         uoffset += uoffset0;
7007
7008         if (found && PL_utf8cache < 0)
7009             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7010                                        real_boffset, sv);
7011         boffset = real_boffset;
7012     }
7013
7014     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7015         if (at_end)
7016             utf8_mg_len_cache_update(sv, mgp, uoffset);
7017         else
7018             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7019     }
7020     return boffset;
7021 }
7022
7023
7024 /*
7025 =for apidoc sv_pos_u2b_flags
7026
7027 Converts the offset from a count of UTF-8 chars from
7028 the start of the string, to a count of the equivalent number of bytes; if
7029 lenp is non-zero, it does the same to lenp, but this time starting from
7030 the offset, rather than from the start
7031 of the string.  Handles type coercion.
7032 I<flags> is passed to C<SvPV_flags>, and usually should be
7033 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7034
7035 =cut
7036 */
7037
7038 /*
7039  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7040  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7041  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7042  *
7043  */
7044
7045 STRLEN
7046 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7047                       U32 flags)
7048 {
7049     const U8 *start;
7050     STRLEN len;
7051     STRLEN boffset;
7052
7053     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7054
7055     start = (U8*)SvPV_flags(sv, len, flags);
7056     if (len) {
7057         const U8 * const send = start + len;
7058         MAGIC *mg = NULL;
7059         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7060
7061         if (lenp
7062             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7063                         is 0, and *lenp is already set to that.  */) {
7064             /* Convert the relative offset to absolute.  */
7065             const STRLEN uoffset2 = uoffset + *lenp;
7066             const STRLEN boffset2
7067                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7068                                       uoffset, boffset) - boffset;
7069
7070             *lenp = boffset2;
7071         }
7072     } else {
7073         if (lenp)
7074             *lenp = 0;
7075         boffset = 0;
7076     }
7077
7078     return boffset;
7079 }
7080
7081 /*
7082 =for apidoc sv_pos_u2b
7083
7084 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7085 the start of the string, to a count of the equivalent number of bytes; if
7086 lenp is non-zero, it does the same to lenp, but this time starting from
7087 the offset, rather than from the start of the string.  Handles magic and
7088 type coercion.
7089
7090 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7091 than 2Gb.
7092
7093 =cut
7094 */
7095
7096 /*
7097  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7098  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7099  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7100  *
7101  */
7102
7103 /* This function is subject to size and sign problems */
7104
7105 void
7106 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7107 {
7108     PERL_ARGS_ASSERT_SV_POS_U2B;
7109
7110     if (lenp) {
7111         STRLEN ulen = (STRLEN)*lenp;
7112         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7113                                          SV_GMAGIC|SV_CONST_RETURN);
7114         *lenp = (I32)ulen;
7115     } else {
7116         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7117                                          SV_GMAGIC|SV_CONST_RETURN);
7118     }
7119 }
7120
7121 static void
7122 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7123                            const STRLEN ulen)
7124 {
7125     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7126     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7127         return;
7128
7129     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7130                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7131         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7132     }
7133     assert(*mgp);
7134
7135     (*mgp)->mg_len = ulen;
7136 }
7137
7138 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7139    byte length pairing. The (byte) length of the total SV is passed in too,
7140    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7141    may not have updated SvCUR, so we can't rely on reading it directly.
7142
7143    The proffered utf8/byte length pairing isn't used if the cache already has
7144    two pairs, and swapping either for the proffered pair would increase the
7145    RMS of the intervals between known byte offsets.
7146
7147    The cache itself consists of 4 STRLEN values
7148    0: larger UTF-8 offset
7149    1: corresponding byte offset
7150    2: smaller UTF-8 offset
7151    3: corresponding byte offset
7152
7153    Unused cache pairs have the value 0, 0.
7154    Keeping the cache "backwards" means that the invariant of
7155    cache[0] >= cache[2] is maintained even with empty slots, which means that
7156    the code that uses it doesn't need to worry if only 1 entry has actually
7157    been set to non-zero.  It also makes the "position beyond the end of the
7158    cache" logic much simpler, as the first slot is always the one to start
7159    from.   
7160 */
7161 static void
7162 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7163                            const STRLEN utf8, const STRLEN blen)
7164 {
7165     STRLEN *cache;
7166
7167     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7168
7169     if (SvREADONLY(sv))
7170         return;
7171
7172     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7173                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7174         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7175                            0);
7176         (*mgp)->mg_len = -1;
7177     }
7178     assert(*mgp);
7179
7180     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7181         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7182         (*mgp)->mg_ptr = (char *) cache;
7183     }
7184     assert(cache);
7185
7186     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7187         /* SvPOKp() because it's possible that sv has string overloading, and
7188            therefore is a reference, hence SvPVX() is actually a pointer.
7189            This cures the (very real) symptoms of RT 69422, but I'm not actually
7190            sure whether we should even be caching the results of UTF-8
7191            operations on overloading, given that nothing stops overloading
7192            returning a different value every time it's called.  */
7193         const U8 *start = (const U8 *) SvPVX_const(sv);
7194         const STRLEN realutf8 = utf8_length(start, start + byte);
7195
7196         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7197                                    sv);
7198     }
7199
7200     /* Cache is held with the later position first, to simplify the code
7201        that deals with unbounded ends.  */
7202        
7203     ASSERT_UTF8_CACHE(cache);
7204     if (cache[1] == 0) {
7205         /* Cache is totally empty  */
7206         cache[0] = utf8;
7207         cache[1] = byte;
7208     } else if (cache[3] == 0) {
7209         if (byte > cache[1]) {
7210             /* New one is larger, so goes first.  */
7211             cache[2] = cache[0];
7212             cache[3] = cache[1];
7213             cache[0] = utf8;
7214             cache[1] = byte;
7215         } else {
7216             cache[2] = utf8;
7217             cache[3] = byte;
7218         }
7219     } else {
7220 #define THREEWAY_SQUARE(a,b,c,d) \
7221             ((float)((d) - (c))) * ((float)((d) - (c))) \
7222             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7223                + ((float)((b) - (a))) * ((float)((b) - (a)))
7224
7225         /* Cache has 2 slots in use, and we know three potential pairs.
7226            Keep the two that give the lowest RMS distance. Do the
7227            calculation in bytes simply because we always know the byte
7228            length.  squareroot has the same ordering as the positive value,
7229            so don't bother with the actual square root.  */
7230         if (byte > cache[1]) {
7231             /* New position is after the existing pair of pairs.  */
7232             const float keep_earlier
7233                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7234             const float keep_later
7235                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7236
7237             if (keep_later < keep_earlier) {
7238                 cache[2] = cache[0];
7239                 cache[3] = cache[1];
7240                 cache[0] = utf8;
7241                 cache[1] = byte;
7242             }
7243             else {
7244                 cache[0] = utf8;
7245                 cache[1] = byte;
7246             }
7247         }
7248         else if (byte > cache[3]) {
7249             /* New position is between the existing pair of pairs.  */
7250             const float keep_earlier
7251                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7252             const float keep_later
7253                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7254
7255             if (keep_later < keep_earlier) {
7256                 cache[2] = utf8;
7257                 cache[3] = byte;
7258             }
7259             else {
7260                 cache[0] = utf8;
7261                 cache[1] = byte;
7262             }
7263         }
7264         else {
7265             /* New position is before the existing pair of pairs.  */
7266             const float keep_earlier
7267                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7268             const float keep_later
7269                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7270
7271             if (keep_later < keep_earlier) {
7272                 cache[2] = utf8;
7273                 cache[3] = byte;
7274             }
7275             else {
7276                 cache[0] = cache[2];
7277                 cache[1] = cache[3];
7278                 cache[2] = utf8;
7279                 cache[3] = byte;
7280             }
7281         }
7282     }
7283     ASSERT_UTF8_CACHE(cache);
7284 }
7285
7286 /* We already know all of the way, now we may be able to walk back.  The same
7287    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7288    backward is half the speed of walking forward. */
7289 static STRLEN
7290 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7291                     const U8 *end, STRLEN endu)
7292 {
7293     const STRLEN forw = target - s;
7294     STRLEN backw = end - target;
7295
7296     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7297
7298     if (forw < 2 * backw) {
7299         return utf8_length(s, target);
7300     }
7301
7302     while (end > target) {
7303         end--;
7304         while (UTF8_IS_CONTINUATION(*end)) {
7305             end--;
7306         }
7307         endu--;
7308     }
7309     return endu;
7310 }
7311
7312 /*
7313 =for apidoc sv_pos_b2u_flags
7314
7315 Converts the offset from a count of bytes from the start of the string, to
7316 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7317 I<flags> is passed to C<SvPV_flags>, and usually should be
7318 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7319
7320 =cut
7321 */
7322
7323 /*
7324  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7325  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7326  * and byte offsets.
7327  *
7328  */
7329 STRLEN
7330 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7331 {
7332     const U8* s;
7333     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7334     STRLEN blen;
7335     MAGIC* mg = NULL;
7336     const U8* send;
7337     bool found = FALSE;
7338
7339     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7340
7341     s = (const U8*)SvPV_flags(sv, blen, flags);
7342
7343     if (blen < offset)
7344         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7345                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7346
7347     send = s + offset;
7348
7349     if (!SvREADONLY(sv)
7350         && PL_utf8cache
7351         && SvTYPE(sv) >= SVt_PVMG
7352         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7353     {
7354         if (mg->mg_ptr) {
7355             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7356             if (cache[1] == offset) {
7357                 /* An exact match. */
7358                 return cache[0];
7359             }
7360             if (cache[3] == offset) {
7361                 /* An exact match. */
7362                 return cache[2];
7363             }
7364
7365             if (cache[1] < offset) {
7366                 /* We already know part of the way. */
7367                 if (mg->mg_len != -1) {
7368                     /* Actually, we know the end too.  */
7369                     len = cache[0]
7370                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7371                                               s + blen, mg->mg_len - cache[0]);
7372                 } else {
7373                     len = cache[0] + utf8_length(s + cache[1], send);
7374                 }
7375             }
7376             else if (cache[3] < offset) {
7377                 /* We're between the two cached pairs, so we do the calculation
7378                    offset by the byte/utf-8 positions for the earlier pair,
7379                    then add the utf-8 characters from the string start to
7380                    there.  */
7381                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7382                                           s + cache[1], cache[0] - cache[2])
7383                     + cache[2];
7384
7385             }
7386             else { /* cache[3] > offset */
7387                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7388                                           cache[2]);
7389
7390             }
7391             ASSERT_UTF8_CACHE(cache);
7392             found = TRUE;
7393         } else if (mg->mg_len != -1) {
7394             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7395             found = TRUE;
7396         }
7397     }
7398     if (!found || PL_utf8cache < 0) {
7399         const STRLEN real_len = utf8_length(s, send);
7400
7401         if (found && PL_utf8cache < 0)
7402             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7403         len = real_len;
7404     }
7405
7406     if (PL_utf8cache) {
7407         if (blen == offset)
7408             utf8_mg_len_cache_update(sv, &mg, len);
7409         else
7410             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7411     }
7412
7413     return len;
7414 }
7415
7416 /*
7417 =for apidoc sv_pos_b2u
7418
7419 Converts the value pointed to by offsetp from a count of bytes from the
7420 start of the string, to a count of the equivalent number of UTF-8 chars.
7421 Handles magic and type coercion.
7422
7423 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7424 longer than 2Gb.
7425
7426 =cut
7427 */
7428
7429 /*
7430  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7431  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7432  * byte offsets.
7433  *
7434  */
7435 void
7436 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7437 {
7438     PERL_ARGS_ASSERT_SV_POS_B2U;
7439
7440     if (!sv)
7441         return;
7442
7443     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7444                                      SV_GMAGIC|SV_CONST_RETURN);
7445 }
7446
7447 static void
7448 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7449                              STRLEN real, SV *const sv)
7450 {
7451     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7452
7453     /* As this is debugging only code, save space by keeping this test here,
7454        rather than inlining it in all the callers.  */
7455     if (from_cache == real)
7456         return;
7457
7458     /* Need to turn the assertions off otherwise we may recurse infinitely
7459        while printing error messages.  */
7460     SAVEI8(PL_utf8cache);
7461     PL_utf8cache = 0;
7462     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7463                func, (UV) from_cache, (UV) real, SVfARG(sv));
7464 }
7465
7466 /*
7467 =for apidoc sv_eq
7468
7469 Returns a boolean indicating whether the strings in the two SVs are
7470 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7471 coerce its args to strings if necessary.
7472
7473 =for apidoc sv_eq_flags
7474
7475 Returns a boolean indicating whether the strings in the two SVs are
7476 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7477 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7478
7479 =cut
7480 */
7481
7482 I32
7483 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7484 {
7485     dVAR;
7486     const char *pv1;
7487     STRLEN cur1;
7488     const char *pv2;
7489     STRLEN cur2;
7490     I32  eq     = 0;
7491     SV* svrecode = NULL;
7492
7493     if (!sv1) {
7494         pv1 = "";
7495         cur1 = 0;
7496     }
7497     else {
7498         /* if pv1 and pv2 are the same, second SvPV_const call may
7499          * invalidate pv1 (if we are handling magic), so we may need to
7500          * make a copy */
7501         if (sv1 == sv2 && flags & SV_GMAGIC
7502          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7503             pv1 = SvPV_const(sv1, cur1);
7504             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7505         }
7506         pv1 = SvPV_flags_const(sv1, cur1, flags);
7507     }
7508
7509     if (!sv2){
7510         pv2 = "";
7511         cur2 = 0;
7512     }
7513     else
7514         pv2 = SvPV_flags_const(sv2, cur2, flags);
7515
7516     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7517         /* Differing utf8ness.
7518          * Do not UTF8size the comparands as a side-effect. */
7519          if (PL_encoding) {
7520               if (SvUTF8(sv1)) {
7521                    svrecode = newSVpvn(pv2, cur2);
7522                    sv_recode_to_utf8(svrecode, PL_encoding);
7523                    pv2 = SvPV_const(svrecode, cur2);
7524               }
7525               else {
7526                    svrecode = newSVpvn(pv1, cur1);
7527                    sv_recode_to_utf8(svrecode, PL_encoding);
7528                    pv1 = SvPV_const(svrecode, cur1);
7529               }
7530               /* Now both are in UTF-8. */
7531               if (cur1 != cur2) {
7532                    SvREFCNT_dec_NN(svrecode);
7533                    return FALSE;
7534               }
7535          }
7536          else {
7537               if (SvUTF8(sv1)) {
7538                   /* sv1 is the UTF-8 one  */
7539                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7540                                         (const U8*)pv1, cur1) == 0;
7541               }
7542               else {
7543                   /* sv2 is the UTF-8 one  */
7544                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7545                                         (const U8*)pv2, cur2) == 0;
7546               }
7547          }
7548     }
7549
7550     if (cur1 == cur2)
7551         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7552         
7553     SvREFCNT_dec(svrecode);
7554
7555     return eq;
7556 }
7557
7558 /*
7559 =for apidoc sv_cmp
7560
7561 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7562 string in C<sv1> is less than, equal to, or greater than the string in
7563 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7564 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7565
7566 =for apidoc sv_cmp_flags
7567
7568 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7569 string in C<sv1> is less than, equal to, or greater than the string in
7570 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7571 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7572 also C<sv_cmp_locale_flags>.
7573
7574 =cut
7575 */
7576
7577 I32
7578 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7579 {
7580     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7581 }
7582
7583 I32
7584 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7585                   const U32 flags)
7586 {
7587     dVAR;
7588     STRLEN cur1, cur2;
7589     const char *pv1, *pv2;
7590     I32  cmp;
7591     SV *svrecode = NULL;
7592
7593     if (!sv1) {
7594         pv1 = "";
7595         cur1 = 0;
7596     }
7597     else
7598         pv1 = SvPV_flags_const(sv1, cur1, flags);
7599
7600     if (!sv2) {
7601         pv2 = "";
7602         cur2 = 0;
7603     }
7604     else
7605         pv2 = SvPV_flags_const(sv2, cur2, flags);
7606
7607     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7608         /* Differing utf8ness.
7609          * Do not UTF8size the comparands as a side-effect. */
7610         if (SvUTF8(sv1)) {
7611             if (PL_encoding) {
7612                  svrecode = newSVpvn(pv2, cur2);
7613                  sv_recode_to_utf8(svrecode, PL_encoding);
7614                  pv2 = SvPV_const(svrecode, cur2);
7615             }
7616             else {
7617                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7618                                                    (const U8*)pv1, cur1);
7619                 return retval ? retval < 0 ? -1 : +1 : 0;
7620             }
7621         }
7622         else {
7623             if (PL_encoding) {
7624                  svrecode = newSVpvn(pv1, cur1);
7625                  sv_recode_to_utf8(svrecode, PL_encoding);
7626                  pv1 = SvPV_const(svrecode, cur1);
7627             }
7628             else {
7629                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7630                                                   (const U8*)pv2, cur2);
7631                 return retval ? retval < 0 ? -1 : +1 : 0;
7632             }
7633         }
7634     }
7635
7636     if (!cur1) {
7637         cmp = cur2 ? -1 : 0;
7638     } else if (!cur2) {
7639         cmp = 1;
7640     } else {
7641         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7642
7643         if (retval) {
7644             cmp = retval < 0 ? -1 : 1;
7645         } else if (cur1 == cur2) {
7646             cmp = 0;
7647         } else {
7648             cmp = cur1 < cur2 ? -1 : 1;
7649         }
7650     }
7651
7652     SvREFCNT_dec(svrecode);
7653
7654     return cmp;
7655 }
7656
7657 /*
7658 =for apidoc sv_cmp_locale
7659
7660 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7661 'use bytes' aware, handles get magic, and will coerce its args to strings
7662 if necessary.  See also C<sv_cmp>.
7663
7664 =for apidoc sv_cmp_locale_flags
7665
7666 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7667 'use bytes' aware and will coerce its args to strings if necessary.  If the
7668 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7669
7670 =cut
7671 */
7672
7673 I32
7674 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7675 {
7676     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7677 }
7678
7679 I32
7680 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7681                          const U32 flags)
7682 {
7683     dVAR;
7684 #ifdef USE_LOCALE_COLLATE
7685
7686     char *pv1, *pv2;
7687     STRLEN len1, len2;
7688     I32 retval;
7689
7690     if (PL_collation_standard)
7691         goto raw_compare;
7692
7693     len1 = 0;
7694     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7695     len2 = 0;
7696     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7697
7698     if (!pv1 || !len1) {
7699         if (pv2 && len2)
7700             return -1;
7701         else
7702             goto raw_compare;
7703     }
7704     else {
7705         if (!pv2 || !len2)
7706             return 1;
7707     }
7708
7709     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7710
7711     if (retval)
7712         return retval < 0 ? -1 : 1;
7713
7714     /*
7715      * When the result of collation is equality, that doesn't mean
7716      * that there are no differences -- some locales exclude some
7717      * characters from consideration.  So to avoid false equalities,
7718      * we use the raw string as a tiebreaker.
7719      */
7720
7721   raw_compare:
7722     /*FALLTHROUGH*/
7723
7724 #endif /* USE_LOCALE_COLLATE */
7725
7726     return sv_cmp(sv1, sv2);
7727 }
7728
7729
7730 #ifdef USE_LOCALE_COLLATE
7731
7732 /*
7733 =for apidoc sv_collxfrm
7734
7735 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7736 C<sv_collxfrm_flags>.
7737
7738 =for apidoc sv_collxfrm_flags
7739
7740 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7741 flags contain SV_GMAGIC, it handles get-magic.
7742
7743 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7744 scalar data of the variable, but transformed to such a format that a normal
7745 memory comparison can be used to compare the data according to the locale
7746 settings.
7747
7748 =cut
7749 */
7750
7751 char *
7752 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7753 {
7754     dVAR;
7755     MAGIC *mg;
7756
7757     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7758
7759     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7760     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7761         const char *s;
7762         char *xf;
7763         STRLEN len, xlen;
7764
7765         if (mg)
7766             Safefree(mg->mg_ptr);
7767         s = SvPV_flags_const(sv, len, flags);
7768         if ((xf = mem_collxfrm(s, len, &xlen))) {
7769             if (! mg) {
7770 #ifdef PERL_OLD_COPY_ON_WRITE
7771                 if (SvIsCOW(sv))
7772                     sv_force_normal_flags(sv, 0);
7773 #endif
7774                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7775                                  0, 0);
7776                 assert(mg);
7777             }
7778             mg->mg_ptr = xf;
7779             mg->mg_len = xlen;
7780         }
7781         else {
7782             if (mg) {
7783                 mg->mg_ptr = NULL;
7784                 mg->mg_len = -1;
7785             }
7786         }
7787     }
7788     if (mg && mg->mg_ptr) {
7789         *nxp = mg->mg_len;
7790         return mg->mg_ptr + sizeof(PL_collation_ix);
7791     }
7792     else {
7793         *nxp = 0;
7794         return NULL;
7795     }
7796 }
7797
7798 #endif /* USE_LOCALE_COLLATE */
7799
7800 static char *
7801 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7802 {
7803     SV * const tsv = newSV(0);
7804     ENTER;
7805     SAVEFREESV(tsv);
7806     sv_gets(tsv, fp, 0);
7807     sv_utf8_upgrade_nomg(tsv);
7808     SvCUR_set(sv,append);
7809     sv_catsv(sv,tsv);
7810     LEAVE;
7811     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7812 }
7813
7814 static char *
7815 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7816 {
7817     SSize_t bytesread;
7818     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7819       /* Grab the size of the record we're getting */
7820     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7821     
7822     /* Go yank in */
7823 #ifdef VMS
7824 #include <rms.h>
7825     int fd;
7826     Stat_t st;
7827
7828     /* With a true, record-oriented file on VMS, we need to use read directly
7829      * to ensure that we respect RMS record boundaries.  The user is responsible
7830      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7831      * record size) field.  N.B. This is likely to produce invalid results on
7832      * varying-width character data when a record ends mid-character.
7833      */
7834     fd = PerlIO_fileno(fp);
7835     if (fd != -1
7836         && PerlLIO_fstat(fd, &st) == 0
7837         && (st.st_fab_rfm == FAB$C_VAR
7838             || st.st_fab_rfm == FAB$C_VFC
7839             || st.st_fab_rfm == FAB$C_FIX)) {
7840
7841         bytesread = PerlLIO_read(fd, buffer, recsize);
7842     }
7843     else /* in-memory file from PerlIO::Scalar
7844           * or not a record-oriented file
7845           */
7846 #endif
7847     {
7848         bytesread = PerlIO_read(fp, buffer, recsize);
7849
7850         /* At this point, the logic in sv_get() means that sv will
7851            be treated as utf-8 if the handle is utf8.
7852         */
7853         if (PerlIO_isutf8(fp) && bytesread > 0) {
7854             char *bend = buffer + bytesread;
7855             char *bufp = buffer;
7856             size_t charcount = 0;
7857             bool charstart = TRUE;
7858             STRLEN skip = 0;
7859
7860             while (charcount < recsize) {
7861                 /* count accumulated characters */
7862                 while (bufp < bend) {
7863                     if (charstart) {
7864                         skip = UTF8SKIP(bufp);
7865                     }
7866                     if (bufp + skip > bend) {
7867                         /* partial at the end */
7868                         charstart = FALSE;
7869                         break;
7870                     }
7871                     else {
7872                         ++charcount;
7873                         bufp += skip;
7874                         charstart = TRUE;
7875                     }
7876                 }
7877
7878                 if (charcount < recsize) {
7879                     STRLEN readsize;
7880                     STRLEN bufp_offset = bufp - buffer;
7881                     SSize_t morebytesread;
7882
7883                     /* originally I read enough to fill any incomplete
7884                        character and the first byte of the next
7885                        character if needed, but if there's many
7886                        multi-byte encoded characters we're going to be
7887                        making a read call for every character beyond
7888                        the original read size.
7889
7890                        So instead, read the rest of the character if
7891                        any, and enough bytes to match at least the
7892                        start bytes for each character we're going to
7893                        read.
7894                     */
7895                     if (charstart)
7896                         readsize = recsize - charcount;
7897                     else 
7898                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7899                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7900                     bend = buffer + bytesread;
7901                     morebytesread = PerlIO_read(fp, bend, readsize);
7902                     if (morebytesread <= 0) {
7903                         /* we're done, if we still have incomplete
7904                            characters the check code in sv_gets() will
7905                            warn about them.
7906
7907                            I'd originally considered doing
7908                            PerlIO_ungetc() on all but the lead
7909                            character of the incomplete character, but
7910                            read() doesn't do that, so I don't.
7911                         */
7912                         break;
7913                     }
7914
7915                     /* prepare to scan some more */
7916                     bytesread += morebytesread;
7917                     bend = buffer + bytesread;
7918                     bufp = buffer + bufp_offset;
7919                 }
7920             }
7921         }
7922     }
7923
7924     if (bytesread < 0)
7925         bytesread = 0;
7926     SvCUR_set(sv, bytesread + append);
7927     buffer[bytesread] = '\0';
7928     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7929 }
7930
7931 /*
7932 =for apidoc sv_gets
7933
7934 Get a line from the filehandle and store it into the SV, optionally
7935 appending to the currently-stored string. If C<append> is not 0, the
7936 line is appended to the SV instead of overwriting it. C<append> should
7937 be set to the byte offset that the appended string should start at
7938 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7939
7940 =cut
7941 */
7942
7943 char *
7944 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7945 {
7946     dVAR;
7947     const char *rsptr;
7948     STRLEN rslen;
7949     STDCHAR rslast;
7950     STDCHAR *bp;
7951     SSize_t cnt;
7952     int i = 0;
7953     int rspara = 0;
7954
7955     PERL_ARGS_ASSERT_SV_GETS;
7956
7957     if (SvTHINKFIRST(sv))
7958         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7959     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7960        from <>.
7961        However, perlbench says it's slower, because the existing swipe code
7962        is faster than copy on write.
7963        Swings and roundabouts.  */
7964     SvUPGRADE(sv, SVt_PV);
7965
7966     if (append) {
7967         if (PerlIO_isutf8(fp)) {
7968             if (!SvUTF8(sv)) {
7969                 sv_utf8_upgrade_nomg(sv);
7970                 sv_pos_u2b(sv,&append,0);
7971             }
7972         } else if (SvUTF8(sv)) {
7973             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7974         }
7975     }
7976
7977     SvPOK_only(sv);
7978     if (!append) {
7979         SvCUR_set(sv,0);
7980     }
7981     if (PerlIO_isutf8(fp))
7982         SvUTF8_on(sv);
7983
7984     if (IN_PERL_COMPILETIME) {
7985         /* we always read code in line mode */
7986         rsptr = "\n";
7987         rslen = 1;
7988     }
7989     else if (RsSNARF(PL_rs)) {
7990         /* If it is a regular disk file use size from stat() as estimate
7991            of amount we are going to read -- may result in mallocing
7992            more memory than we really need if the layers below reduce
7993            the size we read (e.g. CRLF or a gzip layer).
7994          */
7995         Stat_t st;
7996         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7997             const Off_t offset = PerlIO_tell(fp);
7998             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7999                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8000             }
8001         }
8002         rsptr = NULL;
8003         rslen = 0;
8004     }
8005     else if (RsRECORD(PL_rs)) {
8006         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8007     }
8008     else if (RsPARA(PL_rs)) {
8009         rsptr = "\n\n";
8010         rslen = 2;
8011         rspara = 1;
8012     }
8013     else {
8014         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8015         if (PerlIO_isutf8(fp)) {
8016             rsptr = SvPVutf8(PL_rs, rslen);
8017         }
8018         else {
8019             if (SvUTF8(PL_rs)) {
8020                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8021                     Perl_croak(aTHX_ "Wide character in $/");
8022                 }
8023             }
8024             rsptr = SvPV_const(PL_rs, rslen);
8025         }
8026     }
8027
8028     rslast = rslen ? rsptr[rslen - 1] : '\0';
8029
8030     if (rspara) {               /* have to do this both before and after */
8031         do {                    /* to make sure file boundaries work right */
8032             if (PerlIO_eof(fp))
8033                 return 0;
8034             i = PerlIO_getc(fp);
8035             if (i != '\n') {
8036                 if (i == -1)
8037                     return 0;
8038                 PerlIO_ungetc(fp,i);
8039                 break;
8040             }
8041         } while (i != EOF);
8042     }
8043
8044     /* See if we know enough about I/O mechanism to cheat it ! */
8045
8046     /* This used to be #ifdef test - it is made run-time test for ease
8047        of abstracting out stdio interface. One call should be cheap
8048        enough here - and may even be a macro allowing compile
8049        time optimization.
8050      */
8051
8052     if (PerlIO_fast_gets(fp)) {
8053
8054     /*
8055      * We're going to steal some values from the stdio struct
8056      * and put EVERYTHING in the innermost loop into registers.
8057      */
8058     STDCHAR *ptr;
8059     STRLEN bpx;
8060     I32 shortbuffered;
8061
8062 #if defined(VMS) && defined(PERLIO_IS_STDIO)
8063     /* An ungetc()d char is handled separately from the regular
8064      * buffer, so we getc() it back out and stuff it in the buffer.
8065      */
8066     i = PerlIO_getc(fp);
8067     if (i == EOF) return 0;
8068     *(--((*fp)->_ptr)) = (unsigned char) i;
8069     (*fp)->_cnt++;
8070 #endif
8071
8072     /* Here is some breathtakingly efficient cheating */
8073
8074     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
8075     /* make sure we have the room */
8076     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8077         /* Not room for all of it
8078            if we are looking for a separator and room for some
8079          */
8080         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8081             /* just process what we have room for */
8082             shortbuffered = cnt - SvLEN(sv) + append + 1;
8083             cnt -= shortbuffered;
8084         }
8085         else {
8086             shortbuffered = 0;
8087             /* remember that cnt can be negative */
8088             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8089         }
8090     }
8091     else
8092         shortbuffered = 0;
8093     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8094     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8095     DEBUG_P(PerlIO_printf(Perl_debug_log,
8096         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8097     DEBUG_P(PerlIO_printf(Perl_debug_log,
8098         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%zd, base=%"
8099          UVuf"\n",
8100                PTR2UV(PerlIO_get_ptr(fp)), PerlIO_get_cnt(fp),
8101                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8102     for (;;) {
8103       screamer:
8104         if (cnt > 0) {
8105             if (rslen) {
8106                 while (cnt > 0) {                    /* this     |  eat */
8107                     cnt--;
8108                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8109                         goto thats_all_folks;        /* screams  |  sed :-) */
8110                 }
8111             }
8112             else {
8113                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8114                 bp += cnt;                           /* screams  |  dust */
8115                 ptr += cnt;                          /* louder   |  sed :-) */
8116                 cnt = 0;
8117                 assert (!shortbuffered);
8118                 goto cannot_be_shortbuffered;
8119             }
8120         }
8121         
8122         if (shortbuffered) {            /* oh well, must extend */
8123             cnt = shortbuffered;
8124             shortbuffered = 0;
8125             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8126             SvCUR_set(sv, bpx);
8127             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8128             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8129             continue;
8130         }
8131
8132     cannot_be_shortbuffered:
8133         DEBUG_P(PerlIO_printf(Perl_debug_log,
8134                              "Screamer: going to getc, ptr=%"UVuf", cnt=%zd\n",
8135                               PTR2UV(ptr),cnt));
8136         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8137
8138         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8139            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%zd, base=%"UVuf"\n",
8140             PTR2UV(PerlIO_get_ptr(fp)), PerlIO_get_cnt(fp),
8141             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8142
8143         /* This used to call 'filbuf' in stdio form, but as that behaves like
8144            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8145            another abstraction.  */
8146         i   = PerlIO_getc(fp);          /* get more characters */
8147
8148         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8149            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%zd, base=%"UVuf"\n",
8150             PTR2UV(PerlIO_get_ptr(fp)), PerlIO_get_cnt(fp),
8151             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8152
8153         cnt = PerlIO_get_cnt(fp);
8154         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8155         DEBUG_P(PerlIO_printf(Perl_debug_log,
8156             "Screamer: after getc, ptr=%"UVuf", cnt=%zd\n",
8157              PTR2UV(ptr),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=%zd\n",PTR2UV(ptr),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=%zd, base=%"UVuf
8185         "\n",
8186         PTR2UV(PerlIO_get_ptr(fp)), PerlIO_get_cnt(fp),
8187         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8188     *bp = '\0';
8189     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8190     DEBUG_P(PerlIO_printf(Perl_debug_log,
8191         "Screamer: done, len=%ld, string=|%.*s|\n",
8192         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8193     }
8194    else
8195     {
8196        /*The big, slow, and stupid way. */
8197 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8198         STDCHAR *buf = NULL;
8199         Newx(buf, 8192, STDCHAR);
8200         assert(buf);
8201 #else
8202         STDCHAR buf[8192];
8203 #endif
8204
8205 screamer2:
8206         if (rslen) {
8207             const STDCHAR * const bpe = buf + sizeof(buf);
8208             bp = buf;
8209             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8210                 ; /* keep reading */
8211             cnt = bp - buf;
8212         }
8213         else {
8214             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8215             /* Accommodate broken VAXC compiler, which applies U8 cast to
8216              * both args of ?: operator, causing EOF to change into 255
8217              */
8218             if (cnt > 0)
8219                  i = (U8)buf[cnt - 1];
8220             else
8221                  i = EOF;
8222         }
8223
8224         if (cnt < 0)
8225             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8226         if (append)
8227             sv_catpvn_nomg(sv, (char *) buf, cnt);
8228         else
8229             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8230
8231         if (i != EOF &&                 /* joy */
8232             (!rslen ||
8233              SvCUR(sv) < rslen ||
8234              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8235         {
8236             append = -1;
8237             /*
8238              * If we're reading from a TTY and we get a short read,
8239              * indicating that the user hit his EOF character, we need
8240              * to notice it now, because if we try to read from the TTY
8241              * again, the EOF condition will disappear.
8242              *
8243              * The comparison of cnt to sizeof(buf) is an optimization
8244              * that prevents unnecessary calls to feof().
8245              *
8246              * - jik 9/25/96
8247              */
8248             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8249                 goto screamer2;
8250         }
8251
8252 #ifdef USE_HEAP_INSTEAD_OF_STACK
8253         Safefree(buf);
8254 #endif
8255     }
8256
8257     if (rspara) {               /* have to do this both before and after */
8258         while (i != EOF) {      /* to make sure file boundaries work right */
8259             i = PerlIO_getc(fp);
8260             if (i != '\n') {
8261                 PerlIO_ungetc(fp,i);
8262                 break;
8263             }
8264         }
8265     }
8266
8267     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8268 }
8269
8270 /*
8271 =for apidoc sv_inc
8272
8273 Auto-increment of the value in the SV, doing string to numeric conversion
8274 if necessary.  Handles 'get' magic and operator overloading.
8275
8276 =cut
8277 */
8278
8279 void
8280 Perl_sv_inc(pTHX_ SV *const sv)
8281 {
8282     if (!sv)
8283         return;
8284     SvGETMAGIC(sv);
8285     sv_inc_nomg(sv);
8286 }
8287
8288 /*
8289 =for apidoc sv_inc_nomg
8290
8291 Auto-increment of the value in the SV, doing string to numeric conversion
8292 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8293
8294 =cut
8295 */
8296
8297 void
8298 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8299 {
8300     dVAR;
8301     char *d;
8302     int flags;
8303
8304     if (!sv)
8305         return;
8306     if (SvTHINKFIRST(sv)) {
8307         if (SvREADONLY(sv)) {
8308                 Perl_croak_no_modify();
8309         }
8310         if (SvROK(sv)) {
8311             IV i;
8312             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8313                 return;
8314             i = PTR2IV(SvRV(sv));
8315             sv_unref(sv);
8316             sv_setiv(sv, i);
8317         }
8318         else sv_force_normal_flags(sv, 0);
8319     }
8320     flags = SvFLAGS(sv);
8321     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8322         /* It's (privately or publicly) a float, but not tested as an
8323            integer, so test it to see. */
8324         (void) SvIV(sv);
8325         flags = SvFLAGS(sv);
8326     }
8327     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8328         /* It's publicly an integer, or privately an integer-not-float */
8329 #ifdef PERL_PRESERVE_IVUV
8330       oops_its_int:
8331 #endif
8332         if (SvIsUV(sv)) {
8333             if (SvUVX(sv) == UV_MAX)
8334                 sv_setnv(sv, UV_MAX_P1);
8335             else
8336                 (void)SvIOK_only_UV(sv);
8337                 SvUV_set(sv, SvUVX(sv) + 1);
8338         } else {
8339             if (SvIVX(sv) == IV_MAX)
8340                 sv_setuv(sv, (UV)IV_MAX + 1);
8341             else {
8342                 (void)SvIOK_only(sv);
8343                 SvIV_set(sv, SvIVX(sv) + 1);
8344             }   
8345         }
8346         return;
8347     }
8348     if (flags & SVp_NOK) {
8349         const NV was = SvNVX(sv);
8350         if (NV_OVERFLOWS_INTEGERS_AT &&
8351             was >= NV_OVERFLOWS_INTEGERS_AT) {
8352             /* diag_listed_as: Lost precision when %s %f by 1 */
8353             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8354                            "Lost precision when incrementing %" NVff " by 1",
8355                            was);
8356         }
8357         (void)SvNOK_only(sv);
8358         SvNV_set(sv, was + 1.0);
8359         return;
8360     }
8361
8362     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8363         if ((flags & SVTYPEMASK) < SVt_PVIV)
8364             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8365         (void)SvIOK_only(sv);
8366         SvIV_set(sv, 1);
8367         return;
8368     }
8369     d = SvPVX(sv);
8370     while (isALPHA(*d)) d++;
8371     while (isDIGIT(*d)) d++;
8372     if (d < SvEND(sv)) {
8373         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8374 #ifdef PERL_PRESERVE_IVUV
8375         /* Got to punt this as an integer if needs be, but we don't issue
8376            warnings. Probably ought to make the sv_iv_please() that does
8377            the conversion if possible, and silently.  */
8378         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8379             /* Need to try really hard to see if it's an integer.
8380                9.22337203685478e+18 is an integer.
8381                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8382                so $a="9.22337203685478e+18"; $a+0; $a++
8383                needs to be the same as $a="9.22337203685478e+18"; $a++
8384                or we go insane. */
8385         
8386             (void) sv_2iv(sv);
8387             if (SvIOK(sv))
8388                 goto oops_its_int;
8389
8390             /* sv_2iv *should* have made this an NV */
8391             if (flags & SVp_NOK) {
8392                 (void)SvNOK_only(sv);
8393                 SvNV_set(sv, SvNVX(sv) + 1.0);
8394                 return;
8395             }
8396             /* I don't think we can get here. Maybe I should assert this
8397                And if we do get here I suspect that sv_setnv will croak. NWC
8398                Fall through. */
8399 #if defined(USE_LONG_DOUBLE)
8400             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",
8401                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8402 #else
8403             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8404                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8405 #endif
8406         }
8407 #endif /* PERL_PRESERVE_IVUV */
8408         if (!numtype && ckWARN(WARN_NUMERIC))
8409             not_incrementable(sv);
8410         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8411         return;
8412     }
8413     d--;
8414     while (d >= SvPVX_const(sv)) {
8415         if (isDIGIT(*d)) {
8416             if (++*d <= '9')
8417                 return;
8418             *(d--) = '0';
8419         }
8420         else {
8421 #ifdef EBCDIC
8422             /* MKS: The original code here died if letters weren't consecutive.
8423              * at least it didn't have to worry about non-C locales.  The
8424              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8425              * arranged in order (although not consecutively) and that only
8426              * [A-Za-z] are accepted by isALPHA in the C locale.
8427              */
8428             if (*d != 'z' && *d != 'Z') {
8429                 do { ++*d; } while (!isALPHA(*d));
8430                 return;
8431             }
8432             *(d--) -= 'z' - 'a';
8433 #else
8434             ++*d;
8435             if (isALPHA(*d))
8436                 return;
8437             *(d--) -= 'z' - 'a' + 1;
8438 #endif
8439         }
8440     }
8441     /* oh,oh, the number grew */
8442     SvGROW(sv, SvCUR(sv) + 2);
8443     SvCUR_set(sv, SvCUR(sv) + 1);
8444     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8445         *d = d[-1];
8446     if (isDIGIT(d[1]))
8447         *d = '1';
8448     else
8449         *d = d[1];
8450 }
8451
8452 /*
8453 =for apidoc sv_dec
8454
8455 Auto-decrement of the value in the SV, doing string to numeric conversion
8456 if necessary.  Handles 'get' magic and operator overloading.
8457
8458 =cut
8459 */
8460
8461 void
8462 Perl_sv_dec(pTHX_ SV *const sv)
8463 {
8464     dVAR;
8465     if (!sv)
8466         return;
8467     SvGETMAGIC(sv);
8468     sv_dec_nomg(sv);
8469 }
8470
8471 /*
8472 =for apidoc sv_dec_nomg
8473
8474 Auto-decrement of the value in the SV, doing string to numeric conversion
8475 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8476
8477 =cut
8478 */
8479
8480 void
8481 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8482 {
8483     dVAR;
8484     int flags;
8485
8486     if (!sv)
8487         return;
8488     if (SvTHINKFIRST(sv)) {
8489         if (SvREADONLY(sv)) {
8490                 Perl_croak_no_modify();
8491         }
8492         if (SvROK(sv)) {
8493             IV i;
8494             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8495                 return;
8496             i = PTR2IV(SvRV(sv));
8497             sv_unref(sv);
8498             sv_setiv(sv, i);
8499         }
8500         else sv_force_normal_flags(sv, 0);
8501     }
8502     /* Unlike sv_inc we don't have to worry about string-never-numbers
8503        and keeping them magic. But we mustn't warn on punting */
8504     flags = SvFLAGS(sv);
8505     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8506         /* It's publicly an integer, or privately an integer-not-float */
8507 #ifdef PERL_PRESERVE_IVUV
8508       oops_its_int:
8509 #endif
8510         if (SvIsUV(sv)) {
8511             if (SvUVX(sv) == 0) {
8512                 (void)SvIOK_only(sv);
8513                 SvIV_set(sv, -1);
8514             }
8515             else {
8516                 (void)SvIOK_only_UV(sv);
8517                 SvUV_set(sv, SvUVX(sv) - 1);
8518             }   
8519         } else {
8520             if (SvIVX(sv) == IV_MIN) {
8521                 sv_setnv(sv, (NV)IV_MIN);
8522                 goto oops_its_num;
8523             }
8524             else {
8525                 (void)SvIOK_only(sv);
8526                 SvIV_set(sv, SvIVX(sv) - 1);
8527             }   
8528         }
8529         return;
8530     }
8531     if (flags & SVp_NOK) {
8532     oops_its_num:
8533         {
8534             const NV was = SvNVX(sv);
8535             if (NV_OVERFLOWS_INTEGERS_AT &&
8536                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8537                 /* diag_listed_as: Lost precision when %s %f by 1 */
8538                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8539                                "Lost precision when decrementing %" NVff " by 1",
8540                                was);
8541             }
8542             (void)SvNOK_only(sv);
8543             SvNV_set(sv, was - 1.0);
8544             return;
8545         }
8546     }
8547     if (!(flags & SVp_POK)) {
8548         if ((flags & SVTYPEMASK) < SVt_PVIV)
8549             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8550         SvIV_set(sv, -1);
8551         (void)SvIOK_only(sv);
8552         return;
8553     }
8554 #ifdef PERL_PRESERVE_IVUV
8555     {
8556         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8557         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8558             /* Need to try really hard to see if it's an integer.
8559                9.22337203685478e+18 is an integer.
8560                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8561                so $a="9.22337203685478e+18"; $a+0; $a--
8562                needs to be the same as $a="9.22337203685478e+18"; $a--
8563                or we go insane. */
8564         
8565             (void) sv_2iv(sv);
8566             if (SvIOK(sv))
8567                 goto oops_its_int;
8568
8569             /* sv_2iv *should* have made this an NV */
8570             if (flags & SVp_NOK) {
8571                 (void)SvNOK_only(sv);
8572                 SvNV_set(sv, SvNVX(sv) - 1.0);
8573                 return;
8574             }
8575             /* I don't think we can get here. Maybe I should assert this
8576                And if we do get here I suspect that sv_setnv will croak. NWC
8577                Fall through. */
8578 #if defined(USE_LONG_DOUBLE)
8579             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",
8580                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8581 #else
8582             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8583                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8584 #endif
8585         }
8586     }
8587 #endif /* PERL_PRESERVE_IVUV */
8588     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8589 }
8590
8591 /* this define is used to eliminate a chunk of duplicated but shared logic
8592  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8593  * used anywhere but here - yves
8594  */
8595 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8596     STMT_START {      \
8597         EXTEND_MORTAL(1); \
8598         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8599     } STMT_END
8600
8601 /*
8602 =for apidoc sv_mortalcopy
8603
8604 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8605 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8606 explicit call to FREETMPS, or by an implicit call at places such as
8607 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8608
8609 =cut
8610 */
8611
8612 /* Make a string that will exist for the duration of the expression
8613  * evaluation.  Actually, it may have to last longer than that, but
8614  * hopefully we won't free it until it has been assigned to a
8615  * permanent location. */
8616
8617 SV *
8618 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8619 {
8620     dVAR;
8621     SV *sv;
8622
8623     if (flags & SV_GMAGIC)
8624         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8625     new_SV(sv);
8626     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8627     PUSH_EXTEND_MORTAL__SV_C(sv);
8628     SvTEMP_on(sv);
8629     return sv;
8630 }
8631
8632 /*
8633 =for apidoc sv_newmortal
8634
8635 Creates a new null SV which is mortal.  The reference count of the SV is
8636 set to 1.  It will be destroyed "soon", either by an explicit call to
8637 FREETMPS, or by an implicit call at places such as statement boundaries.
8638 See also C<sv_mortalcopy> and C<sv_2mortal>.
8639
8640 =cut
8641 */
8642
8643 SV *
8644 Perl_sv_newmortal(pTHX)
8645 {
8646     dVAR;
8647     SV *sv;
8648
8649     new_SV(sv);
8650     SvFLAGS(sv) = SVs_TEMP;
8651     PUSH_EXTEND_MORTAL__SV_C(sv);
8652     return sv;
8653 }
8654
8655
8656 /*
8657 =for apidoc newSVpvn_flags
8658
8659 Creates a new SV and copies a string into it.  The reference count for the
8660 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8661 string.  You are responsible for ensuring that the source string is at least
8662 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8663 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8664 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8665 returning.  If C<SVf_UTF8> is set, C<s>
8666 is considered to be in UTF-8 and the
8667 C<SVf_UTF8> flag will be set on the new SV.
8668 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8669
8670     #define newSVpvn_utf8(s, len, u)                    \
8671         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8672
8673 =cut
8674 */
8675
8676 SV *
8677 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8678 {
8679     dVAR;
8680     SV *sv;
8681
8682     /* All the flags we don't support must be zero.
8683        And we're new code so I'm going to assert this from the start.  */
8684     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8685     new_SV(sv);
8686     sv_setpvn(sv,s,len);
8687
8688     /* This code used to do a sv_2mortal(), however we now unroll the call to
8689      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8690      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8691      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8692      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8693      * means that we eliminate quite a few steps than it looks - Yves
8694      * (explaining patch by gfx) */
8695
8696     SvFLAGS(sv) |= flags;
8697
8698     if(flags & SVs_TEMP){
8699         PUSH_EXTEND_MORTAL__SV_C(sv);
8700     }
8701
8702     return sv;
8703 }
8704
8705 /*
8706 =for apidoc sv_2mortal
8707
8708 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8709 by an explicit call to FREETMPS, or by an implicit call at places such as
8710 statement boundaries.  SvTEMP() is turned on which means that the SV's
8711 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8712 and C<sv_mortalcopy>.
8713
8714 =cut
8715 */
8716
8717 SV *
8718 Perl_sv_2mortal(pTHX_ SV *const sv)
8719 {
8720     dVAR;
8721     if (!sv)
8722         return NULL;
8723     if (SvIMMORTAL(sv))
8724         return sv;
8725     PUSH_EXTEND_MORTAL__SV_C(sv);
8726     SvTEMP_on(sv);
8727     return sv;
8728 }
8729
8730 /*
8731 =for apidoc newSVpv
8732
8733 Creates a new SV and copies a string into it.  The reference count for the
8734 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8735 strlen().  For efficiency, consider using C<newSVpvn> instead.
8736
8737 =cut
8738 */
8739
8740 SV *
8741 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8742 {
8743     dVAR;
8744     SV *sv;
8745
8746     new_SV(sv);
8747     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8748     return sv;
8749 }
8750
8751 /*
8752 =for apidoc newSVpvn
8753
8754 Creates a new SV and copies a buffer into it, which may contain NUL characters
8755 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8756 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8757 are responsible for ensuring that the source buffer is at least
8758 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8759 undefined.
8760
8761 =cut
8762 */
8763
8764 SV *
8765 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8766 {
8767     dVAR;
8768     SV *sv;
8769
8770     new_SV(sv);
8771     sv_setpvn(sv,buffer,len);
8772     return sv;
8773 }
8774
8775 /*
8776 =for apidoc newSVhek
8777
8778 Creates a new SV from the hash key structure.  It will generate scalars that
8779 point to the shared string table where possible.  Returns a new (undefined)
8780 SV if the hek is NULL.
8781
8782 =cut
8783 */
8784
8785 SV *
8786 Perl_newSVhek(pTHX_ const HEK *const hek)
8787 {
8788     dVAR;
8789     if (!hek) {
8790         SV *sv;
8791
8792         new_SV(sv);
8793         return sv;
8794     }
8795
8796     if (HEK_LEN(hek) == HEf_SVKEY) {
8797         return newSVsv(*(SV**)HEK_KEY(hek));
8798     } else {
8799         const int flags = HEK_FLAGS(hek);
8800         if (flags & HVhek_WASUTF8) {
8801             /* Trouble :-)
8802                Andreas would like keys he put in as utf8 to come back as utf8
8803             */
8804             STRLEN utf8_len = HEK_LEN(hek);
8805             SV * const sv = newSV_type(SVt_PV);
8806             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8807             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8808             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8809             SvUTF8_on (sv);
8810             return sv;
8811         } else if (flags & HVhek_UNSHARED) {
8812             /* A hash that isn't using shared hash keys has to have
8813                the flag in every key so that we know not to try to call
8814                share_hek_hek on it.  */
8815
8816             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8817             if (HEK_UTF8(hek))
8818                 SvUTF8_on (sv);
8819             return sv;
8820         }
8821         /* This will be overwhelminly the most common case.  */
8822         {
8823             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8824                more efficient than sharepvn().  */
8825             SV *sv;
8826
8827             new_SV(sv);
8828             sv_upgrade(sv, SVt_PV);
8829             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8830             SvCUR_set(sv, HEK_LEN(hek));
8831             SvLEN_set(sv, 0);
8832             SvIsCOW_on(sv);
8833             SvPOK_on(sv);
8834             if (HEK_UTF8(hek))
8835                 SvUTF8_on(sv);
8836             return sv;
8837         }
8838     }
8839 }
8840
8841 /*
8842 =for apidoc newSVpvn_share
8843
8844 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8845 table.  If the string does not already exist in the table, it is
8846 created first.  Turns on the SvIsCOW flag (or READONLY
8847 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8848 is non-zero, that value is used; otherwise the hash is computed.
8849 The string's hash can later be retrieved from the SV
8850 with the C<SvSHARED_HASH()> macro.  The idea here is
8851 that as the string table is used for shared hash keys these strings will have
8852 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8853
8854 =cut
8855 */
8856
8857 SV *
8858 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8859 {
8860     dVAR;
8861     SV *sv;
8862     bool is_utf8 = FALSE;
8863     const char *const orig_src = src;
8864
8865     if (len < 0) {
8866         STRLEN tmplen = -len;
8867         is_utf8 = TRUE;
8868         /* See the note in hv.c:hv_fetch() --jhi */
8869         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8870         len = tmplen;
8871     }
8872     if (!hash)
8873         PERL_HASH(hash, src, len);
8874     new_SV(sv);
8875     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8876        changes here, update it there too.  */
8877     sv_upgrade(sv, SVt_PV);
8878     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8879     SvCUR_set(sv, len);
8880     SvLEN_set(sv, 0);
8881     SvIsCOW_on(sv);
8882     SvPOK_on(sv);
8883     if (is_utf8)
8884         SvUTF8_on(sv);
8885     if (src != orig_src)
8886         Safefree(src);
8887     return sv;
8888 }
8889
8890 /*
8891 =for apidoc newSVpv_share
8892
8893 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8894 string/length pair.
8895
8896 =cut
8897 */
8898
8899 SV *
8900 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8901 {
8902     return newSVpvn_share(src, strlen(src), hash);
8903 }
8904
8905 #if defined(PERL_IMPLICIT_CONTEXT)
8906
8907 /* pTHX_ magic can't cope with varargs, so this is a no-context
8908  * version of the main function, (which may itself be aliased to us).
8909  * Don't access this version directly.
8910  */
8911
8912 SV *
8913 Perl_newSVpvf_nocontext(const char *const pat, ...)
8914 {
8915     dTHX;
8916     SV *sv;
8917     va_list args;
8918
8919     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8920
8921     va_start(args, pat);
8922     sv = vnewSVpvf(pat, &args);
8923     va_end(args);
8924     return sv;
8925 }
8926 #endif
8927
8928 /*
8929 =for apidoc newSVpvf
8930
8931 Creates a new SV and initializes it with the string formatted like
8932 C<sprintf>.
8933
8934 =cut
8935 */
8936
8937 SV *
8938 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8939 {
8940     SV *sv;
8941     va_list args;
8942
8943     PERL_ARGS_ASSERT_NEWSVPVF;
8944
8945     va_start(args, pat);
8946     sv = vnewSVpvf(pat, &args);
8947     va_end(args);
8948     return sv;
8949 }
8950
8951 /* backend for newSVpvf() and newSVpvf_nocontext() */
8952
8953 SV *
8954 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8955 {
8956     dVAR;
8957     SV *sv;
8958
8959     PERL_ARGS_ASSERT_VNEWSVPVF;
8960
8961     new_SV(sv);
8962     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8963     return sv;
8964 }
8965
8966 /*
8967 =for apidoc newSVnv
8968
8969 Creates a new SV and copies a floating point value into it.
8970 The reference count for the SV is set to 1.
8971
8972 =cut
8973 */
8974
8975 SV *
8976 Perl_newSVnv(pTHX_ const NV n)
8977 {
8978     dVAR;
8979     SV *sv;
8980
8981     new_SV(sv);
8982     sv_setnv(sv,n);
8983     return sv;
8984 }
8985
8986 /*
8987 =for apidoc newSViv
8988
8989 Creates a new SV and copies an integer into it.  The reference count for the
8990 SV is set to 1.
8991
8992 =cut
8993 */
8994
8995 SV *
8996 Perl_newSViv(pTHX_ const IV i)
8997 {
8998     dVAR;
8999     SV *sv;
9000
9001     new_SV(sv);
9002     sv_setiv(sv,i);
9003     return sv;
9004 }
9005
9006 /*
9007 =for apidoc newSVuv
9008
9009 Creates a new SV and copies an unsigned integer into it.
9010 The reference count for the SV is set to 1.
9011
9012 =cut
9013 */
9014
9015 SV *
9016 Perl_newSVuv(pTHX_ const UV u)
9017 {
9018     dVAR;
9019     SV *sv;
9020
9021     new_SV(sv);
9022     sv_setuv(sv,u);
9023     return sv;
9024 }
9025
9026 /*
9027 =for apidoc newSV_type
9028
9029 Creates a new SV, of the type specified.  The reference count for the new SV
9030 is set to 1.
9031
9032 =cut
9033 */
9034
9035 SV *
9036 Perl_newSV_type(pTHX_ const svtype type)
9037 {
9038     SV *sv;
9039
9040     new_SV(sv);
9041     sv_upgrade(sv, type);
9042     return sv;
9043 }
9044
9045 /*
9046 =for apidoc newRV_noinc
9047
9048 Creates an RV wrapper for an SV.  The reference count for the original
9049 SV is B<not> incremented.
9050
9051 =cut
9052 */
9053
9054 SV *
9055 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9056 {
9057     dVAR;
9058     SV *sv = newSV_type(SVt_IV);
9059
9060     PERL_ARGS_ASSERT_NEWRV_NOINC;
9061
9062     SvTEMP_off(tmpRef);
9063     SvRV_set(sv, tmpRef);
9064     SvROK_on(sv);
9065     return sv;
9066 }
9067
9068 /* newRV_inc is the official function name to use now.
9069  * newRV_inc is in fact #defined to newRV in sv.h
9070  */
9071
9072 SV *
9073 Perl_newRV(pTHX_ SV *const sv)
9074 {
9075     dVAR;
9076
9077     PERL_ARGS_ASSERT_NEWRV;
9078
9079     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9080 }
9081
9082 /*
9083 =for apidoc newSVsv
9084
9085 Creates a new SV which is an exact duplicate of the original SV.
9086 (Uses C<sv_setsv>.)
9087
9088 =cut
9089 */
9090
9091 SV *
9092 Perl_newSVsv(pTHX_ SV *const old)
9093 {
9094     dVAR;
9095     SV *sv;
9096
9097     if (!old)
9098         return NULL;
9099     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9100         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9101         return NULL;
9102     }
9103     /* Do this here, otherwise we leak the new SV if this croaks. */
9104     SvGETMAGIC(old);
9105     new_SV(sv);
9106     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9107        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9108     sv_setsv_flags(sv, old, SV_NOSTEAL);
9109     return sv;
9110 }
9111
9112 /*
9113 =for apidoc sv_reset
9114
9115 Underlying implementation for the C<reset> Perl function.
9116 Note that the perl-level function is vaguely deprecated.
9117
9118 =cut
9119 */
9120
9121 void
9122 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9123 {
9124     PERL_ARGS_ASSERT_SV_RESET;
9125
9126     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9127 }
9128
9129 void
9130 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9131 {
9132     dVAR;
9133     char todo[PERL_UCHAR_MAX+1];
9134     const char *send;
9135
9136     if (!stash || SvTYPE(stash) != SVt_PVHV)
9137         return;
9138
9139     if (!s) {           /* reset ?? searches */
9140         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9141         if (mg) {
9142             const U32 count = mg->mg_len / sizeof(PMOP**);
9143             PMOP **pmp = (PMOP**) mg->mg_ptr;
9144             PMOP *const *const end = pmp + count;
9145
9146             while (pmp < end) {
9147 #ifdef USE_ITHREADS
9148                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9149 #else
9150                 (*pmp)->op_pmflags &= ~PMf_USED;
9151 #endif
9152                 ++pmp;
9153             }
9154         }
9155         return;
9156     }
9157
9158     /* reset variables */
9159
9160     if (!HvARRAY(stash))
9161         return;
9162
9163     Zero(todo, 256, char);
9164     send = s + len;
9165     while (s < send) {
9166         I32 max;
9167         I32 i = (unsigned char)*s;
9168         if (s[1] == '-') {
9169             s += 2;
9170         }
9171         max = (unsigned char)*s++;
9172         for ( ; i <= max; i++) {
9173             todo[i] = 1;
9174         }
9175         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9176             HE *entry;
9177             for (entry = HvARRAY(stash)[i];
9178                  entry;
9179                  entry = HeNEXT(entry))
9180             {
9181                 GV *gv;
9182                 SV *sv;
9183
9184                 if (!todo[(U8)*HeKEY(entry)])
9185                     continue;
9186                 gv = MUTABLE_GV(HeVAL(entry));
9187                 sv = GvSV(gv);
9188                 if (sv && !SvREADONLY(sv)) {
9189                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9190                     if (!isGV(sv)) SvOK_off(sv);
9191                 }
9192                 if (GvAV(gv)) {
9193                     av_clear(GvAV(gv));
9194                 }
9195                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9196                     hv_clear(GvHV(gv));
9197                 }
9198             }
9199         }
9200     }
9201 }
9202
9203 /*
9204 =for apidoc sv_2io
9205
9206 Using various gambits, try to get an IO from an SV: the IO slot if its a
9207 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9208 named after the PV if we're a string.
9209
9210 'Get' magic is ignored on the sv passed in, but will be called on
9211 C<SvRV(sv)> if sv is an RV.
9212
9213 =cut
9214 */
9215
9216 IO*
9217 Perl_sv_2io(pTHX_ SV *const sv)
9218 {
9219     IO* io;
9220     GV* gv;
9221
9222     PERL_ARGS_ASSERT_SV_2IO;
9223
9224     switch (SvTYPE(sv)) {
9225     case SVt_PVIO:
9226         io = MUTABLE_IO(sv);
9227         break;
9228     case SVt_PVGV:
9229     case SVt_PVLV:
9230         if (isGV_with_GP(sv)) {
9231             gv = MUTABLE_GV(sv);
9232             io = GvIO(gv);
9233             if (!io)
9234                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9235                                     HEKfARG(GvNAME_HEK(gv)));
9236             break;
9237         }
9238         /* FALL THROUGH */
9239     default:
9240         if (!SvOK(sv))
9241             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9242         if (SvROK(sv)) {
9243             SvGETMAGIC(SvRV(sv));
9244             return sv_2io(SvRV(sv));
9245         }
9246         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9247         if (gv)
9248             io = GvIO(gv);
9249         else
9250             io = 0;
9251         if (!io) {
9252             SV *newsv = sv;
9253             if (SvGMAGICAL(sv)) {
9254                 newsv = sv_newmortal();
9255                 sv_setsv_nomg(newsv, sv);
9256             }
9257             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9258         }
9259         break;
9260     }
9261     return io;
9262 }
9263
9264 /*
9265 =for apidoc sv_2cv
9266
9267 Using various gambits, try to get a CV from an SV; in addition, try if
9268 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9269 The flags in C<lref> are passed to gv_fetchsv.
9270
9271 =cut
9272 */
9273
9274 CV *
9275 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9276 {
9277     dVAR;
9278     GV *gv = NULL;
9279     CV *cv = NULL;
9280
9281     PERL_ARGS_ASSERT_SV_2CV;
9282
9283     if (!sv) {
9284         *st = NULL;
9285         *gvp = NULL;
9286         return NULL;
9287     }
9288     switch (SvTYPE(sv)) {
9289     case SVt_PVCV:
9290         *st = CvSTASH(sv);
9291         *gvp = NULL;
9292         return MUTABLE_CV(sv);
9293     case SVt_PVHV:
9294     case SVt_PVAV:
9295         *st = NULL;
9296         *gvp = NULL;
9297         return NULL;
9298     default:
9299         SvGETMAGIC(sv);
9300         if (SvROK(sv)) {
9301             if (SvAMAGIC(sv))
9302                 sv = amagic_deref_call(sv, to_cv_amg);
9303
9304             sv = SvRV(sv);
9305             if (SvTYPE(sv) == SVt_PVCV) {
9306                 cv = MUTABLE_CV(sv);
9307                 *gvp = NULL;
9308                 *st = CvSTASH(cv);
9309                 return cv;
9310             }
9311             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9312                 gv = MUTABLE_GV(sv);
9313             else
9314                 Perl_croak(aTHX_ "Not a subroutine reference");
9315         }
9316         else if (isGV_with_GP(sv)) {
9317             gv = MUTABLE_GV(sv);
9318         }
9319         else {
9320             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9321         }
9322         *gvp = gv;
9323         if (!gv) {
9324             *st = NULL;
9325             return NULL;
9326         }
9327         /* Some flags to gv_fetchsv mean don't really create the GV  */
9328         if (!isGV_with_GP(gv)) {
9329             *st = NULL;
9330             return NULL;
9331         }
9332         *st = GvESTASH(gv);
9333         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9334             /* XXX this is probably not what they think they're getting.
9335              * It has the same effect as "sub name;", i.e. just a forward
9336              * declaration! */
9337             newSTUB(gv,0);
9338         }
9339         return GvCVu(gv);
9340     }
9341 }
9342
9343 /*
9344 =for apidoc sv_true
9345
9346 Returns true if the SV has a true value by Perl's rules.
9347 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9348 instead use an in-line version.
9349
9350 =cut
9351 */
9352
9353 I32
9354 Perl_sv_true(pTHX_ SV *const sv)
9355 {
9356     if (!sv)
9357         return 0;
9358     if (SvPOK(sv)) {
9359         const XPV* const tXpv = (XPV*)SvANY(sv);
9360         if (tXpv &&
9361                 (tXpv->xpv_cur > 1 ||
9362                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9363             return 1;
9364         else
9365             return 0;
9366     }
9367     else {
9368         if (SvIOK(sv))
9369             return SvIVX(sv) != 0;
9370         else {
9371             if (SvNOK(sv))
9372                 return SvNVX(sv) != 0.0;
9373             else
9374                 return sv_2bool(sv);
9375         }
9376     }
9377 }
9378
9379 /*
9380 =for apidoc sv_pvn_force
9381
9382 Get a sensible string out of the SV somehow.
9383 A private implementation of the C<SvPV_force> macro for compilers which
9384 can't cope with complex macro expressions.  Always use the macro instead.
9385
9386 =for apidoc sv_pvn_force_flags
9387
9388 Get a sensible string out of the SV somehow.
9389 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9390 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9391 implemented in terms of this function.
9392 You normally want to use the various wrapper macros instead: see
9393 C<SvPV_force> and C<SvPV_force_nomg>
9394
9395 =cut
9396 */
9397
9398 char *
9399 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9400 {
9401     dVAR;
9402
9403     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9404
9405     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9406     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9407         sv_force_normal_flags(sv, 0);
9408
9409     if (SvPOK(sv)) {
9410         if (lp)
9411             *lp = SvCUR(sv);
9412     }
9413     else {
9414         char *s;
9415         STRLEN len;
9416  
9417         if (SvTYPE(sv) > SVt_PVLV
9418             || isGV_with_GP(sv))
9419             /* diag_listed_as: Can't coerce %s to %s in %s */
9420             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9421                 OP_DESC(PL_op));
9422         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9423         if (!s) {
9424           s = (char *)"";
9425         }
9426         if (lp)
9427             *lp = len;
9428
9429         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9430             if (SvROK(sv))
9431                 sv_unref(sv);
9432             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9433             SvGROW(sv, len + 1);
9434             Move(s,SvPVX(sv),len,char);
9435             SvCUR_set(sv, len);
9436             SvPVX(sv)[len] = '\0';
9437         }
9438         if (!SvPOK(sv)) {
9439             SvPOK_on(sv);               /* validate pointer */
9440             SvTAINT(sv);
9441             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9442                                   PTR2UV(sv),SvPVX_const(sv)));
9443         }
9444     }
9445     (void)SvPOK_only_UTF8(sv);
9446     return SvPVX_mutable(sv);
9447 }
9448
9449 /*
9450 =for apidoc sv_pvbyten_force
9451
9452 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9453 instead.
9454
9455 =cut
9456 */
9457
9458 char *
9459 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9460 {
9461     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9462
9463     sv_pvn_force(sv,lp);
9464     sv_utf8_downgrade(sv,0);
9465     *lp = SvCUR(sv);
9466     return SvPVX(sv);
9467 }
9468
9469 /*
9470 =for apidoc sv_pvutf8n_force
9471
9472 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9473 instead.
9474
9475 =cut
9476 */
9477
9478 char *
9479 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9480 {
9481     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9482
9483     sv_pvn_force(sv,0);
9484     sv_utf8_upgrade_nomg(sv);
9485     *lp = SvCUR(sv);
9486     return SvPVX(sv);
9487 }
9488
9489 /*
9490 =for apidoc sv_reftype
9491
9492 Returns a string describing what the SV is a reference to.
9493
9494 =cut
9495 */
9496
9497 const char *
9498 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9499 {
9500     PERL_ARGS_ASSERT_SV_REFTYPE;
9501     if (ob && SvOBJECT(sv)) {
9502         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9503     }
9504     else {
9505         switch (SvTYPE(sv)) {
9506         case SVt_NULL:
9507         case SVt_IV:
9508         case SVt_NV:
9509         case SVt_PV:
9510         case SVt_PVIV:
9511         case SVt_PVNV:
9512         case SVt_PVMG:
9513                                 if (SvVOK(sv))
9514                                     return "VSTRING";
9515                                 if (SvROK(sv))
9516                                     return "REF";
9517                                 else
9518                                     return "SCALAR";
9519
9520         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9521                                 /* tied lvalues should appear to be
9522                                  * scalars for backwards compatibility */
9523                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9524                                     ? "SCALAR" : "LVALUE");
9525         case SVt_PVAV:          return "ARRAY";
9526         case SVt_PVHV:          return "HASH";
9527         case SVt_PVCV:          return "CODE";
9528         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9529                                     ? "GLOB" : "SCALAR");
9530         case SVt_PVFM:          return "FORMAT";
9531         case SVt_PVIO:          return "IO";
9532         case SVt_INVLIST:       return "INVLIST";
9533         case SVt_REGEXP:        return "REGEXP";
9534         default:                return "UNKNOWN";
9535         }
9536     }
9537 }
9538
9539 /*
9540 =for apidoc sv_ref
9541
9542 Returns a SV describing what the SV passed in is a reference to.
9543
9544 =cut
9545 */
9546
9547 SV *
9548 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9549 {
9550     PERL_ARGS_ASSERT_SV_REF;
9551
9552     if (!dst)
9553         dst = sv_newmortal();
9554
9555     if (ob && SvOBJECT(sv)) {
9556         HvNAME_get(SvSTASH(sv))
9557                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9558                     : sv_setpvn(dst, "__ANON__", 8);
9559     }
9560     else {
9561         const char * reftype = sv_reftype(sv, 0);
9562         sv_setpv(dst, reftype);
9563     }
9564     return dst;
9565 }
9566
9567 /*
9568 =for apidoc sv_isobject
9569
9570 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9571 object.  If the SV is not an RV, or if the object is not blessed, then this
9572 will return false.
9573
9574 =cut
9575 */
9576
9577 int
9578 Perl_sv_isobject(pTHX_ SV *sv)
9579 {
9580     if (!sv)
9581         return 0;
9582     SvGETMAGIC(sv);
9583     if (!SvROK(sv))
9584         return 0;
9585     sv = SvRV(sv);
9586     if (!SvOBJECT(sv))
9587         return 0;
9588     return 1;
9589 }
9590
9591 /*
9592 =for apidoc sv_isa
9593
9594 Returns a boolean indicating whether the SV is blessed into the specified
9595 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9596 an inheritance relationship.
9597
9598 =cut
9599 */
9600
9601 int
9602 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9603 {
9604     const char *hvname;
9605
9606     PERL_ARGS_ASSERT_SV_ISA;
9607
9608     if (!sv)
9609         return 0;
9610     SvGETMAGIC(sv);
9611     if (!SvROK(sv))
9612         return 0;
9613     sv = SvRV(sv);
9614     if (!SvOBJECT(sv))
9615         return 0;
9616     hvname = HvNAME_get(SvSTASH(sv));
9617     if (!hvname)
9618         return 0;
9619
9620     return strEQ(hvname, name);
9621 }
9622
9623 /*
9624 =for apidoc newSVrv
9625
9626 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9627 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9628 SV will be blessed in the specified package.  The new SV is returned and its
9629 reference count is 1. The reference count 1 is owned by C<rv>.
9630
9631 =cut
9632 */
9633
9634 SV*
9635 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9636 {
9637     dVAR;
9638     SV *sv;
9639
9640     PERL_ARGS_ASSERT_NEWSVRV;
9641
9642     new_SV(sv);
9643
9644     SV_CHECK_THINKFIRST_COW_DROP(rv);
9645
9646     if (SvTYPE(rv) >= SVt_PVMG) {
9647         const U32 refcnt = SvREFCNT(rv);
9648         SvREFCNT(rv) = 0;
9649         sv_clear(rv);
9650         SvFLAGS(rv) = 0;
9651         SvREFCNT(rv) = refcnt;
9652
9653         sv_upgrade(rv, SVt_IV);
9654     } else if (SvROK(rv)) {
9655         SvREFCNT_dec(SvRV(rv));
9656     } else {
9657         prepare_SV_for_RV(rv);
9658     }
9659
9660     SvOK_off(rv);
9661     SvRV_set(rv, sv);
9662     SvROK_on(rv);
9663
9664     if (classname) {
9665         HV* const stash = gv_stashpv(classname, GV_ADD);
9666         (void)sv_bless(rv, stash);
9667     }
9668     return sv;
9669 }
9670
9671 SV *
9672 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9673 {
9674     SV * const lv = newSV_type(SVt_PVLV);
9675     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9676     LvTYPE(lv) = 'y';
9677     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9678     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9679     LvSTARGOFF(lv) = ix;
9680     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9681     return lv;
9682 }
9683
9684 /*
9685 =for apidoc sv_setref_pv
9686
9687 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9688 argument will be upgraded to an RV.  That RV will be modified to point to
9689 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9690 into the SV.  The C<classname> argument indicates the package for the
9691 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9692 will have a reference count of 1, and the RV will be returned.
9693
9694 Do not use with other Perl types such as HV, AV, SV, CV, because those
9695 objects will become corrupted by the pointer copy process.
9696
9697 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9698
9699 =cut
9700 */
9701
9702 SV*
9703 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9704 {
9705     dVAR;
9706
9707     PERL_ARGS_ASSERT_SV_SETREF_PV;
9708
9709     if (!pv) {
9710         sv_setsv(rv, &PL_sv_undef);
9711         SvSETMAGIC(rv);
9712     }
9713     else
9714         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9715     return rv;
9716 }
9717
9718 /*
9719 =for apidoc sv_setref_iv
9720
9721 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9722 argument will be upgraded to an RV.  That RV will be modified to point to
9723 the new SV.  The C<classname> argument indicates the package for the
9724 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9725 will have a reference count of 1, and the RV will be returned.
9726
9727 =cut
9728 */
9729
9730 SV*
9731 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9732 {
9733     PERL_ARGS_ASSERT_SV_SETREF_IV;
9734
9735     sv_setiv(newSVrv(rv,classname), iv);
9736     return rv;
9737 }
9738
9739 /*
9740 =for apidoc sv_setref_uv
9741
9742 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9743 argument will be upgraded to an RV.  That RV will be modified to point to
9744 the new SV.  The C<classname> argument indicates the package for the
9745 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9746 will have a reference count of 1, and the RV will be returned.
9747
9748 =cut
9749 */
9750
9751 SV*
9752 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9753 {
9754     PERL_ARGS_ASSERT_SV_SETREF_UV;
9755
9756     sv_setuv(newSVrv(rv,classname), uv);
9757     return rv;
9758 }
9759
9760 /*
9761 =for apidoc sv_setref_nv
9762
9763 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9764 argument will be upgraded to an RV.  That RV will be modified to point to
9765 the new SV.  The C<classname> argument indicates the package for the
9766 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9767 will have a reference count of 1, and the RV will be returned.
9768
9769 =cut
9770 */
9771
9772 SV*
9773 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9774 {
9775     PERL_ARGS_ASSERT_SV_SETREF_NV;
9776
9777     sv_setnv(newSVrv(rv,classname), nv);
9778     return rv;
9779 }
9780
9781 /*
9782 =for apidoc sv_setref_pvn
9783
9784 Copies a string into a new SV, optionally blessing the SV.  The length of the
9785 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9786 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9787 argument indicates the package for the blessing.  Set C<classname> to
9788 C<NULL> to avoid the blessing.  The new SV will have a reference count
9789 of 1, and the RV will be returned.
9790
9791 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9792
9793 =cut
9794 */
9795
9796 SV*
9797 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9798                    const char *const pv, const STRLEN n)
9799 {
9800     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9801
9802     sv_setpvn(newSVrv(rv,classname), pv, n);
9803     return rv;
9804 }
9805
9806 /*
9807 =for apidoc sv_bless
9808
9809 Blesses an SV into a specified package.  The SV must be an RV.  The package
9810 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9811 of the SV is unaffected.
9812
9813 =cut
9814 */
9815
9816 SV*
9817 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9818 {
9819     dVAR;
9820     SV *tmpRef;
9821     HV *oldstash = NULL;
9822
9823     PERL_ARGS_ASSERT_SV_BLESS;
9824
9825     SvGETMAGIC(sv);
9826     if (!SvROK(sv))
9827         Perl_croak(aTHX_ "Can't bless non-reference value");
9828     tmpRef = SvRV(sv);
9829     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9830         if (SvREADONLY(tmpRef))
9831             Perl_croak_no_modify();
9832         if (SvOBJECT(tmpRef)) {
9833             oldstash = SvSTASH(tmpRef);
9834         }
9835     }
9836     SvOBJECT_on(tmpRef);
9837     SvUPGRADE(tmpRef, SVt_PVMG);
9838     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9839     SvREFCNT_dec(oldstash);
9840
9841     if(SvSMAGICAL(tmpRef))
9842         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9843             mg_set(tmpRef);
9844
9845
9846
9847     return sv;
9848 }
9849
9850 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9851  * as it is after unglobbing it.
9852  */
9853
9854 PERL_STATIC_INLINE void
9855 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9856 {
9857     dVAR;
9858     void *xpvmg;
9859     HV *stash;
9860     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9861
9862     PERL_ARGS_ASSERT_SV_UNGLOB;
9863
9864     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9865     SvFAKE_off(sv);
9866     if (!(flags & SV_COW_DROP_PV))
9867         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9868
9869     if (GvGP(sv)) {
9870         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9871            && HvNAME_get(stash))
9872             mro_method_changed_in(stash);
9873         gp_free(MUTABLE_GV(sv));
9874     }
9875     if (GvSTASH(sv)) {
9876         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9877         GvSTASH(sv) = NULL;
9878     }
9879     GvMULTI_off(sv);
9880     if (GvNAME_HEK(sv)) {
9881         unshare_hek(GvNAME_HEK(sv));
9882     }
9883     isGV_with_GP_off(sv);
9884
9885     if(SvTYPE(sv) == SVt_PVGV) {
9886         /* need to keep SvANY(sv) in the right arena */
9887         xpvmg = new_XPVMG();
9888         StructCopy(SvANY(sv), xpvmg, XPVMG);
9889         del_XPVGV(SvANY(sv));
9890         SvANY(sv) = xpvmg;
9891
9892         SvFLAGS(sv) &= ~SVTYPEMASK;
9893         SvFLAGS(sv) |= SVt_PVMG;
9894     }
9895
9896     /* Intentionally not calling any local SET magic, as this isn't so much a
9897        set operation as merely an internal storage change.  */
9898     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9899     else sv_setsv_flags(sv, temp, 0);
9900
9901     if ((const GV *)sv == PL_last_in_gv)
9902         PL_last_in_gv = NULL;
9903     else if ((const GV *)sv == PL_statgv)
9904         PL_statgv = NULL;
9905 }
9906
9907 /*
9908 =for apidoc sv_unref_flags
9909
9910 Unsets the RV status of the SV, and decrements the reference count of
9911 whatever was being referenced by the RV.  This can almost be thought of
9912 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9913 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9914 (otherwise the decrementing is conditional on the reference count being
9915 different from one or the reference being a readonly SV).
9916 See C<SvROK_off>.
9917
9918 =cut
9919 */
9920
9921 void
9922 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9923 {
9924     SV* const target = SvRV(ref);
9925
9926     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9927
9928     if (SvWEAKREF(ref)) {
9929         sv_del_backref(target, ref);
9930         SvWEAKREF_off(ref);
9931         SvRV_set(ref, NULL);
9932         return;
9933     }
9934     SvRV_set(ref, NULL);
9935     SvROK_off(ref);
9936     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9937        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9938     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9939         SvREFCNT_dec_NN(target);
9940     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9941         sv_2mortal(target);     /* Schedule for freeing later */
9942 }
9943
9944 /*
9945 =for apidoc sv_untaint
9946
9947 Untaint an SV.  Use C<SvTAINTED_off> instead.
9948
9949 =cut
9950 */
9951
9952 void
9953 Perl_sv_untaint(pTHX_ SV *const sv)
9954 {
9955     PERL_ARGS_ASSERT_SV_UNTAINT;
9956
9957     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9958         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9959         if (mg)
9960             mg->mg_len &= ~1;
9961     }
9962 }
9963
9964 /*
9965 =for apidoc sv_tainted
9966
9967 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9968
9969 =cut
9970 */
9971
9972 bool
9973 Perl_sv_tainted(pTHX_ SV *const sv)
9974 {
9975     PERL_ARGS_ASSERT_SV_TAINTED;
9976
9977     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9978         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9979         if (mg && (mg->mg_len & 1) )
9980             return TRUE;
9981     }
9982     return FALSE;
9983 }
9984
9985 /*
9986 =for apidoc sv_setpviv
9987
9988 Copies an integer into the given SV, also updating its string value.
9989 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9990
9991 =cut
9992 */
9993
9994 void
9995 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9996 {
9997     char buf[TYPE_CHARS(UV)];
9998     char *ebuf;
9999     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10000
10001     PERL_ARGS_ASSERT_SV_SETPVIV;
10002
10003     sv_setpvn(sv, ptr, ebuf - ptr);
10004 }
10005
10006 /*
10007 =for apidoc sv_setpviv_mg
10008
10009 Like C<sv_setpviv>, but also handles 'set' magic.
10010
10011 =cut
10012 */
10013
10014 void
10015 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10016 {
10017     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10018
10019     sv_setpviv(sv, iv);
10020     SvSETMAGIC(sv);
10021 }
10022
10023 #if defined(PERL_IMPLICIT_CONTEXT)
10024
10025 /* pTHX_ magic can't cope with varargs, so this is a no-context
10026  * version of the main function, (which may itself be aliased to us).
10027  * Don't access this version directly.
10028  */
10029
10030 void
10031 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10032 {
10033     dTHX;
10034     va_list args;
10035
10036     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10037
10038     va_start(args, pat);
10039     sv_vsetpvf(sv, pat, &args);
10040     va_end(args);
10041 }
10042
10043 /* pTHX_ magic can't cope with varargs, so this is a no-context
10044  * version of the main function, (which may itself be aliased to us).
10045  * Don't access this version directly.
10046  */
10047
10048 void
10049 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10050 {
10051     dTHX;
10052     va_list args;
10053
10054     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10055
10056     va_start(args, pat);
10057     sv_vsetpvf_mg(sv, pat, &args);
10058     va_end(args);
10059 }
10060 #endif
10061
10062 /*
10063 =for apidoc sv_setpvf
10064
10065 Works like C<sv_catpvf> but copies the text into the SV instead of
10066 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10067
10068 =cut
10069 */
10070
10071 void
10072 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10073 {
10074     va_list args;
10075
10076     PERL_ARGS_ASSERT_SV_SETPVF;
10077
10078     va_start(args, pat);
10079     sv_vsetpvf(sv, pat, &args);
10080     va_end(args);
10081 }
10082
10083 /*
10084 =for apidoc sv_vsetpvf
10085
10086 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10087 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10088
10089 Usually used via its frontend C<sv_setpvf>.
10090
10091 =cut
10092 */
10093
10094 void
10095 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10096 {
10097     PERL_ARGS_ASSERT_SV_VSETPVF;
10098
10099     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10100 }
10101
10102 /*
10103 =for apidoc sv_setpvf_mg
10104
10105 Like C<sv_setpvf>, but also handles 'set' magic.
10106
10107 =cut
10108 */
10109
10110 void
10111 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10112 {
10113     va_list args;
10114
10115     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10116
10117     va_start(args, pat);
10118     sv_vsetpvf_mg(sv, pat, &args);
10119     va_end(args);
10120 }
10121
10122 /*
10123 =for apidoc sv_vsetpvf_mg
10124
10125 Like C<sv_vsetpvf>, but also handles 'set' magic.
10126
10127 Usually used via its frontend C<sv_setpvf_mg>.
10128
10129 =cut
10130 */
10131
10132 void
10133 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10134 {
10135     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10136
10137     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10138     SvSETMAGIC(sv);
10139 }
10140
10141 #if defined(PERL_IMPLICIT_CONTEXT)
10142
10143 /* pTHX_ magic can't cope with varargs, so this is a no-context
10144  * version of the main function, (which may itself be aliased to us).
10145  * Don't access this version directly.
10146  */
10147
10148 void
10149 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10150 {
10151     dTHX;
10152     va_list args;
10153
10154     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10155
10156     va_start(args, pat);
10157     sv_vcatpvf(sv, pat, &args);
10158     va_end(args);
10159 }
10160
10161 /* pTHX_ magic can't cope with varargs, so this is a no-context
10162  * version of the main function, (which may itself be aliased to us).
10163  * Don't access this version directly.
10164  */
10165
10166 void
10167 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10168 {
10169     dTHX;
10170     va_list args;
10171
10172     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10173
10174     va_start(args, pat);
10175     sv_vcatpvf_mg(sv, pat, &args);
10176     va_end(args);
10177 }
10178 #endif
10179
10180 /*
10181 =for apidoc sv_catpvf
10182
10183 Processes its arguments like C<sprintf> and appends the formatted
10184 output to an SV.  If the appended data contains "wide" characters
10185 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10186 and characters >255 formatted with %c), the original SV might get
10187 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10188 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10189 valid UTF-8; if the original SV was bytes, the pattern should be too.
10190
10191 =cut */
10192
10193 void
10194 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10195 {
10196     va_list args;
10197
10198     PERL_ARGS_ASSERT_SV_CATPVF;
10199
10200     va_start(args, pat);
10201     sv_vcatpvf(sv, pat, &args);
10202     va_end(args);
10203 }
10204
10205 /*
10206 =for apidoc sv_vcatpvf
10207
10208 Processes its arguments like C<vsprintf> and appends the formatted output
10209 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10210
10211 Usually used via its frontend C<sv_catpvf>.
10212
10213 =cut
10214 */
10215
10216 void
10217 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10218 {
10219     PERL_ARGS_ASSERT_SV_VCATPVF;
10220
10221     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10222 }
10223
10224 /*
10225 =for apidoc sv_catpvf_mg
10226
10227 Like C<sv_catpvf>, but also handles 'set' magic.
10228
10229 =cut
10230 */
10231
10232 void
10233 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10234 {
10235     va_list args;
10236
10237     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10238
10239     va_start(args, pat);
10240     sv_vcatpvf_mg(sv, pat, &args);
10241     va_end(args);
10242 }
10243
10244 /*
10245 =for apidoc sv_vcatpvf_mg
10246
10247 Like C<sv_vcatpvf>, but also handles 'set' magic.
10248
10249 Usually used via its frontend C<sv_catpvf_mg>.
10250
10251 =cut
10252 */
10253
10254 void
10255 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10256 {
10257     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10258
10259     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10260     SvSETMAGIC(sv);
10261 }
10262
10263 /*
10264 =for apidoc sv_vsetpvfn
10265
10266 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10267 appending it.
10268
10269 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10270
10271 =cut
10272 */
10273
10274 void
10275 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10276                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10277 {
10278     PERL_ARGS_ASSERT_SV_VSETPVFN;
10279
10280     sv_setpvs(sv, "");
10281     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10282 }
10283
10284
10285 /*
10286  * Warn of missing argument to sprintf, and then return a defined value
10287  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10288  */
10289 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10290 STATIC SV*
10291 S_vcatpvfn_missing_argument(pTHX) {
10292     if (ckWARN(WARN_MISSING)) {
10293         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10294                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10295     }
10296     return &PL_sv_no;
10297 }
10298
10299
10300 STATIC I32
10301 S_expect_number(pTHX_ char **const pattern)
10302 {
10303     dVAR;
10304     I32 var = 0;
10305
10306     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10307
10308     switch (**pattern) {
10309     case '1': case '2': case '3':
10310     case '4': case '5': case '6':
10311     case '7': case '8': case '9':
10312         var = *(*pattern)++ - '0';
10313         while (isDIGIT(**pattern)) {
10314             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10315             if (tmp < var)
10316                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10317             var = tmp;
10318         }
10319     }
10320     return var;
10321 }
10322
10323 STATIC char *
10324 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10325 {
10326     const int neg = nv < 0;
10327     UV uv;
10328
10329     PERL_ARGS_ASSERT_F0CONVERT;
10330
10331     if (neg)
10332         nv = -nv;
10333     if (nv < UV_MAX) {
10334         char *p = endbuf;
10335         nv += 0.5;
10336         uv = (UV)nv;
10337         if (uv & 1 && uv == nv)
10338             uv--;                       /* Round to even */
10339         do {
10340             const unsigned dig = uv % 10;
10341             *--p = '0' + dig;
10342         } while (uv /= 10);
10343         if (neg)
10344             *--p = '-';
10345         *len = endbuf - p;
10346         return p;
10347     }
10348     return NULL;
10349 }
10350
10351
10352 /*
10353 =for apidoc sv_vcatpvfn
10354
10355 =for apidoc sv_vcatpvfn_flags
10356
10357 Processes its arguments like C<vsprintf> and appends the formatted output
10358 to an SV.  Uses an array of SVs if the C style variable argument list is
10359 missing (NULL).  When running with taint checks enabled, indicates via
10360 C<maybe_tainted> if results are untrustworthy (often due to the use of
10361 locales).
10362
10363 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10364
10365 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10366
10367 =cut
10368 */
10369
10370 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10371                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10372                         vec_utf8 = DO_UTF8(vecsv);
10373
10374 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10375
10376 void
10377 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10378                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10379 {
10380     PERL_ARGS_ASSERT_SV_VCATPVFN;
10381
10382     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10383 }
10384
10385 void
10386 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10387                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10388                        const U32 flags)
10389 {
10390     dVAR;
10391     char *p;
10392     char *q;
10393     const char *patend;
10394     STRLEN origlen;
10395     I32 svix = 0;
10396     static const char nullstr[] = "(null)";
10397     SV *argsv = NULL;
10398     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10399     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10400     SV *nsv = NULL;
10401     /* Times 4: a decimal digit takes more than 3 binary digits.
10402      * NV_DIG: mantissa takes than many decimal digits.
10403      * Plus 32: Playing safe. */
10404     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10405     /* large enough for "%#.#f" --chip */
10406     /* what about long double NVs? --jhi */
10407 #ifdef USE_LOCALE_NUMERIC
10408     SV* oldlocale = NULL;
10409 #endif
10410
10411     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10412     PERL_UNUSED_ARG(maybe_tainted);
10413
10414     if (flags & SV_GMAGIC)
10415         SvGETMAGIC(sv);
10416
10417     /* no matter what, this is a string now */
10418     (void)SvPV_force_nomg(sv, origlen);
10419
10420     /* special-case "", "%s", and "%-p" (SVf - see below) */
10421     if (patlen == 0)
10422         return;
10423     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10424         if (args) {
10425             const char * const s = va_arg(*args, char*);
10426             sv_catpv_nomg(sv, s ? s : nullstr);
10427         }
10428         else if (svix < svmax) {
10429             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10430             SvGETMAGIC(*svargs);
10431             sv_catsv_nomg(sv, *svargs);
10432         }
10433         else
10434             S_vcatpvfn_missing_argument(aTHX);
10435         return;
10436     }
10437     if (args && patlen == 3 && pat[0] == '%' &&
10438                 pat[1] == '-' && pat[2] == 'p') {
10439         argsv = MUTABLE_SV(va_arg(*args, void*));
10440         sv_catsv_nomg(sv, argsv);
10441         return;
10442     }
10443
10444 #ifndef USE_LONG_DOUBLE
10445     /* special-case "%.<number>[gf]" */
10446     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10447          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10448         unsigned digits = 0;
10449         const char *pp;
10450
10451         pp = pat + 2;
10452         while (*pp >= '0' && *pp <= '9')
10453             digits = 10 * digits + (*pp++ - '0');
10454         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10455             const NV nv = SvNV(*svargs);
10456             if (*pp == 'g') {
10457                 /* Add check for digits != 0 because it seems that some
10458                    gconverts are buggy in this case, and we don't yet have
10459                    a Configure test for this.  */
10460                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10461                      /* 0, point, slack */
10462                     Gconvert(nv, (int)digits, 0, ebuf);
10463                     sv_catpv_nomg(sv, ebuf);
10464                     if (*ebuf)  /* May return an empty string for digits==0 */
10465                         return;
10466                 }
10467             } else if (!digits) {
10468                 STRLEN l;
10469
10470                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10471                     sv_catpvn_nomg(sv, p, l);
10472                     return;
10473                 }
10474             }
10475         }
10476     }
10477 #endif /* !USE_LONG_DOUBLE */
10478
10479     if (!args && svix < svmax && DO_UTF8(*svargs))
10480         has_utf8 = TRUE;
10481
10482     patend = (char*)pat + patlen;
10483     for (p = (char*)pat; p < patend; p = q) {
10484         bool alt = FALSE;
10485         bool left = FALSE;
10486         bool vectorize = FALSE;
10487         bool vectorarg = FALSE;
10488         bool vec_utf8 = FALSE;
10489         char fill = ' ';
10490         char plus = 0;
10491         char intsize = 0;
10492         STRLEN width = 0;
10493         STRLEN zeros = 0;
10494         bool has_precis = FALSE;
10495         STRLEN precis = 0;
10496         const I32 osvix = svix;
10497         bool is_utf8 = FALSE;  /* is this item utf8?   */
10498 #ifdef HAS_LDBL_SPRINTF_BUG
10499         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10500            with sfio - Allen <allens@cpan.org> */
10501         bool fix_ldbl_sprintf_bug = FALSE;
10502 #endif
10503
10504         char esignbuf[4];
10505         U8 utf8buf[UTF8_MAXBYTES+1];
10506         STRLEN esignlen = 0;
10507
10508         const char *eptr = NULL;
10509         const char *fmtstart;
10510         STRLEN elen = 0;
10511         SV *vecsv = NULL;
10512         const U8 *vecstr = NULL;
10513         STRLEN veclen = 0;
10514         char c = 0;
10515         int i;
10516         unsigned base = 0;
10517         IV iv = 0;
10518         UV uv = 0;
10519         /* we need a long double target in case HAS_LONG_DOUBLE but
10520            not USE_LONG_DOUBLE
10521         */
10522 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10523         long double nv;
10524 #else
10525         NV nv;
10526 #endif
10527         STRLEN have;
10528         STRLEN need;
10529         STRLEN gap;
10530         const char *dotstr = ".";
10531         STRLEN dotstrlen = 1;
10532         I32 efix = 0; /* explicit format parameter index */
10533         I32 ewix = 0; /* explicit width index */
10534         I32 epix = 0; /* explicit precision index */
10535         I32 evix = 0; /* explicit vector index */
10536         bool asterisk = FALSE;
10537
10538         /* echo everything up to the next format specification */
10539         for (q = p; q < patend && *q != '%'; ++q) ;
10540         if (q > p) {
10541             if (has_utf8 && !pat_utf8)
10542                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10543             else
10544                 sv_catpvn_nomg(sv, p, q - p);
10545             p = q;
10546         }
10547         if (q++ >= patend)
10548             break;
10549
10550         fmtstart = q;
10551
10552 /*
10553     We allow format specification elements in this order:
10554         \d+\$              explicit format parameter index
10555         [-+ 0#]+           flags
10556         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10557         0                  flag (as above): repeated to allow "v02"     
10558         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10559         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10560         [hlqLV]            size
10561     [%bcdefginopsuxDFOUX] format (mandatory)
10562 */
10563
10564         if (args) {
10565 /*  
10566         As of perl5.9.3, printf format checking is on by default.
10567         Internally, perl uses %p formats to provide an escape to
10568         some extended formatting.  This block deals with those
10569         extensions: if it does not match, (char*)q is reset and
10570         the normal format processing code is used.
10571
10572         Currently defined extensions are:
10573                 %p              include pointer address (standard)      
10574                 %-p     (SVf)   include an SV (previously %_)
10575                 %-<num>p        include an SV with precision <num>      
10576                 %2p             include a HEK
10577                 %3p             include a HEK with precision of 256
10578                 %4p             char* preceded by utf8 flag and length
10579                 %<num>p         (where num is 1 or > 4) reserved for future
10580                                 extensions
10581
10582         Robin Barker 2005-07-14 (but modified since)
10583
10584                 %1p     (VDf)   removed.  RMB 2007-10-19
10585 */
10586             char* r = q; 
10587             bool sv = FALSE;    
10588             STRLEN n = 0;
10589             if (*q == '-')
10590                 sv = *q++;
10591             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10592                 /* The argument has already gone through cBOOL, so the cast
10593                    is safe. */
10594                 is_utf8 = (bool)va_arg(*args, int);
10595                 elen = va_arg(*args, UV);
10596                 eptr = va_arg(*args, char *);
10597                 q += sizeof(UTF8f)-1;
10598                 goto string;
10599             }
10600             n = expect_number(&q);
10601             if (*q++ == 'p') {
10602                 if (sv) {                       /* SVf */
10603                     if (n) {
10604                         precis = n;
10605                         has_precis = TRUE;
10606                     }
10607                     argsv = MUTABLE_SV(va_arg(*args, void*));
10608                     eptr = SvPV_const(argsv, elen);
10609                     if (DO_UTF8(argsv))
10610                         is_utf8 = TRUE;
10611                     goto string;
10612                 }
10613                 else if (n==2 || n==3) {        /* HEKf */
10614                     HEK * const hek = va_arg(*args, HEK *);
10615                     eptr = HEK_KEY(hek);
10616                     elen = HEK_LEN(hek);
10617                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10618                     if (n==3) precis = 256, has_precis = TRUE;
10619                     goto string;
10620                 }
10621                 else if (n) {
10622                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10623                                      "internal %%<num>p might conflict with future printf extensions");
10624                 }
10625             }
10626             q = r; 
10627         }
10628
10629         if ( (width = expect_number(&q)) ) {
10630             if (*q == '$') {
10631                 ++q;
10632                 efix = width;
10633             } else {
10634                 goto gotwidth;
10635             }
10636         }
10637
10638         /* FLAGS */
10639
10640         while (*q) {
10641             switch (*q) {
10642             case ' ':
10643             case '+':
10644                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10645                     q++;
10646                 else
10647                     plus = *q++;
10648                 continue;
10649
10650             case '-':
10651                 left = TRUE;
10652                 q++;
10653                 continue;
10654
10655             case '0':
10656                 fill = *q++;
10657                 continue;
10658
10659             case '#':
10660                 alt = TRUE;
10661                 q++;
10662                 continue;
10663
10664             default:
10665                 break;
10666             }
10667             break;
10668         }
10669
10670       tryasterisk:
10671         if (*q == '*') {
10672             q++;
10673             if ( (ewix = expect_number(&q)) )
10674                 if (*q++ != '$')
10675                     goto unknown;
10676             asterisk = TRUE;
10677         }
10678         if (*q == 'v') {
10679             q++;
10680             if (vectorize)
10681                 goto unknown;
10682             if ((vectorarg = asterisk)) {
10683                 evix = ewix;
10684                 ewix = 0;
10685                 asterisk = FALSE;
10686             }
10687             vectorize = TRUE;
10688             goto tryasterisk;
10689         }
10690
10691         if (!asterisk)
10692         {
10693             if( *q == '0' )
10694                 fill = *q++;
10695             width = expect_number(&q);
10696         }
10697
10698         if (vectorize && vectorarg) {
10699             /* vectorizing, but not with the default "." */
10700             if (args)
10701                 vecsv = va_arg(*args, SV*);
10702             else if (evix) {
10703                 vecsv = (evix > 0 && evix <= svmax)
10704                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10705             } else {
10706                 vecsv = svix < svmax
10707                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10708             }
10709             dotstr = SvPV_const(vecsv, dotstrlen);
10710             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10711                bad with tied or overloaded values that return UTF8.  */
10712             if (DO_UTF8(vecsv))
10713                 is_utf8 = TRUE;
10714             else if (has_utf8) {
10715                 vecsv = sv_mortalcopy(vecsv);
10716                 sv_utf8_upgrade(vecsv);
10717                 dotstr = SvPV_const(vecsv, dotstrlen);
10718                 is_utf8 = TRUE;
10719             }               
10720         }
10721
10722         if (asterisk) {
10723             if (args)
10724                 i = va_arg(*args, int);
10725             else
10726                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10727                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10728             left |= (i < 0);
10729             width = (i < 0) ? -i : i;
10730         }
10731       gotwidth:
10732
10733         /* PRECISION */
10734
10735         if (*q == '.') {
10736             q++;
10737             if (*q == '*') {
10738                 q++;
10739                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10740                     goto unknown;
10741                 /* XXX: todo, support specified precision parameter */
10742                 if (epix)
10743                     goto unknown;
10744                 if (args)
10745                     i = va_arg(*args, int);
10746                 else
10747                     i = (ewix ? ewix <= svmax : svix < svmax)
10748                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10749                 precis = i;
10750                 has_precis = !(i < 0);
10751             }
10752             else {
10753                 precis = 0;
10754                 while (isDIGIT(*q))
10755                     precis = precis * 10 + (*q++ - '0');
10756                 has_precis = TRUE;
10757             }
10758         }
10759
10760         if (vectorize) {
10761             if (args) {
10762                 VECTORIZE_ARGS
10763             }
10764             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10765                 vecsv = svargs[efix ? efix-1 : svix++];
10766                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10767                 vec_utf8 = DO_UTF8(vecsv);
10768
10769                 /* if this is a version object, we need to convert
10770                  * back into v-string notation and then let the
10771                  * vectorize happen normally
10772                  */
10773                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10774                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10775                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10776                         "vector argument not supported with alpha versions");
10777                         goto vdblank;
10778                     }
10779                     vecsv = sv_newmortal();
10780                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10781                                  vecsv);
10782                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10783                     vec_utf8 = DO_UTF8(vecsv);
10784                 }
10785             }
10786             else {
10787               vdblank:
10788                 vecstr = (U8*)"";
10789                 veclen = 0;
10790             }
10791         }
10792
10793         /* SIZE */
10794
10795         switch (*q) {
10796 #ifdef WIN32
10797         case 'I':                       /* Ix, I32x, and I64x */
10798 #  ifdef USE_64_BIT_INT
10799             if (q[1] == '6' && q[2] == '4') {
10800                 q += 3;
10801                 intsize = 'q';
10802                 break;
10803             }
10804 #  endif
10805             if (q[1] == '3' && q[2] == '2') {
10806                 q += 3;
10807                 break;
10808             }
10809 #  ifdef USE_64_BIT_INT
10810             intsize = 'q';
10811 #  endif
10812             q++;
10813             break;
10814 #endif
10815 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
10816         case 'L':                       /* Ld */
10817             /*FALLTHROUGH*/
10818 #if IVSIZE >= 8
10819         case 'q':                       /* qd */
10820 #endif
10821             intsize = 'q';
10822             q++;
10823             break;
10824 #endif
10825         case 'l':
10826             ++q;
10827 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
10828             if (*q == 'l') {    /* lld, llf */
10829                 intsize = 'q';
10830                 ++q;
10831             }
10832             else
10833 #endif
10834                 intsize = 'l';
10835             break;
10836         case 'h':
10837             if (*++q == 'h') {  /* hhd, hhu */
10838                 intsize = 'c';
10839                 ++q;
10840             }
10841             else
10842                 intsize = 'h';
10843             break;
10844         case 'V':
10845         case 'z':
10846         case 't':
10847 #if HAS_C99
10848         case 'j':
10849 #endif
10850             intsize = *q++;
10851             break;
10852         }
10853
10854         /* CONVERSION */
10855
10856         if (*q == '%') {
10857             eptr = q++;
10858             elen = 1;
10859             if (vectorize) {
10860                 c = '%';
10861                 goto unknown;
10862             }
10863             goto string;
10864         }
10865
10866         if (!vectorize && !args) {
10867             if (efix) {
10868                 const I32 i = efix-1;
10869                 argsv = (i >= 0 && i < svmax)
10870                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10871             } else {
10872                 argsv = (svix >= 0 && svix < svmax)
10873                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10874             }
10875         }
10876
10877         switch (c = *q++) {
10878
10879             /* STRINGS */
10880
10881         case 'c':
10882             if (vectorize)
10883                 goto unknown;
10884             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10885             if ((uv > 255 ||
10886                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
10887                 && !IN_BYTES) {
10888                 eptr = (char*)utf8buf;
10889                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10890                 is_utf8 = TRUE;
10891             }
10892             else {
10893                 c = (char)uv;
10894                 eptr = &c;
10895                 elen = 1;
10896             }
10897             goto string;
10898
10899         case 's':
10900             if (vectorize)
10901                 goto unknown;
10902             if (args) {
10903                 eptr = va_arg(*args, char*);
10904                 if (eptr)
10905                     elen = strlen(eptr);
10906                 else {
10907                     eptr = (char *)nullstr;
10908                     elen = sizeof nullstr - 1;
10909                 }
10910             }
10911             else {
10912                 eptr = SvPV_const(argsv, elen);
10913                 if (DO_UTF8(argsv)) {
10914                     STRLEN old_precis = precis;
10915                     if (has_precis && precis < elen) {
10916                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10917                         STRLEN p = precis > ulen ? ulen : precis;
10918                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10919                                                         /* sticks at end */
10920                     }
10921                     if (width) { /* fudge width (can't fudge elen) */
10922                         if (has_precis && precis < elen)
10923                             width += precis - old_precis;
10924                         else
10925                             width +=
10926                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10927                     }
10928                     is_utf8 = TRUE;
10929                 }
10930             }
10931
10932         string:
10933             if (has_precis && precis < elen)
10934                 elen = precis;
10935             break;
10936
10937             /* INTEGERS */
10938
10939         case 'p':
10940             if (alt || vectorize)
10941                 goto unknown;
10942             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10943             base = 16;
10944             goto integer;
10945
10946         case 'D':
10947 #ifdef IV_IS_QUAD
10948             intsize = 'q';
10949 #else
10950             intsize = 'l';
10951 #endif
10952             /*FALLTHROUGH*/
10953         case 'd':
10954         case 'i':
10955 #if vdNUMBER
10956         format_vd:
10957 #endif
10958             if (vectorize) {
10959                 STRLEN ulen;
10960                 if (!veclen)
10961                     continue;
10962                 if (vec_utf8)
10963                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10964                                         UTF8_ALLOW_ANYUV);
10965                 else {
10966                     uv = *vecstr;
10967                     ulen = 1;
10968                 }
10969                 vecstr += ulen;
10970                 veclen -= ulen;
10971                 if (plus)
10972                      esignbuf[esignlen++] = plus;
10973             }
10974             else if (args) {
10975                 switch (intsize) {
10976                 case 'c':       iv = (char)va_arg(*args, int); break;
10977                 case 'h':       iv = (short)va_arg(*args, int); break;
10978                 case 'l':       iv = va_arg(*args, long); break;
10979                 case 'V':       iv = va_arg(*args, IV); break;
10980                 case 'z':       iv = va_arg(*args, SSize_t); break;
10981                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10982                 default:        iv = va_arg(*args, int); break;
10983 #if HAS_C99
10984                 case 'j':       iv = va_arg(*args, intmax_t); break;
10985 #endif
10986                 case 'q':
10987 #if IVSIZE >= 8
10988                                 iv = va_arg(*args, Quad_t); break;
10989 #else
10990                                 goto unknown;
10991 #endif
10992                 }
10993             }
10994             else {
10995                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10996                 switch (intsize) {
10997                 case 'c':       iv = (char)tiv; break;
10998                 case 'h':       iv = (short)tiv; break;
10999                 case 'l':       iv = (long)tiv; break;
11000                 case 'V':
11001                 default:        iv = tiv; break;
11002                 case 'q':
11003 #if IVSIZE >= 8
11004                                 iv = (Quad_t)tiv; break;
11005 #else
11006                                 goto unknown;
11007 #endif
11008                 }
11009             }
11010             if ( !vectorize )   /* we already set uv above */
11011             {
11012                 if (iv >= 0) {
11013                     uv = iv;
11014                     if (plus)
11015                         esignbuf[esignlen++] = plus;
11016                 }
11017                 else {
11018                     uv = -iv;
11019                     esignbuf[esignlen++] = '-';
11020                 }
11021             }
11022             base = 10;
11023             goto integer;
11024
11025         case 'U':
11026 #ifdef IV_IS_QUAD
11027             intsize = 'q';
11028 #else
11029             intsize = 'l';
11030 #endif
11031             /*FALLTHROUGH*/
11032         case 'u':
11033             base = 10;
11034             goto uns_integer;
11035
11036         case 'B':
11037         case 'b':
11038             base = 2;
11039             goto uns_integer;
11040
11041         case 'O':
11042 #ifdef IV_IS_QUAD
11043             intsize = 'q';
11044 #else
11045             intsize = 'l';
11046 #endif
11047             /*FALLTHROUGH*/
11048         case 'o':
11049             base = 8;
11050             goto uns_integer;
11051
11052         case 'X':
11053         case 'x':
11054             base = 16;
11055
11056         uns_integer:
11057             if (vectorize) {
11058                 STRLEN ulen;
11059         vector:
11060                 if (!veclen)
11061                     continue;
11062                 if (vec_utf8)
11063                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11064                                         UTF8_ALLOW_ANYUV);
11065                 else {
11066                     uv = *vecstr;
11067                     ulen = 1;
11068                 }
11069                 vecstr += ulen;
11070                 veclen -= ulen;
11071             }
11072             else if (args) {
11073                 switch (intsize) {
11074                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11075                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11076                 case 'l':  uv = va_arg(*args, unsigned long); break;
11077                 case 'V':  uv = va_arg(*args, UV); break;
11078                 case 'z':  uv = va_arg(*args, Size_t); break;
11079                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11080 #if HAS_C99
11081                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11082 #endif
11083                 default:   uv = va_arg(*args, unsigned); break;
11084                 case 'q':
11085 #if IVSIZE >= 8
11086                            uv = va_arg(*args, Uquad_t); break;
11087 #else
11088                            goto unknown;
11089 #endif
11090                 }
11091             }
11092             else {
11093                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11094                 switch (intsize) {
11095                 case 'c':       uv = (unsigned char)tuv; break;
11096                 case 'h':       uv = (unsigned short)tuv; break;
11097                 case 'l':       uv = (unsigned long)tuv; break;
11098                 case 'V':
11099                 default:        uv = tuv; break;
11100                 case 'q':
11101 #if IVSIZE >= 8
11102                                 uv = (Uquad_t)tuv; break;
11103 #else
11104                                 goto unknown;
11105 #endif
11106                 }
11107             }
11108
11109         integer:
11110             {
11111                 char *ptr = ebuf + sizeof ebuf;
11112                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11113                 zeros = 0;
11114
11115                 switch (base) {
11116                     unsigned dig;
11117                 case 16:
11118                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11119                     do {
11120                         dig = uv & 15;
11121                         *--ptr = p[dig];
11122                     } while (uv >>= 4);
11123                     if (tempalt) {
11124                         esignbuf[esignlen++] = '0';
11125                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11126                     }
11127                     break;
11128                 case 8:
11129                     do {
11130                         dig = uv & 7;
11131                         *--ptr = '0' + dig;
11132                     } while (uv >>= 3);
11133                     if (alt && *ptr != '0')
11134                         *--ptr = '0';
11135                     break;
11136                 case 2:
11137                     do {
11138                         dig = uv & 1;
11139                         *--ptr = '0' + dig;
11140                     } while (uv >>= 1);
11141                     if (tempalt) {
11142                         esignbuf[esignlen++] = '0';
11143                         esignbuf[esignlen++] = c;
11144                     }
11145                     break;
11146                 default:                /* it had better be ten or less */
11147                     do {
11148                         dig = uv % base;
11149                         *--ptr = '0' + dig;
11150                     } while (uv /= base);
11151                     break;
11152                 }
11153                 elen = (ebuf + sizeof ebuf) - ptr;
11154                 eptr = ptr;
11155                 if (has_precis) {
11156                     if (precis > elen)
11157                         zeros = precis - elen;
11158                     else if (precis == 0 && elen == 1 && *eptr == '0'
11159                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11160                         elen = 0;
11161
11162                 /* a precision nullifies the 0 flag. */
11163                     if (fill == '0')
11164                         fill = ' ';
11165                 }
11166             }
11167             break;
11168
11169             /* FLOATING POINT */
11170
11171         case 'F':
11172             c = 'f';            /* maybe %F isn't supported here */
11173             /*FALLTHROUGH*/
11174         case 'e': case 'E':
11175         case 'f':
11176         case 'g': case 'G':
11177             if (vectorize)
11178                 goto unknown;
11179
11180             /* This is evil, but floating point is even more evil */
11181
11182             /* for SV-style calling, we can only get NV
11183                for C-style calling, we assume %f is double;
11184                for simplicity we allow any of %Lf, %llf, %qf for long double
11185             */
11186             switch (intsize) {
11187             case 'V':
11188 #if defined(USE_LONG_DOUBLE)
11189                 intsize = 'q';
11190 #endif
11191                 break;
11192 /* [perl #20339] - we should accept and ignore %lf rather than die */
11193             case 'l':
11194                 /*FALLTHROUGH*/
11195             default:
11196 #if defined(USE_LONG_DOUBLE)
11197                 intsize = args ? 0 : 'q';
11198 #endif
11199                 break;
11200             case 'q':
11201 #if defined(HAS_LONG_DOUBLE)
11202                 break;
11203 #else
11204                 /*FALLTHROUGH*/
11205 #endif
11206             case 'c':
11207             case 'h':
11208             case 'z':
11209             case 't':
11210             case 'j':
11211                 goto unknown;
11212             }
11213
11214             /* now we need (long double) if intsize == 'q', else (double) */
11215             nv = (args) ?
11216 #if LONG_DOUBLESIZE > DOUBLESIZE
11217                 intsize == 'q' ?
11218                     va_arg(*args, long double) :
11219                     va_arg(*args, double)
11220 #else
11221                     va_arg(*args, double)
11222 #endif
11223                 : SvNV(argsv);
11224
11225             need = 0;
11226             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11227                else. frexp() has some unspecified behaviour for those three */
11228             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11229                 i = PERL_INT_MIN;
11230                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11231                    will cast our (long double) to (double) */
11232                 (void)Perl_frexp(nv, &i);
11233                 if (i == PERL_INT_MIN)
11234                     Perl_die(aTHX_ "panic: frexp");
11235                 if (i > 0)
11236                     need = BIT_DIGITS(i);
11237             }
11238             need += has_precis ? precis : 6; /* known default */
11239
11240             if (need < width)
11241                 need = width;
11242
11243 #ifdef HAS_LDBL_SPRINTF_BUG
11244             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11245                with sfio - Allen <allens@cpan.org> */
11246
11247 #  ifdef DBL_MAX
11248 #    define MY_DBL_MAX DBL_MAX
11249 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11250 #    if DOUBLESIZE >= 8
11251 #      define MY_DBL_MAX 1.7976931348623157E+308L
11252 #    else
11253 #      define MY_DBL_MAX 3.40282347E+38L
11254 #    endif
11255 #  endif
11256
11257 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11258 #    define MY_DBL_MAX_BUG 1L
11259 #  else
11260 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11261 #  endif
11262
11263 #  ifdef DBL_MIN
11264 #    define MY_DBL_MIN DBL_MIN
11265 #  else  /* XXX guessing! -Allen */
11266 #    if DOUBLESIZE >= 8
11267 #      define MY_DBL_MIN 2.2250738585072014E-308L
11268 #    else
11269 #      define MY_DBL_MIN 1.17549435E-38L
11270 #    endif
11271 #  endif
11272
11273             if ((intsize == 'q') && (c == 'f') &&
11274                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11275                 (need < DBL_DIG)) {
11276                 /* it's going to be short enough that
11277                  * long double precision is not needed */
11278
11279                 if ((nv <= 0L) && (nv >= -0L))
11280                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11281                 else {
11282                     /* would use Perl_fp_class as a double-check but not
11283                      * functional on IRIX - see perl.h comments */
11284
11285                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11286                         /* It's within the range that a double can represent */
11287 #if defined(DBL_MAX) && !defined(DBL_MIN)
11288                         if ((nv >= ((long double)1/DBL_MAX)) ||
11289                             (nv <= (-(long double)1/DBL_MAX)))
11290 #endif
11291                         fix_ldbl_sprintf_bug = TRUE;
11292                     }
11293                 }
11294                 if (fix_ldbl_sprintf_bug == TRUE) {
11295                     double temp;
11296
11297                     intsize = 0;
11298                     temp = (double)nv;
11299                     nv = (NV)temp;
11300                 }
11301             }
11302
11303 #  undef MY_DBL_MAX
11304 #  undef MY_DBL_MAX_BUG
11305 #  undef MY_DBL_MIN
11306
11307 #endif /* HAS_LDBL_SPRINTF_BUG */
11308
11309             need += 20; /* fudge factor */
11310             if (PL_efloatsize < need) {
11311                 Safefree(PL_efloatbuf);
11312                 PL_efloatsize = need + 20; /* more fudge */
11313                 Newx(PL_efloatbuf, PL_efloatsize, char);
11314                 PL_efloatbuf[0] = '\0';
11315             }
11316
11317             if ( !(width || left || plus || alt) && fill != '0'
11318                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11319                 /* See earlier comment about buggy Gconvert when digits,
11320                    aka precis is 0  */
11321                 if ( c == 'g' && precis) {
11322                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11323                     /* May return an empty string for digits==0 */
11324                     if (*PL_efloatbuf) {
11325                         elen = strlen(PL_efloatbuf);
11326                         goto float_converted;
11327                     }
11328                 } else if ( c == 'f' && !precis) {
11329                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11330                         break;
11331                 }
11332             }
11333             {
11334                 char *ptr = ebuf + sizeof ebuf;
11335                 *--ptr = '\0';
11336                 *--ptr = c;
11337                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11338 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11339                 if (intsize == 'q') {
11340                     /* Copy the one or more characters in a long double
11341                      * format before the 'base' ([efgEFG]) character to
11342                      * the format string. */
11343                     static char const prifldbl[] = PERL_PRIfldbl;
11344                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11345                     while (p >= prifldbl) { *--ptr = *p--; }
11346                 }
11347 #endif
11348                 if (has_precis) {
11349                     base = precis;
11350                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11351                     *--ptr = '.';
11352                 }
11353                 if (width) {
11354                     base = width;
11355                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11356                 }
11357                 if (fill == '0')
11358                     *--ptr = fill;
11359                 if (left)
11360                     *--ptr = '-';
11361                 if (plus)
11362                     *--ptr = plus;
11363                 if (alt)
11364                     *--ptr = '#';
11365                 *--ptr = '%';
11366
11367                 /* No taint.  Otherwise we are in the strange situation
11368                  * where printf() taints but print($float) doesn't.
11369                  * --jhi */
11370
11371 #ifdef USE_LOCALE_NUMERIC
11372                 if (! PL_numeric_standard && ! IN_SOME_LOCALE_FORM) {
11373
11374                     /* We use a mortal SV, so that any failures (such as if
11375                      * warnings are made fatal) won't leak */
11376                     char *oldlocale_string = setlocale(LC_NUMERIC, NULL);
11377                     oldlocale = newSVpvn_flags(oldlocale_string,
11378                                                strlen(oldlocale_string),
11379                                                SVs_TEMP);
11380                     PL_numeric_standard = TRUE;
11381                     setlocale(LC_NUMERIC, "C");
11382                 }
11383 #endif
11384
11385 #if defined(HAS_LONG_DOUBLE)
11386                 elen = ((intsize == 'q')
11387                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11388                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11389 #else
11390                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11391 #endif
11392             }
11393         float_converted:
11394             eptr = PL_efloatbuf;
11395
11396 #ifdef USE_LOCALE_NUMERIC
11397             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
11398                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
11399             {
11400                 is_utf8 = TRUE;
11401             }
11402 #endif
11403
11404             break;
11405
11406             /* SPECIAL */
11407
11408         case 'n':
11409             if (vectorize)
11410                 goto unknown;
11411             i = SvCUR(sv) - origlen;
11412             if (args) {
11413                 switch (intsize) {
11414                 case 'c':       *(va_arg(*args, char*)) = i; break;
11415                 case 'h':       *(va_arg(*args, short*)) = i; break;
11416                 default:        *(va_arg(*args, int*)) = i; break;
11417                 case 'l':       *(va_arg(*args, long*)) = i; break;
11418                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11419                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11420                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11421 #if HAS_C99
11422                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11423 #endif
11424                 case 'q':
11425 #if IVSIZE >= 8
11426                                 *(va_arg(*args, Quad_t*)) = i; break;
11427 #else
11428                                 goto unknown;
11429 #endif
11430                 }
11431             }
11432             else
11433                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11434             continue;   /* not "break" */
11435
11436             /* UNKNOWN */
11437
11438         default:
11439       unknown:
11440             if (!args
11441                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11442                 && ckWARN(WARN_PRINTF))
11443             {
11444                 SV * const msg = sv_newmortal();
11445                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11446                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11447                 if (fmtstart < patend) {
11448                     const char * const fmtend = q < patend ? q : patend;
11449                     const char * f;
11450                     sv_catpvs(msg, "\"%");
11451                     for (f = fmtstart; f < fmtend; f++) {
11452                         if (isPRINT(*f)) {
11453                             sv_catpvn_nomg(msg, f, 1);
11454                         } else {
11455                             Perl_sv_catpvf(aTHX_ msg,
11456                                            "\\%03"UVof, (UV)*f & 0xFF);
11457                         }
11458                     }
11459                     sv_catpvs(msg, "\"");
11460                 } else {
11461                     sv_catpvs(msg, "end of string");
11462                 }
11463                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11464             }
11465
11466             /* output mangled stuff ... */
11467             if (c == '\0')
11468                 --q;
11469             eptr = p;
11470             elen = q - p;
11471
11472             /* ... right here, because formatting flags should not apply */
11473             SvGROW(sv, SvCUR(sv) + elen + 1);
11474             p = SvEND(sv);
11475             Copy(eptr, p, elen, char);
11476             p += elen;
11477             *p = '\0';
11478             SvCUR_set(sv, p - SvPVX_const(sv));
11479             svix = osvix;
11480             continue;   /* not "break" */
11481         }
11482
11483         if (is_utf8 != has_utf8) {
11484             if (is_utf8) {
11485                 if (SvCUR(sv))
11486                     sv_utf8_upgrade(sv);
11487             }
11488             else {
11489                 const STRLEN old_elen = elen;
11490                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11491                 sv_utf8_upgrade(nsv);
11492                 eptr = SvPVX_const(nsv);
11493                 elen = SvCUR(nsv);
11494
11495                 if (width) { /* fudge width (can't fudge elen) */
11496                     width += elen - old_elen;
11497                 }
11498                 is_utf8 = TRUE;
11499             }
11500         }
11501
11502         have = esignlen + zeros + elen;
11503         if (have < zeros)
11504             croak_memory_wrap();
11505
11506         need = (have > width ? have : width);
11507         gap = need - have;
11508
11509         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11510             croak_memory_wrap();
11511         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11512         p = SvEND(sv);
11513         if (esignlen && fill == '0') {
11514             int i;
11515             for (i = 0; i < (int)esignlen; i++)
11516                 *p++ = esignbuf[i];
11517         }
11518         if (gap && !left) {
11519             memset(p, fill, gap);
11520             p += gap;
11521         }
11522         if (esignlen && fill != '0') {
11523             int i;
11524             for (i = 0; i < (int)esignlen; i++)
11525                 *p++ = esignbuf[i];
11526         }
11527         if (zeros) {
11528             int i;
11529             for (i = zeros; i; i--)
11530                 *p++ = '0';
11531         }
11532         if (elen) {
11533             Copy(eptr, p, elen, char);
11534             p += elen;
11535         }
11536         if (gap && left) {
11537             memset(p, ' ', gap);
11538             p += gap;
11539         }
11540         if (vectorize) {
11541             if (veclen) {
11542                 Copy(dotstr, p, dotstrlen, char);
11543                 p += dotstrlen;
11544             }
11545             else
11546                 vectorize = FALSE;              /* done iterating over vecstr */
11547         }
11548         if (is_utf8)
11549             has_utf8 = TRUE;
11550         if (has_utf8)
11551             SvUTF8_on(sv);
11552         *p = '\0';
11553         SvCUR_set(sv, p - SvPVX_const(sv));
11554         if (vectorize) {
11555             esignlen = 0;
11556             goto vector;
11557         }
11558     }
11559     SvTAINT(sv);
11560
11561 #ifdef USE_LOCALE_NUMERIC   /* Done outside loop, so don't have to save/restore
11562                                each iteration. */
11563     if (oldlocale) {
11564         setlocale(LC_NUMERIC, SvPVX(oldlocale));
11565         PL_numeric_standard = FALSE;
11566     }
11567 #endif
11568 }
11569
11570 /* =========================================================================
11571
11572 =head1 Cloning an interpreter
11573
11574 All the macros and functions in this section are for the private use of
11575 the main function, perl_clone().
11576
11577 The foo_dup() functions make an exact copy of an existing foo thingy.
11578 During the course of a cloning, a hash table is used to map old addresses
11579 to new addresses.  The table is created and manipulated with the
11580 ptr_table_* functions.
11581
11582 =cut
11583
11584  * =========================================================================*/
11585
11586
11587 #if defined(USE_ITHREADS)
11588
11589 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11590 #ifndef GpREFCNT_inc
11591 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11592 #endif
11593
11594
11595 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11596    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11597    If this changes, please unmerge ss_dup.
11598    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11599 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11600 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11601 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11602 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11603 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11604 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11605 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11606 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11607 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11608 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11609 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11610 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11611 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11612
11613 /* clone a parser */
11614
11615 yy_parser *
11616 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11617 {
11618     yy_parser *parser;
11619
11620     PERL_ARGS_ASSERT_PARSER_DUP;
11621
11622     if (!proto)
11623         return NULL;
11624
11625     /* look for it in the table first */
11626     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11627     if (parser)
11628         return parser;
11629
11630     /* create anew and remember what it is */
11631     Newxz(parser, 1, yy_parser);
11632     ptr_table_store(PL_ptr_table, proto, parser);
11633
11634     /* XXX these not yet duped */
11635     parser->old_parser = NULL;
11636     parser->stack = NULL;
11637     parser->ps = NULL;
11638     parser->stack_size = 0;
11639     /* XXX parser->stack->state = 0; */
11640
11641     /* XXX eventually, just Copy() most of the parser struct ? */
11642
11643     parser->lex_brackets = proto->lex_brackets;
11644     parser->lex_casemods = proto->lex_casemods;
11645     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11646                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11647     parser->lex_casestack = savepvn(proto->lex_casestack,
11648                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11649     parser->lex_defer   = proto->lex_defer;
11650     parser->lex_dojoin  = proto->lex_dojoin;
11651     parser->lex_expect  = proto->lex_expect;
11652     parser->lex_formbrack = proto->lex_formbrack;
11653     parser->lex_inpat   = proto->lex_inpat;
11654     parser->lex_inwhat  = proto->lex_inwhat;
11655     parser->lex_op      = proto->lex_op;
11656     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11657     parser->lex_starts  = proto->lex_starts;
11658     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11659     parser->multi_close = proto->multi_close;
11660     parser->multi_open  = proto->multi_open;
11661     parser->multi_start = proto->multi_start;
11662     parser->multi_end   = proto->multi_end;
11663     parser->preambled   = proto->preambled;
11664     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11665     parser->linestr     = sv_dup_inc(proto->linestr, param);
11666     parser->expect      = proto->expect;
11667     parser->copline     = proto->copline;
11668     parser->last_lop_op = proto->last_lop_op;
11669     parser->lex_state   = proto->lex_state;
11670     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11671     /* rsfp_filters entries have fake IoDIRP() */
11672     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11673     parser->in_my       = proto->in_my;
11674     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11675     parser->error_count = proto->error_count;
11676
11677
11678     parser->linestr     = sv_dup_inc(proto->linestr, param);
11679
11680     {
11681         char * const ols = SvPVX(proto->linestr);
11682         char * const ls  = SvPVX(parser->linestr);
11683
11684         parser->bufptr      = ls + (proto->bufptr >= ols ?
11685                                     proto->bufptr -  ols : 0);
11686         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11687                                     proto->oldbufptr -  ols : 0);
11688         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11689                                     proto->oldoldbufptr -  ols : 0);
11690         parser->linestart   = ls + (proto->linestart >= ols ?
11691                                     proto->linestart -  ols : 0);
11692         parser->last_uni    = ls + (proto->last_uni >= ols ?
11693                                     proto->last_uni -  ols : 0);
11694         parser->last_lop    = ls + (proto->last_lop >= ols ?
11695                                     proto->last_lop -  ols : 0);
11696
11697         parser->bufend      = ls + SvCUR(parser->linestr);
11698     }
11699
11700     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11701
11702
11703 #ifdef PERL_MAD
11704     parser->endwhite    = proto->endwhite;
11705     parser->faketokens  = proto->faketokens;
11706     parser->lasttoke    = proto->lasttoke;
11707     parser->nextwhite   = proto->nextwhite;
11708     parser->realtokenstart = proto->realtokenstart;
11709     parser->skipwhite   = proto->skipwhite;
11710     parser->thisclose   = proto->thisclose;
11711     parser->thismad     = proto->thismad;
11712     parser->thisopen    = proto->thisopen;
11713     parser->thisstuff   = proto->thisstuff;
11714     parser->thistoken   = proto->thistoken;
11715     parser->thiswhite   = proto->thiswhite;
11716
11717     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11718     parser->curforce    = proto->curforce;
11719 #else
11720     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11721     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11722     parser->nexttoke    = proto->nexttoke;
11723 #endif
11724
11725     /* XXX should clone saved_curcop here, but we aren't passed
11726      * proto_perl; so do it in perl_clone_using instead */
11727
11728     return parser;
11729 }
11730
11731
11732 /* duplicate a file handle */
11733
11734 PerlIO *
11735 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11736 {
11737     PerlIO *ret;
11738
11739     PERL_ARGS_ASSERT_FP_DUP;
11740     PERL_UNUSED_ARG(type);
11741
11742     if (!fp)
11743         return (PerlIO*)NULL;
11744
11745     /* look for it in the table first */
11746     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11747     if (ret)
11748         return ret;
11749
11750     /* create anew and remember what it is */
11751     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11752     ptr_table_store(PL_ptr_table, fp, ret);
11753     return ret;
11754 }
11755
11756 /* duplicate a directory handle */
11757
11758 DIR *
11759 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11760 {
11761     DIR *ret;
11762
11763 #ifdef HAS_FCHDIR
11764     DIR *pwd;
11765     const Direntry_t *dirent;
11766     char smallbuf[256];
11767     char *name = NULL;
11768     STRLEN len = 0;
11769     long pos;
11770 #endif
11771
11772     PERL_UNUSED_CONTEXT;
11773     PERL_ARGS_ASSERT_DIRP_DUP;
11774
11775     if (!dp)
11776         return (DIR*)NULL;
11777
11778     /* look for it in the table first */
11779     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11780     if (ret)
11781         return ret;
11782
11783 #ifdef HAS_FCHDIR
11784
11785     PERL_UNUSED_ARG(param);
11786
11787     /* create anew */
11788
11789     /* open the current directory (so we can switch back) */
11790     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11791
11792     /* chdir to our dir handle and open the present working directory */
11793     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11794         PerlDir_close(pwd);
11795         return (DIR *)NULL;
11796     }
11797     /* Now we should have two dir handles pointing to the same dir. */
11798
11799     /* Be nice to the calling code and chdir back to where we were. */
11800     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11801
11802     /* We have no need of the pwd handle any more. */
11803     PerlDir_close(pwd);
11804
11805 #ifdef DIRNAMLEN
11806 # define d_namlen(d) (d)->d_namlen
11807 #else
11808 # define d_namlen(d) strlen((d)->d_name)
11809 #endif
11810     /* Iterate once through dp, to get the file name at the current posi-
11811        tion. Then step back. */
11812     pos = PerlDir_tell(dp);
11813     if ((dirent = PerlDir_read(dp))) {
11814         len = d_namlen(dirent);
11815         if (len <= sizeof smallbuf) name = smallbuf;
11816         else Newx(name, len, char);
11817         Move(dirent->d_name, name, len, char);
11818     }
11819     PerlDir_seek(dp, pos);
11820
11821     /* Iterate through the new dir handle, till we find a file with the
11822        right name. */
11823     if (!dirent) /* just before the end */
11824         for(;;) {
11825             pos = PerlDir_tell(ret);
11826             if (PerlDir_read(ret)) continue; /* not there yet */
11827             PerlDir_seek(ret, pos); /* step back */
11828             break;
11829         }
11830     else {
11831         const long pos0 = PerlDir_tell(ret);
11832         for(;;) {
11833             pos = PerlDir_tell(ret);
11834             if ((dirent = PerlDir_read(ret))) {
11835                 if (len == d_namlen(dirent)
11836                  && memEQ(name, dirent->d_name, len)) {
11837                     /* found it */
11838                     PerlDir_seek(ret, pos); /* step back */
11839                     break;
11840                 }
11841                 /* else we are not there yet; keep iterating */
11842             }
11843             else { /* This is not meant to happen. The best we can do is
11844                       reset the iterator to the beginning. */
11845                 PerlDir_seek(ret, pos0);
11846                 break;
11847             }
11848         }
11849     }
11850 #undef d_namlen
11851
11852     if (name && name != smallbuf)
11853         Safefree(name);
11854 #endif
11855
11856 #ifdef WIN32
11857     ret = win32_dirp_dup(dp, param);
11858 #endif
11859
11860     /* pop it in the pointer table */
11861     if (ret)
11862         ptr_table_store(PL_ptr_table, dp, ret);
11863
11864     return ret;
11865 }
11866
11867 /* duplicate a typeglob */
11868
11869 GP *
11870 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11871 {
11872     GP *ret;
11873
11874     PERL_ARGS_ASSERT_GP_DUP;
11875
11876     if (!gp)
11877         return (GP*)NULL;
11878     /* look for it in the table first */
11879     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11880     if (ret)
11881         return ret;
11882
11883     /* create anew and remember what it is */
11884     Newxz(ret, 1, GP);
11885     ptr_table_store(PL_ptr_table, gp, ret);
11886
11887     /* clone */
11888     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11889        on Newxz() to do this for us.  */
11890     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11891     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11892     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11893     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11894     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11895     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11896     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11897     ret->gp_cvgen       = gp->gp_cvgen;
11898     ret->gp_line        = gp->gp_line;
11899     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11900     return ret;
11901 }
11902
11903 /* duplicate a chain of magic */
11904
11905 MAGIC *
11906 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11907 {
11908     MAGIC *mgret = NULL;
11909     MAGIC **mgprev_p = &mgret;
11910
11911     PERL_ARGS_ASSERT_MG_DUP;
11912
11913     for (; mg; mg = mg->mg_moremagic) {
11914         MAGIC *nmg;
11915
11916         if ((param->flags & CLONEf_JOIN_IN)
11917                 && mg->mg_type == PERL_MAGIC_backref)
11918             /* when joining, we let the individual SVs add themselves to
11919              * backref as needed. */
11920             continue;
11921
11922         Newx(nmg, 1, MAGIC);
11923         *mgprev_p = nmg;
11924         mgprev_p = &(nmg->mg_moremagic);
11925
11926         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11927            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11928            from the original commit adding Perl_mg_dup() - revision 4538.
11929            Similarly there is the annotation "XXX random ptr?" next to the
11930            assignment to nmg->mg_ptr.  */
11931         *nmg = *mg;
11932
11933         /* FIXME for plugins
11934         if (nmg->mg_type == PERL_MAGIC_qr) {
11935             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11936         }
11937         else
11938         */
11939         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11940                           ? nmg->mg_type == PERL_MAGIC_backref
11941                                 /* The backref AV has its reference
11942                                  * count deliberately bumped by 1 */
11943                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11944                                                     nmg->mg_obj, param))
11945                                 : sv_dup_inc(nmg->mg_obj, param)
11946                           : sv_dup(nmg->mg_obj, param);
11947
11948         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11949             if (nmg->mg_len > 0) {
11950                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11951                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11952                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11953                 {
11954                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11955                     sv_dup_inc_multiple((SV**)(namtp->table),
11956                                         (SV**)(namtp->table), NofAMmeth, param);
11957                 }
11958             }
11959             else if (nmg->mg_len == HEf_SVKEY)
11960                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11961         }
11962         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11963             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11964         }
11965     }
11966     return mgret;
11967 }
11968
11969 #endif /* USE_ITHREADS */
11970
11971 struct ptr_tbl_arena {
11972     struct ptr_tbl_arena *next;
11973     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11974 };
11975
11976 /* create a new pointer-mapping table */
11977
11978 PTR_TBL_t *
11979 Perl_ptr_table_new(pTHX)
11980 {
11981     PTR_TBL_t *tbl;
11982     PERL_UNUSED_CONTEXT;
11983
11984     Newx(tbl, 1, PTR_TBL_t);
11985     tbl->tbl_max        = 511;
11986     tbl->tbl_items      = 0;
11987     tbl->tbl_arena      = NULL;
11988     tbl->tbl_arena_next = NULL;
11989     tbl->tbl_arena_end  = NULL;
11990     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11991     return tbl;
11992 }
11993
11994 #define PTR_TABLE_HASH(ptr) \
11995   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11996
11997 /* map an existing pointer using a table */
11998
11999 STATIC PTR_TBL_ENT_t *
12000 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
12001 {
12002     PTR_TBL_ENT_t *tblent;
12003     const UV hash = PTR_TABLE_HASH(sv);
12004
12005     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
12006
12007     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
12008     for (; tblent; tblent = tblent->next) {
12009         if (tblent->oldval == sv)
12010             return tblent;
12011     }
12012     return NULL;
12013 }
12014
12015 void *
12016 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
12017 {
12018     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
12019
12020     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
12021     PERL_UNUSED_CONTEXT;
12022
12023     return tblent ? tblent->newval : NULL;
12024 }
12025
12026 /* add a new entry to a pointer-mapping table */
12027
12028 void
12029 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
12030 {
12031     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
12032
12033     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
12034     PERL_UNUSED_CONTEXT;
12035
12036     if (tblent) {
12037         tblent->newval = newsv;
12038     } else {
12039         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
12040
12041         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
12042             struct ptr_tbl_arena *new_arena;
12043
12044             Newx(new_arena, 1, struct ptr_tbl_arena);
12045             new_arena->next = tbl->tbl_arena;
12046             tbl->tbl_arena = new_arena;
12047             tbl->tbl_arena_next = new_arena->array;
12048             tbl->tbl_arena_end = new_arena->array
12049                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
12050         }
12051
12052         tblent = tbl->tbl_arena_next++;
12053
12054         tblent->oldval = oldsv;
12055         tblent->newval = newsv;
12056         tblent->next = tbl->tbl_ary[entry];
12057         tbl->tbl_ary[entry] = tblent;
12058         tbl->tbl_items++;
12059         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12060             ptr_table_split(tbl);
12061     }
12062 }
12063
12064 /* double the hash bucket size of an existing ptr table */
12065
12066 void
12067 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12068 {
12069     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12070     const UV oldsize = tbl->tbl_max + 1;
12071     UV newsize = oldsize * 2;
12072     UV i;
12073
12074     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12075     PERL_UNUSED_CONTEXT;
12076
12077     Renew(ary, newsize, PTR_TBL_ENT_t*);
12078     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12079     tbl->tbl_max = --newsize;
12080     tbl->tbl_ary = ary;
12081     for (i=0; i < oldsize; i++, ary++) {
12082         PTR_TBL_ENT_t **entp = ary;
12083         PTR_TBL_ENT_t *ent = *ary;
12084         PTR_TBL_ENT_t **curentp;
12085         if (!ent)
12086             continue;
12087         curentp = ary + oldsize;
12088         do {
12089             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12090                 *entp = ent->next;
12091                 ent->next = *curentp;
12092                 *curentp = ent;
12093             }
12094             else
12095                 entp = &ent->next;
12096             ent = *entp;
12097         } while (ent);
12098     }
12099 }
12100
12101 /* remove all the entries from a ptr table */
12102 /* Deprecated - will be removed post 5.14 */
12103
12104 void
12105 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12106 {
12107     if (tbl && tbl->tbl_items) {
12108         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12109
12110         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12111
12112         while (arena) {
12113             struct ptr_tbl_arena *next = arena->next;
12114
12115             Safefree(arena);
12116             arena = next;
12117         };
12118
12119         tbl->tbl_items = 0;
12120         tbl->tbl_arena = NULL;
12121         tbl->tbl_arena_next = NULL;
12122         tbl->tbl_arena_end = NULL;
12123     }
12124 }
12125
12126 /* clear and free a ptr table */
12127
12128 void
12129 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12130 {
12131     struct ptr_tbl_arena *arena;
12132
12133     if (!tbl) {
12134         return;
12135     }
12136
12137     arena = tbl->tbl_arena;
12138
12139     while (arena) {
12140         struct ptr_tbl_arena *next = arena->next;
12141
12142         Safefree(arena);
12143         arena = next;
12144     }
12145
12146     Safefree(tbl->tbl_ary);
12147     Safefree(tbl);
12148 }
12149
12150 #if defined(USE_ITHREADS)
12151
12152 void
12153 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12154 {
12155     PERL_ARGS_ASSERT_RVPV_DUP;
12156
12157     assert(!isREGEXP(sstr));
12158     if (SvROK(sstr)) {
12159         if (SvWEAKREF(sstr)) {
12160             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12161             if (param->flags & CLONEf_JOIN_IN) {
12162                 /* if joining, we add any back references individually rather
12163                  * than copying the whole backref array */
12164                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12165             }
12166         }
12167         else
12168             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12169     }
12170     else if (SvPVX_const(sstr)) {
12171         /* Has something there */
12172         if (SvLEN(sstr)) {
12173             /* Normal PV - clone whole allocated space */
12174             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12175             /* sstr may not be that normal, but actually copy on write.
12176                But we are a true, independent SV, so:  */
12177             SvIsCOW_off(dstr);
12178         }
12179         else {
12180             /* Special case - not normally malloced for some reason */
12181             if (isGV_with_GP(sstr)) {
12182                 /* Don't need to do anything here.  */
12183             }
12184             else if ((SvIsCOW(sstr))) {
12185                 /* A "shared" PV - clone it as "shared" PV */
12186                 SvPV_set(dstr,
12187                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12188                                          param)));
12189             }
12190             else {
12191                 /* Some other special case - random pointer */
12192                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12193             }
12194         }
12195     }
12196     else {
12197         /* Copy the NULL */
12198         SvPV_set(dstr, NULL);
12199     }
12200 }
12201
12202 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12203 static SV **
12204 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12205                       SSize_t items, CLONE_PARAMS *const param)
12206 {
12207     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12208
12209     while (items-- > 0) {
12210         *dest++ = sv_dup_inc(*source++, param);
12211     }
12212
12213     return dest;
12214 }
12215
12216 /* duplicate an SV of any type (including AV, HV etc) */
12217
12218 static SV *
12219 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12220 {
12221     dVAR;
12222     SV *dstr;
12223
12224     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12225
12226     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12227 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12228         abort();
12229 #endif
12230         return NULL;
12231     }
12232     /* look for it in the table first */
12233     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12234     if (dstr)
12235         return dstr;
12236
12237     if(param->flags & CLONEf_JOIN_IN) {
12238         /** We are joining here so we don't want do clone
12239             something that is bad **/
12240         if (SvTYPE(sstr) == SVt_PVHV) {
12241             const HEK * const hvname = HvNAME_HEK(sstr);
12242             if (hvname) {
12243                 /** don't clone stashes if they already exist **/
12244                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12245                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12246                 ptr_table_store(PL_ptr_table, sstr, dstr);
12247                 return dstr;
12248             }
12249         }
12250         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12251             HV *stash = GvSTASH(sstr);
12252             const HEK * hvname;
12253             if (stash && (hvname = HvNAME_HEK(stash))) {
12254                 /** don't clone GVs if they already exist **/
12255                 SV **svp;
12256                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12257                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12258                 svp = hv_fetch(
12259                         stash, GvNAME(sstr),
12260                         GvNAMEUTF8(sstr)
12261                             ? -GvNAMELEN(sstr)
12262                             :  GvNAMELEN(sstr),
12263                         0
12264                       );
12265                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12266                     ptr_table_store(PL_ptr_table, sstr, *svp);
12267                     return *svp;
12268                 }
12269             }
12270         }
12271     }
12272
12273     /* create anew and remember what it is */
12274     new_SV(dstr);
12275
12276 #ifdef DEBUG_LEAKING_SCALARS
12277     dstr->sv_debug_optype = sstr->sv_debug_optype;
12278     dstr->sv_debug_line = sstr->sv_debug_line;
12279     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12280     dstr->sv_debug_parent = (SV*)sstr;
12281     FREE_SV_DEBUG_FILE(dstr);
12282     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12283 #endif
12284
12285     ptr_table_store(PL_ptr_table, sstr, dstr);
12286
12287     /* clone */
12288     SvFLAGS(dstr)       = SvFLAGS(sstr);
12289     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12290     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12291
12292 #ifdef DEBUGGING
12293     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12294         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12295                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12296 #endif
12297
12298     /* don't clone objects whose class has asked us not to */
12299     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12300         SvFLAGS(dstr) = 0;
12301         return dstr;
12302     }
12303
12304     switch (SvTYPE(sstr)) {
12305     case SVt_NULL:
12306         SvANY(dstr)     = NULL;
12307         break;
12308     case SVt_IV:
12309         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12310         if(SvROK(sstr)) {
12311             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12312         } else {
12313             SvIV_set(dstr, SvIVX(sstr));
12314         }
12315         break;
12316     case SVt_NV:
12317         SvANY(dstr)     = new_XNV();
12318         SvNV_set(dstr, SvNVX(sstr));
12319         break;
12320     default:
12321         {
12322             /* These are all the types that need complex bodies allocating.  */
12323             void *new_body;
12324             const svtype sv_type = SvTYPE(sstr);
12325             const struct body_details *const sv_type_details
12326                 = bodies_by_type + sv_type;
12327
12328             switch (sv_type) {
12329             default:
12330                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12331                 break;
12332
12333             case SVt_PVGV:
12334             case SVt_PVIO:
12335             case SVt_PVFM:
12336             case SVt_PVHV:
12337             case SVt_PVAV:
12338             case SVt_PVCV:
12339             case SVt_PVLV:
12340             case SVt_REGEXP:
12341             case SVt_PVMG:
12342             case SVt_PVNV:
12343             case SVt_PVIV:
12344             case SVt_INVLIST:
12345             case SVt_PV:
12346                 assert(sv_type_details->body_size);
12347                 if (sv_type_details->arena) {
12348                     new_body_inline(new_body, sv_type);
12349                     new_body
12350                         = (void*)((char*)new_body - sv_type_details->offset);
12351                 } else {
12352                     new_body = new_NOARENA(sv_type_details);
12353                 }
12354             }
12355             assert(new_body);
12356             SvANY(dstr) = new_body;
12357
12358 #ifndef PURIFY
12359             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12360                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12361                  sv_type_details->copy, char);
12362 #else
12363             Copy(((char*)SvANY(sstr)),
12364                  ((char*)SvANY(dstr)),
12365                  sv_type_details->body_size + sv_type_details->offset, char);
12366 #endif
12367
12368             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12369                 && !isGV_with_GP(dstr)
12370                 && !isREGEXP(dstr)
12371                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12372                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12373
12374             /* The Copy above means that all the source (unduplicated) pointers
12375                are now in the destination.  We can check the flags and the
12376                pointers in either, but it's possible that there's less cache
12377                missing by always going for the destination.
12378                FIXME - instrument and check that assumption  */
12379             if (sv_type >= SVt_PVMG) {
12380                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12381                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12382                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
12383                     NOOP;
12384                 } else if (SvMAGIC(dstr))
12385                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12386                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12387                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12388                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12389             }
12390
12391             /* The cast silences a GCC warning about unhandled types.  */
12392             switch ((int)sv_type) {
12393             case SVt_PV:
12394                 break;
12395             case SVt_PVIV:
12396                 break;
12397             case SVt_PVNV:
12398                 break;
12399             case SVt_PVMG:
12400                 break;
12401             case SVt_REGEXP:
12402               duprex:
12403                 /* FIXME for plugins */
12404                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12405                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12406                 break;
12407             case SVt_PVLV:
12408                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12409                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12410                     LvTARG(dstr) = dstr;
12411                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12412                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12413                 else
12414                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12415                 if (isREGEXP(sstr)) goto duprex;
12416             case SVt_PVGV:
12417                 /* non-GP case already handled above */
12418                 if(isGV_with_GP(sstr)) {
12419                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12420                     /* Don't call sv_add_backref here as it's going to be
12421                        created as part of the magic cloning of the symbol
12422                        table--unless this is during a join and the stash
12423                        is not actually being cloned.  */
12424                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12425                        at the point of this comment.  */
12426                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12427                     if (param->flags & CLONEf_JOIN_IN)
12428                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12429                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12430                     (void)GpREFCNT_inc(GvGP(dstr));
12431                 }
12432                 break;
12433             case SVt_PVIO:
12434                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12435                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12436                     /* I have no idea why fake dirp (rsfps)
12437                        should be treated differently but otherwise
12438                        we end up with leaks -- sky*/
12439                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12440                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12441                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12442                 } else {
12443                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12444                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12445                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12446                     if (IoDIRP(dstr)) {
12447                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12448                     } else {
12449                         NOOP;
12450                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12451                     }
12452                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12453                 }
12454                 if (IoOFP(dstr) == IoIFP(sstr))
12455                     IoOFP(dstr) = IoIFP(dstr);
12456                 else
12457                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12458                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12459                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12460                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12461                 break;
12462             case SVt_PVAV:
12463                 /* avoid cloning an empty array */
12464                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12465                     SV **dst_ary, **src_ary;
12466                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12467
12468                     src_ary = AvARRAY((const AV *)sstr);
12469                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12470                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12471                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12472                     AvALLOC((const AV *)dstr) = dst_ary;
12473                     if (AvREAL((const AV *)sstr)) {
12474                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12475                                                       param);
12476                     }
12477                     else {
12478                         while (items-- > 0)
12479                             *dst_ary++ = sv_dup(*src_ary++, param);
12480                     }
12481                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12482                     while (items-- > 0) {
12483                         *dst_ary++ = &PL_sv_undef;
12484                     }
12485                 }
12486                 else {
12487                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12488                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12489                     AvMAX(  (const AV *)dstr)   = -1;
12490                     AvFILLp((const AV *)dstr)   = -1;
12491                 }
12492                 break;
12493             case SVt_PVHV:
12494                 if (HvARRAY((const HV *)sstr)) {
12495                     STRLEN i = 0;
12496                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12497                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12498                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12499                     char *darray;
12500                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12501                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12502                         char);
12503                     HvARRAY(dstr) = (HE**)darray;
12504                     while (i <= sxhv->xhv_max) {
12505                         const HE * const source = HvARRAY(sstr)[i];
12506                         HvARRAY(dstr)[i] = source
12507                             ? he_dup(source, sharekeys, param) : 0;
12508                         ++i;
12509                     }
12510                     if (SvOOK(sstr)) {
12511                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12512                         struct xpvhv_aux * const daux = HvAUX(dstr);
12513                         /* This flag isn't copied.  */
12514                         SvOOK_on(dstr);
12515
12516                         if (saux->xhv_name_count) {
12517                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12518                             const I32 count
12519                              = saux->xhv_name_count < 0
12520                                 ? -saux->xhv_name_count
12521                                 :  saux->xhv_name_count;
12522                             HEK **shekp = sname + count;
12523                             HEK **dhekp;
12524                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12525                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12526                             while (shekp-- > sname) {
12527                                 dhekp--;
12528                                 *dhekp = hek_dup(*shekp, param);
12529                             }
12530                         }
12531                         else {
12532                             daux->xhv_name_u.xhvnameu_name
12533                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12534                                           param);
12535                         }
12536                         daux->xhv_name_count = saux->xhv_name_count;
12537
12538                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12539                         daux->xhv_riter = saux->xhv_riter;
12540                         daux->xhv_eiter = saux->xhv_eiter
12541                             ? he_dup(saux->xhv_eiter,
12542                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12543                         /* backref array needs refcnt=2; see sv_add_backref */
12544                         daux->xhv_backreferences =
12545                             (param->flags & CLONEf_JOIN_IN)
12546                                 /* when joining, we let the individual GVs and
12547                                  * CVs add themselves to backref as
12548                                  * needed. This avoids pulling in stuff
12549                                  * that isn't required, and simplifies the
12550                                  * case where stashes aren't cloned back
12551                                  * if they already exist in the parent
12552                                  * thread */
12553                             ? NULL
12554                             : saux->xhv_backreferences
12555                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12556                                     ? MUTABLE_AV(SvREFCNT_inc(
12557                                           sv_dup_inc((const SV *)
12558                                             saux->xhv_backreferences, param)))
12559                                     : MUTABLE_AV(sv_dup((const SV *)
12560                                             saux->xhv_backreferences, param))
12561                                 : 0;
12562
12563                         daux->xhv_mro_meta = saux->xhv_mro_meta
12564                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12565                             : 0;
12566
12567                         /* Record stashes for possible cloning in Perl_clone(). */
12568                         if (HvNAME(sstr))
12569                             av_push(param->stashes, dstr);
12570                     }
12571                 }
12572                 else
12573                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12574                 break;
12575             case SVt_PVCV:
12576                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12577                     CvDEPTH(dstr) = 0;
12578                 }
12579                 /*FALLTHROUGH*/
12580             case SVt_PVFM:
12581                 /* NOTE: not refcounted */
12582                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12583                     hv_dup(CvSTASH(dstr), param);
12584                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12585                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12586                 if (!CvISXSUB(dstr)) {
12587                     OP_REFCNT_LOCK;
12588                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12589                     OP_REFCNT_UNLOCK;
12590                     CvSLABBED_off(dstr);
12591                 } else if (CvCONST(dstr)) {
12592                     CvXSUBANY(dstr).any_ptr =
12593                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12594                 }
12595                 assert(!CvSLABBED(dstr));
12596                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12597                 if (CvNAMED(dstr))
12598                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12599                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12600                 /* don't dup if copying back - CvGV isn't refcounted, so the
12601                  * duped GV may never be freed. A bit of a hack! DAPM */
12602                 else
12603                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12604                     CvCVGV_RC(dstr)
12605                     ? gv_dup_inc(CvGV(sstr), param)
12606                     : (param->flags & CLONEf_JOIN_IN)
12607                         ? NULL
12608                         : gv_dup(CvGV(sstr), param);
12609
12610                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12611                 CvOUTSIDE(dstr) =
12612                     CvWEAKOUTSIDE(sstr)
12613                     ? cv_dup(    CvOUTSIDE(dstr), param)
12614                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12615                 break;
12616             }
12617         }
12618     }
12619
12620     return dstr;
12621  }
12622
12623 SV *
12624 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12625 {
12626     PERL_ARGS_ASSERT_SV_DUP_INC;
12627     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12628 }
12629
12630 SV *
12631 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12632 {
12633     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12634     PERL_ARGS_ASSERT_SV_DUP;
12635
12636     /* Track every SV that (at least initially) had a reference count of 0.
12637        We need to do this by holding an actual reference to it in this array.
12638        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12639        (akin to the stashes hash, and the perl stack), we come unstuck if
12640        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12641        thread) is manipulated in a CLONE method, because CLONE runs before the
12642        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12643        (and fix things up by giving each a reference via the temps stack).
12644        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12645        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12646        before the walk of unreferenced happens and a reference to that is SV
12647        added to the temps stack. At which point we have the same SV considered
12648        to be in use, and free to be re-used. Not good.
12649     */
12650     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12651         assert(param->unreferenced);
12652         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12653     }
12654
12655     return dstr;
12656 }
12657
12658 /* duplicate a context */
12659
12660 PERL_CONTEXT *
12661 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12662 {
12663     PERL_CONTEXT *ncxs;
12664
12665     PERL_ARGS_ASSERT_CX_DUP;
12666
12667     if (!cxs)
12668         return (PERL_CONTEXT*)NULL;
12669
12670     /* look for it in the table first */
12671     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12672     if (ncxs)
12673         return ncxs;
12674
12675     /* create anew and remember what it is */
12676     Newx(ncxs, max + 1, PERL_CONTEXT);
12677     ptr_table_store(PL_ptr_table, cxs, ncxs);
12678     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12679
12680     while (ix >= 0) {
12681         PERL_CONTEXT * const ncx = &ncxs[ix];
12682         if (CxTYPE(ncx) == CXt_SUBST) {
12683             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12684         }
12685         else {
12686             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12687             switch (CxTYPE(ncx)) {
12688             case CXt_SUB:
12689                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12690                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12691                                            : cv_dup(ncx->blk_sub.cv,param));
12692                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12693                                            ? av_dup_inc(ncx->blk_sub.argarray,
12694                                                         param)
12695                                            : NULL);
12696                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12697                                                      param);
12698                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12699                                            ncx->blk_sub.oldcomppad);
12700                 break;
12701             case CXt_EVAL:
12702                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12703                                                       param);
12704                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12705                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12706                 break;
12707             case CXt_LOOP_LAZYSV:
12708                 ncx->blk_loop.state_u.lazysv.end
12709                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12710                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12711                    actually being the same function, and order equivalence of
12712                    the two unions.
12713                    We can assert the later [but only at run time :-(]  */
12714                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12715                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12716             case CXt_LOOP_FOR:
12717                 ncx->blk_loop.state_u.ary.ary
12718                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12719             case CXt_LOOP_LAZYIV:
12720             case CXt_LOOP_PLAIN:
12721                 if (CxPADLOOP(ncx)) {
12722                     ncx->blk_loop.itervar_u.oldcomppad
12723                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12724                                         ncx->blk_loop.itervar_u.oldcomppad);
12725                 } else {
12726                     ncx->blk_loop.itervar_u.gv
12727                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12728                                     param);
12729                 }
12730                 break;
12731             case CXt_FORMAT:
12732                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12733                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12734                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12735                                                      param);
12736                 break;
12737             case CXt_BLOCK:
12738             case CXt_NULL:
12739             case CXt_WHEN:
12740             case CXt_GIVEN:
12741                 break;
12742             }
12743         }
12744         --ix;
12745     }
12746     return ncxs;
12747 }
12748
12749 /* duplicate a stack info structure */
12750
12751 PERL_SI *
12752 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12753 {
12754     PERL_SI *nsi;
12755
12756     PERL_ARGS_ASSERT_SI_DUP;
12757
12758     if (!si)
12759         return (PERL_SI*)NULL;
12760
12761     /* look for it in the table first */
12762     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12763     if (nsi)
12764         return nsi;
12765
12766     /* create anew and remember what it is */
12767     Newxz(nsi, 1, PERL_SI);
12768     ptr_table_store(PL_ptr_table, si, nsi);
12769
12770     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12771     nsi->si_cxix        = si->si_cxix;
12772     nsi->si_cxmax       = si->si_cxmax;
12773     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12774     nsi->si_type        = si->si_type;
12775     nsi->si_prev        = si_dup(si->si_prev, param);
12776     nsi->si_next        = si_dup(si->si_next, param);
12777     nsi->si_markoff     = si->si_markoff;
12778
12779     return nsi;
12780 }
12781
12782 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12783 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12784 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12785 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12786 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12787 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12788 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12789 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12790 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12791 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12792 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12793 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12794 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12795 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12796 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12797 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12798
12799 /* XXXXX todo */
12800 #define pv_dup_inc(p)   SAVEPV(p)
12801 #define pv_dup(p)       SAVEPV(p)
12802 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12803
12804 /* map any object to the new equivent - either something in the
12805  * ptr table, or something in the interpreter structure
12806  */
12807
12808 void *
12809 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12810 {
12811     void *ret;
12812
12813     PERL_ARGS_ASSERT_ANY_DUP;
12814
12815     if (!v)
12816         return (void*)NULL;
12817
12818     /* look for it in the table first */
12819     ret = ptr_table_fetch(PL_ptr_table, v);
12820     if (ret)
12821         return ret;
12822
12823     /* see if it is part of the interpreter structure */
12824     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12825         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12826     else {
12827         ret = v;
12828     }
12829
12830     return ret;
12831 }
12832
12833 /* duplicate the save stack */
12834
12835 ANY *
12836 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12837 {
12838     dVAR;
12839     ANY * const ss      = proto_perl->Isavestack;
12840     const I32 max       = proto_perl->Isavestack_max;
12841     I32 ix              = proto_perl->Isavestack_ix;
12842     ANY *nss;
12843     const SV *sv;
12844     const GV *gv;
12845     const AV *av;
12846     const HV *hv;
12847     void* ptr;
12848     int intval;
12849     long longval;
12850     GP *gp;
12851     IV iv;
12852     I32 i;
12853     char *c = NULL;
12854     void (*dptr) (void*);
12855     void (*dxptr) (pTHX_ void*);
12856
12857     PERL_ARGS_ASSERT_SS_DUP;
12858
12859     Newxz(nss, max, ANY);
12860
12861     while (ix > 0) {
12862         const UV uv = POPUV(ss,ix);
12863         const U8 type = (U8)uv & SAVE_MASK;
12864
12865         TOPUV(nss,ix) = uv;
12866         switch (type) {
12867         case SAVEt_CLEARSV:
12868         case SAVEt_CLEARPADRANGE:
12869             break;
12870         case SAVEt_HELEM:               /* hash element */
12871             sv = (const SV *)POPPTR(ss,ix);
12872             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12873             /* fall through */
12874         case SAVEt_ITEM:                        /* normal string */
12875         case SAVEt_GVSV:                        /* scalar slot in GV */
12876         case SAVEt_SV:                          /* scalar reference */
12877             sv = (const SV *)POPPTR(ss,ix);
12878             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12879             /* fall through */
12880         case SAVEt_FREESV:
12881         case SAVEt_MORTALIZESV:
12882         case SAVEt_READONLY_OFF:
12883             sv = (const SV *)POPPTR(ss,ix);
12884             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12885             break;
12886         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12887             c = (char*)POPPTR(ss,ix);
12888             TOPPTR(nss,ix) = savesharedpv(c);
12889             ptr = POPPTR(ss,ix);
12890             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12891             break;
12892         case SAVEt_GENERIC_SVREF:               /* generic sv */
12893         case SAVEt_SVREF:                       /* scalar reference */
12894             sv = (const SV *)POPPTR(ss,ix);
12895             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12896             ptr = POPPTR(ss,ix);
12897             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12898             break;
12899         case SAVEt_GVSLOT:              /* any slot in GV */
12900             sv = (const SV *)POPPTR(ss,ix);
12901             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12902             ptr = POPPTR(ss,ix);
12903             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12904             sv = (const SV *)POPPTR(ss,ix);
12905             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12906             break;
12907         case SAVEt_HV:                          /* hash reference */
12908         case SAVEt_AV:                          /* array reference */
12909             sv = (const SV *) POPPTR(ss,ix);
12910             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12911             /* fall through */
12912         case SAVEt_COMPPAD:
12913         case SAVEt_NSTAB:
12914             sv = (const SV *) POPPTR(ss,ix);
12915             TOPPTR(nss,ix) = sv_dup(sv, param);
12916             break;
12917         case SAVEt_INT:                         /* int reference */
12918             ptr = POPPTR(ss,ix);
12919             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12920             intval = (int)POPINT(ss,ix);
12921             TOPINT(nss,ix) = intval;
12922             break;
12923         case SAVEt_LONG:                        /* long reference */
12924             ptr = POPPTR(ss,ix);
12925             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12926             longval = (long)POPLONG(ss,ix);
12927             TOPLONG(nss,ix) = longval;
12928             break;
12929         case SAVEt_I32:                         /* I32 reference */
12930             ptr = POPPTR(ss,ix);
12931             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12932             i = POPINT(ss,ix);
12933             TOPINT(nss,ix) = i;
12934             break;
12935         case SAVEt_IV:                          /* IV reference */
12936         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
12937             ptr = POPPTR(ss,ix);
12938             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12939             iv = POPIV(ss,ix);
12940             TOPIV(nss,ix) = iv;
12941             break;
12942         case SAVEt_HPTR:                        /* HV* reference */
12943         case SAVEt_APTR:                        /* AV* reference */
12944         case SAVEt_SPTR:                        /* SV* reference */
12945             ptr = POPPTR(ss,ix);
12946             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12947             sv = (const SV *)POPPTR(ss,ix);
12948             TOPPTR(nss,ix) = sv_dup(sv, param);
12949             break;
12950         case SAVEt_VPTR:                        /* random* reference */
12951             ptr = POPPTR(ss,ix);
12952             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12953             /* Fall through */
12954         case SAVEt_INT_SMALL:
12955         case SAVEt_I32_SMALL:
12956         case SAVEt_I16:                         /* I16 reference */
12957         case SAVEt_I8:                          /* I8 reference */
12958         case SAVEt_BOOL:
12959             ptr = POPPTR(ss,ix);
12960             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12961             break;
12962         case SAVEt_GENERIC_PVREF:               /* generic char* */
12963         case SAVEt_PPTR:                        /* char* reference */
12964             ptr = POPPTR(ss,ix);
12965             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12966             c = (char*)POPPTR(ss,ix);
12967             TOPPTR(nss,ix) = pv_dup(c);
12968             break;
12969         case SAVEt_GP:                          /* scalar reference */
12970             gp = (GP*)POPPTR(ss,ix);
12971             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12972             (void)GpREFCNT_inc(gp);
12973             gv = (const GV *)POPPTR(ss,ix);
12974             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12975             break;
12976         case SAVEt_FREEOP:
12977             ptr = POPPTR(ss,ix);
12978             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12979                 /* these are assumed to be refcounted properly */
12980                 OP *o;
12981                 switch (((OP*)ptr)->op_type) {
12982                 case OP_LEAVESUB:
12983                 case OP_LEAVESUBLV:
12984                 case OP_LEAVEEVAL:
12985                 case OP_LEAVE:
12986                 case OP_SCOPE:
12987                 case OP_LEAVEWRITE:
12988                     TOPPTR(nss,ix) = ptr;
12989                     o = (OP*)ptr;
12990                     OP_REFCNT_LOCK;
12991                     (void) OpREFCNT_inc(o);
12992                     OP_REFCNT_UNLOCK;
12993                     break;
12994                 default:
12995                     TOPPTR(nss,ix) = NULL;
12996                     break;
12997                 }
12998             }
12999             else
13000                 TOPPTR(nss,ix) = NULL;
13001             break;
13002         case SAVEt_FREECOPHH:
13003             ptr = POPPTR(ss,ix);
13004             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
13005             break;
13006         case SAVEt_ADELETE:
13007             av = (const AV *)POPPTR(ss,ix);
13008             TOPPTR(nss,ix) = av_dup_inc(av, param);
13009             i = POPINT(ss,ix);
13010             TOPINT(nss,ix) = i;
13011             break;
13012         case SAVEt_DELETE:
13013             hv = (const HV *)POPPTR(ss,ix);
13014             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13015             i = POPINT(ss,ix);
13016             TOPINT(nss,ix) = i;
13017             /* Fall through */
13018         case SAVEt_FREEPV:
13019             c = (char*)POPPTR(ss,ix);
13020             TOPPTR(nss,ix) = pv_dup_inc(c);
13021             break;
13022         case SAVEt_STACK_POS:           /* Position on Perl stack */
13023             i = POPINT(ss,ix);
13024             TOPINT(nss,ix) = i;
13025             break;
13026         case SAVEt_DESTRUCTOR:
13027             ptr = POPPTR(ss,ix);
13028             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13029             dptr = POPDPTR(ss,ix);
13030             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
13031                                         any_dup(FPTR2DPTR(void *, dptr),
13032                                                 proto_perl));
13033             break;
13034         case SAVEt_DESTRUCTOR_X:
13035             ptr = POPPTR(ss,ix);
13036             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
13037             dxptr = POPDXPTR(ss,ix);
13038             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
13039                                          any_dup(FPTR2DPTR(void *, dxptr),
13040                                                  proto_perl));
13041             break;
13042         case SAVEt_REGCONTEXT:
13043         case SAVEt_ALLOC:
13044             ix -= uv >> SAVE_TIGHT_SHIFT;
13045             break;
13046         case SAVEt_AELEM:               /* array element */
13047             sv = (const SV *)POPPTR(ss,ix);
13048             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13049             i = POPINT(ss,ix);
13050             TOPINT(nss,ix) = i;
13051             av = (const AV *)POPPTR(ss,ix);
13052             TOPPTR(nss,ix) = av_dup_inc(av, param);
13053             break;
13054         case SAVEt_OP:
13055             ptr = POPPTR(ss,ix);
13056             TOPPTR(nss,ix) = ptr;
13057             break;
13058         case SAVEt_HINTS:
13059             ptr = POPPTR(ss,ix);
13060             ptr = cophh_copy((COPHH*)ptr);
13061             TOPPTR(nss,ix) = ptr;
13062             i = POPINT(ss,ix);
13063             TOPINT(nss,ix) = i;
13064             if (i & HINT_LOCALIZE_HH) {
13065                 hv = (const HV *)POPPTR(ss,ix);
13066                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13067             }
13068             break;
13069         case SAVEt_PADSV_AND_MORTALIZE:
13070             longval = (long)POPLONG(ss,ix);
13071             TOPLONG(nss,ix) = longval;
13072             ptr = POPPTR(ss,ix);
13073             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13074             sv = (const SV *)POPPTR(ss,ix);
13075             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13076             break;
13077         case SAVEt_SET_SVFLAGS:
13078             i = POPINT(ss,ix);
13079             TOPINT(nss,ix) = i;
13080             i = POPINT(ss,ix);
13081             TOPINT(nss,ix) = i;
13082             sv = (const SV *)POPPTR(ss,ix);
13083             TOPPTR(nss,ix) = sv_dup(sv, param);
13084             break;
13085         case SAVEt_COMPILE_WARNINGS:
13086             ptr = POPPTR(ss,ix);
13087             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13088             break;
13089         case SAVEt_PARSER:
13090             ptr = POPPTR(ss,ix);
13091             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13092             break;
13093         default:
13094             Perl_croak(aTHX_
13095                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13096         }
13097     }
13098
13099     return nss;
13100 }
13101
13102
13103 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13104  * flag to the result. This is done for each stash before cloning starts,
13105  * so we know which stashes want their objects cloned */
13106
13107 static void
13108 do_mark_cloneable_stash(pTHX_ SV *const sv)
13109 {
13110     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13111     if (hvname) {
13112         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13113         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13114         if (cloner && GvCV(cloner)) {
13115             dSP;
13116             UV status;
13117
13118             ENTER;
13119             SAVETMPS;
13120             PUSHMARK(SP);
13121             mXPUSHs(newSVhek(hvname));
13122             PUTBACK;
13123             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13124             SPAGAIN;
13125             status = POPu;
13126             PUTBACK;
13127             FREETMPS;
13128             LEAVE;
13129             if (status)
13130                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13131         }
13132     }
13133 }
13134
13135
13136
13137 /*
13138 =for apidoc perl_clone
13139
13140 Create and return a new interpreter by cloning the current one.
13141
13142 perl_clone takes these flags as parameters:
13143
13144 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13145 without it we only clone the data and zero the stacks,
13146 with it we copy the stacks and the new perl interpreter is
13147 ready to run at the exact same point as the previous one.
13148 The pseudo-fork code uses COPY_STACKS while the
13149 threads->create doesn't.
13150
13151 CLONEf_KEEP_PTR_TABLE -
13152 perl_clone keeps a ptr_table with the pointer of the old
13153 variable as a key and the new variable as a value,
13154 this allows it to check if something has been cloned and not
13155 clone it again but rather just use the value and increase the
13156 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13157 the ptr_table using the function
13158 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13159 reason to keep it around is if you want to dup some of your own
13160 variable who are outside the graph perl scans, example of this
13161 code is in threads.xs create.
13162
13163 CLONEf_CLONE_HOST -
13164 This is a win32 thing, it is ignored on unix, it tells perls
13165 win32host code (which is c++) to clone itself, this is needed on
13166 win32 if you want to run two threads at the same time,
13167 if you just want to do some stuff in a separate perl interpreter
13168 and then throw it away and return to the original one,
13169 you don't need to do anything.
13170
13171 =cut
13172 */
13173
13174 /* XXX the above needs expanding by someone who actually understands it ! */
13175 EXTERN_C PerlInterpreter *
13176 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13177
13178 PerlInterpreter *
13179 perl_clone(PerlInterpreter *proto_perl, UV flags)
13180 {
13181    dVAR;
13182 #ifdef PERL_IMPLICIT_SYS
13183
13184     PERL_ARGS_ASSERT_PERL_CLONE;
13185
13186    /* perlhost.h so we need to call into it
13187    to clone the host, CPerlHost should have a c interface, sky */
13188
13189    if (flags & CLONEf_CLONE_HOST) {
13190        return perl_clone_host(proto_perl,flags);
13191    }
13192    return perl_clone_using(proto_perl, flags,
13193                             proto_perl->IMem,
13194                             proto_perl->IMemShared,
13195                             proto_perl->IMemParse,
13196                             proto_perl->IEnv,
13197                             proto_perl->IStdIO,
13198                             proto_perl->ILIO,
13199                             proto_perl->IDir,
13200                             proto_perl->ISock,
13201                             proto_perl->IProc);
13202 }
13203
13204 PerlInterpreter *
13205 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13206                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13207                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13208                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13209                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13210                  struct IPerlProc* ipP)
13211 {
13212     /* XXX many of the string copies here can be optimized if they're
13213      * constants; they need to be allocated as common memory and just
13214      * their pointers copied. */
13215
13216     IV i;
13217     CLONE_PARAMS clone_params;
13218     CLONE_PARAMS* const param = &clone_params;
13219
13220     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13221
13222     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13223 #else           /* !PERL_IMPLICIT_SYS */
13224     IV i;
13225     CLONE_PARAMS clone_params;
13226     CLONE_PARAMS* param = &clone_params;
13227     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13228
13229     PERL_ARGS_ASSERT_PERL_CLONE;
13230 #endif          /* PERL_IMPLICIT_SYS */
13231
13232     /* for each stash, determine whether its objects should be cloned */
13233     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13234     PERL_SET_THX(my_perl);
13235
13236 #ifdef DEBUGGING
13237     PoisonNew(my_perl, 1, PerlInterpreter);
13238     PL_op = NULL;
13239     PL_curcop = NULL;
13240     PL_defstash = NULL; /* may be used by perl malloc() */
13241     PL_markstack = 0;
13242     PL_scopestack = 0;
13243     PL_scopestack_name = 0;
13244     PL_savestack = 0;
13245     PL_savestack_ix = 0;
13246     PL_savestack_max = -1;
13247     PL_sig_pending = 0;
13248     PL_parser = NULL;
13249     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13250 #  ifdef DEBUG_LEAKING_SCALARS
13251     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13252 #  endif
13253 #else   /* !DEBUGGING */
13254     Zero(my_perl, 1, PerlInterpreter);
13255 #endif  /* DEBUGGING */
13256
13257 #ifdef PERL_IMPLICIT_SYS
13258     /* host pointers */
13259     PL_Mem              = ipM;
13260     PL_MemShared        = ipMS;
13261     PL_MemParse         = ipMP;
13262     PL_Env              = ipE;
13263     PL_StdIO            = ipStd;
13264     PL_LIO              = ipLIO;
13265     PL_Dir              = ipD;
13266     PL_Sock             = ipS;
13267     PL_Proc             = ipP;
13268 #endif          /* PERL_IMPLICIT_SYS */
13269
13270
13271     param->flags = flags;
13272     /* Nothing in the core code uses this, but we make it available to
13273        extensions (using mg_dup).  */
13274     param->proto_perl = proto_perl;
13275     /* Likely nothing will use this, but it is initialised to be consistent
13276        with Perl_clone_params_new().  */
13277     param->new_perl = my_perl;
13278     param->unreferenced = NULL;
13279
13280
13281     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13282
13283     PL_body_arenas = NULL;
13284     Zero(&PL_body_roots, 1, PL_body_roots);
13285     
13286     PL_sv_count         = 0;
13287     PL_sv_root          = NULL;
13288     PL_sv_arenaroot     = NULL;
13289
13290     PL_debug            = proto_perl->Idebug;
13291
13292     /* dbargs array probably holds garbage */
13293     PL_dbargs           = NULL;
13294
13295     PL_compiling = proto_perl->Icompiling;
13296
13297     /* pseudo environmental stuff */
13298     PL_origargc         = proto_perl->Iorigargc;
13299     PL_origargv         = proto_perl->Iorigargv;
13300
13301 #if !NO_TAINT_SUPPORT
13302     /* Set tainting stuff before PerlIO_debug can possibly get called */
13303     PL_tainting         = proto_perl->Itainting;
13304     PL_taint_warn       = proto_perl->Itaint_warn;
13305 #else
13306     PL_tainting         = FALSE;
13307     PL_taint_warn       = FALSE;
13308 #endif
13309
13310     PL_minus_c          = proto_perl->Iminus_c;
13311
13312     PL_localpatches     = proto_perl->Ilocalpatches;
13313     PL_splitstr         = proto_perl->Isplitstr;
13314     PL_minus_n          = proto_perl->Iminus_n;
13315     PL_minus_p          = proto_perl->Iminus_p;
13316     PL_minus_l          = proto_perl->Iminus_l;
13317     PL_minus_a          = proto_perl->Iminus_a;
13318     PL_minus_E          = proto_perl->Iminus_E;
13319     PL_minus_F          = proto_perl->Iminus_F;
13320     PL_doswitches       = proto_perl->Idoswitches;
13321     PL_dowarn           = proto_perl->Idowarn;
13322 #ifdef PERL_SAWAMPERSAND
13323     PL_sawampersand     = proto_perl->Isawampersand;
13324 #endif
13325     PL_unsafe           = proto_perl->Iunsafe;
13326     PL_perldb           = proto_perl->Iperldb;
13327     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13328     PL_exit_flags       = proto_perl->Iexit_flags;
13329
13330     /* XXX time(&PL_basetime) when asked for? */
13331     PL_basetime         = proto_perl->Ibasetime;
13332
13333     PL_maxsysfd         = proto_perl->Imaxsysfd;
13334     PL_statusvalue      = proto_perl->Istatusvalue;
13335 #ifdef VMS
13336     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13337 #else
13338     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13339 #endif
13340
13341     /* RE engine related */
13342     PL_regmatch_slab    = NULL;
13343     PL_reg_curpm        = NULL;
13344
13345     PL_sub_generation   = proto_perl->Isub_generation;
13346
13347     /* funky return mechanisms */
13348     PL_forkprocess      = proto_perl->Iforkprocess;
13349
13350     /* internal state */
13351     PL_maxo             = proto_perl->Imaxo;
13352
13353     PL_main_start       = proto_perl->Imain_start;
13354     PL_eval_root        = proto_perl->Ieval_root;
13355     PL_eval_start       = proto_perl->Ieval_start;
13356
13357     PL_filemode         = proto_perl->Ifilemode;
13358     PL_lastfd           = proto_perl->Ilastfd;
13359     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13360     PL_Argv             = NULL;
13361     PL_Cmd              = NULL;
13362     PL_gensym           = proto_perl->Igensym;
13363
13364     PL_laststatval      = proto_perl->Ilaststatval;
13365     PL_laststype        = proto_perl->Ilaststype;
13366     PL_mess_sv          = NULL;
13367
13368     PL_profiledata      = NULL;
13369
13370     PL_generation       = proto_perl->Igeneration;
13371
13372     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13373     PL_in_clean_all     = proto_perl->Iin_clean_all;
13374
13375     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13376     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13377     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13378     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13379     PL_nomemok          = proto_perl->Inomemok;
13380     PL_an               = proto_perl->Ian;
13381     PL_evalseq          = proto_perl->Ievalseq;
13382     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13383     PL_origalen         = proto_perl->Iorigalen;
13384
13385     PL_sighandlerp      = proto_perl->Isighandlerp;
13386
13387     PL_runops           = proto_perl->Irunops;
13388
13389     PL_subline          = proto_perl->Isubline;
13390
13391 #ifdef FCRYPT
13392     PL_cryptseen        = proto_perl->Icryptseen;
13393 #endif
13394
13395 #ifdef USE_LOCALE_COLLATE
13396     PL_collation_ix     = proto_perl->Icollation_ix;
13397     PL_collation_standard       = proto_perl->Icollation_standard;
13398     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13399     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13400 #endif /* USE_LOCALE_COLLATE */
13401
13402 #ifdef USE_LOCALE_NUMERIC
13403     PL_numeric_standard = proto_perl->Inumeric_standard;
13404     PL_numeric_local    = proto_perl->Inumeric_local;
13405 #endif /* !USE_LOCALE_NUMERIC */
13406
13407     /* Did the locale setup indicate UTF-8? */
13408     PL_utf8locale       = proto_perl->Iutf8locale;
13409     /* Unicode features (see perlrun/-C) */
13410     PL_unicode          = proto_perl->Iunicode;
13411
13412     /* Pre-5.8 signals control */
13413     PL_signals          = proto_perl->Isignals;
13414
13415     /* times() ticks per second */
13416     PL_clocktick        = proto_perl->Iclocktick;
13417
13418     /* Recursion stopper for PerlIO_find_layer */
13419     PL_in_load_module   = proto_perl->Iin_load_module;
13420
13421     /* sort() routine */
13422     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13423
13424     /* Not really needed/useful since the reenrant_retint is "volatile",
13425      * but do it for consistency's sake. */
13426     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13427
13428     /* Hooks to shared SVs and locks. */
13429     PL_sharehook        = proto_perl->Isharehook;
13430     PL_lockhook         = proto_perl->Ilockhook;
13431     PL_unlockhook       = proto_perl->Iunlockhook;
13432     PL_threadhook       = proto_perl->Ithreadhook;
13433     PL_destroyhook      = proto_perl->Idestroyhook;
13434     PL_signalhook       = proto_perl->Isignalhook;
13435
13436     PL_globhook         = proto_perl->Iglobhook;
13437
13438     /* swatch cache */
13439     PL_last_swash_hv    = NULL; /* reinits on demand */
13440     PL_last_swash_klen  = 0;
13441     PL_last_swash_key[0]= '\0';
13442     PL_last_swash_tmps  = (U8*)NULL;
13443     PL_last_swash_slen  = 0;
13444
13445     PL_srand_called     = proto_perl->Isrand_called;
13446     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
13447
13448     if (flags & CLONEf_COPY_STACKS) {
13449         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13450         PL_tmps_ix              = proto_perl->Itmps_ix;
13451         PL_tmps_max             = proto_perl->Itmps_max;
13452         PL_tmps_floor           = proto_perl->Itmps_floor;
13453
13454         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13455          * NOTE: unlike the others! */
13456         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13457         PL_scopestack_max       = proto_perl->Iscopestack_max;
13458
13459         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13460          * NOTE: unlike the others! */
13461         PL_savestack_ix         = proto_perl->Isavestack_ix;
13462         PL_savestack_max        = proto_perl->Isavestack_max;
13463     }
13464
13465     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13466     PL_top_env          = &PL_start_env;
13467
13468     PL_op               = proto_perl->Iop;
13469
13470     PL_Sv               = NULL;
13471     PL_Xpv              = (XPV*)NULL;
13472     my_perl->Ina        = proto_perl->Ina;
13473
13474     PL_statbuf          = proto_perl->Istatbuf;
13475     PL_statcache        = proto_perl->Istatcache;
13476
13477 #ifdef HAS_TIMES
13478     PL_timesbuf         = proto_perl->Itimesbuf;
13479 #endif
13480
13481 #if !NO_TAINT_SUPPORT
13482     PL_tainted          = proto_perl->Itainted;
13483 #else
13484     PL_tainted          = FALSE;
13485 #endif
13486     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13487
13488     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13489
13490     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13491     PL_restartop        = proto_perl->Irestartop;
13492     PL_in_eval          = proto_perl->Iin_eval;
13493     PL_delaymagic       = proto_perl->Idelaymagic;
13494     PL_phase            = proto_perl->Iphase;
13495     PL_localizing       = proto_perl->Ilocalizing;
13496
13497     PL_hv_fetch_ent_mh  = NULL;
13498     PL_modcount         = proto_perl->Imodcount;
13499     PL_lastgotoprobe    = NULL;
13500     PL_dumpindent       = proto_perl->Idumpindent;
13501
13502     PL_efloatbuf        = NULL;         /* reinits on demand */
13503     PL_efloatsize       = 0;                    /* reinits on demand */
13504
13505     /* regex stuff */
13506
13507     PL_colorset         = 0;            /* reinits PL_colors[] */
13508     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13509
13510     /* Pluggable optimizer */
13511     PL_peepp            = proto_perl->Ipeepp;
13512     PL_rpeepp           = proto_perl->Irpeepp;
13513     /* op_free() hook */
13514     PL_opfreehook       = proto_perl->Iopfreehook;
13515
13516 #ifdef USE_REENTRANT_API
13517     /* XXX: things like -Dm will segfault here in perlio, but doing
13518      *  PERL_SET_CONTEXT(proto_perl);
13519      * breaks too many other things
13520      */
13521     Perl_reentrant_init(aTHX);
13522 #endif
13523
13524     /* create SV map for pointer relocation */
13525     PL_ptr_table = ptr_table_new();
13526
13527     /* initialize these special pointers as early as possible */
13528     init_constants();
13529     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13530     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13531     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13532
13533     /* create (a non-shared!) shared string table */
13534     PL_strtab           = newHV();
13535     HvSHAREKEYS_off(PL_strtab);
13536     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13537     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13538
13539     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13540
13541     /* This PV will be free'd special way so must set it same way op.c does */
13542     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13543     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13544
13545     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13546     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13547     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13548     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13549
13550     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13551     /* This makes no difference to the implementation, as it always pushes
13552        and shifts pointers to other SVs without changing their reference
13553        count, with the array becoming empty before it is freed. However, it
13554        makes it conceptually clear what is going on, and will avoid some
13555        work inside av.c, filling slots between AvFILL() and AvMAX() with
13556        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13557     AvREAL_off(param->stashes);
13558
13559     if (!(flags & CLONEf_COPY_STACKS)) {
13560         param->unreferenced = newAV();
13561     }
13562
13563 #ifdef PERLIO_LAYERS
13564     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13565     PerlIO_clone(aTHX_ proto_perl, param);
13566 #endif
13567
13568     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
13569     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
13570     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
13571     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13572     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13573     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13574
13575     /* switches */
13576     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13577     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13578     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13579     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13580
13581     /* magical thingies */
13582
13583     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13584
13585     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13586     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13587     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13588
13589    
13590     /* Clone the regex array */
13591     /* ORANGE FIXME for plugins, probably in the SV dup code.
13592        newSViv(PTR2IV(CALLREGDUPE(
13593        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13594     */
13595     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13596     PL_regex_pad = AvARRAY(PL_regex_padav);
13597
13598     PL_stashpadmax      = proto_perl->Istashpadmax;
13599     PL_stashpadix       = proto_perl->Istashpadix ;
13600     Newx(PL_stashpad, PL_stashpadmax, HV *);
13601     {
13602         PADOFFSET o = 0;
13603         for (; o < PL_stashpadmax; ++o)
13604             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13605     }
13606
13607     /* shortcuts to various I/O objects */
13608     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13609     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13610     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13611     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13612     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
13613     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13614     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13615
13616     /* shortcuts to regexp stuff */
13617     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
13618
13619     /* shortcuts to misc objects */
13620     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13621
13622     /* shortcuts to debugging objects */
13623     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
13624     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
13625     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
13626     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13627     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13628     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13629
13630     /* symbol tables */
13631     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13632     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13633     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13634     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13635     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13636
13637     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13638     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13639     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13640     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13641     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13642     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13643     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13644     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13645
13646     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13647
13648     /* subprocess state */
13649     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13650
13651     if (proto_perl->Iop_mask)
13652         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13653     else
13654         PL_op_mask      = NULL;
13655     /* PL_asserting        = proto_perl->Iasserting; */
13656
13657     /* current interpreter roots */
13658     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13659     OP_REFCNT_LOCK;
13660     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13661     OP_REFCNT_UNLOCK;
13662
13663     /* runtime control stuff */
13664     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13665
13666     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13667
13668     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13669
13670     /* interpreter atexit processing */
13671     PL_exitlistlen      = proto_perl->Iexitlistlen;
13672     if (PL_exitlistlen) {
13673         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13674         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13675     }
13676     else
13677         PL_exitlist     = (PerlExitListEntry*)NULL;
13678
13679     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13680     if (PL_my_cxt_size) {
13681         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13682         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13683 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13684         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13685         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13686 #endif
13687     }
13688     else {
13689         PL_my_cxt_list  = (void**)NULL;
13690 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13691         PL_my_cxt_keys  = (const char**)NULL;
13692 #endif
13693     }
13694     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13695     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13696     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13697     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13698
13699     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13700
13701     PAD_CLONE_VARS(proto_perl, param);
13702
13703 #ifdef HAVE_INTERP_INTERN
13704     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13705 #endif
13706
13707     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13708
13709 #ifdef PERL_USES_PL_PIDSTATUS
13710     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13711 #endif
13712     PL_osname           = SAVEPV(proto_perl->Iosname);
13713     PL_parser           = parser_dup(proto_perl->Iparser, param);
13714
13715     /* XXX this only works if the saved cop has already been cloned */
13716     if (proto_perl->Iparser) {
13717         PL_parser->saved_curcop = (COP*)any_dup(
13718                                     proto_perl->Iparser->saved_curcop,
13719                                     proto_perl);
13720     }
13721
13722     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13723
13724 #ifdef USE_LOCALE_COLLATE
13725     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13726 #endif /* USE_LOCALE_COLLATE */
13727
13728 #ifdef USE_LOCALE_NUMERIC
13729     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13730     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13731 #endif /* !USE_LOCALE_NUMERIC */
13732
13733     /* Unicode inversion lists */
13734     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13735     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
13736     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13737
13738     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13739     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13740
13741     /* utf8 character class swashes */
13742     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13743         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13744     }
13745     for (i = 0; i < POSIX_CC_COUNT; i++) {
13746         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13747         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13748         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13749     }
13750     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13751     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13752     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13753     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13754     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13755     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13756     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13757     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13758     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13759     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13760     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13761     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13762     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13763     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13764     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13765     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13766
13767     if (proto_perl->Ipsig_pend) {
13768         Newxz(PL_psig_pend, SIG_SIZE, int);
13769     }
13770     else {
13771         PL_psig_pend    = (int*)NULL;
13772     }
13773
13774     if (proto_perl->Ipsig_name) {
13775         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13776         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13777                             param);
13778         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13779     }
13780     else {
13781         PL_psig_ptr     = (SV**)NULL;
13782         PL_psig_name    = (SV**)NULL;
13783     }
13784
13785     if (flags & CLONEf_COPY_STACKS) {
13786         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13787         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13788                             PL_tmps_ix+1, param);
13789
13790         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13791         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13792         Newxz(PL_markstack, i, I32);
13793         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13794                                                   - proto_perl->Imarkstack);
13795         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13796                                                   - proto_perl->Imarkstack);
13797         Copy(proto_perl->Imarkstack, PL_markstack,
13798              PL_markstack_ptr - PL_markstack + 1, I32);
13799
13800         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13801          * NOTE: unlike the others! */
13802         Newxz(PL_scopestack, PL_scopestack_max, I32);
13803         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13804
13805 #ifdef DEBUGGING
13806         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13807         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13808 #endif
13809         /* reset stack AV to correct length before its duped via
13810          * PL_curstackinfo */
13811         AvFILLp(proto_perl->Icurstack) =
13812                             proto_perl->Istack_sp - proto_perl->Istack_base;
13813
13814         /* NOTE: si_dup() looks at PL_markstack */
13815         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13816
13817         /* PL_curstack          = PL_curstackinfo->si_stack; */
13818         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13819         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13820
13821         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13822         PL_stack_base           = AvARRAY(PL_curstack);
13823         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13824                                                    - proto_perl->Istack_base);
13825         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13826
13827         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13828         PL_savestack            = ss_dup(proto_perl, param);
13829     }
13830     else {
13831         init_stacks();
13832         ENTER;                  /* perl_destruct() wants to LEAVE; */
13833     }
13834
13835     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13836     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13837
13838     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13839     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13840     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13841     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13842     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13843     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13844
13845     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13846
13847     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13848     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
13849     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
13850
13851     PL_stashcache       = newHV();
13852
13853     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13854                                             proto_perl->Iwatchaddr);
13855     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13856     if (PL_debug && PL_watchaddr) {
13857         PerlIO_printf(Perl_debug_log,
13858           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13859           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13860           PTR2UV(PL_watchok));
13861     }
13862
13863     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13864     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13865     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13866
13867     /* Call the ->CLONE method, if it exists, for each of the stashes
13868        identified by sv_dup() above.
13869     */
13870     while(av_len(param->stashes) != -1) {
13871         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13872         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13873         if (cloner && GvCV(cloner)) {
13874             dSP;
13875             ENTER;
13876             SAVETMPS;
13877             PUSHMARK(SP);
13878             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13879             PUTBACK;
13880             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13881             FREETMPS;
13882             LEAVE;
13883         }
13884     }
13885
13886     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13887         ptr_table_free(PL_ptr_table);
13888         PL_ptr_table = NULL;
13889     }
13890
13891     if (!(flags & CLONEf_COPY_STACKS)) {
13892         unreferenced_to_tmp_stack(param->unreferenced);
13893     }
13894
13895     SvREFCNT_dec(param->stashes);
13896
13897     /* orphaned? eg threads->new inside BEGIN or use */
13898     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13899         SvREFCNT_inc_simple_void(PL_compcv);
13900         SAVEFREESV(PL_compcv);
13901     }
13902
13903     return my_perl;
13904 }
13905
13906 static void
13907 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13908 {
13909     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13910     
13911     if (AvFILLp(unreferenced) > -1) {
13912         SV **svp = AvARRAY(unreferenced);
13913         SV **const last = svp + AvFILLp(unreferenced);
13914         SSize_t count = 0;
13915
13916         do {
13917             if (SvREFCNT(*svp) == 1)
13918                 ++count;
13919         } while (++svp <= last);
13920
13921         EXTEND_MORTAL(count);
13922         svp = AvARRAY(unreferenced);
13923
13924         do {
13925             if (SvREFCNT(*svp) == 1) {
13926                 /* Our reference is the only one to this SV. This means that
13927                    in this thread, the scalar effectively has a 0 reference.
13928                    That doesn't work (cleanup never happens), so donate our
13929                    reference to it onto the save stack. */
13930                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13931             } else {
13932                 /* As an optimisation, because we are already walking the
13933                    entire array, instead of above doing either
13934                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13935                    release our reference to the scalar, so that at the end of
13936                    the array owns zero references to the scalars it happens to
13937                    point to. We are effectively converting the array from
13938                    AvREAL() on to AvREAL() off. This saves the av_clear()
13939                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13940                    walking the array a second time.  */
13941                 SvREFCNT_dec(*svp);
13942             }
13943
13944         } while (++svp <= last);
13945         AvREAL_off(unreferenced);
13946     }
13947     SvREFCNT_dec_NN(unreferenced);
13948 }
13949
13950 void
13951 Perl_clone_params_del(CLONE_PARAMS *param)
13952 {
13953     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13954        happy: */
13955     PerlInterpreter *const to = param->new_perl;
13956     dTHXa(to);
13957     PerlInterpreter *const was = PERL_GET_THX;
13958
13959     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13960
13961     if (was != to) {
13962         PERL_SET_THX(to);
13963     }
13964
13965     SvREFCNT_dec(param->stashes);
13966     if (param->unreferenced)
13967         unreferenced_to_tmp_stack(param->unreferenced);
13968
13969     Safefree(param);
13970
13971     if (was != to) {
13972         PERL_SET_THX(was);
13973     }
13974 }
13975
13976 CLONE_PARAMS *
13977 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13978 {
13979     dVAR;
13980     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13981        does a dTHX; to get the context from thread local storage.
13982        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13983        a version that passes in my_perl.  */
13984     PerlInterpreter *const was = PERL_GET_THX;
13985     CLONE_PARAMS *param;
13986
13987     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13988
13989     if (was != to) {
13990         PERL_SET_THX(to);
13991     }
13992
13993     /* Given that we've set the context, we can do this unshared.  */
13994     Newx(param, 1, CLONE_PARAMS);
13995
13996     param->flags = 0;
13997     param->proto_perl = from;
13998     param->new_perl = to;
13999     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
14000     AvREAL_off(param->stashes);
14001     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
14002
14003     if (was != to) {
14004         PERL_SET_THX(was);
14005     }
14006     return param;
14007 }
14008
14009 #endif /* USE_ITHREADS */
14010
14011 void
14012 Perl_init_constants(pTHX)
14013 {
14014     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
14015     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
14016     SvANY(&PL_sv_undef)         = NULL;
14017
14018     SvANY(&PL_sv_no)            = new_XPVNV();
14019     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
14020     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
14021                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14022                                   |SVp_POK|SVf_POK;
14023
14024     SvANY(&PL_sv_yes)           = new_XPVNV();
14025     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
14026     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
14027                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
14028                                   |SVp_POK|SVf_POK;
14029
14030     SvPV_set(&PL_sv_no, (char*)PL_No);
14031     SvCUR_set(&PL_sv_no, 0);
14032     SvLEN_set(&PL_sv_no, 0);
14033     SvIV_set(&PL_sv_no, 0);
14034     SvNV_set(&PL_sv_no, 0);
14035
14036     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
14037     SvCUR_set(&PL_sv_yes, 1);
14038     SvLEN_set(&PL_sv_yes, 0);
14039     SvIV_set(&PL_sv_yes, 1);
14040     SvNV_set(&PL_sv_yes, 1);
14041 }
14042
14043 /*
14044 =head1 Unicode Support
14045
14046 =for apidoc sv_recode_to_utf8
14047
14048 The encoding is assumed to be an Encode object, on entry the PV
14049 of the sv is assumed to be octets in that encoding, and the sv
14050 will be converted into Unicode (and UTF-8).
14051
14052 If the sv already is UTF-8 (or if it is not POK), or if the encoding
14053 is not a reference, nothing is done to the sv.  If the encoding is not
14054 an C<Encode::XS> Encoding object, bad things will happen.
14055 (See F<lib/encoding.pm> and L<Encode>.)
14056
14057 The PV of the sv is returned.
14058
14059 =cut */
14060
14061 char *
14062 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14063 {
14064     dVAR;
14065
14066     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14067
14068     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14069         SV *uni;
14070         STRLEN len;
14071         const char *s;
14072         dSP;
14073         ENTER;
14074         SAVETMPS;
14075         save_re_context();
14076         PUSHMARK(sp);
14077         EXTEND(SP, 3);
14078         PUSHs(encoding);
14079         PUSHs(sv);
14080 /*
14081   NI-S 2002/07/09
14082   Passing sv_yes is wrong - it needs to be or'ed set of constants
14083   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14084   remove converted chars from source.
14085
14086   Both will default the value - let them.
14087
14088         XPUSHs(&PL_sv_yes);
14089 */
14090         PUTBACK;
14091         call_method("decode", G_SCALAR);
14092         SPAGAIN;
14093         uni = POPs;
14094         PUTBACK;
14095         s = SvPV_const(uni, len);
14096         if (s != SvPVX_const(sv)) {
14097             SvGROW(sv, len + 1);
14098             Move(s, SvPVX(sv), len + 1, char);
14099             SvCUR_set(sv, len);
14100         }
14101         FREETMPS;
14102         LEAVE;
14103         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14104             /* clear pos and any utf8 cache */
14105             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14106             if (mg)
14107                 mg->mg_len = -1;
14108             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14109                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14110         }
14111         SvUTF8_on(sv);
14112         return SvPVX(sv);
14113     }
14114     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14115 }
14116
14117 /*
14118 =for apidoc sv_cat_decode
14119
14120 The encoding is assumed to be an Encode object, the PV of the ssv is
14121 assumed to be octets in that encoding and decoding the input starts
14122 from the position which (PV + *offset) pointed to.  The dsv will be
14123 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14124 when the string tstr appears in decoding output or the input ends on
14125 the PV of the ssv.  The value which the offset points will be modified
14126 to the last input position on the ssv.
14127
14128 Returns TRUE if the terminator was found, else returns FALSE.
14129
14130 =cut */
14131
14132 bool
14133 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14134                    SV *ssv, int *offset, char *tstr, int tlen)
14135 {
14136     dVAR;
14137     bool ret = FALSE;
14138
14139     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14140
14141     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14142         SV *offsv;
14143         dSP;
14144         ENTER;
14145         SAVETMPS;
14146         save_re_context();
14147         PUSHMARK(sp);
14148         EXTEND(SP, 6);
14149         PUSHs(encoding);
14150         PUSHs(dsv);
14151         PUSHs(ssv);
14152         offsv = newSViv(*offset);
14153         mPUSHs(offsv);
14154         mPUSHp(tstr, tlen);
14155         PUTBACK;
14156         call_method("cat_decode", G_SCALAR);
14157         SPAGAIN;
14158         ret = SvTRUE(TOPs);
14159         *offset = SvIV(offsv);
14160         PUTBACK;
14161         FREETMPS;
14162         LEAVE;
14163     }
14164     else
14165         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14166     return ret;
14167
14168 }
14169
14170 /* ---------------------------------------------------------------------
14171  *
14172  * support functions for report_uninit()
14173  */
14174
14175 /* the maxiumum size of array or hash where we will scan looking
14176  * for the undefined element that triggered the warning */
14177
14178 #define FUV_MAX_SEARCH_SIZE 1000
14179
14180 /* Look for an entry in the hash whose value has the same SV as val;
14181  * If so, return a mortal copy of the key. */
14182
14183 STATIC SV*
14184 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14185 {
14186     dVAR;
14187     HE **array;
14188     I32 i;
14189
14190     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14191
14192     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14193                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14194         return NULL;
14195
14196     array = HvARRAY(hv);
14197
14198     for (i=HvMAX(hv); i>=0; i--) {
14199         HE *entry;
14200         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14201             if (HeVAL(entry) != val)
14202                 continue;
14203             if (    HeVAL(entry) == &PL_sv_undef ||
14204                     HeVAL(entry) == &PL_sv_placeholder)
14205                 continue;
14206             if (!HeKEY(entry))
14207                 return NULL;
14208             if (HeKLEN(entry) == HEf_SVKEY)
14209                 return sv_mortalcopy(HeKEY_sv(entry));
14210             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14211         }
14212     }
14213     return NULL;
14214 }
14215
14216 /* Look for an entry in the array whose value has the same SV as val;
14217  * If so, return the index, otherwise return -1. */
14218
14219 STATIC I32
14220 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14221 {
14222     dVAR;
14223
14224     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14225
14226     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14227                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14228         return -1;
14229
14230     if (val != &PL_sv_undef) {
14231         SV ** const svp = AvARRAY(av);
14232         I32 i;
14233
14234         for (i=AvFILLp(av); i>=0; i--)
14235             if (svp[i] == val)
14236                 return i;
14237     }
14238     return -1;
14239 }
14240
14241 /* varname(): return the name of a variable, optionally with a subscript.
14242  * If gv is non-zero, use the name of that global, along with gvtype (one
14243  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14244  * targ.  Depending on the value of the subscript_type flag, return:
14245  */
14246
14247 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14248 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14249 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14250 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14251
14252 SV*
14253 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14254         const SV *const keyname, I32 aindex, int subscript_type)
14255 {
14256
14257     SV * const name = sv_newmortal();
14258     if (gv && isGV(gv)) {
14259         char buffer[2];
14260         buffer[0] = gvtype;
14261         buffer[1] = 0;
14262
14263         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14264
14265         gv_fullname4(name, gv, buffer, 0);
14266
14267         if ((unsigned int)SvPVX(name)[1] <= 26) {
14268             buffer[0] = '^';
14269             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14270
14271             /* Swap the 1 unprintable control character for the 2 byte pretty
14272                version - ie substr($name, 1, 1) = $buffer; */
14273             sv_insert(name, 1, 1, buffer, 2);
14274         }
14275     }
14276     else {
14277         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14278         SV *sv;
14279         AV *av;
14280
14281         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14282
14283         if (!cv || !CvPADLIST(cv))
14284             return NULL;
14285         av = *PadlistARRAY(CvPADLIST(cv));
14286         sv = *av_fetch(av, targ, FALSE);
14287         sv_setsv_flags(name, sv, 0);
14288     }
14289
14290     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14291         SV * const sv = newSV(0);
14292         *SvPVX(name) = '$';
14293         Perl_sv_catpvf(aTHX_ name, "{%s}",
14294             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14295                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14296         SvREFCNT_dec_NN(sv);
14297     }
14298     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14299         *SvPVX(name) = '$';
14300         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14301     }
14302     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14303         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14304         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14305     }
14306
14307     return name;
14308 }
14309
14310
14311 /*
14312 =for apidoc find_uninit_var
14313
14314 Find the name of the undefined variable (if any) that caused the operator
14315 to issue a "Use of uninitialized value" warning.
14316 If match is true, only return a name if its value matches uninit_sv.
14317 So roughly speaking, if a unary operator (such as OP_COS) generates a
14318 warning, then following the direct child of the op may yield an
14319 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14320 other hand, with OP_ADD there are two branches to follow, so we only print
14321 the variable name if we get an exact match.
14322
14323 The name is returned as a mortal SV.
14324
14325 Assumes that PL_op is the op that originally triggered the error, and that
14326 PL_comppad/PL_curpad points to the currently executing pad.
14327
14328 =cut
14329 */
14330
14331 STATIC SV *
14332 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14333                   bool match)
14334 {
14335     dVAR;
14336     SV *sv;
14337     const GV *gv;
14338     const OP *o, *o2, *kid;
14339
14340     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14341                             uninit_sv == &PL_sv_placeholder)))
14342         return NULL;
14343
14344     switch (obase->op_type) {
14345
14346     case OP_RV2AV:
14347     case OP_RV2HV:
14348     case OP_PADAV:
14349     case OP_PADHV:
14350       {
14351         const bool pad  = (    obase->op_type == OP_PADAV
14352                             || obase->op_type == OP_PADHV
14353                             || obase->op_type == OP_PADRANGE
14354                           );
14355
14356         const bool hash = (    obase->op_type == OP_PADHV
14357                             || obase->op_type == OP_RV2HV
14358                             || (obase->op_type == OP_PADRANGE
14359                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14360                           );
14361         I32 index = 0;
14362         SV *keysv = NULL;
14363         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14364
14365         if (pad) { /* @lex, %lex */
14366             sv = PAD_SVl(obase->op_targ);
14367             gv = NULL;
14368         }
14369         else {
14370             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14371             /* @global, %global */
14372                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14373                 if (!gv)
14374                     break;
14375                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14376             }
14377             else if (obase == PL_op) /* @{expr}, %{expr} */
14378                 return find_uninit_var(cUNOPx(obase)->op_first,
14379                                                     uninit_sv, match);
14380             else /* @{expr}, %{expr} as a sub-expression */
14381                 return NULL;
14382         }
14383
14384         /* attempt to find a match within the aggregate */
14385         if (hash) {
14386             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14387             if (keysv)
14388                 subscript_type = FUV_SUBSCRIPT_HASH;
14389         }
14390         else {
14391             index = find_array_subscript((const AV *)sv, uninit_sv);
14392             if (index >= 0)
14393                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14394         }
14395
14396         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14397             break;
14398
14399         return varname(gv, hash ? '%' : '@', obase->op_targ,
14400                                     keysv, index, subscript_type);
14401       }
14402
14403     case OP_RV2SV:
14404         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14405             /* $global */
14406             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14407             if (!gv || !GvSTASH(gv))
14408                 break;
14409             if (match && (GvSV(gv) != uninit_sv))
14410                 break;
14411             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14412         }
14413         /* ${expr} */
14414         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14415
14416     case OP_PADSV:
14417         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14418             break;
14419         return varname(NULL, '$', obase->op_targ,
14420                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14421
14422     case OP_GVSV:
14423         gv = cGVOPx_gv(obase);
14424         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14425             break;
14426         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14427
14428     case OP_AELEMFAST_LEX:
14429         if (match) {
14430             SV **svp;
14431             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14432             if (!av || SvRMAGICAL(av))
14433                 break;
14434             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14435             if (!svp || *svp != uninit_sv)
14436                 break;
14437         }
14438         return varname(NULL, '$', obase->op_targ,
14439                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14440     case OP_AELEMFAST:
14441         {
14442             gv = cGVOPx_gv(obase);
14443             if (!gv)
14444                 break;
14445             if (match) {
14446                 SV **svp;
14447                 AV *const av = GvAV(gv);
14448                 if (!av || SvRMAGICAL(av))
14449                     break;
14450                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14451                 if (!svp || *svp != uninit_sv)
14452                     break;
14453             }
14454             return varname(gv, '$', 0,
14455                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14456         }
14457         break;
14458
14459     case OP_EXISTS:
14460         o = cUNOPx(obase)->op_first;
14461         if (!o || o->op_type != OP_NULL ||
14462                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14463             break;
14464         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14465
14466     case OP_AELEM:
14467     case OP_HELEM:
14468     {
14469         bool negate = FALSE;
14470
14471         if (PL_op == obase)
14472             /* $a[uninit_expr] or $h{uninit_expr} */
14473             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14474
14475         gv = NULL;
14476         o = cBINOPx(obase)->op_first;
14477         kid = cBINOPx(obase)->op_last;
14478
14479         /* get the av or hv, and optionally the gv */
14480         sv = NULL;
14481         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14482             sv = PAD_SV(o->op_targ);
14483         }
14484         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14485                 && cUNOPo->op_first->op_type == OP_GV)
14486         {
14487             gv = cGVOPx_gv(cUNOPo->op_first);
14488             if (!gv)
14489                 break;
14490             sv = o->op_type
14491                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14492         }
14493         if (!sv)
14494             break;
14495
14496         if (kid && kid->op_type == OP_NEGATE) {
14497             negate = TRUE;
14498             kid = cUNOPx(kid)->op_first;
14499         }
14500
14501         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14502             /* index is constant */
14503             SV* kidsv;
14504             if (negate) {
14505                 kidsv = sv_2mortal(newSVpvs("-"));
14506                 sv_catsv(kidsv, cSVOPx_sv(kid));
14507             }
14508             else
14509                 kidsv = cSVOPx_sv(kid);
14510             if (match) {
14511                 if (SvMAGICAL(sv))
14512                     break;
14513                 if (obase->op_type == OP_HELEM) {
14514                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14515                     if (!he || HeVAL(he) != uninit_sv)
14516                         break;
14517                 }
14518                 else {
14519                     SV * const  opsv = cSVOPx_sv(kid);
14520                     const IV  opsviv = SvIV(opsv);
14521                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14522                         negate ? - opsviv : opsviv,
14523                         FALSE);
14524                     if (!svp || *svp != uninit_sv)
14525                         break;
14526                 }
14527             }
14528             if (obase->op_type == OP_HELEM)
14529                 return varname(gv, '%', o->op_targ,
14530                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14531             else
14532                 return varname(gv, '@', o->op_targ, NULL,
14533                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14534                     FUV_SUBSCRIPT_ARRAY);
14535         }
14536         else  {
14537             /* index is an expression;
14538              * attempt to find a match within the aggregate */
14539             if (obase->op_type == OP_HELEM) {
14540                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14541                 if (keysv)
14542                     return varname(gv, '%', o->op_targ,
14543                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14544             }
14545             else {
14546                 const I32 index
14547                     = find_array_subscript((const AV *)sv, uninit_sv);
14548                 if (index >= 0)
14549                     return varname(gv, '@', o->op_targ,
14550                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14551             }
14552             if (match)
14553                 break;
14554             return varname(gv,
14555                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14556                 ? '@' : '%',
14557                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14558         }
14559         break;
14560     }
14561
14562     case OP_AASSIGN:
14563         /* only examine RHS */
14564         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14565
14566     case OP_OPEN:
14567         o = cUNOPx(obase)->op_first;
14568         if (   o->op_type == OP_PUSHMARK
14569            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14570         )
14571             o = o->op_sibling;
14572
14573         if (!o->op_sibling) {
14574             /* one-arg version of open is highly magical */
14575
14576             if (o->op_type == OP_GV) { /* open FOO; */
14577                 gv = cGVOPx_gv(o);
14578                 if (match && GvSV(gv) != uninit_sv)
14579                     break;
14580                 return varname(gv, '$', 0,
14581                             NULL, 0, FUV_SUBSCRIPT_NONE);
14582             }
14583             /* other possibilities not handled are:
14584              * open $x; or open my $x;  should return '${*$x}'
14585              * open expr;               should return '$'.expr ideally
14586              */
14587              break;
14588         }
14589         goto do_op;
14590
14591     /* ops where $_ may be an implicit arg */
14592     case OP_TRANS:
14593     case OP_TRANSR:
14594     case OP_SUBST:
14595     case OP_MATCH:
14596         if ( !(obase->op_flags & OPf_STACKED)) {
14597             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14598                                  ? PAD_SVl(obase->op_targ)
14599                                  : DEFSV))
14600             {
14601                 sv = sv_newmortal();
14602                 sv_setpvs(sv, "$_");
14603                 return sv;
14604             }
14605         }
14606         goto do_op;
14607
14608     case OP_PRTF:
14609     case OP_PRINT:
14610     case OP_SAY:
14611         match = 1; /* print etc can return undef on defined args */
14612         /* skip filehandle as it can't produce 'undef' warning  */
14613         o = cUNOPx(obase)->op_first;
14614         if ((obase->op_flags & OPf_STACKED)
14615             &&
14616                (   o->op_type == OP_PUSHMARK
14617                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14618             o = o->op_sibling->op_sibling;
14619         goto do_op2;
14620
14621
14622     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14623     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14624
14625         /* the following ops are capable of returning PL_sv_undef even for
14626          * defined arg(s) */
14627
14628     case OP_BACKTICK:
14629     case OP_PIPE_OP:
14630     case OP_FILENO:
14631     case OP_BINMODE:
14632     case OP_TIED:
14633     case OP_GETC:
14634     case OP_SYSREAD:
14635     case OP_SEND:
14636     case OP_IOCTL:
14637     case OP_SOCKET:
14638     case OP_SOCKPAIR:
14639     case OP_BIND:
14640     case OP_CONNECT:
14641     case OP_LISTEN:
14642     case OP_ACCEPT:
14643     case OP_SHUTDOWN:
14644     case OP_SSOCKOPT:
14645     case OP_GETPEERNAME:
14646     case OP_FTRREAD:
14647     case OP_FTRWRITE:
14648     case OP_FTREXEC:
14649     case OP_FTROWNED:
14650     case OP_FTEREAD:
14651     case OP_FTEWRITE:
14652     case OP_FTEEXEC:
14653     case OP_FTEOWNED:
14654     case OP_FTIS:
14655     case OP_FTZERO:
14656     case OP_FTSIZE:
14657     case OP_FTFILE:
14658     case OP_FTDIR:
14659     case OP_FTLINK:
14660     case OP_FTPIPE:
14661     case OP_FTSOCK:
14662     case OP_FTBLK:
14663     case OP_FTCHR:
14664     case OP_FTTTY:
14665     case OP_FTSUID:
14666     case OP_FTSGID:
14667     case OP_FTSVTX:
14668     case OP_FTTEXT:
14669     case OP_FTBINARY:
14670     case OP_FTMTIME:
14671     case OP_FTATIME:
14672     case OP_FTCTIME:
14673     case OP_READLINK:
14674     case OP_OPEN_DIR:
14675     case OP_READDIR:
14676     case OP_TELLDIR:
14677     case OP_SEEKDIR:
14678     case OP_REWINDDIR:
14679     case OP_CLOSEDIR:
14680     case OP_GMTIME:
14681     case OP_ALARM:
14682     case OP_SEMGET:
14683     case OP_GETLOGIN:
14684     case OP_UNDEF:
14685     case OP_SUBSTR:
14686     case OP_AEACH:
14687     case OP_EACH:
14688     case OP_SORT:
14689     case OP_CALLER:
14690     case OP_DOFILE:
14691     case OP_PROTOTYPE:
14692     case OP_NCMP:
14693     case OP_SMARTMATCH:
14694     case OP_UNPACK:
14695     case OP_SYSOPEN:
14696     case OP_SYSSEEK:
14697         match = 1;
14698         goto do_op;
14699
14700     case OP_ENTERSUB:
14701     case OP_GOTO:
14702         /* XXX tmp hack: these two may call an XS sub, and currently
14703           XS subs don't have a SUB entry on the context stack, so CV and
14704           pad determination goes wrong, and BAD things happen. So, just
14705           don't try to determine the value under those circumstances.
14706           Need a better fix at dome point. DAPM 11/2007 */
14707         break;
14708
14709     case OP_FLIP:
14710     case OP_FLOP:
14711     {
14712         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14713         if (gv && GvSV(gv) == uninit_sv)
14714             return newSVpvs_flags("$.", SVs_TEMP);
14715         goto do_op;
14716     }
14717
14718     case OP_POS:
14719         /* def-ness of rval pos() is independent of the def-ness of its arg */
14720         if ( !(obase->op_flags & OPf_MOD))
14721             break;
14722
14723     case OP_SCHOMP:
14724     case OP_CHOMP:
14725         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14726             return newSVpvs_flags("${$/}", SVs_TEMP);
14727         /*FALLTHROUGH*/
14728
14729     default:
14730     do_op:
14731         if (!(obase->op_flags & OPf_KIDS))
14732             break;
14733         o = cUNOPx(obase)->op_first;
14734         
14735     do_op2:
14736         if (!o)
14737             break;
14738
14739         /* This loop checks all the kid ops, skipping any that cannot pos-
14740          * sibly be responsible for the uninitialized value; i.e., defined
14741          * constants and ops that return nothing.  If there is only one op
14742          * left that is not skipped, then we *know* it is responsible for
14743          * the uninitialized value.  If there is more than one op left, we
14744          * have to look for an exact match in the while() loop below.
14745          * Note that we skip padrange, because the individual pad ops that
14746          * it replaced are still in the tree, so we work on them instead.
14747          */
14748         o2 = NULL;
14749         for (kid=o; kid; kid = kid->op_sibling) {
14750             if (kid) {
14751                 const OPCODE type = kid->op_type;
14752                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14753                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14754                   || (type == OP_PUSHMARK)
14755                   || (type == OP_PADRANGE)
14756                 )
14757                 continue;
14758             }
14759             if (o2) { /* more than one found */
14760                 o2 = NULL;
14761                 break;
14762             }
14763             o2 = kid;
14764         }
14765         if (o2)
14766             return find_uninit_var(o2, uninit_sv, match);
14767
14768         /* scan all args */
14769         while (o) {
14770             sv = find_uninit_var(o, uninit_sv, 1);
14771             if (sv)
14772                 return sv;
14773             o = o->op_sibling;
14774         }
14775         break;
14776     }
14777     return NULL;
14778 }
14779
14780
14781 /*
14782 =for apidoc report_uninit
14783
14784 Print appropriate "Use of uninitialized variable" warning.
14785
14786 =cut
14787 */
14788
14789 void
14790 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14791 {
14792     dVAR;
14793     if (PL_op) {
14794         SV* varname = NULL;
14795         if (uninit_sv && PL_curpad) {
14796             varname = find_uninit_var(PL_op, uninit_sv,0);
14797             if (varname)
14798                 sv_insert(varname, 0, 0, " ", 1);
14799         }
14800         /* diag_listed_as: Use of uninitialized value%s */
14801         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14802                 SVfARG(varname ? varname : &PL_sv_no),
14803                 " in ", OP_DESC(PL_op));
14804     }
14805     else
14806         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14807                     "", "", "");
14808 }
14809
14810 /*
14811  * Local variables:
14812  * c-indentation-style: bsd
14813  * c-basic-offset: 4
14814  * indent-tabs-mode: nil
14815  * End:
14816  *
14817  * ex: set ts=8 sts=4 sw=4 et:
14818  */