This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Teach makedef.pl that PL_op_exec_cnt is only available with -DPERL_TRACE_OPS.
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 #endif
70
71 /* ============================================================================
72
73 =head1 Allocation and deallocation of SVs.
74
75 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
76 sv, av, hv...) contains type and reference count information, and for
77 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
78 contains fields specific to each type.  Some types store all they need
79 in the head, so don't have a body.
80
81 In all but the most memory-paranoid configurations (ex: PURIFY), heads
82 and bodies are allocated out of arenas, which by default are
83 approximately 4K chunks of memory parcelled up into N heads or bodies.
84 Sv-bodies are allocated by their sv-type, guaranteeing size
85 consistency needed to allocate safely from arrays.
86
87 For SV-heads, the first slot in each arena is reserved, and holds a
88 link to the next arena, some flags, and a note of the number of slots.
89 Snaked through each arena chain is a linked list of free items; when
90 this becomes empty, an extra arena is allocated and divided up into N
91 items which are threaded into the free list.
92
93 SV-bodies are similar, but they use arena-sets by default, which
94 separate the link and info from the arena itself, and reclaim the 1st
95 slot in the arena.  SV-bodies are further described later.
96
97 The following global variables are associated with arenas:
98
99     PL_sv_arenaroot     pointer to list of SV arenas
100     PL_sv_root          pointer to list of free SV structures
101
102     PL_body_arenas      head of linked-list of body arenas
103     PL_body_roots[]     array of pointers to list of free bodies of svtype
104                         arrays are indexed by the svtype needed
105
106 A few special SV heads are not allocated from an arena, but are
107 instead directly created in the interpreter structure, eg PL_sv_undef.
108 The size of arenas can be changed from the default by setting
109 PERL_ARENA_SIZE appropriately at compile time.
110
111 The SV arena serves the secondary purpose of allowing still-live SVs
112 to be located and destroyed during final cleanup.
113
114 At the lowest level, the macros new_SV() and del_SV() grab and free
115 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
116 to return the SV to the free list with error checking.) new_SV() calls
117 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
118 SVs in the free list have their SvTYPE field set to all ones.
119
120 At the time of very final cleanup, sv_free_arenas() is called from
121 perl_destruct() to physically free all the arenas allocated since the
122 start of the interpreter.
123
124 The function visit() scans the SV arenas list, and calls a specified
125 function for each SV it finds which is still live - ie which has an SvTYPE
126 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
127 following functions (specified as [function that calls visit()] / [function
128 called by visit() for each SV]):
129
130     sv_report_used() / do_report_used()
131                         dump all remaining SVs (debugging aid)
132
133     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
134                       do_clean_named_io_objs(),do_curse()
135                         Attempt to free all objects pointed to by RVs,
136                         try to do the same for all objects indir-
137                         ectly referenced by typeglobs too, and
138                         then do a final sweep, cursing any
139                         objects that remain.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
186         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
187     } STMT_END
188 #  define DEBUG_SV_SERIAL(sv)                                               \
189     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
190             PTR2UV(sv), (long)(sv)->sv_debug_serial))
191 #else
192 #  define FREE_SV_DEBUG_FILE(sv)
193 #  define DEBUG_SV_SERIAL(sv)   NOOP
194 #endif
195
196 #ifdef PERL_POISON
197 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
198 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
199 /* Whilst I'd love to do this, it seems that things like to check on
200    unreferenced scalars
201 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
202 */
203 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
204                                 PoisonNew(&SvREFCNT(sv), 1, U32)
205 #else
206 #  define SvARENA_CHAIN(sv)     SvANY(sv)
207 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
208 #  define POSION_SV_HEAD(sv)
209 #endif
210
211 /* Mark an SV head as unused, and add to free list.
212  *
213  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
214  * its refcount artificially decremented during global destruction, so
215  * there may be dangling pointers to it. The last thing we want in that
216  * case is for it to be reused. */
217
218 #define plant_SV(p) \
219     STMT_START {                                        \
220         const U32 old_flags = SvFLAGS(p);                       \
221         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
222         DEBUG_SV_SERIAL(p);                             \
223         FREE_SV_DEBUG_FILE(p);                          \
224         POSION_SV_HEAD(p);                              \
225         SvFLAGS(p) = SVTYPEMASK;                        \
226         if (!(old_flags & SVf_BREAK)) {         \
227             SvARENA_CHAIN_SET(p, PL_sv_root);   \
228             PL_sv_root = (p);                           \
229         }                                               \
230         --PL_sv_count;                                  \
231     } STMT_END
232
233 #define uproot_SV(p) \
234     STMT_START {                                        \
235         (p) = PL_sv_root;                               \
236         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
237         ++PL_sv_count;                                  \
238     } STMT_END
239
240
241 /* make some more SVs by adding another arena */
242
243 STATIC SV*
244 S_more_sv(pTHX)
245 {
246     dVAR;
247     SV* sv;
248     char *chunk;                /* must use New here to match call to */
249     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
250     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
251     uproot_SV(sv);
252     return sv;
253 }
254
255 /* new_SV(): return a new, empty SV head */
256
257 #ifdef DEBUG_LEAKING_SCALARS
258 /* provide a real function for a debugger to play with */
259 STATIC SV*
260 S_new_SV(pTHX_ const char *file, int line, const char *func)
261 {
262     SV* sv;
263
264     if (PL_sv_root)
265         uproot_SV(sv);
266     else
267         sv = S_more_sv(aTHX);
268     SvANY(sv) = 0;
269     SvREFCNT(sv) = 1;
270     SvFLAGS(sv) = 0;
271     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
272     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
273                 ? PL_parser->copline
274                 :  PL_curcop
275                     ? CopLINE(PL_curcop)
276                     : 0
277             );
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_parent = NULL;
280     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
281
282     sv->sv_debug_serial = PL_sv_serial++;
283
284     MEM_LOG_NEW_SV(sv, file, line, func);
285     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
286             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
287
288     return sv;
289 }
290 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
291
292 #else
293 #  define new_SV(p) \
294     STMT_START {                                        \
295         if (PL_sv_root)                                 \
296             uproot_SV(p);                               \
297         else                                            \
298             (p) = S_more_sv(aTHX);                      \
299         SvANY(p) = 0;                                   \
300         SvREFCNT(p) = 1;                                \
301         SvFLAGS(p) = 0;                                 \
302         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
303     } STMT_END
304 #endif
305
306
307 /* del_SV(): return an empty SV head to the free list */
308
309 #ifdef DEBUGGING
310
311 #define del_SV(p) \
312     STMT_START {                                        \
313         if (DEBUG_D_TEST)                               \
314             del_sv(p);                                  \
315         else                                            \
316             plant_SV(p);                                \
317     } STMT_END
318
319 STATIC void
320 S_del_sv(pTHX_ SV *p)
321 {
322     dVAR;
323
324     PERL_ARGS_ASSERT_DEL_SV;
325
326     if (DEBUG_D_TEST) {
327         SV* sva;
328         bool ok = 0;
329         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
330             const SV * const sv = sva + 1;
331             const SV * const svend = &sva[SvREFCNT(sva)];
332             if (p >= sv && p < svend) {
333                 ok = 1;
334                 break;
335             }
336         }
337         if (!ok) {
338             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
339                              "Attempt to free non-arena SV: 0x%"UVxf
340                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
341             return;
342         }
343     }
344     plant_SV(p);
345 }
346
347 #else /* ! DEBUGGING */
348
349 #define del_SV(p)   plant_SV(p)
350
351 #endif /* DEBUGGING */
352
353
354 /*
355 =head1 SV Manipulation Functions
356
357 =for apidoc sv_add_arena
358
359 Given a chunk of memory, link it to the head of the list of arenas,
360 and split it into a list of free SVs.
361
362 =cut
363 */
364
365 static void
366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
367 {
368     dVAR;
369     SV *const sva = MUTABLE_SV(ptr);
370     SV* sv;
371     SV* svend;
372
373     PERL_ARGS_ASSERT_SV_ADD_ARENA;
374
375     /* The first SV in an arena isn't an SV. */
376     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
377     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
378     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
379
380     PL_sv_arenaroot = sva;
381     PL_sv_root = sva + 1;
382
383     svend = &sva[SvREFCNT(sva) - 1];
384     sv = sva + 1;
385     while (sv < svend) {
386         SvARENA_CHAIN_SET(sv, (sv + 1));
387 #ifdef DEBUGGING
388         SvREFCNT(sv) = 0;
389 #endif
390         /* Must always set typemask because it's always checked in on cleanup
391            when the arenas are walked looking for objects.  */
392         SvFLAGS(sv) = SVTYPEMASK;
393         sv++;
394     }
395     SvARENA_CHAIN_SET(sv, 0);
396 #ifdef DEBUGGING
397     SvREFCNT(sv) = 0;
398 #endif
399     SvFLAGS(sv) = SVTYPEMASK;
400 }
401
402 /* visit(): call the named function for each non-free SV in the arenas
403  * whose flags field matches the flags/mask args. */
404
405 STATIC I32
406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
407 {
408     dVAR;
409     SV* sva;
410     I32 visited = 0;
411
412     PERL_ARGS_ASSERT_VISIT;
413
414     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
415         const SV * const svend = &sva[SvREFCNT(sva)];
416         SV* sv;
417         for (sv = sva + 1; sv < svend; ++sv) {
418             if (SvTYPE(sv) != (svtype)SVTYPEMASK
419                     && (sv->sv_flags & mask) == flags
420                     && SvREFCNT(sv))
421             {
422                 (FCALL)(aTHX_ sv);
423                 ++visited;
424             }
425         }
426     }
427     return visited;
428 }
429
430 #ifdef DEBUGGING
431
432 /* called by sv_report_used() for each live SV */
433
434 static void
435 do_report_used(pTHX_ SV *const sv)
436 {
437     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
438         PerlIO_printf(Perl_debug_log, "****\n");
439         sv_dump(sv);
440     }
441 }
442 #endif
443
444 /*
445 =for apidoc sv_report_used
446
447 Dump the contents of all SVs not yet freed (debugging aid).
448
449 =cut
450 */
451
452 void
453 Perl_sv_report_used(pTHX)
454 {
455 #ifdef DEBUGGING
456     visit(do_report_used, 0, 0);
457 #else
458     PERL_UNUSED_CONTEXT;
459 #endif
460 }
461
462 /* called by sv_clean_objs() for each live SV */
463
464 static void
465 do_clean_objs(pTHX_ SV *const ref)
466 {
467     dVAR;
468     assert (SvROK(ref));
469     {
470         SV * const target = SvRV(ref);
471         if (SvOBJECT(target)) {
472             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
473             if (SvWEAKREF(ref)) {
474                 sv_del_backref(target, ref);
475                 SvWEAKREF_off(ref);
476                 SvRV_set(ref, NULL);
477             } else {
478                 SvROK_off(ref);
479                 SvRV_set(ref, NULL);
480                 SvREFCNT_dec_NN(target);
481             }
482         }
483     }
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec_NN(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec_NN(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec_NN(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec_NN(obj);
527     }
528     SvREFCNT_dec_NN(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec_NN(obj);
550     }
551     SvREFCNT_dec_NN(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec_NN(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_DUMMY, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, TRUE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (UNLIKELY(old_type_details->cant_upgrade))
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (UNLIKELY(old_type > new_type))
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1312             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1313         }
1314
1315         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1316            The target created by newSVrv also is, and it can have magic.
1317            However, it never has SvPVX set.
1318         */
1319         if (old_type == SVt_IV) {
1320             assert(!SvROK(sv));
1321         } else if (old_type >= SVt_PV) {
1322             assert(SvPVX_const(sv) == 0);
1323         }
1324
1325         if (old_type >= SVt_PVMG) {
1326             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1327             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1328         } else {
1329             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1330         }
1331         break;
1332
1333     case SVt_PVIV:
1334         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1335            no route from NV to PVIV, NOK can never be true  */
1336         assert(!SvNOKp(sv));
1337         assert(!SvNOK(sv));
1338     case SVt_PVIO:
1339     case SVt_PVFM:
1340     case SVt_PVGV:
1341     case SVt_PVCV:
1342     case SVt_PVLV:
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 char *
1472 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1473 {
1474     char *s;
1475
1476     PERL_ARGS_ASSERT_SV_GROW;
1477
1478 #ifdef HAS_64K_LIMIT
1479     if (newlen >= 0x10000) {
1480         PerlIO_printf(Perl_debug_log,
1481                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1482         my_exit(1);
1483     }
1484 #endif /* HAS_64K_LIMIT */
1485     if (SvROK(sv))
1486         sv_unref(sv);
1487     if (SvTYPE(sv) < SVt_PV) {
1488         sv_upgrade(sv, SVt_PV);
1489         s = SvPVX_mutable(sv);
1490     }
1491     else if (SvOOK(sv)) {       /* pv is offset? */
1492         sv_backoff(sv);
1493         s = SvPVX_mutable(sv);
1494         if (newlen > SvLEN(sv))
1495             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1496 #ifdef HAS_64K_LIMIT
1497         if (newlen >= 0x10000)
1498             newlen = 0xFFFF;
1499 #endif
1500     }
1501     else
1502     {
1503         if (SvIsCOW(sv)) sv_force_normal(sv);
1504         s = SvPVX_mutable(sv);
1505     }
1506
1507 #ifdef PERL_NEW_COPY_ON_WRITE
1508     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1509      * to store the COW count. So in general, allocate one more byte than
1510      * asked for, to make it likely this byte is always spare: and thus
1511      * make more strings COW-able.
1512      * If the new size is a big power of two, don't bother: we assume the
1513      * caller wanted a nice 2^N sized block and will be annoyed at getting
1514      * 2^N+1 */
1515     if (newlen & 0xff)
1516         newlen++;
1517 #endif
1518
1519     if (newlen > SvLEN(sv)) {           /* need more room? */
1520         STRLEN minlen = SvCUR(sv);
1521         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1522         if (newlen < minlen)
1523             newlen = minlen;
1524 #ifndef Perl_safesysmalloc_size
1525         newlen = PERL_STRLEN_ROUNDUP(newlen);
1526 #endif
1527         if (SvLEN(sv) && s) {
1528             s = (char*)saferealloc(s, newlen);
1529         }
1530         else {
1531             s = (char*)safemalloc(newlen);
1532             if (SvPVX_const(sv) && SvCUR(sv)) {
1533                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1534             }
1535         }
1536         SvPV_set(sv, s);
1537 #ifdef Perl_safesysmalloc_size
1538         /* Do this here, do it once, do it right, and then we will never get
1539            called back into sv_grow() unless there really is some growing
1540            needed.  */
1541         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1542 #else
1543         SvLEN_set(sv, newlen);
1544 #endif
1545     }
1546     return s;
1547 }
1548
1549 /*
1550 =for apidoc sv_setiv
1551
1552 Copies an integer into the given SV, upgrading first if necessary.
1553 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1554
1555 =cut
1556 */
1557
1558 void
1559 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1560 {
1561     dVAR;
1562
1563     PERL_ARGS_ASSERT_SV_SETIV;
1564
1565     SV_CHECK_THINKFIRST_COW_DROP(sv);
1566     switch (SvTYPE(sv)) {
1567     case SVt_NULL:
1568     case SVt_NV:
1569         sv_upgrade(sv, SVt_IV);
1570         break;
1571     case SVt_PV:
1572         sv_upgrade(sv, SVt_PVIV);
1573         break;
1574
1575     case SVt_PVGV:
1576         if (!isGV_with_GP(sv))
1577             break;
1578     case SVt_PVAV:
1579     case SVt_PVHV:
1580     case SVt_PVCV:
1581     case SVt_PVFM:
1582     case SVt_PVIO:
1583         /* diag_listed_as: Can't coerce %s to %s in %s */
1584         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1585                    OP_DESC(PL_op));
1586     default: NOOP;
1587     }
1588     (void)SvIOK_only(sv);                       /* validate number */
1589     SvIV_set(sv, i);
1590     SvTAINT(sv);
1591 }
1592
1593 /*
1594 =for apidoc sv_setiv_mg
1595
1596 Like C<sv_setiv>, but also handles 'set' magic.
1597
1598 =cut
1599 */
1600
1601 void
1602 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1603 {
1604     PERL_ARGS_ASSERT_SV_SETIV_MG;
1605
1606     sv_setiv(sv,i);
1607     SvSETMAGIC(sv);
1608 }
1609
1610 /*
1611 =for apidoc sv_setuv
1612
1613 Copies an unsigned integer into the given SV, upgrading first if necessary.
1614 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1615
1616 =cut
1617 */
1618
1619 void
1620 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1621 {
1622     PERL_ARGS_ASSERT_SV_SETUV;
1623
1624     /* With the if statement to ensure that integers are stored as IVs whenever
1625        possible:
1626        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1627
1628        without
1629        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1630
1631        If you wish to remove the following if statement, so that this routine
1632        (and its callers) always return UVs, please benchmark to see what the
1633        effect is. Modern CPUs may be different. Or may not :-)
1634     */
1635     if (u <= (UV)IV_MAX) {
1636        sv_setiv(sv, (IV)u);
1637        return;
1638     }
1639     sv_setiv(sv, 0);
1640     SvIsUV_on(sv);
1641     SvUV_set(sv, u);
1642 }
1643
1644 /*
1645 =for apidoc sv_setuv_mg
1646
1647 Like C<sv_setuv>, but also handles 'set' magic.
1648
1649 =cut
1650 */
1651
1652 void
1653 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1654 {
1655     PERL_ARGS_ASSERT_SV_SETUV_MG;
1656
1657     sv_setuv(sv,u);
1658     SvSETMAGIC(sv);
1659 }
1660
1661 /*
1662 =for apidoc sv_setnv
1663
1664 Copies a double into the given SV, upgrading first if necessary.
1665 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1666
1667 =cut
1668 */
1669
1670 void
1671 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1672 {
1673     dVAR;
1674
1675     PERL_ARGS_ASSERT_SV_SETNV;
1676
1677     SV_CHECK_THINKFIRST_COW_DROP(sv);
1678     switch (SvTYPE(sv)) {
1679     case SVt_NULL:
1680     case SVt_IV:
1681         sv_upgrade(sv, SVt_NV);
1682         break;
1683     case SVt_PV:
1684     case SVt_PVIV:
1685         sv_upgrade(sv, SVt_PVNV);
1686         break;
1687
1688     case SVt_PVGV:
1689         if (!isGV_with_GP(sv))
1690             break;
1691     case SVt_PVAV:
1692     case SVt_PVHV:
1693     case SVt_PVCV:
1694     case SVt_PVFM:
1695     case SVt_PVIO:
1696         /* diag_listed_as: Can't coerce %s to %s in %s */
1697         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1698                    OP_DESC(PL_op));
1699     default: NOOP;
1700     }
1701     SvNV_set(sv, num);
1702     (void)SvNOK_only(sv);                       /* validate number */
1703     SvTAINT(sv);
1704 }
1705
1706 /*
1707 =for apidoc sv_setnv_mg
1708
1709 Like C<sv_setnv>, but also handles 'set' magic.
1710
1711 =cut
1712 */
1713
1714 void
1715 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1716 {
1717     PERL_ARGS_ASSERT_SV_SETNV_MG;
1718
1719     sv_setnv(sv,num);
1720     SvSETMAGIC(sv);
1721 }
1722
1723 /* Print an "isn't numeric" warning, using a cleaned-up,
1724  * printable version of the offending string
1725  */
1726
1727 STATIC void
1728 S_not_a_number(pTHX_ SV *const sv)
1729 {
1730      dVAR;
1731      SV *dsv;
1732      char tmpbuf[64];
1733      const char *pv;
1734
1735      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1736
1737      if (DO_UTF8(sv)) {
1738           dsv = newSVpvs_flags("", SVs_TEMP);
1739           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1740      } else {
1741           char *d = tmpbuf;
1742           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1743           /* each *s can expand to 4 chars + "...\0",
1744              i.e. need room for 8 chars */
1745         
1746           const char *s = SvPVX_const(sv);
1747           const char * const end = s + SvCUR(sv);
1748           for ( ; s < end && d < limit; s++ ) {
1749                int ch = *s & 0xFF;
1750                if (ch & 128 && !isPRINT_LC(ch)) {
1751                     *d++ = 'M';
1752                     *d++ = '-';
1753                     ch &= 127;
1754                }
1755                if (ch == '\n') {
1756                     *d++ = '\\';
1757                     *d++ = 'n';
1758                }
1759                else if (ch == '\r') {
1760                     *d++ = '\\';
1761                     *d++ = 'r';
1762                }
1763                else if (ch == '\f') {
1764                     *d++ = '\\';
1765                     *d++ = 'f';
1766                }
1767                else if (ch == '\\') {
1768                     *d++ = '\\';
1769                     *d++ = '\\';
1770                }
1771                else if (ch == '\0') {
1772                     *d++ = '\\';
1773                     *d++ = '0';
1774                }
1775                else if (isPRINT_LC(ch))
1776                     *d++ = ch;
1777                else {
1778                     *d++ = '^';
1779                     *d++ = toCTRL(ch);
1780                }
1781           }
1782           if (s < end) {
1783                *d++ = '.';
1784                *d++ = '.';
1785                *d++ = '.';
1786           }
1787           *d = '\0';
1788           pv = tmpbuf;
1789     }
1790
1791     if (PL_op)
1792         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1793                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1794                     "Argument \"%s\" isn't numeric in %s", pv,
1795                     OP_DESC(PL_op));
1796     else
1797         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1798                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1799                     "Argument \"%s\" isn't numeric", pv);
1800 }
1801
1802 /*
1803 =for apidoc looks_like_number
1804
1805 Test if the content of an SV looks like a number (or is a number).
1806 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1807 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1808 ignored.
1809
1810 =cut
1811 */
1812
1813 I32
1814 Perl_looks_like_number(pTHX_ SV *const sv)
1815 {
1816     const char *sbegin;
1817     STRLEN len;
1818
1819     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1820
1821     if (SvPOK(sv) || SvPOKp(sv)) {
1822         sbegin = SvPV_nomg_const(sv, len);
1823     }
1824     else
1825         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1826     return grok_number(sbegin, len, NULL);
1827 }
1828
1829 STATIC bool
1830 S_glob_2number(pTHX_ GV * const gv)
1831 {
1832     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1833
1834     /* We know that all GVs stringify to something that is not-a-number,
1835         so no need to test that.  */
1836     if (ckWARN(WARN_NUMERIC))
1837     {
1838         SV *const buffer = sv_newmortal();
1839         gv_efullname3(buffer, gv, "*");
1840         not_a_number(buffer);
1841     }
1842     /* We just want something true to return, so that S_sv_2iuv_common
1843         can tail call us and return true.  */
1844     return TRUE;
1845 }
1846
1847 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1848    until proven guilty, assume that things are not that bad... */
1849
1850 /*
1851    NV_PRESERVES_UV:
1852
1853    As 64 bit platforms often have an NV that doesn't preserve all bits of
1854    an IV (an assumption perl has been based on to date) it becomes necessary
1855    to remove the assumption that the NV always carries enough precision to
1856    recreate the IV whenever needed, and that the NV is the canonical form.
1857    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1858    precision as a side effect of conversion (which would lead to insanity
1859    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1860    1) to distinguish between IV/UV/NV slots that have cached a valid
1861       conversion where precision was lost and IV/UV/NV slots that have a
1862       valid conversion which has lost no precision
1863    2) to ensure that if a numeric conversion to one form is requested that
1864       would lose precision, the precise conversion (or differently
1865       imprecise conversion) is also performed and cached, to prevent
1866       requests for different numeric formats on the same SV causing
1867       lossy conversion chains. (lossless conversion chains are perfectly
1868       acceptable (still))
1869
1870
1871    flags are used:
1872    SvIOKp is true if the IV slot contains a valid value
1873    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1874    SvNOKp is true if the NV slot contains a valid value
1875    SvNOK  is true only if the NV value is accurate
1876
1877    so
1878    while converting from PV to NV, check to see if converting that NV to an
1879    IV(or UV) would lose accuracy over a direct conversion from PV to
1880    IV(or UV). If it would, cache both conversions, return NV, but mark
1881    SV as IOK NOKp (ie not NOK).
1882
1883    While converting from PV to IV, check to see if converting that IV to an
1884    NV would lose accuracy over a direct conversion from PV to NV. If it
1885    would, cache both conversions, flag similarly.
1886
1887    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1888    correctly because if IV & NV were set NV *always* overruled.
1889    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1890    changes - now IV and NV together means that the two are interchangeable:
1891    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1892
1893    The benefit of this is that operations such as pp_add know that if
1894    SvIOK is true for both left and right operands, then integer addition
1895    can be used instead of floating point (for cases where the result won't
1896    overflow). Before, floating point was always used, which could lead to
1897    loss of precision compared with integer addition.
1898
1899    * making IV and NV equal status should make maths accurate on 64 bit
1900      platforms
1901    * may speed up maths somewhat if pp_add and friends start to use
1902      integers when possible instead of fp. (Hopefully the overhead in
1903      looking for SvIOK and checking for overflow will not outweigh the
1904      fp to integer speedup)
1905    * will slow down integer operations (callers of SvIV) on "inaccurate"
1906      values, as the change from SvIOK to SvIOKp will cause a call into
1907      sv_2iv each time rather than a macro access direct to the IV slot
1908    * should speed up number->string conversion on integers as IV is
1909      favoured when IV and NV are equally accurate
1910
1911    ####################################################################
1912    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1913    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1914    On the other hand, SvUOK is true iff UV.
1915    ####################################################################
1916
1917    Your mileage will vary depending your CPU's relative fp to integer
1918    performance ratio.
1919 */
1920
1921 #ifndef NV_PRESERVES_UV
1922 #  define IS_NUMBER_UNDERFLOW_IV 1
1923 #  define IS_NUMBER_UNDERFLOW_UV 2
1924 #  define IS_NUMBER_IV_AND_UV    2
1925 #  define IS_NUMBER_OVERFLOW_IV  4
1926 #  define IS_NUMBER_OVERFLOW_UV  5
1927
1928 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1929
1930 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1931 STATIC int
1932 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1933 #  ifdef DEBUGGING
1934                        , I32 numtype
1935 #  endif
1936                        )
1937 {
1938     dVAR;
1939
1940     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1941
1942     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));
1943     if (SvNVX(sv) < (NV)IV_MIN) {
1944         (void)SvIOKp_on(sv);
1945         (void)SvNOK_on(sv);
1946         SvIV_set(sv, IV_MIN);
1947         return IS_NUMBER_UNDERFLOW_IV;
1948     }
1949     if (SvNVX(sv) > (NV)UV_MAX) {
1950         (void)SvIOKp_on(sv);
1951         (void)SvNOK_on(sv);
1952         SvIsUV_on(sv);
1953         SvUV_set(sv, UV_MAX);
1954         return IS_NUMBER_OVERFLOW_UV;
1955     }
1956     (void)SvIOKp_on(sv);
1957     (void)SvNOK_on(sv);
1958     /* Can't use strtol etc to convert this string.  (See truth table in
1959        sv_2iv  */
1960     if (SvNVX(sv) <= (UV)IV_MAX) {
1961         SvIV_set(sv, I_V(SvNVX(sv)));
1962         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1963             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1964         } else {
1965             /* Integer is imprecise. NOK, IOKp */
1966         }
1967         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1968     }
1969     SvIsUV_on(sv);
1970     SvUV_set(sv, U_V(SvNVX(sv)));
1971     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1972         if (SvUVX(sv) == UV_MAX) {
1973             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1974                possibly be preserved by NV. Hence, it must be overflow.
1975                NOK, IOKp */
1976             return IS_NUMBER_OVERFLOW_UV;
1977         }
1978         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1979     } else {
1980         /* Integer is imprecise. NOK, IOKp */
1981     }
1982     return IS_NUMBER_OVERFLOW_IV;
1983 }
1984 #endif /* !NV_PRESERVES_UV*/
1985
1986 STATIC bool
1987 S_sv_2iuv_common(pTHX_ SV *const sv)
1988 {
1989     dVAR;
1990
1991     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1992
1993     if (SvNOKp(sv)) {
1994         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1995          * without also getting a cached IV/UV from it at the same time
1996          * (ie PV->NV conversion should detect loss of accuracy and cache
1997          * IV or UV at same time to avoid this. */
1998         /* IV-over-UV optimisation - choose to cache IV if possible */
1999
2000         if (SvTYPE(sv) == SVt_NV)
2001             sv_upgrade(sv, SVt_PVNV);
2002
2003         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2004         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2005            certainly cast into the IV range at IV_MAX, whereas the correct
2006            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2007            cases go to UV */
2008 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2009         if (Perl_isnan(SvNVX(sv))) {
2010             SvUV_set(sv, 0);
2011             SvIsUV_on(sv);
2012             return FALSE;
2013         }
2014 #endif
2015         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2016             SvIV_set(sv, I_V(SvNVX(sv)));
2017             if (SvNVX(sv) == (NV) SvIVX(sv)
2018 #ifndef NV_PRESERVES_UV
2019                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2020                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2021                 /* Don't flag it as "accurately an integer" if the number
2022                    came from a (by definition imprecise) NV operation, and
2023                    we're outside the range of NV integer precision */
2024 #endif
2025                 ) {
2026                 if (SvNOK(sv))
2027                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2028                 else {
2029                     /* scalar has trailing garbage, eg "42a" */
2030                 }
2031                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2032                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2033                                       PTR2UV(sv),
2034                                       SvNVX(sv),
2035                                       SvIVX(sv)));
2036
2037             } else {
2038                 /* IV not precise.  No need to convert from PV, as NV
2039                    conversion would already have cached IV if it detected
2040                    that PV->IV would be better than PV->NV->IV
2041                    flags already correct - don't set public IOK.  */
2042                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2043                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2044                                       PTR2UV(sv),
2045                                       SvNVX(sv),
2046                                       SvIVX(sv)));
2047             }
2048             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2049                but the cast (NV)IV_MIN rounds to a the value less (more
2050                negative) than IV_MIN which happens to be equal to SvNVX ??
2051                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2052                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2053                (NV)UVX == NVX are both true, but the values differ. :-(
2054                Hopefully for 2s complement IV_MIN is something like
2055                0x8000000000000000 which will be exact. NWC */
2056         }
2057         else {
2058             SvUV_set(sv, U_V(SvNVX(sv)));
2059             if (
2060                 (SvNVX(sv) == (NV) SvUVX(sv))
2061 #ifndef  NV_PRESERVES_UV
2062                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2063                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2064                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2065                 /* Don't flag it as "accurately an integer" if the number
2066                    came from a (by definition imprecise) NV operation, and
2067                    we're outside the range of NV integer precision */
2068 #endif
2069                 && SvNOK(sv)
2070                 )
2071                 SvIOK_on(sv);
2072             SvIsUV_on(sv);
2073             DEBUG_c(PerlIO_printf(Perl_debug_log,
2074                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2075                                   PTR2UV(sv),
2076                                   SvUVX(sv),
2077                                   SvUVX(sv)));
2078         }
2079     }
2080     else if (SvPOKp(sv)) {
2081         UV value;
2082         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2083         /* We want to avoid a possible problem when we cache an IV/ a UV which
2084            may be later translated to an NV, and the resulting NV is not
2085            the same as the direct translation of the initial string
2086            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2087            be careful to ensure that the value with the .456 is around if the
2088            NV value is requested in the future).
2089         
2090            This means that if we cache such an IV/a UV, we need to cache the
2091            NV as well.  Moreover, we trade speed for space, and do not
2092            cache the NV if we are sure it's not needed.
2093          */
2094
2095         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2096         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2097              == IS_NUMBER_IN_UV) {
2098             /* It's definitely an integer, only upgrade to PVIV */
2099             if (SvTYPE(sv) < SVt_PVIV)
2100                 sv_upgrade(sv, SVt_PVIV);
2101             (void)SvIOK_on(sv);
2102         } else if (SvTYPE(sv) < SVt_PVNV)
2103             sv_upgrade(sv, SVt_PVNV);
2104
2105         /* If NVs preserve UVs then we only use the UV value if we know that
2106            we aren't going to call atof() below. If NVs don't preserve UVs
2107            then the value returned may have more precision than atof() will
2108            return, even though value isn't perfectly accurate.  */
2109         if ((numtype & (IS_NUMBER_IN_UV
2110 #ifdef NV_PRESERVES_UV
2111                         | IS_NUMBER_NOT_INT
2112 #endif
2113             )) == IS_NUMBER_IN_UV) {
2114             /* This won't turn off the public IOK flag if it was set above  */
2115             (void)SvIOKp_on(sv);
2116
2117             if (!(numtype & IS_NUMBER_NEG)) {
2118                 /* positive */;
2119                 if (value <= (UV)IV_MAX) {
2120                     SvIV_set(sv, (IV)value);
2121                 } else {
2122                     /* it didn't overflow, and it was positive. */
2123                     SvUV_set(sv, value);
2124                     SvIsUV_on(sv);
2125                 }
2126             } else {
2127                 /* 2s complement assumption  */
2128                 if (value <= (UV)IV_MIN) {
2129                     SvIV_set(sv, -(IV)value);
2130                 } else {
2131                     /* Too negative for an IV.  This is a double upgrade, but
2132                        I'm assuming it will be rare.  */
2133                     if (SvTYPE(sv) < SVt_PVNV)
2134                         sv_upgrade(sv, SVt_PVNV);
2135                     SvNOK_on(sv);
2136                     SvIOK_off(sv);
2137                     SvIOKp_on(sv);
2138                     SvNV_set(sv, -(NV)value);
2139                     SvIV_set(sv, IV_MIN);
2140                 }
2141             }
2142         }
2143         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2144            will be in the previous block to set the IV slot, and the next
2145            block to set the NV slot.  So no else here.  */
2146         
2147         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2148             != IS_NUMBER_IN_UV) {
2149             /* It wasn't an (integer that doesn't overflow the UV). */
2150             SvNV_set(sv, Atof(SvPVX_const(sv)));
2151
2152             if (! numtype && ckWARN(WARN_NUMERIC))
2153                 not_a_number(sv);
2154
2155 #if defined(USE_LONG_DOUBLE)
2156             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2157                                   PTR2UV(sv), SvNVX(sv)));
2158 #else
2159             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2160                                   PTR2UV(sv), SvNVX(sv)));
2161 #endif
2162
2163 #ifdef NV_PRESERVES_UV
2164             (void)SvIOKp_on(sv);
2165             (void)SvNOK_on(sv);
2166             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2167                 SvIV_set(sv, I_V(SvNVX(sv)));
2168                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2169                     SvIOK_on(sv);
2170                 } else {
2171                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2172                 }
2173                 /* UV will not work better than IV */
2174             } else {
2175                 if (SvNVX(sv) > (NV)UV_MAX) {
2176                     SvIsUV_on(sv);
2177                     /* Integer is inaccurate. NOK, IOKp, is UV */
2178                     SvUV_set(sv, UV_MAX);
2179                 } else {
2180                     SvUV_set(sv, U_V(SvNVX(sv)));
2181                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2182                        NV preservse UV so can do correct comparison.  */
2183                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2184                         SvIOK_on(sv);
2185                     } else {
2186                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2187                     }
2188                 }
2189                 SvIsUV_on(sv);
2190             }
2191 #else /* NV_PRESERVES_UV */
2192             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2193                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2194                 /* The IV/UV slot will have been set from value returned by
2195                    grok_number above.  The NV slot has just been set using
2196                    Atof.  */
2197                 SvNOK_on(sv);
2198                 assert (SvIOKp(sv));
2199             } else {
2200                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2201                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2202                     /* Small enough to preserve all bits. */
2203                     (void)SvIOKp_on(sv);
2204                     SvNOK_on(sv);
2205                     SvIV_set(sv, I_V(SvNVX(sv)));
2206                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2207                         SvIOK_on(sv);
2208                     /* Assumption: first non-preserved integer is < IV_MAX,
2209                        this NV is in the preserved range, therefore: */
2210                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2211                           < (UV)IV_MAX)) {
2212                         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);
2213                     }
2214                 } else {
2215                     /* IN_UV NOT_INT
2216                          0      0       already failed to read UV.
2217                          0      1       already failed to read UV.
2218                          1      0       you won't get here in this case. IV/UV
2219                                         slot set, public IOK, Atof() unneeded.
2220                          1      1       already read UV.
2221                        so there's no point in sv_2iuv_non_preserve() attempting
2222                        to use atol, strtol, strtoul etc.  */
2223 #  ifdef DEBUGGING
2224                     sv_2iuv_non_preserve (sv, numtype);
2225 #  else
2226                     sv_2iuv_non_preserve (sv);
2227 #  endif
2228                 }
2229             }
2230 #endif /* NV_PRESERVES_UV */
2231         /* It might be more code efficient to go through the entire logic above
2232            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2233            gets complex and potentially buggy, so more programmer efficient
2234            to do it this way, by turning off the public flags:  */
2235         if (!numtype)
2236             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2237         }
2238     }
2239     else  {
2240         if (isGV_with_GP(sv))
2241             return glob_2number(MUTABLE_GV(sv));
2242
2243         if (!SvPADTMP(sv)) {
2244             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2245                 report_uninit(sv);
2246         }
2247         if (SvTYPE(sv) < SVt_IV)
2248             /* Typically the caller expects that sv_any is not NULL now.  */
2249             sv_upgrade(sv, SVt_IV);
2250         /* Return 0 from the caller.  */
2251         return TRUE;
2252     }
2253     return FALSE;
2254 }
2255
2256 /*
2257 =for apidoc sv_2iv_flags
2258
2259 Return the integer value of an SV, doing any necessary string
2260 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2261 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2262
2263 =cut
2264 */
2265
2266 IV
2267 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2268 {
2269     dVAR;
2270
2271     if (!sv)
2272         return 0;
2273
2274     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2275         mg_get(sv);
2276
2277     if (SvROK(sv)) {
2278         if (SvAMAGIC(sv)) {
2279             SV * tmpstr;
2280             if (flags & SV_SKIP_OVERLOAD)
2281                 return 0;
2282             tmpstr = AMG_CALLunary(sv, numer_amg);
2283             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2284                 return SvIV(tmpstr);
2285             }
2286         }
2287         return PTR2IV(SvRV(sv));
2288     }
2289
2290     if (SvVALID(sv) || isREGEXP(sv)) {
2291         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2292            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2293            In practice they are extremely unlikely to actually get anywhere
2294            accessible by user Perl code - the only way that I'm aware of is when
2295            a constant subroutine which is used as the second argument to index.
2296
2297            Regexps have no SvIVX and SvNVX fields.
2298         */
2299         assert(isREGEXP(sv) || SvPOKp(sv));
2300         {
2301             UV value;
2302             const char * const ptr =
2303                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2304             const int numtype
2305                 = grok_number(ptr, SvCUR(sv), &value);
2306
2307             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2308                 == IS_NUMBER_IN_UV) {
2309                 /* It's definitely an integer */
2310                 if (numtype & IS_NUMBER_NEG) {
2311                     if (value < (UV)IV_MIN)
2312                         return -(IV)value;
2313                 } else {
2314                     if (value < (UV)IV_MAX)
2315                         return (IV)value;
2316                 }
2317             }
2318             if (!numtype) {
2319                 if (ckWARN(WARN_NUMERIC))
2320                     not_a_number(sv);
2321             }
2322             return I_V(Atof(ptr));
2323         }
2324     }
2325
2326     if (SvTHINKFIRST(sv)) {
2327 #ifdef PERL_OLD_COPY_ON_WRITE
2328         if (SvIsCOW(sv)) {
2329             sv_force_normal_flags(sv, 0);
2330         }
2331 #endif
2332         if (SvREADONLY(sv) && !SvOK(sv)) {
2333             if (ckWARN(WARN_UNINITIALIZED))
2334                 report_uninit(sv);
2335             return 0;
2336         }
2337     }
2338
2339     if (!SvIOKp(sv)) {
2340         if (S_sv_2iuv_common(aTHX_ sv))
2341             return 0;
2342     }
2343
2344     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2345         PTR2UV(sv),SvIVX(sv)));
2346     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2347 }
2348
2349 /*
2350 =for apidoc sv_2uv_flags
2351
2352 Return the unsigned integer value of an SV, doing any necessary string
2353 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2354 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2355
2356 =cut
2357 */
2358
2359 UV
2360 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2361 {
2362     dVAR;
2363
2364     if (!sv)
2365         return 0;
2366
2367     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2368         mg_get(sv);
2369
2370     if (SvROK(sv)) {
2371         if (SvAMAGIC(sv)) {
2372             SV *tmpstr;
2373             if (flags & SV_SKIP_OVERLOAD)
2374                 return 0;
2375             tmpstr = AMG_CALLunary(sv, numer_amg);
2376             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2377                 return SvUV(tmpstr);
2378             }
2379         }
2380         return PTR2UV(SvRV(sv));
2381     }
2382
2383     if (SvVALID(sv) || isREGEXP(sv)) {
2384         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2385            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2386            Regexps have no SvIVX and SvNVX fields. */
2387         assert(isREGEXP(sv) || SvPOKp(sv));
2388         {
2389             UV value;
2390             const char * const ptr =
2391                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2392             const int numtype
2393                 = grok_number(ptr, SvCUR(sv), &value);
2394
2395             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2396                 == IS_NUMBER_IN_UV) {
2397                 /* It's definitely an integer */
2398                 if (!(numtype & IS_NUMBER_NEG))
2399                     return value;
2400             }
2401             if (!numtype) {
2402                 if (ckWARN(WARN_NUMERIC))
2403                     not_a_number(sv);
2404             }
2405             return U_V(Atof(ptr));
2406         }
2407     }
2408
2409     if (SvTHINKFIRST(sv)) {
2410 #ifdef PERL_OLD_COPY_ON_WRITE
2411         if (SvIsCOW(sv)) {
2412             sv_force_normal_flags(sv, 0);
2413         }
2414 #endif
2415         if (SvREADONLY(sv) && !SvOK(sv)) {
2416             if (ckWARN(WARN_UNINITIALIZED))
2417                 report_uninit(sv);
2418             return 0;
2419         }
2420     }
2421
2422     if (!SvIOKp(sv)) {
2423         if (S_sv_2iuv_common(aTHX_ sv))
2424             return 0;
2425     }
2426
2427     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2428                           PTR2UV(sv),SvUVX(sv)));
2429     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2430 }
2431
2432 /*
2433 =for apidoc sv_2nv_flags
2434
2435 Return the num value of an SV, doing any necessary string or integer
2436 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2437 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2438
2439 =cut
2440 */
2441
2442 NV
2443 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2444 {
2445     dVAR;
2446     if (!sv)
2447         return 0.0;
2448     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2449         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2450            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2451            Regexps have no SvIVX and SvNVX fields.  */
2452         const char *ptr;
2453         if (flags & SV_GMAGIC)
2454             mg_get(sv);
2455         if (SvNOKp(sv))
2456             return SvNVX(sv);
2457         if (SvPOKp(sv) && !SvIOKp(sv)) {
2458             ptr = SvPVX_const(sv);
2459           grokpv:
2460             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2461                 !grok_number(ptr, SvCUR(sv), NULL))
2462                 not_a_number(sv);
2463             return Atof(ptr);
2464         }
2465         if (SvIOKp(sv)) {
2466             if (SvIsUV(sv))
2467                 return (NV)SvUVX(sv);
2468             else
2469                 return (NV)SvIVX(sv);
2470         }
2471         if (SvROK(sv)) {
2472             goto return_rok;
2473         }
2474         if (isREGEXP(sv)) {
2475             ptr = RX_WRAPPED((REGEXP *)sv);
2476             goto grokpv;
2477         }
2478         assert(SvTYPE(sv) >= SVt_PVMG);
2479         /* This falls through to the report_uninit near the end of the
2480            function. */
2481     } else if (SvTHINKFIRST(sv)) {
2482         if (SvROK(sv)) {
2483         return_rok:
2484             if (SvAMAGIC(sv)) {
2485                 SV *tmpstr;
2486                 if (flags & SV_SKIP_OVERLOAD)
2487                     return 0;
2488                 tmpstr = AMG_CALLunary(sv, numer_amg);
2489                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2490                     return SvNV(tmpstr);
2491                 }
2492             }
2493             return PTR2NV(SvRV(sv));
2494         }
2495 #ifdef PERL_OLD_COPY_ON_WRITE
2496         if (SvIsCOW(sv)) {
2497             sv_force_normal_flags(sv, 0);
2498         }
2499 #endif
2500         if (SvREADONLY(sv) && !SvOK(sv)) {
2501             if (ckWARN(WARN_UNINITIALIZED))
2502                 report_uninit(sv);
2503             return 0.0;
2504         }
2505     }
2506     if (SvTYPE(sv) < SVt_NV) {
2507         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2508         sv_upgrade(sv, SVt_NV);
2509 #ifdef USE_LONG_DOUBLE
2510         DEBUG_c({
2511             STORE_NUMERIC_LOCAL_SET_STANDARD();
2512             PerlIO_printf(Perl_debug_log,
2513                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2514                           PTR2UV(sv), SvNVX(sv));
2515             RESTORE_NUMERIC_LOCAL();
2516         });
2517 #else
2518         DEBUG_c({
2519             STORE_NUMERIC_LOCAL_SET_STANDARD();
2520             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2521                           PTR2UV(sv), SvNVX(sv));
2522             RESTORE_NUMERIC_LOCAL();
2523         });
2524 #endif
2525     }
2526     else if (SvTYPE(sv) < SVt_PVNV)
2527         sv_upgrade(sv, SVt_PVNV);
2528     if (SvNOKp(sv)) {
2529         return SvNVX(sv);
2530     }
2531     if (SvIOKp(sv)) {
2532         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2533 #ifdef NV_PRESERVES_UV
2534         if (SvIOK(sv))
2535             SvNOK_on(sv);
2536         else
2537             SvNOKp_on(sv);
2538 #else
2539         /* Only set the public NV OK flag if this NV preserves the IV  */
2540         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2541         if (SvIOK(sv) &&
2542             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2543                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2544             SvNOK_on(sv);
2545         else
2546             SvNOKp_on(sv);
2547 #endif
2548     }
2549     else if (SvPOKp(sv)) {
2550         UV value;
2551         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2552         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2553             not_a_number(sv);
2554 #ifdef NV_PRESERVES_UV
2555         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2556             == IS_NUMBER_IN_UV) {
2557             /* It's definitely an integer */
2558             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2559         } else
2560             SvNV_set(sv, Atof(SvPVX_const(sv)));
2561         if (numtype)
2562             SvNOK_on(sv);
2563         else
2564             SvNOKp_on(sv);
2565 #else
2566         SvNV_set(sv, Atof(SvPVX_const(sv)));
2567         /* Only set the public NV OK flag if this NV preserves the value in
2568            the PV at least as well as an IV/UV would.
2569            Not sure how to do this 100% reliably. */
2570         /* if that shift count is out of range then Configure's test is
2571            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2572            UV_BITS */
2573         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2574             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2575             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2576         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2577             /* Can't use strtol etc to convert this string, so don't try.
2578                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2579             SvNOK_on(sv);
2580         } else {
2581             /* value has been set.  It may not be precise.  */
2582             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2583                 /* 2s complement assumption for (UV)IV_MIN  */
2584                 SvNOK_on(sv); /* Integer is too negative.  */
2585             } else {
2586                 SvNOKp_on(sv);
2587                 SvIOKp_on(sv);
2588
2589                 if (numtype & IS_NUMBER_NEG) {
2590                     SvIV_set(sv, -(IV)value);
2591                 } else if (value <= (UV)IV_MAX) {
2592                     SvIV_set(sv, (IV)value);
2593                 } else {
2594                     SvUV_set(sv, value);
2595                     SvIsUV_on(sv);
2596                 }
2597
2598                 if (numtype & IS_NUMBER_NOT_INT) {
2599                     /* I believe that even if the original PV had decimals,
2600                        they are lost beyond the limit of the FP precision.
2601                        However, neither is canonical, so both only get p
2602                        flags.  NWC, 2000/11/25 */
2603                     /* Both already have p flags, so do nothing */
2604                 } else {
2605                     const NV nv = SvNVX(sv);
2606                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2607                         if (SvIVX(sv) == I_V(nv)) {
2608                             SvNOK_on(sv);
2609                         } else {
2610                             /* It had no "." so it must be integer.  */
2611                         }
2612                         SvIOK_on(sv);
2613                     } else {
2614                         /* between IV_MAX and NV(UV_MAX).
2615                            Could be slightly > UV_MAX */
2616
2617                         if (numtype & IS_NUMBER_NOT_INT) {
2618                             /* UV and NV both imprecise.  */
2619                         } else {
2620                             const UV nv_as_uv = U_V(nv);
2621
2622                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2623                                 SvNOK_on(sv);
2624                             }
2625                             SvIOK_on(sv);
2626                         }
2627                     }
2628                 }
2629             }
2630         }
2631         /* It might be more code efficient to go through the entire logic above
2632            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2633            gets complex and potentially buggy, so more programmer efficient
2634            to do it this way, by turning off the public flags:  */
2635         if (!numtype)
2636             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2637 #endif /* NV_PRESERVES_UV */
2638     }
2639     else  {
2640         if (isGV_with_GP(sv)) {
2641             glob_2number(MUTABLE_GV(sv));
2642             return 0.0;
2643         }
2644
2645         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2646             report_uninit(sv);
2647         assert (SvTYPE(sv) >= SVt_NV);
2648         /* Typically the caller expects that sv_any is not NULL now.  */
2649         /* XXX Ilya implies that this is a bug in callers that assume this
2650            and ideally should be fixed.  */
2651         return 0.0;
2652     }
2653 #if defined(USE_LONG_DOUBLE)
2654     DEBUG_c({
2655         STORE_NUMERIC_LOCAL_SET_STANDARD();
2656         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2657                       PTR2UV(sv), SvNVX(sv));
2658         RESTORE_NUMERIC_LOCAL();
2659     });
2660 #else
2661     DEBUG_c({
2662         STORE_NUMERIC_LOCAL_SET_STANDARD();
2663         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2664                       PTR2UV(sv), SvNVX(sv));
2665         RESTORE_NUMERIC_LOCAL();
2666     });
2667 #endif
2668     return SvNVX(sv);
2669 }
2670
2671 /*
2672 =for apidoc sv_2num
2673
2674 Return an SV with the numeric value of the source SV, doing any necessary
2675 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2676 access this function.
2677
2678 =cut
2679 */
2680
2681 SV *
2682 Perl_sv_2num(pTHX_ SV *const sv)
2683 {
2684     PERL_ARGS_ASSERT_SV_2NUM;
2685
2686     if (!SvROK(sv))
2687         return sv;
2688     if (SvAMAGIC(sv)) {
2689         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2690         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2691         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2692             return sv_2num(tmpsv);
2693     }
2694     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2695 }
2696
2697 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2698  * UV as a string towards the end of buf, and return pointers to start and
2699  * end of it.
2700  *
2701  * We assume that buf is at least TYPE_CHARS(UV) long.
2702  */
2703
2704 static char *
2705 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2706 {
2707     char *ptr = buf + TYPE_CHARS(UV);
2708     char * const ebuf = ptr;
2709     int sign;
2710
2711     PERL_ARGS_ASSERT_UIV_2BUF;
2712
2713     if (is_uv)
2714         sign = 0;
2715     else if (iv >= 0) {
2716         uv = iv;
2717         sign = 0;
2718     } else {
2719         uv = -iv;
2720         sign = 1;
2721     }
2722     do {
2723         *--ptr = '0' + (char)(uv % 10);
2724     } while (uv /= 10);
2725     if (sign)
2726         *--ptr = '-';
2727     *peob = ebuf;
2728     return ptr;
2729 }
2730
2731 /*
2732 =for apidoc sv_2pv_flags
2733
2734 Returns a pointer to the string value of an SV, and sets *lp to its length.
2735 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2736 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2737 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2738
2739 =cut
2740 */
2741
2742 char *
2743 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2744 {
2745     dVAR;
2746     char *s;
2747
2748     if (!sv) {
2749         if (lp)
2750             *lp = 0;
2751         return (char *)"";
2752     }
2753     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2754         mg_get(sv);
2755     if (SvROK(sv)) {
2756         if (SvAMAGIC(sv)) {
2757             SV *tmpstr;
2758             if (flags & SV_SKIP_OVERLOAD)
2759                 return NULL;
2760             tmpstr = AMG_CALLunary(sv, string_amg);
2761             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2762             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2763                 /* Unwrap this:  */
2764                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2765                  */
2766
2767                 char *pv;
2768                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2769                     if (flags & SV_CONST_RETURN) {
2770                         pv = (char *) SvPVX_const(tmpstr);
2771                     } else {
2772                         pv = (flags & SV_MUTABLE_RETURN)
2773                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2774                     }
2775                     if (lp)
2776                         *lp = SvCUR(tmpstr);
2777                 } else {
2778                     pv = sv_2pv_flags(tmpstr, lp, flags);
2779                 }
2780                 if (SvUTF8(tmpstr))
2781                     SvUTF8_on(sv);
2782                 else
2783                     SvUTF8_off(sv);
2784                 return pv;
2785             }
2786         }
2787         {
2788             STRLEN len;
2789             char *retval;
2790             char *buffer;
2791             SV *const referent = SvRV(sv);
2792
2793             if (!referent) {
2794                 len = 7;
2795                 retval = buffer = savepvn("NULLREF", len);
2796             } else if (SvTYPE(referent) == SVt_REGEXP &&
2797                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2798                         amagic_is_enabled(string_amg))) {
2799                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2800
2801                 assert(re);
2802                         
2803                 /* If the regex is UTF-8 we want the containing scalar to
2804                    have an UTF-8 flag too */
2805                 if (RX_UTF8(re))
2806                     SvUTF8_on(sv);
2807                 else
2808                     SvUTF8_off(sv);     
2809
2810                 if (lp)
2811                     *lp = RX_WRAPLEN(re);
2812  
2813                 return RX_WRAPPED(re);
2814             } else {
2815                 const char *const typestr = sv_reftype(referent, 0);
2816                 const STRLEN typelen = strlen(typestr);
2817                 UV addr = PTR2UV(referent);
2818                 const char *stashname = NULL;
2819                 STRLEN stashnamelen = 0; /* hush, gcc */
2820                 const char *buffer_end;
2821
2822                 if (SvOBJECT(referent)) {
2823                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2824
2825                     if (name) {
2826                         stashname = HEK_KEY(name);
2827                         stashnamelen = HEK_LEN(name);
2828
2829                         if (HEK_UTF8(name)) {
2830                             SvUTF8_on(sv);
2831                         } else {
2832                             SvUTF8_off(sv);
2833                         }
2834                     } else {
2835                         stashname = "__ANON__";
2836                         stashnamelen = 8;
2837                     }
2838                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2839                         + 2 * sizeof(UV) + 2 /* )\0 */;
2840                 } else {
2841                     len = typelen + 3 /* (0x */
2842                         + 2 * sizeof(UV) + 2 /* )\0 */;
2843                 }
2844
2845                 Newx(buffer, len, char);
2846                 buffer_end = retval = buffer + len;
2847
2848                 /* Working backwards  */
2849                 *--retval = '\0';
2850                 *--retval = ')';
2851                 do {
2852                     *--retval = PL_hexdigit[addr & 15];
2853                 } while (addr >>= 4);
2854                 *--retval = 'x';
2855                 *--retval = '0';
2856                 *--retval = '(';
2857
2858                 retval -= typelen;
2859                 memcpy(retval, typestr, typelen);
2860
2861                 if (stashname) {
2862                     *--retval = '=';
2863                     retval -= stashnamelen;
2864                     memcpy(retval, stashname, stashnamelen);
2865                 }
2866                 /* retval may not necessarily have reached the start of the
2867                    buffer here.  */
2868                 assert (retval >= buffer);
2869
2870                 len = buffer_end - retval - 1; /* -1 for that \0  */
2871             }
2872             if (lp)
2873                 *lp = len;
2874             SAVEFREEPV(buffer);
2875             return retval;
2876         }
2877     }
2878
2879     if (SvPOKp(sv)) {
2880         if (lp)
2881             *lp = SvCUR(sv);
2882         if (flags & SV_MUTABLE_RETURN)
2883             return SvPVX_mutable(sv);
2884         if (flags & SV_CONST_RETURN)
2885             return (char *)SvPVX_const(sv);
2886         return SvPVX(sv);
2887     }
2888
2889     if (SvIOK(sv)) {
2890         /* I'm assuming that if both IV and NV are equally valid then
2891            converting the IV is going to be more efficient */
2892         const U32 isUIOK = SvIsUV(sv);
2893         char buf[TYPE_CHARS(UV)];
2894         char *ebuf, *ptr;
2895         STRLEN len;
2896
2897         if (SvTYPE(sv) < SVt_PVIV)
2898             sv_upgrade(sv, SVt_PVIV);
2899         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2900         len = ebuf - ptr;
2901         /* inlined from sv_setpvn */
2902         s = SvGROW_mutable(sv, len + 1);
2903         Move(ptr, s, len, char);
2904         s += len;
2905         *s = '\0';
2906         SvPOK_on(sv);
2907     }
2908     else if (SvNOK(sv)) {
2909         if (SvTYPE(sv) < SVt_PVNV)
2910             sv_upgrade(sv, SVt_PVNV);
2911         if (SvNVX(sv) == 0.0) {
2912             s = SvGROW_mutable(sv, 2);
2913             *s++ = '0';
2914             *s = '\0';
2915         } else {
2916             dSAVE_ERRNO;
2917             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2918             s = SvGROW_mutable(sv, NV_DIG + 20);
2919             /* some Xenix systems wipe out errno here */
2920
2921 #ifndef USE_LOCALE_NUMERIC
2922             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2923             SvPOK_on(sv);
2924 #else
2925             /* Gconvert always uses the current locale.  That's the right thing
2926              * to do if we're supposed to be using locales.  But otherwise, we
2927              * want the result to be based on the C locale, so we need to
2928              * change to the C locale during the Gconvert and then change back.
2929              * But if we're already in the C locale (PL_numeric_standard is
2930              * TRUE in that case), no need to do any changing */
2931             if (PL_numeric_standard || IN_LOCALE_RUNTIME) {
2932                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2933             }
2934             else {
2935                 char *loc = savepv(setlocale(LC_NUMERIC, NULL));
2936                 setlocale(LC_NUMERIC, "C");
2937                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2938                 setlocale(LC_NUMERIC, loc);
2939                 Safefree(loc);
2940             }
2941
2942             /* We don't call SvPOK_on(), because it may come to pass that the
2943              * locale changes so that the stringification we just did is no
2944              * longer correct.  We will have to re-stringify every time it is
2945              * needed */
2946 #endif
2947             RESTORE_ERRNO;
2948             while (*s) s++;
2949         }
2950 #ifdef hcx
2951         if (s[-1] == '.')
2952             *--s = '\0';
2953 #endif
2954     }
2955     else if (isGV_with_GP(sv)) {
2956         GV *const gv = MUTABLE_GV(sv);
2957         SV *const buffer = sv_newmortal();
2958
2959         gv_efullname3(buffer, gv, "*");
2960
2961         assert(SvPOK(buffer));
2962         if (SvUTF8(buffer))
2963             SvUTF8_on(sv);
2964         if (lp)
2965             *lp = SvCUR(buffer);
2966         return SvPVX(buffer);
2967     }
2968     else if (isREGEXP(sv)) {
2969         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
2970         return RX_WRAPPED((REGEXP *)sv);
2971     }
2972     else {
2973         if (lp)
2974             *lp = 0;
2975         if (flags & SV_UNDEF_RETURNS_NULL)
2976             return NULL;
2977         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2978             report_uninit(sv);
2979         /* Typically the caller expects that sv_any is not NULL now.  */
2980         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
2981             sv_upgrade(sv, SVt_PV);
2982         return (char *)"";
2983     }
2984
2985     {
2986         const STRLEN len = s - SvPVX_const(sv);
2987         if (lp) 
2988             *lp = len;
2989         SvCUR_set(sv, len);
2990     }
2991     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2992                           PTR2UV(sv),SvPVX_const(sv)));
2993     if (flags & SV_CONST_RETURN)
2994         return (char *)SvPVX_const(sv);
2995     if (flags & SV_MUTABLE_RETURN)
2996         return SvPVX_mutable(sv);
2997     return SvPVX(sv);
2998 }
2999
3000 /*
3001 =for apidoc sv_copypv
3002
3003 Copies a stringified representation of the source SV into the
3004 destination SV.  Automatically performs any necessary mg_get and
3005 coercion of numeric values into strings.  Guaranteed to preserve
3006 UTF8 flag even from overloaded objects.  Similar in nature to
3007 sv_2pv[_flags] but operates directly on an SV instead of just the
3008 string.  Mostly uses sv_2pv_flags to do its work, except when that
3009 would lose the UTF-8'ness of the PV.
3010
3011 =for apidoc sv_copypv_nomg
3012
3013 Like sv_copypv, but doesn't invoke get magic first.
3014
3015 =for apidoc sv_copypv_flags
3016
3017 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3018 include SV_GMAGIC.
3019
3020 =cut
3021 */
3022
3023 void
3024 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3025 {
3026     PERL_ARGS_ASSERT_SV_COPYPV;
3027
3028     sv_copypv_flags(dsv, ssv, 0);
3029 }
3030
3031 void
3032 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3033 {
3034     STRLEN len;
3035     const char *s;
3036
3037     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3038
3039     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3040         mg_get(ssv);
3041     s = SvPV_nomg_const(ssv,len);
3042     sv_setpvn(dsv,s,len);
3043     if (SvUTF8(ssv))
3044         SvUTF8_on(dsv);
3045     else
3046         SvUTF8_off(dsv);
3047 }
3048
3049 /*
3050 =for apidoc sv_2pvbyte
3051
3052 Return a pointer to the byte-encoded representation of the SV, and set *lp
3053 to its length.  May cause the SV to be downgraded from UTF-8 as a
3054 side-effect.
3055
3056 Usually accessed via the C<SvPVbyte> macro.
3057
3058 =cut
3059 */
3060
3061 char *
3062 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3063 {
3064     PERL_ARGS_ASSERT_SV_2PVBYTE;
3065
3066     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3067      || isGV_with_GP(sv) || SvROK(sv)) {
3068         SV *sv2 = sv_newmortal();
3069         sv_copypv(sv2,sv);
3070         sv = sv2;
3071     }
3072     else SvGETMAGIC(sv);
3073     sv_utf8_downgrade(sv,0);
3074     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3075 }
3076
3077 /*
3078 =for apidoc sv_2pvutf8
3079
3080 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3081 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3082
3083 Usually accessed via the C<SvPVutf8> macro.
3084
3085 =cut
3086 */
3087
3088 char *
3089 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3090 {
3091     PERL_ARGS_ASSERT_SV_2PVUTF8;
3092
3093     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3094      || isGV_with_GP(sv) || SvROK(sv))
3095         sv = sv_mortalcopy(sv);
3096     else
3097         SvGETMAGIC(sv);
3098     sv_utf8_upgrade_nomg(sv);
3099     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3100 }
3101
3102
3103 /*
3104 =for apidoc sv_2bool
3105
3106 This macro is only used by sv_true() or its macro equivalent, and only if
3107 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3108 It calls sv_2bool_flags with the SV_GMAGIC flag.
3109
3110 =for apidoc sv_2bool_flags
3111
3112 This function is only used by sv_true() and friends,  and only if
3113 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3114 contain SV_GMAGIC, then it does an mg_get() first.
3115
3116
3117 =cut
3118 */
3119
3120 bool
3121 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
3122 {
3123     dVAR;
3124
3125     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3126
3127     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3128
3129     if (!SvOK(sv))
3130         return 0;
3131     if (SvROK(sv)) {
3132         if (SvAMAGIC(sv)) {
3133             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3134             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3135                 return cBOOL(SvTRUE(tmpsv));
3136         }
3137         return SvRV(sv) != 0;
3138     }
3139     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3140 }
3141
3142 /*
3143 =for apidoc sv_utf8_upgrade
3144
3145 Converts the PV of an SV to its UTF-8-encoded form.
3146 Forces the SV to string form if it is not already.
3147 Will C<mg_get> on C<sv> if appropriate.
3148 Always sets the SvUTF8 flag to avoid future validity checks even
3149 if the whole string is the same in UTF-8 as not.
3150 Returns the number of bytes in the converted string
3151
3152 This is not a general purpose byte encoding to Unicode interface:
3153 use the Encode extension for that.
3154
3155 =for apidoc sv_utf8_upgrade_nomg
3156
3157 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3158
3159 =for apidoc sv_utf8_upgrade_flags
3160
3161 Converts the PV of an SV to its UTF-8-encoded form.
3162 Forces the SV to string form if it is not already.
3163 Always sets the SvUTF8 flag to avoid future validity checks even
3164 if all the bytes are invariant in UTF-8.
3165 If C<flags> has C<SV_GMAGIC> bit set,
3166 will C<mg_get> on C<sv> if appropriate, else not.
3167 Returns the number of bytes in the converted string
3168 C<sv_utf8_upgrade> and
3169 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3170
3171 This is not a general purpose byte encoding to Unicode interface:
3172 use the Encode extension for that.
3173
3174 =cut
3175
3176 The grow version is currently not externally documented.  It adds a parameter,
3177 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3178 have free after it upon return.  This allows the caller to reserve extra space
3179 that it intends to fill, to avoid extra grows.
3180
3181 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3182 which can be used to tell this function to not first check to see if there are
3183 any characters that are different in UTF-8 (variant characters) which would
3184 force it to allocate a new string to sv, but to assume there are.  Typically
3185 this flag is used by a routine that has already parsed the string to find that
3186 there are such characters, and passes this information on so that the work
3187 doesn't have to be repeated.
3188
3189 (One might think that the calling routine could pass in the position of the
3190 first such variant, so it wouldn't have to be found again.  But that is not the
3191 case, because typically when the caller is likely to use this flag, it won't be
3192 calling this routine unless it finds something that won't fit into a byte.
3193 Otherwise it tries to not upgrade and just use bytes.  But some things that
3194 do fit into a byte are variants in utf8, and the caller may not have been
3195 keeping track of these.)
3196
3197 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3198 isn't guaranteed due to having other routines do the work in some input cases,
3199 or if the input is already flagged as being in utf8.
3200
3201 The speed of this could perhaps be improved for many cases if someone wanted to
3202 write a fast function that counts the number of variant characters in a string,
3203 especially if it could return the position of the first one.
3204
3205 */
3206
3207 STRLEN
3208 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3209 {
3210     dVAR;
3211
3212     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3213
3214     if (sv == &PL_sv_undef)
3215         return 0;
3216     if (!SvPOK_nog(sv)) {
3217         STRLEN len = 0;
3218         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3219             (void) sv_2pv_flags(sv,&len, flags);
3220             if (SvUTF8(sv)) {
3221                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3222                 return len;
3223             }
3224         } else {
3225             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3226         }
3227     }
3228
3229     if (SvUTF8(sv)) {
3230         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3231         return SvCUR(sv);
3232     }
3233
3234     if (SvIsCOW(sv)) {
3235         sv_force_normal_flags(sv, 0);
3236     }
3237
3238     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3239         sv_recode_to_utf8(sv, PL_encoding);
3240         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3241         return SvCUR(sv);
3242     }
3243
3244     if (SvCUR(sv) == 0) {
3245         if (extra) SvGROW(sv, extra);
3246     } else { /* Assume Latin-1/EBCDIC */
3247         /* This function could be much more efficient if we
3248          * had a FLAG in SVs to signal if there are any variant
3249          * chars in the PV.  Given that there isn't such a flag
3250          * make the loop as fast as possible (although there are certainly ways
3251          * to speed this up, eg. through vectorization) */
3252         U8 * s = (U8 *) SvPVX_const(sv);
3253         U8 * e = (U8 *) SvEND(sv);
3254         U8 *t = s;
3255         STRLEN two_byte_count = 0;
3256         
3257         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3258
3259         /* See if really will need to convert to utf8.  We mustn't rely on our
3260          * incoming SV being well formed and having a trailing '\0', as certain
3261          * code in pp_formline can send us partially built SVs. */
3262
3263         while (t < e) {
3264             const U8 ch = *t++;
3265             if (NATIVE_IS_INVARIANT(ch)) continue;
3266
3267             t--;    /* t already incremented; re-point to first variant */
3268             two_byte_count = 1;
3269             goto must_be_utf8;
3270         }
3271
3272         /* utf8 conversion not needed because all are invariants.  Mark as
3273          * UTF-8 even if no variant - saves scanning loop */
3274         SvUTF8_on(sv);
3275         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3276         return SvCUR(sv);
3277
3278 must_be_utf8:
3279
3280         /* Here, the string should be converted to utf8, either because of an
3281          * input flag (two_byte_count = 0), or because a character that
3282          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3283          * the beginning of the string (if we didn't examine anything), or to
3284          * the first variant.  In either case, everything from s to t - 1 will
3285          * occupy only 1 byte each on output.
3286          *
3287          * There are two main ways to convert.  One is to create a new string
3288          * and go through the input starting from the beginning, appending each
3289          * converted value onto the new string as we go along.  It's probably
3290          * best to allocate enough space in the string for the worst possible
3291          * case rather than possibly running out of space and having to
3292          * reallocate and then copy what we've done so far.  Since everything
3293          * from s to t - 1 is invariant, the destination can be initialized
3294          * with these using a fast memory copy
3295          *
3296          * The other way is to figure out exactly how big the string should be
3297          * by parsing the entire input.  Then you don't have to make it big
3298          * enough to handle the worst possible case, and more importantly, if
3299          * the string you already have is large enough, you don't have to
3300          * allocate a new string, you can copy the last character in the input
3301          * string to the final position(s) that will be occupied by the
3302          * converted string and go backwards, stopping at t, since everything
3303          * before that is invariant.
3304          *
3305          * There are advantages and disadvantages to each method.
3306          *
3307          * In the first method, we can allocate a new string, do the memory
3308          * copy from the s to t - 1, and then proceed through the rest of the
3309          * string byte-by-byte.
3310          *
3311          * In the second method, we proceed through the rest of the input
3312          * string just calculating how big the converted string will be.  Then
3313          * there are two cases:
3314          *  1)  if the string has enough extra space to handle the converted
3315          *      value.  We go backwards through the string, converting until we
3316          *      get to the position we are at now, and then stop.  If this
3317          *      position is far enough along in the string, this method is
3318          *      faster than the other method.  If the memory copy were the same
3319          *      speed as the byte-by-byte loop, that position would be about
3320          *      half-way, as at the half-way mark, parsing to the end and back
3321          *      is one complete string's parse, the same amount as starting
3322          *      over and going all the way through.  Actually, it would be
3323          *      somewhat less than half-way, as it's faster to just count bytes
3324          *      than to also copy, and we don't have the overhead of allocating
3325          *      a new string, changing the scalar to use it, and freeing the
3326          *      existing one.  But if the memory copy is fast, the break-even
3327          *      point is somewhere after half way.  The counting loop could be
3328          *      sped up by vectorization, etc, to move the break-even point
3329          *      further towards the beginning.
3330          *  2)  if the string doesn't have enough space to handle the converted
3331          *      value.  A new string will have to be allocated, and one might
3332          *      as well, given that, start from the beginning doing the first
3333          *      method.  We've spent extra time parsing the string and in
3334          *      exchange all we've gotten is that we know precisely how big to
3335          *      make the new one.  Perl is more optimized for time than space,
3336          *      so this case is a loser.
3337          * So what I've decided to do is not use the 2nd method unless it is
3338          * guaranteed that a new string won't have to be allocated, assuming
3339          * the worst case.  I also decided not to put any more conditions on it
3340          * than this, for now.  It seems likely that, since the worst case is
3341          * twice as big as the unknown portion of the string (plus 1), we won't
3342          * be guaranteed enough space, causing us to go to the first method,
3343          * unless the string is short, or the first variant character is near
3344          * the end of it.  In either of these cases, it seems best to use the
3345          * 2nd method.  The only circumstance I can think of where this would
3346          * be really slower is if the string had once had much more data in it
3347          * than it does now, but there is still a substantial amount in it  */
3348
3349         {
3350             STRLEN invariant_head = t - s;
3351             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3352             if (SvLEN(sv) < size) {
3353
3354                 /* Here, have decided to allocate a new string */
3355
3356                 U8 *dst;
3357                 U8 *d;
3358
3359                 Newx(dst, size, U8);
3360
3361                 /* If no known invariants at the beginning of the input string,
3362                  * set so starts from there.  Otherwise, can use memory copy to
3363                  * get up to where we are now, and then start from here */
3364
3365                 if (invariant_head <= 0) {
3366                     d = dst;
3367                 } else {
3368                     Copy(s, dst, invariant_head, char);
3369                     d = dst + invariant_head;
3370                 }
3371
3372                 while (t < e) {
3373                     const UV uv = NATIVE8_TO_UNI(*t++);
3374                     if (UNI_IS_INVARIANT(uv))
3375                         *d++ = (U8)UNI_TO_NATIVE(uv);
3376                     else {
3377                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3378                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3379                     }
3380                 }
3381                 *d = '\0';
3382                 SvPV_free(sv); /* No longer using pre-existing string */
3383                 SvPV_set(sv, (char*)dst);
3384                 SvCUR_set(sv, d - dst);
3385                 SvLEN_set(sv, size);
3386             } else {
3387
3388                 /* Here, have decided to get the exact size of the string.
3389                  * Currently this happens only when we know that there is
3390                  * guaranteed enough space to fit the converted string, so
3391                  * don't have to worry about growing.  If two_byte_count is 0,
3392                  * then t points to the first byte of the string which hasn't
3393                  * been examined yet.  Otherwise two_byte_count is 1, and t
3394                  * points to the first byte in the string that will expand to
3395                  * two.  Depending on this, start examining at t or 1 after t.
3396                  * */
3397
3398                 U8 *d = t + two_byte_count;
3399
3400
3401                 /* Count up the remaining bytes that expand to two */
3402
3403                 while (d < e) {
3404                     const U8 chr = *d++;
3405                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3406                 }
3407
3408                 /* The string will expand by just the number of bytes that
3409                  * occupy two positions.  But we are one afterwards because of
3410                  * the increment just above.  This is the place to put the
3411                  * trailing NUL, and to set the length before we decrement */
3412
3413                 d += two_byte_count;
3414                 SvCUR_set(sv, d - s);
3415                 *d-- = '\0';
3416
3417
3418                 /* Having decremented d, it points to the position to put the
3419                  * very last byte of the expanded string.  Go backwards through
3420                  * the string, copying and expanding as we go, stopping when we
3421                  * get to the part that is invariant the rest of the way down */
3422
3423                 e--;
3424                 while (e >= t) {
3425                     const U8 ch = NATIVE8_TO_UNI(*e--);
3426                     if (UNI_IS_INVARIANT(ch)) {
3427                         *d-- = UNI_TO_NATIVE(ch);
3428                     } else {
3429                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3430                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3431                     }
3432                 }
3433             }
3434
3435             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3436                 /* Update pos. We do it at the end rather than during
3437                  * the upgrade, to avoid slowing down the common case
3438                  * (upgrade without pos) */
3439                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3440                 if (mg) {
3441                     I32 pos = mg->mg_len;
3442                     if (pos > 0 && (U32)pos > invariant_head) {
3443                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3444                         STRLEN n = (U32)pos - invariant_head;
3445                         while (n > 0) {
3446                             if (UTF8_IS_START(*d))
3447                                 d++;
3448                             d++;
3449                             n--;
3450                         }
3451                         mg->mg_len  = d - (U8*)SvPVX(sv);
3452                     }
3453                 }
3454                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3455                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3456             }
3457         }
3458     }
3459
3460     /* Mark as UTF-8 even if no variant - saves scanning loop */
3461     SvUTF8_on(sv);
3462     return SvCUR(sv);
3463 }
3464
3465 /*
3466 =for apidoc sv_utf8_downgrade
3467
3468 Attempts to convert the PV of an SV from characters to bytes.
3469 If the PV contains a character that cannot fit
3470 in a byte, this conversion will fail;
3471 in this case, either returns false or, if C<fail_ok> is not
3472 true, croaks.
3473
3474 This is not a general purpose Unicode to byte encoding interface:
3475 use the Encode extension for that.
3476
3477 =cut
3478 */
3479
3480 bool
3481 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3482 {
3483     dVAR;
3484
3485     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3486
3487     if (SvPOKp(sv) && SvUTF8(sv)) {
3488         if (SvCUR(sv)) {
3489             U8 *s;
3490             STRLEN len;
3491             int mg_flags = SV_GMAGIC;
3492
3493             if (SvIsCOW(sv)) {
3494                 sv_force_normal_flags(sv, 0);
3495             }
3496             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3497                 /* update pos */
3498                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3499                 if (mg) {
3500                     I32 pos = mg->mg_len;
3501                     if (pos > 0) {
3502                         sv_pos_b2u(sv, &pos);
3503                         mg_flags = 0; /* sv_pos_b2u does get magic */
3504                         mg->mg_len  = pos;
3505                     }
3506                 }
3507                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3508                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3509
3510             }
3511             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3512
3513             if (!utf8_to_bytes(s, &len)) {
3514                 if (fail_ok)
3515                     return FALSE;
3516                 else {
3517                     if (PL_op)
3518                         Perl_croak(aTHX_ "Wide character in %s",
3519                                    OP_DESC(PL_op));
3520                     else
3521                         Perl_croak(aTHX_ "Wide character");
3522                 }
3523             }
3524             SvCUR_set(sv, len);
3525         }
3526     }
3527     SvUTF8_off(sv);
3528     return TRUE;
3529 }
3530
3531 /*
3532 =for apidoc sv_utf8_encode
3533
3534 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3535 flag off so that it looks like octets again.
3536
3537 =cut
3538 */
3539
3540 void
3541 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3542 {
3543     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3544
3545     if (SvREADONLY(sv)) {
3546         sv_force_normal_flags(sv, 0);
3547     }
3548     (void) sv_utf8_upgrade(sv);
3549     SvUTF8_off(sv);
3550 }
3551
3552 /*
3553 =for apidoc sv_utf8_decode
3554
3555 If the PV of the SV is an octet sequence in UTF-8
3556 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3557 so that it looks like a character.  If the PV contains only single-byte
3558 characters, the C<SvUTF8> flag stays off.
3559 Scans PV for validity and returns false if the PV is invalid UTF-8.
3560
3561 =cut
3562 */
3563
3564 bool
3565 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3566 {
3567     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3568
3569     if (SvPOKp(sv)) {
3570         const U8 *start, *c;
3571         const U8 *e;
3572
3573         /* The octets may have got themselves encoded - get them back as
3574          * bytes
3575          */
3576         if (!sv_utf8_downgrade(sv, TRUE))
3577             return FALSE;
3578
3579         /* it is actually just a matter of turning the utf8 flag on, but
3580          * we want to make sure everything inside is valid utf8 first.
3581          */
3582         c = start = (const U8 *) SvPVX_const(sv);
3583         if (!is_utf8_string(c, SvCUR(sv)))
3584             return FALSE;
3585         e = (const U8 *) SvEND(sv);
3586         while (c < e) {
3587             const U8 ch = *c++;
3588             if (!UTF8_IS_INVARIANT(ch)) {
3589                 SvUTF8_on(sv);
3590                 break;
3591             }
3592         }
3593         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3594             /* adjust pos to the start of a UTF8 char sequence */
3595             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3596             if (mg) {
3597                 I32 pos = mg->mg_len;
3598                 if (pos > 0) {
3599                     for (c = start + pos; c > start; c--) {
3600                         if (UTF8_IS_START(*c))
3601                             break;
3602                     }
3603                     mg->mg_len  = c - start;
3604                 }
3605             }
3606             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3607                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3608         }
3609     }
3610     return TRUE;
3611 }
3612
3613 /*
3614 =for apidoc sv_setsv
3615
3616 Copies the contents of the source SV C<ssv> into the destination SV
3617 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3618 function if the source SV needs to be reused.  Does not handle 'set' magic.
3619 Loosely speaking, it performs a copy-by-value, obliterating any previous
3620 content of the destination.
3621
3622 You probably want to use one of the assortment of wrappers, such as
3623 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3624 C<SvSetMagicSV_nosteal>.
3625
3626 =for apidoc sv_setsv_flags
3627
3628 Copies the contents of the source SV C<ssv> into the destination SV
3629 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3630 function if the source SV needs to be reused.  Does not handle 'set' magic.
3631 Loosely speaking, it performs a copy-by-value, obliterating any previous
3632 content of the destination.
3633 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3634 C<ssv> if appropriate, else not.  If the C<flags>
3635 parameter has the C<NOSTEAL> bit set then the
3636 buffers of temps will not be stolen.  <sv_setsv>
3637 and C<sv_setsv_nomg> are implemented in terms of this function.
3638
3639 You probably want to use one of the assortment of wrappers, such as
3640 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3641 C<SvSetMagicSV_nosteal>.
3642
3643 This is the primary function for copying scalars, and most other
3644 copy-ish functions and macros use this underneath.
3645
3646 =cut
3647 */
3648
3649 static void
3650 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3651 {
3652     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3653     HV *old_stash = NULL;
3654
3655     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3656
3657     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3658         const char * const name = GvNAME(sstr);
3659         const STRLEN len = GvNAMELEN(sstr);
3660         {
3661             if (dtype >= SVt_PV) {
3662                 SvPV_free(dstr);
3663                 SvPV_set(dstr, 0);
3664                 SvLEN_set(dstr, 0);
3665                 SvCUR_set(dstr, 0);
3666             }
3667             SvUPGRADE(dstr, SVt_PVGV);
3668             (void)SvOK_off(dstr);
3669             /* We have to turn this on here, even though we turn it off
3670                below, as GvSTASH will fail an assertion otherwise. */
3671             isGV_with_GP_on(dstr);
3672         }
3673         GvSTASH(dstr) = GvSTASH(sstr);
3674         if (GvSTASH(dstr))
3675             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3676         gv_name_set(MUTABLE_GV(dstr), name, len,
3677                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3678         SvFAKE_on(dstr);        /* can coerce to non-glob */
3679     }
3680
3681     if(GvGP(MUTABLE_GV(sstr))) {
3682         /* If source has method cache entry, clear it */
3683         if(GvCVGEN(sstr)) {
3684             SvREFCNT_dec(GvCV(sstr));
3685             GvCV_set(sstr, NULL);
3686             GvCVGEN(sstr) = 0;
3687         }
3688         /* If source has a real method, then a method is
3689            going to change */
3690         else if(
3691          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3692         ) {
3693             mro_changes = 1;
3694         }
3695     }
3696
3697     /* If dest already had a real method, that's a change as well */
3698     if(
3699         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3700      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3701     ) {
3702         mro_changes = 1;
3703     }
3704
3705     /* We don't need to check the name of the destination if it was not a
3706        glob to begin with. */
3707     if(dtype == SVt_PVGV) {
3708         const char * const name = GvNAME((const GV *)dstr);
3709         if(
3710             strEQ(name,"ISA")
3711          /* The stash may have been detached from the symbol table, so
3712             check its name. */
3713          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3714         )
3715             mro_changes = 2;
3716         else {
3717             const STRLEN len = GvNAMELEN(dstr);
3718             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3719              || (len == 1 && name[0] == ':')) {
3720                 mro_changes = 3;
3721
3722                 /* Set aside the old stash, so we can reset isa caches on
3723                    its subclasses. */
3724                 if((old_stash = GvHV(dstr)))
3725                     /* Make sure we do not lose it early. */
3726                     SvREFCNT_inc_simple_void_NN(
3727                      sv_2mortal((SV *)old_stash)
3728                     );
3729             }
3730         }
3731     }
3732
3733     gp_free(MUTABLE_GV(dstr));
3734     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3735     (void)SvOK_off(dstr);
3736     isGV_with_GP_on(dstr);
3737     GvINTRO_off(dstr);          /* one-shot flag */
3738     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3739     if (SvTAINTED(sstr))
3740         SvTAINT(dstr);
3741     if (GvIMPORTED(dstr) != GVf_IMPORTED
3742         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3743         {
3744             GvIMPORTED_on(dstr);
3745         }
3746     GvMULTI_on(dstr);
3747     if(mro_changes == 2) {
3748       if (GvAV((const GV *)sstr)) {
3749         MAGIC *mg;
3750         SV * const sref = (SV *)GvAV((const GV *)dstr);
3751         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3752             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3753                 AV * const ary = newAV();
3754                 av_push(ary, mg->mg_obj); /* takes the refcount */
3755                 mg->mg_obj = (SV *)ary;
3756             }
3757             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3758         }
3759         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3760       }
3761       mro_isa_changed_in(GvSTASH(dstr));
3762     }
3763     else if(mro_changes == 3) {
3764         HV * const stash = GvHV(dstr);
3765         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3766             mro_package_moved(
3767                 stash, old_stash,
3768                 (GV *)dstr, 0
3769             );
3770     }
3771     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3772     if (GvIO(dstr) && dtype == SVt_PVGV) {
3773         DEBUG_o(Perl_deb(aTHX_
3774                         "glob_assign_glob clearing PL_stashcache\n"));
3775         /* It's a cache. It will rebuild itself quite happily.
3776            It's a lot of effort to work out exactly which key (or keys)
3777            might be invalidated by the creation of the this file handle.
3778          */
3779         hv_clear(PL_stashcache);
3780     }
3781     return;
3782 }
3783
3784 static void
3785 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3786 {
3787     SV * const sref = SvRV(sstr);
3788     SV *dref;
3789     const int intro = GvINTRO(dstr);
3790     SV **location;
3791     U8 import_flag = 0;
3792     const U32 stype = SvTYPE(sref);
3793
3794     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3795
3796     if (intro) {
3797         GvINTRO_off(dstr);      /* one-shot flag */
3798         GvLINE(dstr) = CopLINE(PL_curcop);
3799         GvEGV(dstr) = MUTABLE_GV(dstr);
3800     }
3801     GvMULTI_on(dstr);
3802     switch (stype) {
3803     case SVt_PVCV:
3804         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3805         import_flag = GVf_IMPORTED_CV;
3806         goto common;
3807     case SVt_PVHV:
3808         location = (SV **) &GvHV(dstr);
3809         import_flag = GVf_IMPORTED_HV;
3810         goto common;
3811     case SVt_PVAV:
3812         location = (SV **) &GvAV(dstr);
3813         import_flag = GVf_IMPORTED_AV;
3814         goto common;
3815     case SVt_PVIO:
3816         location = (SV **) &GvIOp(dstr);
3817         goto common;
3818     case SVt_PVFM:
3819         location = (SV **) &GvFORM(dstr);
3820         goto common;
3821     default:
3822         location = &GvSV(dstr);
3823         import_flag = GVf_IMPORTED_SV;
3824     common:
3825         if (intro) {
3826             if (stype == SVt_PVCV) {
3827                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3828                 if (GvCVGEN(dstr)) {
3829                     SvREFCNT_dec(GvCV(dstr));
3830                     GvCV_set(dstr, NULL);
3831                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3832                 }
3833             }
3834             /* SAVEt_GVSLOT takes more room on the savestack and has more
3835                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3836                leave_scope needs access to the GV so it can reset method
3837                caches.  We must use SAVEt_GVSLOT whenever the type is
3838                SVt_PVCV, even if the stash is anonymous, as the stash may
3839                gain a name somehow before leave_scope. */
3840             if (stype == SVt_PVCV) {
3841                 /* There is no save_pushptrptrptr.  Creating it for this
3842                    one call site would be overkill.  So inline the ss add
3843                    routines here. */
3844                 dSS_ADD;
3845                 SS_ADD_PTR(dstr);
3846                 SS_ADD_PTR(location);
3847                 SS_ADD_PTR(SvREFCNT_inc(*location));
3848                 SS_ADD_UV(SAVEt_GVSLOT);
3849                 SS_ADD_END(4);
3850             }
3851             else SAVEGENERICSV(*location);
3852         }
3853         dref = *location;
3854         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3855             CV* const cv = MUTABLE_CV(*location);
3856             if (cv) {
3857                 if (!GvCVGEN((const GV *)dstr) &&
3858                     (CvROOT(cv) || CvXSUB(cv)) &&
3859                     /* redundant check that avoids creating the extra SV
3860                        most of the time: */
3861                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3862                     {
3863                         SV * const new_const_sv =
3864                             CvCONST((const CV *)sref)
3865                                  ? cv_const_sv((const CV *)sref)
3866                                  : NULL;
3867                         report_redefined_cv(
3868                            sv_2mortal(Perl_newSVpvf(aTHX_
3869                                 "%"HEKf"::%"HEKf,
3870                                 HEKfARG(
3871                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3872                                 ),
3873                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3874                            )),
3875                            cv,
3876                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3877                         );
3878                     }
3879                 if (!intro)
3880                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3881                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3882                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3883                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3884             }
3885             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3886             GvASSUMECV_on(dstr);
3887             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3888         }
3889         *location = SvREFCNT_inc_simple_NN(sref);
3890         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3891             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3892             GvFLAGS(dstr) |= import_flag;
3893         }
3894         if (stype == SVt_PVHV) {
3895             const char * const name = GvNAME((GV*)dstr);
3896             const STRLEN len = GvNAMELEN(dstr);
3897             if (
3898                 (
3899                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3900                 || (len == 1 && name[0] == ':')
3901                 )
3902              && (!dref || HvENAME_get(dref))
3903             ) {
3904                 mro_package_moved(
3905                     (HV *)sref, (HV *)dref,
3906                     (GV *)dstr, 0
3907                 );
3908             }
3909         }
3910         else if (
3911             stype == SVt_PVAV && sref != dref
3912          && strEQ(GvNAME((GV*)dstr), "ISA")
3913          /* The stash may have been detached from the symbol table, so
3914             check its name before doing anything. */
3915          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3916         ) {
3917             MAGIC *mg;
3918             MAGIC * const omg = dref && SvSMAGICAL(dref)
3919                                  ? mg_find(dref, PERL_MAGIC_isa)
3920                                  : NULL;
3921             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3922                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3923                     AV * const ary = newAV();
3924                     av_push(ary, mg->mg_obj); /* takes the refcount */
3925                     mg->mg_obj = (SV *)ary;
3926                 }
3927                 if (omg) {
3928                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3929                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3930                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3931                         while (items--)
3932                             av_push(
3933                              (AV *)mg->mg_obj,
3934                              SvREFCNT_inc_simple_NN(*svp++)
3935                             );
3936                     }
3937                     else
3938                         av_push(
3939                          (AV *)mg->mg_obj,
3940                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3941                         );
3942                 }
3943                 else
3944                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3945             }
3946             else
3947             {
3948                 sv_magic(
3949                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3950                 );
3951                 mg = mg_find(sref, PERL_MAGIC_isa);
3952             }
3953             /* Since the *ISA assignment could have affected more than
3954                one stash, don't call mro_isa_changed_in directly, but let
3955                magic_clearisa do it for us, as it already has the logic for
3956                dealing with globs vs arrays of globs. */
3957             assert(mg);
3958             Perl_magic_clearisa(aTHX_ NULL, mg);
3959         }
3960         else if (stype == SVt_PVIO) {
3961             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3962             /* It's a cache. It will rebuild itself quite happily.
3963                It's a lot of effort to work out exactly which key (or keys)
3964                might be invalidated by the creation of the this file handle.
3965             */
3966             hv_clear(PL_stashcache);
3967         }
3968         break;
3969     }
3970     if (!intro) SvREFCNT_dec(dref);
3971     if (SvTAINTED(sstr))
3972         SvTAINT(dstr);
3973     return;
3974 }
3975
3976 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
3977    hold is 0. */
3978 #if SV_COW_THRESHOLD
3979 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
3980 #else
3981 # define GE_COW_THRESHOLD(len)          1
3982 #endif
3983 #if SV_COWBUF_THRESHOLD
3984 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
3985 #else
3986 # define GE_COWBUF_THRESHOLD(len)       1
3987 #endif
3988
3989 void
3990 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
3991 {
3992     dVAR;
3993     U32 sflags;
3994     int dtype;
3995     svtype stype;
3996
3997     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3998
3999     if (sstr == dstr)
4000         return;
4001
4002     if (SvIS_FREED(dstr)) {
4003         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4004                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4005     }
4006     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4007     if (!sstr)
4008         sstr = &PL_sv_undef;
4009     if (SvIS_FREED(sstr)) {
4010         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4011                    (void*)sstr, (void*)dstr);
4012     }
4013     stype = SvTYPE(sstr);
4014     dtype = SvTYPE(dstr);
4015
4016     /* There's a lot of redundancy below but we're going for speed here */
4017
4018     switch (stype) {
4019     case SVt_NULL:
4020       undef_sstr:
4021         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4022             (void)SvOK_off(dstr);
4023             return;
4024         }
4025         break;
4026     case SVt_IV:
4027         if (SvIOK(sstr)) {
4028             switch (dtype) {
4029             case SVt_NULL:
4030                 sv_upgrade(dstr, SVt_IV);
4031                 break;
4032             case SVt_NV:
4033             case SVt_PV:
4034                 sv_upgrade(dstr, SVt_PVIV);
4035                 break;
4036             case SVt_PVGV:
4037             case SVt_PVLV:
4038                 goto end_of_first_switch;
4039             }
4040             (void)SvIOK_only(dstr);
4041             SvIV_set(dstr,  SvIVX(sstr));
4042             if (SvIsUV(sstr))
4043                 SvIsUV_on(dstr);
4044             /* SvTAINTED can only be true if the SV has taint magic, which in
4045                turn means that the SV type is PVMG (or greater). This is the
4046                case statement for SVt_IV, so this cannot be true (whatever gcov
4047                may say).  */
4048             assert(!SvTAINTED(sstr));
4049             return;
4050         }
4051         if (!SvROK(sstr))
4052             goto undef_sstr;
4053         if (dtype < SVt_PV && dtype != SVt_IV)
4054             sv_upgrade(dstr, SVt_IV);
4055         break;
4056
4057     case SVt_NV:
4058         if (SvNOK(sstr)) {
4059             switch (dtype) {
4060             case SVt_NULL:
4061             case SVt_IV:
4062                 sv_upgrade(dstr, SVt_NV);
4063                 break;
4064             case SVt_PV:
4065             case SVt_PVIV:
4066                 sv_upgrade(dstr, SVt_PVNV);
4067                 break;
4068             case SVt_PVGV:
4069             case SVt_PVLV:
4070                 goto end_of_first_switch;
4071             }
4072             SvNV_set(dstr, SvNVX(sstr));
4073             (void)SvNOK_only(dstr);
4074             /* SvTAINTED can only be true if the SV has taint magic, which in
4075                turn means that the SV type is PVMG (or greater). This is the
4076                case statement for SVt_NV, so this cannot be true (whatever gcov
4077                may say).  */
4078             assert(!SvTAINTED(sstr));
4079             return;
4080         }
4081         goto undef_sstr;
4082
4083     case SVt_PV:
4084         if (dtype < SVt_PV)
4085             sv_upgrade(dstr, SVt_PV);
4086         break;
4087     case SVt_PVIV:
4088         if (dtype < SVt_PVIV)
4089             sv_upgrade(dstr, SVt_PVIV);
4090         break;
4091     case SVt_PVNV:
4092         if (dtype < SVt_PVNV)
4093             sv_upgrade(dstr, SVt_PVNV);
4094         break;
4095     default:
4096         {
4097         const char * const type = sv_reftype(sstr,0);
4098         if (PL_op)
4099             /* diag_listed_as: Bizarre copy of %s */
4100             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4101         else
4102             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4103         }
4104         break;
4105
4106     case SVt_REGEXP:
4107       upgregexp:
4108         if (dtype < SVt_REGEXP)
4109         {
4110             if (dtype >= SVt_PV) {
4111                 SvPV_free(dstr);
4112                 SvPV_set(dstr, 0);
4113                 SvLEN_set(dstr, 0);
4114                 SvCUR_set(dstr, 0);
4115             }
4116             sv_upgrade(dstr, SVt_REGEXP);
4117         }
4118         break;
4119
4120         /* case SVt_DUMMY: */
4121     case SVt_PVLV:
4122     case SVt_PVGV:
4123     case SVt_PVMG:
4124         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4125             mg_get(sstr);
4126             if (SvTYPE(sstr) != stype)
4127                 stype = SvTYPE(sstr);
4128         }
4129         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4130                     glob_assign_glob(dstr, sstr, dtype);
4131                     return;
4132         }
4133         if (stype == SVt_PVLV)
4134         {
4135             if (isREGEXP(sstr)) goto upgregexp;
4136             SvUPGRADE(dstr, SVt_PVNV);
4137         }
4138         else
4139             SvUPGRADE(dstr, (svtype)stype);
4140     }
4141  end_of_first_switch:
4142
4143     /* dstr may have been upgraded.  */
4144     dtype = SvTYPE(dstr);
4145     sflags = SvFLAGS(sstr);
4146
4147     if (dtype == SVt_PVCV) {
4148         /* Assigning to a subroutine sets the prototype.  */
4149         if (SvOK(sstr)) {
4150             STRLEN len;
4151             const char *const ptr = SvPV_const(sstr, len);
4152
4153             SvGROW(dstr, len + 1);
4154             Copy(ptr, SvPVX(dstr), len + 1, char);
4155             SvCUR_set(dstr, len);
4156             SvPOK_only(dstr);
4157             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4158             CvAUTOLOAD_off(dstr);
4159         } else {
4160             SvOK_off(dstr);
4161         }
4162     }
4163     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4164         const char * const type = sv_reftype(dstr,0);
4165         if (PL_op)
4166             /* diag_listed_as: Cannot copy to %s */
4167             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4168         else
4169             Perl_croak(aTHX_ "Cannot copy to %s", type);
4170     } else if (sflags & SVf_ROK) {
4171         if (isGV_with_GP(dstr)
4172             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4173             sstr = SvRV(sstr);
4174             if (sstr == dstr) {
4175                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4176                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4177                 {
4178                     GvIMPORTED_on(dstr);
4179                 }
4180                 GvMULTI_on(dstr);
4181                 return;
4182             }
4183             glob_assign_glob(dstr, sstr, dtype);
4184             return;
4185         }
4186
4187         if (dtype >= SVt_PV) {
4188             if (isGV_with_GP(dstr)) {
4189                 glob_assign_ref(dstr, sstr);
4190                 return;
4191             }
4192             if (SvPVX_const(dstr)) {
4193                 SvPV_free(dstr);
4194                 SvLEN_set(dstr, 0);
4195                 SvCUR_set(dstr, 0);
4196             }
4197         }
4198         (void)SvOK_off(dstr);
4199         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4200         SvFLAGS(dstr) |= sflags & SVf_ROK;
4201         assert(!(sflags & SVp_NOK));
4202         assert(!(sflags & SVp_IOK));
4203         assert(!(sflags & SVf_NOK));
4204         assert(!(sflags & SVf_IOK));
4205     }
4206     else if (isGV_with_GP(dstr)) {
4207         if (!(sflags & SVf_OK)) {
4208             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4209                            "Undefined value assigned to typeglob");
4210         }
4211         else {
4212             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4213             if (dstr != (const SV *)gv) {
4214                 const char * const name = GvNAME((const GV *)dstr);
4215                 const STRLEN len = GvNAMELEN(dstr);
4216                 HV *old_stash = NULL;
4217                 bool reset_isa = FALSE;
4218                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4219                  || (len == 1 && name[0] == ':')) {
4220                     /* Set aside the old stash, so we can reset isa caches
4221                        on its subclasses. */
4222                     if((old_stash = GvHV(dstr))) {
4223                         /* Make sure we do not lose it early. */
4224                         SvREFCNT_inc_simple_void_NN(
4225                          sv_2mortal((SV *)old_stash)
4226                         );
4227                     }
4228                     reset_isa = TRUE;
4229                 }
4230
4231                 if (GvGP(dstr))
4232                     gp_free(MUTABLE_GV(dstr));
4233                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4234
4235                 if (reset_isa) {
4236                     HV * const stash = GvHV(dstr);
4237                     if(
4238                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4239                     )
4240                         mro_package_moved(
4241                          stash, old_stash,
4242                          (GV *)dstr, 0
4243                         );
4244                 }
4245             }
4246         }
4247     }
4248     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4249           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4250         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4251     }
4252     else if (sflags & SVp_POK) {
4253         bool isSwipe = 0;
4254         const STRLEN cur = SvCUR(sstr);
4255         const STRLEN len = SvLEN(sstr);
4256
4257         /*
4258          * Check to see if we can just swipe the string.  If so, it's a
4259          * possible small lose on short strings, but a big win on long ones.
4260          * It might even be a win on short strings if SvPVX_const(dstr)
4261          * has to be allocated and SvPVX_const(sstr) has to be freed.
4262          * Likewise if we can set up COW rather than doing an actual copy, we
4263          * drop to the else clause, as the swipe code and the COW setup code
4264          * have much in common.
4265          */
4266
4267         /* Whichever path we take through the next code, we want this true,
4268            and doing it now facilitates the COW check.  */
4269         (void)SvPOK_only(dstr);
4270
4271         if (
4272             /* If we're already COW then this clause is not true, and if COW
4273                is allowed then we drop down to the else and make dest COW 
4274                with us.  If caller hasn't said that we're allowed to COW
4275                shared hash keys then we don't do the COW setup, even if the
4276                source scalar is a shared hash key scalar.  */
4277             (((flags & SV_COW_SHARED_HASH_KEYS)
4278                ? !(sflags & SVf_IsCOW)
4279 #ifdef PERL_NEW_COPY_ON_WRITE
4280                 || (len &&
4281                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4282                    /* If this is a regular (non-hek) COW, only so many COW
4283                       "copies" are possible. */
4284                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4285 #endif
4286                : 1 /* If making a COW copy is forbidden then the behaviour we
4287                        desire is as if the source SV isn't actually already
4288                        COW, even if it is.  So we act as if the source flags
4289                        are not COW, rather than actually testing them.  */
4290               )
4291 #ifndef PERL_ANY_COW
4292              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4293                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4294                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4295                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4296                 but in turn, it's somewhat dead code, never expected to go
4297                 live, but more kept as a placeholder on how to do it better
4298                 in a newer implementation.  */
4299              /* If we are COW and dstr is a suitable target then we drop down
4300                 into the else and make dest a COW of us.  */
4301              || (SvFLAGS(dstr) & SVf_BREAK)
4302 #endif
4303              )
4304             &&
4305             !(isSwipe =
4306 #ifdef PERL_NEW_COPY_ON_WRITE
4307                                 /* slated for free anyway (and not COW)? */
4308                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4309 #else
4310                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4311 #endif
4312                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4313                  (!(flags & SV_NOSTEAL)) &&
4314                                         /* and we're allowed to steal temps */
4315                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4316                  len)             /* and really is a string */
4317 #ifdef PERL_ANY_COW
4318             && ((flags & SV_COW_SHARED_HASH_KEYS)
4319                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4320 # ifdef PERL_OLD_COPY_ON_WRITE
4321                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4322                      && SvTYPE(sstr) >= SVt_PVIV
4323 # else
4324                      && !(SvFLAGS(dstr) & SVf_BREAK)
4325                      && !(sflags & SVf_IsCOW)
4326                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4327                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4328 # endif
4329                     ))
4330                 : 1)
4331 #endif
4332             ) {
4333             /* Failed the swipe test, and it's not a shared hash key either.
4334                Have to copy the string.  */
4335             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4336             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4337             SvCUR_set(dstr, cur);
4338             *SvEND(dstr) = '\0';
4339         } else {
4340             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4341                be true in here.  */
4342             /* Either it's a shared hash key, or it's suitable for
4343                copy-on-write or we can swipe the string.  */
4344             if (DEBUG_C_TEST) {
4345                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4346                 sv_dump(sstr);
4347                 sv_dump(dstr);
4348             }
4349 #ifdef PERL_ANY_COW
4350             if (!isSwipe) {
4351                 if (!(sflags & SVf_IsCOW)) {
4352                     SvIsCOW_on(sstr);
4353 # ifdef PERL_OLD_COPY_ON_WRITE
4354                     /* Make the source SV into a loop of 1.
4355                        (about to become 2) */
4356                     SV_COW_NEXT_SV_SET(sstr, sstr);
4357 # else
4358                     CowREFCNT(sstr) = 0;
4359 # endif
4360                 }
4361             }
4362 #endif
4363             /* Initial code is common.  */
4364             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4365                 SvPV_free(dstr);
4366             }
4367
4368             if (!isSwipe) {
4369                 /* making another shared SV.  */
4370 #ifdef PERL_ANY_COW
4371                 if (len) {
4372 # ifdef PERL_OLD_COPY_ON_WRITE
4373                     assert (SvTYPE(dstr) >= SVt_PVIV);
4374                     /* SvIsCOW_normal */
4375                     /* splice us in between source and next-after-source.  */
4376                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4377                     SV_COW_NEXT_SV_SET(sstr, dstr);
4378 # else
4379                     CowREFCNT(sstr)++;
4380 # endif
4381                     SvPV_set(dstr, SvPVX_mutable(sstr));
4382                 } else
4383 #endif
4384                 {
4385                     /* SvIsCOW_shared_hash */
4386                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4387                                           "Copy on write: Sharing hash\n"));
4388
4389                     assert (SvTYPE(dstr) >= SVt_PV);
4390                     SvPV_set(dstr,
4391                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4392                 }
4393                 SvLEN_set(dstr, len);
4394                 SvCUR_set(dstr, cur);
4395                 SvIsCOW_on(dstr);
4396             }
4397             else
4398                 {       /* Passes the swipe test.  */
4399                 SvPV_set(dstr, SvPVX_mutable(sstr));
4400                 SvLEN_set(dstr, SvLEN(sstr));
4401                 SvCUR_set(dstr, SvCUR(sstr));
4402
4403                 SvTEMP_off(dstr);
4404                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4405                 SvPV_set(sstr, NULL);
4406                 SvLEN_set(sstr, 0);
4407                 SvCUR_set(sstr, 0);
4408                 SvTEMP_off(sstr);
4409             }
4410         }
4411         if (sflags & SVp_NOK) {
4412             SvNV_set(dstr, SvNVX(sstr));
4413         }
4414         if (sflags & SVp_IOK) {
4415             SvIV_set(dstr, SvIVX(sstr));
4416             /* Must do this otherwise some other overloaded use of 0x80000000
4417                gets confused. I guess SVpbm_VALID */
4418             if (sflags & SVf_IVisUV)
4419                 SvIsUV_on(dstr);
4420         }
4421         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4422         {
4423             const MAGIC * const smg = SvVSTRING_mg(sstr);
4424             if (smg) {
4425                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4426                          smg->mg_ptr, smg->mg_len);
4427                 SvRMAGICAL_on(dstr);
4428             }
4429         }
4430     }
4431     else if (sflags & (SVp_IOK|SVp_NOK)) {
4432         (void)SvOK_off(dstr);
4433         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4434         if (sflags & SVp_IOK) {
4435             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4436             SvIV_set(dstr, SvIVX(sstr));
4437         }
4438         if (sflags & SVp_NOK) {
4439             SvNV_set(dstr, SvNVX(sstr));
4440         }
4441     }
4442     else {
4443         if (isGV_with_GP(sstr)) {
4444             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4445         }
4446         else
4447             (void)SvOK_off(dstr);
4448     }
4449     if (SvTAINTED(sstr))
4450         SvTAINT(dstr);
4451 }
4452
4453 /*
4454 =for apidoc sv_setsv_mg
4455
4456 Like C<sv_setsv>, but also handles 'set' magic.
4457
4458 =cut
4459 */
4460
4461 void
4462 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4463 {
4464     PERL_ARGS_ASSERT_SV_SETSV_MG;
4465
4466     sv_setsv(dstr,sstr);
4467     SvSETMAGIC(dstr);
4468 }
4469
4470 #ifdef PERL_ANY_COW
4471 # ifdef PERL_OLD_COPY_ON_WRITE
4472 #  define SVt_COW SVt_PVIV
4473 # else
4474 #  define SVt_COW SVt_PV
4475 # endif
4476 SV *
4477 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4478 {
4479     STRLEN cur = SvCUR(sstr);
4480     STRLEN len = SvLEN(sstr);
4481     char *new_pv;
4482
4483     PERL_ARGS_ASSERT_SV_SETSV_COW;
4484
4485     if (DEBUG_C_TEST) {
4486         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4487                       (void*)sstr, (void*)dstr);
4488         sv_dump(sstr);
4489         if (dstr)
4490                     sv_dump(dstr);
4491     }
4492
4493     if (dstr) {
4494         if (SvTHINKFIRST(dstr))
4495             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4496         else if (SvPVX_const(dstr))
4497             Safefree(SvPVX_mutable(dstr));
4498     }
4499     else
4500         new_SV(dstr);
4501     SvUPGRADE(dstr, SVt_COW);
4502
4503     assert (SvPOK(sstr));
4504     assert (SvPOKp(sstr));
4505 # ifdef PERL_OLD_COPY_ON_WRITE
4506     assert (!SvIOK(sstr));
4507     assert (!SvIOKp(sstr));
4508     assert (!SvNOK(sstr));
4509     assert (!SvNOKp(sstr));
4510 # endif
4511
4512     if (SvIsCOW(sstr)) {
4513
4514         if (SvLEN(sstr) == 0) {
4515             /* source is a COW shared hash key.  */
4516             DEBUG_C(PerlIO_printf(Perl_debug_log,
4517                                   "Fast copy on write: Sharing hash\n"));
4518             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4519             goto common_exit;
4520         }
4521 # ifdef PERL_OLD_COPY_ON_WRITE
4522         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4523 # else
4524         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4525         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4526 # endif
4527     } else {
4528         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4529         SvUPGRADE(sstr, SVt_COW);
4530         SvIsCOW_on(sstr);
4531         DEBUG_C(PerlIO_printf(Perl_debug_log,
4532                               "Fast copy on write: Converting sstr to COW\n"));
4533 # ifdef PERL_OLD_COPY_ON_WRITE
4534         SV_COW_NEXT_SV_SET(dstr, sstr);
4535 # else
4536         CowREFCNT(sstr) = 0;    
4537 # endif
4538     }
4539 # ifdef PERL_OLD_COPY_ON_WRITE
4540     SV_COW_NEXT_SV_SET(sstr, dstr);
4541 # else
4542     CowREFCNT(sstr)++;  
4543 # endif
4544     new_pv = SvPVX_mutable(sstr);
4545
4546   common_exit:
4547     SvPV_set(dstr, new_pv);
4548     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4549     if (SvUTF8(sstr))
4550         SvUTF8_on(dstr);
4551     SvLEN_set(dstr, len);
4552     SvCUR_set(dstr, cur);
4553     if (DEBUG_C_TEST) {
4554         sv_dump(dstr);
4555     }
4556     return dstr;
4557 }
4558 #endif
4559
4560 /*
4561 =for apidoc sv_setpvn
4562
4563 Copies a string into an SV.  The C<len> parameter indicates the number of
4564 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4565 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4566
4567 =cut
4568 */
4569
4570 void
4571 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4572 {
4573     dVAR;
4574     char *dptr;
4575
4576     PERL_ARGS_ASSERT_SV_SETPVN;
4577
4578     SV_CHECK_THINKFIRST_COW_DROP(sv);
4579     if (!ptr) {
4580         (void)SvOK_off(sv);
4581         return;
4582     }
4583     else {
4584         /* len is STRLEN which is unsigned, need to copy to signed */
4585         const IV iv = len;
4586         if (iv < 0)
4587             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4588                        IVdf, iv);
4589     }
4590     SvUPGRADE(sv, SVt_PV);
4591
4592     dptr = SvGROW(sv, len + 1);
4593     Move(ptr,dptr,len,char);
4594     dptr[len] = '\0';
4595     SvCUR_set(sv, len);
4596     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4597     SvTAINT(sv);
4598     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4599 }
4600
4601 /*
4602 =for apidoc sv_setpvn_mg
4603
4604 Like C<sv_setpvn>, but also handles 'set' magic.
4605
4606 =cut
4607 */
4608
4609 void
4610 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4611 {
4612     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4613
4614     sv_setpvn(sv,ptr,len);
4615     SvSETMAGIC(sv);
4616 }
4617
4618 /*
4619 =for apidoc sv_setpv
4620
4621 Copies a string into an SV.  The string must be null-terminated.  Does not
4622 handle 'set' magic.  See C<sv_setpv_mg>.
4623
4624 =cut
4625 */
4626
4627 void
4628 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4629 {
4630     dVAR;
4631     STRLEN len;
4632
4633     PERL_ARGS_ASSERT_SV_SETPV;
4634
4635     SV_CHECK_THINKFIRST_COW_DROP(sv);
4636     if (!ptr) {
4637         (void)SvOK_off(sv);
4638         return;
4639     }
4640     len = strlen(ptr);
4641     SvUPGRADE(sv, SVt_PV);
4642
4643     SvGROW(sv, len + 1);
4644     Move(ptr,SvPVX(sv),len+1,char);
4645     SvCUR_set(sv, len);
4646     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4647     SvTAINT(sv);
4648     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4649 }
4650
4651 /*
4652 =for apidoc sv_setpv_mg
4653
4654 Like C<sv_setpv>, but also handles 'set' magic.
4655
4656 =cut
4657 */
4658
4659 void
4660 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4661 {
4662     PERL_ARGS_ASSERT_SV_SETPV_MG;
4663
4664     sv_setpv(sv,ptr);
4665     SvSETMAGIC(sv);
4666 }
4667
4668 void
4669 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4670 {
4671     dVAR;
4672
4673     PERL_ARGS_ASSERT_SV_SETHEK;
4674
4675     if (!hek) {
4676         return;
4677     }
4678
4679     if (HEK_LEN(hek) == HEf_SVKEY) {
4680         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4681         return;
4682     } else {
4683         const int flags = HEK_FLAGS(hek);
4684         if (flags & HVhek_WASUTF8) {
4685             STRLEN utf8_len = HEK_LEN(hek);
4686             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4687             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4688             SvUTF8_on(sv);
4689             return;
4690         } else if (flags & HVhek_UNSHARED) {
4691             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4692             if (HEK_UTF8(hek))
4693                 SvUTF8_on(sv);
4694             else SvUTF8_off(sv);
4695             return;
4696         }
4697         {
4698             SV_CHECK_THINKFIRST_COW_DROP(sv);
4699             SvUPGRADE(sv, SVt_PV);
4700             Safefree(SvPVX(sv));
4701             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4702             SvCUR_set(sv, HEK_LEN(hek));
4703             SvLEN_set(sv, 0);
4704             SvIsCOW_on(sv);
4705             SvPOK_on(sv);
4706             if (HEK_UTF8(hek))
4707                 SvUTF8_on(sv);
4708             else SvUTF8_off(sv);
4709             return;
4710         }
4711     }
4712 }
4713
4714
4715 /*
4716 =for apidoc sv_usepvn_flags
4717
4718 Tells an SV to use C<ptr> to find its string value.  Normally the
4719 string is stored inside the SV but sv_usepvn allows the SV to use an
4720 outside string.  The C<ptr> should point to memory that was allocated
4721 by C<malloc>.  It must be the start of a mallocked block
4722 of memory, and not a pointer to the middle of it.  The
4723 string length, C<len>, must be supplied.  By default
4724 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4725 so that pointer should not be freed or used by the programmer after
4726 giving it to sv_usepvn, and neither should any pointers from "behind"
4727 that pointer (e.g. ptr + 1) be used.
4728
4729 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4730 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4731 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4732 C<len>, and already meets the requirements for storing in C<SvPVX>).
4733
4734 =cut
4735 */
4736
4737 void
4738 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4739 {
4740     dVAR;
4741     STRLEN allocate;
4742
4743     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4744
4745     SV_CHECK_THINKFIRST_COW_DROP(sv);
4746     SvUPGRADE(sv, SVt_PV);
4747     if (!ptr) {
4748         (void)SvOK_off(sv);
4749         if (flags & SV_SMAGIC)
4750             SvSETMAGIC(sv);
4751         return;
4752     }
4753     if (SvPVX_const(sv))
4754         SvPV_free(sv);
4755
4756 #ifdef DEBUGGING
4757     if (flags & SV_HAS_TRAILING_NUL)
4758         assert(ptr[len] == '\0');
4759 #endif
4760
4761     allocate = (flags & SV_HAS_TRAILING_NUL)
4762         ? len + 1 :
4763 #ifdef Perl_safesysmalloc_size
4764         len + 1;
4765 #else 
4766         PERL_STRLEN_ROUNDUP(len + 1);
4767 #endif
4768     if (flags & SV_HAS_TRAILING_NUL) {
4769         /* It's long enough - do nothing.
4770            Specifically Perl_newCONSTSUB is relying on this.  */
4771     } else {
4772 #ifdef DEBUGGING
4773         /* Force a move to shake out bugs in callers.  */
4774         char *new_ptr = (char*)safemalloc(allocate);
4775         Copy(ptr, new_ptr, len, char);
4776         PoisonFree(ptr,len,char);
4777         Safefree(ptr);
4778         ptr = new_ptr;
4779 #else
4780         ptr = (char*) saferealloc (ptr, allocate);
4781 #endif
4782     }
4783 #ifdef Perl_safesysmalloc_size
4784     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4785 #else
4786     SvLEN_set(sv, allocate);
4787 #endif
4788     SvCUR_set(sv, len);
4789     SvPV_set(sv, ptr);
4790     if (!(flags & SV_HAS_TRAILING_NUL)) {
4791         ptr[len] = '\0';
4792     }
4793     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4794     SvTAINT(sv);
4795     if (flags & SV_SMAGIC)
4796         SvSETMAGIC(sv);
4797 }
4798
4799 #ifdef PERL_OLD_COPY_ON_WRITE
4800 /* Need to do this *after* making the SV normal, as we need the buffer
4801    pointer to remain valid until after we've copied it.  If we let go too early,
4802    another thread could invalidate it by unsharing last of the same hash key
4803    (which it can do by means other than releasing copy-on-write Svs)
4804    or by changing the other copy-on-write SVs in the loop.  */
4805 STATIC void
4806 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4807 {
4808     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4809
4810     { /* this SV was SvIsCOW_normal(sv) */
4811          /* we need to find the SV pointing to us.  */
4812         SV *current = SV_COW_NEXT_SV(after);
4813
4814         if (current == sv) {
4815             /* The SV we point to points back to us (there were only two of us
4816                in the loop.)
4817                Hence other SV is no longer copy on write either.  */
4818             SvIsCOW_off(after);
4819         } else {
4820             /* We need to follow the pointers around the loop.  */
4821             SV *next;
4822             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4823                 assert (next);
4824                 current = next;
4825                  /* don't loop forever if the structure is bust, and we have
4826                     a pointer into a closed loop.  */
4827                 assert (current != after);
4828                 assert (SvPVX_const(current) == pvx);
4829             }
4830             /* Make the SV before us point to the SV after us.  */
4831             SV_COW_NEXT_SV_SET(current, after);
4832         }
4833     }
4834 }
4835 #endif
4836 /*
4837 =for apidoc sv_force_normal_flags
4838
4839 Undo various types of fakery on an SV, where fakery means
4840 "more than" a string: if the PV is a shared string, make
4841 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4842 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4843 we do the copy, and is also used locally; if this is a
4844 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4845 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4846 SvPOK_off rather than making a copy.  (Used where this
4847 scalar is about to be set to some other value.)  In addition,
4848 the C<flags> parameter gets passed to C<sv_unref_flags()>
4849 when unreffing.  C<sv_force_normal> calls this function
4850 with flags set to 0.
4851
4852 =cut
4853 */
4854
4855 void
4856 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4857 {
4858     dVAR;
4859
4860     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4861
4862 #ifdef PERL_ANY_COW
4863     if (SvREADONLY(sv)) {
4864             Perl_croak_no_modify();
4865     }
4866     else if (SvIsCOW(sv)) {
4867         const char * const pvx = SvPVX_const(sv);
4868         const STRLEN len = SvLEN(sv);
4869         const STRLEN cur = SvCUR(sv);
4870 # ifdef PERL_OLD_COPY_ON_WRITE
4871         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4872            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4873            we'll fail an assertion.  */
4874         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4875 # endif
4876
4877         if (DEBUG_C_TEST) {
4878                 PerlIO_printf(Perl_debug_log,
4879                               "Copy on write: Force normal %ld\n",
4880                               (long) flags);
4881                 sv_dump(sv);
4882         }
4883         SvIsCOW_off(sv);
4884 # ifdef PERL_NEW_COPY_ON_WRITE
4885         if (len && CowREFCNT(sv) == 0)
4886             /* We own the buffer ourselves. */
4887             NOOP;
4888         else
4889 # endif
4890         {
4891                 
4892             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4893 # ifdef PERL_NEW_COPY_ON_WRITE
4894             /* Must do this first, since the macro uses SvPVX. */
4895             if (len) CowREFCNT(sv)--;
4896 # endif
4897             SvPV_set(sv, NULL);
4898             SvLEN_set(sv, 0);
4899             if (flags & SV_COW_DROP_PV) {
4900                 /* OK, so we don't need to copy our buffer.  */
4901                 SvPOK_off(sv);
4902             } else {
4903                 SvGROW(sv, cur + 1);
4904                 Move(pvx,SvPVX(sv),cur,char);
4905                 SvCUR_set(sv, cur);
4906                 *SvEND(sv) = '\0';
4907             }
4908             if (len) {
4909 # ifdef PERL_OLD_COPY_ON_WRITE
4910                 sv_release_COW(sv, pvx, next);
4911 # endif
4912             } else {
4913                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4914             }
4915             if (DEBUG_C_TEST) {
4916                 sv_dump(sv);
4917             }
4918         }
4919     }
4920 #else
4921     if (SvREADONLY(sv)) {
4922             Perl_croak_no_modify();
4923     }
4924     else
4925         if (SvIsCOW(sv)) {
4926             const char * const pvx = SvPVX_const(sv);
4927             const STRLEN len = SvCUR(sv);
4928             SvIsCOW_off(sv);
4929             SvPV_set(sv, NULL);
4930             SvLEN_set(sv, 0);
4931             if (flags & SV_COW_DROP_PV) {
4932                 /* OK, so we don't need to copy our buffer.  */
4933                 SvPOK_off(sv);
4934             } else {
4935                 SvGROW(sv, len + 1);
4936                 Move(pvx,SvPVX(sv),len,char);
4937                 *SvEND(sv) = '\0';
4938             }
4939             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4940         }
4941 #endif
4942     if (SvROK(sv))
4943         sv_unref_flags(sv, flags);
4944     else if (SvFAKE(sv) && isGV_with_GP(sv))
4945         sv_unglob(sv, flags);
4946     else if (SvFAKE(sv) && isREGEXP(sv)) {
4947         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4948            to sv_unglob. We only need it here, so inline it.  */
4949         const bool islv = SvTYPE(sv) == SVt_PVLV;
4950         const svtype new_type =
4951           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4952         SV *const temp = newSV_type(new_type);
4953         regexp *const temp_p = ReANY((REGEXP *)sv);
4954
4955         if (new_type == SVt_PVMG) {
4956             SvMAGIC_set(temp, SvMAGIC(sv));
4957             SvMAGIC_set(sv, NULL);
4958             SvSTASH_set(temp, SvSTASH(sv));
4959             SvSTASH_set(sv, NULL);
4960         }
4961         if (!islv) SvCUR_set(temp, SvCUR(sv));
4962         /* Remember that SvPVX is in the head, not the body.  But
4963            RX_WRAPPED is in the body. */
4964         assert(ReANY((REGEXP *)sv)->mother_re);
4965         /* Their buffer is already owned by someone else. */
4966         if (flags & SV_COW_DROP_PV) {
4967             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
4968                zeroed body.  For SVt_PVLV, it should have been set to 0
4969                before turning into a regexp. */
4970             assert(!SvLEN(islv ? sv : temp));
4971             sv->sv_u.svu_pv = 0;
4972         }
4973         else {
4974             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
4975             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
4976             SvPOK_on(sv);
4977         }
4978
4979         /* Now swap the rest of the bodies. */
4980
4981         SvFAKE_off(sv);
4982         if (!islv) {
4983             SvFLAGS(sv) &= ~SVTYPEMASK;
4984             SvFLAGS(sv) |= new_type;
4985             SvANY(sv) = SvANY(temp);
4986         }
4987
4988         SvFLAGS(temp) &= ~(SVTYPEMASK);
4989         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4990         SvANY(temp) = temp_p;
4991         temp->sv_u.svu_rx = (regexp *)temp_p;
4992
4993         SvREFCNT_dec_NN(temp);
4994     }
4995     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
4996 }
4997
4998 /*
4999 =for apidoc sv_chop
5000
5001 Efficient removal of characters from the beginning of the string buffer.
5002 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5003 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5004 character of the adjusted string.  Uses the "OOK hack".  On return, only
5005 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5006
5007 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5008 refer to the same chunk of data.
5009
5010 The unfortunate similarity of this function's name to that of Perl's C<chop>
5011 operator is strictly coincidental.  This function works from the left;
5012 C<chop> works from the right.
5013
5014 =cut
5015 */
5016
5017 void
5018 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5019 {
5020     STRLEN delta;
5021     STRLEN old_delta;
5022     U8 *p;
5023 #ifdef DEBUGGING
5024     const U8 *evacp;
5025     STRLEN evacn;
5026 #endif
5027     STRLEN max_delta;
5028
5029     PERL_ARGS_ASSERT_SV_CHOP;
5030
5031     if (!ptr || !SvPOKp(sv))
5032         return;
5033     delta = ptr - SvPVX_const(sv);
5034     if (!delta) {
5035         /* Nothing to do.  */
5036         return;
5037     }
5038     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5039     if (delta > max_delta)
5040         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5041                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5042     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5043     SV_CHECK_THINKFIRST(sv);
5044     SvPOK_only_UTF8(sv);
5045
5046     if (!SvOOK(sv)) {
5047         if (!SvLEN(sv)) { /* make copy of shared string */
5048             const char *pvx = SvPVX_const(sv);
5049             const STRLEN len = SvCUR(sv);
5050             SvGROW(sv, len + 1);
5051             Move(pvx,SvPVX(sv),len,char);
5052             *SvEND(sv) = '\0';
5053         }
5054         SvOOK_on(sv);
5055         old_delta = 0;
5056     } else {
5057         SvOOK_offset(sv, old_delta);
5058     }
5059     SvLEN_set(sv, SvLEN(sv) - delta);
5060     SvCUR_set(sv, SvCUR(sv) - delta);
5061     SvPV_set(sv, SvPVX(sv) + delta);
5062
5063     p = (U8 *)SvPVX_const(sv);
5064
5065 #ifdef DEBUGGING
5066     /* how many bytes were evacuated?  we will fill them with sentinel
5067        bytes, except for the part holding the new offset of course. */
5068     evacn = delta;
5069     if (old_delta)
5070         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5071     assert(evacn);
5072     assert(evacn <= delta + old_delta);
5073     evacp = p - evacn;
5074 #endif
5075
5076     delta += old_delta;
5077     assert(delta);
5078     if (delta < 0x100) {
5079         *--p = (U8) delta;
5080     } else {
5081         *--p = 0;
5082         p -= sizeof(STRLEN);
5083         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5084     }
5085
5086 #ifdef DEBUGGING
5087     /* Fill the preceding buffer with sentinals to verify that no-one is
5088        using it.  */
5089     while (p > evacp) {
5090         --p;
5091         *p = (U8)PTR2UV(p);
5092     }
5093 #endif
5094 }
5095
5096 /*
5097 =for apidoc sv_catpvn
5098
5099 Concatenates the string onto the end of the string which is in the SV.  The
5100 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5101 status set, then the bytes appended should be valid UTF-8.
5102 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5103
5104 =for apidoc sv_catpvn_flags
5105
5106 Concatenates the string onto the end of the string which is in the SV.  The
5107 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5108 status set, then the bytes appended should be valid UTF-8.
5109 If C<flags> has the C<SV_SMAGIC> bit set, will
5110 C<mg_set> on C<dsv> afterwards if appropriate.
5111 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5112 in terms of this function.
5113
5114 =cut
5115 */
5116
5117 void
5118 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5119 {
5120     dVAR;
5121     STRLEN dlen;
5122     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5123
5124     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5125     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5126
5127     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5128       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5129          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5130          dlen = SvCUR(dsv);
5131       }
5132       else SvGROW(dsv, dlen + slen + 1);
5133       if (sstr == dstr)
5134         sstr = SvPVX_const(dsv);
5135       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5136       SvCUR_set(dsv, SvCUR(dsv) + slen);
5137     }
5138     else {
5139         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5140         const char * const send = sstr + slen;
5141         U8 *d;
5142
5143         /* Something this code does not account for, which I think is
5144            impossible; it would require the same pv to be treated as
5145            bytes *and* utf8, which would indicate a bug elsewhere. */
5146         assert(sstr != dstr);
5147
5148         SvGROW(dsv, dlen + slen * 2 + 1);
5149         d = (U8 *)SvPVX(dsv) + dlen;
5150
5151         while (sstr < send) {
5152             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5153             if (UNI_IS_INVARIANT(uv))
5154                 *d++ = (U8)UTF_TO_NATIVE(uv);
5155             else {
5156                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5157                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5158             }
5159         }
5160         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5161     }
5162     *SvEND(dsv) = '\0';
5163     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5164     SvTAINT(dsv);
5165     if (flags & SV_SMAGIC)
5166         SvSETMAGIC(dsv);
5167 }
5168
5169 /*
5170 =for apidoc sv_catsv
5171
5172 Concatenates the string from SV C<ssv> onto the end of the string in SV
5173 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5174 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5175 C<sv_catsv_nomg>.
5176
5177 =for apidoc sv_catsv_flags
5178
5179 Concatenates the string from SV C<ssv> onto the end of the string in SV
5180 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5181 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5182 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5183 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5184 and C<sv_catsv_mg> are implemented in terms of this function.
5185
5186 =cut */
5187
5188 void
5189 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5190 {
5191     dVAR;
5192  
5193     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5194
5195     if (ssv) {
5196         STRLEN slen;
5197         const char *spv = SvPV_flags_const(ssv, slen, flags);
5198         if (spv) {
5199             if (flags & SV_GMAGIC)
5200                 SvGETMAGIC(dsv);
5201             sv_catpvn_flags(dsv, spv, slen,
5202                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5203             if (flags & SV_SMAGIC)
5204                 SvSETMAGIC(dsv);
5205         }
5206     }
5207 }
5208
5209 /*
5210 =for apidoc sv_catpv
5211
5212 Concatenates the string onto the end of the string which is in the SV.
5213 If the SV has the UTF-8 status set, then the bytes appended should be
5214 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5215
5216 =cut */
5217
5218 void
5219 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5220 {
5221     dVAR;
5222     STRLEN len;
5223     STRLEN tlen;
5224     char *junk;
5225
5226     PERL_ARGS_ASSERT_SV_CATPV;
5227
5228     if (!ptr)
5229         return;
5230     junk = SvPV_force(sv, tlen);
5231     len = strlen(ptr);
5232     SvGROW(sv, tlen + len + 1);
5233     if (ptr == junk)
5234         ptr = SvPVX_const(sv);
5235     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5236     SvCUR_set(sv, SvCUR(sv) + len);
5237     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5238     SvTAINT(sv);
5239 }
5240
5241 /*
5242 =for apidoc sv_catpv_flags
5243
5244 Concatenates the string onto the end of the string which is in the SV.
5245 If the SV has the UTF-8 status set, then the bytes appended should
5246 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5247 on the modified SV if appropriate.
5248
5249 =cut
5250 */
5251
5252 void
5253 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5254 {
5255     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5256     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5257 }
5258
5259 /*
5260 =for apidoc sv_catpv_mg
5261
5262 Like C<sv_catpv>, but also handles 'set' magic.
5263
5264 =cut
5265 */
5266
5267 void
5268 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5269 {
5270     PERL_ARGS_ASSERT_SV_CATPV_MG;
5271
5272     sv_catpv(sv,ptr);
5273     SvSETMAGIC(sv);
5274 }
5275
5276 /*
5277 =for apidoc newSV
5278
5279 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5280 bytes of preallocated string space the SV should have.  An extra byte for a
5281 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5282 space is allocated.)  The reference count for the new SV is set to 1.
5283
5284 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5285 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5286 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5287 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5288 modules supporting older perls.
5289
5290 =cut
5291 */
5292
5293 SV *
5294 Perl_newSV(pTHX_ const STRLEN len)
5295 {
5296     dVAR;
5297     SV *sv;
5298
5299     new_SV(sv);
5300     if (len) {
5301         sv_upgrade(sv, SVt_PV);
5302         SvGROW(sv, len + 1);
5303     }
5304     return sv;
5305 }
5306 /*
5307 =for apidoc sv_magicext
5308
5309 Adds magic to an SV, upgrading it if necessary.  Applies the
5310 supplied vtable and returns a pointer to the magic added.
5311
5312 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5313 In particular, you can add magic to SvREADONLY SVs, and add more than
5314 one instance of the same 'how'.
5315
5316 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5317 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5318 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5319 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5320
5321 (This is now used as a subroutine by C<sv_magic>.)
5322
5323 =cut
5324 */
5325 MAGIC * 
5326 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5327                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5328 {
5329     dVAR;
5330     MAGIC* mg;
5331
5332     PERL_ARGS_ASSERT_SV_MAGICEXT;
5333
5334     SvUPGRADE(sv, SVt_PVMG);
5335     Newxz(mg, 1, MAGIC);
5336     mg->mg_moremagic = SvMAGIC(sv);
5337     SvMAGIC_set(sv, mg);
5338
5339     /* Sometimes a magic contains a reference loop, where the sv and
5340        object refer to each other.  To prevent a reference loop that
5341        would prevent such objects being freed, we look for such loops
5342        and if we find one we avoid incrementing the object refcount.
5343
5344        Note we cannot do this to avoid self-tie loops as intervening RV must
5345        have its REFCNT incremented to keep it in existence.
5346
5347     */
5348     if (!obj || obj == sv ||
5349         how == PERL_MAGIC_arylen ||
5350         how == PERL_MAGIC_symtab ||
5351         (SvTYPE(obj) == SVt_PVGV &&
5352             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5353              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5354              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5355     {
5356         mg->mg_obj = obj;
5357     }
5358     else {
5359         mg->mg_obj = SvREFCNT_inc_simple(obj);
5360         mg->mg_flags |= MGf_REFCOUNTED;
5361     }
5362
5363     /* Normal self-ties simply pass a null object, and instead of
5364        using mg_obj directly, use the SvTIED_obj macro to produce a
5365        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5366        with an RV obj pointing to the glob containing the PVIO.  In
5367        this case, to avoid a reference loop, we need to weaken the
5368        reference.
5369     */
5370
5371     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5372         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5373     {
5374       sv_rvweaken(obj);
5375     }
5376
5377     mg->mg_type = how;
5378     mg->mg_len = namlen;
5379     if (name) {
5380         if (namlen > 0)
5381             mg->mg_ptr = savepvn(name, namlen);
5382         else if (namlen == HEf_SVKEY) {
5383             /* Yes, this is casting away const. This is only for the case of
5384                HEf_SVKEY. I think we need to document this aberation of the
5385                constness of the API, rather than making name non-const, as
5386                that change propagating outwards a long way.  */
5387             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5388         } else
5389             mg->mg_ptr = (char *) name;
5390     }
5391     mg->mg_virtual = (MGVTBL *) vtable;
5392
5393     mg_magical(sv);
5394     return mg;
5395 }
5396
5397 /*
5398 =for apidoc sv_magic
5399
5400 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5401 necessary, then adds a new magic item of type C<how> to the head of the
5402 magic list.
5403
5404 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5405 handling of the C<name> and C<namlen> arguments.
5406
5407 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5408 to add more than one instance of the same 'how'.
5409
5410 =cut
5411 */
5412
5413 void
5414 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5415              const char *const name, const I32 namlen)
5416 {
5417     dVAR;
5418     const MGVTBL *vtable;
5419     MAGIC* mg;
5420     unsigned int flags;
5421     unsigned int vtable_index;
5422
5423     PERL_ARGS_ASSERT_SV_MAGIC;
5424
5425     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5426         || ((flags = PL_magic_data[how]),
5427             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5428             > magic_vtable_max))
5429         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5430
5431     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5432        Useful for attaching extension internal data to perl vars.
5433        Note that multiple extensions may clash if magical scalars
5434        etc holding private data from one are passed to another. */
5435
5436     vtable = (vtable_index == magic_vtable_max)
5437         ? NULL : PL_magic_vtables + vtable_index;
5438
5439 #ifdef PERL_OLD_COPY_ON_WRITE
5440     if (SvIsCOW(sv))
5441         sv_force_normal_flags(sv, 0);
5442 #endif
5443     if (SvREADONLY(sv)) {
5444         if (
5445             /* its okay to attach magic to shared strings */
5446             !SvIsCOW(sv)
5447
5448             && IN_PERL_RUNTIME
5449             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5450            )
5451         {
5452             Perl_croak_no_modify();
5453         }
5454     }
5455     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5456         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5457             /* sv_magic() refuses to add a magic of the same 'how' as an
5458                existing one
5459              */
5460             if (how == PERL_MAGIC_taint)
5461                 mg->mg_len |= 1;
5462             return;
5463         }
5464     }
5465
5466     /* Rest of work is done else where */
5467     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5468
5469     switch (how) {
5470     case PERL_MAGIC_taint:
5471         mg->mg_len = 1;
5472         break;
5473     case PERL_MAGIC_ext:
5474     case PERL_MAGIC_dbfile:
5475         SvRMAGICAL_on(sv);
5476         break;
5477     }
5478 }
5479
5480 static int
5481 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5482 {
5483     MAGIC* mg;
5484     MAGIC** mgp;
5485
5486     assert(flags <= 1);
5487
5488     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5489         return 0;
5490     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5491     for (mg = *mgp; mg; mg = *mgp) {
5492         const MGVTBL* const virt = mg->mg_virtual;
5493         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5494             *mgp = mg->mg_moremagic;
5495             if (virt && virt->svt_free)
5496                 virt->svt_free(aTHX_ sv, mg);
5497             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5498                 if (mg->mg_len > 0)
5499                     Safefree(mg->mg_ptr);
5500                 else if (mg->mg_len == HEf_SVKEY)
5501                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5502                 else if (mg->mg_type == PERL_MAGIC_utf8)
5503                     Safefree(mg->mg_ptr);
5504             }
5505             if (mg->mg_flags & MGf_REFCOUNTED)
5506                 SvREFCNT_dec(mg->mg_obj);
5507             Safefree(mg);
5508         }
5509         else
5510             mgp = &mg->mg_moremagic;
5511     }
5512     if (SvMAGIC(sv)) {
5513         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5514             mg_magical(sv);     /*    else fix the flags now */
5515     }
5516     else {
5517         SvMAGICAL_off(sv);
5518         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5519     }
5520     return 0;
5521 }
5522
5523 /*
5524 =for apidoc sv_unmagic
5525
5526 Removes all magic of type C<type> from an SV.
5527
5528 =cut
5529 */
5530
5531 int
5532 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5533 {
5534     PERL_ARGS_ASSERT_SV_UNMAGIC;
5535     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5536 }
5537
5538 /*
5539 =for apidoc sv_unmagicext
5540
5541 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5542
5543 =cut
5544 */
5545
5546 int
5547 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5548 {
5549     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5550     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5551 }
5552
5553 /*
5554 =for apidoc sv_rvweaken
5555
5556 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5557 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5558 push a back-reference to this RV onto the array of backreferences
5559 associated with that magic.  If the RV is magical, set magic will be
5560 called after the RV is cleared.
5561
5562 =cut
5563 */
5564
5565 SV *
5566 Perl_sv_rvweaken(pTHX_ SV *const sv)
5567 {
5568     SV *tsv;
5569
5570     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5571
5572     if (!SvOK(sv))  /* let undefs pass */
5573         return sv;
5574     if (!SvROK(sv))
5575         Perl_croak(aTHX_ "Can't weaken a nonreference");
5576     else if (SvWEAKREF(sv)) {
5577         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5578         return sv;
5579     }
5580     else if (SvREADONLY(sv)) croak_no_modify();
5581     tsv = SvRV(sv);
5582     Perl_sv_add_backref(aTHX_ tsv, sv);
5583     SvWEAKREF_on(sv);
5584     SvREFCNT_dec_NN(tsv);
5585     return sv;
5586 }
5587
5588 /* Give tsv backref magic if it hasn't already got it, then push a
5589  * back-reference to sv onto the array associated with the backref magic.
5590  *
5591  * As an optimisation, if there's only one backref and it's not an AV,
5592  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5593  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5594  * active.)
5595  */
5596
5597 /* A discussion about the backreferences array and its refcount:
5598  *
5599  * The AV holding the backreferences is pointed to either as the mg_obj of
5600  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5601  * xhv_backreferences field. The array is created with a refcount
5602  * of 2. This means that if during global destruction the array gets
5603  * picked on before its parent to have its refcount decremented by the
5604  * random zapper, it won't actually be freed, meaning it's still there for
5605  * when its parent gets freed.
5606  *
5607  * When the parent SV is freed, the extra ref is killed by
5608  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5609  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5610  *
5611  * When a single backref SV is stored directly, it is not reference
5612  * counted.
5613  */
5614
5615 void
5616 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5617 {
5618     dVAR;
5619     SV **svp;
5620     AV *av = NULL;
5621     MAGIC *mg = NULL;
5622
5623     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5624
5625     /* find slot to store array or singleton backref */
5626
5627     if (SvTYPE(tsv) == SVt_PVHV) {
5628         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5629     } else {
5630         if (! ((mg =
5631             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5632         {
5633             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5634             mg = mg_find(tsv, PERL_MAGIC_backref);
5635         }
5636         svp = &(mg->mg_obj);
5637     }
5638
5639     /* create or retrieve the array */
5640
5641     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5642         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5643     ) {
5644         /* create array */
5645         av = newAV();
5646         AvREAL_off(av);
5647         SvREFCNT_inc_simple_void(av);
5648         /* av now has a refcnt of 2; see discussion above */
5649         if (*svp) {
5650             /* move single existing backref to the array */
5651             av_extend(av, 1);
5652             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5653         }
5654         *svp = (SV*)av;
5655         if (mg)
5656             mg->mg_flags |= MGf_REFCOUNTED;
5657     }
5658     else
5659         av = MUTABLE_AV(*svp);
5660
5661     if (!av) {
5662         /* optimisation: store single backref directly in HvAUX or mg_obj */
5663         *svp = sv;
5664         return;
5665     }
5666     /* push new backref */
5667     assert(SvTYPE(av) == SVt_PVAV);
5668     if (AvFILLp(av) >= AvMAX(av)) {
5669         av_extend(av, AvFILLp(av)+1);
5670     }
5671     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5672 }
5673
5674 /* delete a back-reference to ourselves from the backref magic associated
5675  * with the SV we point to.
5676  */
5677
5678 void
5679 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5680 {
5681     dVAR;
5682     SV **svp = NULL;
5683
5684     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5685
5686     if (SvTYPE(tsv) == SVt_PVHV) {
5687         if (SvOOK(tsv))
5688             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5689     }
5690     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5691         /* It's possible for the the last (strong) reference to tsv to have
5692            become freed *before* the last thing holding a weak reference.
5693            If both survive longer than the backreferences array, then when
5694            the referent's reference count drops to 0 and it is freed, it's
5695            not able to chase the backreferences, so they aren't NULLed.
5696
5697            For example, a CV holds a weak reference to its stash. If both the
5698            CV and the stash survive longer than the backreferences array,
5699            and the CV gets picked for the SvBREAK() treatment first,
5700            *and* it turns out that the stash is only being kept alive because
5701            of an our variable in the pad of the CV, then midway during CV
5702            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5703            It ends up pointing to the freed HV. Hence it's chased in here, and
5704            if this block wasn't here, it would hit the !svp panic just below.
5705
5706            I don't believe that "better" destruction ordering is going to help
5707            here - during global destruction there's always going to be the
5708            chance that something goes out of order. We've tried to make it
5709            foolproof before, and it only resulted in evolutionary pressure on
5710            fools. Which made us look foolish for our hubris. :-(
5711         */
5712         return;
5713     }
5714     else {
5715         MAGIC *const mg
5716             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5717         svp =  mg ? &(mg->mg_obj) : NULL;
5718     }
5719
5720     if (!svp)
5721         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5722     if (!*svp) {
5723         /* It's possible that sv is being freed recursively part way through the
5724            freeing of tsv. If this happens, the backreferences array of tsv has
5725            already been freed, and so svp will be NULL. If this is the case,
5726            we should not panic. Instead, nothing needs doing, so return.  */
5727         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5728             return;
5729         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5730                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5731     }
5732
5733     if (SvTYPE(*svp) == SVt_PVAV) {
5734 #ifdef DEBUGGING
5735         int count = 1;
5736 #endif
5737         AV * const av = (AV*)*svp;
5738         SSize_t fill;
5739         assert(!SvIS_FREED(av));
5740         fill = AvFILLp(av);
5741         assert(fill > -1);
5742         svp = AvARRAY(av);
5743         /* for an SV with N weak references to it, if all those
5744          * weak refs are deleted, then sv_del_backref will be called
5745          * N times and O(N^2) compares will be done within the backref
5746          * array. To ameliorate this potential slowness, we:
5747          * 1) make sure this code is as tight as possible;
5748          * 2) when looking for SV, look for it at both the head and tail of the
5749          *    array first before searching the rest, since some create/destroy
5750          *    patterns will cause the backrefs to be freed in order.
5751          */
5752         if (*svp == sv) {
5753             AvARRAY(av)++;
5754             AvMAX(av)--;
5755         }
5756         else {
5757             SV **p = &svp[fill];
5758             SV *const topsv = *p;
5759             if (topsv != sv) {
5760 #ifdef DEBUGGING
5761                 count = 0;
5762 #endif
5763                 while (--p > svp) {
5764                     if (*p == sv) {
5765                         /* We weren't the last entry.
5766                            An unordered list has this property that you
5767                            can take the last element off the end to fill
5768                            the hole, and it's still an unordered list :-)
5769                         */
5770                         *p = topsv;
5771 #ifdef DEBUGGING
5772                         count++;
5773 #else
5774                         break; /* should only be one */
5775 #endif
5776                     }
5777                 }
5778             }
5779         }
5780         assert(count ==1);
5781         AvFILLp(av) = fill-1;
5782     }
5783     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5784         /* freed AV; skip */
5785     }
5786     else {
5787         /* optimisation: only a single backref, stored directly */
5788         if (*svp != sv)
5789             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5790         *svp = NULL;
5791     }
5792
5793 }
5794
5795 void
5796 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5797 {
5798     SV **svp;
5799     SV **last;
5800     bool is_array;
5801
5802     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5803
5804     if (!av)
5805         return;
5806
5807     /* after multiple passes through Perl_sv_clean_all() for a thingy
5808      * that has badly leaked, the backref array may have gotten freed,
5809      * since we only protect it against 1 round of cleanup */
5810     if (SvIS_FREED(av)) {
5811         if (PL_in_clean_all) /* All is fair */
5812             return;
5813         Perl_croak(aTHX_
5814                    "panic: magic_killbackrefs (freed backref AV/SV)");
5815     }
5816
5817
5818     is_array = (SvTYPE(av) == SVt_PVAV);
5819     if (is_array) {
5820         assert(!SvIS_FREED(av));
5821         svp = AvARRAY(av);
5822         if (svp)
5823             last = svp + AvFILLp(av);
5824     }
5825     else {
5826         /* optimisation: only a single backref, stored directly */
5827         svp = (SV**)&av;
5828         last = svp;
5829     }
5830
5831     if (svp) {
5832         while (svp <= last) {
5833             if (*svp) {
5834                 SV *const referrer = *svp;
5835                 if (SvWEAKREF(referrer)) {
5836                     /* XXX Should we check that it hasn't changed? */
5837                     assert(SvROK(referrer));
5838                     SvRV_set(referrer, 0);
5839                     SvOK_off(referrer);
5840                     SvWEAKREF_off(referrer);
5841                     SvSETMAGIC(referrer);
5842                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5843                            SvTYPE(referrer) == SVt_PVLV) {
5844                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5845                     /* You lookin' at me?  */
5846                     assert(GvSTASH(referrer));
5847                     assert(GvSTASH(referrer) == (const HV *)sv);
5848                     GvSTASH(referrer) = 0;
5849                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5850                            SvTYPE(referrer) == SVt_PVFM) {
5851                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5852                         /* You lookin' at me?  */
5853                         assert(CvSTASH(referrer));
5854                         assert(CvSTASH(referrer) == (const HV *)sv);
5855                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5856                     }
5857                     else {
5858                         assert(SvTYPE(sv) == SVt_PVGV);
5859                         /* You lookin' at me?  */
5860                         assert(CvGV(referrer));
5861                         assert(CvGV(referrer) == (const GV *)sv);
5862                         anonymise_cv_maybe(MUTABLE_GV(sv),
5863                                                 MUTABLE_CV(referrer));
5864                     }
5865
5866                 } else {
5867                     Perl_croak(aTHX_
5868                                "panic: magic_killbackrefs (flags=%"UVxf")",
5869                                (UV)SvFLAGS(referrer));
5870                 }
5871
5872                 if (is_array)
5873                     *svp = NULL;
5874             }
5875             svp++;
5876         }
5877     }
5878     if (is_array) {
5879         AvFILLp(av) = -1;
5880         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5881     }
5882     return;
5883 }
5884
5885 /*
5886 =for apidoc sv_insert
5887
5888 Inserts a string at the specified offset/length within the SV.  Similar to
5889 the Perl substr() function.  Handles get magic.
5890
5891 =for apidoc sv_insert_flags
5892
5893 Same as C<sv_insert>, but the extra C<flags> are passed to the
5894 C<SvPV_force_flags> that applies to C<bigstr>.
5895
5896 =cut
5897 */
5898
5899 void
5900 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5901 {
5902     dVAR;
5903     char *big;
5904     char *mid;
5905     char *midend;
5906     char *bigend;
5907     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5908     STRLEN curlen;
5909
5910     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5911
5912     if (!bigstr)
5913         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5914     SvPV_force_flags(bigstr, curlen, flags);
5915     (void)SvPOK_only_UTF8(bigstr);
5916     if (offset + len > curlen) {
5917         SvGROW(bigstr, offset+len+1);
5918         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5919         SvCUR_set(bigstr, offset+len);
5920     }
5921
5922     SvTAINT(bigstr);
5923     i = littlelen - len;
5924     if (i > 0) {                        /* string might grow */
5925         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5926         mid = big + offset + len;
5927         midend = bigend = big + SvCUR(bigstr);
5928         bigend += i;
5929         *bigend = '\0';
5930         while (midend > mid)            /* shove everything down */
5931             *--bigend = *--midend;
5932         Move(little,big+offset,littlelen,char);
5933         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5934         SvSETMAGIC(bigstr);
5935         return;
5936     }
5937     else if (i == 0) {
5938         Move(little,SvPVX(bigstr)+offset,len,char);
5939         SvSETMAGIC(bigstr);
5940         return;
5941     }
5942
5943     big = SvPVX(bigstr);
5944     mid = big + offset;
5945     midend = mid + len;
5946     bigend = big + SvCUR(bigstr);
5947
5948     if (midend > bigend)
5949         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5950                    midend, bigend);
5951
5952     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5953         if (littlelen) {
5954             Move(little, mid, littlelen,char);
5955             mid += littlelen;
5956         }
5957         i = bigend - midend;
5958         if (i > 0) {
5959             Move(midend, mid, i,char);
5960             mid += i;
5961         }
5962         *mid = '\0';
5963         SvCUR_set(bigstr, mid - big);
5964     }
5965     else if ((i = mid - big)) { /* faster from front */
5966         midend -= littlelen;
5967         mid = midend;
5968         Move(big, midend - i, i, char);
5969         sv_chop(bigstr,midend-i);
5970         if (littlelen)
5971             Move(little, mid, littlelen,char);
5972     }
5973     else if (littlelen) {
5974         midend -= littlelen;
5975         sv_chop(bigstr,midend);
5976         Move(little,midend,littlelen,char);
5977     }
5978     else {
5979         sv_chop(bigstr,midend);
5980     }
5981     SvSETMAGIC(bigstr);
5982 }
5983
5984 /*
5985 =for apidoc sv_replace
5986
5987 Make the first argument a copy of the second, then delete the original.
5988 The target SV physically takes over ownership of the body of the source SV
5989 and inherits its flags; however, the target keeps any magic it owns,
5990 and any magic in the source is discarded.
5991 Note that this is a rather specialist SV copying operation; most of the
5992 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5993
5994 =cut
5995 */
5996
5997 void
5998 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
5999 {
6000     dVAR;
6001     const U32 refcnt = SvREFCNT(sv);
6002
6003     PERL_ARGS_ASSERT_SV_REPLACE;
6004
6005     SV_CHECK_THINKFIRST_COW_DROP(sv);
6006     if (SvREFCNT(nsv) != 1) {
6007         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6008                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6009     }
6010     if (SvMAGICAL(sv)) {
6011         if (SvMAGICAL(nsv))
6012             mg_free(nsv);
6013         else
6014             sv_upgrade(nsv, SVt_PVMG);
6015         SvMAGIC_set(nsv, SvMAGIC(sv));
6016         SvFLAGS(nsv) |= SvMAGICAL(sv);
6017         SvMAGICAL_off(sv);
6018         SvMAGIC_set(sv, NULL);
6019     }
6020     SvREFCNT(sv) = 0;
6021     sv_clear(sv);
6022     assert(!SvREFCNT(sv));
6023 #ifdef DEBUG_LEAKING_SCALARS
6024     sv->sv_flags  = nsv->sv_flags;
6025     sv->sv_any    = nsv->sv_any;
6026     sv->sv_refcnt = nsv->sv_refcnt;
6027     sv->sv_u      = nsv->sv_u;
6028 #else
6029     StructCopy(nsv,sv,SV);
6030 #endif
6031     if(SvTYPE(sv) == SVt_IV) {
6032         SvANY(sv)
6033             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6034     }
6035         
6036
6037 #ifdef PERL_OLD_COPY_ON_WRITE
6038     if (SvIsCOW_normal(nsv)) {
6039         /* We need to follow the pointers around the loop to make the
6040            previous SV point to sv, rather than nsv.  */
6041         SV *next;
6042         SV *current = nsv;
6043         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6044             assert(next);
6045             current = next;
6046             assert(SvPVX_const(current) == SvPVX_const(nsv));
6047         }
6048         /* Make the SV before us point to the SV after us.  */
6049         if (DEBUG_C_TEST) {
6050             PerlIO_printf(Perl_debug_log, "previous is\n");
6051             sv_dump(current);
6052             PerlIO_printf(Perl_debug_log,
6053                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6054                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6055         }
6056         SV_COW_NEXT_SV_SET(current, sv);
6057     }
6058 #endif
6059     SvREFCNT(sv) = refcnt;
6060     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6061     SvREFCNT(nsv) = 0;
6062     del_SV(nsv);
6063 }
6064
6065 /* We're about to free a GV which has a CV that refers back to us.
6066  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6067  * field) */
6068
6069 STATIC void
6070 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6071 {
6072     SV *gvname;
6073     GV *anongv;
6074
6075     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6076
6077     /* be assertive! */
6078     assert(SvREFCNT(gv) == 0);
6079     assert(isGV(gv) && isGV_with_GP(gv));
6080     assert(GvGP(gv));
6081     assert(!CvANON(cv));
6082     assert(CvGV(cv) == gv);
6083     assert(!CvNAMED(cv));
6084
6085     /* will the CV shortly be freed by gp_free() ? */
6086     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6087         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6088         return;
6089     }
6090
6091     /* if not, anonymise: */
6092     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6093                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6094                     : newSVpvn_flags( "__ANON__", 8, 0 );
6095     sv_catpvs(gvname, "::__ANON__");
6096     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6097     SvREFCNT_dec_NN(gvname);
6098
6099     CvANON_on(cv);
6100     CvCVGV_RC_on(cv);
6101     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6102 }
6103
6104
6105 /*
6106 =for apidoc sv_clear
6107
6108 Clear an SV: call any destructors, free up any memory used by the body,
6109 and free the body itself.  The SV's head is I<not> freed, although
6110 its type is set to all 1's so that it won't inadvertently be assumed
6111 to be live during global destruction etc.
6112 This function should only be called when REFCNT is zero.  Most of the time
6113 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6114 instead.
6115
6116 =cut
6117 */
6118
6119 void
6120 Perl_sv_clear(pTHX_ SV *const orig_sv)
6121 {
6122     dVAR;
6123     HV *stash;
6124     U32 type;
6125     const struct body_details *sv_type_details;
6126     SV* iter_sv = NULL;
6127     SV* next_sv = NULL;
6128     SV *sv = orig_sv;
6129     STRLEN hash_index;
6130
6131     PERL_ARGS_ASSERT_SV_CLEAR;
6132
6133     /* within this loop, sv is the SV currently being freed, and
6134      * iter_sv is the most recent AV or whatever that's being iterated
6135      * over to provide more SVs */
6136
6137     while (sv) {
6138
6139         type = SvTYPE(sv);
6140
6141         assert(SvREFCNT(sv) == 0);
6142         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6143
6144         if (type <= SVt_IV) {
6145             /* See the comment in sv.h about the collusion between this
6146              * early return and the overloading of the NULL slots in the
6147              * size table.  */
6148             if (SvROK(sv))
6149                 goto free_rv;
6150             SvFLAGS(sv) &= SVf_BREAK;
6151             SvFLAGS(sv) |= SVTYPEMASK;
6152             goto free_head;
6153         }
6154
6155         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6156
6157         if (type >= SVt_PVMG) {
6158             if (SvOBJECT(sv)) {
6159                 if (!curse(sv, 1)) goto get_next_sv;
6160                 type = SvTYPE(sv); /* destructor may have changed it */
6161             }
6162             /* Free back-references before magic, in case the magic calls
6163              * Perl code that has weak references to sv. */
6164             if (type == SVt_PVHV) {
6165                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6166                 if (SvMAGIC(sv))
6167                     mg_free(sv);
6168             }
6169             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6170                 SvREFCNT_dec(SvOURSTASH(sv));
6171             } else if (SvMAGIC(sv)) {
6172                 /* Free back-references before other types of magic. */
6173                 sv_unmagic(sv, PERL_MAGIC_backref);
6174                 mg_free(sv);
6175             }
6176             SvMAGICAL_off(sv);
6177             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6178                 SvREFCNT_dec(SvSTASH(sv));
6179         }
6180         switch (type) {
6181             /* case SVt_DUMMY: */
6182         case SVt_PVIO:
6183             if (IoIFP(sv) &&
6184                 IoIFP(sv) != PerlIO_stdin() &&
6185                 IoIFP(sv) != PerlIO_stdout() &&
6186                 IoIFP(sv) != PerlIO_stderr() &&
6187                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6188             {
6189                 io_close(MUTABLE_IO(sv), FALSE);
6190             }
6191             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6192                 PerlDir_close(IoDIRP(sv));
6193             IoDIRP(sv) = (DIR*)NULL;
6194             Safefree(IoTOP_NAME(sv));
6195             Safefree(IoFMT_NAME(sv));
6196             Safefree(IoBOTTOM_NAME(sv));
6197             if ((const GV *)sv == PL_statgv)
6198                 PL_statgv = NULL;
6199             goto freescalar;
6200         case SVt_REGEXP:
6201             /* FIXME for plugins */
6202           freeregexp:
6203             pregfree2((REGEXP*) sv);
6204             goto freescalar;
6205         case SVt_PVCV:
6206         case SVt_PVFM:
6207             cv_undef(MUTABLE_CV(sv));
6208             /* If we're in a stash, we don't own a reference to it.
6209              * However it does have a back reference to us, which needs to
6210              * be cleared.  */
6211             if ((stash = CvSTASH(sv)))
6212                 sv_del_backref(MUTABLE_SV(stash), sv);
6213             goto freescalar;
6214         case SVt_PVHV:
6215             if (PL_last_swash_hv == (const HV *)sv) {
6216                 PL_last_swash_hv = NULL;
6217             }
6218             if (HvTOTALKEYS((HV*)sv) > 0) {
6219                 const char *name;
6220                 /* this statement should match the one at the beginning of
6221                  * hv_undef_flags() */
6222                 if (   PL_phase != PERL_PHASE_DESTRUCT
6223                     && (name = HvNAME((HV*)sv)))
6224                 {
6225                     if (PL_stashcache) {
6226                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6227                                      sv));
6228                         (void)hv_delete(PL_stashcache, name,
6229                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6230                     }
6231                     hv_name_set((HV*)sv, NULL, 0, 0);
6232                 }
6233
6234                 /* save old iter_sv in unused SvSTASH field */
6235                 assert(!SvOBJECT(sv));
6236                 SvSTASH(sv) = (HV*)iter_sv;
6237                 iter_sv = sv;
6238
6239                 /* save old hash_index in unused SvMAGIC field */
6240                 assert(!SvMAGICAL(sv));
6241                 assert(!SvMAGIC(sv));
6242                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6243                 hash_index = 0;
6244
6245                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6246                 goto get_next_sv; /* process this new sv */
6247             }
6248             /* free empty hash */
6249             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6250             assert(!HvARRAY((HV*)sv));
6251             break;
6252         case SVt_PVAV:
6253             {
6254                 AV* av = MUTABLE_AV(sv);
6255                 if (PL_comppad == av) {
6256                     PL_comppad = NULL;
6257                     PL_curpad = NULL;
6258                 }
6259                 if (AvREAL(av) && AvFILLp(av) > -1) {
6260                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6261                     /* save old iter_sv in top-most slot of AV,
6262                      * and pray that it doesn't get wiped in the meantime */
6263                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6264                     iter_sv = sv;
6265                     goto get_next_sv; /* process this new sv */
6266                 }
6267                 Safefree(AvALLOC(av));
6268             }
6269
6270             break;
6271         case SVt_PVLV:
6272             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6273                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6274                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6275                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6276             }
6277             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6278                 SvREFCNT_dec(LvTARG(sv));
6279             if (isREGEXP(sv)) goto freeregexp;
6280         case SVt_PVGV:
6281             if (isGV_with_GP(sv)) {
6282                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6283                    && HvENAME_get(stash))
6284                     mro_method_changed_in(stash);
6285                 gp_free(MUTABLE_GV(sv));
6286                 if (GvNAME_HEK(sv))
6287                     unshare_hek(GvNAME_HEK(sv));
6288                 /* If we're in a stash, we don't own a reference to it.
6289                  * However it does have a back reference to us, which
6290                  * needs to be cleared.  */
6291                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6292                         sv_del_backref(MUTABLE_SV(stash), sv);
6293             }
6294             /* FIXME. There are probably more unreferenced pointers to SVs
6295              * in the interpreter struct that we should check and tidy in
6296              * a similar fashion to this:  */
6297             /* See also S_sv_unglob, which does the same thing. */
6298             if ((const GV *)sv == PL_last_in_gv)
6299                 PL_last_in_gv = NULL;
6300             else if ((const GV *)sv == PL_statgv)
6301                 PL_statgv = NULL;
6302             else if ((const GV *)sv == PL_stderrgv)
6303                 PL_stderrgv = NULL;
6304         case SVt_PVMG:
6305         case SVt_PVNV:
6306         case SVt_PVIV:
6307         case SVt_PV:
6308           freescalar:
6309             /* Don't bother with SvOOK_off(sv); as we're only going to
6310              * free it.  */
6311             if (SvOOK(sv)) {
6312                 STRLEN offset;
6313                 SvOOK_offset(sv, offset);
6314                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6315                 /* Don't even bother with turning off the OOK flag.  */
6316             }
6317             if (SvROK(sv)) {
6318             free_rv:
6319                 {
6320                     SV * const target = SvRV(sv);
6321                     if (SvWEAKREF(sv))
6322                         sv_del_backref(target, sv);
6323                     else
6324                         next_sv = target;
6325                 }
6326             }
6327 #ifdef PERL_ANY_COW
6328             else if (SvPVX_const(sv)
6329                      && !(SvTYPE(sv) == SVt_PVIO
6330                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6331             {
6332                 if (SvIsCOW(sv)) {
6333                     if (DEBUG_C_TEST) {
6334                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6335                         sv_dump(sv);
6336                     }
6337                     if (SvLEN(sv)) {
6338 # ifdef PERL_OLD_COPY_ON_WRITE
6339                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6340 # else
6341                         if (CowREFCNT(sv)) {
6342                             CowREFCNT(sv)--;
6343                             SvLEN_set(sv, 0);
6344                         }
6345 # endif
6346                     } else {
6347                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6348                     }
6349
6350                 }
6351 # ifdef PERL_OLD_COPY_ON_WRITE
6352                 else
6353 # endif
6354                 if (SvLEN(sv)) {
6355                     Safefree(SvPVX_mutable(sv));
6356                 }
6357             }
6358 #else
6359             else if (SvPVX_const(sv) && SvLEN(sv)
6360                      && !(SvTYPE(sv) == SVt_PVIO
6361                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6362                 Safefree(SvPVX_mutable(sv));
6363             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6364                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6365             }
6366 #endif
6367             break;
6368         case SVt_NV:
6369             break;
6370         }
6371
6372       free_body:
6373
6374         SvFLAGS(sv) &= SVf_BREAK;
6375         SvFLAGS(sv) |= SVTYPEMASK;
6376
6377         sv_type_details = bodies_by_type + type;
6378         if (sv_type_details->arena) {
6379             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6380                      &PL_body_roots[type]);
6381         }
6382         else if (sv_type_details->body_size) {
6383             safefree(SvANY(sv));
6384         }
6385
6386       free_head:
6387         /* caller is responsible for freeing the head of the original sv */
6388         if (sv != orig_sv && !SvREFCNT(sv))
6389             del_SV(sv);
6390
6391         /* grab and free next sv, if any */
6392       get_next_sv:
6393         while (1) {
6394             sv = NULL;
6395             if (next_sv) {
6396                 sv = next_sv;
6397                 next_sv = NULL;
6398             }
6399             else if (!iter_sv) {
6400                 break;
6401             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6402                 AV *const av = (AV*)iter_sv;
6403                 if (AvFILLp(av) > -1) {
6404                     sv = AvARRAY(av)[AvFILLp(av)--];
6405                 }
6406                 else { /* no more elements of current AV to free */
6407                     sv = iter_sv;
6408                     type = SvTYPE(sv);
6409                     /* restore previous value, squirrelled away */
6410                     iter_sv = AvARRAY(av)[AvMAX(av)];
6411                     Safefree(AvALLOC(av));
6412                     goto free_body;
6413                 }
6414             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6415                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6416                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6417                     /* no more elements of current HV to free */
6418                     sv = iter_sv;
6419                     type = SvTYPE(sv);
6420                     /* Restore previous values of iter_sv and hash_index,
6421                      * squirrelled away */
6422                     assert(!SvOBJECT(sv));
6423                     iter_sv = (SV*)SvSTASH(sv);
6424                     assert(!SvMAGICAL(sv));
6425                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6426 #ifdef DEBUGGING
6427                     /* perl -DA does not like rubbish in SvMAGIC. */
6428                     SvMAGIC_set(sv, 0);
6429 #endif
6430
6431                     /* free any remaining detritus from the hash struct */
6432                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6433                     assert(!HvARRAY((HV*)sv));
6434                     goto free_body;
6435                 }
6436             }
6437
6438             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6439
6440             if (!sv)
6441                 continue;
6442             if (!SvREFCNT(sv)) {
6443                 sv_free(sv);
6444                 continue;
6445             }
6446             if (--(SvREFCNT(sv)))
6447                 continue;
6448 #ifdef DEBUGGING
6449             if (SvTEMP(sv)) {
6450                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6451                          "Attempt to free temp prematurely: SV 0x%"UVxf
6452                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6453                 continue;
6454             }
6455 #endif
6456             if (SvIMMORTAL(sv)) {
6457                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6458                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6459                 continue;
6460             }
6461             break;
6462         } /* while 1 */
6463
6464     } /* while sv */
6465 }
6466
6467 /* This routine curses the sv itself, not the object referenced by sv. So
6468    sv does not have to be ROK. */
6469
6470 static bool
6471 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6472     dVAR;
6473
6474     PERL_ARGS_ASSERT_CURSE;
6475     assert(SvOBJECT(sv));
6476
6477     if (PL_defstash &&  /* Still have a symbol table? */
6478         SvDESTROYABLE(sv))
6479     {
6480         dSP;
6481         HV* stash;
6482         do {
6483           stash = SvSTASH(sv);
6484           assert(SvTYPE(stash) == SVt_PVHV);
6485           if (HvNAME(stash)) {
6486             CV* destructor = NULL;
6487             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6488             if (!destructor) {
6489                 GV * const gv =
6490                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6491                 if (gv) destructor = GvCV(gv);
6492                 if (!SvOBJECT(stash))
6493                     SvSTASH(stash) =
6494                         destructor ? (HV *)destructor : ((HV *)0)+1;
6495             }
6496             assert(!destructor || destructor == ((CV *)0)+1
6497                 || SvTYPE(destructor) == SVt_PVCV);
6498             if (destructor && destructor != ((CV *)0)+1
6499                 /* A constant subroutine can have no side effects, so
6500                    don't bother calling it.  */
6501                 && !CvCONST(destructor)
6502                 /* Don't bother calling an empty destructor or one that
6503                    returns immediately. */
6504                 && (CvISXSUB(destructor)
6505                 || (CvSTART(destructor)
6506                     && (CvSTART(destructor)->op_next->op_type
6507                                         != OP_LEAVESUB)
6508                     && (CvSTART(destructor)->op_next->op_type
6509                                         != OP_PUSHMARK
6510                         || CvSTART(destructor)->op_next->op_next->op_type
6511                                         != OP_RETURN
6512                        )
6513                    ))
6514                )
6515             {
6516                 SV* const tmpref = newRV(sv);
6517                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6518                 ENTER;
6519                 PUSHSTACKi(PERLSI_DESTROY);
6520                 EXTEND(SP, 2);
6521                 PUSHMARK(SP);
6522                 PUSHs(tmpref);
6523                 PUTBACK;
6524                 call_sv(MUTABLE_SV(destructor),
6525                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6526                 POPSTACK;
6527                 SPAGAIN;
6528                 LEAVE;
6529                 if(SvREFCNT(tmpref) < 2) {
6530                     /* tmpref is not kept alive! */
6531                     SvREFCNT(sv)--;
6532                     SvRV_set(tmpref, NULL);
6533                     SvROK_off(tmpref);
6534                 }
6535                 SvREFCNT_dec_NN(tmpref);
6536             }
6537           }
6538         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6539
6540
6541         if (check_refcnt && SvREFCNT(sv)) {
6542             if (PL_in_clean_objs)
6543                 Perl_croak(aTHX_
6544                   "DESTROY created new reference to dead object '%"HEKf"'",
6545                    HEKfARG(HvNAME_HEK(stash)));
6546             /* DESTROY gave object new lease on life */
6547             return FALSE;
6548         }
6549     }
6550
6551     if (SvOBJECT(sv)) {
6552         HV * const stash = SvSTASH(sv);
6553         /* Curse before freeing the stash, as freeing the stash could cause
6554            a recursive call into S_curse. */
6555         SvOBJECT_off(sv);       /* Curse the object. */
6556         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6557         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6558     }
6559     return TRUE;
6560 }
6561
6562 /*
6563 =for apidoc sv_newref
6564
6565 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6566 instead.
6567
6568 =cut
6569 */
6570
6571 SV *
6572 Perl_sv_newref(pTHX_ SV *const sv)
6573 {
6574     PERL_UNUSED_CONTEXT;
6575     if (sv)
6576         (SvREFCNT(sv))++;
6577     return sv;
6578 }
6579
6580 /*
6581 =for apidoc sv_free
6582
6583 Decrement an SV's reference count, and if it drops to zero, call
6584 C<sv_clear> to invoke destructors and free up any memory used by
6585 the body; finally, deallocate the SV's head itself.
6586 Normally called via a wrapper macro C<SvREFCNT_dec>.
6587
6588 =cut
6589 */
6590
6591 void
6592 Perl_sv_free(pTHX_ SV *const sv)
6593 {
6594     SvREFCNT_dec(sv);
6595 }
6596
6597
6598 /* Private helper function for SvREFCNT_dec().
6599  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6600
6601 void
6602 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6603 {
6604     dVAR;
6605
6606     PERL_ARGS_ASSERT_SV_FREE2;
6607
6608     if (LIKELY( rc == 1 )) {
6609         /* normal case */
6610         SvREFCNT(sv) = 0;
6611
6612 #ifdef DEBUGGING
6613         if (SvTEMP(sv)) {
6614             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6615                              "Attempt to free temp prematurely: SV 0x%"UVxf
6616                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6617             return;
6618         }
6619 #endif
6620         if (SvIMMORTAL(sv)) {
6621             /* make sure SvREFCNT(sv)==0 happens very seldom */
6622             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6623             return;
6624         }
6625         sv_clear(sv);
6626         if (! SvREFCNT(sv)) /* may have have been resurrected */
6627             del_SV(sv);
6628         return;
6629     }
6630
6631     /* handle exceptional cases */
6632
6633     assert(rc == 0);
6634
6635     if (SvFLAGS(sv) & SVf_BREAK)
6636         /* this SV's refcnt has been artificially decremented to
6637          * trigger cleanup */
6638         return;
6639     if (PL_in_clean_all) /* All is fair */
6640         return;
6641     if (SvIMMORTAL(sv)) {
6642         /* make sure SvREFCNT(sv)==0 happens very seldom */
6643         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6644         return;
6645     }
6646     if (ckWARN_d(WARN_INTERNAL)) {
6647 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6648         Perl_dump_sv_child(aTHX_ sv);
6649 #else
6650     #ifdef DEBUG_LEAKING_SCALARS
6651         sv_dump(sv);
6652     #endif
6653 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6654         if (PL_warnhook == PERL_WARNHOOK_FATAL
6655             || ckDEAD(packWARN(WARN_INTERNAL))) {
6656             /* Don't let Perl_warner cause us to escape our fate:  */
6657             abort();
6658         }
6659 #endif
6660         /* This may not return:  */
6661         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6662                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6663                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6664 #endif
6665     }
6666 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6667     abort();
6668 #endif
6669
6670 }
6671
6672
6673 /*
6674 =for apidoc sv_len
6675
6676 Returns the length of the string in the SV.  Handles magic and type
6677 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6678 gives raw access to the xpv_cur slot.
6679
6680 =cut
6681 */
6682
6683 STRLEN
6684 Perl_sv_len(pTHX_ SV *const sv)
6685 {
6686     STRLEN len;
6687
6688     if (!sv)
6689         return 0;
6690
6691     (void)SvPV_const(sv, len);
6692     return len;
6693 }
6694
6695 /*
6696 =for apidoc sv_len_utf8
6697
6698 Returns the number of characters in the string in an SV, counting wide
6699 UTF-8 bytes as a single character.  Handles magic and type coercion.
6700
6701 =cut
6702 */
6703
6704 /*
6705  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6706  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6707  * (Note that the mg_len is not the length of the mg_ptr field.
6708  * This allows the cache to store the character length of the string without
6709  * needing to malloc() extra storage to attach to the mg_ptr.)
6710  *
6711  */
6712
6713 STRLEN
6714 Perl_sv_len_utf8(pTHX_ SV *const sv)
6715 {
6716     if (!sv)
6717         return 0;
6718
6719     SvGETMAGIC(sv);
6720     return sv_len_utf8_nomg(sv);
6721 }
6722
6723 STRLEN
6724 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6725 {
6726     dVAR;
6727     STRLEN len;
6728     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6729
6730     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6731
6732     if (PL_utf8cache && SvUTF8(sv)) {
6733             STRLEN ulen;
6734             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6735
6736             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6737                 if (mg->mg_len != -1)
6738                     ulen = mg->mg_len;
6739                 else {
6740                     /* We can use the offset cache for a headstart.
6741                        The longer value is stored in the first pair.  */
6742                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6743
6744                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6745                                                        s + len);
6746                 }
6747                 
6748                 if (PL_utf8cache < 0) {
6749                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6750                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6751                 }
6752             }
6753             else {
6754                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6755                 utf8_mg_len_cache_update(sv, &mg, ulen);
6756             }
6757             return ulen;
6758     }
6759     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6760 }
6761
6762 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6763    offset.  */
6764 static STRLEN
6765 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6766                       STRLEN *const uoffset_p, bool *const at_end)
6767 {
6768     const U8 *s = start;
6769     STRLEN uoffset = *uoffset_p;
6770
6771     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6772
6773     while (s < send && uoffset) {
6774         --uoffset;
6775         s += UTF8SKIP(s);
6776     }
6777     if (s == send) {
6778         *at_end = TRUE;
6779     }
6780     else if (s > send) {
6781         *at_end = TRUE;
6782         /* This is the existing behaviour. Possibly it should be a croak, as
6783            it's actually a bounds error  */
6784         s = send;
6785     }
6786     *uoffset_p -= uoffset;
6787     return s - start;
6788 }
6789
6790 /* Given the length of the string in both bytes and UTF-8 characters, decide
6791    whether to walk forwards or backwards to find the byte corresponding to
6792    the passed in UTF-8 offset.  */
6793 static STRLEN
6794 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6795                     STRLEN uoffset, const STRLEN uend)
6796 {
6797     STRLEN backw = uend - uoffset;
6798
6799     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6800
6801     if (uoffset < 2 * backw) {
6802         /* The assumption is that going forwards is twice the speed of going
6803            forward (that's where the 2 * backw comes from).
6804            (The real figure of course depends on the UTF-8 data.)  */
6805         const U8 *s = start;
6806
6807         while (s < send && uoffset--)
6808             s += UTF8SKIP(s);
6809         assert (s <= send);
6810         if (s > send)
6811             s = send;
6812         return s - start;
6813     }
6814
6815     while (backw--) {
6816         send--;
6817         while (UTF8_IS_CONTINUATION(*send))
6818             send--;
6819     }
6820     return send - start;
6821 }
6822
6823 /* For the string representation of the given scalar, find the byte
6824    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6825    give another position in the string, *before* the sought offset, which
6826    (which is always true, as 0, 0 is a valid pair of positions), which should
6827    help reduce the amount of linear searching.
6828    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6829    will be used to reduce the amount of linear searching. The cache will be
6830    created if necessary, and the found value offered to it for update.  */
6831 static STRLEN
6832 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6833                     const U8 *const send, STRLEN uoffset,
6834                     STRLEN uoffset0, STRLEN boffset0)
6835 {
6836     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6837     bool found = FALSE;
6838     bool at_end = FALSE;
6839
6840     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6841
6842     assert (uoffset >= uoffset0);
6843
6844     if (!uoffset)
6845         return 0;
6846
6847     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6848         && PL_utf8cache
6849         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6850                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6851         if ((*mgp)->mg_ptr) {
6852             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6853             if (cache[0] == uoffset) {
6854                 /* An exact match. */
6855                 return cache[1];
6856             }
6857             if (cache[2] == uoffset) {
6858                 /* An exact match. */
6859                 return cache[3];
6860             }
6861
6862             if (cache[0] < uoffset) {
6863                 /* The cache already knows part of the way.   */
6864                 if (cache[0] > uoffset0) {
6865                     /* The cache knows more than the passed in pair  */
6866                     uoffset0 = cache[0];
6867                     boffset0 = cache[1];
6868                 }
6869                 if ((*mgp)->mg_len != -1) {
6870                     /* And we know the end too.  */
6871                     boffset = boffset0
6872                         + sv_pos_u2b_midway(start + boffset0, send,
6873                                               uoffset - uoffset0,
6874                                               (*mgp)->mg_len - uoffset0);
6875                 } else {
6876                     uoffset -= uoffset0;
6877                     boffset = boffset0
6878                         + sv_pos_u2b_forwards(start + boffset0,
6879                                               send, &uoffset, &at_end);
6880                     uoffset += uoffset0;
6881                 }
6882             }
6883             else if (cache[2] < uoffset) {
6884                 /* We're between the two cache entries.  */
6885                 if (cache[2] > uoffset0) {
6886                     /* and the cache knows more than the passed in pair  */
6887                     uoffset0 = cache[2];
6888                     boffset0 = cache[3];
6889                 }
6890
6891                 boffset = boffset0
6892                     + sv_pos_u2b_midway(start + boffset0,
6893                                           start + cache[1],
6894                                           uoffset - uoffset0,
6895                                           cache[0] - uoffset0);
6896             } else {
6897                 boffset = boffset0
6898                     + sv_pos_u2b_midway(start + boffset0,
6899                                           start + cache[3],
6900                                           uoffset - uoffset0,
6901                                           cache[2] - uoffset0);
6902             }
6903             found = TRUE;
6904         }
6905         else if ((*mgp)->mg_len != -1) {
6906             /* If we can take advantage of a passed in offset, do so.  */
6907             /* In fact, offset0 is either 0, or less than offset, so don't
6908                need to worry about the other possibility.  */
6909             boffset = boffset0
6910                 + sv_pos_u2b_midway(start + boffset0, send,
6911                                       uoffset - uoffset0,
6912                                       (*mgp)->mg_len - uoffset0);
6913             found = TRUE;
6914         }
6915     }
6916
6917     if (!found || PL_utf8cache < 0) {
6918         STRLEN real_boffset;
6919         uoffset -= uoffset0;
6920         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6921                                                       send, &uoffset, &at_end);
6922         uoffset += uoffset0;
6923
6924         if (found && PL_utf8cache < 0)
6925             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6926                                        real_boffset, sv);
6927         boffset = real_boffset;
6928     }
6929
6930     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6931         if (at_end)
6932             utf8_mg_len_cache_update(sv, mgp, uoffset);
6933         else
6934             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6935     }
6936     return boffset;
6937 }
6938
6939
6940 /*
6941 =for apidoc sv_pos_u2b_flags
6942
6943 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6944 the start of the string, to a count of the equivalent number of bytes; if
6945 lenp is non-zero, it does the same to lenp, but this time starting from
6946 the offset, rather than from the start
6947 of the string.  Handles type coercion.
6948 I<flags> is passed to C<SvPV_flags>, and usually should be
6949 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6950
6951 =cut
6952 */
6953
6954 /*
6955  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6956  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6957  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6958  *
6959  */
6960
6961 STRLEN
6962 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6963                       U32 flags)
6964 {
6965     const U8 *start;
6966     STRLEN len;
6967     STRLEN boffset;
6968
6969     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6970
6971     start = (U8*)SvPV_flags(sv, len, flags);
6972     if (len) {
6973         const U8 * const send = start + len;
6974         MAGIC *mg = NULL;
6975         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6976
6977         if (lenp
6978             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6979                         is 0, and *lenp is already set to that.  */) {
6980             /* Convert the relative offset to absolute.  */
6981             const STRLEN uoffset2 = uoffset + *lenp;
6982             const STRLEN boffset2
6983                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6984                                       uoffset, boffset) - boffset;
6985
6986             *lenp = boffset2;
6987         }
6988     } else {
6989         if (lenp)
6990             *lenp = 0;
6991         boffset = 0;
6992     }
6993
6994     return boffset;
6995 }
6996
6997 /*
6998 =for apidoc sv_pos_u2b
6999
7000 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7001 the start of the string, to a count of the equivalent number of bytes; if
7002 lenp is non-zero, it does the same to lenp, but this time starting from
7003 the offset, rather than from the start of the string.  Handles magic and
7004 type coercion.
7005
7006 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7007 than 2Gb.
7008
7009 =cut
7010 */
7011
7012 /*
7013  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7014  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7015  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7016  *
7017  */
7018
7019 /* This function is subject to size and sign problems */
7020
7021 void
7022 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7023 {
7024     PERL_ARGS_ASSERT_SV_POS_U2B;
7025
7026     if (lenp) {
7027         STRLEN ulen = (STRLEN)*lenp;
7028         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7029                                          SV_GMAGIC|SV_CONST_RETURN);
7030         *lenp = (I32)ulen;
7031     } else {
7032         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7033                                          SV_GMAGIC|SV_CONST_RETURN);
7034     }
7035 }
7036
7037 static void
7038 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7039                            const STRLEN ulen)
7040 {
7041     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7042     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7043         return;
7044
7045     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7046                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7047         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7048     }
7049     assert(*mgp);
7050
7051     (*mgp)->mg_len = ulen;
7052     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
7053     if (ulen != (STRLEN) (*mgp)->mg_len)
7054         (*mgp)->mg_len = -1;
7055 }
7056
7057 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7058    byte length pairing. The (byte) length of the total SV is passed in too,
7059    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7060    may not have updated SvCUR, so we can't rely on reading it directly.
7061
7062    The proffered utf8/byte length pairing isn't used if the cache already has
7063    two pairs, and swapping either for the proffered pair would increase the
7064    RMS of the intervals between known byte offsets.
7065
7066    The cache itself consists of 4 STRLEN values
7067    0: larger UTF-8 offset
7068    1: corresponding byte offset
7069    2: smaller UTF-8 offset
7070    3: corresponding byte offset
7071
7072    Unused cache pairs have the value 0, 0.
7073    Keeping the cache "backwards" means that the invariant of
7074    cache[0] >= cache[2] is maintained even with empty slots, which means that
7075    the code that uses it doesn't need to worry if only 1 entry has actually
7076    been set to non-zero.  It also makes the "position beyond the end of the
7077    cache" logic much simpler, as the first slot is always the one to start
7078    from.   
7079 */
7080 static void
7081 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7082                            const STRLEN utf8, const STRLEN blen)
7083 {
7084     STRLEN *cache;
7085
7086     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7087
7088     if (SvREADONLY(sv))
7089         return;
7090
7091     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7092                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7093         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7094                            0);
7095         (*mgp)->mg_len = -1;
7096     }
7097     assert(*mgp);
7098
7099     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7100         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7101         (*mgp)->mg_ptr = (char *) cache;
7102     }
7103     assert(cache);
7104
7105     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7106         /* SvPOKp() because it's possible that sv has string overloading, and
7107            therefore is a reference, hence SvPVX() is actually a pointer.
7108            This cures the (very real) symptoms of RT 69422, but I'm not actually
7109            sure whether we should even be caching the results of UTF-8
7110            operations on overloading, given that nothing stops overloading
7111            returning a different value every time it's called.  */
7112         const U8 *start = (const U8 *) SvPVX_const(sv);
7113         const STRLEN realutf8 = utf8_length(start, start + byte);
7114
7115         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7116                                    sv);
7117     }
7118
7119     /* Cache is held with the later position first, to simplify the code
7120        that deals with unbounded ends.  */
7121        
7122     ASSERT_UTF8_CACHE(cache);
7123     if (cache[1] == 0) {
7124         /* Cache is totally empty  */
7125         cache[0] = utf8;
7126         cache[1] = byte;
7127     } else if (cache[3] == 0) {
7128         if (byte > cache[1]) {
7129             /* New one is larger, so goes first.  */
7130             cache[2] = cache[0];
7131             cache[3] = cache[1];
7132             cache[0] = utf8;
7133             cache[1] = byte;
7134         } else {
7135             cache[2] = utf8;
7136             cache[3] = byte;
7137         }
7138     } else {
7139 #define THREEWAY_SQUARE(a,b,c,d) \
7140             ((float)((d) - (c))) * ((float)((d) - (c))) \
7141             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7142                + ((float)((b) - (a))) * ((float)((b) - (a)))
7143
7144         /* Cache has 2 slots in use, and we know three potential pairs.
7145            Keep the two that give the lowest RMS distance. Do the
7146            calculation in bytes simply because we always know the byte
7147            length.  squareroot has the same ordering as the positive value,
7148            so don't bother with the actual square root.  */
7149         if (byte > cache[1]) {
7150             /* New position is after the existing pair of pairs.  */
7151             const float keep_earlier
7152                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7153             const float keep_later
7154                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7155
7156             if (keep_later < keep_earlier) {
7157                 cache[2] = cache[0];
7158                 cache[3] = cache[1];
7159                 cache[0] = utf8;
7160                 cache[1] = byte;
7161             }
7162             else {
7163                 cache[0] = utf8;
7164                 cache[1] = byte;
7165             }
7166         }
7167         else if (byte > cache[3]) {
7168             /* New position is between the existing pair of pairs.  */
7169             const float keep_earlier
7170                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7171             const float keep_later
7172                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7173
7174             if (keep_later < keep_earlier) {
7175                 cache[2] = utf8;
7176                 cache[3] = byte;
7177             }
7178             else {
7179                 cache[0] = utf8;
7180                 cache[1] = byte;
7181             }
7182         }
7183         else {
7184             /* New position is before the existing pair of pairs.  */
7185             const float keep_earlier
7186                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7187             const float keep_later
7188                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7189
7190             if (keep_later < keep_earlier) {
7191                 cache[2] = utf8;
7192                 cache[3] = byte;
7193             }
7194             else {
7195                 cache[0] = cache[2];
7196                 cache[1] = cache[3];
7197                 cache[2] = utf8;
7198                 cache[3] = byte;
7199             }
7200         }
7201     }
7202     ASSERT_UTF8_CACHE(cache);
7203 }
7204
7205 /* We already know all of the way, now we may be able to walk back.  The same
7206    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7207    backward is half the speed of walking forward. */
7208 static STRLEN
7209 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7210                     const U8 *end, STRLEN endu)
7211 {
7212     const STRLEN forw = target - s;
7213     STRLEN backw = end - target;
7214
7215     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7216
7217     if (forw < 2 * backw) {
7218         return utf8_length(s, target);
7219     }
7220
7221     while (end > target) {
7222         end--;
7223         while (UTF8_IS_CONTINUATION(*end)) {
7224             end--;
7225         }
7226         endu--;
7227     }
7228     return endu;
7229 }
7230
7231 /*
7232 =for apidoc sv_pos_b2u
7233
7234 Converts the value pointed to by offsetp from a count of bytes from the
7235 start of the string, to a count of the equivalent number of UTF-8 chars.
7236 Handles magic and type coercion.
7237
7238 =cut
7239 */
7240
7241 /*
7242  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7243  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7244  * byte offsets.
7245  *
7246  */
7247 void
7248 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7249 {
7250     const U8* s;
7251     const STRLEN byte = *offsetp;
7252     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7253     STRLEN blen;
7254     MAGIC* mg = NULL;
7255     const U8* send;
7256     bool found = FALSE;
7257
7258     PERL_ARGS_ASSERT_SV_POS_B2U;
7259
7260     if (!sv)
7261         return;
7262
7263     s = (const U8*)SvPV_const(sv, blen);
7264
7265     if (blen < byte)
7266         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7267                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7268
7269     send = s + byte;
7270
7271     if (!SvREADONLY(sv)
7272         && PL_utf8cache
7273         && SvTYPE(sv) >= SVt_PVMG
7274         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7275     {
7276         if (mg->mg_ptr) {
7277             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7278             if (cache[1] == byte) {
7279                 /* An exact match. */
7280                 *offsetp = cache[0];
7281                 return;
7282             }
7283             if (cache[3] == byte) {
7284                 /* An exact match. */
7285                 *offsetp = cache[2];
7286                 return;
7287             }
7288
7289             if (cache[1] < byte) {
7290                 /* We already know part of the way. */
7291                 if (mg->mg_len != -1) {
7292                     /* Actually, we know the end too.  */
7293                     len = cache[0]
7294                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7295                                               s + blen, mg->mg_len - cache[0]);
7296                 } else {
7297                     len = cache[0] + utf8_length(s + cache[1], send);
7298                 }
7299             }
7300             else if (cache[3] < byte) {
7301                 /* We're between the two cached pairs, so we do the calculation
7302                    offset by the byte/utf-8 positions for the earlier pair,
7303                    then add the utf-8 characters from the string start to
7304                    there.  */
7305                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7306                                           s + cache[1], cache[0] - cache[2])
7307                     + cache[2];
7308
7309             }
7310             else { /* cache[3] > byte */
7311                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7312                                           cache[2]);
7313
7314             }
7315             ASSERT_UTF8_CACHE(cache);
7316             found = TRUE;
7317         } else if (mg->mg_len != -1) {
7318             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7319             found = TRUE;
7320         }
7321     }
7322     if (!found || PL_utf8cache < 0) {
7323         const STRLEN real_len = utf8_length(s, send);
7324
7325         if (found && PL_utf8cache < 0)
7326             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7327         len = real_len;
7328     }
7329     *offsetp = len;
7330
7331     if (PL_utf8cache) {
7332         if (blen == byte)
7333             utf8_mg_len_cache_update(sv, &mg, len);
7334         else
7335             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7336     }
7337 }
7338
7339 static void
7340 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7341                              STRLEN real, SV *const sv)
7342 {
7343     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7344
7345     /* As this is debugging only code, save space by keeping this test here,
7346        rather than inlining it in all the callers.  */
7347     if (from_cache == real)
7348         return;
7349
7350     /* Need to turn the assertions off otherwise we may recurse infinitely
7351        while printing error messages.  */
7352     SAVEI8(PL_utf8cache);
7353     PL_utf8cache = 0;
7354     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7355                func, (UV) from_cache, (UV) real, SVfARG(sv));
7356 }
7357
7358 /*
7359 =for apidoc sv_eq
7360
7361 Returns a boolean indicating whether the strings in the two SVs are
7362 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7363 coerce its args to strings if necessary.
7364
7365 =for apidoc sv_eq_flags
7366
7367 Returns a boolean indicating whether the strings in the two SVs are
7368 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7369 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7370
7371 =cut
7372 */
7373
7374 I32
7375 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7376 {
7377     dVAR;
7378     const char *pv1;
7379     STRLEN cur1;
7380     const char *pv2;
7381     STRLEN cur2;
7382     I32  eq     = 0;
7383     SV* svrecode = NULL;
7384
7385     if (!sv1) {
7386         pv1 = "";
7387         cur1 = 0;
7388     }
7389     else {
7390         /* if pv1 and pv2 are the same, second SvPV_const call may
7391          * invalidate pv1 (if we are handling magic), so we may need to
7392          * make a copy */
7393         if (sv1 == sv2 && flags & SV_GMAGIC
7394          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7395             pv1 = SvPV_const(sv1, cur1);
7396             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7397         }
7398         pv1 = SvPV_flags_const(sv1, cur1, flags);
7399     }
7400
7401     if (!sv2){
7402         pv2 = "";
7403         cur2 = 0;
7404     }
7405     else
7406         pv2 = SvPV_flags_const(sv2, cur2, flags);
7407
7408     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7409         /* Differing utf8ness.
7410          * Do not UTF8size the comparands as a side-effect. */
7411          if (PL_encoding) {
7412               if (SvUTF8(sv1)) {
7413                    svrecode = newSVpvn(pv2, cur2);
7414                    sv_recode_to_utf8(svrecode, PL_encoding);
7415                    pv2 = SvPV_const(svrecode, cur2);
7416               }
7417               else {
7418                    svrecode = newSVpvn(pv1, cur1);
7419                    sv_recode_to_utf8(svrecode, PL_encoding);
7420                    pv1 = SvPV_const(svrecode, cur1);
7421               }
7422               /* Now both are in UTF-8. */
7423               if (cur1 != cur2) {
7424                    SvREFCNT_dec_NN(svrecode);
7425                    return FALSE;
7426               }
7427          }
7428          else {
7429               if (SvUTF8(sv1)) {
7430                   /* sv1 is the UTF-8 one  */
7431                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7432                                         (const U8*)pv1, cur1) == 0;
7433               }
7434               else {
7435                   /* sv2 is the UTF-8 one  */
7436                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7437                                         (const U8*)pv2, cur2) == 0;
7438               }
7439          }
7440     }
7441
7442     if (cur1 == cur2)
7443         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7444         
7445     SvREFCNT_dec(svrecode);
7446
7447     return eq;
7448 }
7449
7450 /*
7451 =for apidoc sv_cmp
7452
7453 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7454 string in C<sv1> is less than, equal to, or greater than the string in
7455 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7456 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7457
7458 =for apidoc sv_cmp_flags
7459
7460 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7461 string in C<sv1> is less than, equal to, or greater than the string in
7462 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7463 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7464 also C<sv_cmp_locale_flags>.
7465
7466 =cut
7467 */
7468
7469 I32
7470 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7471 {
7472     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7473 }
7474
7475 I32
7476 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7477                   const U32 flags)
7478 {
7479     dVAR;
7480     STRLEN cur1, cur2;
7481     const char *pv1, *pv2;
7482     I32  cmp;
7483     SV *svrecode = NULL;
7484
7485     if (!sv1) {
7486         pv1 = "";
7487         cur1 = 0;
7488     }
7489     else
7490         pv1 = SvPV_flags_const(sv1, cur1, flags);
7491
7492     if (!sv2) {
7493         pv2 = "";
7494         cur2 = 0;
7495     }
7496     else
7497         pv2 = SvPV_flags_const(sv2, cur2, flags);
7498
7499     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7500         /* Differing utf8ness.
7501          * Do not UTF8size the comparands as a side-effect. */
7502         if (SvUTF8(sv1)) {
7503             if (PL_encoding) {
7504                  svrecode = newSVpvn(pv2, cur2);
7505                  sv_recode_to_utf8(svrecode, PL_encoding);
7506                  pv2 = SvPV_const(svrecode, cur2);
7507             }
7508             else {
7509                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7510                                                    (const U8*)pv1, cur1);
7511                 return retval ? retval < 0 ? -1 : +1 : 0;
7512             }
7513         }
7514         else {
7515             if (PL_encoding) {
7516                  svrecode = newSVpvn(pv1, cur1);
7517                  sv_recode_to_utf8(svrecode, PL_encoding);
7518                  pv1 = SvPV_const(svrecode, cur1);
7519             }
7520             else {
7521                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7522                                                   (const U8*)pv2, cur2);
7523                 return retval ? retval < 0 ? -1 : +1 : 0;
7524             }
7525         }
7526     }
7527
7528     if (!cur1) {
7529         cmp = cur2 ? -1 : 0;
7530     } else if (!cur2) {
7531         cmp = 1;
7532     } else {
7533         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7534
7535         if (retval) {
7536             cmp = retval < 0 ? -1 : 1;
7537         } else if (cur1 == cur2) {
7538             cmp = 0;
7539         } else {
7540             cmp = cur1 < cur2 ? -1 : 1;
7541         }
7542     }
7543
7544     SvREFCNT_dec(svrecode);
7545
7546     return cmp;
7547 }
7548
7549 /*
7550 =for apidoc sv_cmp_locale
7551
7552 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7553 'use bytes' aware, handles get magic, and will coerce its args to strings
7554 if necessary.  See also C<sv_cmp>.
7555
7556 =for apidoc sv_cmp_locale_flags
7557
7558 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7559 'use bytes' aware and will coerce its args to strings if necessary.  If the
7560 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7561
7562 =cut
7563 */
7564
7565 I32
7566 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7567 {
7568     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7569 }
7570
7571 I32
7572 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7573                          const U32 flags)
7574 {
7575     dVAR;
7576 #ifdef USE_LOCALE_COLLATE
7577
7578     char *pv1, *pv2;
7579     STRLEN len1, len2;
7580     I32 retval;
7581
7582     if (PL_collation_standard)
7583         goto raw_compare;
7584
7585     len1 = 0;
7586     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7587     len2 = 0;
7588     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7589
7590     if (!pv1 || !len1) {
7591         if (pv2 && len2)
7592             return -1;
7593         else
7594             goto raw_compare;
7595     }
7596     else {
7597         if (!pv2 || !len2)
7598             return 1;
7599     }
7600
7601     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7602
7603     if (retval)
7604         return retval < 0 ? -1 : 1;
7605
7606     /*
7607      * When the result of collation is equality, that doesn't mean
7608      * that there are no differences -- some locales exclude some
7609      * characters from consideration.  So to avoid false equalities,
7610      * we use the raw string as a tiebreaker.
7611      */
7612
7613   raw_compare:
7614     /*FALLTHROUGH*/
7615
7616 #endif /* USE_LOCALE_COLLATE */
7617
7618     return sv_cmp(sv1, sv2);
7619 }
7620
7621
7622 #ifdef USE_LOCALE_COLLATE
7623
7624 /*
7625 =for apidoc sv_collxfrm
7626
7627 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7628 C<sv_collxfrm_flags>.
7629
7630 =for apidoc sv_collxfrm_flags
7631
7632 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7633 flags contain SV_GMAGIC, it handles get-magic.
7634
7635 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7636 scalar data of the variable, but transformed to such a format that a normal
7637 memory comparison can be used to compare the data according to the locale
7638 settings.
7639
7640 =cut
7641 */
7642
7643 char *
7644 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7645 {
7646     dVAR;
7647     MAGIC *mg;
7648
7649     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7650
7651     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7652     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7653         const char *s;
7654         char *xf;
7655         STRLEN len, xlen;
7656
7657         if (mg)
7658             Safefree(mg->mg_ptr);
7659         s = SvPV_flags_const(sv, len, flags);
7660         if ((xf = mem_collxfrm(s, len, &xlen))) {
7661             if (! mg) {
7662 #ifdef PERL_OLD_COPY_ON_WRITE
7663                 if (SvIsCOW(sv))
7664                     sv_force_normal_flags(sv, 0);
7665 #endif
7666                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7667                                  0, 0);
7668                 assert(mg);
7669             }
7670             mg->mg_ptr = xf;
7671             mg->mg_len = xlen;
7672         }
7673         else {
7674             if (mg) {
7675                 mg->mg_ptr = NULL;
7676                 mg->mg_len = -1;
7677             }
7678         }
7679     }
7680     if (mg && mg->mg_ptr) {
7681         *nxp = mg->mg_len;
7682         return mg->mg_ptr + sizeof(PL_collation_ix);
7683     }
7684     else {
7685         *nxp = 0;
7686         return NULL;
7687     }
7688 }
7689
7690 #endif /* USE_LOCALE_COLLATE */
7691
7692 static char *
7693 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7694 {
7695     SV * const tsv = newSV(0);
7696     ENTER;
7697     SAVEFREESV(tsv);
7698     sv_gets(tsv, fp, 0);
7699     sv_utf8_upgrade_nomg(tsv);
7700     SvCUR_set(sv,append);
7701     sv_catsv(sv,tsv);
7702     LEAVE;
7703     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7704 }
7705
7706 static char *
7707 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7708 {
7709     SSize_t bytesread;
7710     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7711       /* Grab the size of the record we're getting */
7712     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7713     
7714     /* Go yank in */
7715 #ifdef VMS
7716 #include <rms.h>
7717     int fd;
7718     Stat_t st;
7719
7720     /* With a true, record-oriented file on VMS, we need to use read directly
7721      * to ensure that we respect RMS record boundaries.  The user is responsible
7722      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7723      * record size) field.  N.B. This is likely to produce invalid results on
7724      * varying-width character data when a record ends mid-character.
7725      */
7726     fd = PerlIO_fileno(fp);
7727     if (fd != -1
7728         && PerlLIO_fstat(fd, &st) == 0
7729         && (st.st_fab_rfm == FAB$C_VAR
7730             || st.st_fab_rfm == FAB$C_VFC
7731             || st.st_fab_rfm == FAB$C_FIX)) {
7732
7733         bytesread = PerlLIO_read(fd, buffer, recsize);
7734     }
7735     else /* in-memory file from PerlIO::Scalar
7736           * or not a record-oriented file
7737           */
7738 #endif
7739     {
7740         bytesread = PerlIO_read(fp, buffer, recsize);
7741
7742         /* At this point, the logic in sv_get() means that sv will
7743            be treated as utf-8 if the handle is utf8.
7744         */
7745         if (PerlIO_isutf8(fp) && bytesread > 0) {
7746             char *bend = buffer + bytesread;
7747             char *bufp = buffer;
7748             size_t charcount = 0;
7749             bool charstart = TRUE;
7750             STRLEN skip = 0;
7751
7752             while (charcount < recsize) {
7753                 /* count accumulated characters */
7754                 while (bufp < bend) {
7755                     if (charstart) {
7756                         skip = UTF8SKIP(bufp);
7757                     }
7758                     if (bufp + skip > bend) {
7759                         /* partial at the end */
7760                         charstart = FALSE;
7761                         break;
7762                     }
7763                     else {
7764                         ++charcount;
7765                         bufp += skip;
7766                         charstart = TRUE;
7767                     }
7768                 }
7769
7770                 if (charcount < recsize) {
7771                     STRLEN readsize;
7772                     STRLEN bufp_offset = bufp - buffer;
7773                     SSize_t morebytesread;
7774
7775                     /* originally I read enough to fill any incomplete
7776                        character and the first byte of the next
7777                        character if needed, but if there's many
7778                        multi-byte encoded characters we're going to be
7779                        making a read call for every character beyond
7780                        the original read size.
7781
7782                        So instead, read the rest of the character if
7783                        any, and enough bytes to match at least the
7784                        start bytes for each character we're going to
7785                        read.
7786                     */
7787                     if (charstart)
7788                         readsize = recsize - charcount;
7789                     else 
7790                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7791                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7792                     bend = buffer + bytesread;
7793                     morebytesread = PerlIO_read(fp, bend, readsize);
7794                     if (morebytesread <= 0) {
7795                         /* we're done, if we still have incomplete
7796                            characters the check code in sv_gets() will
7797                            warn about them.
7798
7799                            I'd originally considered doing
7800                            PerlIO_ungetc() on all but the lead
7801                            character of the incomplete character, but
7802                            read() doesn't do that, so I don't.
7803                         */
7804                         break;
7805                     }
7806
7807                     /* prepare to scan some more */
7808                     bytesread += morebytesread;
7809                     bend = buffer + bytesread;
7810                     bufp = buffer + bufp_offset;
7811                 }
7812             }
7813         }
7814     }
7815
7816     if (bytesread < 0)
7817         bytesread = 0;
7818     SvCUR_set(sv, bytesread + append);
7819     buffer[bytesread] = '\0';
7820     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7821 }
7822
7823 /*
7824 =for apidoc sv_gets
7825
7826 Get a line from the filehandle and store it into the SV, optionally
7827 appending to the currently-stored string. If C<append> is not 0, the
7828 line is appended to the SV instead of overwriting it. C<append> should
7829 be set to the byte offset that the appended string should start at
7830 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7831
7832 =cut
7833 */
7834
7835 char *
7836 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7837 {
7838     dVAR;
7839     const char *rsptr;
7840     STRLEN rslen;
7841     STDCHAR rslast;
7842     STDCHAR *bp;
7843     I32 cnt;
7844     I32 i = 0;
7845     I32 rspara = 0;
7846
7847     PERL_ARGS_ASSERT_SV_GETS;
7848
7849     if (SvTHINKFIRST(sv))
7850         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7851     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7852        from <>.
7853        However, perlbench says it's slower, because the existing swipe code
7854        is faster than copy on write.
7855        Swings and roundabouts.  */
7856     SvUPGRADE(sv, SVt_PV);
7857
7858     if (append) {
7859         if (PerlIO_isutf8(fp)) {
7860             if (!SvUTF8(sv)) {
7861                 sv_utf8_upgrade_nomg(sv);
7862                 sv_pos_u2b(sv,&append,0);
7863             }
7864         } else if (SvUTF8(sv)) {
7865             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7866         }
7867     }
7868
7869     SvPOK_only(sv);
7870     if (!append) {
7871         SvCUR_set(sv,0);
7872     }
7873     if (PerlIO_isutf8(fp))
7874         SvUTF8_on(sv);
7875
7876     if (IN_PERL_COMPILETIME) {
7877         /* we always read code in line mode */
7878         rsptr = "\n";
7879         rslen = 1;
7880     }
7881     else if (RsSNARF(PL_rs)) {
7882         /* If it is a regular disk file use size from stat() as estimate
7883            of amount we are going to read -- may result in mallocing
7884            more memory than we really need if the layers below reduce
7885            the size we read (e.g. CRLF or a gzip layer).
7886          */
7887         Stat_t st;
7888         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7889             const Off_t offset = PerlIO_tell(fp);
7890             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7891                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7892             }
7893         }
7894         rsptr = NULL;
7895         rslen = 0;
7896     }
7897     else if (RsRECORD(PL_rs)) {
7898         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7899     }
7900     else if (RsPARA(PL_rs)) {
7901         rsptr = "\n\n";
7902         rslen = 2;
7903         rspara = 1;
7904     }
7905     else {
7906         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7907         if (PerlIO_isutf8(fp)) {
7908             rsptr = SvPVutf8(PL_rs, rslen);
7909         }
7910         else {
7911             if (SvUTF8(PL_rs)) {
7912                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7913                     Perl_croak(aTHX_ "Wide character in $/");
7914                 }
7915             }
7916             rsptr = SvPV_const(PL_rs, rslen);
7917         }
7918     }
7919
7920     rslast = rslen ? rsptr[rslen - 1] : '\0';
7921
7922     if (rspara) {               /* have to do this both before and after */
7923         do {                    /* to make sure file boundaries work right */
7924             if (PerlIO_eof(fp))
7925                 return 0;
7926             i = PerlIO_getc(fp);
7927             if (i != '\n') {
7928                 if (i == -1)
7929                     return 0;
7930                 PerlIO_ungetc(fp,i);
7931                 break;
7932             }
7933         } while (i != EOF);
7934     }
7935
7936     /* See if we know enough about I/O mechanism to cheat it ! */
7937
7938     /* This used to be #ifdef test - it is made run-time test for ease
7939        of abstracting out stdio interface. One call should be cheap
7940        enough here - and may even be a macro allowing compile
7941        time optimization.
7942      */
7943
7944     if (PerlIO_fast_gets(fp)) {
7945
7946     /*
7947      * We're going to steal some values from the stdio struct
7948      * and put EVERYTHING in the innermost loop into registers.
7949      */
7950     STDCHAR *ptr;
7951     STRLEN bpx;
7952     I32 shortbuffered;
7953
7954 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7955     /* An ungetc()d char is handled separately from the regular
7956      * buffer, so we getc() it back out and stuff it in the buffer.
7957      */
7958     i = PerlIO_getc(fp);
7959     if (i == EOF) return 0;
7960     *(--((*fp)->_ptr)) = (unsigned char) i;
7961     (*fp)->_cnt++;
7962 #endif
7963
7964     /* Here is some breathtakingly efficient cheating */
7965
7966     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7967     /* make sure we have the room */
7968     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7969         /* Not room for all of it
7970            if we are looking for a separator and room for some
7971          */
7972         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7973             /* just process what we have room for */
7974             shortbuffered = cnt - SvLEN(sv) + append + 1;
7975             cnt -= shortbuffered;
7976         }
7977         else {
7978             shortbuffered = 0;
7979             /* remember that cnt can be negative */
7980             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7981         }
7982     }
7983     else
7984         shortbuffered = 0;
7985     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7986     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7987     DEBUG_P(PerlIO_printf(Perl_debug_log,
7988         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7989     DEBUG_P(PerlIO_printf(Perl_debug_log,
7990         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7991                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7992                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7993     for (;;) {
7994       screamer:
7995         if (cnt > 0) {
7996             if (rslen) {
7997                 while (cnt > 0) {                    /* this     |  eat */
7998                     cnt--;
7999                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8000                         goto thats_all_folks;        /* screams  |  sed :-) */
8001                 }
8002             }
8003             else {
8004                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8005                 bp += cnt;                           /* screams  |  dust */
8006                 ptr += cnt;                          /* louder   |  sed :-) */
8007                 cnt = 0;
8008                 assert (!shortbuffered);
8009                 goto cannot_be_shortbuffered;
8010             }
8011         }
8012         
8013         if (shortbuffered) {            /* oh well, must extend */
8014             cnt = shortbuffered;
8015             shortbuffered = 0;
8016             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8017             SvCUR_set(sv, bpx);
8018             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8019             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8020             continue;
8021         }
8022
8023     cannot_be_shortbuffered:
8024         DEBUG_P(PerlIO_printf(Perl_debug_log,
8025                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
8026                               PTR2UV(ptr),(long)cnt));
8027         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8028
8029         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8030             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8031             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8032             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8033
8034         /* This used to call 'filbuf' in stdio form, but as that behaves like
8035            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8036            another abstraction.  */
8037         i   = PerlIO_getc(fp);          /* get more characters */
8038
8039         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8040             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8041             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8042             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8043
8044         cnt = PerlIO_get_cnt(fp);
8045         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8046         DEBUG_P(PerlIO_printf(Perl_debug_log,
8047             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8048
8049         if (i == EOF)                   /* all done for ever? */
8050             goto thats_really_all_folks;
8051
8052         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8053         SvCUR_set(sv, bpx);
8054         SvGROW(sv, bpx + cnt + 2);
8055         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8056
8057         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8058
8059         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8060             goto thats_all_folks;
8061     }
8062
8063 thats_all_folks:
8064     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8065           memNE((char*)bp - rslen, rsptr, rslen))
8066         goto screamer;                          /* go back to the fray */
8067 thats_really_all_folks:
8068     if (shortbuffered)
8069         cnt += shortbuffered;
8070         DEBUG_P(PerlIO_printf(Perl_debug_log,
8071             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8072     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8073     DEBUG_P(PerlIO_printf(Perl_debug_log,
8074         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8075         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8076         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8077     *bp = '\0';
8078     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8079     DEBUG_P(PerlIO_printf(Perl_debug_log,
8080         "Screamer: done, len=%ld, string=|%.*s|\n",
8081         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8082     }
8083    else
8084     {
8085        /*The big, slow, and stupid way. */
8086 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8087         STDCHAR *buf = NULL;
8088         Newx(buf, 8192, STDCHAR);
8089         assert(buf);
8090 #else
8091         STDCHAR buf[8192];
8092 #endif
8093
8094 screamer2:
8095         if (rslen) {
8096             const STDCHAR * const bpe = buf + sizeof(buf);
8097             bp = buf;
8098             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8099                 ; /* keep reading */
8100             cnt = bp - buf;
8101         }
8102         else {
8103             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8104             /* Accommodate broken VAXC compiler, which applies U8 cast to
8105              * both args of ?: operator, causing EOF to change into 255
8106              */
8107             if (cnt > 0)
8108                  i = (U8)buf[cnt - 1];
8109             else
8110                  i = EOF;
8111         }
8112
8113         if (cnt < 0)
8114             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8115         if (append)
8116             sv_catpvn_nomg(sv, (char *) buf, cnt);
8117         else
8118             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8119
8120         if (i != EOF &&                 /* joy */
8121             (!rslen ||
8122              SvCUR(sv) < rslen ||
8123              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8124         {
8125             append = -1;
8126             /*
8127              * If we're reading from a TTY and we get a short read,
8128              * indicating that the user hit his EOF character, we need
8129              * to notice it now, because if we try to read from the TTY
8130              * again, the EOF condition will disappear.
8131              *
8132              * The comparison of cnt to sizeof(buf) is an optimization
8133              * that prevents unnecessary calls to feof().
8134              *
8135              * - jik 9/25/96
8136              */
8137             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8138                 goto screamer2;
8139         }
8140
8141 #ifdef USE_HEAP_INSTEAD_OF_STACK
8142         Safefree(buf);
8143 #endif
8144     }
8145
8146     if (rspara) {               /* have to do this both before and after */
8147         while (i != EOF) {      /* to make sure file boundaries work right */
8148             i = PerlIO_getc(fp);
8149             if (i != '\n') {
8150                 PerlIO_ungetc(fp,i);
8151                 break;
8152             }
8153         }
8154     }
8155
8156     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8157 }
8158
8159 /*
8160 =for apidoc sv_inc
8161
8162 Auto-increment of the value in the SV, doing string to numeric conversion
8163 if necessary.  Handles 'get' magic and operator overloading.
8164
8165 =cut
8166 */
8167
8168 void
8169 Perl_sv_inc(pTHX_ SV *const sv)
8170 {
8171     if (!sv)
8172         return;
8173     SvGETMAGIC(sv);
8174     sv_inc_nomg(sv);
8175 }
8176
8177 /*
8178 =for apidoc sv_inc_nomg
8179
8180 Auto-increment of the value in the SV, doing string to numeric conversion
8181 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8182
8183 =cut
8184 */
8185
8186 void
8187 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8188 {
8189     dVAR;
8190     char *d;
8191     int flags;
8192
8193     if (!sv)
8194         return;
8195     if (SvTHINKFIRST(sv)) {
8196         if (SvIsCOW(sv) || isGV_with_GP(sv))
8197             sv_force_normal_flags(sv, 0);
8198         if (SvREADONLY(sv)) {
8199             if (IN_PERL_RUNTIME)
8200                 Perl_croak_no_modify();
8201         }
8202         if (SvROK(sv)) {
8203             IV i;
8204             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8205                 return;
8206             i = PTR2IV(SvRV(sv));
8207             sv_unref(sv);
8208             sv_setiv(sv, i);
8209         }
8210     }
8211     flags = SvFLAGS(sv);
8212     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8213         /* It's (privately or publicly) a float, but not tested as an
8214            integer, so test it to see. */
8215         (void) SvIV(sv);
8216         flags = SvFLAGS(sv);
8217     }
8218     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8219         /* It's publicly an integer, or privately an integer-not-float */
8220 #ifdef PERL_PRESERVE_IVUV
8221       oops_its_int:
8222 #endif
8223         if (SvIsUV(sv)) {
8224             if (SvUVX(sv) == UV_MAX)
8225                 sv_setnv(sv, UV_MAX_P1);
8226             else
8227                 (void)SvIOK_only_UV(sv);
8228                 SvUV_set(sv, SvUVX(sv) + 1);
8229         } else {
8230             if (SvIVX(sv) == IV_MAX)
8231                 sv_setuv(sv, (UV)IV_MAX + 1);
8232             else {
8233                 (void)SvIOK_only(sv);
8234                 SvIV_set(sv, SvIVX(sv) + 1);
8235             }   
8236         }
8237         return;
8238     }
8239     if (flags & SVp_NOK) {
8240         const NV was = SvNVX(sv);
8241         if (NV_OVERFLOWS_INTEGERS_AT &&
8242             was >= NV_OVERFLOWS_INTEGERS_AT) {
8243             /* diag_listed_as: Lost precision when %s %f by 1 */
8244             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8245                            "Lost precision when incrementing %" NVff " by 1",
8246                            was);
8247         }
8248         (void)SvNOK_only(sv);
8249         SvNV_set(sv, was + 1.0);
8250         return;
8251     }
8252
8253     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8254         if ((flags & SVTYPEMASK) < SVt_PVIV)
8255             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8256         (void)SvIOK_only(sv);
8257         SvIV_set(sv, 1);
8258         return;
8259     }
8260     d = SvPVX(sv);
8261     while (isALPHA(*d)) d++;
8262     while (isDIGIT(*d)) d++;
8263     if (d < SvEND(sv)) {
8264 #ifdef PERL_PRESERVE_IVUV
8265         /* Got to punt this as an integer if needs be, but we don't issue
8266            warnings. Probably ought to make the sv_iv_please() that does
8267            the conversion if possible, and silently.  */
8268         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8269         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8270             /* Need to try really hard to see if it's an integer.
8271                9.22337203685478e+18 is an integer.
8272                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8273                so $a="9.22337203685478e+18"; $a+0; $a++
8274                needs to be the same as $a="9.22337203685478e+18"; $a++
8275                or we go insane. */
8276         
8277             (void) sv_2iv(sv);
8278             if (SvIOK(sv))
8279                 goto oops_its_int;
8280
8281             /* sv_2iv *should* have made this an NV */
8282             if (flags & SVp_NOK) {
8283                 (void)SvNOK_only(sv);
8284                 SvNV_set(sv, SvNVX(sv) + 1.0);
8285                 return;
8286             }
8287             /* I don't think we can get here. Maybe I should assert this
8288                And if we do get here I suspect that sv_setnv will croak. NWC
8289                Fall through. */
8290 #if defined(USE_LONG_DOUBLE)
8291             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",
8292                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8293 #else
8294             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8295                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8296 #endif
8297         }
8298 #endif /* PERL_PRESERVE_IVUV */
8299         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8300         return;
8301     }
8302     d--;
8303     while (d >= SvPVX_const(sv)) {
8304         if (isDIGIT(*d)) {
8305             if (++*d <= '9')
8306                 return;
8307             *(d--) = '0';
8308         }
8309         else {
8310 #ifdef EBCDIC
8311             /* MKS: The original code here died if letters weren't consecutive.
8312              * at least it didn't have to worry about non-C locales.  The
8313              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8314              * arranged in order (although not consecutively) and that only
8315              * [A-Za-z] are accepted by isALPHA in the C locale.
8316              */
8317             if (*d != 'z' && *d != 'Z') {
8318                 do { ++*d; } while (!isALPHA(*d));
8319                 return;
8320             }
8321             *(d--) -= 'z' - 'a';
8322 #else
8323             ++*d;
8324             if (isALPHA(*d))
8325                 return;
8326             *(d--) -= 'z' - 'a' + 1;
8327 #endif
8328         }
8329     }
8330     /* oh,oh, the number grew */
8331     SvGROW(sv, SvCUR(sv) + 2);
8332     SvCUR_set(sv, SvCUR(sv) + 1);
8333     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8334         *d = d[-1];
8335     if (isDIGIT(d[1]))
8336         *d = '1';
8337     else
8338         *d = d[1];
8339 }
8340
8341 /*
8342 =for apidoc sv_dec
8343
8344 Auto-decrement of the value in the SV, doing string to numeric conversion
8345 if necessary.  Handles 'get' magic and operator overloading.
8346
8347 =cut
8348 */
8349
8350 void
8351 Perl_sv_dec(pTHX_ SV *const sv)
8352 {
8353     dVAR;
8354     if (!sv)
8355         return;
8356     SvGETMAGIC(sv);
8357     sv_dec_nomg(sv);
8358 }
8359
8360 /*
8361 =for apidoc sv_dec_nomg
8362
8363 Auto-decrement of the value in the SV, doing string to numeric conversion
8364 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8365
8366 =cut
8367 */
8368
8369 void
8370 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8371 {
8372     dVAR;
8373     int flags;
8374
8375     if (!sv)
8376         return;
8377     if (SvTHINKFIRST(sv)) {
8378         if (SvIsCOW(sv) || isGV_with_GP(sv))
8379             sv_force_normal_flags(sv, 0);
8380         if (SvREADONLY(sv)) {
8381             if (IN_PERL_RUNTIME)
8382                 Perl_croak_no_modify();
8383         }
8384         if (SvROK(sv)) {
8385             IV i;
8386             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8387                 return;
8388             i = PTR2IV(SvRV(sv));
8389             sv_unref(sv);
8390             sv_setiv(sv, i);
8391         }
8392     }
8393     /* Unlike sv_inc we don't have to worry about string-never-numbers
8394        and keeping them magic. But we mustn't warn on punting */
8395     flags = SvFLAGS(sv);
8396     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8397         /* It's publicly an integer, or privately an integer-not-float */
8398 #ifdef PERL_PRESERVE_IVUV
8399       oops_its_int:
8400 #endif
8401         if (SvIsUV(sv)) {
8402             if (SvUVX(sv) == 0) {
8403                 (void)SvIOK_only(sv);
8404                 SvIV_set(sv, -1);
8405             }
8406             else {
8407                 (void)SvIOK_only_UV(sv);
8408                 SvUV_set(sv, SvUVX(sv) - 1);
8409             }   
8410         } else {
8411             if (SvIVX(sv) == IV_MIN) {
8412                 sv_setnv(sv, (NV)IV_MIN);
8413                 goto oops_its_num;
8414             }
8415             else {
8416                 (void)SvIOK_only(sv);
8417                 SvIV_set(sv, SvIVX(sv) - 1);
8418             }   
8419         }
8420         return;
8421     }
8422     if (flags & SVp_NOK) {
8423     oops_its_num:
8424         {
8425             const NV was = SvNVX(sv);
8426             if (NV_OVERFLOWS_INTEGERS_AT &&
8427                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8428                 /* diag_listed_as: Lost precision when %s %f by 1 */
8429                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8430                                "Lost precision when decrementing %" NVff " by 1",
8431                                was);
8432             }
8433             (void)SvNOK_only(sv);
8434             SvNV_set(sv, was - 1.0);
8435             return;
8436         }
8437     }
8438     if (!(flags & SVp_POK)) {
8439         if ((flags & SVTYPEMASK) < SVt_PVIV)
8440             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8441         SvIV_set(sv, -1);
8442         (void)SvIOK_only(sv);
8443         return;
8444     }
8445 #ifdef PERL_PRESERVE_IVUV
8446     {
8447         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8448         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8449             /* Need to try really hard to see if it's an integer.
8450                9.22337203685478e+18 is an integer.
8451                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8452                so $a="9.22337203685478e+18"; $a+0; $a--
8453                needs to be the same as $a="9.22337203685478e+18"; $a--
8454                or we go insane. */
8455         
8456             (void) sv_2iv(sv);
8457             if (SvIOK(sv))
8458                 goto oops_its_int;
8459
8460             /* sv_2iv *should* have made this an NV */
8461             if (flags & SVp_NOK) {
8462                 (void)SvNOK_only(sv);
8463                 SvNV_set(sv, SvNVX(sv) - 1.0);
8464                 return;
8465             }
8466             /* I don't think we can get here. Maybe I should assert this
8467                And if we do get here I suspect that sv_setnv will croak. NWC
8468                Fall through. */
8469 #if defined(USE_LONG_DOUBLE)
8470             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",
8471                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8472 #else
8473             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8474                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8475 #endif
8476         }
8477     }
8478 #endif /* PERL_PRESERVE_IVUV */
8479     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8480 }
8481
8482 /* this define is used to eliminate a chunk of duplicated but shared logic
8483  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8484  * used anywhere but here - yves
8485  */
8486 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8487     STMT_START {      \
8488         EXTEND_MORTAL(1); \
8489         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8490     } STMT_END
8491
8492 /*
8493 =for apidoc sv_mortalcopy
8494
8495 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8496 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8497 explicit call to FREETMPS, or by an implicit call at places such as
8498 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8499
8500 =cut
8501 */
8502
8503 /* Make a string that will exist for the duration of the expression
8504  * evaluation.  Actually, it may have to last longer than that, but
8505  * hopefully we won't free it until it has been assigned to a
8506  * permanent location. */
8507
8508 SV *
8509 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8510 {
8511     dVAR;
8512     SV *sv;
8513
8514     if (flags & SV_GMAGIC)
8515         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8516     new_SV(sv);
8517     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8518     PUSH_EXTEND_MORTAL__SV_C(sv);
8519     SvTEMP_on(sv);
8520     return sv;
8521 }
8522
8523 /*
8524 =for apidoc sv_newmortal
8525
8526 Creates a new null SV which is mortal.  The reference count of the SV is
8527 set to 1.  It will be destroyed "soon", either by an explicit call to
8528 FREETMPS, or by an implicit call at places such as statement boundaries.
8529 See also C<sv_mortalcopy> and C<sv_2mortal>.
8530
8531 =cut
8532 */
8533
8534 SV *
8535 Perl_sv_newmortal(pTHX)
8536 {
8537     dVAR;
8538     SV *sv;
8539
8540     new_SV(sv);
8541     SvFLAGS(sv) = SVs_TEMP;
8542     PUSH_EXTEND_MORTAL__SV_C(sv);
8543     return sv;
8544 }
8545
8546
8547 /*
8548 =for apidoc newSVpvn_flags
8549
8550 Creates a new SV and copies a string into it.  The reference count for the
8551 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8552 string.  You are responsible for ensuring that the source string is at least
8553 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8554 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8555 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8556 returning.  If C<SVf_UTF8> is set, C<s>
8557 is considered to be in UTF-8 and the
8558 C<SVf_UTF8> flag will be set on the new SV.
8559 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8560
8561     #define newSVpvn_utf8(s, len, u)                    \
8562         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8563
8564 =cut
8565 */
8566
8567 SV *
8568 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8569 {
8570     dVAR;
8571     SV *sv;
8572
8573     /* All the flags we don't support must be zero.
8574        And we're new code so I'm going to assert this from the start.  */
8575     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8576     new_SV(sv);
8577     sv_setpvn(sv,s,len);
8578
8579     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8580      * and do what it does ourselves here.
8581      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8582      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8583      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8584      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8585      */
8586
8587     SvFLAGS(sv) |= flags;
8588
8589     if(flags & SVs_TEMP){
8590         PUSH_EXTEND_MORTAL__SV_C(sv);
8591     }
8592
8593     return sv;
8594 }
8595
8596 /*
8597 =for apidoc sv_2mortal
8598
8599 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8600 by an explicit call to FREETMPS, or by an implicit call at places such as
8601 statement boundaries.  SvTEMP() is turned on which means that the SV's
8602 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8603 and C<sv_mortalcopy>.
8604
8605 =cut
8606 */
8607
8608 SV *
8609 Perl_sv_2mortal(pTHX_ SV *const sv)
8610 {
8611     dVAR;
8612     if (!sv)
8613         return NULL;
8614     if (SvIMMORTAL(sv))
8615         return sv;
8616     PUSH_EXTEND_MORTAL__SV_C(sv);
8617     SvTEMP_on(sv);
8618     return sv;
8619 }
8620
8621 /*
8622 =for apidoc newSVpv
8623
8624 Creates a new SV and copies a string into it.  The reference count for the
8625 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8626 strlen().  For efficiency, consider using C<newSVpvn> instead.
8627
8628 =cut
8629 */
8630
8631 SV *
8632 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8633 {
8634     dVAR;
8635     SV *sv;
8636
8637     new_SV(sv);
8638     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8639     return sv;
8640 }
8641
8642 /*
8643 =for apidoc newSVpvn
8644
8645 Creates a new SV and copies a buffer into it, which may contain NUL characters
8646 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8647 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8648 are responsible for ensuring that the source buffer is at least
8649 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8650 undefined.
8651
8652 =cut
8653 */
8654
8655 SV *
8656 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8657 {
8658     dVAR;
8659     SV *sv;
8660
8661     new_SV(sv);
8662     sv_setpvn(sv,buffer,len);
8663     return sv;
8664 }
8665
8666 /*
8667 =for apidoc newSVhek
8668
8669 Creates a new SV from the hash key structure.  It will generate scalars that
8670 point to the shared string table where possible.  Returns a new (undefined)
8671 SV if the hek is NULL.
8672
8673 =cut
8674 */
8675
8676 SV *
8677 Perl_newSVhek(pTHX_ const HEK *const hek)
8678 {
8679     dVAR;
8680     if (!hek) {
8681         SV *sv;
8682
8683         new_SV(sv);
8684         return sv;
8685     }
8686
8687     if (HEK_LEN(hek) == HEf_SVKEY) {
8688         return newSVsv(*(SV**)HEK_KEY(hek));
8689     } else {
8690         const int flags = HEK_FLAGS(hek);
8691         if (flags & HVhek_WASUTF8) {
8692             /* Trouble :-)
8693                Andreas would like keys he put in as utf8 to come back as utf8
8694             */
8695             STRLEN utf8_len = HEK_LEN(hek);
8696             SV * const sv = newSV_type(SVt_PV);
8697             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8698             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8699             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8700             SvUTF8_on (sv);
8701             return sv;
8702         } else if (flags & HVhek_UNSHARED) {
8703             /* A hash that isn't using shared hash keys has to have
8704                the flag in every key so that we know not to try to call
8705                share_hek_hek on it.  */
8706
8707             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8708             if (HEK_UTF8(hek))
8709                 SvUTF8_on (sv);
8710             return sv;
8711         }
8712         /* This will be overwhelminly the most common case.  */
8713         {
8714             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8715                more efficient than sharepvn().  */
8716             SV *sv;
8717
8718             new_SV(sv);
8719             sv_upgrade(sv, SVt_PV);
8720             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8721             SvCUR_set(sv, HEK_LEN(hek));
8722             SvLEN_set(sv, 0);
8723             SvIsCOW_on(sv);
8724             SvPOK_on(sv);
8725             if (HEK_UTF8(hek))
8726                 SvUTF8_on(sv);
8727             return sv;
8728         }
8729     }
8730 }
8731
8732 /*
8733 =for apidoc newSVpvn_share
8734
8735 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8736 table.  If the string does not already exist in the table, it is
8737 created first.  Turns on the SvIsCOW flag (or READONLY
8738 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8739 is non-zero, that value is used; otherwise the hash is computed.
8740 The string's hash can later be retrieved from the SV
8741 with the C<SvSHARED_HASH()> macro.  The idea here is
8742 that as the string table is used for shared hash keys these strings will have
8743 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8744
8745 =cut
8746 */
8747
8748 SV *
8749 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8750 {
8751     dVAR;
8752     SV *sv;
8753     bool is_utf8 = FALSE;
8754     const char *const orig_src = src;
8755
8756     if (len < 0) {
8757         STRLEN tmplen = -len;
8758         is_utf8 = TRUE;
8759         /* See the note in hv.c:hv_fetch() --jhi */
8760         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8761         len = tmplen;
8762     }
8763     if (!hash)
8764         PERL_HASH(hash, src, len);
8765     new_SV(sv);
8766     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8767        changes here, update it there too.  */
8768     sv_upgrade(sv, SVt_PV);
8769     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8770     SvCUR_set(sv, len);
8771     SvLEN_set(sv, 0);
8772     SvIsCOW_on(sv);
8773     SvPOK_on(sv);
8774     if (is_utf8)
8775         SvUTF8_on(sv);
8776     if (src != orig_src)
8777         Safefree(src);
8778     return sv;
8779 }
8780
8781 /*
8782 =for apidoc newSVpv_share
8783
8784 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8785 string/length pair.
8786
8787 =cut
8788 */
8789
8790 SV *
8791 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8792 {
8793     return newSVpvn_share(src, strlen(src), hash);
8794 }
8795
8796 #if defined(PERL_IMPLICIT_CONTEXT)
8797
8798 /* pTHX_ magic can't cope with varargs, so this is a no-context
8799  * version of the main function, (which may itself be aliased to us).
8800  * Don't access this version directly.
8801  */
8802
8803 SV *
8804 Perl_newSVpvf_nocontext(const char *const pat, ...)
8805 {
8806     dTHX;
8807     SV *sv;
8808     va_list args;
8809
8810     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8811
8812     va_start(args, pat);
8813     sv = vnewSVpvf(pat, &args);
8814     va_end(args);
8815     return sv;
8816 }
8817 #endif
8818
8819 /*
8820 =for apidoc newSVpvf
8821
8822 Creates a new SV and initializes it with the string formatted like
8823 C<sprintf>.
8824
8825 =cut
8826 */
8827
8828 SV *
8829 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8830 {
8831     SV *sv;
8832     va_list args;
8833
8834     PERL_ARGS_ASSERT_NEWSVPVF;
8835
8836     va_start(args, pat);
8837     sv = vnewSVpvf(pat, &args);
8838     va_end(args);
8839     return sv;
8840 }
8841
8842 /* backend for newSVpvf() and newSVpvf_nocontext() */
8843
8844 SV *
8845 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8846 {
8847     dVAR;
8848     SV *sv;
8849
8850     PERL_ARGS_ASSERT_VNEWSVPVF;
8851
8852     new_SV(sv);
8853     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8854     return sv;
8855 }
8856
8857 /*
8858 =for apidoc newSVnv
8859
8860 Creates a new SV and copies a floating point value into it.
8861 The reference count for the SV is set to 1.
8862
8863 =cut
8864 */
8865
8866 SV *
8867 Perl_newSVnv(pTHX_ const NV n)
8868 {
8869     dVAR;
8870     SV *sv;
8871
8872     new_SV(sv);
8873     sv_setnv(sv,n);
8874     return sv;
8875 }
8876
8877 /*
8878 =for apidoc newSViv
8879
8880 Creates a new SV and copies an integer into it.  The reference count for the
8881 SV is set to 1.
8882
8883 =cut
8884 */
8885
8886 SV *
8887 Perl_newSViv(pTHX_ const IV i)
8888 {
8889     dVAR;
8890     SV *sv;
8891
8892     new_SV(sv);
8893     sv_setiv(sv,i);
8894     return sv;
8895 }
8896
8897 /*
8898 =for apidoc newSVuv
8899
8900 Creates a new SV and copies an unsigned integer into it.
8901 The reference count for the SV is set to 1.
8902
8903 =cut
8904 */
8905
8906 SV *
8907 Perl_newSVuv(pTHX_ const UV u)
8908 {
8909     dVAR;
8910     SV *sv;
8911
8912     new_SV(sv);
8913     sv_setuv(sv,u);
8914     return sv;
8915 }
8916
8917 /*
8918 =for apidoc newSV_type
8919
8920 Creates a new SV, of the type specified.  The reference count for the new SV
8921 is set to 1.
8922
8923 =cut
8924 */
8925
8926 SV *
8927 Perl_newSV_type(pTHX_ const svtype type)
8928 {
8929     SV *sv;
8930
8931     new_SV(sv);
8932     sv_upgrade(sv, type);
8933     return sv;
8934 }
8935
8936 /*
8937 =for apidoc newRV_noinc
8938
8939 Creates an RV wrapper for an SV.  The reference count for the original
8940 SV is B<not> incremented.
8941
8942 =cut
8943 */
8944
8945 SV *
8946 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8947 {
8948     dVAR;
8949     SV *sv = newSV_type(SVt_IV);
8950
8951     PERL_ARGS_ASSERT_NEWRV_NOINC;
8952
8953     SvTEMP_off(tmpRef);
8954     SvRV_set(sv, tmpRef);
8955     SvROK_on(sv);
8956     return sv;
8957 }
8958
8959 /* newRV_inc is the official function name to use now.
8960  * newRV_inc is in fact #defined to newRV in sv.h
8961  */
8962
8963 SV *
8964 Perl_newRV(pTHX_ SV *const sv)
8965 {
8966     dVAR;
8967
8968     PERL_ARGS_ASSERT_NEWRV;
8969
8970     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8971 }
8972
8973 /*
8974 =for apidoc newSVsv
8975
8976 Creates a new SV which is an exact duplicate of the original SV.
8977 (Uses C<sv_setsv>.)
8978
8979 =cut
8980 */
8981
8982 SV *
8983 Perl_newSVsv(pTHX_ SV *const old)
8984 {
8985     dVAR;
8986     SV *sv;
8987
8988     if (!old)
8989         return NULL;
8990     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8991         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8992         return NULL;
8993     }
8994     /* Do this here, otherwise we leak the new SV if this croaks. */
8995     SvGETMAGIC(old);
8996     new_SV(sv);
8997     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8998        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8999     sv_setsv_flags(sv, old, SV_NOSTEAL);
9000     return sv;
9001 }
9002
9003 /*
9004 =for apidoc sv_reset
9005
9006 Underlying implementation for the C<reset> Perl function.
9007 Note that the perl-level function is vaguely deprecated.
9008
9009 =cut
9010 */
9011
9012 void
9013 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9014 {
9015     PERL_ARGS_ASSERT_SV_RESET;
9016
9017     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9018 }
9019
9020 void
9021 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9022 {
9023     dVAR;
9024     char todo[PERL_UCHAR_MAX+1];
9025     const char *send;
9026
9027     if (!stash || SvTYPE(stash) != SVt_PVHV)
9028         return;
9029
9030     if (!s) {           /* reset ?? searches */
9031         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9032         if (mg) {
9033             const U32 count = mg->mg_len / sizeof(PMOP**);
9034             PMOP **pmp = (PMOP**) mg->mg_ptr;
9035             PMOP *const *const end = pmp + count;
9036
9037             while (pmp < end) {
9038 #ifdef USE_ITHREADS
9039                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9040 #else
9041                 (*pmp)->op_pmflags &= ~PMf_USED;
9042 #endif
9043                 ++pmp;
9044             }
9045         }
9046         return;
9047     }
9048
9049     /* reset variables */
9050
9051     if (!HvARRAY(stash))
9052         return;
9053
9054     Zero(todo, 256, char);
9055     send = s + len;
9056     while (s < send) {
9057         I32 max;
9058         I32 i = (unsigned char)*s;
9059         if (s[1] == '-') {
9060             s += 2;
9061         }
9062         max = (unsigned char)*s++;
9063         for ( ; i <= max; i++) {
9064             todo[i] = 1;
9065         }
9066         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9067             HE *entry;
9068             for (entry = HvARRAY(stash)[i];
9069                  entry;
9070                  entry = HeNEXT(entry))
9071             {
9072                 GV *gv;
9073                 SV *sv;
9074
9075                 if (!todo[(U8)*HeKEY(entry)])
9076                     continue;
9077                 gv = MUTABLE_GV(HeVAL(entry));
9078                 sv = GvSV(gv);
9079                 if (sv) {
9080                     if (SvTHINKFIRST(sv)) {
9081                         if (!SvREADONLY(sv) && SvROK(sv))
9082                             sv_unref(sv);
9083                         /* XXX Is this continue a bug? Why should THINKFIRST
9084                            exempt us from resetting arrays and hashes?  */
9085                         continue;
9086                     }
9087                     SvOK_off(sv);
9088                     if (SvTYPE(sv) >= SVt_PV) {
9089                         SvCUR_set(sv, 0);
9090                         if (SvPVX_const(sv) != NULL)
9091                             *SvPVX(sv) = '\0';
9092                         SvTAINT(sv);
9093                     }
9094                 }
9095                 if (GvAV(gv)) {
9096                     av_clear(GvAV(gv));
9097                 }
9098                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9099 #if defined(VMS)
9100                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9101 #else /* ! VMS */
9102                     hv_clear(GvHV(gv));
9103 #  if defined(USE_ENVIRON_ARRAY)
9104                     if (gv == PL_envgv)
9105                         my_clearenv();
9106 #  endif /* USE_ENVIRON_ARRAY */
9107 #endif /* VMS */
9108                 }
9109             }
9110         }
9111     }
9112 }
9113
9114 /*
9115 =for apidoc sv_2io
9116
9117 Using various gambits, try to get an IO from an SV: the IO slot if its a
9118 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9119 named after the PV if we're a string.
9120
9121 'Get' magic is ignored on the sv passed in, but will be called on
9122 C<SvRV(sv)> if sv is an RV.
9123
9124 =cut
9125 */
9126
9127 IO*
9128 Perl_sv_2io(pTHX_ SV *const sv)
9129 {
9130     IO* io;
9131     GV* gv;
9132
9133     PERL_ARGS_ASSERT_SV_2IO;
9134
9135     switch (SvTYPE(sv)) {
9136     case SVt_PVIO:
9137         io = MUTABLE_IO(sv);
9138         break;
9139     case SVt_PVGV:
9140     case SVt_PVLV:
9141         if (isGV_with_GP(sv)) {
9142             gv = MUTABLE_GV(sv);
9143             io = GvIO(gv);
9144             if (!io)
9145                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9146                                     HEKfARG(GvNAME_HEK(gv)));
9147             break;
9148         }
9149         /* FALL THROUGH */
9150     default:
9151         if (!SvOK(sv))
9152             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9153         if (SvROK(sv)) {
9154             SvGETMAGIC(SvRV(sv));
9155             return sv_2io(SvRV(sv));
9156         }
9157         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9158         if (gv)
9159             io = GvIO(gv);
9160         else
9161             io = 0;
9162         if (!io) {
9163             SV *newsv = sv;
9164             if (SvGMAGICAL(sv)) {
9165                 newsv = sv_newmortal();
9166                 sv_setsv_nomg(newsv, sv);
9167             }
9168             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9169         }
9170         break;
9171     }
9172     return io;
9173 }
9174
9175 /*
9176 =for apidoc sv_2cv
9177
9178 Using various gambits, try to get a CV from an SV; in addition, try if
9179 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9180 The flags in C<lref> are passed to gv_fetchsv.
9181
9182 =cut
9183 */
9184
9185 CV *
9186 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9187 {
9188     dVAR;
9189     GV *gv = NULL;
9190     CV *cv = NULL;
9191
9192     PERL_ARGS_ASSERT_SV_2CV;
9193
9194     if (!sv) {
9195         *st = NULL;
9196         *gvp = NULL;
9197         return NULL;
9198     }
9199     switch (SvTYPE(sv)) {
9200     case SVt_PVCV:
9201         *st = CvSTASH(sv);
9202         *gvp = NULL;
9203         return MUTABLE_CV(sv);
9204     case SVt_PVHV:
9205     case SVt_PVAV:
9206         *st = NULL;
9207         *gvp = NULL;
9208         return NULL;
9209     default:
9210         SvGETMAGIC(sv);
9211         if (SvROK(sv)) {
9212             if (SvAMAGIC(sv))
9213                 sv = amagic_deref_call(sv, to_cv_amg);
9214
9215             sv = SvRV(sv);
9216             if (SvTYPE(sv) == SVt_PVCV) {
9217                 cv = MUTABLE_CV(sv);
9218                 *gvp = NULL;
9219                 *st = CvSTASH(cv);
9220                 return cv;
9221             }
9222             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9223                 gv = MUTABLE_GV(sv);
9224             else
9225                 Perl_croak(aTHX_ "Not a subroutine reference");
9226         }
9227         else if (isGV_with_GP(sv)) {
9228             gv = MUTABLE_GV(sv);
9229         }
9230         else {
9231             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9232         }
9233         *gvp = gv;
9234         if (!gv) {
9235             *st = NULL;
9236             return NULL;
9237         }
9238         /* Some flags to gv_fetchsv mean don't really create the GV  */
9239         if (!isGV_with_GP(gv)) {
9240             *st = NULL;
9241             return NULL;
9242         }
9243         *st = GvESTASH(gv);
9244         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9245             /* XXX this is probably not what they think they're getting.
9246              * It has the same effect as "sub name;", i.e. just a forward
9247              * declaration! */
9248             newSTUB(gv,0);
9249         }
9250         return GvCVu(gv);
9251     }
9252 }
9253
9254 /*
9255 =for apidoc sv_true
9256
9257 Returns true if the SV has a true value by Perl's rules.
9258 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9259 instead use an in-line version.
9260
9261 =cut
9262 */
9263
9264 I32
9265 Perl_sv_true(pTHX_ SV *const sv)
9266 {
9267     if (!sv)
9268         return 0;
9269     if (SvPOK(sv)) {
9270         const XPV* const tXpv = (XPV*)SvANY(sv);
9271         if (tXpv &&
9272                 (tXpv->xpv_cur > 1 ||
9273                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9274             return 1;
9275         else
9276             return 0;
9277     }
9278     else {
9279         if (SvIOK(sv))
9280             return SvIVX(sv) != 0;
9281         else {
9282             if (SvNOK(sv))
9283                 return SvNVX(sv) != 0.0;
9284             else
9285                 return sv_2bool(sv);
9286         }
9287     }
9288 }
9289
9290 /*
9291 =for apidoc sv_pvn_force
9292
9293 Get a sensible string out of the SV somehow.
9294 A private implementation of the C<SvPV_force> macro for compilers which
9295 can't cope with complex macro expressions.  Always use the macro instead.
9296
9297 =for apidoc sv_pvn_force_flags
9298
9299 Get a sensible string out of the SV somehow.
9300 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9301 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9302 implemented in terms of this function.
9303 You normally want to use the various wrapper macros instead: see
9304 C<SvPV_force> and C<SvPV_force_nomg>
9305
9306 =cut
9307 */
9308
9309 char *
9310 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9311 {
9312     dVAR;
9313
9314     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9315
9316     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9317     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9318         sv_force_normal_flags(sv, 0);
9319
9320     if (SvPOK(sv)) {
9321         if (lp)
9322             *lp = SvCUR(sv);
9323     }
9324     else {
9325         char *s;
9326         STRLEN len;
9327  
9328         if (SvTYPE(sv) > SVt_PVLV
9329             || isGV_with_GP(sv))
9330             /* diag_listed_as: Can't coerce %s to %s in %s */
9331             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9332                 OP_DESC(PL_op));
9333         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9334         if (!s) {
9335           s = (char *)"";
9336         }
9337         if (lp)
9338             *lp = len;
9339
9340         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9341             if (SvROK(sv))
9342                 sv_unref(sv);
9343             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9344             SvGROW(sv, len + 1);
9345             Move(s,SvPVX(sv),len,char);
9346             SvCUR_set(sv, len);
9347             SvPVX(sv)[len] = '\0';
9348         }
9349         if (!SvPOK(sv)) {
9350             SvPOK_on(sv);               /* validate pointer */
9351             SvTAINT(sv);
9352             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9353                                   PTR2UV(sv),SvPVX_const(sv)));
9354         }
9355     }
9356     (void)SvPOK_only_UTF8(sv);
9357     return SvPVX_mutable(sv);
9358 }
9359
9360 /*
9361 =for apidoc sv_pvbyten_force
9362
9363 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9364 instead.
9365
9366 =cut
9367 */
9368
9369 char *
9370 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9371 {
9372     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9373
9374     sv_pvn_force(sv,lp);
9375     sv_utf8_downgrade(sv,0);
9376     *lp = SvCUR(sv);
9377     return SvPVX(sv);
9378 }
9379
9380 /*
9381 =for apidoc sv_pvutf8n_force
9382
9383 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9384 instead.
9385
9386 =cut
9387 */
9388
9389 char *
9390 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9391 {
9392     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9393
9394     sv_pvn_force(sv,0);
9395     sv_utf8_upgrade_nomg(sv);
9396     *lp = SvCUR(sv);
9397     return SvPVX(sv);
9398 }
9399
9400 /*
9401 =for apidoc sv_reftype
9402
9403 Returns a string describing what the SV is a reference to.
9404
9405 =cut
9406 */
9407
9408 const char *
9409 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9410 {
9411     PERL_ARGS_ASSERT_SV_REFTYPE;
9412     if (ob && SvOBJECT(sv)) {
9413         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9414     }
9415     else {
9416         switch (SvTYPE(sv)) {
9417         case SVt_NULL:
9418         case SVt_IV:
9419         case SVt_NV:
9420         case SVt_PV:
9421         case SVt_PVIV:
9422         case SVt_PVNV:
9423         case SVt_PVMG:
9424                                 if (SvVOK(sv))
9425                                     return "VSTRING";
9426                                 if (SvROK(sv))
9427                                     return "REF";
9428                                 else
9429                                     return "SCALAR";
9430
9431         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9432                                 /* tied lvalues should appear to be
9433                                  * scalars for backwards compatibility */
9434                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9435                                     ? "SCALAR" : "LVALUE");
9436         case SVt_PVAV:          return "ARRAY";
9437         case SVt_PVHV:          return "HASH";
9438         case SVt_PVCV:          return "CODE";
9439         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9440                                     ? "GLOB" : "SCALAR");
9441         case SVt_PVFM:          return "FORMAT";
9442         case SVt_PVIO:          return "IO";
9443         case SVt_DUMMY:         return "DUMMY";
9444         case SVt_REGEXP:        return "REGEXP";
9445         default:                return "UNKNOWN";
9446         }
9447     }
9448 }
9449
9450 /*
9451 =for apidoc sv_ref
9452
9453 Returns a SV describing what the SV passed in is a reference to.
9454
9455 =cut
9456 */
9457
9458 SV *
9459 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9460 {
9461     PERL_ARGS_ASSERT_SV_REF;
9462
9463     if (!dst)
9464         dst = sv_newmortal();
9465
9466     if (ob && SvOBJECT(sv)) {
9467         HvNAME_get(SvSTASH(sv))
9468                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9469                     : sv_setpvn(dst, "__ANON__", 8);
9470     }
9471     else {
9472         const char * reftype = sv_reftype(sv, 0);
9473         sv_setpv(dst, reftype);
9474     }
9475     return dst;
9476 }
9477
9478 /*
9479 =for apidoc sv_isobject
9480
9481 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9482 object.  If the SV is not an RV, or if the object is not blessed, then this
9483 will return false.
9484
9485 =cut
9486 */
9487
9488 int
9489 Perl_sv_isobject(pTHX_ SV *sv)
9490 {
9491     if (!sv)
9492         return 0;
9493     SvGETMAGIC(sv);
9494     if (!SvROK(sv))
9495         return 0;
9496     sv = SvRV(sv);
9497     if (!SvOBJECT(sv))
9498         return 0;
9499     return 1;
9500 }
9501
9502 /*
9503 =for apidoc sv_isa
9504
9505 Returns a boolean indicating whether the SV is blessed into the specified
9506 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9507 an inheritance relationship.
9508
9509 =cut
9510 */
9511
9512 int
9513 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9514 {
9515     const char *hvname;
9516
9517     PERL_ARGS_ASSERT_SV_ISA;
9518
9519     if (!sv)
9520         return 0;
9521     SvGETMAGIC(sv);
9522     if (!SvROK(sv))
9523         return 0;
9524     sv = SvRV(sv);
9525     if (!SvOBJECT(sv))
9526         return 0;
9527     hvname = HvNAME_get(SvSTASH(sv));
9528     if (!hvname)
9529         return 0;
9530
9531     return strEQ(hvname, name);
9532 }
9533
9534 /*
9535 =for apidoc newSVrv
9536
9537 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9538 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9539 SV will be blessed in the specified package.  The new SV is returned and its
9540 reference count is 1. The reference count 1 is owned by C<rv>.
9541
9542 =cut
9543 */
9544
9545 SV*
9546 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9547 {
9548     dVAR;
9549     SV *sv;
9550
9551     PERL_ARGS_ASSERT_NEWSVRV;
9552
9553     new_SV(sv);
9554
9555     SV_CHECK_THINKFIRST_COW_DROP(rv);
9556
9557     if (SvTYPE(rv) >= SVt_PVMG) {
9558         const U32 refcnt = SvREFCNT(rv);
9559         SvREFCNT(rv) = 0;
9560         sv_clear(rv);
9561         SvFLAGS(rv) = 0;
9562         SvREFCNT(rv) = refcnt;
9563
9564         sv_upgrade(rv, SVt_IV);
9565     } else if (SvROK(rv)) {
9566         SvREFCNT_dec(SvRV(rv));
9567     } else {
9568         prepare_SV_for_RV(rv);
9569     }
9570
9571     SvOK_off(rv);
9572     SvRV_set(rv, sv);
9573     SvROK_on(rv);
9574
9575     if (classname) {
9576         HV* const stash = gv_stashpv(classname, GV_ADD);
9577         (void)sv_bless(rv, stash);
9578     }
9579     return sv;
9580 }
9581
9582 /*
9583 =for apidoc sv_setref_pv
9584
9585 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9586 argument will be upgraded to an RV.  That RV will be modified to point to
9587 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9588 into the SV.  The C<classname> argument indicates the package for the
9589 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9590 will have a reference count of 1, and the RV will be returned.
9591
9592 Do not use with other Perl types such as HV, AV, SV, CV, because those
9593 objects will become corrupted by the pointer copy process.
9594
9595 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9596
9597 =cut
9598 */
9599
9600 SV*
9601 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9602 {
9603     dVAR;
9604
9605     PERL_ARGS_ASSERT_SV_SETREF_PV;
9606
9607     if (!pv) {
9608         sv_setsv(rv, &PL_sv_undef);
9609         SvSETMAGIC(rv);
9610     }
9611     else
9612         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9613     return rv;
9614 }
9615
9616 /*
9617 =for apidoc sv_setref_iv
9618
9619 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9620 argument will be upgraded to an RV.  That RV will be modified to point to
9621 the new SV.  The C<classname> argument indicates the package for the
9622 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9623 will have a reference count of 1, and the RV will be returned.
9624
9625 =cut
9626 */
9627
9628 SV*
9629 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9630 {
9631     PERL_ARGS_ASSERT_SV_SETREF_IV;
9632
9633     sv_setiv(newSVrv(rv,classname), iv);
9634     return rv;
9635 }
9636
9637 /*
9638 =for apidoc sv_setref_uv
9639
9640 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9641 argument will be upgraded to an RV.  That RV will be modified to point to
9642 the new SV.  The C<classname> argument indicates the package for the
9643 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9644 will have a reference count of 1, and the RV will be returned.
9645
9646 =cut
9647 */
9648
9649 SV*
9650 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9651 {
9652     PERL_ARGS_ASSERT_SV_SETREF_UV;
9653
9654     sv_setuv(newSVrv(rv,classname), uv);
9655     return rv;
9656 }
9657
9658 /*
9659 =for apidoc sv_setref_nv
9660
9661 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9662 argument will be upgraded to an RV.  That RV will be modified to point to
9663 the new SV.  The C<classname> argument indicates the package for the
9664 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9665 will have a reference count of 1, and the RV will be returned.
9666
9667 =cut
9668 */
9669
9670 SV*
9671 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9672 {
9673     PERL_ARGS_ASSERT_SV_SETREF_NV;
9674
9675     sv_setnv(newSVrv(rv,classname), nv);
9676     return rv;
9677 }
9678
9679 /*
9680 =for apidoc sv_setref_pvn
9681
9682 Copies a string into a new SV, optionally blessing the SV.  The length of the
9683 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9684 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9685 argument indicates the package for the blessing.  Set C<classname> to
9686 C<NULL> to avoid the blessing.  The new SV will have a reference count
9687 of 1, and the RV will be returned.
9688
9689 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9690
9691 =cut
9692 */
9693
9694 SV*
9695 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9696                    const char *const pv, const STRLEN n)
9697 {
9698     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9699
9700     sv_setpvn(newSVrv(rv,classname), pv, n);
9701     return rv;
9702 }
9703
9704 /*
9705 =for apidoc sv_bless
9706
9707 Blesses an SV into a specified package.  The SV must be an RV.  The package
9708 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9709 of the SV is unaffected.
9710
9711 =cut
9712 */
9713
9714 SV*
9715 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9716 {
9717     dVAR;
9718     SV *tmpRef;
9719
9720     PERL_ARGS_ASSERT_SV_BLESS;
9721
9722     if (!SvROK(sv))
9723         Perl_croak(aTHX_ "Can't bless non-reference value");
9724     tmpRef = SvRV(sv);
9725     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9726         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9727             Perl_croak_no_modify();
9728         if (SvOBJECT(tmpRef)) {
9729             SvREFCNT_dec(SvSTASH(tmpRef));
9730         }
9731     }
9732     SvOBJECT_on(tmpRef);
9733     SvUPGRADE(tmpRef, SVt_PVMG);
9734     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9735
9736     if(SvSMAGICAL(tmpRef))
9737         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9738             mg_set(tmpRef);
9739
9740
9741
9742     return sv;
9743 }
9744
9745 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9746  * as it is after unglobbing it.
9747  */
9748
9749 PERL_STATIC_INLINE void
9750 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9751 {
9752     dVAR;
9753     void *xpvmg;
9754     HV *stash;
9755     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9756
9757     PERL_ARGS_ASSERT_SV_UNGLOB;
9758
9759     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9760     SvFAKE_off(sv);
9761     if (!(flags & SV_COW_DROP_PV))
9762         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9763
9764     if (GvGP(sv)) {
9765         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9766            && HvNAME_get(stash))
9767             mro_method_changed_in(stash);
9768         gp_free(MUTABLE_GV(sv));
9769     }
9770     if (GvSTASH(sv)) {
9771         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9772         GvSTASH(sv) = NULL;
9773     }
9774     GvMULTI_off(sv);
9775     if (GvNAME_HEK(sv)) {
9776         unshare_hek(GvNAME_HEK(sv));
9777     }
9778     isGV_with_GP_off(sv);
9779
9780     if(SvTYPE(sv) == SVt_PVGV) {
9781         /* need to keep SvANY(sv) in the right arena */
9782         xpvmg = new_XPVMG();
9783         StructCopy(SvANY(sv), xpvmg, XPVMG);
9784         del_XPVGV(SvANY(sv));
9785         SvANY(sv) = xpvmg;
9786
9787         SvFLAGS(sv) &= ~SVTYPEMASK;
9788         SvFLAGS(sv) |= SVt_PVMG;
9789     }
9790
9791     /* Intentionally not calling any local SET magic, as this isn't so much a
9792        set operation as merely an internal storage change.  */
9793     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9794     else sv_setsv_flags(sv, temp, 0);
9795
9796     if ((const GV *)sv == PL_last_in_gv)
9797         PL_last_in_gv = NULL;
9798     else if ((const GV *)sv == PL_statgv)
9799         PL_statgv = NULL;
9800 }
9801
9802 /*
9803 =for apidoc sv_unref_flags
9804
9805 Unsets the RV status of the SV, and decrements the reference count of
9806 whatever was being referenced by the RV.  This can almost be thought of
9807 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9808 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9809 (otherwise the decrementing is conditional on the reference count being
9810 different from one or the reference being a readonly SV).
9811 See C<SvROK_off>.
9812
9813 =cut
9814 */
9815
9816 void
9817 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9818 {
9819     SV* const target = SvRV(ref);
9820
9821     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9822
9823     if (SvWEAKREF(ref)) {
9824         sv_del_backref(target, ref);
9825         SvWEAKREF_off(ref);
9826         SvRV_set(ref, NULL);
9827         return;
9828     }
9829     SvRV_set(ref, NULL);
9830     SvROK_off(ref);
9831     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9832        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9833     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9834         SvREFCNT_dec_NN(target);
9835     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9836         sv_2mortal(target);     /* Schedule for freeing later */
9837 }
9838
9839 /*
9840 =for apidoc sv_untaint
9841
9842 Untaint an SV.  Use C<SvTAINTED_off> instead.
9843
9844 =cut
9845 */
9846
9847 void
9848 Perl_sv_untaint(pTHX_ SV *const sv)
9849 {
9850     PERL_ARGS_ASSERT_SV_UNTAINT;
9851
9852     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9853         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9854         if (mg)
9855             mg->mg_len &= ~1;
9856     }
9857 }
9858
9859 /*
9860 =for apidoc sv_tainted
9861
9862 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9863
9864 =cut
9865 */
9866
9867 bool
9868 Perl_sv_tainted(pTHX_ SV *const sv)
9869 {
9870     PERL_ARGS_ASSERT_SV_TAINTED;
9871
9872     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9873         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9874         if (mg && (mg->mg_len & 1) )
9875             return TRUE;
9876     }
9877     return FALSE;
9878 }
9879
9880 /*
9881 =for apidoc sv_setpviv
9882
9883 Copies an integer into the given SV, also updating its string value.
9884 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9885
9886 =cut
9887 */
9888
9889 void
9890 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9891 {
9892     char buf[TYPE_CHARS(UV)];
9893     char *ebuf;
9894     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9895
9896     PERL_ARGS_ASSERT_SV_SETPVIV;
9897
9898     sv_setpvn(sv, ptr, ebuf - ptr);
9899 }
9900
9901 /*
9902 =for apidoc sv_setpviv_mg
9903
9904 Like C<sv_setpviv>, but also handles 'set' magic.
9905
9906 =cut
9907 */
9908
9909 void
9910 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9911 {
9912     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9913
9914     sv_setpviv(sv, iv);
9915     SvSETMAGIC(sv);
9916 }
9917
9918 #if defined(PERL_IMPLICIT_CONTEXT)
9919
9920 /* pTHX_ magic can't cope with varargs, so this is a no-context
9921  * version of the main function, (which may itself be aliased to us).
9922  * Don't access this version directly.
9923  */
9924
9925 void
9926 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9927 {
9928     dTHX;
9929     va_list args;
9930
9931     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9932
9933     va_start(args, pat);
9934     sv_vsetpvf(sv, pat, &args);
9935     va_end(args);
9936 }
9937
9938 /* pTHX_ magic can't cope with varargs, so this is a no-context
9939  * version of the main function, (which may itself be aliased to us).
9940  * Don't access this version directly.
9941  */
9942
9943 void
9944 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9945 {
9946     dTHX;
9947     va_list args;
9948
9949     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9950
9951     va_start(args, pat);
9952     sv_vsetpvf_mg(sv, pat, &args);
9953     va_end(args);
9954 }
9955 #endif
9956
9957 /*
9958 =for apidoc sv_setpvf
9959
9960 Works like C<sv_catpvf> but copies the text into the SV instead of
9961 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9962
9963 =cut
9964 */
9965
9966 void
9967 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9968 {
9969     va_list args;
9970
9971     PERL_ARGS_ASSERT_SV_SETPVF;
9972
9973     va_start(args, pat);
9974     sv_vsetpvf(sv, pat, &args);
9975     va_end(args);
9976 }
9977
9978 /*
9979 =for apidoc sv_vsetpvf
9980
9981 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9982 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9983
9984 Usually used via its frontend C<sv_setpvf>.
9985
9986 =cut
9987 */
9988
9989 void
9990 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9991 {
9992     PERL_ARGS_ASSERT_SV_VSETPVF;
9993
9994     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9995 }
9996
9997 /*
9998 =for apidoc sv_setpvf_mg
9999
10000 Like C<sv_setpvf>, but also handles 'set' magic.
10001
10002 =cut
10003 */
10004
10005 void
10006 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10007 {
10008     va_list args;
10009
10010     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10011
10012     va_start(args, pat);
10013     sv_vsetpvf_mg(sv, pat, &args);
10014     va_end(args);
10015 }
10016
10017 /*
10018 =for apidoc sv_vsetpvf_mg
10019
10020 Like C<sv_vsetpvf>, but also handles 'set' magic.
10021
10022 Usually used via its frontend C<sv_setpvf_mg>.
10023
10024 =cut
10025 */
10026
10027 void
10028 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10029 {
10030     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10031
10032     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10033     SvSETMAGIC(sv);
10034 }
10035
10036 #if defined(PERL_IMPLICIT_CONTEXT)
10037
10038 /* pTHX_ magic can't cope with varargs, so this is a no-context
10039  * version of the main function, (which may itself be aliased to us).
10040  * Don't access this version directly.
10041  */
10042
10043 void
10044 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10045 {
10046     dTHX;
10047     va_list args;
10048
10049     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10050
10051     va_start(args, pat);
10052     sv_vcatpvf(sv, pat, &args);
10053     va_end(args);
10054 }
10055
10056 /* pTHX_ magic can't cope with varargs, so this is a no-context
10057  * version of the main function, (which may itself be aliased to us).
10058  * Don't access this version directly.
10059  */
10060
10061 void
10062 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10063 {
10064     dTHX;
10065     va_list args;
10066
10067     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10068
10069     va_start(args, pat);
10070     sv_vcatpvf_mg(sv, pat, &args);
10071     va_end(args);
10072 }
10073 #endif
10074
10075 /*
10076 =for apidoc sv_catpvf
10077
10078 Processes its arguments like C<sprintf> and appends the formatted
10079 output to an SV.  If the appended data contains "wide" characters
10080 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10081 and characters >255 formatted with %c), the original SV might get
10082 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10083 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10084 valid UTF-8; if the original SV was bytes, the pattern should be too.
10085
10086 =cut */
10087
10088 void
10089 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10090 {
10091     va_list args;
10092
10093     PERL_ARGS_ASSERT_SV_CATPVF;
10094
10095     va_start(args, pat);
10096     sv_vcatpvf(sv, pat, &args);
10097     va_end(args);
10098 }
10099
10100 /*
10101 =for apidoc sv_vcatpvf
10102
10103 Processes its arguments like C<vsprintf> and appends the formatted output
10104 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10105
10106 Usually used via its frontend C<sv_catpvf>.
10107
10108 =cut
10109 */
10110
10111 void
10112 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10113 {
10114     PERL_ARGS_ASSERT_SV_VCATPVF;
10115
10116     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10117 }
10118
10119 /*
10120 =for apidoc sv_catpvf_mg
10121
10122 Like C<sv_catpvf>, but also handles 'set' magic.
10123
10124 =cut
10125 */
10126
10127 void
10128 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10129 {
10130     va_list args;
10131
10132     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10133
10134     va_start(args, pat);
10135     sv_vcatpvf_mg(sv, pat, &args);
10136     va_end(args);
10137 }
10138
10139 /*
10140 =for apidoc sv_vcatpvf_mg
10141
10142 Like C<sv_vcatpvf>, but also handles 'set' magic.
10143
10144 Usually used via its frontend C<sv_catpvf_mg>.
10145
10146 =cut
10147 */
10148
10149 void
10150 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10151 {
10152     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10153
10154     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10155     SvSETMAGIC(sv);
10156 }
10157
10158 /*
10159 =for apidoc sv_vsetpvfn
10160
10161 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10162 appending it.
10163
10164 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10165
10166 =cut
10167 */
10168
10169 void
10170 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10171                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10172 {
10173     PERL_ARGS_ASSERT_SV_VSETPVFN;
10174
10175     sv_setpvs(sv, "");
10176     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10177 }
10178
10179
10180 /*
10181  * Warn of missing argument to sprintf, and then return a defined value
10182  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10183  */
10184 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10185 STATIC SV*
10186 S_vcatpvfn_missing_argument(pTHX) {
10187     if (ckWARN(WARN_MISSING)) {
10188         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10189                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10190     }
10191     return &PL_sv_no;
10192 }
10193
10194
10195 STATIC I32
10196 S_expect_number(pTHX_ char **const pattern)
10197 {
10198     dVAR;
10199     I32 var = 0;
10200
10201     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10202
10203     switch (**pattern) {
10204     case '1': case '2': case '3':
10205     case '4': case '5': case '6':
10206     case '7': case '8': case '9':
10207         var = *(*pattern)++ - '0';
10208         while (isDIGIT(**pattern)) {
10209             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10210             if (tmp < var)
10211                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10212             var = tmp;
10213         }
10214     }
10215     return var;
10216 }
10217
10218 STATIC char *
10219 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10220 {
10221     const int neg = nv < 0;
10222     UV uv;
10223
10224     PERL_ARGS_ASSERT_F0CONVERT;
10225
10226     if (neg)
10227         nv = -nv;
10228     if (nv < UV_MAX) {
10229         char *p = endbuf;
10230         nv += 0.5;
10231         uv = (UV)nv;
10232         if (uv & 1 && uv == nv)
10233             uv--;                       /* Round to even */
10234         do {
10235             const unsigned dig = uv % 10;
10236             *--p = '0' + dig;
10237         } while (uv /= 10);
10238         if (neg)
10239             *--p = '-';
10240         *len = endbuf - p;
10241         return p;
10242     }
10243     return NULL;
10244 }
10245
10246
10247 /*
10248 =for apidoc sv_vcatpvfn
10249
10250 =for apidoc sv_vcatpvfn_flags
10251
10252 Processes its arguments like C<vsprintf> and appends the formatted output
10253 to an SV.  Uses an array of SVs if the C style variable argument list is
10254 missing (NULL).  When running with taint checks enabled, indicates via
10255 C<maybe_tainted> if results are untrustworthy (often due to the use of
10256 locales).
10257
10258 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10259
10260 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10261
10262 =cut
10263 */
10264
10265 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10266                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10267                         vec_utf8 = DO_UTF8(vecsv);
10268
10269 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10270
10271 void
10272 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10273                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10274 {
10275     PERL_ARGS_ASSERT_SV_VCATPVFN;
10276
10277     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10278 }
10279
10280 void
10281 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10282                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10283                        const U32 flags)
10284 {
10285     dVAR;
10286     char *p;
10287     char *q;
10288     const char *patend;
10289     STRLEN origlen;
10290     I32 svix = 0;
10291     static const char nullstr[] = "(null)";
10292     SV *argsv = NULL;
10293     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10294     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10295     SV *nsv = NULL;
10296     /* Times 4: a decimal digit takes more than 3 binary digits.
10297      * NV_DIG: mantissa takes than many decimal digits.
10298      * Plus 32: Playing safe. */
10299     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10300     /* large enough for "%#.#f" --chip */
10301     /* what about long double NVs? --jhi */
10302
10303     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10304     PERL_UNUSED_ARG(maybe_tainted);
10305
10306     if (flags & SV_GMAGIC)
10307         SvGETMAGIC(sv);
10308
10309     /* no matter what, this is a string now */
10310     (void)SvPV_force_nomg(sv, origlen);
10311
10312     /* special-case "", "%s", and "%-p" (SVf - see below) */
10313     if (patlen == 0)
10314         return;
10315     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10316         if (args) {
10317             const char * const s = va_arg(*args, char*);
10318             sv_catpv_nomg(sv, s ? s : nullstr);
10319         }
10320         else if (svix < svmax) {
10321             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10322             SvGETMAGIC(*svargs);
10323             sv_catsv_nomg(sv, *svargs);
10324         }
10325         else
10326             S_vcatpvfn_missing_argument(aTHX);
10327         return;
10328     }
10329     if (args && patlen == 3 && pat[0] == '%' &&
10330                 pat[1] == '-' && pat[2] == 'p') {
10331         argsv = MUTABLE_SV(va_arg(*args, void*));
10332         sv_catsv_nomg(sv, argsv);
10333         return;
10334     }
10335
10336 #ifndef USE_LONG_DOUBLE
10337     /* special-case "%.<number>[gf]" */
10338     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10339          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10340         unsigned digits = 0;
10341         const char *pp;
10342
10343         pp = pat + 2;
10344         while (*pp >= '0' && *pp <= '9')
10345             digits = 10 * digits + (*pp++ - '0');
10346         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10347             const NV nv = SvNV(*svargs);
10348             if (*pp == 'g') {
10349                 /* Add check for digits != 0 because it seems that some
10350                    gconverts are buggy in this case, and we don't yet have
10351                    a Configure test for this.  */
10352                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10353                      /* 0, point, slack */
10354                     Gconvert(nv, (int)digits, 0, ebuf);
10355                     sv_catpv_nomg(sv, ebuf);
10356                     if (*ebuf)  /* May return an empty string for digits==0 */
10357                         return;
10358                 }
10359             } else if (!digits) {
10360                 STRLEN l;
10361
10362                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10363                     sv_catpvn_nomg(sv, p, l);
10364                     return;
10365                 }
10366             }
10367         }
10368     }
10369 #endif /* !USE_LONG_DOUBLE */
10370
10371     if (!args && svix < svmax && DO_UTF8(*svargs))
10372         has_utf8 = TRUE;
10373
10374     patend = (char*)pat + patlen;
10375     for (p = (char*)pat; p < patend; p = q) {
10376         bool alt = FALSE;
10377         bool left = FALSE;
10378         bool vectorize = FALSE;
10379         bool vectorarg = FALSE;
10380         bool vec_utf8 = FALSE;
10381         char fill = ' ';
10382         char plus = 0;
10383         char intsize = 0;
10384         STRLEN width = 0;
10385         STRLEN zeros = 0;
10386         bool has_precis = FALSE;
10387         STRLEN precis = 0;
10388         const I32 osvix = svix;
10389         bool is_utf8 = FALSE;  /* is this item utf8?   */
10390 #ifdef HAS_LDBL_SPRINTF_BUG
10391         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10392            with sfio - Allen <allens@cpan.org> */
10393         bool fix_ldbl_sprintf_bug = FALSE;
10394 #endif
10395
10396         char esignbuf[4];
10397         U8 utf8buf[UTF8_MAXBYTES+1];
10398         STRLEN esignlen = 0;
10399
10400         const char *eptr = NULL;
10401         const char *fmtstart;
10402         STRLEN elen = 0;
10403         SV *vecsv = NULL;
10404         const U8 *vecstr = NULL;
10405         STRLEN veclen = 0;
10406         char c = 0;
10407         int i;
10408         unsigned base = 0;
10409         IV iv = 0;
10410         UV uv = 0;
10411         /* we need a long double target in case HAS_LONG_DOUBLE but
10412            not USE_LONG_DOUBLE
10413         */
10414 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10415         long double nv;
10416 #else
10417         NV nv;
10418 #endif
10419         STRLEN have;
10420         STRLEN need;
10421         STRLEN gap;
10422         const char *dotstr = ".";
10423         STRLEN dotstrlen = 1;
10424         I32 efix = 0; /* explicit format parameter index */
10425         I32 ewix = 0; /* explicit width index */
10426         I32 epix = 0; /* explicit precision index */
10427         I32 evix = 0; /* explicit vector index */
10428         bool asterisk = FALSE;
10429
10430         /* echo everything up to the next format specification */
10431         for (q = p; q < patend && *q != '%'; ++q) ;
10432         if (q > p) {
10433             if (has_utf8 && !pat_utf8)
10434                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10435             else
10436                 sv_catpvn_nomg(sv, p, q - p);
10437             p = q;
10438         }
10439         if (q++ >= patend)
10440             break;
10441
10442         fmtstart = q;
10443
10444 /*
10445     We allow format specification elements in this order:
10446         \d+\$              explicit format parameter index
10447         [-+ 0#]+           flags
10448         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10449         0                  flag (as above): repeated to allow "v02"     
10450         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10451         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10452         [hlqLV]            size
10453     [%bcdefginopsuxDFOUX] format (mandatory)
10454 */
10455
10456         if (args) {
10457 /*  
10458         As of perl5.9.3, printf format checking is on by default.
10459         Internally, perl uses %p formats to provide an escape to
10460         some extended formatting.  This block deals with those
10461         extensions: if it does not match, (char*)q is reset and
10462         the normal format processing code is used.
10463
10464         Currently defined extensions are:
10465                 %p              include pointer address (standard)      
10466                 %-p     (SVf)   include an SV (previously %_)
10467                 %-<num>p        include an SV with precision <num>      
10468                 %2p             include a HEK
10469                 %3p             include a HEK with precision of 256
10470                 %4p             char* preceded by utf8 flag and length
10471                 %<num>p         (where num is 1 or > 4) reserved for future
10472                                 extensions
10473
10474         Robin Barker 2005-07-14 (but modified since)
10475
10476                 %1p     (VDf)   removed.  RMB 2007-10-19
10477 */
10478             char* r = q; 
10479             bool sv = FALSE;    
10480             STRLEN n = 0;
10481             if (*q == '-')
10482                 sv = *q++;
10483             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10484                 /* The argument has already gone through cBOOL, so the cast
10485                    is safe. */
10486                 is_utf8 = (bool)va_arg(*args, int);
10487                 elen = va_arg(*args, UV);
10488                 eptr = va_arg(*args, char *);
10489                 q += sizeof(UTF8f)-1;
10490                 goto string;
10491             }
10492             n = expect_number(&q);
10493             if (*q++ == 'p') {
10494                 if (sv) {                       /* SVf */
10495                     if (n) {
10496                         precis = n;
10497                         has_precis = TRUE;
10498                     }
10499                     argsv = MUTABLE_SV(va_arg(*args, void*));
10500                     eptr = SvPV_const(argsv, elen);
10501                     if (DO_UTF8(argsv))
10502                         is_utf8 = TRUE;
10503                     goto string;
10504                 }
10505                 else if (n==2 || n==3) {        /* HEKf */
10506                     HEK * const hek = va_arg(*args, HEK *);
10507                     eptr = HEK_KEY(hek);
10508                     elen = HEK_LEN(hek);
10509                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10510                     if (n==3) precis = 256, has_precis = TRUE;
10511                     goto string;
10512                 }
10513                 else if (n) {
10514                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10515                                      "internal %%<num>p might conflict with future printf extensions");
10516                 }
10517             }
10518             q = r; 
10519         }
10520
10521         if ( (width = expect_number(&q)) ) {
10522             if (*q == '$') {
10523                 ++q;
10524                 efix = width;
10525             } else {
10526                 goto gotwidth;
10527             }
10528         }
10529
10530         /* FLAGS */
10531
10532         while (*q) {
10533             switch (*q) {
10534             case ' ':
10535             case '+':
10536                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10537                     q++;
10538                 else
10539                     plus = *q++;
10540                 continue;
10541
10542             case '-':
10543                 left = TRUE;
10544                 q++;
10545                 continue;
10546
10547             case '0':
10548                 fill = *q++;
10549                 continue;
10550
10551             case '#':
10552                 alt = TRUE;
10553                 q++;
10554                 continue;
10555
10556             default:
10557                 break;
10558             }
10559             break;
10560         }
10561
10562       tryasterisk:
10563         if (*q == '*') {
10564             q++;
10565             if ( (ewix = expect_number(&q)) )
10566                 if (*q++ != '$')
10567                     goto unknown;
10568             asterisk = TRUE;
10569         }
10570         if (*q == 'v') {
10571             q++;
10572             if (vectorize)
10573                 goto unknown;
10574             if ((vectorarg = asterisk)) {
10575                 evix = ewix;
10576                 ewix = 0;
10577                 asterisk = FALSE;
10578             }
10579             vectorize = TRUE;
10580             goto tryasterisk;
10581         }
10582
10583         if (!asterisk)
10584         {
10585             if( *q == '0' )
10586                 fill = *q++;
10587             width = expect_number(&q);
10588         }
10589
10590         if (vectorize && vectorarg) {
10591             /* vectorizing, but not with the default "." */
10592             if (args)
10593                 vecsv = va_arg(*args, SV*);
10594             else if (evix) {
10595                 vecsv = (evix > 0 && evix <= svmax)
10596                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10597             } else {
10598                 vecsv = svix < svmax
10599                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10600             }
10601             dotstr = SvPV_const(vecsv, dotstrlen);
10602             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10603                bad with tied or overloaded values that return UTF8.  */
10604             if (DO_UTF8(vecsv))
10605                 is_utf8 = TRUE;
10606             else if (has_utf8) {
10607                 vecsv = sv_mortalcopy(vecsv);
10608                 sv_utf8_upgrade(vecsv);
10609                 dotstr = SvPV_const(vecsv, dotstrlen);
10610                 is_utf8 = TRUE;
10611             }               
10612         }
10613
10614         if (asterisk) {
10615             if (args)
10616                 i = va_arg(*args, int);
10617             else
10618                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10619                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10620             left |= (i < 0);
10621             width = (i < 0) ? -i : i;
10622         }
10623       gotwidth:
10624
10625         /* PRECISION */
10626
10627         if (*q == '.') {
10628             q++;
10629             if (*q == '*') {
10630                 q++;
10631                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10632                     goto unknown;
10633                 /* XXX: todo, support specified precision parameter */
10634                 if (epix)
10635                     goto unknown;
10636                 if (args)
10637                     i = va_arg(*args, int);
10638                 else
10639                     i = (ewix ? ewix <= svmax : svix < svmax)
10640                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10641                 precis = i;
10642                 has_precis = !(i < 0);
10643             }
10644             else {
10645                 precis = 0;
10646                 while (isDIGIT(*q))
10647                     precis = precis * 10 + (*q++ - '0');
10648                 has_precis = TRUE;
10649             }
10650         }
10651
10652         if (vectorize) {
10653             if (args) {
10654                 VECTORIZE_ARGS
10655             }
10656             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10657                 vecsv = svargs[efix ? efix-1 : svix++];
10658                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10659                 vec_utf8 = DO_UTF8(vecsv);
10660
10661                 /* if this is a version object, we need to convert
10662                  * back into v-string notation and then let the
10663                  * vectorize happen normally
10664                  */
10665                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10666                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10667                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10668                         "vector argument not supported with alpha versions");
10669                         goto vdblank;
10670                     }
10671                     vecsv = sv_newmortal();
10672                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10673                                  vecsv);
10674                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10675                     vec_utf8 = DO_UTF8(vecsv);
10676                 }
10677             }
10678             else {
10679               vdblank:
10680                 vecstr = (U8*)"";
10681                 veclen = 0;
10682             }
10683         }
10684
10685         /* SIZE */
10686
10687         switch (*q) {
10688 #ifdef WIN32
10689         case 'I':                       /* Ix, I32x, and I64x */
10690 #  ifdef USE_64_BIT_INT
10691             if (q[1] == '6' && q[2] == '4') {
10692                 q += 3;
10693                 intsize = 'q';
10694                 break;
10695             }
10696 #  endif
10697             if (q[1] == '3' && q[2] == '2') {
10698                 q += 3;
10699                 break;
10700             }
10701 #  ifdef USE_64_BIT_INT
10702             intsize = 'q';
10703 #  endif
10704             q++;
10705             break;
10706 #endif
10707 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10708         case 'L':                       /* Ld */
10709             /*FALLTHROUGH*/
10710 #ifdef HAS_QUAD
10711         case 'q':                       /* qd */
10712 #endif
10713             intsize = 'q';
10714             q++;
10715             break;
10716 #endif
10717         case 'l':
10718             ++q;
10719 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10720             if (*q == 'l') {    /* lld, llf */
10721                 intsize = 'q';
10722                 ++q;
10723             }
10724             else
10725 #endif
10726                 intsize = 'l';
10727             break;
10728         case 'h':
10729             if (*++q == 'h') {  /* hhd, hhu */
10730                 intsize = 'c';
10731                 ++q;
10732             }
10733             else
10734                 intsize = 'h';
10735             break;
10736         case 'V':
10737         case 'z':
10738         case 't':
10739 #if HAS_C99
10740         case 'j':
10741 #endif
10742             intsize = *q++;
10743             break;
10744         }
10745
10746         /* CONVERSION */
10747
10748         if (*q == '%') {
10749             eptr = q++;
10750             elen = 1;
10751             if (vectorize) {
10752                 c = '%';
10753                 goto unknown;
10754             }
10755             goto string;
10756         }
10757
10758         if (!vectorize && !args) {
10759             if (efix) {
10760                 const I32 i = efix-1;
10761                 argsv = (i >= 0 && i < svmax)
10762                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10763             } else {
10764                 argsv = (svix >= 0 && svix < svmax)
10765                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10766             }
10767         }
10768
10769         switch (c = *q++) {
10770
10771             /* STRINGS */
10772
10773         case 'c':
10774             if (vectorize)
10775                 goto unknown;
10776             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10777             if ((uv > 255 ||
10778                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10779                 && !IN_BYTES) {
10780                 eptr = (char*)utf8buf;
10781                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10782                 is_utf8 = TRUE;
10783             }
10784             else {
10785                 c = (char)uv;
10786                 eptr = &c;
10787                 elen = 1;
10788             }
10789             goto string;
10790
10791         case 's':
10792             if (vectorize)
10793                 goto unknown;
10794             if (args) {
10795                 eptr = va_arg(*args, char*);
10796                 if (eptr)
10797                     elen = strlen(eptr);
10798                 else {
10799                     eptr = (char *)nullstr;
10800                     elen = sizeof nullstr - 1;
10801                 }
10802             }
10803             else {
10804                 eptr = SvPV_const(argsv, elen);
10805                 if (DO_UTF8(argsv)) {
10806                     STRLEN old_precis = precis;
10807                     if (has_precis && precis < elen) {
10808                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10809                         STRLEN p = precis > ulen ? ulen : precis;
10810                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10811                                                         /* sticks at end */
10812                     }
10813                     if (width) { /* fudge width (can't fudge elen) */
10814                         if (has_precis && precis < elen)
10815                             width += precis - old_precis;
10816                         else
10817                             width +=
10818                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10819                     }
10820                     is_utf8 = TRUE;
10821                 }
10822             }
10823
10824         string:
10825             if (has_precis && precis < elen)
10826                 elen = precis;
10827             break;
10828
10829             /* INTEGERS */
10830
10831         case 'p':
10832             if (alt || vectorize)
10833                 goto unknown;
10834             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10835             base = 16;
10836             goto integer;
10837
10838         case 'D':
10839 #ifdef IV_IS_QUAD
10840             intsize = 'q';
10841 #else
10842             intsize = 'l';
10843 #endif
10844             /*FALLTHROUGH*/
10845         case 'd':
10846         case 'i':
10847 #if vdNUMBER
10848         format_vd:
10849 #endif
10850             if (vectorize) {
10851                 STRLEN ulen;
10852                 if (!veclen)
10853                     continue;
10854                 if (vec_utf8)
10855                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10856                                         UTF8_ALLOW_ANYUV);
10857                 else {
10858                     uv = *vecstr;
10859                     ulen = 1;
10860                 }
10861                 vecstr += ulen;
10862                 veclen -= ulen;
10863                 if (plus)
10864                      esignbuf[esignlen++] = plus;
10865             }
10866             else if (args) {
10867                 switch (intsize) {
10868                 case 'c':       iv = (char)va_arg(*args, int); break;
10869                 case 'h':       iv = (short)va_arg(*args, int); break;
10870                 case 'l':       iv = va_arg(*args, long); break;
10871                 case 'V':       iv = va_arg(*args, IV); break;
10872                 case 'z':       iv = va_arg(*args, SSize_t); break;
10873                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10874                 default:        iv = va_arg(*args, int); break;
10875 #if HAS_C99
10876                 case 'j':       iv = va_arg(*args, intmax_t); break;
10877 #endif
10878                 case 'q':
10879 #ifdef HAS_QUAD
10880                                 iv = va_arg(*args, Quad_t); break;
10881 #else
10882                                 goto unknown;
10883 #endif
10884                 }
10885             }
10886             else {
10887                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10888                 switch (intsize) {
10889                 case 'c':       iv = (char)tiv; break;
10890                 case 'h':       iv = (short)tiv; break;
10891                 case 'l':       iv = (long)tiv; break;
10892                 case 'V':
10893                 default:        iv = tiv; break;
10894                 case 'q':
10895 #ifdef HAS_QUAD
10896                                 iv = (Quad_t)tiv; break;
10897 #else
10898                                 goto unknown;
10899 #endif
10900                 }
10901             }
10902             if ( !vectorize )   /* we already set uv above */
10903             {
10904                 if (iv >= 0) {
10905                     uv = iv;
10906                     if (plus)
10907                         esignbuf[esignlen++] = plus;
10908                 }
10909                 else {
10910                     uv = -iv;
10911                     esignbuf[esignlen++] = '-';
10912                 }
10913             }
10914             base = 10;
10915             goto integer;
10916
10917         case 'U':
10918 #ifdef IV_IS_QUAD
10919             intsize = 'q';
10920 #else
10921             intsize = 'l';
10922 #endif
10923             /*FALLTHROUGH*/
10924         case 'u':
10925             base = 10;
10926             goto uns_integer;
10927
10928         case 'B':
10929         case 'b':
10930             base = 2;
10931             goto uns_integer;
10932
10933         case 'O':
10934 #ifdef IV_IS_QUAD
10935             intsize = 'q';
10936 #else
10937             intsize = 'l';
10938 #endif
10939             /*FALLTHROUGH*/
10940         case 'o':
10941             base = 8;
10942             goto uns_integer;
10943
10944         case 'X':
10945         case 'x':
10946             base = 16;
10947
10948         uns_integer:
10949             if (vectorize) {
10950                 STRLEN ulen;
10951         vector:
10952                 if (!veclen)
10953                     continue;
10954                 if (vec_utf8)
10955                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10956                                         UTF8_ALLOW_ANYUV);
10957                 else {
10958                     uv = *vecstr;
10959                     ulen = 1;
10960                 }
10961                 vecstr += ulen;
10962                 veclen -= ulen;
10963             }
10964             else if (args) {
10965                 switch (intsize) {
10966                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10967                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10968                 case 'l':  uv = va_arg(*args, unsigned long); break;
10969                 case 'V':  uv = va_arg(*args, UV); break;
10970                 case 'z':  uv = va_arg(*args, Size_t); break;
10971                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10972 #if HAS_C99
10973                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10974 #endif
10975                 default:   uv = va_arg(*args, unsigned); break;
10976                 case 'q':
10977 #ifdef HAS_QUAD
10978                            uv = va_arg(*args, Uquad_t); break;
10979 #else
10980                            goto unknown;
10981 #endif
10982                 }
10983             }
10984             else {
10985                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10986                 switch (intsize) {
10987                 case 'c':       uv = (unsigned char)tuv; break;
10988                 case 'h':       uv = (unsigned short)tuv; break;
10989                 case 'l':       uv = (unsigned long)tuv; break;
10990                 case 'V':
10991                 default:        uv = tuv; break;
10992                 case 'q':
10993 #ifdef HAS_QUAD
10994                                 uv = (Uquad_t)tuv; break;
10995 #else
10996                                 goto unknown;
10997 #endif
10998                 }
10999             }
11000
11001         integer:
11002             {
11003                 char *ptr = ebuf + sizeof ebuf;
11004                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11005                 zeros = 0;
11006
11007                 switch (base) {
11008                     unsigned dig;
11009                 case 16:
11010                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11011                     do {
11012                         dig = uv & 15;
11013                         *--ptr = p[dig];
11014                     } while (uv >>= 4);
11015                     if (tempalt) {
11016                         esignbuf[esignlen++] = '0';
11017                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11018                     }
11019                     break;
11020                 case 8:
11021                     do {
11022                         dig = uv & 7;
11023                         *--ptr = '0' + dig;
11024                     } while (uv >>= 3);
11025                     if (alt && *ptr != '0')
11026                         *--ptr = '0';
11027                     break;
11028                 case 2:
11029                     do {
11030                         dig = uv & 1;
11031                         *--ptr = '0' + dig;
11032                     } while (uv >>= 1);
11033                     if (tempalt) {
11034                         esignbuf[esignlen++] = '0';
11035                         esignbuf[esignlen++] = c;
11036                     }
11037                     break;
11038                 default:                /* it had better be ten or less */
11039                     do {
11040                         dig = uv % base;
11041                         *--ptr = '0' + dig;
11042                     } while (uv /= base);
11043                     break;
11044                 }
11045                 elen = (ebuf + sizeof ebuf) - ptr;
11046                 eptr = ptr;
11047                 if (has_precis) {
11048                     if (precis > elen)
11049                         zeros = precis - elen;
11050                     else if (precis == 0 && elen == 1 && *eptr == '0'
11051                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11052                         elen = 0;
11053
11054                 /* a precision nullifies the 0 flag. */
11055                     if (fill == '0')
11056                         fill = ' ';
11057                 }
11058             }
11059             break;
11060
11061             /* FLOATING POINT */
11062
11063         case 'F':
11064             c = 'f';            /* maybe %F isn't supported here */
11065             /*FALLTHROUGH*/
11066         case 'e': case 'E':
11067         case 'f':
11068         case 'g': case 'G':
11069             if (vectorize)
11070                 goto unknown;
11071
11072             /* This is evil, but floating point is even more evil */
11073
11074             /* for SV-style calling, we can only get NV
11075                for C-style calling, we assume %f is double;
11076                for simplicity we allow any of %Lf, %llf, %qf for long double
11077             */
11078             switch (intsize) {
11079             case 'V':
11080 #if defined(USE_LONG_DOUBLE)
11081                 intsize = 'q';
11082 #endif
11083                 break;
11084 /* [perl #20339] - we should accept and ignore %lf rather than die */
11085             case 'l':
11086                 /*FALLTHROUGH*/
11087             default:
11088 #if defined(USE_LONG_DOUBLE)
11089                 intsize = args ? 0 : 'q';
11090 #endif
11091                 break;
11092             case 'q':
11093 #if defined(HAS_LONG_DOUBLE)
11094                 break;
11095 #else
11096                 /*FALLTHROUGH*/
11097 #endif
11098             case 'c':
11099             case 'h':
11100             case 'z':
11101             case 't':
11102             case 'j':
11103                 goto unknown;
11104             }
11105
11106             /* now we need (long double) if intsize == 'q', else (double) */
11107             nv = (args) ?
11108 #if LONG_DOUBLESIZE > DOUBLESIZE
11109                 intsize == 'q' ?
11110                     va_arg(*args, long double) :
11111                     va_arg(*args, double)
11112 #else
11113                     va_arg(*args, double)
11114 #endif
11115                 : SvNV(argsv);
11116
11117             need = 0;
11118             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11119                else. frexp() has some unspecified behaviour for those three */
11120             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11121                 i = PERL_INT_MIN;
11122                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11123                    will cast our (long double) to (double) */
11124                 (void)Perl_frexp(nv, &i);
11125                 if (i == PERL_INT_MIN)
11126                     Perl_die(aTHX_ "panic: frexp");
11127                 if (i > 0)
11128                     need = BIT_DIGITS(i);
11129             }
11130             need += has_precis ? precis : 6; /* known default */
11131
11132             if (need < width)
11133                 need = width;
11134
11135 #ifdef HAS_LDBL_SPRINTF_BUG
11136             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11137                with sfio - Allen <allens@cpan.org> */
11138
11139 #  ifdef DBL_MAX
11140 #    define MY_DBL_MAX DBL_MAX
11141 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11142 #    if DOUBLESIZE >= 8
11143 #      define MY_DBL_MAX 1.7976931348623157E+308L
11144 #    else
11145 #      define MY_DBL_MAX 3.40282347E+38L
11146 #    endif
11147 #  endif
11148
11149 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11150 #    define MY_DBL_MAX_BUG 1L
11151 #  else
11152 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11153 #  endif
11154
11155 #  ifdef DBL_MIN
11156 #    define MY_DBL_MIN DBL_MIN
11157 #  else  /* XXX guessing! -Allen */
11158 #    if DOUBLESIZE >= 8
11159 #      define MY_DBL_MIN 2.2250738585072014E-308L
11160 #    else
11161 #      define MY_DBL_MIN 1.17549435E-38L
11162 #    endif
11163 #  endif
11164
11165             if ((intsize == 'q') && (c == 'f') &&
11166                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11167                 (need < DBL_DIG)) {
11168                 /* it's going to be short enough that
11169                  * long double precision is not needed */
11170
11171                 if ((nv <= 0L) && (nv >= -0L))
11172                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11173                 else {
11174                     /* would use Perl_fp_class as a double-check but not
11175                      * functional on IRIX - see perl.h comments */
11176
11177                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11178                         /* It's within the range that a double can represent */
11179 #if defined(DBL_MAX) && !defined(DBL_MIN)
11180                         if ((nv >= ((long double)1/DBL_MAX)) ||
11181                             (nv <= (-(long double)1/DBL_MAX)))
11182 #endif
11183                         fix_ldbl_sprintf_bug = TRUE;
11184                     }
11185                 }
11186                 if (fix_ldbl_sprintf_bug == TRUE) {
11187                     double temp;
11188
11189                     intsize = 0;
11190                     temp = (double)nv;
11191                     nv = (NV)temp;
11192                 }
11193             }
11194
11195 #  undef MY_DBL_MAX
11196 #  undef MY_DBL_MAX_BUG
11197 #  undef MY_DBL_MIN
11198
11199 #endif /* HAS_LDBL_SPRINTF_BUG */
11200
11201             need += 20; /* fudge factor */
11202             if (PL_efloatsize < need) {
11203                 Safefree(PL_efloatbuf);
11204                 PL_efloatsize = need + 20; /* more fudge */
11205                 Newx(PL_efloatbuf, PL_efloatsize, char);
11206                 PL_efloatbuf[0] = '\0';
11207             }
11208
11209             if ( !(width || left || plus || alt) && fill != '0'
11210                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11211                 /* See earlier comment about buggy Gconvert when digits,
11212                    aka precis is 0  */
11213                 if ( c == 'g' && precis) {
11214                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11215                     /* May return an empty string for digits==0 */
11216                     if (*PL_efloatbuf) {
11217                         elen = strlen(PL_efloatbuf);
11218                         goto float_converted;
11219                     }
11220                 } else if ( c == 'f' && !precis) {
11221                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11222                         break;
11223                 }
11224             }
11225             {
11226                 char *ptr = ebuf + sizeof ebuf;
11227                 *--ptr = '\0';
11228                 *--ptr = c;
11229                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11230 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11231                 if (intsize == 'q') {
11232                     /* Copy the one or more characters in a long double
11233                      * format before the 'base' ([efgEFG]) character to
11234                      * the format string. */
11235                     static char const prifldbl[] = PERL_PRIfldbl;
11236                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11237                     while (p >= prifldbl) { *--ptr = *p--; }
11238                 }
11239 #endif
11240                 if (has_precis) {
11241                     base = precis;
11242                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11243                     *--ptr = '.';
11244                 }
11245                 if (width) {
11246                     base = width;
11247                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11248                 }
11249                 if (fill == '0')
11250                     *--ptr = fill;
11251                 if (left)
11252                     *--ptr = '-';
11253                 if (plus)
11254                     *--ptr = plus;
11255                 if (alt)
11256                     *--ptr = '#';
11257                 *--ptr = '%';
11258
11259                 /* No taint.  Otherwise we are in the strange situation
11260                  * where printf() taints but print($float) doesn't.
11261                  * --jhi */
11262 #if defined(HAS_LONG_DOUBLE)
11263                 elen = ((intsize == 'q')
11264                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11265                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11266 #else
11267                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11268 #endif
11269             }
11270         float_converted:
11271             eptr = PL_efloatbuf;
11272             break;
11273
11274             /* SPECIAL */
11275
11276         case 'n':
11277             if (vectorize)
11278                 goto unknown;
11279             i = SvCUR(sv) - origlen;
11280             if (args) {
11281                 switch (intsize) {
11282                 case 'c':       *(va_arg(*args, char*)) = i; break;
11283                 case 'h':       *(va_arg(*args, short*)) = i; break;
11284                 default:        *(va_arg(*args, int*)) = i; break;
11285                 case 'l':       *(va_arg(*args, long*)) = i; break;
11286                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11287                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11288                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11289 #if HAS_C99
11290                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11291 #endif
11292                 case 'q':
11293 #ifdef HAS_QUAD
11294                                 *(va_arg(*args, Quad_t*)) = i; break;
11295 #else
11296                                 goto unknown;
11297 #endif
11298                 }
11299             }
11300             else
11301                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11302             continue;   /* not "break" */
11303
11304             /* UNKNOWN */
11305
11306         default:
11307       unknown:
11308             if (!args
11309                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11310                 && ckWARN(WARN_PRINTF))
11311             {
11312                 SV * const msg = sv_newmortal();
11313                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11314                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11315                 if (fmtstart < patend) {
11316                     const char * const fmtend = q < patend ? q : patend;
11317                     const char * f;
11318                     sv_catpvs(msg, "\"%");
11319                     for (f = fmtstart; f < fmtend; f++) {
11320                         if (isPRINT(*f)) {
11321                             sv_catpvn_nomg(msg, f, 1);
11322                         } else {
11323                             Perl_sv_catpvf(aTHX_ msg,
11324                                            "\\%03"UVof, (UV)*f & 0xFF);
11325                         }
11326                     }
11327                     sv_catpvs(msg, "\"");
11328                 } else {
11329                     sv_catpvs(msg, "end of string");
11330                 }
11331                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11332             }
11333
11334             /* output mangled stuff ... */
11335             if (c == '\0')
11336                 --q;
11337             eptr = p;
11338             elen = q - p;
11339
11340             /* ... right here, because formatting flags should not apply */
11341             SvGROW(sv, SvCUR(sv) + elen + 1);
11342             p = SvEND(sv);
11343             Copy(eptr, p, elen, char);
11344             p += elen;
11345             *p = '\0';
11346             SvCUR_set(sv, p - SvPVX_const(sv));
11347             svix = osvix;
11348             continue;   /* not "break" */
11349         }
11350
11351         if (is_utf8 != has_utf8) {
11352             if (is_utf8) {
11353                 if (SvCUR(sv))
11354                     sv_utf8_upgrade(sv);
11355             }
11356             else {
11357                 const STRLEN old_elen = elen;
11358                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11359                 sv_utf8_upgrade(nsv);
11360                 eptr = SvPVX_const(nsv);
11361                 elen = SvCUR(nsv);
11362
11363                 if (width) { /* fudge width (can't fudge elen) */
11364                     width += elen - old_elen;
11365                 }
11366                 is_utf8 = TRUE;
11367             }
11368         }
11369
11370         have = esignlen + zeros + elen;
11371         if (have < zeros)
11372             Perl_croak_memory_wrap();
11373
11374         need = (have > width ? have : width);
11375         gap = need - have;
11376
11377         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11378             Perl_croak_memory_wrap();
11379         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11380         p = SvEND(sv);
11381         if (esignlen && fill == '0') {
11382             int i;
11383             for (i = 0; i < (int)esignlen; i++)
11384                 *p++ = esignbuf[i];
11385         }
11386         if (gap && !left) {
11387             memset(p, fill, gap);
11388             p += gap;
11389         }
11390         if (esignlen && fill != '0') {
11391             int i;
11392             for (i = 0; i < (int)esignlen; i++)
11393                 *p++ = esignbuf[i];
11394         }
11395         if (zeros) {
11396             int i;
11397             for (i = zeros; i; i--)
11398                 *p++ = '0';
11399         }
11400         if (elen) {
11401             Copy(eptr, p, elen, char);
11402             p += elen;
11403         }
11404         if (gap && left) {
11405             memset(p, ' ', gap);
11406             p += gap;
11407         }
11408         if (vectorize) {
11409             if (veclen) {
11410                 Copy(dotstr, p, dotstrlen, char);
11411                 p += dotstrlen;
11412             }
11413             else
11414                 vectorize = FALSE;              /* done iterating over vecstr */
11415         }
11416         if (is_utf8)
11417             has_utf8 = TRUE;
11418         if (has_utf8)
11419             SvUTF8_on(sv);
11420         *p = '\0';
11421         SvCUR_set(sv, p - SvPVX_const(sv));
11422         if (vectorize) {
11423             esignlen = 0;
11424             goto vector;
11425         }
11426     }
11427     SvTAINT(sv);
11428 }
11429
11430 /* =========================================================================
11431
11432 =head1 Cloning an interpreter
11433
11434 All the macros and functions in this section are for the private use of
11435 the main function, perl_clone().
11436
11437 The foo_dup() functions make an exact copy of an existing foo thingy.
11438 During the course of a cloning, a hash table is used to map old addresses
11439 to new addresses.  The table is created and manipulated with the
11440 ptr_table_* functions.
11441
11442 =cut
11443
11444  * =========================================================================*/
11445
11446
11447 #if defined(USE_ITHREADS)
11448
11449 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11450 #ifndef GpREFCNT_inc
11451 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11452 #endif
11453
11454
11455 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11456    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11457    If this changes, please unmerge ss_dup.
11458    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11459 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11460 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11461 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11462 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11463 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11464 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11465 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11466 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11467 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11468 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11469 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11470 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11471 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11472
11473 /* clone a parser */
11474
11475 yy_parser *
11476 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11477 {
11478     yy_parser *parser;
11479
11480     PERL_ARGS_ASSERT_PARSER_DUP;
11481
11482     if (!proto)
11483         return NULL;
11484
11485     /* look for it in the table first */
11486     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11487     if (parser)
11488         return parser;
11489
11490     /* create anew and remember what it is */
11491     Newxz(parser, 1, yy_parser);
11492     ptr_table_store(PL_ptr_table, proto, parser);
11493
11494     /* XXX these not yet duped */
11495     parser->old_parser = NULL;
11496     parser->stack = NULL;
11497     parser->ps = NULL;
11498     parser->stack_size = 0;
11499     /* XXX parser->stack->state = 0; */
11500
11501     /* XXX eventually, just Copy() most of the parser struct ? */
11502
11503     parser->lex_brackets = proto->lex_brackets;
11504     parser->lex_casemods = proto->lex_casemods;
11505     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11506                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11507     parser->lex_casestack = savepvn(proto->lex_casestack,
11508                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11509     parser->lex_defer   = proto->lex_defer;
11510     parser->lex_dojoin  = proto->lex_dojoin;
11511     parser->lex_expect  = proto->lex_expect;
11512     parser->lex_formbrack = proto->lex_formbrack;
11513     parser->lex_inpat   = proto->lex_inpat;
11514     parser->lex_inwhat  = proto->lex_inwhat;
11515     parser->lex_op      = proto->lex_op;
11516     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11517     parser->lex_starts  = proto->lex_starts;
11518     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11519     parser->multi_close = proto->multi_close;
11520     parser->multi_open  = proto->multi_open;
11521     parser->multi_start = proto->multi_start;
11522     parser->multi_end   = proto->multi_end;
11523     parser->preambled   = proto->preambled;
11524     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11525     parser->linestr     = sv_dup_inc(proto->linestr, param);
11526     parser->expect      = proto->expect;
11527     parser->copline     = proto->copline;
11528     parser->last_lop_op = proto->last_lop_op;
11529     parser->lex_state   = proto->lex_state;
11530     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11531     /* rsfp_filters entries have fake IoDIRP() */
11532     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11533     parser->in_my       = proto->in_my;
11534     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11535     parser->error_count = proto->error_count;
11536
11537
11538     parser->linestr     = sv_dup_inc(proto->linestr, param);
11539
11540     {
11541         char * const ols = SvPVX(proto->linestr);
11542         char * const ls  = SvPVX(parser->linestr);
11543
11544         parser->bufptr      = ls + (proto->bufptr >= ols ?
11545                                     proto->bufptr -  ols : 0);
11546         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11547                                     proto->oldbufptr -  ols : 0);
11548         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11549                                     proto->oldoldbufptr -  ols : 0);
11550         parser->linestart   = ls + (proto->linestart >= ols ?
11551                                     proto->linestart -  ols : 0);
11552         parser->last_uni    = ls + (proto->last_uni >= ols ?
11553                                     proto->last_uni -  ols : 0);
11554         parser->last_lop    = ls + (proto->last_lop >= ols ?
11555                                     proto->last_lop -  ols : 0);
11556
11557         parser->bufend      = ls + SvCUR(parser->linestr);
11558     }
11559
11560     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11561
11562
11563 #ifdef PERL_MAD
11564     parser->endwhite    = proto->endwhite;
11565     parser->faketokens  = proto->faketokens;
11566     parser->lasttoke    = proto->lasttoke;
11567     parser->nextwhite   = proto->nextwhite;
11568     parser->realtokenstart = proto->realtokenstart;
11569     parser->skipwhite   = proto->skipwhite;
11570     parser->thisclose   = proto->thisclose;
11571     parser->thismad     = proto->thismad;
11572     parser->thisopen    = proto->thisopen;
11573     parser->thisstuff   = proto->thisstuff;
11574     parser->thistoken   = proto->thistoken;
11575     parser->thiswhite   = proto->thiswhite;
11576
11577     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11578     parser->curforce    = proto->curforce;
11579 #else
11580     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11581     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11582     parser->nexttoke    = proto->nexttoke;
11583 #endif
11584
11585     /* XXX should clone saved_curcop here, but we aren't passed
11586      * proto_perl; so do it in perl_clone_using instead */
11587
11588     return parser;
11589 }
11590
11591
11592 /* duplicate a file handle */
11593
11594 PerlIO *
11595 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11596 {
11597     PerlIO *ret;
11598
11599     PERL_ARGS_ASSERT_FP_DUP;
11600     PERL_UNUSED_ARG(type);
11601
11602     if (!fp)
11603         return (PerlIO*)NULL;
11604
11605     /* look for it in the table first */
11606     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11607     if (ret)
11608         return ret;
11609
11610     /* create anew and remember what it is */
11611     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11612     ptr_table_store(PL_ptr_table, fp, ret);
11613     return ret;
11614 }
11615
11616 /* duplicate a directory handle */
11617
11618 DIR *
11619 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11620 {
11621     DIR *ret;
11622
11623 #ifdef HAS_FCHDIR
11624     DIR *pwd;
11625     const Direntry_t *dirent;
11626     char smallbuf[256];
11627     char *name = NULL;
11628     STRLEN len = 0;
11629     long pos;
11630 #endif
11631
11632     PERL_UNUSED_CONTEXT;
11633     PERL_ARGS_ASSERT_DIRP_DUP;
11634
11635     if (!dp)
11636         return (DIR*)NULL;
11637
11638     /* look for it in the table first */
11639     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11640     if (ret)
11641         return ret;
11642
11643 #ifdef HAS_FCHDIR
11644
11645     PERL_UNUSED_ARG(param);
11646
11647     /* create anew */
11648
11649     /* open the current directory (so we can switch back) */
11650     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11651
11652     /* chdir to our dir handle and open the present working directory */
11653     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11654         PerlDir_close(pwd);
11655         return (DIR *)NULL;
11656     }
11657     /* Now we should have two dir handles pointing to the same dir. */
11658
11659     /* Be nice to the calling code and chdir back to where we were. */
11660     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11661
11662     /* We have no need of the pwd handle any more. */
11663     PerlDir_close(pwd);
11664
11665 #ifdef DIRNAMLEN
11666 # define d_namlen(d) (d)->d_namlen
11667 #else
11668 # define d_namlen(d) strlen((d)->d_name)
11669 #endif
11670     /* Iterate once through dp, to get the file name at the current posi-
11671        tion. Then step back. */
11672     pos = PerlDir_tell(dp);
11673     if ((dirent = PerlDir_read(dp))) {
11674         len = d_namlen(dirent);
11675         if (len <= sizeof smallbuf) name = smallbuf;
11676         else Newx(name, len, char);
11677         Move(dirent->d_name, name, len, char);
11678     }
11679     PerlDir_seek(dp, pos);
11680
11681     /* Iterate through the new dir handle, till we find a file with the
11682        right name. */
11683     if (!dirent) /* just before the end */
11684         for(;;) {
11685             pos = PerlDir_tell(ret);
11686             if (PerlDir_read(ret)) continue; /* not there yet */
11687             PerlDir_seek(ret, pos); /* step back */
11688             break;
11689         }
11690     else {
11691         const long pos0 = PerlDir_tell(ret);
11692         for(;;) {
11693             pos = PerlDir_tell(ret);
11694             if ((dirent = PerlDir_read(ret))) {
11695                 if (len == d_namlen(dirent)
11696                  && memEQ(name, dirent->d_name, len)) {
11697                     /* found it */
11698                     PerlDir_seek(ret, pos); /* step back */
11699                     break;
11700                 }
11701                 /* else we are not there yet; keep iterating */
11702             }
11703             else { /* This is not meant to happen. The best we can do is
11704                       reset the iterator to the beginning. */
11705                 PerlDir_seek(ret, pos0);
11706                 break;
11707             }
11708         }
11709     }
11710 #undef d_namlen
11711
11712     if (name && name != smallbuf)
11713         Safefree(name);
11714 #endif
11715
11716 #ifdef WIN32
11717     ret = win32_dirp_dup(dp, param);
11718 #endif
11719
11720     /* pop it in the pointer table */
11721     if (ret)
11722         ptr_table_store(PL_ptr_table, dp, ret);
11723
11724     return ret;
11725 }
11726
11727 /* duplicate a typeglob */
11728
11729 GP *
11730 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11731 {
11732     GP *ret;
11733
11734     PERL_ARGS_ASSERT_GP_DUP;
11735
11736     if (!gp)
11737         return (GP*)NULL;
11738     /* look for it in the table first */
11739     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11740     if (ret)
11741         return ret;
11742
11743     /* create anew and remember what it is */
11744     Newxz(ret, 1, GP);
11745     ptr_table_store(PL_ptr_table, gp, ret);
11746
11747     /* clone */
11748     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11749        on Newxz() to do this for us.  */
11750     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11751     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11752     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11753     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11754     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11755     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11756     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11757     ret->gp_cvgen       = gp->gp_cvgen;
11758     ret->gp_line        = gp->gp_line;
11759     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11760     return ret;
11761 }
11762
11763 /* duplicate a chain of magic */
11764
11765 MAGIC *
11766 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11767 {
11768     MAGIC *mgret = NULL;
11769     MAGIC **mgprev_p = &mgret;
11770
11771     PERL_ARGS_ASSERT_MG_DUP;
11772
11773     for (; mg; mg = mg->mg_moremagic) {
11774         MAGIC *nmg;
11775
11776         if ((param->flags & CLONEf_JOIN_IN)
11777                 && mg->mg_type == PERL_MAGIC_backref)
11778             /* when joining, we let the individual SVs add themselves to
11779              * backref as needed. */
11780             continue;
11781
11782         Newx(nmg, 1, MAGIC);
11783         *mgprev_p = nmg;
11784         mgprev_p = &(nmg->mg_moremagic);
11785
11786         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11787            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11788            from the original commit adding Perl_mg_dup() - revision 4538.
11789            Similarly there is the annotation "XXX random ptr?" next to the
11790            assignment to nmg->mg_ptr.  */
11791         *nmg = *mg;
11792
11793         /* FIXME for plugins
11794         if (nmg->mg_type == PERL_MAGIC_qr) {
11795             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11796         }
11797         else
11798         */
11799         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11800                           ? nmg->mg_type == PERL_MAGIC_backref
11801                                 /* The backref AV has its reference
11802                                  * count deliberately bumped by 1 */
11803                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11804                                                     nmg->mg_obj, param))
11805                                 : sv_dup_inc(nmg->mg_obj, param)
11806                           : sv_dup(nmg->mg_obj, param);
11807
11808         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11809             if (nmg->mg_len > 0) {
11810                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11811                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11812                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11813                 {
11814                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11815                     sv_dup_inc_multiple((SV**)(namtp->table),
11816                                         (SV**)(namtp->table), NofAMmeth, param);
11817                 }
11818             }
11819             else if (nmg->mg_len == HEf_SVKEY)
11820                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11821         }
11822         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11823             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11824         }
11825     }
11826     return mgret;
11827 }
11828
11829 #endif /* USE_ITHREADS */
11830
11831 struct ptr_tbl_arena {
11832     struct ptr_tbl_arena *next;
11833     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11834 };
11835
11836 /* create a new pointer-mapping table */
11837
11838 PTR_TBL_t *
11839 Perl_ptr_table_new(pTHX)
11840 {
11841     PTR_TBL_t *tbl;
11842     PERL_UNUSED_CONTEXT;
11843
11844     Newx(tbl, 1, PTR_TBL_t);
11845     tbl->tbl_max        = 511;
11846     tbl->tbl_items      = 0;
11847     tbl->tbl_arena      = NULL;
11848     tbl->tbl_arena_next = NULL;
11849     tbl->tbl_arena_end  = NULL;
11850     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11851     return tbl;
11852 }
11853
11854 #define PTR_TABLE_HASH(ptr) \
11855   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11856
11857 /* map an existing pointer using a table */
11858
11859 STATIC PTR_TBL_ENT_t *
11860 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11861 {
11862     PTR_TBL_ENT_t *tblent;
11863     const UV hash = PTR_TABLE_HASH(sv);
11864
11865     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11866
11867     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11868     for (; tblent; tblent = tblent->next) {
11869         if (tblent->oldval == sv)
11870             return tblent;
11871     }
11872     return NULL;
11873 }
11874
11875 void *
11876 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11877 {
11878     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11879
11880     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11881     PERL_UNUSED_CONTEXT;
11882
11883     return tblent ? tblent->newval : NULL;
11884 }
11885
11886 /* add a new entry to a pointer-mapping table */
11887
11888 void
11889 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11890 {
11891     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11892
11893     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11894     PERL_UNUSED_CONTEXT;
11895
11896     if (tblent) {
11897         tblent->newval = newsv;
11898     } else {
11899         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11900
11901         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11902             struct ptr_tbl_arena *new_arena;
11903
11904             Newx(new_arena, 1, struct ptr_tbl_arena);
11905             new_arena->next = tbl->tbl_arena;
11906             tbl->tbl_arena = new_arena;
11907             tbl->tbl_arena_next = new_arena->array;
11908             tbl->tbl_arena_end = new_arena->array
11909                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11910         }
11911
11912         tblent = tbl->tbl_arena_next++;
11913
11914         tblent->oldval = oldsv;
11915         tblent->newval = newsv;
11916         tblent->next = tbl->tbl_ary[entry];
11917         tbl->tbl_ary[entry] = tblent;
11918         tbl->tbl_items++;
11919         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11920             ptr_table_split(tbl);
11921     }
11922 }
11923
11924 /* double the hash bucket size of an existing ptr table */
11925
11926 void
11927 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11928 {
11929     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11930     const UV oldsize = tbl->tbl_max + 1;
11931     UV newsize = oldsize * 2;
11932     UV i;
11933
11934     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11935     PERL_UNUSED_CONTEXT;
11936
11937     Renew(ary, newsize, PTR_TBL_ENT_t*);
11938     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11939     tbl->tbl_max = --newsize;
11940     tbl->tbl_ary = ary;
11941     for (i=0; i < oldsize; i++, ary++) {
11942         PTR_TBL_ENT_t **entp = ary;
11943         PTR_TBL_ENT_t *ent = *ary;
11944         PTR_TBL_ENT_t **curentp;
11945         if (!ent)
11946             continue;
11947         curentp = ary + oldsize;
11948         do {
11949             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11950                 *entp = ent->next;
11951                 ent->next = *curentp;
11952                 *curentp = ent;
11953             }
11954             else
11955                 entp = &ent->next;
11956             ent = *entp;
11957         } while (ent);
11958     }
11959 }
11960
11961 /* remove all the entries from a ptr table */
11962 /* Deprecated - will be removed post 5.14 */
11963
11964 void
11965 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11966 {
11967     if (tbl && tbl->tbl_items) {
11968         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11969
11970         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11971
11972         while (arena) {
11973             struct ptr_tbl_arena *next = arena->next;
11974
11975             Safefree(arena);
11976             arena = next;
11977         };
11978
11979         tbl->tbl_items = 0;
11980         tbl->tbl_arena = NULL;
11981         tbl->tbl_arena_next = NULL;
11982         tbl->tbl_arena_end = NULL;
11983     }
11984 }
11985
11986 /* clear and free a ptr table */
11987
11988 void
11989 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11990 {
11991     struct ptr_tbl_arena *arena;
11992
11993     if (!tbl) {
11994         return;
11995     }
11996
11997     arena = tbl->tbl_arena;
11998
11999     while (arena) {
12000         struct ptr_tbl_arena *next = arena->next;
12001
12002         Safefree(arena);
12003         arena = next;
12004     }
12005
12006     Safefree(tbl->tbl_ary);
12007     Safefree(tbl);
12008 }
12009
12010 #if defined(USE_ITHREADS)
12011
12012 void
12013 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12014 {
12015     PERL_ARGS_ASSERT_RVPV_DUP;
12016
12017     assert(!isREGEXP(sstr));
12018     if (SvROK(sstr)) {
12019         if (SvWEAKREF(sstr)) {
12020             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12021             if (param->flags & CLONEf_JOIN_IN) {
12022                 /* if joining, we add any back references individually rather
12023                  * than copying the whole backref array */
12024                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12025             }
12026         }
12027         else
12028             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12029     }
12030     else if (SvPVX_const(sstr)) {
12031         /* Has something there */
12032         if (SvLEN(sstr)) {
12033             /* Normal PV - clone whole allocated space */
12034             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12035             /* sstr may not be that normal, but actually copy on write.
12036                But we are a true, independent SV, so:  */
12037             SvIsCOW_off(dstr);
12038         }
12039         else {
12040             /* Special case - not normally malloced for some reason */
12041             if (isGV_with_GP(sstr)) {
12042                 /* Don't need to do anything here.  */
12043             }
12044             else if ((SvIsCOW(sstr))) {
12045                 /* A "shared" PV - clone it as "shared" PV */
12046                 SvPV_set(dstr,
12047                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12048                                          param)));
12049             }
12050             else {
12051                 /* Some other special case - random pointer */
12052                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12053             }
12054         }
12055     }
12056     else {
12057         /* Copy the NULL */
12058         SvPV_set(dstr, NULL);
12059     }
12060 }
12061
12062 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12063 static SV **
12064 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12065                       SSize_t items, CLONE_PARAMS *const param)
12066 {
12067     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12068
12069     while (items-- > 0) {
12070         *dest++ = sv_dup_inc(*source++, param);
12071     }
12072
12073     return dest;
12074 }
12075
12076 /* duplicate an SV of any type (including AV, HV etc) */
12077
12078 static SV *
12079 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12080 {
12081     dVAR;
12082     SV *dstr;
12083
12084     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12085
12086     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12087 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12088         abort();
12089 #endif
12090         return NULL;
12091     }
12092     /* look for it in the table first */
12093     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12094     if (dstr)
12095         return dstr;
12096
12097     if(param->flags & CLONEf_JOIN_IN) {
12098         /** We are joining here so we don't want do clone
12099             something that is bad **/
12100         if (SvTYPE(sstr) == SVt_PVHV) {
12101             const HEK * const hvname = HvNAME_HEK(sstr);
12102             if (hvname) {
12103                 /** don't clone stashes if they already exist **/
12104                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12105                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12106                 ptr_table_store(PL_ptr_table, sstr, dstr);
12107                 return dstr;
12108             }
12109         }
12110         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12111             HV *stash = GvSTASH(sstr);
12112             const HEK * hvname;
12113             if (stash && (hvname = HvNAME_HEK(stash))) {
12114                 /** don't clone GVs if they already exist **/
12115                 SV **svp;
12116                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12117                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12118                 svp = hv_fetch(
12119                         stash, GvNAME(sstr),
12120                         GvNAMEUTF8(sstr)
12121                             ? -GvNAMELEN(sstr)
12122                             :  GvNAMELEN(sstr),
12123                         0
12124                       );
12125                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12126                     ptr_table_store(PL_ptr_table, sstr, *svp);
12127                     return *svp;
12128                 }
12129             }
12130         }
12131     }
12132
12133     /* create anew and remember what it is */
12134     new_SV(dstr);
12135
12136 #ifdef DEBUG_LEAKING_SCALARS
12137     dstr->sv_debug_optype = sstr->sv_debug_optype;
12138     dstr->sv_debug_line = sstr->sv_debug_line;
12139     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12140     dstr->sv_debug_parent = (SV*)sstr;
12141     FREE_SV_DEBUG_FILE(dstr);
12142     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12143 #endif
12144
12145     ptr_table_store(PL_ptr_table, sstr, dstr);
12146
12147     /* clone */
12148     SvFLAGS(dstr)       = SvFLAGS(sstr);
12149     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12150     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12151
12152 #ifdef DEBUGGING
12153     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12154         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12155                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12156 #endif
12157
12158     /* don't clone objects whose class has asked us not to */
12159     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12160         SvFLAGS(dstr) = 0;
12161         return dstr;
12162     }
12163
12164     switch (SvTYPE(sstr)) {
12165     case SVt_NULL:
12166         SvANY(dstr)     = NULL;
12167         break;
12168     case SVt_IV:
12169         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12170         if(SvROK(sstr)) {
12171             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12172         } else {
12173             SvIV_set(dstr, SvIVX(sstr));
12174         }
12175         break;
12176     case SVt_NV:
12177         SvANY(dstr)     = new_XNV();
12178         SvNV_set(dstr, SvNVX(sstr));
12179         break;
12180         /* case SVt_DUMMY: */
12181     default:
12182         {
12183             /* These are all the types that need complex bodies allocating.  */
12184             void *new_body;
12185             const svtype sv_type = SvTYPE(sstr);
12186             const struct body_details *const sv_type_details
12187                 = bodies_by_type + sv_type;
12188
12189             switch (sv_type) {
12190             default:
12191                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12192                 break;
12193
12194             case SVt_PVGV:
12195             case SVt_PVIO:
12196             case SVt_PVFM:
12197             case SVt_PVHV:
12198             case SVt_PVAV:
12199             case SVt_PVCV:
12200             case SVt_PVLV:
12201             case SVt_REGEXP:
12202             case SVt_PVMG:
12203             case SVt_PVNV:
12204             case SVt_PVIV:
12205             case SVt_PV:
12206                 assert(sv_type_details->body_size);
12207                 if (sv_type_details->arena) {
12208                     new_body_inline(new_body, sv_type);
12209                     new_body
12210                         = (void*)((char*)new_body - sv_type_details->offset);
12211                 } else {
12212                     new_body = new_NOARENA(sv_type_details);
12213                 }
12214             }
12215             assert(new_body);
12216             SvANY(dstr) = new_body;
12217
12218 #ifndef PURIFY
12219             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12220                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12221                  sv_type_details->copy, char);
12222 #else
12223             Copy(((char*)SvANY(sstr)),
12224                  ((char*)SvANY(dstr)),
12225                  sv_type_details->body_size + sv_type_details->offset, char);
12226 #endif
12227
12228             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12229                 && !isGV_with_GP(dstr)
12230                 && !isREGEXP(dstr)
12231                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12232                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12233
12234             /* The Copy above means that all the source (unduplicated) pointers
12235                are now in the destination.  We can check the flags and the
12236                pointers in either, but it's possible that there's less cache
12237                missing by always going for the destination.
12238                FIXME - instrument and check that assumption  */
12239             if (sv_type >= SVt_PVMG) {
12240                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12241                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12242                 } else if (SvMAGIC(dstr))
12243                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12244                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12245                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12246                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12247             }
12248
12249             /* The cast silences a GCC warning about unhandled types.  */
12250             switch ((int)sv_type) {
12251             case SVt_PV:
12252                 break;
12253             case SVt_PVIV:
12254                 break;
12255             case SVt_PVNV:
12256                 break;
12257             case SVt_PVMG:
12258                 break;
12259             case SVt_REGEXP:
12260               duprex:
12261                 /* FIXME for plugins */
12262                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12263                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12264                 break;
12265             case SVt_PVLV:
12266                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12267                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12268                     LvTARG(dstr) = dstr;
12269                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12270                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12271                 else
12272                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12273                 if (isREGEXP(sstr)) goto duprex;
12274             case SVt_PVGV:
12275                 /* non-GP case already handled above */
12276                 if(isGV_with_GP(sstr)) {
12277                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12278                     /* Don't call sv_add_backref here as it's going to be
12279                        created as part of the magic cloning of the symbol
12280                        table--unless this is during a join and the stash
12281                        is not actually being cloned.  */
12282                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12283                        at the point of this comment.  */
12284                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12285                     if (param->flags & CLONEf_JOIN_IN)
12286                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12287                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12288                     (void)GpREFCNT_inc(GvGP(dstr));
12289                 }
12290                 break;
12291             case SVt_PVIO:
12292                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12293                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12294                     /* I have no idea why fake dirp (rsfps)
12295                        should be treated differently but otherwise
12296                        we end up with leaks -- sky*/
12297                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12298                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12299                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12300                 } else {
12301                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12302                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12303                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12304                     if (IoDIRP(dstr)) {
12305                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12306                     } else {
12307                         NOOP;
12308                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12309                     }
12310                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12311                 }
12312                 if (IoOFP(dstr) == IoIFP(sstr))
12313                     IoOFP(dstr) = IoIFP(dstr);
12314                 else
12315                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12316                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12317                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12318                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12319                 break;
12320             case SVt_PVAV:
12321                 /* avoid cloning an empty array */
12322                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12323                     SV **dst_ary, **src_ary;
12324                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12325
12326                     src_ary = AvARRAY((const AV *)sstr);
12327                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12328                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12329                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12330                     AvALLOC((const AV *)dstr) = dst_ary;
12331                     if (AvREAL((const AV *)sstr)) {
12332                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12333                                                       param);
12334                     }
12335                     else {
12336                         while (items-- > 0)
12337                             *dst_ary++ = sv_dup(*src_ary++, param);
12338                     }
12339                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12340                     while (items-- > 0) {
12341                         *dst_ary++ = &PL_sv_undef;
12342                     }
12343                 }
12344                 else {
12345                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12346                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12347                     AvMAX(  (const AV *)dstr)   = -1;
12348                     AvFILLp((const AV *)dstr)   = -1;
12349                 }
12350                 break;
12351             case SVt_PVHV:
12352                 if (HvARRAY((const HV *)sstr)) {
12353                     STRLEN i = 0;
12354                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12355                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12356                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12357                     char *darray;
12358                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12359                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12360                         char);
12361                     HvARRAY(dstr) = (HE**)darray;
12362                     while (i <= sxhv->xhv_max) {
12363                         const HE * const source = HvARRAY(sstr)[i];
12364                         HvARRAY(dstr)[i] = source
12365                             ? he_dup(source, sharekeys, param) : 0;
12366                         ++i;
12367                     }
12368                     if (SvOOK(sstr)) {
12369                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12370                         struct xpvhv_aux * const daux = HvAUX(dstr);
12371                         /* This flag isn't copied.  */
12372                         SvOOK_on(dstr);
12373
12374                         if (saux->xhv_name_count) {
12375                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12376                             const I32 count
12377                              = saux->xhv_name_count < 0
12378                                 ? -saux->xhv_name_count
12379                                 :  saux->xhv_name_count;
12380                             HEK **shekp = sname + count;
12381                             HEK **dhekp;
12382                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12383                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12384                             while (shekp-- > sname) {
12385                                 dhekp--;
12386                                 *dhekp = hek_dup(*shekp, param);
12387                             }
12388                         }
12389                         else {
12390                             daux->xhv_name_u.xhvnameu_name
12391                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12392                                           param);
12393                         }
12394                         daux->xhv_name_count = saux->xhv_name_count;
12395
12396                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12397                         daux->xhv_riter = saux->xhv_riter;
12398                         daux->xhv_eiter = saux->xhv_eiter
12399                             ? he_dup(saux->xhv_eiter,
12400                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12401                         /* backref array needs refcnt=2; see sv_add_backref */
12402                         daux->xhv_backreferences =
12403                             (param->flags & CLONEf_JOIN_IN)
12404                                 /* when joining, we let the individual GVs and
12405                                  * CVs add themselves to backref as
12406                                  * needed. This avoids pulling in stuff
12407                                  * that isn't required, and simplifies the
12408                                  * case where stashes aren't cloned back
12409                                  * if they already exist in the parent
12410                                  * thread */
12411                             ? NULL
12412                             : saux->xhv_backreferences
12413                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12414                                     ? MUTABLE_AV(SvREFCNT_inc(
12415                                           sv_dup_inc((const SV *)
12416                                             saux->xhv_backreferences, param)))
12417                                     : MUTABLE_AV(sv_dup((const SV *)
12418                                             saux->xhv_backreferences, param))
12419                                 : 0;
12420
12421                         daux->xhv_mro_meta = saux->xhv_mro_meta
12422                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12423                             : 0;
12424                         daux->xhv_super = NULL;
12425
12426                         /* Record stashes for possible cloning in Perl_clone(). */
12427                         if (HvNAME(sstr))
12428                             av_push(param->stashes, dstr);
12429                     }
12430                 }
12431                 else
12432                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12433                 break;
12434             case SVt_PVCV:
12435                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12436                     CvDEPTH(dstr) = 0;
12437                 }
12438                 /*FALLTHROUGH*/
12439             case SVt_PVFM:
12440                 /* NOTE: not refcounted */
12441                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12442                     hv_dup(CvSTASH(dstr), param);
12443                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12444                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12445                 if (!CvISXSUB(dstr)) {
12446                     OP_REFCNT_LOCK;
12447                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12448                     OP_REFCNT_UNLOCK;
12449                     CvSLABBED_off(dstr);
12450                 } else if (CvCONST(dstr)) {
12451                     CvXSUBANY(dstr).any_ptr =
12452                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12453                 }
12454                 assert(!CvSLABBED(dstr));
12455                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12456                 if (CvNAMED(dstr))
12457                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12458                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12459                 /* don't dup if copying back - CvGV isn't refcounted, so the
12460                  * duped GV may never be freed. A bit of a hack! DAPM */
12461                 else
12462                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12463                     CvCVGV_RC(dstr)
12464                     ? gv_dup_inc(CvGV(sstr), param)
12465                     : (param->flags & CLONEf_JOIN_IN)
12466                         ? NULL
12467                         : gv_dup(CvGV(sstr), param);
12468
12469                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12470                 CvOUTSIDE(dstr) =
12471                     CvWEAKOUTSIDE(sstr)
12472                     ? cv_dup(    CvOUTSIDE(dstr), param)
12473                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12474                 break;
12475             }
12476         }
12477     }
12478
12479     return dstr;
12480  }
12481
12482 SV *
12483 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12484 {
12485     PERL_ARGS_ASSERT_SV_DUP_INC;
12486     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12487 }
12488
12489 SV *
12490 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12491 {
12492     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12493     PERL_ARGS_ASSERT_SV_DUP;
12494
12495     /* Track every SV that (at least initially) had a reference count of 0.
12496        We need to do this by holding an actual reference to it in this array.
12497        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12498        (akin to the stashes hash, and the perl stack), we come unstuck if
12499        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12500        thread) is manipulated in a CLONE method, because CLONE runs before the
12501        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12502        (and fix things up by giving each a reference via the temps stack).
12503        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12504        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12505        before the walk of unreferenced happens and a reference to that is SV
12506        added to the temps stack. At which point we have the same SV considered
12507        to be in use, and free to be re-used. Not good.
12508     */
12509     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12510         assert(param->unreferenced);
12511         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12512     }
12513
12514     return dstr;
12515 }
12516
12517 /* duplicate a context */
12518
12519 PERL_CONTEXT *
12520 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12521 {
12522     PERL_CONTEXT *ncxs;
12523
12524     PERL_ARGS_ASSERT_CX_DUP;
12525
12526     if (!cxs)
12527         return (PERL_CONTEXT*)NULL;
12528
12529     /* look for it in the table first */
12530     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12531     if (ncxs)
12532         return ncxs;
12533
12534     /* create anew and remember what it is */
12535     Newx(ncxs, max + 1, PERL_CONTEXT);
12536     ptr_table_store(PL_ptr_table, cxs, ncxs);
12537     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12538
12539     while (ix >= 0) {
12540         PERL_CONTEXT * const ncx = &ncxs[ix];
12541         if (CxTYPE(ncx) == CXt_SUBST) {
12542             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12543         }
12544         else {
12545             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12546             switch (CxTYPE(ncx)) {
12547             case CXt_SUB:
12548                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12549                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12550                                            : cv_dup(ncx->blk_sub.cv,param));
12551                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12552                                            ? av_dup_inc(ncx->blk_sub.argarray,
12553                                                         param)
12554                                            : NULL);
12555                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12556                                                      param);
12557                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12558                                            ncx->blk_sub.oldcomppad);
12559                 break;
12560             case CXt_EVAL:
12561                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12562                                                       param);
12563                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12564                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12565                 break;
12566             case CXt_LOOP_LAZYSV:
12567                 ncx->blk_loop.state_u.lazysv.end
12568                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12569                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12570                    actually being the same function, and order equivalence of
12571                    the two unions.
12572                    We can assert the later [but only at run time :-(]  */
12573                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12574                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12575             case CXt_LOOP_FOR:
12576                 ncx->blk_loop.state_u.ary.ary
12577                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12578             case CXt_LOOP_LAZYIV:
12579             case CXt_LOOP_PLAIN:
12580                 if (CxPADLOOP(ncx)) {
12581                     ncx->blk_loop.itervar_u.oldcomppad
12582                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12583                                         ncx->blk_loop.itervar_u.oldcomppad);
12584                 } else {
12585                     ncx->blk_loop.itervar_u.gv
12586                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12587                                     param);
12588                 }
12589                 break;
12590             case CXt_FORMAT:
12591                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12592                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12593                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12594                                                      param);
12595                 break;
12596             case CXt_BLOCK:
12597             case CXt_NULL:
12598             case CXt_WHEN:
12599             case CXt_GIVEN:
12600                 break;
12601             }
12602         }
12603         --ix;
12604     }
12605     return ncxs;
12606 }
12607
12608 /* duplicate a stack info structure */
12609
12610 PERL_SI *
12611 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12612 {
12613     PERL_SI *nsi;
12614
12615     PERL_ARGS_ASSERT_SI_DUP;
12616
12617     if (!si)
12618         return (PERL_SI*)NULL;
12619
12620     /* look for it in the table first */
12621     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12622     if (nsi)
12623         return nsi;
12624
12625     /* create anew and remember what it is */
12626     Newxz(nsi, 1, PERL_SI);
12627     ptr_table_store(PL_ptr_table, si, nsi);
12628
12629     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12630     nsi->si_cxix        = si->si_cxix;
12631     nsi->si_cxmax       = si->si_cxmax;
12632     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12633     nsi->si_type        = si->si_type;
12634     nsi->si_prev        = si_dup(si->si_prev, param);
12635     nsi->si_next        = si_dup(si->si_next, param);
12636     nsi->si_markoff     = si->si_markoff;
12637
12638     return nsi;
12639 }
12640
12641 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12642 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12643 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12644 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12645 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12646 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12647 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12648 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12649 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12650 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12651 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12652 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12653 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12654 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12655 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12656 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12657
12658 /* XXXXX todo */
12659 #define pv_dup_inc(p)   SAVEPV(p)
12660 #define pv_dup(p)       SAVEPV(p)
12661 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12662
12663 /* map any object to the new equivent - either something in the
12664  * ptr table, or something in the interpreter structure
12665  */
12666
12667 void *
12668 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12669 {
12670     void *ret;
12671
12672     PERL_ARGS_ASSERT_ANY_DUP;
12673
12674     if (!v)
12675         return (void*)NULL;
12676
12677     /* look for it in the table first */
12678     ret = ptr_table_fetch(PL_ptr_table, v);
12679     if (ret)
12680         return ret;
12681
12682     /* see if it is part of the interpreter structure */
12683     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12684         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12685     else {
12686         ret = v;
12687     }
12688
12689     return ret;
12690 }
12691
12692 /* duplicate the save stack */
12693
12694 ANY *
12695 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12696 {
12697     dVAR;
12698     ANY * const ss      = proto_perl->Isavestack;
12699     const I32 max       = proto_perl->Isavestack_max;
12700     I32 ix              = proto_perl->Isavestack_ix;
12701     ANY *nss;
12702     const SV *sv;
12703     const GV *gv;
12704     const AV *av;
12705     const HV *hv;
12706     void* ptr;
12707     int intval;
12708     long longval;
12709     GP *gp;
12710     IV iv;
12711     I32 i;
12712     char *c = NULL;
12713     void (*dptr) (void*);
12714     void (*dxptr) (pTHX_ void*);
12715
12716     PERL_ARGS_ASSERT_SS_DUP;
12717
12718     Newxz(nss, max, ANY);
12719
12720     while (ix > 0) {
12721         const UV uv = POPUV(ss,ix);
12722         const U8 type = (U8)uv & SAVE_MASK;
12723
12724         TOPUV(nss,ix) = uv;
12725         switch (type) {
12726         case SAVEt_CLEARSV:
12727         case SAVEt_CLEARPADRANGE:
12728             break;
12729         case SAVEt_HELEM:               /* hash element */
12730             sv = (const SV *)POPPTR(ss,ix);
12731             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12732             /* fall through */
12733         case SAVEt_ITEM:                        /* normal string */
12734         case SAVEt_GVSV:                        /* scalar slot in GV */
12735         case SAVEt_SV:                          /* scalar reference */
12736             sv = (const SV *)POPPTR(ss,ix);
12737             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12738             /* fall through */
12739         case SAVEt_FREESV:
12740         case SAVEt_MORTALIZESV:
12741             sv = (const SV *)POPPTR(ss,ix);
12742             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12743             break;
12744         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12745             c = (char*)POPPTR(ss,ix);
12746             TOPPTR(nss,ix) = savesharedpv(c);
12747             ptr = POPPTR(ss,ix);
12748             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12749             break;
12750         case SAVEt_GENERIC_SVREF:               /* generic sv */
12751         case SAVEt_SVREF:                       /* scalar reference */
12752             sv = (const SV *)POPPTR(ss,ix);
12753             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12754             ptr = POPPTR(ss,ix);
12755             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12756             break;
12757         case SAVEt_GVSLOT:              /* any slot in GV */
12758             sv = (const SV *)POPPTR(ss,ix);
12759             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12760             ptr = POPPTR(ss,ix);
12761             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12762             sv = (const SV *)POPPTR(ss,ix);
12763             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12764             break;
12765         case SAVEt_HV:                          /* hash reference */
12766         case SAVEt_AV:                          /* array reference */
12767             sv = (const SV *) POPPTR(ss,ix);
12768             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12769             /* fall through */
12770         case SAVEt_COMPPAD:
12771         case SAVEt_NSTAB:
12772             sv = (const SV *) POPPTR(ss,ix);
12773             TOPPTR(nss,ix) = sv_dup(sv, param);
12774             break;
12775         case SAVEt_INT:                         /* int reference */
12776             ptr = POPPTR(ss,ix);
12777             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12778             intval = (int)POPINT(ss,ix);
12779             TOPINT(nss,ix) = intval;
12780             break;
12781         case SAVEt_LONG:                        /* long reference */
12782             ptr = POPPTR(ss,ix);
12783             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12784             longval = (long)POPLONG(ss,ix);
12785             TOPLONG(nss,ix) = longval;
12786             break;
12787         case SAVEt_I32:                         /* I32 reference */
12788             ptr = POPPTR(ss,ix);
12789             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12790             i = POPINT(ss,ix);
12791             TOPINT(nss,ix) = i;
12792             break;
12793         case SAVEt_IV:                          /* IV reference */
12794             ptr = POPPTR(ss,ix);
12795             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12796             iv = POPIV(ss,ix);
12797             TOPIV(nss,ix) = iv;
12798             break;
12799         case SAVEt_HPTR:                        /* HV* reference */
12800         case SAVEt_APTR:                        /* AV* reference */
12801         case SAVEt_SPTR:                        /* SV* reference */
12802             ptr = POPPTR(ss,ix);
12803             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12804             sv = (const SV *)POPPTR(ss,ix);
12805             TOPPTR(nss,ix) = sv_dup(sv, param);
12806             break;
12807         case SAVEt_VPTR:                        /* random* reference */
12808             ptr = POPPTR(ss,ix);
12809             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12810             /* Fall through */
12811         case SAVEt_INT_SMALL:
12812         case SAVEt_I32_SMALL:
12813         case SAVEt_I16:                         /* I16 reference */
12814         case SAVEt_I8:                          /* I8 reference */
12815         case SAVEt_BOOL:
12816             ptr = POPPTR(ss,ix);
12817             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12818             break;
12819         case SAVEt_GENERIC_PVREF:               /* generic char* */
12820         case SAVEt_PPTR:                        /* char* reference */
12821             ptr = POPPTR(ss,ix);
12822             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12823             c = (char*)POPPTR(ss,ix);
12824             TOPPTR(nss,ix) = pv_dup(c);
12825             break;
12826         case SAVEt_GP:                          /* scalar reference */
12827             gp = (GP*)POPPTR(ss,ix);
12828             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12829             (void)GpREFCNT_inc(gp);
12830             gv = (const GV *)POPPTR(ss,ix);
12831             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12832             break;
12833         case SAVEt_FREEOP:
12834             ptr = POPPTR(ss,ix);
12835             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12836                 /* these are assumed to be refcounted properly */
12837                 OP *o;
12838                 switch (((OP*)ptr)->op_type) {
12839                 case OP_LEAVESUB:
12840                 case OP_LEAVESUBLV:
12841                 case OP_LEAVEEVAL:
12842                 case OP_LEAVE:
12843                 case OP_SCOPE:
12844                 case OP_LEAVEWRITE:
12845                     TOPPTR(nss,ix) = ptr;
12846                     o = (OP*)ptr;
12847                     OP_REFCNT_LOCK;
12848                     (void) OpREFCNT_inc(o);
12849                     OP_REFCNT_UNLOCK;
12850                     break;
12851                 default:
12852                     TOPPTR(nss,ix) = NULL;
12853                     break;
12854                 }
12855             }
12856             else
12857                 TOPPTR(nss,ix) = NULL;
12858             break;
12859         case SAVEt_FREECOPHH:
12860             ptr = POPPTR(ss,ix);
12861             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12862             break;
12863         case SAVEt_DELETE:
12864             hv = (const HV *)POPPTR(ss,ix);
12865             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12866             i = POPINT(ss,ix);
12867             TOPINT(nss,ix) = i;
12868             /* Fall through */
12869         case SAVEt_FREEPV:
12870             c = (char*)POPPTR(ss,ix);
12871             TOPPTR(nss,ix) = pv_dup_inc(c);
12872             break;
12873         case SAVEt_STACK_POS:           /* Position on Perl stack */
12874             i = POPINT(ss,ix);
12875             TOPINT(nss,ix) = i;
12876             break;
12877         case SAVEt_DESTRUCTOR:
12878             ptr = POPPTR(ss,ix);
12879             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12880             dptr = POPDPTR(ss,ix);
12881             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12882                                         any_dup(FPTR2DPTR(void *, dptr),
12883                                                 proto_perl));
12884             break;
12885         case SAVEt_DESTRUCTOR_X:
12886             ptr = POPPTR(ss,ix);
12887             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12888             dxptr = POPDXPTR(ss,ix);
12889             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12890                                          any_dup(FPTR2DPTR(void *, dxptr),
12891                                                  proto_perl));
12892             break;
12893         case SAVEt_REGCONTEXT:
12894         case SAVEt_ALLOC:
12895             ix -= uv >> SAVE_TIGHT_SHIFT;
12896             break;
12897         case SAVEt_AELEM:               /* array element */
12898             sv = (const SV *)POPPTR(ss,ix);
12899             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12900             i = POPINT(ss,ix);
12901             TOPINT(nss,ix) = i;
12902             av = (const AV *)POPPTR(ss,ix);
12903             TOPPTR(nss,ix) = av_dup_inc(av, param);
12904             break;
12905         case SAVEt_OP:
12906             ptr = POPPTR(ss,ix);
12907             TOPPTR(nss,ix) = ptr;
12908             break;
12909         case SAVEt_HINTS:
12910             ptr = POPPTR(ss,ix);
12911             ptr = cophh_copy((COPHH*)ptr);
12912             TOPPTR(nss,ix) = ptr;
12913             i = POPINT(ss,ix);
12914             TOPINT(nss,ix) = i;
12915             if (i & HINT_LOCALIZE_HH) {
12916                 hv = (const HV *)POPPTR(ss,ix);
12917                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12918             }
12919             break;
12920         case SAVEt_PADSV_AND_MORTALIZE:
12921             longval = (long)POPLONG(ss,ix);
12922             TOPLONG(nss,ix) = longval;
12923             ptr = POPPTR(ss,ix);
12924             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12925             sv = (const SV *)POPPTR(ss,ix);
12926             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12927             break;
12928         case SAVEt_SET_SVFLAGS:
12929             i = POPINT(ss,ix);
12930             TOPINT(nss,ix) = i;
12931             i = POPINT(ss,ix);
12932             TOPINT(nss,ix) = i;
12933             sv = (const SV *)POPPTR(ss,ix);
12934             TOPPTR(nss,ix) = sv_dup(sv, param);
12935             break;
12936         case SAVEt_COMPILE_WARNINGS:
12937             ptr = POPPTR(ss,ix);
12938             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12939             break;
12940         case SAVEt_PARSER:
12941             ptr = POPPTR(ss,ix);
12942             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12943             break;
12944         default:
12945             Perl_croak(aTHX_
12946                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12947         }
12948     }
12949
12950     return nss;
12951 }
12952
12953
12954 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12955  * flag to the result. This is done for each stash before cloning starts,
12956  * so we know which stashes want their objects cloned */
12957
12958 static void
12959 do_mark_cloneable_stash(pTHX_ SV *const sv)
12960 {
12961     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12962     if (hvname) {
12963         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12964         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12965         if (cloner && GvCV(cloner)) {
12966             dSP;
12967             UV status;
12968
12969             ENTER;
12970             SAVETMPS;
12971             PUSHMARK(SP);
12972             mXPUSHs(newSVhek(hvname));
12973             PUTBACK;
12974             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12975             SPAGAIN;
12976             status = POPu;
12977             PUTBACK;
12978             FREETMPS;
12979             LEAVE;
12980             if (status)
12981                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12982         }
12983     }
12984 }
12985
12986
12987
12988 /*
12989 =for apidoc perl_clone
12990
12991 Create and return a new interpreter by cloning the current one.
12992
12993 perl_clone takes these flags as parameters:
12994
12995 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12996 without it we only clone the data and zero the stacks,
12997 with it we copy the stacks and the new perl interpreter is
12998 ready to run at the exact same point as the previous one.
12999 The pseudo-fork code uses COPY_STACKS while the
13000 threads->create doesn't.
13001
13002 CLONEf_KEEP_PTR_TABLE -
13003 perl_clone keeps a ptr_table with the pointer of the old
13004 variable as a key and the new variable as a value,
13005 this allows it to check if something has been cloned and not
13006 clone it again but rather just use the value and increase the
13007 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13008 the ptr_table using the function
13009 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13010 reason to keep it around is if you want to dup some of your own
13011 variable who are outside the graph perl scans, example of this
13012 code is in threads.xs create.
13013
13014 CLONEf_CLONE_HOST -
13015 This is a win32 thing, it is ignored on unix, it tells perls
13016 win32host code (which is c++) to clone itself, this is needed on
13017 win32 if you want to run two threads at the same time,
13018 if you just want to do some stuff in a separate perl interpreter
13019 and then throw it away and return to the original one,
13020 you don't need to do anything.
13021
13022 =cut
13023 */
13024
13025 /* XXX the above needs expanding by someone who actually understands it ! */
13026 EXTERN_C PerlInterpreter *
13027 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13028
13029 PerlInterpreter *
13030 perl_clone(PerlInterpreter *proto_perl, UV flags)
13031 {
13032    dVAR;
13033 #ifdef PERL_IMPLICIT_SYS
13034
13035     PERL_ARGS_ASSERT_PERL_CLONE;
13036
13037    /* perlhost.h so we need to call into it
13038    to clone the host, CPerlHost should have a c interface, sky */
13039
13040    if (flags & CLONEf_CLONE_HOST) {
13041        return perl_clone_host(proto_perl,flags);
13042    }
13043    return perl_clone_using(proto_perl, flags,
13044                             proto_perl->IMem,
13045                             proto_perl->IMemShared,
13046                             proto_perl->IMemParse,
13047                             proto_perl->IEnv,
13048                             proto_perl->IStdIO,
13049                             proto_perl->ILIO,
13050                             proto_perl->IDir,
13051                             proto_perl->ISock,
13052                             proto_perl->IProc);
13053 }
13054
13055 PerlInterpreter *
13056 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13057                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13058                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13059                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13060                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13061                  struct IPerlProc* ipP)
13062 {
13063     /* XXX many of the string copies here can be optimized if they're
13064      * constants; they need to be allocated as common memory and just
13065      * their pointers copied. */
13066
13067     IV i;
13068     CLONE_PARAMS clone_params;
13069     CLONE_PARAMS* const param = &clone_params;
13070
13071     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13072
13073     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13074 #else           /* !PERL_IMPLICIT_SYS */
13075     IV i;
13076     CLONE_PARAMS clone_params;
13077     CLONE_PARAMS* param = &clone_params;
13078     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13079
13080     PERL_ARGS_ASSERT_PERL_CLONE;
13081 #endif          /* PERL_IMPLICIT_SYS */
13082
13083     /* for each stash, determine whether its objects should be cloned */
13084     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13085     PERL_SET_THX(my_perl);
13086
13087 #ifdef DEBUGGING
13088     PoisonNew(my_perl, 1, PerlInterpreter);
13089     PL_op = NULL;
13090     PL_curcop = NULL;
13091     PL_defstash = NULL; /* may be used by perl malloc() */
13092     PL_markstack = 0;
13093     PL_scopestack = 0;
13094     PL_scopestack_name = 0;
13095     PL_savestack = 0;
13096     PL_savestack_ix = 0;
13097     PL_savestack_max = -1;
13098     PL_sig_pending = 0;
13099     PL_parser = NULL;
13100     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13101 #  ifdef DEBUG_LEAKING_SCALARS
13102     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13103 #  endif
13104 #else   /* !DEBUGGING */
13105     Zero(my_perl, 1, PerlInterpreter);
13106 #endif  /* DEBUGGING */
13107
13108 #ifdef PERL_IMPLICIT_SYS
13109     /* host pointers */
13110     PL_Mem              = ipM;
13111     PL_MemShared        = ipMS;
13112     PL_MemParse         = ipMP;
13113     PL_Env              = ipE;
13114     PL_StdIO            = ipStd;
13115     PL_LIO              = ipLIO;
13116     PL_Dir              = ipD;
13117     PL_Sock             = ipS;
13118     PL_Proc             = ipP;
13119 #endif          /* PERL_IMPLICIT_SYS */
13120
13121
13122     param->flags = flags;
13123     /* Nothing in the core code uses this, but we make it available to
13124        extensions (using mg_dup).  */
13125     param->proto_perl = proto_perl;
13126     /* Likely nothing will use this, but it is initialised to be consistent
13127        with Perl_clone_params_new().  */
13128     param->new_perl = my_perl;
13129     param->unreferenced = NULL;
13130
13131
13132     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13133
13134     PL_body_arenas = NULL;
13135     Zero(&PL_body_roots, 1, PL_body_roots);
13136     
13137     PL_sv_count         = 0;
13138     PL_sv_root          = NULL;
13139     PL_sv_arenaroot     = NULL;
13140
13141     PL_debug            = proto_perl->Idebug;
13142
13143     /* dbargs array probably holds garbage */
13144     PL_dbargs           = NULL;
13145
13146     PL_compiling = proto_perl->Icompiling;
13147
13148     /* pseudo environmental stuff */
13149     PL_origargc         = proto_perl->Iorigargc;
13150     PL_origargv         = proto_perl->Iorigargv;
13151
13152 #if !NO_TAINT_SUPPORT
13153     /* Set tainting stuff before PerlIO_debug can possibly get called */
13154     PL_tainting         = proto_perl->Itainting;
13155     PL_taint_warn       = proto_perl->Itaint_warn;
13156 #else
13157     PL_tainting         = FALSE;
13158     PL_taint_warn       = FALSE;
13159 #endif
13160
13161     PL_minus_c          = proto_perl->Iminus_c;
13162
13163     PL_localpatches     = proto_perl->Ilocalpatches;
13164     PL_splitstr         = proto_perl->Isplitstr;
13165     PL_minus_n          = proto_perl->Iminus_n;
13166     PL_minus_p          = proto_perl->Iminus_p;
13167     PL_minus_l          = proto_perl->Iminus_l;
13168     PL_minus_a          = proto_perl->Iminus_a;
13169     PL_minus_E          = proto_perl->Iminus_E;
13170     PL_minus_F          = proto_perl->Iminus_F;
13171     PL_doswitches       = proto_perl->Idoswitches;
13172     PL_dowarn           = proto_perl->Idowarn;
13173 #ifdef PERL_SAWAMPERSAND
13174     PL_sawampersand     = proto_perl->Isawampersand;
13175 #endif
13176     PL_unsafe           = proto_perl->Iunsafe;
13177     PL_perldb           = proto_perl->Iperldb;
13178     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13179     PL_exit_flags       = proto_perl->Iexit_flags;
13180
13181     /* XXX time(&PL_basetime) when asked for? */
13182     PL_basetime         = proto_perl->Ibasetime;
13183
13184     PL_maxsysfd         = proto_perl->Imaxsysfd;
13185     PL_statusvalue      = proto_perl->Istatusvalue;
13186 #ifdef VMS
13187     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13188 #else
13189     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13190 #endif
13191
13192     /* RE engine related */
13193     PL_regmatch_slab    = NULL;
13194     PL_reg_curpm        = NULL;
13195
13196     PL_sub_generation   = proto_perl->Isub_generation;
13197
13198     /* funky return mechanisms */
13199     PL_forkprocess      = proto_perl->Iforkprocess;
13200
13201     /* internal state */
13202     PL_maxo             = proto_perl->Imaxo;
13203
13204     PL_main_start       = proto_perl->Imain_start;
13205     PL_eval_root        = proto_perl->Ieval_root;
13206     PL_eval_start       = proto_perl->Ieval_start;
13207
13208     PL_filemode         = proto_perl->Ifilemode;
13209     PL_lastfd           = proto_perl->Ilastfd;
13210     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13211     PL_Argv             = NULL;
13212     PL_Cmd              = NULL;
13213     PL_gensym           = proto_perl->Igensym;
13214
13215     PL_laststatval      = proto_perl->Ilaststatval;
13216     PL_laststype        = proto_perl->Ilaststype;
13217     PL_mess_sv          = NULL;
13218
13219     PL_profiledata      = NULL;
13220
13221     PL_generation       = proto_perl->Igeneration;
13222
13223     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13224     PL_in_clean_all     = proto_perl->Iin_clean_all;
13225
13226     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13227     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13228     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13229     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13230     PL_nomemok          = proto_perl->Inomemok;
13231     PL_an               = proto_perl->Ian;
13232     PL_evalseq          = proto_perl->Ievalseq;
13233     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13234     PL_origalen         = proto_perl->Iorigalen;
13235
13236     PL_sighandlerp      = proto_perl->Isighandlerp;
13237
13238     PL_runops           = proto_perl->Irunops;
13239
13240     PL_subline          = proto_perl->Isubline;
13241
13242 #ifdef FCRYPT
13243     PL_cryptseen        = proto_perl->Icryptseen;
13244 #endif
13245
13246     PL_hints            = proto_perl->Ihints;
13247
13248 #ifdef USE_LOCALE_COLLATE
13249     PL_collation_ix     = proto_perl->Icollation_ix;
13250     PL_collation_standard       = proto_perl->Icollation_standard;
13251     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13252     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13253 #endif /* USE_LOCALE_COLLATE */
13254
13255 #ifdef USE_LOCALE_NUMERIC
13256     PL_numeric_standard = proto_perl->Inumeric_standard;
13257     PL_numeric_local    = proto_perl->Inumeric_local;
13258 #endif /* !USE_LOCALE_NUMERIC */
13259
13260     /* Did the locale setup indicate UTF-8? */
13261     PL_utf8locale       = proto_perl->Iutf8locale;
13262     /* Unicode features (see perlrun/-C) */
13263     PL_unicode          = proto_perl->Iunicode;
13264
13265     /* Pre-5.8 signals control */
13266     PL_signals          = proto_perl->Isignals;
13267
13268     /* times() ticks per second */
13269     PL_clocktick        = proto_perl->Iclocktick;
13270
13271     /* Recursion stopper for PerlIO_find_layer */
13272     PL_in_load_module   = proto_perl->Iin_load_module;
13273
13274     /* sort() routine */
13275     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13276
13277     /* Not really needed/useful since the reenrant_retint is "volatile",
13278      * but do it for consistency's sake. */
13279     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13280
13281     /* Hooks to shared SVs and locks. */
13282     PL_sharehook        = proto_perl->Isharehook;
13283     PL_lockhook         = proto_perl->Ilockhook;
13284     PL_unlockhook       = proto_perl->Iunlockhook;
13285     PL_threadhook       = proto_perl->Ithreadhook;
13286     PL_destroyhook      = proto_perl->Idestroyhook;
13287     PL_signalhook       = proto_perl->Isignalhook;
13288
13289     PL_globhook         = proto_perl->Iglobhook;
13290
13291     /* swatch cache */
13292     PL_last_swash_hv    = NULL; /* reinits on demand */
13293     PL_last_swash_klen  = 0;
13294     PL_last_swash_key[0]= '\0';
13295     PL_last_swash_tmps  = (U8*)NULL;
13296     PL_last_swash_slen  = 0;
13297
13298     PL_srand_called     = proto_perl->Isrand_called;
13299
13300     if (flags & CLONEf_COPY_STACKS) {
13301         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13302         PL_tmps_ix              = proto_perl->Itmps_ix;
13303         PL_tmps_max             = proto_perl->Itmps_max;
13304         PL_tmps_floor           = proto_perl->Itmps_floor;
13305
13306         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13307          * NOTE: unlike the others! */
13308         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13309         PL_scopestack_max       = proto_perl->Iscopestack_max;
13310
13311         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13312          * NOTE: unlike the others! */
13313         PL_savestack_ix         = proto_perl->Isavestack_ix;
13314         PL_savestack_max        = proto_perl->Isavestack_max;
13315     }
13316
13317     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13318     PL_top_env          = &PL_start_env;
13319
13320     PL_op               = proto_perl->Iop;
13321
13322     PL_Sv               = NULL;
13323     PL_Xpv              = (XPV*)NULL;
13324     my_perl->Ina        = proto_perl->Ina;
13325
13326     PL_statbuf          = proto_perl->Istatbuf;
13327     PL_statcache        = proto_perl->Istatcache;
13328
13329 #ifdef HAS_TIMES
13330     PL_timesbuf         = proto_perl->Itimesbuf;
13331 #endif
13332
13333 #if !NO_TAINT_SUPPORT
13334     PL_tainted          = proto_perl->Itainted;
13335 #else
13336     PL_tainted          = FALSE;
13337 #endif
13338     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13339
13340     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13341
13342     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13343     PL_restartop        = proto_perl->Irestartop;
13344     PL_in_eval          = proto_perl->Iin_eval;
13345     PL_delaymagic       = proto_perl->Idelaymagic;
13346     PL_phase            = proto_perl->Iphase;
13347     PL_localizing       = proto_perl->Ilocalizing;
13348
13349     PL_hv_fetch_ent_mh  = NULL;
13350     PL_modcount         = proto_perl->Imodcount;
13351     PL_lastgotoprobe    = NULL;
13352     PL_dumpindent       = proto_perl->Idumpindent;
13353
13354     PL_efloatbuf        = NULL;         /* reinits on demand */
13355     PL_efloatsize       = 0;                    /* reinits on demand */
13356
13357     /* regex stuff */
13358
13359     PL_colorset         = 0;            /* reinits PL_colors[] */
13360     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13361
13362     /* Pluggable optimizer */
13363     PL_peepp            = proto_perl->Ipeepp;
13364     PL_rpeepp           = proto_perl->Irpeepp;
13365     /* op_free() hook */
13366     PL_opfreehook       = proto_perl->Iopfreehook;
13367
13368 #ifdef USE_REENTRANT_API
13369     /* XXX: things like -Dm will segfault here in perlio, but doing
13370      *  PERL_SET_CONTEXT(proto_perl);
13371      * breaks too many other things
13372      */
13373     Perl_reentrant_init(aTHX);
13374 #endif
13375
13376     /* create SV map for pointer relocation */
13377     PL_ptr_table = ptr_table_new();
13378
13379     /* initialize these special pointers as early as possible */
13380     init_constants();
13381     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13382     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13383     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13384
13385     /* create (a non-shared!) shared string table */
13386     PL_strtab           = newHV();
13387     HvSHAREKEYS_off(PL_strtab);
13388     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13389     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13390
13391     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13392
13393     /* This PV will be free'd special way so must set it same way op.c does */
13394     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13395     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13396
13397     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13398     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13399     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13400     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13401
13402     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13403     /* This makes no difference to the implementation, as it always pushes
13404        and shifts pointers to other SVs without changing their reference
13405        count, with the array becoming empty before it is freed. However, it
13406        makes it conceptually clear what is going on, and will avoid some
13407        work inside av.c, filling slots between AvFILL() and AvMAX() with
13408        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13409     AvREAL_off(param->stashes);
13410
13411     if (!(flags & CLONEf_COPY_STACKS)) {
13412         param->unreferenced = newAV();
13413     }
13414
13415 #ifdef PERLIO_LAYERS
13416     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13417     PerlIO_clone(aTHX_ proto_perl, param);
13418 #endif
13419
13420     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13421     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13422     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13423     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13424     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13425     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13426
13427     /* switches */
13428     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13429     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13430     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13431     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13432
13433     /* magical thingies */
13434
13435     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13436
13437     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13438     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13439     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13440
13441    
13442     /* Clone the regex array */
13443     /* ORANGE FIXME for plugins, probably in the SV dup code.
13444        newSViv(PTR2IV(CALLREGDUPE(
13445        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13446     */
13447     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13448     PL_regex_pad = AvARRAY(PL_regex_padav);
13449
13450     PL_stashpadmax      = proto_perl->Istashpadmax;
13451     PL_stashpadix       = proto_perl->Istashpadix ;
13452     Newx(PL_stashpad, PL_stashpadmax, HV *);
13453     {
13454         PADOFFSET o = 0;
13455         for (; o < PL_stashpadmax; ++o)
13456             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13457     }
13458
13459     /* shortcuts to various I/O objects */
13460     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13461     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13462     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13463     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13464     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13465     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13466     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13467
13468     /* shortcuts to regexp stuff */
13469     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13470
13471     /* shortcuts to misc objects */
13472     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13473
13474     /* shortcuts to debugging objects */
13475     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13476     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13477     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13478     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13479     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13480     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13481
13482     /* symbol tables */
13483     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13484     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13485     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13486     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13487     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13488
13489     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13490     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13491     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13492     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13493     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13494     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13495     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13496     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13497
13498     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13499
13500     /* subprocess state */
13501     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13502
13503     if (proto_perl->Iop_mask)
13504         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13505     else
13506         PL_op_mask      = NULL;
13507     /* PL_asserting        = proto_perl->Iasserting; */
13508
13509     /* current interpreter roots */
13510     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13511     OP_REFCNT_LOCK;
13512     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13513     OP_REFCNT_UNLOCK;
13514
13515     /* runtime control stuff */
13516     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13517
13518     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13519
13520     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13521
13522     /* interpreter atexit processing */
13523     PL_exitlistlen      = proto_perl->Iexitlistlen;
13524     if (PL_exitlistlen) {
13525         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13526         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13527     }
13528     else
13529         PL_exitlist     = (PerlExitListEntry*)NULL;
13530
13531     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13532     if (PL_my_cxt_size) {
13533         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13534         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13535 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13536         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13537         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13538 #endif
13539     }
13540     else {
13541         PL_my_cxt_list  = (void**)NULL;
13542 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13543         PL_my_cxt_keys  = (const char**)NULL;
13544 #endif
13545     }
13546     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13547     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13548     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13549     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13550
13551     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13552
13553     PAD_CLONE_VARS(proto_perl, param);
13554
13555 #ifdef HAVE_INTERP_INTERN
13556     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13557 #endif
13558
13559     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13560
13561 #ifdef PERL_USES_PL_PIDSTATUS
13562     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13563 #endif
13564     PL_osname           = SAVEPV(proto_perl->Iosname);
13565     PL_parser           = parser_dup(proto_perl->Iparser, param);
13566
13567     /* XXX this only works if the saved cop has already been cloned */
13568     if (proto_perl->Iparser) {
13569         PL_parser->saved_curcop = (COP*)any_dup(
13570                                     proto_perl->Iparser->saved_curcop,
13571                                     proto_perl);
13572     }
13573
13574     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13575
13576 #ifdef USE_LOCALE_COLLATE
13577     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13578 #endif /* USE_LOCALE_COLLATE */
13579
13580 #ifdef USE_LOCALE_NUMERIC
13581     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13582     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13583 #endif /* !USE_LOCALE_NUMERIC */
13584
13585     /* Unicode inversion lists */
13586     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13587     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13588
13589     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13590     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13591
13592     /* utf8 character class swashes */
13593     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13594         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13595     }
13596     for (i = 0; i < POSIX_CC_COUNT; i++) {
13597         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13598         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13599         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13600     }
13601     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13602     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13603     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13604     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13605     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13606     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13607     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13608     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13609     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13610     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13611     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13612     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13613     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13614     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13615     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13616     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13617     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13618     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13619     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13620
13621     if (proto_perl->Ipsig_pend) {
13622         Newxz(PL_psig_pend, SIG_SIZE, int);
13623     }
13624     else {
13625         PL_psig_pend    = (int*)NULL;
13626     }
13627
13628     if (proto_perl->Ipsig_name) {
13629         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13630         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13631                             param);
13632         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13633     }
13634     else {
13635         PL_psig_ptr     = (SV**)NULL;
13636         PL_psig_name    = (SV**)NULL;
13637     }
13638
13639     if (flags & CLONEf_COPY_STACKS) {
13640         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13641         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13642                             PL_tmps_ix+1, param);
13643
13644         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13645         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13646         Newxz(PL_markstack, i, I32);
13647         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13648                                                   - proto_perl->Imarkstack);
13649         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13650                                                   - proto_perl->Imarkstack);
13651         Copy(proto_perl->Imarkstack, PL_markstack,
13652              PL_markstack_ptr - PL_markstack + 1, I32);
13653
13654         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13655          * NOTE: unlike the others! */
13656         Newxz(PL_scopestack, PL_scopestack_max, I32);
13657         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13658
13659 #ifdef DEBUGGING
13660         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13661         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13662 #endif
13663         /* reset stack AV to correct length before its duped via
13664          * PL_curstackinfo */
13665         AvFILLp(proto_perl->Icurstack) =
13666                             proto_perl->Istack_sp - proto_perl->Istack_base;
13667
13668         /* NOTE: si_dup() looks at PL_markstack */
13669         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13670
13671         /* PL_curstack          = PL_curstackinfo->si_stack; */
13672         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13673         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13674
13675         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13676         PL_stack_base           = AvARRAY(PL_curstack);
13677         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13678                                                    - proto_perl->Istack_base);
13679         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13680
13681         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13682         PL_savestack            = ss_dup(proto_perl, param);
13683     }
13684     else {
13685         init_stacks();
13686         ENTER;                  /* perl_destruct() wants to LEAVE; */
13687     }
13688
13689     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13690     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13691
13692     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13693     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13694     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13695     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13696     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13697     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13698
13699     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13700
13701     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13702     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13703     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13704
13705     PL_stashcache       = newHV();
13706
13707     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13708                                             proto_perl->Iwatchaddr);
13709     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13710     if (PL_debug && PL_watchaddr) {
13711         PerlIO_printf(Perl_debug_log,
13712           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13713           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13714           PTR2UV(PL_watchok));
13715     }
13716
13717     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13718     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13719     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13720
13721     /* Call the ->CLONE method, if it exists, for each of the stashes
13722        identified by sv_dup() above.
13723     */
13724     while(av_len(param->stashes) != -1) {
13725         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13726         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13727         if (cloner && GvCV(cloner)) {
13728             dSP;
13729             ENTER;
13730             SAVETMPS;
13731             PUSHMARK(SP);
13732             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13733             PUTBACK;
13734             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13735             FREETMPS;
13736             LEAVE;
13737         }
13738     }
13739
13740     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13741         ptr_table_free(PL_ptr_table);
13742         PL_ptr_table = NULL;
13743     }
13744
13745     if (!(flags & CLONEf_COPY_STACKS)) {
13746         unreferenced_to_tmp_stack(param->unreferenced);
13747     }
13748
13749     SvREFCNT_dec(param->stashes);
13750
13751     /* orphaned? eg threads->new inside BEGIN or use */
13752     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13753         SvREFCNT_inc_simple_void(PL_compcv);
13754         SAVEFREESV(PL_compcv);
13755     }
13756
13757     return my_perl;
13758 }
13759
13760 static void
13761 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13762 {
13763     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13764     
13765     if (AvFILLp(unreferenced) > -1) {
13766         SV **svp = AvARRAY(unreferenced);
13767         SV **const last = svp + AvFILLp(unreferenced);
13768         SSize_t count = 0;
13769
13770         do {
13771             if (SvREFCNT(*svp) == 1)
13772                 ++count;
13773         } while (++svp <= last);
13774
13775         EXTEND_MORTAL(count);
13776         svp = AvARRAY(unreferenced);
13777
13778         do {
13779             if (SvREFCNT(*svp) == 1) {
13780                 /* Our reference is the only one to this SV. This means that
13781                    in this thread, the scalar effectively has a 0 reference.
13782                    That doesn't work (cleanup never happens), so donate our
13783                    reference to it onto the save stack. */
13784                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13785             } else {
13786                 /* As an optimisation, because we are already walking the
13787                    entire array, instead of above doing either
13788                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13789                    release our reference to the scalar, so that at the end of
13790                    the array owns zero references to the scalars it happens to
13791                    point to. We are effectively converting the array from
13792                    AvREAL() on to AvREAL() off. This saves the av_clear()
13793                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13794                    walking the array a second time.  */
13795                 SvREFCNT_dec(*svp);
13796             }
13797
13798         } while (++svp <= last);
13799         AvREAL_off(unreferenced);
13800     }
13801     SvREFCNT_dec_NN(unreferenced);
13802 }
13803
13804 void
13805 Perl_clone_params_del(CLONE_PARAMS *param)
13806 {
13807     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13808        happy: */
13809     PerlInterpreter *const to = param->new_perl;
13810     dTHXa(to);
13811     PerlInterpreter *const was = PERL_GET_THX;
13812
13813     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13814
13815     if (was != to) {
13816         PERL_SET_THX(to);
13817     }
13818
13819     SvREFCNT_dec(param->stashes);
13820     if (param->unreferenced)
13821         unreferenced_to_tmp_stack(param->unreferenced);
13822
13823     Safefree(param);
13824
13825     if (was != to) {
13826         PERL_SET_THX(was);
13827     }
13828 }
13829
13830 CLONE_PARAMS *
13831 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13832 {
13833     dVAR;
13834     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13835        does a dTHX; to get the context from thread local storage.
13836        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13837        a version that passes in my_perl.  */
13838     PerlInterpreter *const was = PERL_GET_THX;
13839     CLONE_PARAMS *param;
13840
13841     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13842
13843     if (was != to) {
13844         PERL_SET_THX(to);
13845     }
13846
13847     /* Given that we've set the context, we can do this unshared.  */
13848     Newx(param, 1, CLONE_PARAMS);
13849
13850     param->flags = 0;
13851     param->proto_perl = from;
13852     param->new_perl = to;
13853     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13854     AvREAL_off(param->stashes);
13855     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13856
13857     if (was != to) {
13858         PERL_SET_THX(was);
13859     }
13860     return param;
13861 }
13862
13863 #endif /* USE_ITHREADS */
13864
13865 void
13866 Perl_init_constants(pTHX)
13867 {
13868     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13869     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13870     SvANY(&PL_sv_undef)         = NULL;
13871
13872     SvANY(&PL_sv_no)            = new_XPVNV();
13873     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13874     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13875                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13876                                   |SVp_POK|SVf_POK;
13877
13878     SvANY(&PL_sv_yes)           = new_XPVNV();
13879     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13880     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13881                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13882                                   |SVp_POK|SVf_POK;
13883
13884     SvPV_set(&PL_sv_no, (char*)PL_No);
13885     SvCUR_set(&PL_sv_no, 0);
13886     SvLEN_set(&PL_sv_no, 0);
13887     SvIV_set(&PL_sv_no, 0);
13888     SvNV_set(&PL_sv_no, 0);
13889
13890     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13891     SvCUR_set(&PL_sv_yes, 1);
13892     SvLEN_set(&PL_sv_yes, 0);
13893     SvIV_set(&PL_sv_yes, 1);
13894     SvNV_set(&PL_sv_yes, 1);
13895 }
13896
13897 /*
13898 =head1 Unicode Support
13899
13900 =for apidoc sv_recode_to_utf8
13901
13902 The encoding is assumed to be an Encode object, on entry the PV
13903 of the sv is assumed to be octets in that encoding, and the sv
13904 will be converted into Unicode (and UTF-8).
13905
13906 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13907 is not a reference, nothing is done to the sv.  If the encoding is not
13908 an C<Encode::XS> Encoding object, bad things will happen.
13909 (See F<lib/encoding.pm> and L<Encode>.)
13910
13911 The PV of the sv is returned.
13912
13913 =cut */
13914
13915 char *
13916 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13917 {
13918     dVAR;
13919
13920     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13921
13922     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13923         SV *uni;
13924         STRLEN len;
13925         const char *s;
13926         dSP;
13927         ENTER;
13928         SAVETMPS;
13929         save_re_context();
13930         PUSHMARK(sp);
13931         EXTEND(SP, 3);
13932         PUSHs(encoding);
13933         PUSHs(sv);
13934 /*
13935   NI-S 2002/07/09
13936   Passing sv_yes is wrong - it needs to be or'ed set of constants
13937   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13938   remove converted chars from source.
13939
13940   Both will default the value - let them.
13941
13942         XPUSHs(&PL_sv_yes);
13943 */
13944         PUTBACK;
13945         call_method("decode", G_SCALAR);
13946         SPAGAIN;
13947         uni = POPs;
13948         PUTBACK;
13949         s = SvPV_const(uni, len);
13950         if (s != SvPVX_const(sv)) {
13951             SvGROW(sv, len + 1);
13952             Move(s, SvPVX(sv), len + 1, char);
13953             SvCUR_set(sv, len);
13954         }
13955         FREETMPS;
13956         LEAVE;
13957         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13958             /* clear pos and any utf8 cache */
13959             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13960             if (mg)
13961                 mg->mg_len = -1;
13962             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13963                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13964         }
13965         SvUTF8_on(sv);
13966         return SvPVX(sv);
13967     }
13968     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13969 }
13970
13971 /*
13972 =for apidoc sv_cat_decode
13973
13974 The encoding is assumed to be an Encode object, the PV of the ssv is
13975 assumed to be octets in that encoding and decoding the input starts
13976 from the position which (PV + *offset) pointed to.  The dsv will be
13977 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13978 when the string tstr appears in decoding output or the input ends on
13979 the PV of the ssv.  The value which the offset points will be modified
13980 to the last input position on the ssv.
13981
13982 Returns TRUE if the terminator was found, else returns FALSE.
13983
13984 =cut */
13985
13986 bool
13987 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13988                    SV *ssv, int *offset, char *tstr, int tlen)
13989 {
13990     dVAR;
13991     bool ret = FALSE;
13992
13993     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13994
13995     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13996         SV *offsv;
13997         dSP;
13998         ENTER;
13999         SAVETMPS;
14000         save_re_context();
14001         PUSHMARK(sp);
14002         EXTEND(SP, 6);
14003         PUSHs(encoding);
14004         PUSHs(dsv);
14005         PUSHs(ssv);
14006         offsv = newSViv(*offset);
14007         mPUSHs(offsv);
14008         mPUSHp(tstr, tlen);
14009         PUTBACK;
14010         call_method("cat_decode", G_SCALAR);
14011         SPAGAIN;
14012         ret = SvTRUE(TOPs);
14013         *offset = SvIV(offsv);
14014         PUTBACK;
14015         FREETMPS;
14016         LEAVE;
14017     }
14018     else
14019         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14020     return ret;
14021
14022 }
14023
14024 /* ---------------------------------------------------------------------
14025  *
14026  * support functions for report_uninit()
14027  */
14028
14029 /* the maxiumum size of array or hash where we will scan looking
14030  * for the undefined element that triggered the warning */
14031
14032 #define FUV_MAX_SEARCH_SIZE 1000
14033
14034 /* Look for an entry in the hash whose value has the same SV as val;
14035  * If so, return a mortal copy of the key. */
14036
14037 STATIC SV*
14038 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14039 {
14040     dVAR;
14041     HE **array;
14042     I32 i;
14043
14044     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14045
14046     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14047                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14048         return NULL;
14049
14050     array = HvARRAY(hv);
14051
14052     for (i=HvMAX(hv); i>=0; i--) {
14053         HE *entry;
14054         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14055             if (HeVAL(entry) != val)
14056                 continue;
14057             if (    HeVAL(entry) == &PL_sv_undef ||
14058                     HeVAL(entry) == &PL_sv_placeholder)
14059                 continue;
14060             if (!HeKEY(entry))
14061                 return NULL;
14062             if (HeKLEN(entry) == HEf_SVKEY)
14063                 return sv_mortalcopy(HeKEY_sv(entry));
14064             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14065         }
14066     }
14067     return NULL;
14068 }
14069
14070 /* Look for an entry in the array whose value has the same SV as val;
14071  * If so, return the index, otherwise return -1. */
14072
14073 STATIC I32
14074 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14075 {
14076     dVAR;
14077
14078     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14079
14080     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14081                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14082         return -1;
14083
14084     if (val != &PL_sv_undef) {
14085         SV ** const svp = AvARRAY(av);
14086         I32 i;
14087
14088         for (i=AvFILLp(av); i>=0; i--)
14089             if (svp[i] == val)
14090                 return i;
14091     }
14092     return -1;
14093 }
14094
14095 /* varname(): return the name of a variable, optionally with a subscript.
14096  * If gv is non-zero, use the name of that global, along with gvtype (one
14097  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14098  * targ.  Depending on the value of the subscript_type flag, return:
14099  */
14100
14101 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14102 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14103 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14104 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14105
14106 SV*
14107 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14108         const SV *const keyname, I32 aindex, int subscript_type)
14109 {
14110
14111     SV * const name = sv_newmortal();
14112     if (gv && isGV(gv)) {
14113         char buffer[2];
14114         buffer[0] = gvtype;
14115         buffer[1] = 0;
14116
14117         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14118
14119         gv_fullname4(name, gv, buffer, 0);
14120
14121         if ((unsigned int)SvPVX(name)[1] <= 26) {
14122             buffer[0] = '^';
14123             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14124
14125             /* Swap the 1 unprintable control character for the 2 byte pretty
14126                version - ie substr($name, 1, 1) = $buffer; */
14127             sv_insert(name, 1, 1, buffer, 2);
14128         }
14129     }
14130     else {
14131         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14132         SV *sv;
14133         AV *av;
14134
14135         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14136
14137         if (!cv || !CvPADLIST(cv))
14138             return NULL;
14139         av = *PadlistARRAY(CvPADLIST(cv));
14140         sv = *av_fetch(av, targ, FALSE);
14141         sv_setsv_flags(name, sv, 0);
14142     }
14143
14144     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14145         SV * const sv = newSV(0);
14146         *SvPVX(name) = '$';
14147         Perl_sv_catpvf(aTHX_ name, "{%s}",
14148             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14149                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14150         SvREFCNT_dec_NN(sv);
14151     }
14152     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14153         *SvPVX(name) = '$';
14154         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14155     }
14156     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14157         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14158         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14159     }
14160
14161     return name;
14162 }
14163
14164
14165 /*
14166 =for apidoc find_uninit_var
14167
14168 Find the name of the undefined variable (if any) that caused the operator
14169 to issue a "Use of uninitialized value" warning.
14170 If match is true, only return a name if its value matches uninit_sv.
14171 So roughly speaking, if a unary operator (such as OP_COS) generates a
14172 warning, then following the direct child of the op may yield an
14173 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14174 other hand, with OP_ADD there are two branches to follow, so we only print
14175 the variable name if we get an exact match.
14176
14177 The name is returned as a mortal SV.
14178
14179 Assumes that PL_op is the op that originally triggered the error, and that
14180 PL_comppad/PL_curpad points to the currently executing pad.
14181
14182 =cut
14183 */
14184
14185 STATIC SV *
14186 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14187                   bool match)
14188 {
14189     dVAR;
14190     SV *sv;
14191     const GV *gv;
14192     const OP *o, *o2, *kid;
14193
14194     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14195                             uninit_sv == &PL_sv_placeholder)))
14196         return NULL;
14197
14198     switch (obase->op_type) {
14199
14200     case OP_RV2AV:
14201     case OP_RV2HV:
14202     case OP_PADAV:
14203     case OP_PADHV:
14204       {
14205         const bool pad  = (    obase->op_type == OP_PADAV
14206                             || obase->op_type == OP_PADHV
14207                             || obase->op_type == OP_PADRANGE
14208                           );
14209
14210         const bool hash = (    obase->op_type == OP_PADHV
14211                             || obase->op_type == OP_RV2HV
14212                             || (obase->op_type == OP_PADRANGE
14213                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14214                           );
14215         I32 index = 0;
14216         SV *keysv = NULL;
14217         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14218
14219         if (pad) { /* @lex, %lex */
14220             sv = PAD_SVl(obase->op_targ);
14221             gv = NULL;
14222         }
14223         else {
14224             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14225             /* @global, %global */
14226                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14227                 if (!gv)
14228                     break;
14229                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14230             }
14231             else if (obase == PL_op) /* @{expr}, %{expr} */
14232                 return find_uninit_var(cUNOPx(obase)->op_first,
14233                                                     uninit_sv, match);
14234             else /* @{expr}, %{expr} as a sub-expression */
14235                 return NULL;
14236         }
14237
14238         /* attempt to find a match within the aggregate */
14239         if (hash) {
14240             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14241             if (keysv)
14242                 subscript_type = FUV_SUBSCRIPT_HASH;
14243         }
14244         else {
14245             index = find_array_subscript((const AV *)sv, uninit_sv);
14246             if (index >= 0)
14247                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14248         }
14249
14250         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14251             break;
14252
14253         return varname(gv, hash ? '%' : '@', obase->op_targ,
14254                                     keysv, index, subscript_type);
14255       }
14256
14257     case OP_RV2SV:
14258         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14259             /* $global */
14260             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14261             if (!gv || !GvSTASH(gv))
14262                 break;
14263             if (match && (GvSV(gv) != uninit_sv))
14264                 break;
14265             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14266         }
14267         /* ${expr} */
14268         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14269
14270     case OP_PADSV:
14271         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14272             break;
14273         return varname(NULL, '$', obase->op_targ,
14274                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14275
14276     case OP_GVSV:
14277         gv = cGVOPx_gv(obase);
14278         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14279             break;
14280         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14281
14282     case OP_AELEMFAST_LEX:
14283         if (match) {
14284             SV **svp;
14285             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14286             if (!av || SvRMAGICAL(av))
14287                 break;
14288             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14289             if (!svp || *svp != uninit_sv)
14290                 break;
14291         }
14292         return varname(NULL, '$', obase->op_targ,
14293                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14294     case OP_AELEMFAST:
14295         {
14296             gv = cGVOPx_gv(obase);
14297             if (!gv)
14298                 break;
14299             if (match) {
14300                 SV **svp;
14301                 AV *const av = GvAV(gv);
14302                 if (!av || SvRMAGICAL(av))
14303                     break;
14304                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14305                 if (!svp || *svp != uninit_sv)
14306                     break;
14307             }
14308             return varname(gv, '$', 0,
14309                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14310         }
14311         break;
14312
14313     case OP_EXISTS:
14314         o = cUNOPx(obase)->op_first;
14315         if (!o || o->op_type != OP_NULL ||
14316                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14317             break;
14318         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14319
14320     case OP_AELEM:
14321     case OP_HELEM:
14322     {
14323         bool negate = FALSE;
14324
14325         if (PL_op == obase)
14326             /* $a[uninit_expr] or $h{uninit_expr} */
14327             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14328
14329         gv = NULL;
14330         o = cBINOPx(obase)->op_first;
14331         kid = cBINOPx(obase)->op_last;
14332
14333         /* get the av or hv, and optionally the gv */
14334         sv = NULL;
14335         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14336             sv = PAD_SV(o->op_targ);
14337         }
14338         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14339                 && cUNOPo->op_first->op_type == OP_GV)
14340         {
14341             gv = cGVOPx_gv(cUNOPo->op_first);
14342             if (!gv)
14343                 break;
14344             sv = o->op_type
14345                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14346         }
14347         if (!sv)
14348             break;
14349
14350         if (kid && kid->op_type == OP_NEGATE) {
14351             negate = TRUE;
14352             kid = cUNOPx(kid)->op_first;
14353         }
14354
14355         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14356             /* index is constant */
14357             SV* kidsv;
14358             if (negate) {
14359                 kidsv = sv_2mortal(newSVpvs("-"));
14360                 sv_catsv(kidsv, cSVOPx_sv(kid));
14361             }
14362             else
14363                 kidsv = cSVOPx_sv(kid);
14364             if (match) {
14365                 if (SvMAGICAL(sv))
14366                     break;
14367                 if (obase->op_type == OP_HELEM) {
14368                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14369                     if (!he || HeVAL(he) != uninit_sv)
14370                         break;
14371                 }
14372                 else {
14373                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14374                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14375                         FALSE);
14376                     if (!svp || *svp != uninit_sv)
14377                         break;
14378                 }
14379             }
14380             if (obase->op_type == OP_HELEM)
14381                 return varname(gv, '%', o->op_targ,
14382                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14383             else
14384                 return varname(gv, '@', o->op_targ, NULL,
14385                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14386                     FUV_SUBSCRIPT_ARRAY);
14387         }
14388         else  {
14389             /* index is an expression;
14390              * attempt to find a match within the aggregate */
14391             if (obase->op_type == OP_HELEM) {
14392                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14393                 if (keysv)
14394                     return varname(gv, '%', o->op_targ,
14395                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14396             }
14397             else {
14398                 const I32 index
14399                     = find_array_subscript((const AV *)sv, uninit_sv);
14400                 if (index >= 0)
14401                     return varname(gv, '@', o->op_targ,
14402                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14403             }
14404             if (match)
14405                 break;
14406             return varname(gv,
14407                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14408                 ? '@' : '%',
14409                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14410         }
14411         break;
14412     }
14413
14414     case OP_AASSIGN:
14415         /* only examine RHS */
14416         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14417
14418     case OP_OPEN:
14419         o = cUNOPx(obase)->op_first;
14420         if (   o->op_type == OP_PUSHMARK
14421            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14422         )
14423             o = o->op_sibling;
14424
14425         if (!o->op_sibling) {
14426             /* one-arg version of open is highly magical */
14427
14428             if (o->op_type == OP_GV) { /* open FOO; */
14429                 gv = cGVOPx_gv(o);
14430                 if (match && GvSV(gv) != uninit_sv)
14431                     break;
14432                 return varname(gv, '$', 0,
14433                             NULL, 0, FUV_SUBSCRIPT_NONE);
14434             }
14435             /* other possibilities not handled are:
14436              * open $x; or open my $x;  should return '${*$x}'
14437              * open expr;               should return '$'.expr ideally
14438              */
14439              break;
14440         }
14441         goto do_op;
14442
14443     /* ops where $_ may be an implicit arg */
14444     case OP_TRANS:
14445     case OP_TRANSR:
14446     case OP_SUBST:
14447     case OP_MATCH:
14448         if ( !(obase->op_flags & OPf_STACKED)) {
14449             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14450                                  ? PAD_SVl(obase->op_targ)
14451                                  : DEFSV))
14452             {
14453                 sv = sv_newmortal();
14454                 sv_setpvs(sv, "$_");
14455                 return sv;
14456             }
14457         }
14458         goto do_op;
14459
14460     case OP_PRTF:
14461     case OP_PRINT:
14462     case OP_SAY:
14463         match = 1; /* print etc can return undef on defined args */
14464         /* skip filehandle as it can't produce 'undef' warning  */
14465         o = cUNOPx(obase)->op_first;
14466         if ((obase->op_flags & OPf_STACKED)
14467             &&
14468                (   o->op_type == OP_PUSHMARK
14469                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14470             o = o->op_sibling->op_sibling;
14471         goto do_op2;
14472
14473
14474     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14475     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14476
14477         /* the following ops are capable of returning PL_sv_undef even for
14478          * defined arg(s) */
14479
14480     case OP_BACKTICK:
14481     case OP_PIPE_OP:
14482     case OP_FILENO:
14483     case OP_BINMODE:
14484     case OP_TIED:
14485     case OP_GETC:
14486     case OP_SYSREAD:
14487     case OP_SEND:
14488     case OP_IOCTL:
14489     case OP_SOCKET:
14490     case OP_SOCKPAIR:
14491     case OP_BIND:
14492     case OP_CONNECT:
14493     case OP_LISTEN:
14494     case OP_ACCEPT:
14495     case OP_SHUTDOWN:
14496     case OP_SSOCKOPT:
14497     case OP_GETPEERNAME:
14498     case OP_FTRREAD:
14499     case OP_FTRWRITE:
14500     case OP_FTREXEC:
14501     case OP_FTROWNED:
14502     case OP_FTEREAD:
14503     case OP_FTEWRITE:
14504     case OP_FTEEXEC:
14505     case OP_FTEOWNED:
14506     case OP_FTIS:
14507     case OP_FTZERO:
14508     case OP_FTSIZE:
14509     case OP_FTFILE:
14510     case OP_FTDIR:
14511     case OP_FTLINK:
14512     case OP_FTPIPE:
14513     case OP_FTSOCK:
14514     case OP_FTBLK:
14515     case OP_FTCHR:
14516     case OP_FTTTY:
14517     case OP_FTSUID:
14518     case OP_FTSGID:
14519     case OP_FTSVTX:
14520     case OP_FTTEXT:
14521     case OP_FTBINARY:
14522     case OP_FTMTIME:
14523     case OP_FTATIME:
14524     case OP_FTCTIME:
14525     case OP_READLINK:
14526     case OP_OPEN_DIR:
14527     case OP_READDIR:
14528     case OP_TELLDIR:
14529     case OP_SEEKDIR:
14530     case OP_REWINDDIR:
14531     case OP_CLOSEDIR:
14532     case OP_GMTIME:
14533     case OP_ALARM:
14534     case OP_SEMGET:
14535     case OP_GETLOGIN:
14536     case OP_UNDEF:
14537     case OP_SUBSTR:
14538     case OP_AEACH:
14539     case OP_EACH:
14540     case OP_SORT:
14541     case OP_CALLER:
14542     case OP_DOFILE:
14543     case OP_PROTOTYPE:
14544     case OP_NCMP:
14545     case OP_SMARTMATCH:
14546     case OP_UNPACK:
14547     case OP_SYSOPEN:
14548     case OP_SYSSEEK:
14549         match = 1;
14550         goto do_op;
14551
14552     case OP_ENTERSUB:
14553     case OP_GOTO:
14554         /* XXX tmp hack: these two may call an XS sub, and currently
14555           XS subs don't have a SUB entry on the context stack, so CV and
14556           pad determination goes wrong, and BAD things happen. So, just
14557           don't try to determine the value under those circumstances.
14558           Need a better fix at dome point. DAPM 11/2007 */
14559         break;
14560
14561     case OP_FLIP:
14562     case OP_FLOP:
14563     {
14564         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14565         if (gv && GvSV(gv) == uninit_sv)
14566             return newSVpvs_flags("$.", SVs_TEMP);
14567         goto do_op;
14568     }
14569
14570     case OP_POS:
14571         /* def-ness of rval pos() is independent of the def-ness of its arg */
14572         if ( !(obase->op_flags & OPf_MOD))
14573             break;
14574
14575     case OP_SCHOMP:
14576     case OP_CHOMP:
14577         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14578             return newSVpvs_flags("${$/}", SVs_TEMP);
14579         /*FALLTHROUGH*/
14580
14581     default:
14582     do_op:
14583         if (!(obase->op_flags & OPf_KIDS))
14584             break;
14585         o = cUNOPx(obase)->op_first;
14586         
14587     do_op2:
14588         if (!o)
14589             break;
14590
14591         /* This loop checks all the kid ops, skipping any that cannot pos-
14592          * sibly be responsible for the uninitialized value; i.e., defined
14593          * constants and ops that return nothing.  If there is only one op
14594          * left that is not skipped, then we *know* it is responsible for
14595          * the uninitialized value.  If there is more than one op left, we
14596          * have to look for an exact match in the while() loop below.
14597          * Note that we skip padrange, because the individual pad ops that
14598          * it replaced are still in the tree, so we work on them instead.
14599          */
14600         o2 = NULL;
14601         for (kid=o; kid; kid = kid->op_sibling) {
14602             if (kid) {
14603                 const OPCODE type = kid->op_type;
14604                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14605                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14606                   || (type == OP_PUSHMARK)
14607                   || (type == OP_PADRANGE)
14608                 )
14609                 continue;
14610             }
14611             if (o2) { /* more than one found */
14612                 o2 = NULL;
14613                 break;
14614             }
14615             o2 = kid;
14616         }
14617         if (o2)
14618             return find_uninit_var(o2, uninit_sv, match);
14619
14620         /* scan all args */
14621         while (o) {
14622             sv = find_uninit_var(o, uninit_sv, 1);
14623             if (sv)
14624                 return sv;
14625             o = o->op_sibling;
14626         }
14627         break;
14628     }
14629     return NULL;
14630 }
14631
14632
14633 /*
14634 =for apidoc report_uninit
14635
14636 Print appropriate "Use of uninitialized variable" warning.
14637
14638 =cut
14639 */
14640
14641 void
14642 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14643 {
14644     dVAR;
14645     if (PL_op) {
14646         SV* varname = NULL;
14647         if (uninit_sv && PL_curpad) {
14648             varname = find_uninit_var(PL_op, uninit_sv,0);
14649             if (varname)
14650                 sv_insert(varname, 0, 0, " ", 1);
14651         }
14652         /* diag_listed_as: Use of uninitialized value%s */
14653         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14654                 SVfARG(varname ? varname : &PL_sv_no),
14655                 " in ", OP_DESC(PL_op));
14656     }
14657     else
14658         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14659                     "", "", "");
14660 }
14661
14662 /*
14663  * Local variables:
14664  * c-indentation-style: bsd
14665  * c-basic-offset: 4
14666  * indent-tabs-mode: nil
14667  * End:
14668  *
14669  * ex: set ts=8 sts=4 sw=4 et:
14670  */