This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
minor clean up of the refactoring of d6a4f4b531
[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     /* This sets 'delta' to the accumulated value of all deltas so far */
5077     delta += old_delta;
5078     assert(delta);
5079
5080     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5081      * the string; otherwise store a 0 byte there and store 'delta' just prior
5082      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5083      * portion of the chopped part of the string */
5084     if (delta < 0x100) {
5085         *--p = (U8) delta;
5086     } else {
5087         *--p = 0;
5088         p -= sizeof(STRLEN);
5089         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5090     }
5091
5092 #ifdef DEBUGGING
5093     /* Fill the preceding buffer with sentinals to verify that no-one is
5094        using it.  */
5095     while (p > evacp) {
5096         --p;
5097         *p = (U8)PTR2UV(p);
5098     }
5099 #endif
5100 }
5101
5102 /*
5103 =for apidoc sv_catpvn
5104
5105 Concatenates the string onto the end of the string which is in the SV.  The
5106 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5107 status set, then the bytes appended should be valid UTF-8.
5108 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5109
5110 =for apidoc sv_catpvn_flags
5111
5112 Concatenates the string onto the end of the string which is in the SV.  The
5113 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5114 status set, then the bytes appended should be valid UTF-8.
5115 If C<flags> has the C<SV_SMAGIC> bit set, will
5116 C<mg_set> on C<dsv> afterwards if appropriate.
5117 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5118 in terms of this function.
5119
5120 =cut
5121 */
5122
5123 void
5124 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5125 {
5126     dVAR;
5127     STRLEN dlen;
5128     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5129
5130     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5131     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5132
5133     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5134       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5135          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5136          dlen = SvCUR(dsv);
5137       }
5138       else SvGROW(dsv, dlen + slen + 1);
5139       if (sstr == dstr)
5140         sstr = SvPVX_const(dsv);
5141       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5142       SvCUR_set(dsv, SvCUR(dsv) + slen);
5143     }
5144     else {
5145         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5146         const char * const send = sstr + slen;
5147         U8 *d;
5148
5149         /* Something this code does not account for, which I think is
5150            impossible; it would require the same pv to be treated as
5151            bytes *and* utf8, which would indicate a bug elsewhere. */
5152         assert(sstr != dstr);
5153
5154         SvGROW(dsv, dlen + slen * 2 + 1);
5155         d = (U8 *)SvPVX(dsv) + dlen;
5156
5157         while (sstr < send) {
5158             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5159             if (UNI_IS_INVARIANT(uv))
5160                 *d++ = (U8)UTF_TO_NATIVE(uv);
5161             else {
5162                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5163                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5164             }
5165         }
5166         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5167     }
5168     *SvEND(dsv) = '\0';
5169     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5170     SvTAINT(dsv);
5171     if (flags & SV_SMAGIC)
5172         SvSETMAGIC(dsv);
5173 }
5174
5175 /*
5176 =for apidoc sv_catsv
5177
5178 Concatenates the string from SV C<ssv> onto the end of the string in SV
5179 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5180 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5181 C<sv_catsv_nomg>.
5182
5183 =for apidoc sv_catsv_flags
5184
5185 Concatenates the string from SV C<ssv> onto the end of the string in SV
5186 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5187 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5188 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5189 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5190 and C<sv_catsv_mg> are implemented in terms of this function.
5191
5192 =cut */
5193
5194 void
5195 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5196 {
5197     dVAR;
5198  
5199     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5200
5201     if (ssv) {
5202         STRLEN slen;
5203         const char *spv = SvPV_flags_const(ssv, slen, flags);
5204         if (spv) {
5205             if (flags & SV_GMAGIC)
5206                 SvGETMAGIC(dsv);
5207             sv_catpvn_flags(dsv, spv, slen,
5208                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5209             if (flags & SV_SMAGIC)
5210                 SvSETMAGIC(dsv);
5211         }
5212     }
5213 }
5214
5215 /*
5216 =for apidoc sv_catpv
5217
5218 Concatenates the string onto the end of the string which is in the SV.
5219 If the SV has the UTF-8 status set, then the bytes appended should be
5220 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5221
5222 =cut */
5223
5224 void
5225 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5226 {
5227     dVAR;
5228     STRLEN len;
5229     STRLEN tlen;
5230     char *junk;
5231
5232     PERL_ARGS_ASSERT_SV_CATPV;
5233
5234     if (!ptr)
5235         return;
5236     junk = SvPV_force(sv, tlen);
5237     len = strlen(ptr);
5238     SvGROW(sv, tlen + len + 1);
5239     if (ptr == junk)
5240         ptr = SvPVX_const(sv);
5241     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5242     SvCUR_set(sv, SvCUR(sv) + len);
5243     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5244     SvTAINT(sv);
5245 }
5246
5247 /*
5248 =for apidoc sv_catpv_flags
5249
5250 Concatenates the string onto the end of the string which is in the SV.
5251 If the SV has the UTF-8 status set, then the bytes appended should
5252 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5253 on the modified SV if appropriate.
5254
5255 =cut
5256 */
5257
5258 void
5259 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5260 {
5261     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5262     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5263 }
5264
5265 /*
5266 =for apidoc sv_catpv_mg
5267
5268 Like C<sv_catpv>, but also handles 'set' magic.
5269
5270 =cut
5271 */
5272
5273 void
5274 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5275 {
5276     PERL_ARGS_ASSERT_SV_CATPV_MG;
5277
5278     sv_catpv(sv,ptr);
5279     SvSETMAGIC(sv);
5280 }
5281
5282 /*
5283 =for apidoc newSV
5284
5285 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5286 bytes of preallocated string space the SV should have.  An extra byte for a
5287 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5288 space is allocated.)  The reference count for the new SV is set to 1.
5289
5290 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5291 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5292 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5293 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5294 modules supporting older perls.
5295
5296 =cut
5297 */
5298
5299 SV *
5300 Perl_newSV(pTHX_ const STRLEN len)
5301 {
5302     dVAR;
5303     SV *sv;
5304
5305     new_SV(sv);
5306     if (len) {
5307         sv_upgrade(sv, SVt_PV);
5308         SvGROW(sv, len + 1);
5309     }
5310     return sv;
5311 }
5312 /*
5313 =for apidoc sv_magicext
5314
5315 Adds magic to an SV, upgrading it if necessary.  Applies the
5316 supplied vtable and returns a pointer to the magic added.
5317
5318 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5319 In particular, you can add magic to SvREADONLY SVs, and add more than
5320 one instance of the same 'how'.
5321
5322 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5323 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5324 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5325 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5326
5327 (This is now used as a subroutine by C<sv_magic>.)
5328
5329 =cut
5330 */
5331 MAGIC * 
5332 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5333                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5334 {
5335     dVAR;
5336     MAGIC* mg;
5337
5338     PERL_ARGS_ASSERT_SV_MAGICEXT;
5339
5340     SvUPGRADE(sv, SVt_PVMG);
5341     Newxz(mg, 1, MAGIC);
5342     mg->mg_moremagic = SvMAGIC(sv);
5343     SvMAGIC_set(sv, mg);
5344
5345     /* Sometimes a magic contains a reference loop, where the sv and
5346        object refer to each other.  To prevent a reference loop that
5347        would prevent such objects being freed, we look for such loops
5348        and if we find one we avoid incrementing the object refcount.
5349
5350        Note we cannot do this to avoid self-tie loops as intervening RV must
5351        have its REFCNT incremented to keep it in existence.
5352
5353     */
5354     if (!obj || obj == sv ||
5355         how == PERL_MAGIC_arylen ||
5356         how == PERL_MAGIC_symtab ||
5357         (SvTYPE(obj) == SVt_PVGV &&
5358             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5359              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5360              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5361     {
5362         mg->mg_obj = obj;
5363     }
5364     else {
5365         mg->mg_obj = SvREFCNT_inc_simple(obj);
5366         mg->mg_flags |= MGf_REFCOUNTED;
5367     }
5368
5369     /* Normal self-ties simply pass a null object, and instead of
5370        using mg_obj directly, use the SvTIED_obj macro to produce a
5371        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5372        with an RV obj pointing to the glob containing the PVIO.  In
5373        this case, to avoid a reference loop, we need to weaken the
5374        reference.
5375     */
5376
5377     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5378         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5379     {
5380       sv_rvweaken(obj);
5381     }
5382
5383     mg->mg_type = how;
5384     mg->mg_len = namlen;
5385     if (name) {
5386         if (namlen > 0)
5387             mg->mg_ptr = savepvn(name, namlen);
5388         else if (namlen == HEf_SVKEY) {
5389             /* Yes, this is casting away const. This is only for the case of
5390                HEf_SVKEY. I think we need to document this aberation of the
5391                constness of the API, rather than making name non-const, as
5392                that change propagating outwards a long way.  */
5393             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5394         } else
5395             mg->mg_ptr = (char *) name;
5396     }
5397     mg->mg_virtual = (MGVTBL *) vtable;
5398
5399     mg_magical(sv);
5400     return mg;
5401 }
5402
5403 /*
5404 =for apidoc sv_magic
5405
5406 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5407 necessary, then adds a new magic item of type C<how> to the head of the
5408 magic list.
5409
5410 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5411 handling of the C<name> and C<namlen> arguments.
5412
5413 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5414 to add more than one instance of the same 'how'.
5415
5416 =cut
5417 */
5418
5419 void
5420 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5421              const char *const name, const I32 namlen)
5422 {
5423     dVAR;
5424     const MGVTBL *vtable;
5425     MAGIC* mg;
5426     unsigned int flags;
5427     unsigned int vtable_index;
5428
5429     PERL_ARGS_ASSERT_SV_MAGIC;
5430
5431     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5432         || ((flags = PL_magic_data[how]),
5433             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5434             > magic_vtable_max))
5435         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5436
5437     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5438        Useful for attaching extension internal data to perl vars.
5439        Note that multiple extensions may clash if magical scalars
5440        etc holding private data from one are passed to another. */
5441
5442     vtable = (vtable_index == magic_vtable_max)
5443         ? NULL : PL_magic_vtables + vtable_index;
5444
5445 #ifdef PERL_OLD_COPY_ON_WRITE
5446     if (SvIsCOW(sv))
5447         sv_force_normal_flags(sv, 0);
5448 #endif
5449     if (SvREADONLY(sv)) {
5450         if (
5451             /* its okay to attach magic to shared strings */
5452             !SvIsCOW(sv)
5453
5454             && IN_PERL_RUNTIME
5455             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5456            )
5457         {
5458             Perl_croak_no_modify();
5459         }
5460     }
5461     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5462         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5463             /* sv_magic() refuses to add a magic of the same 'how' as an
5464                existing one
5465              */
5466             if (how == PERL_MAGIC_taint)
5467                 mg->mg_len |= 1;
5468             return;
5469         }
5470     }
5471
5472     /* Rest of work is done else where */
5473     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5474
5475     switch (how) {
5476     case PERL_MAGIC_taint:
5477         mg->mg_len = 1;
5478         break;
5479     case PERL_MAGIC_ext:
5480     case PERL_MAGIC_dbfile:
5481         SvRMAGICAL_on(sv);
5482         break;
5483     }
5484 }
5485
5486 static int
5487 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5488 {
5489     MAGIC* mg;
5490     MAGIC** mgp;
5491
5492     assert(flags <= 1);
5493
5494     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5495         return 0;
5496     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5497     for (mg = *mgp; mg; mg = *mgp) {
5498         const MGVTBL* const virt = mg->mg_virtual;
5499         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5500             *mgp = mg->mg_moremagic;
5501             if (virt && virt->svt_free)
5502                 virt->svt_free(aTHX_ sv, mg);
5503             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5504                 if (mg->mg_len > 0)
5505                     Safefree(mg->mg_ptr);
5506                 else if (mg->mg_len == HEf_SVKEY)
5507                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5508                 else if (mg->mg_type == PERL_MAGIC_utf8)
5509                     Safefree(mg->mg_ptr);
5510             }
5511             if (mg->mg_flags & MGf_REFCOUNTED)
5512                 SvREFCNT_dec(mg->mg_obj);
5513             Safefree(mg);
5514         }
5515         else
5516             mgp = &mg->mg_moremagic;
5517     }
5518     if (SvMAGIC(sv)) {
5519         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5520             mg_magical(sv);     /*    else fix the flags now */
5521     }
5522     else {
5523         SvMAGICAL_off(sv);
5524         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5525     }
5526     return 0;
5527 }
5528
5529 /*
5530 =for apidoc sv_unmagic
5531
5532 Removes all magic of type C<type> from an SV.
5533
5534 =cut
5535 */
5536
5537 int
5538 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5539 {
5540     PERL_ARGS_ASSERT_SV_UNMAGIC;
5541     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5542 }
5543
5544 /*
5545 =for apidoc sv_unmagicext
5546
5547 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5548
5549 =cut
5550 */
5551
5552 int
5553 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5554 {
5555     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5556     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5557 }
5558
5559 /*
5560 =for apidoc sv_rvweaken
5561
5562 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5563 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5564 push a back-reference to this RV onto the array of backreferences
5565 associated with that magic.  If the RV is magical, set magic will be
5566 called after the RV is cleared.
5567
5568 =cut
5569 */
5570
5571 SV *
5572 Perl_sv_rvweaken(pTHX_ SV *const sv)
5573 {
5574     SV *tsv;
5575
5576     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5577
5578     if (!SvOK(sv))  /* let undefs pass */
5579         return sv;
5580     if (!SvROK(sv))
5581         Perl_croak(aTHX_ "Can't weaken a nonreference");
5582     else if (SvWEAKREF(sv)) {
5583         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5584         return sv;
5585     }
5586     else if (SvREADONLY(sv)) croak_no_modify();
5587     tsv = SvRV(sv);
5588     Perl_sv_add_backref(aTHX_ tsv, sv);
5589     SvWEAKREF_on(sv);
5590     SvREFCNT_dec_NN(tsv);
5591     return sv;
5592 }
5593
5594 /* Give tsv backref magic if it hasn't already got it, then push a
5595  * back-reference to sv onto the array associated with the backref magic.
5596  *
5597  * As an optimisation, if there's only one backref and it's not an AV,
5598  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5599  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5600  * active.)
5601  */
5602
5603 /* A discussion about the backreferences array and its refcount:
5604  *
5605  * The AV holding the backreferences is pointed to either as the mg_obj of
5606  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5607  * xhv_backreferences field. The array is created with a refcount
5608  * of 2. This means that if during global destruction the array gets
5609  * picked on before its parent to have its refcount decremented by the
5610  * random zapper, it won't actually be freed, meaning it's still there for
5611  * when its parent gets freed.
5612  *
5613  * When the parent SV is freed, the extra ref is killed by
5614  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5615  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5616  *
5617  * When a single backref SV is stored directly, it is not reference
5618  * counted.
5619  */
5620
5621 void
5622 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5623 {
5624     dVAR;
5625     SV **svp;
5626     AV *av = NULL;
5627     MAGIC *mg = NULL;
5628
5629     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5630
5631     /* find slot to store array or singleton backref */
5632
5633     if (SvTYPE(tsv) == SVt_PVHV) {
5634         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5635     } else {
5636         if (! ((mg =
5637             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5638         {
5639             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5640             mg = mg_find(tsv, PERL_MAGIC_backref);
5641         }
5642         svp = &(mg->mg_obj);
5643     }
5644
5645     /* create or retrieve the array */
5646
5647     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5648         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5649     ) {
5650         /* create array */
5651         av = newAV();
5652         AvREAL_off(av);
5653         SvREFCNT_inc_simple_void(av);
5654         /* av now has a refcnt of 2; see discussion above */
5655         if (*svp) {
5656             /* move single existing backref to the array */
5657             av_extend(av, 1);
5658             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5659         }
5660         *svp = (SV*)av;
5661         if (mg)
5662             mg->mg_flags |= MGf_REFCOUNTED;
5663     }
5664     else
5665         av = MUTABLE_AV(*svp);
5666
5667     if (!av) {
5668         /* optimisation: store single backref directly in HvAUX or mg_obj */
5669         *svp = sv;
5670         return;
5671     }
5672     /* push new backref */
5673     assert(SvTYPE(av) == SVt_PVAV);
5674     if (AvFILLp(av) >= AvMAX(av)) {
5675         av_extend(av, AvFILLp(av)+1);
5676     }
5677     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5678 }
5679
5680 /* delete a back-reference to ourselves from the backref magic associated
5681  * with the SV we point to.
5682  */
5683
5684 void
5685 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5686 {
5687     dVAR;
5688     SV **svp = NULL;
5689
5690     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5691
5692     if (SvTYPE(tsv) == SVt_PVHV) {
5693         if (SvOOK(tsv))
5694             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5695     }
5696     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5697         /* It's possible for the the last (strong) reference to tsv to have
5698            become freed *before* the last thing holding a weak reference.
5699            If both survive longer than the backreferences array, then when
5700            the referent's reference count drops to 0 and it is freed, it's
5701            not able to chase the backreferences, so they aren't NULLed.
5702
5703            For example, a CV holds a weak reference to its stash. If both the
5704            CV and the stash survive longer than the backreferences array,
5705            and the CV gets picked for the SvBREAK() treatment first,
5706            *and* it turns out that the stash is only being kept alive because
5707            of an our variable in the pad of the CV, then midway during CV
5708            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5709            It ends up pointing to the freed HV. Hence it's chased in here, and
5710            if this block wasn't here, it would hit the !svp panic just below.
5711
5712            I don't believe that "better" destruction ordering is going to help
5713            here - during global destruction there's always going to be the
5714            chance that something goes out of order. We've tried to make it
5715            foolproof before, and it only resulted in evolutionary pressure on
5716            fools. Which made us look foolish for our hubris. :-(
5717         */
5718         return;
5719     }
5720     else {
5721         MAGIC *const mg
5722             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5723         svp =  mg ? &(mg->mg_obj) : NULL;
5724     }
5725
5726     if (!svp)
5727         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5728     if (!*svp) {
5729         /* It's possible that sv is being freed recursively part way through the
5730            freeing of tsv. If this happens, the backreferences array of tsv has
5731            already been freed, and so svp will be NULL. If this is the case,
5732            we should not panic. Instead, nothing needs doing, so return.  */
5733         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5734             return;
5735         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5736                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5737     }
5738
5739     if (SvTYPE(*svp) == SVt_PVAV) {
5740 #ifdef DEBUGGING
5741         int count = 1;
5742 #endif
5743         AV * const av = (AV*)*svp;
5744         SSize_t fill;
5745         assert(!SvIS_FREED(av));
5746         fill = AvFILLp(av);
5747         assert(fill > -1);
5748         svp = AvARRAY(av);
5749         /* for an SV with N weak references to it, if all those
5750          * weak refs are deleted, then sv_del_backref will be called
5751          * N times and O(N^2) compares will be done within the backref
5752          * array. To ameliorate this potential slowness, we:
5753          * 1) make sure this code is as tight as possible;
5754          * 2) when looking for SV, look for it at both the head and tail of the
5755          *    array first before searching the rest, since some create/destroy
5756          *    patterns will cause the backrefs to be freed in order.
5757          */
5758         if (*svp == sv) {
5759             AvARRAY(av)++;
5760             AvMAX(av)--;
5761         }
5762         else {
5763             SV **p = &svp[fill];
5764             SV *const topsv = *p;
5765             if (topsv != sv) {
5766 #ifdef DEBUGGING
5767                 count = 0;
5768 #endif
5769                 while (--p > svp) {
5770                     if (*p == sv) {
5771                         /* We weren't the last entry.
5772                            An unordered list has this property that you
5773                            can take the last element off the end to fill
5774                            the hole, and it's still an unordered list :-)
5775                         */
5776                         *p = topsv;
5777 #ifdef DEBUGGING
5778                         count++;
5779 #else
5780                         break; /* should only be one */
5781 #endif
5782                     }
5783                 }
5784             }
5785         }
5786         assert(count ==1);
5787         AvFILLp(av) = fill-1;
5788     }
5789     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5790         /* freed AV; skip */
5791     }
5792     else {
5793         /* optimisation: only a single backref, stored directly */
5794         if (*svp != sv)
5795             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5796         *svp = NULL;
5797     }
5798
5799 }
5800
5801 void
5802 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5803 {
5804     SV **svp;
5805     SV **last;
5806     bool is_array;
5807
5808     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5809
5810     if (!av)
5811         return;
5812
5813     /* after multiple passes through Perl_sv_clean_all() for a thingy
5814      * that has badly leaked, the backref array may have gotten freed,
5815      * since we only protect it against 1 round of cleanup */
5816     if (SvIS_FREED(av)) {
5817         if (PL_in_clean_all) /* All is fair */
5818             return;
5819         Perl_croak(aTHX_
5820                    "panic: magic_killbackrefs (freed backref AV/SV)");
5821     }
5822
5823
5824     is_array = (SvTYPE(av) == SVt_PVAV);
5825     if (is_array) {
5826         assert(!SvIS_FREED(av));
5827         svp = AvARRAY(av);
5828         if (svp)
5829             last = svp + AvFILLp(av);
5830     }
5831     else {
5832         /* optimisation: only a single backref, stored directly */
5833         svp = (SV**)&av;
5834         last = svp;
5835     }
5836
5837     if (svp) {
5838         while (svp <= last) {
5839             if (*svp) {
5840                 SV *const referrer = *svp;
5841                 if (SvWEAKREF(referrer)) {
5842                     /* XXX Should we check that it hasn't changed? */
5843                     assert(SvROK(referrer));
5844                     SvRV_set(referrer, 0);
5845                     SvOK_off(referrer);
5846                     SvWEAKREF_off(referrer);
5847                     SvSETMAGIC(referrer);
5848                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5849                            SvTYPE(referrer) == SVt_PVLV) {
5850                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5851                     /* You lookin' at me?  */
5852                     assert(GvSTASH(referrer));
5853                     assert(GvSTASH(referrer) == (const HV *)sv);
5854                     GvSTASH(referrer) = 0;
5855                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5856                            SvTYPE(referrer) == SVt_PVFM) {
5857                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5858                         /* You lookin' at me?  */
5859                         assert(CvSTASH(referrer));
5860                         assert(CvSTASH(referrer) == (const HV *)sv);
5861                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5862                     }
5863                     else {
5864                         assert(SvTYPE(sv) == SVt_PVGV);
5865                         /* You lookin' at me?  */
5866                         assert(CvGV(referrer));
5867                         assert(CvGV(referrer) == (const GV *)sv);
5868                         anonymise_cv_maybe(MUTABLE_GV(sv),
5869                                                 MUTABLE_CV(referrer));
5870                     }
5871
5872                 } else {
5873                     Perl_croak(aTHX_
5874                                "panic: magic_killbackrefs (flags=%"UVxf")",
5875                                (UV)SvFLAGS(referrer));
5876                 }
5877
5878                 if (is_array)
5879                     *svp = NULL;
5880             }
5881             svp++;
5882         }
5883     }
5884     if (is_array) {
5885         AvFILLp(av) = -1;
5886         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5887     }
5888     return;
5889 }
5890
5891 /*
5892 =for apidoc sv_insert
5893
5894 Inserts a string at the specified offset/length within the SV.  Similar to
5895 the Perl substr() function.  Handles get magic.
5896
5897 =for apidoc sv_insert_flags
5898
5899 Same as C<sv_insert>, but the extra C<flags> are passed to the
5900 C<SvPV_force_flags> that applies to C<bigstr>.
5901
5902 =cut
5903 */
5904
5905 void
5906 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5907 {
5908     dVAR;
5909     char *big;
5910     char *mid;
5911     char *midend;
5912     char *bigend;
5913     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5914     STRLEN curlen;
5915
5916     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5917
5918     if (!bigstr)
5919         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5920     SvPV_force_flags(bigstr, curlen, flags);
5921     (void)SvPOK_only_UTF8(bigstr);
5922     if (offset + len > curlen) {
5923         SvGROW(bigstr, offset+len+1);
5924         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5925         SvCUR_set(bigstr, offset+len);
5926     }
5927
5928     SvTAINT(bigstr);
5929     i = littlelen - len;
5930     if (i > 0) {                        /* string might grow */
5931         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5932         mid = big + offset + len;
5933         midend = bigend = big + SvCUR(bigstr);
5934         bigend += i;
5935         *bigend = '\0';
5936         while (midend > mid)            /* shove everything down */
5937             *--bigend = *--midend;
5938         Move(little,big+offset,littlelen,char);
5939         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5940         SvSETMAGIC(bigstr);
5941         return;
5942     }
5943     else if (i == 0) {
5944         Move(little,SvPVX(bigstr)+offset,len,char);
5945         SvSETMAGIC(bigstr);
5946         return;
5947     }
5948
5949     big = SvPVX(bigstr);
5950     mid = big + offset;
5951     midend = mid + len;
5952     bigend = big + SvCUR(bigstr);
5953
5954     if (midend > bigend)
5955         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5956                    midend, bigend);
5957
5958     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5959         if (littlelen) {
5960             Move(little, mid, littlelen,char);
5961             mid += littlelen;
5962         }
5963         i = bigend - midend;
5964         if (i > 0) {
5965             Move(midend, mid, i,char);
5966             mid += i;
5967         }
5968         *mid = '\0';
5969         SvCUR_set(bigstr, mid - big);
5970     }
5971     else if ((i = mid - big)) { /* faster from front */
5972         midend -= littlelen;
5973         mid = midend;
5974         Move(big, midend - i, i, char);
5975         sv_chop(bigstr,midend-i);
5976         if (littlelen)
5977             Move(little, mid, littlelen,char);
5978     }
5979     else if (littlelen) {
5980         midend -= littlelen;
5981         sv_chop(bigstr,midend);
5982         Move(little,midend,littlelen,char);
5983     }
5984     else {
5985         sv_chop(bigstr,midend);
5986     }
5987     SvSETMAGIC(bigstr);
5988 }
5989
5990 /*
5991 =for apidoc sv_replace
5992
5993 Make the first argument a copy of the second, then delete the original.
5994 The target SV physically takes over ownership of the body of the source SV
5995 and inherits its flags; however, the target keeps any magic it owns,
5996 and any magic in the source is discarded.
5997 Note that this is a rather specialist SV copying operation; most of the
5998 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5999
6000 =cut
6001 */
6002
6003 void
6004 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6005 {
6006     dVAR;
6007     const U32 refcnt = SvREFCNT(sv);
6008
6009     PERL_ARGS_ASSERT_SV_REPLACE;
6010
6011     SV_CHECK_THINKFIRST_COW_DROP(sv);
6012     if (SvREFCNT(nsv) != 1) {
6013         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6014                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6015     }
6016     if (SvMAGICAL(sv)) {
6017         if (SvMAGICAL(nsv))
6018             mg_free(nsv);
6019         else
6020             sv_upgrade(nsv, SVt_PVMG);
6021         SvMAGIC_set(nsv, SvMAGIC(sv));
6022         SvFLAGS(nsv) |= SvMAGICAL(sv);
6023         SvMAGICAL_off(sv);
6024         SvMAGIC_set(sv, NULL);
6025     }
6026     SvREFCNT(sv) = 0;
6027     sv_clear(sv);
6028     assert(!SvREFCNT(sv));
6029 #ifdef DEBUG_LEAKING_SCALARS
6030     sv->sv_flags  = nsv->sv_flags;
6031     sv->sv_any    = nsv->sv_any;
6032     sv->sv_refcnt = nsv->sv_refcnt;
6033     sv->sv_u      = nsv->sv_u;
6034 #else
6035     StructCopy(nsv,sv,SV);
6036 #endif
6037     if(SvTYPE(sv) == SVt_IV) {
6038         SvANY(sv)
6039             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6040     }
6041         
6042
6043 #ifdef PERL_OLD_COPY_ON_WRITE
6044     if (SvIsCOW_normal(nsv)) {
6045         /* We need to follow the pointers around the loop to make the
6046            previous SV point to sv, rather than nsv.  */
6047         SV *next;
6048         SV *current = nsv;
6049         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6050             assert(next);
6051             current = next;
6052             assert(SvPVX_const(current) == SvPVX_const(nsv));
6053         }
6054         /* Make the SV before us point to the SV after us.  */
6055         if (DEBUG_C_TEST) {
6056             PerlIO_printf(Perl_debug_log, "previous is\n");
6057             sv_dump(current);
6058             PerlIO_printf(Perl_debug_log,
6059                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6060                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6061         }
6062         SV_COW_NEXT_SV_SET(current, sv);
6063     }
6064 #endif
6065     SvREFCNT(sv) = refcnt;
6066     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6067     SvREFCNT(nsv) = 0;
6068     del_SV(nsv);
6069 }
6070
6071 /* We're about to free a GV which has a CV that refers back to us.
6072  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6073  * field) */
6074
6075 STATIC void
6076 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6077 {
6078     SV *gvname;
6079     GV *anongv;
6080
6081     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6082
6083     /* be assertive! */
6084     assert(SvREFCNT(gv) == 0);
6085     assert(isGV(gv) && isGV_with_GP(gv));
6086     assert(GvGP(gv));
6087     assert(!CvANON(cv));
6088     assert(CvGV(cv) == gv);
6089     assert(!CvNAMED(cv));
6090
6091     /* will the CV shortly be freed by gp_free() ? */
6092     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6093         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6094         return;
6095     }
6096
6097     /* if not, anonymise: */
6098     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6099                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6100                     : newSVpvn_flags( "__ANON__", 8, 0 );
6101     sv_catpvs(gvname, "::__ANON__");
6102     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6103     SvREFCNT_dec_NN(gvname);
6104
6105     CvANON_on(cv);
6106     CvCVGV_RC_on(cv);
6107     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6108 }
6109
6110
6111 /*
6112 =for apidoc sv_clear
6113
6114 Clear an SV: call any destructors, free up any memory used by the body,
6115 and free the body itself.  The SV's head is I<not> freed, although
6116 its type is set to all 1's so that it won't inadvertently be assumed
6117 to be live during global destruction etc.
6118 This function should only be called when REFCNT is zero.  Most of the time
6119 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6120 instead.
6121
6122 =cut
6123 */
6124
6125 void
6126 Perl_sv_clear(pTHX_ SV *const orig_sv)
6127 {
6128     dVAR;
6129     HV *stash;
6130     U32 type;
6131     const struct body_details *sv_type_details;
6132     SV* iter_sv = NULL;
6133     SV* next_sv = NULL;
6134     SV *sv = orig_sv;
6135     STRLEN hash_index;
6136
6137     PERL_ARGS_ASSERT_SV_CLEAR;
6138
6139     /* within this loop, sv is the SV currently being freed, and
6140      * iter_sv is the most recent AV or whatever that's being iterated
6141      * over to provide more SVs */
6142
6143     while (sv) {
6144
6145         type = SvTYPE(sv);
6146
6147         assert(SvREFCNT(sv) == 0);
6148         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6149
6150         if (type <= SVt_IV) {
6151             /* See the comment in sv.h about the collusion between this
6152              * early return and the overloading of the NULL slots in the
6153              * size table.  */
6154             if (SvROK(sv))
6155                 goto free_rv;
6156             SvFLAGS(sv) &= SVf_BREAK;
6157             SvFLAGS(sv) |= SVTYPEMASK;
6158             goto free_head;
6159         }
6160
6161         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6162
6163         if (type >= SVt_PVMG) {
6164             if (SvOBJECT(sv)) {
6165                 if (!curse(sv, 1)) goto get_next_sv;
6166                 type = SvTYPE(sv); /* destructor may have changed it */
6167             }
6168             /* Free back-references before magic, in case the magic calls
6169              * Perl code that has weak references to sv. */
6170             if (type == SVt_PVHV) {
6171                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6172                 if (SvMAGIC(sv))
6173                     mg_free(sv);
6174             }
6175             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6176                 SvREFCNT_dec(SvOURSTASH(sv));
6177             } else if (SvMAGIC(sv)) {
6178                 /* Free back-references before other types of magic. */
6179                 sv_unmagic(sv, PERL_MAGIC_backref);
6180                 mg_free(sv);
6181             }
6182             SvMAGICAL_off(sv);
6183             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6184                 SvREFCNT_dec(SvSTASH(sv));
6185         }
6186         switch (type) {
6187             /* case SVt_DUMMY: */
6188         case SVt_PVIO:
6189             if (IoIFP(sv) &&
6190                 IoIFP(sv) != PerlIO_stdin() &&
6191                 IoIFP(sv) != PerlIO_stdout() &&
6192                 IoIFP(sv) != PerlIO_stderr() &&
6193                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6194             {
6195                 io_close(MUTABLE_IO(sv), FALSE);
6196             }
6197             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6198                 PerlDir_close(IoDIRP(sv));
6199             IoDIRP(sv) = (DIR*)NULL;
6200             Safefree(IoTOP_NAME(sv));
6201             Safefree(IoFMT_NAME(sv));
6202             Safefree(IoBOTTOM_NAME(sv));
6203             if ((const GV *)sv == PL_statgv)
6204                 PL_statgv = NULL;
6205             goto freescalar;
6206         case SVt_REGEXP:
6207             /* FIXME for plugins */
6208           freeregexp:
6209             pregfree2((REGEXP*) sv);
6210             goto freescalar;
6211         case SVt_PVCV:
6212         case SVt_PVFM:
6213             cv_undef(MUTABLE_CV(sv));
6214             /* If we're in a stash, we don't own a reference to it.
6215              * However it does have a back reference to us, which needs to
6216              * be cleared.  */
6217             if ((stash = CvSTASH(sv)))
6218                 sv_del_backref(MUTABLE_SV(stash), sv);
6219             goto freescalar;
6220         case SVt_PVHV:
6221             if (PL_last_swash_hv == (const HV *)sv) {
6222                 PL_last_swash_hv = NULL;
6223             }
6224             if (HvTOTALKEYS((HV*)sv) > 0) {
6225                 const char *name;
6226                 /* this statement should match the one at the beginning of
6227                  * hv_undef_flags() */
6228                 if (   PL_phase != PERL_PHASE_DESTRUCT
6229                     && (name = HvNAME((HV*)sv)))
6230                 {
6231                     if (PL_stashcache) {
6232                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6233                                      sv));
6234                         (void)hv_delete(PL_stashcache, name,
6235                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6236                     }
6237                     hv_name_set((HV*)sv, NULL, 0, 0);
6238                 }
6239
6240                 /* save old iter_sv in unused SvSTASH field */
6241                 assert(!SvOBJECT(sv));
6242                 SvSTASH(sv) = (HV*)iter_sv;
6243                 iter_sv = sv;
6244
6245                 /* save old hash_index in unused SvMAGIC field */
6246                 assert(!SvMAGICAL(sv));
6247                 assert(!SvMAGIC(sv));
6248                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6249                 hash_index = 0;
6250
6251                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6252                 goto get_next_sv; /* process this new sv */
6253             }
6254             /* free empty hash */
6255             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6256             assert(!HvARRAY((HV*)sv));
6257             break;
6258         case SVt_PVAV:
6259             {
6260                 AV* av = MUTABLE_AV(sv);
6261                 if (PL_comppad == av) {
6262                     PL_comppad = NULL;
6263                     PL_curpad = NULL;
6264                 }
6265                 if (AvREAL(av) && AvFILLp(av) > -1) {
6266                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6267                     /* save old iter_sv in top-most slot of AV,
6268                      * and pray that it doesn't get wiped in the meantime */
6269                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6270                     iter_sv = sv;
6271                     goto get_next_sv; /* process this new sv */
6272                 }
6273                 Safefree(AvALLOC(av));
6274             }
6275
6276             break;
6277         case SVt_PVLV:
6278             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6279                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6280                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6281                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6282             }
6283             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6284                 SvREFCNT_dec(LvTARG(sv));
6285             if (isREGEXP(sv)) goto freeregexp;
6286         case SVt_PVGV:
6287             if (isGV_with_GP(sv)) {
6288                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6289                    && HvENAME_get(stash))
6290                     mro_method_changed_in(stash);
6291                 gp_free(MUTABLE_GV(sv));
6292                 if (GvNAME_HEK(sv))
6293                     unshare_hek(GvNAME_HEK(sv));
6294                 /* If we're in a stash, we don't own a reference to it.
6295                  * However it does have a back reference to us, which
6296                  * needs to be cleared.  */
6297                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6298                         sv_del_backref(MUTABLE_SV(stash), sv);
6299             }
6300             /* FIXME. There are probably more unreferenced pointers to SVs
6301              * in the interpreter struct that we should check and tidy in
6302              * a similar fashion to this:  */
6303             /* See also S_sv_unglob, which does the same thing. */
6304             if ((const GV *)sv == PL_last_in_gv)
6305                 PL_last_in_gv = NULL;
6306             else if ((const GV *)sv == PL_statgv)
6307                 PL_statgv = NULL;
6308             else if ((const GV *)sv == PL_stderrgv)
6309                 PL_stderrgv = NULL;
6310         case SVt_PVMG:
6311         case SVt_PVNV:
6312         case SVt_PVIV:
6313         case SVt_PV:
6314           freescalar:
6315             /* Don't bother with SvOOK_off(sv); as we're only going to
6316              * free it.  */
6317             if (SvOOK(sv)) {
6318                 STRLEN offset;
6319                 SvOOK_offset(sv, offset);
6320                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6321                 /* Don't even bother with turning off the OOK flag.  */
6322             }
6323             if (SvROK(sv)) {
6324             free_rv:
6325                 {
6326                     SV * const target = SvRV(sv);
6327                     if (SvWEAKREF(sv))
6328                         sv_del_backref(target, sv);
6329                     else
6330                         next_sv = target;
6331                 }
6332             }
6333 #ifdef PERL_ANY_COW
6334             else if (SvPVX_const(sv)
6335                      && !(SvTYPE(sv) == SVt_PVIO
6336                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6337             {
6338                 if (SvIsCOW(sv)) {
6339                     if (DEBUG_C_TEST) {
6340                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6341                         sv_dump(sv);
6342                     }
6343                     if (SvLEN(sv)) {
6344 # ifdef PERL_OLD_COPY_ON_WRITE
6345                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6346 # else
6347                         if (CowREFCNT(sv)) {
6348                             CowREFCNT(sv)--;
6349                             SvLEN_set(sv, 0);
6350                         }
6351 # endif
6352                     } else {
6353                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6354                     }
6355
6356                 }
6357 # ifdef PERL_OLD_COPY_ON_WRITE
6358                 else
6359 # endif
6360                 if (SvLEN(sv)) {
6361                     Safefree(SvPVX_mutable(sv));
6362                 }
6363             }
6364 #else
6365             else if (SvPVX_const(sv) && SvLEN(sv)
6366                      && !(SvTYPE(sv) == SVt_PVIO
6367                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6368                 Safefree(SvPVX_mutable(sv));
6369             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6370                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6371             }
6372 #endif
6373             break;
6374         case SVt_NV:
6375             break;
6376         }
6377
6378       free_body:
6379
6380         SvFLAGS(sv) &= SVf_BREAK;
6381         SvFLAGS(sv) |= SVTYPEMASK;
6382
6383         sv_type_details = bodies_by_type + type;
6384         if (sv_type_details->arena) {
6385             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6386                      &PL_body_roots[type]);
6387         }
6388         else if (sv_type_details->body_size) {
6389             safefree(SvANY(sv));
6390         }
6391
6392       free_head:
6393         /* caller is responsible for freeing the head of the original sv */
6394         if (sv != orig_sv && !SvREFCNT(sv))
6395             del_SV(sv);
6396
6397         /* grab and free next sv, if any */
6398       get_next_sv:
6399         while (1) {
6400             sv = NULL;
6401             if (next_sv) {
6402                 sv = next_sv;
6403                 next_sv = NULL;
6404             }
6405             else if (!iter_sv) {
6406                 break;
6407             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6408                 AV *const av = (AV*)iter_sv;
6409                 if (AvFILLp(av) > -1) {
6410                     sv = AvARRAY(av)[AvFILLp(av)--];
6411                 }
6412                 else { /* no more elements of current AV to free */
6413                     sv = iter_sv;
6414                     type = SvTYPE(sv);
6415                     /* restore previous value, squirrelled away */
6416                     iter_sv = AvARRAY(av)[AvMAX(av)];
6417                     Safefree(AvALLOC(av));
6418                     goto free_body;
6419                 }
6420             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6421                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6422                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6423                     /* no more elements of current HV to free */
6424                     sv = iter_sv;
6425                     type = SvTYPE(sv);
6426                     /* Restore previous values of iter_sv and hash_index,
6427                      * squirrelled away */
6428                     assert(!SvOBJECT(sv));
6429                     iter_sv = (SV*)SvSTASH(sv);
6430                     assert(!SvMAGICAL(sv));
6431                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6432 #ifdef DEBUGGING
6433                     /* perl -DA does not like rubbish in SvMAGIC. */
6434                     SvMAGIC_set(sv, 0);
6435 #endif
6436
6437                     /* free any remaining detritus from the hash struct */
6438                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6439                     assert(!HvARRAY((HV*)sv));
6440                     goto free_body;
6441                 }
6442             }
6443
6444             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6445
6446             if (!sv)
6447                 continue;
6448             if (!SvREFCNT(sv)) {
6449                 sv_free(sv);
6450                 continue;
6451             }
6452             if (--(SvREFCNT(sv)))
6453                 continue;
6454 #ifdef DEBUGGING
6455             if (SvTEMP(sv)) {
6456                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6457                          "Attempt to free temp prematurely: SV 0x%"UVxf
6458                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6459                 continue;
6460             }
6461 #endif
6462             if (SvIMMORTAL(sv)) {
6463                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6464                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6465                 continue;
6466             }
6467             break;
6468         } /* while 1 */
6469
6470     } /* while sv */
6471 }
6472
6473 /* This routine curses the sv itself, not the object referenced by sv. So
6474    sv does not have to be ROK. */
6475
6476 static bool
6477 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6478     dVAR;
6479
6480     PERL_ARGS_ASSERT_CURSE;
6481     assert(SvOBJECT(sv));
6482
6483     if (PL_defstash &&  /* Still have a symbol table? */
6484         SvDESTROYABLE(sv))
6485     {
6486         dSP;
6487         HV* stash;
6488         do {
6489           stash = SvSTASH(sv);
6490           assert(SvTYPE(stash) == SVt_PVHV);
6491           if (HvNAME(stash)) {
6492             CV* destructor = NULL;
6493             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6494             if (!destructor) {
6495                 GV * const gv =
6496                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6497                 if (gv) destructor = GvCV(gv);
6498                 if (!SvOBJECT(stash))
6499                     SvSTASH(stash) =
6500                         destructor ? (HV *)destructor : ((HV *)0)+1;
6501             }
6502             assert(!destructor || destructor == ((CV *)0)+1
6503                 || SvTYPE(destructor) == SVt_PVCV);
6504             if (destructor && destructor != ((CV *)0)+1
6505                 /* A constant subroutine can have no side effects, so
6506                    don't bother calling it.  */
6507                 && !CvCONST(destructor)
6508                 /* Don't bother calling an empty destructor or one that
6509                    returns immediately. */
6510                 && (CvISXSUB(destructor)
6511                 || (CvSTART(destructor)
6512                     && (CvSTART(destructor)->op_next->op_type
6513                                         != OP_LEAVESUB)
6514                     && (CvSTART(destructor)->op_next->op_type
6515                                         != OP_PUSHMARK
6516                         || CvSTART(destructor)->op_next->op_next->op_type
6517                                         != OP_RETURN
6518                        )
6519                    ))
6520                )
6521             {
6522                 SV* const tmpref = newRV(sv);
6523                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6524                 ENTER;
6525                 PUSHSTACKi(PERLSI_DESTROY);
6526                 EXTEND(SP, 2);
6527                 PUSHMARK(SP);
6528                 PUSHs(tmpref);
6529                 PUTBACK;
6530                 call_sv(MUTABLE_SV(destructor),
6531                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6532                 POPSTACK;
6533                 SPAGAIN;
6534                 LEAVE;
6535                 if(SvREFCNT(tmpref) < 2) {
6536                     /* tmpref is not kept alive! */
6537                     SvREFCNT(sv)--;
6538                     SvRV_set(tmpref, NULL);
6539                     SvROK_off(tmpref);
6540                 }
6541                 SvREFCNT_dec_NN(tmpref);
6542             }
6543           }
6544         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6545
6546
6547         if (check_refcnt && SvREFCNT(sv)) {
6548             if (PL_in_clean_objs)
6549                 Perl_croak(aTHX_
6550                   "DESTROY created new reference to dead object '%"HEKf"'",
6551                    HEKfARG(HvNAME_HEK(stash)));
6552             /* DESTROY gave object new lease on life */
6553             return FALSE;
6554         }
6555     }
6556
6557     if (SvOBJECT(sv)) {
6558         HV * const stash = SvSTASH(sv);
6559         /* Curse before freeing the stash, as freeing the stash could cause
6560            a recursive call into S_curse. */
6561         SvOBJECT_off(sv);       /* Curse the object. */
6562         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6563         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6564     }
6565     return TRUE;
6566 }
6567
6568 /*
6569 =for apidoc sv_newref
6570
6571 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6572 instead.
6573
6574 =cut
6575 */
6576
6577 SV *
6578 Perl_sv_newref(pTHX_ SV *const sv)
6579 {
6580     PERL_UNUSED_CONTEXT;
6581     if (sv)
6582         (SvREFCNT(sv))++;
6583     return sv;
6584 }
6585
6586 /*
6587 =for apidoc sv_free
6588
6589 Decrement an SV's reference count, and if it drops to zero, call
6590 C<sv_clear> to invoke destructors and free up any memory used by
6591 the body; finally, deallocate the SV's head itself.
6592 Normally called via a wrapper macro C<SvREFCNT_dec>.
6593
6594 =cut
6595 */
6596
6597 void
6598 Perl_sv_free(pTHX_ SV *const sv)
6599 {
6600     SvREFCNT_dec(sv);
6601 }
6602
6603
6604 /* Private helper function for SvREFCNT_dec().
6605  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6606
6607 void
6608 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6609 {
6610     dVAR;
6611
6612     PERL_ARGS_ASSERT_SV_FREE2;
6613
6614     if (LIKELY( rc == 1 )) {
6615         /* normal case */
6616         SvREFCNT(sv) = 0;
6617
6618 #ifdef DEBUGGING
6619         if (SvTEMP(sv)) {
6620             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6621                              "Attempt to free temp prematurely: SV 0x%"UVxf
6622                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6623             return;
6624         }
6625 #endif
6626         if (SvIMMORTAL(sv)) {
6627             /* make sure SvREFCNT(sv)==0 happens very seldom */
6628             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6629             return;
6630         }
6631         sv_clear(sv);
6632         if (! SvREFCNT(sv)) /* may have have been resurrected */
6633             del_SV(sv);
6634         return;
6635     }
6636
6637     /* handle exceptional cases */
6638
6639     assert(rc == 0);
6640
6641     if (SvFLAGS(sv) & SVf_BREAK)
6642         /* this SV's refcnt has been artificially decremented to
6643          * trigger cleanup */
6644         return;
6645     if (PL_in_clean_all) /* All is fair */
6646         return;
6647     if (SvIMMORTAL(sv)) {
6648         /* make sure SvREFCNT(sv)==0 happens very seldom */
6649         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6650         return;
6651     }
6652     if (ckWARN_d(WARN_INTERNAL)) {
6653 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6654         Perl_dump_sv_child(aTHX_ sv);
6655 #else
6656     #ifdef DEBUG_LEAKING_SCALARS
6657         sv_dump(sv);
6658     #endif
6659 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6660         if (PL_warnhook == PERL_WARNHOOK_FATAL
6661             || ckDEAD(packWARN(WARN_INTERNAL))) {
6662             /* Don't let Perl_warner cause us to escape our fate:  */
6663             abort();
6664         }
6665 #endif
6666         /* This may not return:  */
6667         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6668                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6669                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6670 #endif
6671     }
6672 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6673     abort();
6674 #endif
6675
6676 }
6677
6678
6679 /*
6680 =for apidoc sv_len
6681
6682 Returns the length of the string in the SV.  Handles magic and type
6683 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6684 gives raw access to the xpv_cur slot.
6685
6686 =cut
6687 */
6688
6689 STRLEN
6690 Perl_sv_len(pTHX_ SV *const sv)
6691 {
6692     STRLEN len;
6693
6694     if (!sv)
6695         return 0;
6696
6697     (void)SvPV_const(sv, len);
6698     return len;
6699 }
6700
6701 /*
6702 =for apidoc sv_len_utf8
6703
6704 Returns the number of characters in the string in an SV, counting wide
6705 UTF-8 bytes as a single character.  Handles magic and type coercion.
6706
6707 =cut
6708 */
6709
6710 /*
6711  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6712  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6713  * (Note that the mg_len is not the length of the mg_ptr field.
6714  * This allows the cache to store the character length of the string without
6715  * needing to malloc() extra storage to attach to the mg_ptr.)
6716  *
6717  */
6718
6719 STRLEN
6720 Perl_sv_len_utf8(pTHX_ SV *const sv)
6721 {
6722     if (!sv)
6723         return 0;
6724
6725     SvGETMAGIC(sv);
6726     return sv_len_utf8_nomg(sv);
6727 }
6728
6729 STRLEN
6730 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6731 {
6732     dVAR;
6733     STRLEN len;
6734     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6735
6736     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6737
6738     if (PL_utf8cache && SvUTF8(sv)) {
6739             STRLEN ulen;
6740             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6741
6742             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6743                 if (mg->mg_len != -1)
6744                     ulen = mg->mg_len;
6745                 else {
6746                     /* We can use the offset cache for a headstart.
6747                        The longer value is stored in the first pair.  */
6748                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6749
6750                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6751                                                        s + len);
6752                 }
6753                 
6754                 if (PL_utf8cache < 0) {
6755                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6756                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6757                 }
6758             }
6759             else {
6760                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6761                 utf8_mg_len_cache_update(sv, &mg, ulen);
6762             }
6763             return ulen;
6764     }
6765     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6766 }
6767
6768 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6769    offset.  */
6770 static STRLEN
6771 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6772                       STRLEN *const uoffset_p, bool *const at_end)
6773 {
6774     const U8 *s = start;
6775     STRLEN uoffset = *uoffset_p;
6776
6777     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6778
6779     while (s < send && uoffset) {
6780         --uoffset;
6781         s += UTF8SKIP(s);
6782     }
6783     if (s == send) {
6784         *at_end = TRUE;
6785     }
6786     else if (s > send) {
6787         *at_end = TRUE;
6788         /* This is the existing behaviour. Possibly it should be a croak, as
6789            it's actually a bounds error  */
6790         s = send;
6791     }
6792     *uoffset_p -= uoffset;
6793     return s - start;
6794 }
6795
6796 /* Given the length of the string in both bytes and UTF-8 characters, decide
6797    whether to walk forwards or backwards to find the byte corresponding to
6798    the passed in UTF-8 offset.  */
6799 static STRLEN
6800 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6801                     STRLEN uoffset, const STRLEN uend)
6802 {
6803     STRLEN backw = uend - uoffset;
6804
6805     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6806
6807     if (uoffset < 2 * backw) {
6808         /* The assumption is that going forwards is twice the speed of going
6809            forward (that's where the 2 * backw comes from).
6810            (The real figure of course depends on the UTF-8 data.)  */
6811         const U8 *s = start;
6812
6813         while (s < send && uoffset--)
6814             s += UTF8SKIP(s);
6815         assert (s <= send);
6816         if (s > send)
6817             s = send;
6818         return s - start;
6819     }
6820
6821     while (backw--) {
6822         send--;
6823         while (UTF8_IS_CONTINUATION(*send))
6824             send--;
6825     }
6826     return send - start;
6827 }
6828
6829 /* For the string representation of the given scalar, find the byte
6830    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6831    give another position in the string, *before* the sought offset, which
6832    (which is always true, as 0, 0 is a valid pair of positions), which should
6833    help reduce the amount of linear searching.
6834    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6835    will be used to reduce the amount of linear searching. The cache will be
6836    created if necessary, and the found value offered to it for update.  */
6837 static STRLEN
6838 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6839                     const U8 *const send, STRLEN uoffset,
6840                     STRLEN uoffset0, STRLEN boffset0)
6841 {
6842     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6843     bool found = FALSE;
6844     bool at_end = FALSE;
6845
6846     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6847
6848     assert (uoffset >= uoffset0);
6849
6850     if (!uoffset)
6851         return 0;
6852
6853     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6854         && PL_utf8cache
6855         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6856                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6857         if ((*mgp)->mg_ptr) {
6858             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6859             if (cache[0] == uoffset) {
6860                 /* An exact match. */
6861                 return cache[1];
6862             }
6863             if (cache[2] == uoffset) {
6864                 /* An exact match. */
6865                 return cache[3];
6866             }
6867
6868             if (cache[0] < uoffset) {
6869                 /* The cache already knows part of the way.   */
6870                 if (cache[0] > uoffset0) {
6871                     /* The cache knows more than the passed in pair  */
6872                     uoffset0 = cache[0];
6873                     boffset0 = cache[1];
6874                 }
6875                 if ((*mgp)->mg_len != -1) {
6876                     /* And we know the end too.  */
6877                     boffset = boffset0
6878                         + sv_pos_u2b_midway(start + boffset0, send,
6879                                               uoffset - uoffset0,
6880                                               (*mgp)->mg_len - uoffset0);
6881                 } else {
6882                     uoffset -= uoffset0;
6883                     boffset = boffset0
6884                         + sv_pos_u2b_forwards(start + boffset0,
6885                                               send, &uoffset, &at_end);
6886                     uoffset += uoffset0;
6887                 }
6888             }
6889             else if (cache[2] < uoffset) {
6890                 /* We're between the two cache entries.  */
6891                 if (cache[2] > uoffset0) {
6892                     /* and the cache knows more than the passed in pair  */
6893                     uoffset0 = cache[2];
6894                     boffset0 = cache[3];
6895                 }
6896
6897                 boffset = boffset0
6898                     + sv_pos_u2b_midway(start + boffset0,
6899                                           start + cache[1],
6900                                           uoffset - uoffset0,
6901                                           cache[0] - uoffset0);
6902             } else {
6903                 boffset = boffset0
6904                     + sv_pos_u2b_midway(start + boffset0,
6905                                           start + cache[3],
6906                                           uoffset - uoffset0,
6907                                           cache[2] - uoffset0);
6908             }
6909             found = TRUE;
6910         }
6911         else if ((*mgp)->mg_len != -1) {
6912             /* If we can take advantage of a passed in offset, do so.  */
6913             /* In fact, offset0 is either 0, or less than offset, so don't
6914                need to worry about the other possibility.  */
6915             boffset = boffset0
6916                 + sv_pos_u2b_midway(start + boffset0, send,
6917                                       uoffset - uoffset0,
6918                                       (*mgp)->mg_len - uoffset0);
6919             found = TRUE;
6920         }
6921     }
6922
6923     if (!found || PL_utf8cache < 0) {
6924         STRLEN real_boffset;
6925         uoffset -= uoffset0;
6926         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6927                                                       send, &uoffset, &at_end);
6928         uoffset += uoffset0;
6929
6930         if (found && PL_utf8cache < 0)
6931             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6932                                        real_boffset, sv);
6933         boffset = real_boffset;
6934     }
6935
6936     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6937         if (at_end)
6938             utf8_mg_len_cache_update(sv, mgp, uoffset);
6939         else
6940             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6941     }
6942     return boffset;
6943 }
6944
6945
6946 /*
6947 =for apidoc sv_pos_u2b_flags
6948
6949 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6950 the start of the string, to a count of the equivalent number of bytes; if
6951 lenp is non-zero, it does the same to lenp, but this time starting from
6952 the offset, rather than from the start
6953 of the string.  Handles type coercion.
6954 I<flags> is passed to C<SvPV_flags>, and usually should be
6955 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6956
6957 =cut
6958 */
6959
6960 /*
6961  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6962  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6963  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6964  *
6965  */
6966
6967 STRLEN
6968 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6969                       U32 flags)
6970 {
6971     const U8 *start;
6972     STRLEN len;
6973     STRLEN boffset;
6974
6975     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6976
6977     start = (U8*)SvPV_flags(sv, len, flags);
6978     if (len) {
6979         const U8 * const send = start + len;
6980         MAGIC *mg = NULL;
6981         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6982
6983         if (lenp
6984             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6985                         is 0, and *lenp is already set to that.  */) {
6986             /* Convert the relative offset to absolute.  */
6987             const STRLEN uoffset2 = uoffset + *lenp;
6988             const STRLEN boffset2
6989                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6990                                       uoffset, boffset) - boffset;
6991
6992             *lenp = boffset2;
6993         }
6994     } else {
6995         if (lenp)
6996             *lenp = 0;
6997         boffset = 0;
6998     }
6999
7000     return boffset;
7001 }
7002
7003 /*
7004 =for apidoc sv_pos_u2b
7005
7006 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7007 the start of the string, to a count of the equivalent number of bytes; if
7008 lenp is non-zero, it does the same to lenp, but this time starting from
7009 the offset, rather than from the start of the string.  Handles magic and
7010 type coercion.
7011
7012 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7013 than 2Gb.
7014
7015 =cut
7016 */
7017
7018 /*
7019  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7020  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7021  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7022  *
7023  */
7024
7025 /* This function is subject to size and sign problems */
7026
7027 void
7028 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7029 {
7030     PERL_ARGS_ASSERT_SV_POS_U2B;
7031
7032     if (lenp) {
7033         STRLEN ulen = (STRLEN)*lenp;
7034         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7035                                          SV_GMAGIC|SV_CONST_RETURN);
7036         *lenp = (I32)ulen;
7037     } else {
7038         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7039                                          SV_GMAGIC|SV_CONST_RETURN);
7040     }
7041 }
7042
7043 static void
7044 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7045                            const STRLEN ulen)
7046 {
7047     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7048     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7049         return;
7050
7051     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7052                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7053         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7054     }
7055     assert(*mgp);
7056
7057     (*mgp)->mg_len = ulen;
7058     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
7059     if (ulen != (STRLEN) (*mgp)->mg_len)
7060         (*mgp)->mg_len = -1;
7061 }
7062
7063 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7064    byte length pairing. The (byte) length of the total SV is passed in too,
7065    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7066    may not have updated SvCUR, so we can't rely on reading it directly.
7067
7068    The proffered utf8/byte length pairing isn't used if the cache already has
7069    two pairs, and swapping either for the proffered pair would increase the
7070    RMS of the intervals between known byte offsets.
7071
7072    The cache itself consists of 4 STRLEN values
7073    0: larger UTF-8 offset
7074    1: corresponding byte offset
7075    2: smaller UTF-8 offset
7076    3: corresponding byte offset
7077
7078    Unused cache pairs have the value 0, 0.
7079    Keeping the cache "backwards" means that the invariant of
7080    cache[0] >= cache[2] is maintained even with empty slots, which means that
7081    the code that uses it doesn't need to worry if only 1 entry has actually
7082    been set to non-zero.  It also makes the "position beyond the end of the
7083    cache" logic much simpler, as the first slot is always the one to start
7084    from.   
7085 */
7086 static void
7087 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7088                            const STRLEN utf8, const STRLEN blen)
7089 {
7090     STRLEN *cache;
7091
7092     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7093
7094     if (SvREADONLY(sv))
7095         return;
7096
7097     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7098                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7099         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7100                            0);
7101         (*mgp)->mg_len = -1;
7102     }
7103     assert(*mgp);
7104
7105     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7106         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7107         (*mgp)->mg_ptr = (char *) cache;
7108     }
7109     assert(cache);
7110
7111     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7112         /* SvPOKp() because it's possible that sv has string overloading, and
7113            therefore is a reference, hence SvPVX() is actually a pointer.
7114            This cures the (very real) symptoms of RT 69422, but I'm not actually
7115            sure whether we should even be caching the results of UTF-8
7116            operations on overloading, given that nothing stops overloading
7117            returning a different value every time it's called.  */
7118         const U8 *start = (const U8 *) SvPVX_const(sv);
7119         const STRLEN realutf8 = utf8_length(start, start + byte);
7120
7121         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7122                                    sv);
7123     }
7124
7125     /* Cache is held with the later position first, to simplify the code
7126        that deals with unbounded ends.  */
7127        
7128     ASSERT_UTF8_CACHE(cache);
7129     if (cache[1] == 0) {
7130         /* Cache is totally empty  */
7131         cache[0] = utf8;
7132         cache[1] = byte;
7133     } else if (cache[3] == 0) {
7134         if (byte > cache[1]) {
7135             /* New one is larger, so goes first.  */
7136             cache[2] = cache[0];
7137             cache[3] = cache[1];
7138             cache[0] = utf8;
7139             cache[1] = byte;
7140         } else {
7141             cache[2] = utf8;
7142             cache[3] = byte;
7143         }
7144     } else {
7145 #define THREEWAY_SQUARE(a,b,c,d) \
7146             ((float)((d) - (c))) * ((float)((d) - (c))) \
7147             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7148                + ((float)((b) - (a))) * ((float)((b) - (a)))
7149
7150         /* Cache has 2 slots in use, and we know three potential pairs.
7151            Keep the two that give the lowest RMS distance. Do the
7152            calculation in bytes simply because we always know the byte
7153            length.  squareroot has the same ordering as the positive value,
7154            so don't bother with the actual square root.  */
7155         if (byte > cache[1]) {
7156             /* New position is after the existing pair of pairs.  */
7157             const float keep_earlier
7158                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7159             const float keep_later
7160                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7161
7162             if (keep_later < keep_earlier) {
7163                 cache[2] = cache[0];
7164                 cache[3] = cache[1];
7165                 cache[0] = utf8;
7166                 cache[1] = byte;
7167             }
7168             else {
7169                 cache[0] = utf8;
7170                 cache[1] = byte;
7171             }
7172         }
7173         else if (byte > cache[3]) {
7174             /* New position is between the existing pair of pairs.  */
7175             const float keep_earlier
7176                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7177             const float keep_later
7178                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7179
7180             if (keep_later < keep_earlier) {
7181                 cache[2] = utf8;
7182                 cache[3] = byte;
7183             }
7184             else {
7185                 cache[0] = utf8;
7186                 cache[1] = byte;
7187             }
7188         }
7189         else {
7190             /* New position is before the existing pair of pairs.  */
7191             const float keep_earlier
7192                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7193             const float keep_later
7194                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7195
7196             if (keep_later < keep_earlier) {
7197                 cache[2] = utf8;
7198                 cache[3] = byte;
7199             }
7200             else {
7201                 cache[0] = cache[2];
7202                 cache[1] = cache[3];
7203                 cache[2] = utf8;
7204                 cache[3] = byte;
7205             }
7206         }
7207     }
7208     ASSERT_UTF8_CACHE(cache);
7209 }
7210
7211 /* We already know all of the way, now we may be able to walk back.  The same
7212    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7213    backward is half the speed of walking forward. */
7214 static STRLEN
7215 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7216                     const U8 *end, STRLEN endu)
7217 {
7218     const STRLEN forw = target - s;
7219     STRLEN backw = end - target;
7220
7221     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7222
7223     if (forw < 2 * backw) {
7224         return utf8_length(s, target);
7225     }
7226
7227     while (end > target) {
7228         end--;
7229         while (UTF8_IS_CONTINUATION(*end)) {
7230             end--;
7231         }
7232         endu--;
7233     }
7234     return endu;
7235 }
7236
7237 /*
7238 =for apidoc sv_pos_b2u
7239
7240 Converts the value pointed to by offsetp from a count of bytes from the
7241 start of the string, to a count of the equivalent number of UTF-8 chars.
7242 Handles magic and type coercion.
7243
7244 =cut
7245 */
7246
7247 /*
7248  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7249  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7250  * byte offsets.
7251  *
7252  */
7253 void
7254 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7255 {
7256     const U8* s;
7257     const STRLEN byte = *offsetp;
7258     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7259     STRLEN blen;
7260     MAGIC* mg = NULL;
7261     const U8* send;
7262     bool found = FALSE;
7263
7264     PERL_ARGS_ASSERT_SV_POS_B2U;
7265
7266     if (!sv)
7267         return;
7268
7269     s = (const U8*)SvPV_const(sv, blen);
7270
7271     if (blen < byte)
7272         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7273                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7274
7275     send = s + byte;
7276
7277     if (!SvREADONLY(sv)
7278         && PL_utf8cache
7279         && SvTYPE(sv) >= SVt_PVMG
7280         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7281     {
7282         if (mg->mg_ptr) {
7283             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7284             if (cache[1] == byte) {
7285                 /* An exact match. */
7286                 *offsetp = cache[0];
7287                 return;
7288             }
7289             if (cache[3] == byte) {
7290                 /* An exact match. */
7291                 *offsetp = cache[2];
7292                 return;
7293             }
7294
7295             if (cache[1] < byte) {
7296                 /* We already know part of the way. */
7297                 if (mg->mg_len != -1) {
7298                     /* Actually, we know the end too.  */
7299                     len = cache[0]
7300                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7301                                               s + blen, mg->mg_len - cache[0]);
7302                 } else {
7303                     len = cache[0] + utf8_length(s + cache[1], send);
7304                 }
7305             }
7306             else if (cache[3] < byte) {
7307                 /* We're between the two cached pairs, so we do the calculation
7308                    offset by the byte/utf-8 positions for the earlier pair,
7309                    then add the utf-8 characters from the string start to
7310                    there.  */
7311                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7312                                           s + cache[1], cache[0] - cache[2])
7313                     + cache[2];
7314
7315             }
7316             else { /* cache[3] > byte */
7317                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7318                                           cache[2]);
7319
7320             }
7321             ASSERT_UTF8_CACHE(cache);
7322             found = TRUE;
7323         } else if (mg->mg_len != -1) {
7324             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7325             found = TRUE;
7326         }
7327     }
7328     if (!found || PL_utf8cache < 0) {
7329         const STRLEN real_len = utf8_length(s, send);
7330
7331         if (found && PL_utf8cache < 0)
7332             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7333         len = real_len;
7334     }
7335     *offsetp = len;
7336
7337     if (PL_utf8cache) {
7338         if (blen == byte)
7339             utf8_mg_len_cache_update(sv, &mg, len);
7340         else
7341             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7342     }
7343 }
7344
7345 static void
7346 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7347                              STRLEN real, SV *const sv)
7348 {
7349     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7350
7351     /* As this is debugging only code, save space by keeping this test here,
7352        rather than inlining it in all the callers.  */
7353     if (from_cache == real)
7354         return;
7355
7356     /* Need to turn the assertions off otherwise we may recurse infinitely
7357        while printing error messages.  */
7358     SAVEI8(PL_utf8cache);
7359     PL_utf8cache = 0;
7360     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7361                func, (UV) from_cache, (UV) real, SVfARG(sv));
7362 }
7363
7364 /*
7365 =for apidoc sv_eq
7366
7367 Returns a boolean indicating whether the strings in the two SVs are
7368 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7369 coerce its args to strings if necessary.
7370
7371 =for apidoc sv_eq_flags
7372
7373 Returns a boolean indicating whether the strings in the two SVs are
7374 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7375 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7376
7377 =cut
7378 */
7379
7380 I32
7381 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7382 {
7383     dVAR;
7384     const char *pv1;
7385     STRLEN cur1;
7386     const char *pv2;
7387     STRLEN cur2;
7388     I32  eq     = 0;
7389     SV* svrecode = NULL;
7390
7391     if (!sv1) {
7392         pv1 = "";
7393         cur1 = 0;
7394     }
7395     else {
7396         /* if pv1 and pv2 are the same, second SvPV_const call may
7397          * invalidate pv1 (if we are handling magic), so we may need to
7398          * make a copy */
7399         if (sv1 == sv2 && flags & SV_GMAGIC
7400          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7401             pv1 = SvPV_const(sv1, cur1);
7402             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7403         }
7404         pv1 = SvPV_flags_const(sv1, cur1, flags);
7405     }
7406
7407     if (!sv2){
7408         pv2 = "";
7409         cur2 = 0;
7410     }
7411     else
7412         pv2 = SvPV_flags_const(sv2, cur2, flags);
7413
7414     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7415         /* Differing utf8ness.
7416          * Do not UTF8size the comparands as a side-effect. */
7417          if (PL_encoding) {
7418               if (SvUTF8(sv1)) {
7419                    svrecode = newSVpvn(pv2, cur2);
7420                    sv_recode_to_utf8(svrecode, PL_encoding);
7421                    pv2 = SvPV_const(svrecode, cur2);
7422               }
7423               else {
7424                    svrecode = newSVpvn(pv1, cur1);
7425                    sv_recode_to_utf8(svrecode, PL_encoding);
7426                    pv1 = SvPV_const(svrecode, cur1);
7427               }
7428               /* Now both are in UTF-8. */
7429               if (cur1 != cur2) {
7430                    SvREFCNT_dec_NN(svrecode);
7431                    return FALSE;
7432               }
7433          }
7434          else {
7435               if (SvUTF8(sv1)) {
7436                   /* sv1 is the UTF-8 one  */
7437                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7438                                         (const U8*)pv1, cur1) == 0;
7439               }
7440               else {
7441                   /* sv2 is the UTF-8 one  */
7442                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7443                                         (const U8*)pv2, cur2) == 0;
7444               }
7445          }
7446     }
7447
7448     if (cur1 == cur2)
7449         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7450         
7451     SvREFCNT_dec(svrecode);
7452
7453     return eq;
7454 }
7455
7456 /*
7457 =for apidoc sv_cmp
7458
7459 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7460 string in C<sv1> is less than, equal to, or greater than the string in
7461 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7462 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7463
7464 =for apidoc sv_cmp_flags
7465
7466 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7467 string in C<sv1> is less than, equal to, or greater than the string in
7468 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7469 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7470 also C<sv_cmp_locale_flags>.
7471
7472 =cut
7473 */
7474
7475 I32
7476 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7477 {
7478     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7479 }
7480
7481 I32
7482 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7483                   const U32 flags)
7484 {
7485     dVAR;
7486     STRLEN cur1, cur2;
7487     const char *pv1, *pv2;
7488     I32  cmp;
7489     SV *svrecode = NULL;
7490
7491     if (!sv1) {
7492         pv1 = "";
7493         cur1 = 0;
7494     }
7495     else
7496         pv1 = SvPV_flags_const(sv1, cur1, flags);
7497
7498     if (!sv2) {
7499         pv2 = "";
7500         cur2 = 0;
7501     }
7502     else
7503         pv2 = SvPV_flags_const(sv2, cur2, flags);
7504
7505     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7506         /* Differing utf8ness.
7507          * Do not UTF8size the comparands as a side-effect. */
7508         if (SvUTF8(sv1)) {
7509             if (PL_encoding) {
7510                  svrecode = newSVpvn(pv2, cur2);
7511                  sv_recode_to_utf8(svrecode, PL_encoding);
7512                  pv2 = SvPV_const(svrecode, cur2);
7513             }
7514             else {
7515                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7516                                                    (const U8*)pv1, cur1);
7517                 return retval ? retval < 0 ? -1 : +1 : 0;
7518             }
7519         }
7520         else {
7521             if (PL_encoding) {
7522                  svrecode = newSVpvn(pv1, cur1);
7523                  sv_recode_to_utf8(svrecode, PL_encoding);
7524                  pv1 = SvPV_const(svrecode, cur1);
7525             }
7526             else {
7527                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7528                                                   (const U8*)pv2, cur2);
7529                 return retval ? retval < 0 ? -1 : +1 : 0;
7530             }
7531         }
7532     }
7533
7534     if (!cur1) {
7535         cmp = cur2 ? -1 : 0;
7536     } else if (!cur2) {
7537         cmp = 1;
7538     } else {
7539         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7540
7541         if (retval) {
7542             cmp = retval < 0 ? -1 : 1;
7543         } else if (cur1 == cur2) {
7544             cmp = 0;
7545         } else {
7546             cmp = cur1 < cur2 ? -1 : 1;
7547         }
7548     }
7549
7550     SvREFCNT_dec(svrecode);
7551
7552     return cmp;
7553 }
7554
7555 /*
7556 =for apidoc sv_cmp_locale
7557
7558 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7559 'use bytes' aware, handles get magic, and will coerce its args to strings
7560 if necessary.  See also C<sv_cmp>.
7561
7562 =for apidoc sv_cmp_locale_flags
7563
7564 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7565 'use bytes' aware and will coerce its args to strings if necessary.  If the
7566 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7567
7568 =cut
7569 */
7570
7571 I32
7572 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7573 {
7574     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7575 }
7576
7577 I32
7578 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7579                          const U32 flags)
7580 {
7581     dVAR;
7582 #ifdef USE_LOCALE_COLLATE
7583
7584     char *pv1, *pv2;
7585     STRLEN len1, len2;
7586     I32 retval;
7587
7588     if (PL_collation_standard)
7589         goto raw_compare;
7590
7591     len1 = 0;
7592     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7593     len2 = 0;
7594     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7595
7596     if (!pv1 || !len1) {
7597         if (pv2 && len2)
7598             return -1;
7599         else
7600             goto raw_compare;
7601     }
7602     else {
7603         if (!pv2 || !len2)
7604             return 1;
7605     }
7606
7607     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7608
7609     if (retval)
7610         return retval < 0 ? -1 : 1;
7611
7612     /*
7613      * When the result of collation is equality, that doesn't mean
7614      * that there are no differences -- some locales exclude some
7615      * characters from consideration.  So to avoid false equalities,
7616      * we use the raw string as a tiebreaker.
7617      */
7618
7619   raw_compare:
7620     /*FALLTHROUGH*/
7621
7622 #endif /* USE_LOCALE_COLLATE */
7623
7624     return sv_cmp(sv1, sv2);
7625 }
7626
7627
7628 #ifdef USE_LOCALE_COLLATE
7629
7630 /*
7631 =for apidoc sv_collxfrm
7632
7633 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7634 C<sv_collxfrm_flags>.
7635
7636 =for apidoc sv_collxfrm_flags
7637
7638 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7639 flags contain SV_GMAGIC, it handles get-magic.
7640
7641 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7642 scalar data of the variable, but transformed to such a format that a normal
7643 memory comparison can be used to compare the data according to the locale
7644 settings.
7645
7646 =cut
7647 */
7648
7649 char *
7650 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7651 {
7652     dVAR;
7653     MAGIC *mg;
7654
7655     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7656
7657     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7658     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7659         const char *s;
7660         char *xf;
7661         STRLEN len, xlen;
7662
7663         if (mg)
7664             Safefree(mg->mg_ptr);
7665         s = SvPV_flags_const(sv, len, flags);
7666         if ((xf = mem_collxfrm(s, len, &xlen))) {
7667             if (! mg) {
7668 #ifdef PERL_OLD_COPY_ON_WRITE
7669                 if (SvIsCOW(sv))
7670                     sv_force_normal_flags(sv, 0);
7671 #endif
7672                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7673                                  0, 0);
7674                 assert(mg);
7675             }
7676             mg->mg_ptr = xf;
7677             mg->mg_len = xlen;
7678         }
7679         else {
7680             if (mg) {
7681                 mg->mg_ptr = NULL;
7682                 mg->mg_len = -1;
7683             }
7684         }
7685     }
7686     if (mg && mg->mg_ptr) {
7687         *nxp = mg->mg_len;
7688         return mg->mg_ptr + sizeof(PL_collation_ix);
7689     }
7690     else {
7691         *nxp = 0;
7692         return NULL;
7693     }
7694 }
7695
7696 #endif /* USE_LOCALE_COLLATE */
7697
7698 static char *
7699 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7700 {
7701     SV * const tsv = newSV(0);
7702     ENTER;
7703     SAVEFREESV(tsv);
7704     sv_gets(tsv, fp, 0);
7705     sv_utf8_upgrade_nomg(tsv);
7706     SvCUR_set(sv,append);
7707     sv_catsv(sv,tsv);
7708     LEAVE;
7709     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7710 }
7711
7712 static char *
7713 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7714 {
7715     SSize_t bytesread;
7716     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7717       /* Grab the size of the record we're getting */
7718     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7719     
7720     /* Go yank in */
7721 #ifdef VMS
7722 #include <rms.h>
7723     int fd;
7724     Stat_t st;
7725
7726     /* With a true, record-oriented file on VMS, we need to use read directly
7727      * to ensure that we respect RMS record boundaries.  The user is responsible
7728      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7729      * record size) field.  N.B. This is likely to produce invalid results on
7730      * varying-width character data when a record ends mid-character.
7731      */
7732     fd = PerlIO_fileno(fp);
7733     if (fd != -1
7734         && PerlLIO_fstat(fd, &st) == 0
7735         && (st.st_fab_rfm == FAB$C_VAR
7736             || st.st_fab_rfm == FAB$C_VFC
7737             || st.st_fab_rfm == FAB$C_FIX)) {
7738
7739         bytesread = PerlLIO_read(fd, buffer, recsize);
7740     }
7741     else /* in-memory file from PerlIO::Scalar
7742           * or not a record-oriented file
7743           */
7744 #endif
7745     {
7746         bytesread = PerlIO_read(fp, buffer, recsize);
7747
7748         /* At this point, the logic in sv_get() means that sv will
7749            be treated as utf-8 if the handle is utf8.
7750         */
7751         if (PerlIO_isutf8(fp) && bytesread > 0) {
7752             char *bend = buffer + bytesread;
7753             char *bufp = buffer;
7754             size_t charcount = 0;
7755             bool charstart = TRUE;
7756             STRLEN skip = 0;
7757
7758             while (charcount < recsize) {
7759                 /* count accumulated characters */
7760                 while (bufp < bend) {
7761                     if (charstart) {
7762                         skip = UTF8SKIP(bufp);
7763                     }
7764                     if (bufp + skip > bend) {
7765                         /* partial at the end */
7766                         charstart = FALSE;
7767                         break;
7768                     }
7769                     else {
7770                         ++charcount;
7771                         bufp += skip;
7772                         charstart = TRUE;
7773                     }
7774                 }
7775
7776                 if (charcount < recsize) {
7777                     STRLEN readsize;
7778                     STRLEN bufp_offset = bufp - buffer;
7779                     SSize_t morebytesread;
7780
7781                     /* originally I read enough to fill any incomplete
7782                        character and the first byte of the next
7783                        character if needed, but if there's many
7784                        multi-byte encoded characters we're going to be
7785                        making a read call for every character beyond
7786                        the original read size.
7787
7788                        So instead, read the rest of the character if
7789                        any, and enough bytes to match at least the
7790                        start bytes for each character we're going to
7791                        read.
7792                     */
7793                     if (charstart)
7794                         readsize = recsize - charcount;
7795                     else 
7796                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7797                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7798                     bend = buffer + bytesread;
7799                     morebytesread = PerlIO_read(fp, bend, readsize);
7800                     if (morebytesread <= 0) {
7801                         /* we're done, if we still have incomplete
7802                            characters the check code in sv_gets() will
7803                            warn about them.
7804
7805                            I'd originally considered doing
7806                            PerlIO_ungetc() on all but the lead
7807                            character of the incomplete character, but
7808                            read() doesn't do that, so I don't.
7809                         */
7810                         break;
7811                     }
7812
7813                     /* prepare to scan some more */
7814                     bytesread += morebytesread;
7815                     bend = buffer + bytesread;
7816                     bufp = buffer + bufp_offset;
7817                 }
7818             }
7819         }
7820     }
7821
7822     if (bytesread < 0)
7823         bytesread = 0;
7824     SvCUR_set(sv, bytesread + append);
7825     buffer[bytesread] = '\0';
7826     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7827 }
7828
7829 /*
7830 =for apidoc sv_gets
7831
7832 Get a line from the filehandle and store it into the SV, optionally
7833 appending to the currently-stored string. If C<append> is not 0, the
7834 line is appended to the SV instead of overwriting it. C<append> should
7835 be set to the byte offset that the appended string should start at
7836 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7837
7838 =cut
7839 */
7840
7841 char *
7842 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7843 {
7844     dVAR;
7845     const char *rsptr;
7846     STRLEN rslen;
7847     STDCHAR rslast;
7848     STDCHAR *bp;
7849     I32 cnt;
7850     I32 i = 0;
7851     I32 rspara = 0;
7852
7853     PERL_ARGS_ASSERT_SV_GETS;
7854
7855     if (SvTHINKFIRST(sv))
7856         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7857     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7858        from <>.
7859        However, perlbench says it's slower, because the existing swipe code
7860        is faster than copy on write.
7861        Swings and roundabouts.  */
7862     SvUPGRADE(sv, SVt_PV);
7863
7864     if (append) {
7865         if (PerlIO_isutf8(fp)) {
7866             if (!SvUTF8(sv)) {
7867                 sv_utf8_upgrade_nomg(sv);
7868                 sv_pos_u2b(sv,&append,0);
7869             }
7870         } else if (SvUTF8(sv)) {
7871             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7872         }
7873     }
7874
7875     SvPOK_only(sv);
7876     if (!append) {
7877         SvCUR_set(sv,0);
7878     }
7879     if (PerlIO_isutf8(fp))
7880         SvUTF8_on(sv);
7881
7882     if (IN_PERL_COMPILETIME) {
7883         /* we always read code in line mode */
7884         rsptr = "\n";
7885         rslen = 1;
7886     }
7887     else if (RsSNARF(PL_rs)) {
7888         /* If it is a regular disk file use size from stat() as estimate
7889            of amount we are going to read -- may result in mallocing
7890            more memory than we really need if the layers below reduce
7891            the size we read (e.g. CRLF or a gzip layer).
7892          */
7893         Stat_t st;
7894         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7895             const Off_t offset = PerlIO_tell(fp);
7896             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7897                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7898             }
7899         }
7900         rsptr = NULL;
7901         rslen = 0;
7902     }
7903     else if (RsRECORD(PL_rs)) {
7904         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7905     }
7906     else if (RsPARA(PL_rs)) {
7907         rsptr = "\n\n";
7908         rslen = 2;
7909         rspara = 1;
7910     }
7911     else {
7912         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7913         if (PerlIO_isutf8(fp)) {
7914             rsptr = SvPVutf8(PL_rs, rslen);
7915         }
7916         else {
7917             if (SvUTF8(PL_rs)) {
7918                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7919                     Perl_croak(aTHX_ "Wide character in $/");
7920                 }
7921             }
7922             rsptr = SvPV_const(PL_rs, rslen);
7923         }
7924     }
7925
7926     rslast = rslen ? rsptr[rslen - 1] : '\0';
7927
7928     if (rspara) {               /* have to do this both before and after */
7929         do {                    /* to make sure file boundaries work right */
7930             if (PerlIO_eof(fp))
7931                 return 0;
7932             i = PerlIO_getc(fp);
7933             if (i != '\n') {
7934                 if (i == -1)
7935                     return 0;
7936                 PerlIO_ungetc(fp,i);
7937                 break;
7938             }
7939         } while (i != EOF);
7940     }
7941
7942     /* See if we know enough about I/O mechanism to cheat it ! */
7943
7944     /* This used to be #ifdef test - it is made run-time test for ease
7945        of abstracting out stdio interface. One call should be cheap
7946        enough here - and may even be a macro allowing compile
7947        time optimization.
7948      */
7949
7950     if (PerlIO_fast_gets(fp)) {
7951
7952     /*
7953      * We're going to steal some values from the stdio struct
7954      * and put EVERYTHING in the innermost loop into registers.
7955      */
7956     STDCHAR *ptr;
7957     STRLEN bpx;
7958     I32 shortbuffered;
7959
7960 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7961     /* An ungetc()d char is handled separately from the regular
7962      * buffer, so we getc() it back out and stuff it in the buffer.
7963      */
7964     i = PerlIO_getc(fp);
7965     if (i == EOF) return 0;
7966     *(--((*fp)->_ptr)) = (unsigned char) i;
7967     (*fp)->_cnt++;
7968 #endif
7969
7970     /* Here is some breathtakingly efficient cheating */
7971
7972     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7973     /* make sure we have the room */
7974     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7975         /* Not room for all of it
7976            if we are looking for a separator and room for some
7977          */
7978         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7979             /* just process what we have room for */
7980             shortbuffered = cnt - SvLEN(sv) + append + 1;
7981             cnt -= shortbuffered;
7982         }
7983         else {
7984             shortbuffered = 0;
7985             /* remember that cnt can be negative */
7986             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7987         }
7988     }
7989     else
7990         shortbuffered = 0;
7991     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7992     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7993     DEBUG_P(PerlIO_printf(Perl_debug_log,
7994         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7995     DEBUG_P(PerlIO_printf(Perl_debug_log,
7996         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7997                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7998                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7999     for (;;) {
8000       screamer:
8001         if (cnt > 0) {
8002             if (rslen) {
8003                 while (cnt > 0) {                    /* this     |  eat */
8004                     cnt--;
8005                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8006                         goto thats_all_folks;        /* screams  |  sed :-) */
8007                 }
8008             }
8009             else {
8010                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8011                 bp += cnt;                           /* screams  |  dust */
8012                 ptr += cnt;                          /* louder   |  sed :-) */
8013                 cnt = 0;
8014                 assert (!shortbuffered);
8015                 goto cannot_be_shortbuffered;
8016             }
8017         }
8018         
8019         if (shortbuffered) {            /* oh well, must extend */
8020             cnt = shortbuffered;
8021             shortbuffered = 0;
8022             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8023             SvCUR_set(sv, bpx);
8024             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8025             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8026             continue;
8027         }
8028
8029     cannot_be_shortbuffered:
8030         DEBUG_P(PerlIO_printf(Perl_debug_log,
8031                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
8032                               PTR2UV(ptr),(long)cnt));
8033         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8034
8035         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8036             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8037             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8038             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8039
8040         /* This used to call 'filbuf' in stdio form, but as that behaves like
8041            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8042            another abstraction.  */
8043         i   = PerlIO_getc(fp);          /* get more characters */
8044
8045         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8046             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8047             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8048             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8049
8050         cnt = PerlIO_get_cnt(fp);
8051         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8052         DEBUG_P(PerlIO_printf(Perl_debug_log,
8053             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8054
8055         if (i == EOF)                   /* all done for ever? */
8056             goto thats_really_all_folks;
8057
8058         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8059         SvCUR_set(sv, bpx);
8060         SvGROW(sv, bpx + cnt + 2);
8061         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8062
8063         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8064
8065         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8066             goto thats_all_folks;
8067     }
8068
8069 thats_all_folks:
8070     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8071           memNE((char*)bp - rslen, rsptr, rslen))
8072         goto screamer;                          /* go back to the fray */
8073 thats_really_all_folks:
8074     if (shortbuffered)
8075         cnt += shortbuffered;
8076         DEBUG_P(PerlIO_printf(Perl_debug_log,
8077             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8078     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8079     DEBUG_P(PerlIO_printf(Perl_debug_log,
8080         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8081         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8082         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8083     *bp = '\0';
8084     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8085     DEBUG_P(PerlIO_printf(Perl_debug_log,
8086         "Screamer: done, len=%ld, string=|%.*s|\n",
8087         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8088     }
8089    else
8090     {
8091        /*The big, slow, and stupid way. */
8092 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8093         STDCHAR *buf = NULL;
8094         Newx(buf, 8192, STDCHAR);
8095         assert(buf);
8096 #else
8097         STDCHAR buf[8192];
8098 #endif
8099
8100 screamer2:
8101         if (rslen) {
8102             const STDCHAR * const bpe = buf + sizeof(buf);
8103             bp = buf;
8104             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8105                 ; /* keep reading */
8106             cnt = bp - buf;
8107         }
8108         else {
8109             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8110             /* Accommodate broken VAXC compiler, which applies U8 cast to
8111              * both args of ?: operator, causing EOF to change into 255
8112              */
8113             if (cnt > 0)
8114                  i = (U8)buf[cnt - 1];
8115             else
8116                  i = EOF;
8117         }
8118
8119         if (cnt < 0)
8120             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8121         if (append)
8122             sv_catpvn_nomg(sv, (char *) buf, cnt);
8123         else
8124             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8125
8126         if (i != EOF &&                 /* joy */
8127             (!rslen ||
8128              SvCUR(sv) < rslen ||
8129              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8130         {
8131             append = -1;
8132             /*
8133              * If we're reading from a TTY and we get a short read,
8134              * indicating that the user hit his EOF character, we need
8135              * to notice it now, because if we try to read from the TTY
8136              * again, the EOF condition will disappear.
8137              *
8138              * The comparison of cnt to sizeof(buf) is an optimization
8139              * that prevents unnecessary calls to feof().
8140              *
8141              * - jik 9/25/96
8142              */
8143             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8144                 goto screamer2;
8145         }
8146
8147 #ifdef USE_HEAP_INSTEAD_OF_STACK
8148         Safefree(buf);
8149 #endif
8150     }
8151
8152     if (rspara) {               /* have to do this both before and after */
8153         while (i != EOF) {      /* to make sure file boundaries work right */
8154             i = PerlIO_getc(fp);
8155             if (i != '\n') {
8156                 PerlIO_ungetc(fp,i);
8157                 break;
8158             }
8159         }
8160     }
8161
8162     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8163 }
8164
8165 /*
8166 =for apidoc sv_inc
8167
8168 Auto-increment of the value in the SV, doing string to numeric conversion
8169 if necessary.  Handles 'get' magic and operator overloading.
8170
8171 =cut
8172 */
8173
8174 void
8175 Perl_sv_inc(pTHX_ SV *const sv)
8176 {
8177     if (!sv)
8178         return;
8179     SvGETMAGIC(sv);
8180     sv_inc_nomg(sv);
8181 }
8182
8183 /*
8184 =for apidoc sv_inc_nomg
8185
8186 Auto-increment of the value in the SV, doing string to numeric conversion
8187 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8188
8189 =cut
8190 */
8191
8192 void
8193 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8194 {
8195     dVAR;
8196     char *d;
8197     int flags;
8198
8199     if (!sv)
8200         return;
8201     if (SvTHINKFIRST(sv)) {
8202         if (SvIsCOW(sv) || isGV_with_GP(sv))
8203             sv_force_normal_flags(sv, 0);
8204         if (SvREADONLY(sv)) {
8205             if (IN_PERL_RUNTIME)
8206                 Perl_croak_no_modify();
8207         }
8208         if (SvROK(sv)) {
8209             IV i;
8210             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8211                 return;
8212             i = PTR2IV(SvRV(sv));
8213             sv_unref(sv);
8214             sv_setiv(sv, i);
8215         }
8216     }
8217     flags = SvFLAGS(sv);
8218     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8219         /* It's (privately or publicly) a float, but not tested as an
8220            integer, so test it to see. */
8221         (void) SvIV(sv);
8222         flags = SvFLAGS(sv);
8223     }
8224     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8225         /* It's publicly an integer, or privately an integer-not-float */
8226 #ifdef PERL_PRESERVE_IVUV
8227       oops_its_int:
8228 #endif
8229         if (SvIsUV(sv)) {
8230             if (SvUVX(sv) == UV_MAX)
8231                 sv_setnv(sv, UV_MAX_P1);
8232             else
8233                 (void)SvIOK_only_UV(sv);
8234                 SvUV_set(sv, SvUVX(sv) + 1);
8235         } else {
8236             if (SvIVX(sv) == IV_MAX)
8237                 sv_setuv(sv, (UV)IV_MAX + 1);
8238             else {
8239                 (void)SvIOK_only(sv);
8240                 SvIV_set(sv, SvIVX(sv) + 1);
8241             }   
8242         }
8243         return;
8244     }
8245     if (flags & SVp_NOK) {
8246         const NV was = SvNVX(sv);
8247         if (NV_OVERFLOWS_INTEGERS_AT &&
8248             was >= NV_OVERFLOWS_INTEGERS_AT) {
8249             /* diag_listed_as: Lost precision when %s %f by 1 */
8250             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8251                            "Lost precision when incrementing %" NVff " by 1",
8252                            was);
8253         }
8254         (void)SvNOK_only(sv);
8255         SvNV_set(sv, was + 1.0);
8256         return;
8257     }
8258
8259     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8260         if ((flags & SVTYPEMASK) < SVt_PVIV)
8261             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8262         (void)SvIOK_only(sv);
8263         SvIV_set(sv, 1);
8264         return;
8265     }
8266     d = SvPVX(sv);
8267     while (isALPHA(*d)) d++;
8268     while (isDIGIT(*d)) d++;
8269     if (d < SvEND(sv)) {
8270 #ifdef PERL_PRESERVE_IVUV
8271         /* Got to punt this as an integer if needs be, but we don't issue
8272            warnings. Probably ought to make the sv_iv_please() that does
8273            the conversion if possible, and silently.  */
8274         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8275         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8276             /* Need to try really hard to see if it's an integer.
8277                9.22337203685478e+18 is an integer.
8278                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8279                so $a="9.22337203685478e+18"; $a+0; $a++
8280                needs to be the same as $a="9.22337203685478e+18"; $a++
8281                or we go insane. */
8282         
8283             (void) sv_2iv(sv);
8284             if (SvIOK(sv))
8285                 goto oops_its_int;
8286
8287             /* sv_2iv *should* have made this an NV */
8288             if (flags & SVp_NOK) {
8289                 (void)SvNOK_only(sv);
8290                 SvNV_set(sv, SvNVX(sv) + 1.0);
8291                 return;
8292             }
8293             /* I don't think we can get here. Maybe I should assert this
8294                And if we do get here I suspect that sv_setnv will croak. NWC
8295                Fall through. */
8296 #if defined(USE_LONG_DOUBLE)
8297             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",
8298                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8299 #else
8300             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8301                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8302 #endif
8303         }
8304 #endif /* PERL_PRESERVE_IVUV */
8305         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8306         return;
8307     }
8308     d--;
8309     while (d >= SvPVX_const(sv)) {
8310         if (isDIGIT(*d)) {
8311             if (++*d <= '9')
8312                 return;
8313             *(d--) = '0';
8314         }
8315         else {
8316 #ifdef EBCDIC
8317             /* MKS: The original code here died if letters weren't consecutive.
8318              * at least it didn't have to worry about non-C locales.  The
8319              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8320              * arranged in order (although not consecutively) and that only
8321              * [A-Za-z] are accepted by isALPHA in the C locale.
8322              */
8323             if (*d != 'z' && *d != 'Z') {
8324                 do { ++*d; } while (!isALPHA(*d));
8325                 return;
8326             }
8327             *(d--) -= 'z' - 'a';
8328 #else
8329             ++*d;
8330             if (isALPHA(*d))
8331                 return;
8332             *(d--) -= 'z' - 'a' + 1;
8333 #endif
8334         }
8335     }
8336     /* oh,oh, the number grew */
8337     SvGROW(sv, SvCUR(sv) + 2);
8338     SvCUR_set(sv, SvCUR(sv) + 1);
8339     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8340         *d = d[-1];
8341     if (isDIGIT(d[1]))
8342         *d = '1';
8343     else
8344         *d = d[1];
8345 }
8346
8347 /*
8348 =for apidoc sv_dec
8349
8350 Auto-decrement of the value in the SV, doing string to numeric conversion
8351 if necessary.  Handles 'get' magic and operator overloading.
8352
8353 =cut
8354 */
8355
8356 void
8357 Perl_sv_dec(pTHX_ SV *const sv)
8358 {
8359     dVAR;
8360     if (!sv)
8361         return;
8362     SvGETMAGIC(sv);
8363     sv_dec_nomg(sv);
8364 }
8365
8366 /*
8367 =for apidoc sv_dec_nomg
8368
8369 Auto-decrement of the value in the SV, doing string to numeric conversion
8370 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8371
8372 =cut
8373 */
8374
8375 void
8376 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8377 {
8378     dVAR;
8379     int flags;
8380
8381     if (!sv)
8382         return;
8383     if (SvTHINKFIRST(sv)) {
8384         if (SvIsCOW(sv) || isGV_with_GP(sv))
8385             sv_force_normal_flags(sv, 0);
8386         if (SvREADONLY(sv)) {
8387             if (IN_PERL_RUNTIME)
8388                 Perl_croak_no_modify();
8389         }
8390         if (SvROK(sv)) {
8391             IV i;
8392             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8393                 return;
8394             i = PTR2IV(SvRV(sv));
8395             sv_unref(sv);
8396             sv_setiv(sv, i);
8397         }
8398     }
8399     /* Unlike sv_inc we don't have to worry about string-never-numbers
8400        and keeping them magic. But we mustn't warn on punting */
8401     flags = SvFLAGS(sv);
8402     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8403         /* It's publicly an integer, or privately an integer-not-float */
8404 #ifdef PERL_PRESERVE_IVUV
8405       oops_its_int:
8406 #endif
8407         if (SvIsUV(sv)) {
8408             if (SvUVX(sv) == 0) {
8409                 (void)SvIOK_only(sv);
8410                 SvIV_set(sv, -1);
8411             }
8412             else {
8413                 (void)SvIOK_only_UV(sv);
8414                 SvUV_set(sv, SvUVX(sv) - 1);
8415             }   
8416         } else {
8417             if (SvIVX(sv) == IV_MIN) {
8418                 sv_setnv(sv, (NV)IV_MIN);
8419                 goto oops_its_num;
8420             }
8421             else {
8422                 (void)SvIOK_only(sv);
8423                 SvIV_set(sv, SvIVX(sv) - 1);
8424             }   
8425         }
8426         return;
8427     }
8428     if (flags & SVp_NOK) {
8429     oops_its_num:
8430         {
8431             const NV was = SvNVX(sv);
8432             if (NV_OVERFLOWS_INTEGERS_AT &&
8433                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8434                 /* diag_listed_as: Lost precision when %s %f by 1 */
8435                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8436                                "Lost precision when decrementing %" NVff " by 1",
8437                                was);
8438             }
8439             (void)SvNOK_only(sv);
8440             SvNV_set(sv, was - 1.0);
8441             return;
8442         }
8443     }
8444     if (!(flags & SVp_POK)) {
8445         if ((flags & SVTYPEMASK) < SVt_PVIV)
8446             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8447         SvIV_set(sv, -1);
8448         (void)SvIOK_only(sv);
8449         return;
8450     }
8451 #ifdef PERL_PRESERVE_IVUV
8452     {
8453         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8454         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8455             /* Need to try really hard to see if it's an integer.
8456                9.22337203685478e+18 is an integer.
8457                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8458                so $a="9.22337203685478e+18"; $a+0; $a--
8459                needs to be the same as $a="9.22337203685478e+18"; $a--
8460                or we go insane. */
8461         
8462             (void) sv_2iv(sv);
8463             if (SvIOK(sv))
8464                 goto oops_its_int;
8465
8466             /* sv_2iv *should* have made this an NV */
8467             if (flags & SVp_NOK) {
8468                 (void)SvNOK_only(sv);
8469                 SvNV_set(sv, SvNVX(sv) - 1.0);
8470                 return;
8471             }
8472             /* I don't think we can get here. Maybe I should assert this
8473                And if we do get here I suspect that sv_setnv will croak. NWC
8474                Fall through. */
8475 #if defined(USE_LONG_DOUBLE)
8476             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",
8477                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8478 #else
8479             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8480                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8481 #endif
8482         }
8483     }
8484 #endif /* PERL_PRESERVE_IVUV */
8485     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8486 }
8487
8488 /* this define is used to eliminate a chunk of duplicated but shared logic
8489  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8490  * used anywhere but here - yves
8491  */
8492 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8493     STMT_START {      \
8494         EXTEND_MORTAL(1); \
8495         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8496     } STMT_END
8497
8498 /*
8499 =for apidoc sv_mortalcopy
8500
8501 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8502 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8503 explicit call to FREETMPS, or by an implicit call at places such as
8504 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8505
8506 =cut
8507 */
8508
8509 /* Make a string that will exist for the duration of the expression
8510  * evaluation.  Actually, it may have to last longer than that, but
8511  * hopefully we won't free it until it has been assigned to a
8512  * permanent location. */
8513
8514 SV *
8515 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8516 {
8517     dVAR;
8518     SV *sv;
8519
8520     if (flags & SV_GMAGIC)
8521         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8522     new_SV(sv);
8523     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8524     PUSH_EXTEND_MORTAL__SV_C(sv);
8525     SvTEMP_on(sv);
8526     return sv;
8527 }
8528
8529 /*
8530 =for apidoc sv_newmortal
8531
8532 Creates a new null SV which is mortal.  The reference count of the SV is
8533 set to 1.  It will be destroyed "soon", either by an explicit call to
8534 FREETMPS, or by an implicit call at places such as statement boundaries.
8535 See also C<sv_mortalcopy> and C<sv_2mortal>.
8536
8537 =cut
8538 */
8539
8540 SV *
8541 Perl_sv_newmortal(pTHX)
8542 {
8543     dVAR;
8544     SV *sv;
8545
8546     new_SV(sv);
8547     SvFLAGS(sv) = SVs_TEMP;
8548     PUSH_EXTEND_MORTAL__SV_C(sv);
8549     return sv;
8550 }
8551
8552
8553 /*
8554 =for apidoc newSVpvn_flags
8555
8556 Creates a new SV and copies a string into it.  The reference count for the
8557 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8558 string.  You are responsible for ensuring that the source string is at least
8559 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8560 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8561 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8562 returning.  If C<SVf_UTF8> is set, C<s>
8563 is considered to be in UTF-8 and the
8564 C<SVf_UTF8> flag will be set on the new SV.
8565 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8566
8567     #define newSVpvn_utf8(s, len, u)                    \
8568         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8569
8570 =cut
8571 */
8572
8573 SV *
8574 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8575 {
8576     dVAR;
8577     SV *sv;
8578
8579     /* All the flags we don't support must be zero.
8580        And we're new code so I'm going to assert this from the start.  */
8581     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8582     new_SV(sv);
8583     sv_setpvn(sv,s,len);
8584
8585     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8586      * and do what it does ourselves here.
8587      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8588      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8589      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8590      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8591      */
8592
8593     SvFLAGS(sv) |= flags;
8594
8595     if(flags & SVs_TEMP){
8596         PUSH_EXTEND_MORTAL__SV_C(sv);
8597     }
8598
8599     return sv;
8600 }
8601
8602 /*
8603 =for apidoc sv_2mortal
8604
8605 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8606 by an explicit call to FREETMPS, or by an implicit call at places such as
8607 statement boundaries.  SvTEMP() is turned on which means that the SV's
8608 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8609 and C<sv_mortalcopy>.
8610
8611 =cut
8612 */
8613
8614 SV *
8615 Perl_sv_2mortal(pTHX_ SV *const sv)
8616 {
8617     dVAR;
8618     if (!sv)
8619         return NULL;
8620     if (SvIMMORTAL(sv))
8621         return sv;
8622     PUSH_EXTEND_MORTAL__SV_C(sv);
8623     SvTEMP_on(sv);
8624     return sv;
8625 }
8626
8627 /*
8628 =for apidoc newSVpv
8629
8630 Creates a new SV and copies a string into it.  The reference count for the
8631 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8632 strlen().  For efficiency, consider using C<newSVpvn> instead.
8633
8634 =cut
8635 */
8636
8637 SV *
8638 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8639 {
8640     dVAR;
8641     SV *sv;
8642
8643     new_SV(sv);
8644     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8645     return sv;
8646 }
8647
8648 /*
8649 =for apidoc newSVpvn
8650
8651 Creates a new SV and copies a buffer into it, which may contain NUL characters
8652 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8653 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8654 are responsible for ensuring that the source buffer is at least
8655 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8656 undefined.
8657
8658 =cut
8659 */
8660
8661 SV *
8662 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8663 {
8664     dVAR;
8665     SV *sv;
8666
8667     new_SV(sv);
8668     sv_setpvn(sv,buffer,len);
8669     return sv;
8670 }
8671
8672 /*
8673 =for apidoc newSVhek
8674
8675 Creates a new SV from the hash key structure.  It will generate scalars that
8676 point to the shared string table where possible.  Returns a new (undefined)
8677 SV if the hek is NULL.
8678
8679 =cut
8680 */
8681
8682 SV *
8683 Perl_newSVhek(pTHX_ const HEK *const hek)
8684 {
8685     dVAR;
8686     if (!hek) {
8687         SV *sv;
8688
8689         new_SV(sv);
8690         return sv;
8691     }
8692
8693     if (HEK_LEN(hek) == HEf_SVKEY) {
8694         return newSVsv(*(SV**)HEK_KEY(hek));
8695     } else {
8696         const int flags = HEK_FLAGS(hek);
8697         if (flags & HVhek_WASUTF8) {
8698             /* Trouble :-)
8699                Andreas would like keys he put in as utf8 to come back as utf8
8700             */
8701             STRLEN utf8_len = HEK_LEN(hek);
8702             SV * const sv = newSV_type(SVt_PV);
8703             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8704             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8705             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8706             SvUTF8_on (sv);
8707             return sv;
8708         } else if (flags & HVhek_UNSHARED) {
8709             /* A hash that isn't using shared hash keys has to have
8710                the flag in every key so that we know not to try to call
8711                share_hek_hek on it.  */
8712
8713             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8714             if (HEK_UTF8(hek))
8715                 SvUTF8_on (sv);
8716             return sv;
8717         }
8718         /* This will be overwhelminly the most common case.  */
8719         {
8720             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8721                more efficient than sharepvn().  */
8722             SV *sv;
8723
8724             new_SV(sv);
8725             sv_upgrade(sv, SVt_PV);
8726             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8727             SvCUR_set(sv, HEK_LEN(hek));
8728             SvLEN_set(sv, 0);
8729             SvIsCOW_on(sv);
8730             SvPOK_on(sv);
8731             if (HEK_UTF8(hek))
8732                 SvUTF8_on(sv);
8733             return sv;
8734         }
8735     }
8736 }
8737
8738 /*
8739 =for apidoc newSVpvn_share
8740
8741 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8742 table.  If the string does not already exist in the table, it is
8743 created first.  Turns on the SvIsCOW flag (or READONLY
8744 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8745 is non-zero, that value is used; otherwise the hash is computed.
8746 The string's hash can later be retrieved from the SV
8747 with the C<SvSHARED_HASH()> macro.  The idea here is
8748 that as the string table is used for shared hash keys these strings will have
8749 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8750
8751 =cut
8752 */
8753
8754 SV *
8755 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8756 {
8757     dVAR;
8758     SV *sv;
8759     bool is_utf8 = FALSE;
8760     const char *const orig_src = src;
8761
8762     if (len < 0) {
8763         STRLEN tmplen = -len;
8764         is_utf8 = TRUE;
8765         /* See the note in hv.c:hv_fetch() --jhi */
8766         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8767         len = tmplen;
8768     }
8769     if (!hash)
8770         PERL_HASH(hash, src, len);
8771     new_SV(sv);
8772     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8773        changes here, update it there too.  */
8774     sv_upgrade(sv, SVt_PV);
8775     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8776     SvCUR_set(sv, len);
8777     SvLEN_set(sv, 0);
8778     SvIsCOW_on(sv);
8779     SvPOK_on(sv);
8780     if (is_utf8)
8781         SvUTF8_on(sv);
8782     if (src != orig_src)
8783         Safefree(src);
8784     return sv;
8785 }
8786
8787 /*
8788 =for apidoc newSVpv_share
8789
8790 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8791 string/length pair.
8792
8793 =cut
8794 */
8795
8796 SV *
8797 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8798 {
8799     return newSVpvn_share(src, strlen(src), hash);
8800 }
8801
8802 #if defined(PERL_IMPLICIT_CONTEXT)
8803
8804 /* pTHX_ magic can't cope with varargs, so this is a no-context
8805  * version of the main function, (which may itself be aliased to us).
8806  * Don't access this version directly.
8807  */
8808
8809 SV *
8810 Perl_newSVpvf_nocontext(const char *const pat, ...)
8811 {
8812     dTHX;
8813     SV *sv;
8814     va_list args;
8815
8816     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8817
8818     va_start(args, pat);
8819     sv = vnewSVpvf(pat, &args);
8820     va_end(args);
8821     return sv;
8822 }
8823 #endif
8824
8825 /*
8826 =for apidoc newSVpvf
8827
8828 Creates a new SV and initializes it with the string formatted like
8829 C<sprintf>.
8830
8831 =cut
8832 */
8833
8834 SV *
8835 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8836 {
8837     SV *sv;
8838     va_list args;
8839
8840     PERL_ARGS_ASSERT_NEWSVPVF;
8841
8842     va_start(args, pat);
8843     sv = vnewSVpvf(pat, &args);
8844     va_end(args);
8845     return sv;
8846 }
8847
8848 /* backend for newSVpvf() and newSVpvf_nocontext() */
8849
8850 SV *
8851 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8852 {
8853     dVAR;
8854     SV *sv;
8855
8856     PERL_ARGS_ASSERT_VNEWSVPVF;
8857
8858     new_SV(sv);
8859     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8860     return sv;
8861 }
8862
8863 /*
8864 =for apidoc newSVnv
8865
8866 Creates a new SV and copies a floating point value into it.
8867 The reference count for the SV is set to 1.
8868
8869 =cut
8870 */
8871
8872 SV *
8873 Perl_newSVnv(pTHX_ const NV n)
8874 {
8875     dVAR;
8876     SV *sv;
8877
8878     new_SV(sv);
8879     sv_setnv(sv,n);
8880     return sv;
8881 }
8882
8883 /*
8884 =for apidoc newSViv
8885
8886 Creates a new SV and copies an integer into it.  The reference count for the
8887 SV is set to 1.
8888
8889 =cut
8890 */
8891
8892 SV *
8893 Perl_newSViv(pTHX_ const IV i)
8894 {
8895     dVAR;
8896     SV *sv;
8897
8898     new_SV(sv);
8899     sv_setiv(sv,i);
8900     return sv;
8901 }
8902
8903 /*
8904 =for apidoc newSVuv
8905
8906 Creates a new SV and copies an unsigned integer into it.
8907 The reference count for the SV is set to 1.
8908
8909 =cut
8910 */
8911
8912 SV *
8913 Perl_newSVuv(pTHX_ const UV u)
8914 {
8915     dVAR;
8916     SV *sv;
8917
8918     new_SV(sv);
8919     sv_setuv(sv,u);
8920     return sv;
8921 }
8922
8923 /*
8924 =for apidoc newSV_type
8925
8926 Creates a new SV, of the type specified.  The reference count for the new SV
8927 is set to 1.
8928
8929 =cut
8930 */
8931
8932 SV *
8933 Perl_newSV_type(pTHX_ const svtype type)
8934 {
8935     SV *sv;
8936
8937     new_SV(sv);
8938     sv_upgrade(sv, type);
8939     return sv;
8940 }
8941
8942 /*
8943 =for apidoc newRV_noinc
8944
8945 Creates an RV wrapper for an SV.  The reference count for the original
8946 SV is B<not> incremented.
8947
8948 =cut
8949 */
8950
8951 SV *
8952 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8953 {
8954     dVAR;
8955     SV *sv = newSV_type(SVt_IV);
8956
8957     PERL_ARGS_ASSERT_NEWRV_NOINC;
8958
8959     SvTEMP_off(tmpRef);
8960     SvRV_set(sv, tmpRef);
8961     SvROK_on(sv);
8962     return sv;
8963 }
8964
8965 /* newRV_inc is the official function name to use now.
8966  * newRV_inc is in fact #defined to newRV in sv.h
8967  */
8968
8969 SV *
8970 Perl_newRV(pTHX_ SV *const sv)
8971 {
8972     dVAR;
8973
8974     PERL_ARGS_ASSERT_NEWRV;
8975
8976     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8977 }
8978
8979 /*
8980 =for apidoc newSVsv
8981
8982 Creates a new SV which is an exact duplicate of the original SV.
8983 (Uses C<sv_setsv>.)
8984
8985 =cut
8986 */
8987
8988 SV *
8989 Perl_newSVsv(pTHX_ SV *const old)
8990 {
8991     dVAR;
8992     SV *sv;
8993
8994     if (!old)
8995         return NULL;
8996     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8997         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8998         return NULL;
8999     }
9000     /* Do this here, otherwise we leak the new SV if this croaks. */
9001     SvGETMAGIC(old);
9002     new_SV(sv);
9003     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9004        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9005     sv_setsv_flags(sv, old, SV_NOSTEAL);
9006     return sv;
9007 }
9008
9009 /*
9010 =for apidoc sv_reset
9011
9012 Underlying implementation for the C<reset> Perl function.
9013 Note that the perl-level function is vaguely deprecated.
9014
9015 =cut
9016 */
9017
9018 void
9019 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9020 {
9021     PERL_ARGS_ASSERT_SV_RESET;
9022
9023     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9024 }
9025
9026 void
9027 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9028 {
9029     dVAR;
9030     char todo[PERL_UCHAR_MAX+1];
9031     const char *send;
9032
9033     if (!stash || SvTYPE(stash) != SVt_PVHV)
9034         return;
9035
9036     if (!s) {           /* reset ?? searches */
9037         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9038         if (mg) {
9039             const U32 count = mg->mg_len / sizeof(PMOP**);
9040             PMOP **pmp = (PMOP**) mg->mg_ptr;
9041             PMOP *const *const end = pmp + count;
9042
9043             while (pmp < end) {
9044 #ifdef USE_ITHREADS
9045                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9046 #else
9047                 (*pmp)->op_pmflags &= ~PMf_USED;
9048 #endif
9049                 ++pmp;
9050             }
9051         }
9052         return;
9053     }
9054
9055     /* reset variables */
9056
9057     if (!HvARRAY(stash))
9058         return;
9059
9060     Zero(todo, 256, char);
9061     send = s + len;
9062     while (s < send) {
9063         I32 max;
9064         I32 i = (unsigned char)*s;
9065         if (s[1] == '-') {
9066             s += 2;
9067         }
9068         max = (unsigned char)*s++;
9069         for ( ; i <= max; i++) {
9070             todo[i] = 1;
9071         }
9072         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9073             HE *entry;
9074             for (entry = HvARRAY(stash)[i];
9075                  entry;
9076                  entry = HeNEXT(entry))
9077             {
9078                 GV *gv;
9079                 SV *sv;
9080
9081                 if (!todo[(U8)*HeKEY(entry)])
9082                     continue;
9083                 gv = MUTABLE_GV(HeVAL(entry));
9084                 sv = GvSV(gv);
9085                 if (sv) {
9086                     if (SvTHINKFIRST(sv)) {
9087                         if (!SvREADONLY(sv) && SvROK(sv))
9088                             sv_unref(sv);
9089                         /* XXX Is this continue a bug? Why should THINKFIRST
9090                            exempt us from resetting arrays and hashes?  */
9091                         continue;
9092                     }
9093                     SvOK_off(sv);
9094                     if (SvTYPE(sv) >= SVt_PV) {
9095                         SvCUR_set(sv, 0);
9096                         if (SvPVX_const(sv) != NULL)
9097                             *SvPVX(sv) = '\0';
9098                         SvTAINT(sv);
9099                     }
9100                 }
9101                 if (GvAV(gv)) {
9102                     av_clear(GvAV(gv));
9103                 }
9104                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9105 #if defined(VMS)
9106                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9107 #else /* ! VMS */
9108                     hv_clear(GvHV(gv));
9109 #  if defined(USE_ENVIRON_ARRAY)
9110                     if (gv == PL_envgv)
9111                         my_clearenv();
9112 #  endif /* USE_ENVIRON_ARRAY */
9113 #endif /* VMS */
9114                 }
9115             }
9116         }
9117     }
9118 }
9119
9120 /*
9121 =for apidoc sv_2io
9122
9123 Using various gambits, try to get an IO from an SV: the IO slot if its a
9124 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9125 named after the PV if we're a string.
9126
9127 'Get' magic is ignored on the sv passed in, but will be called on
9128 C<SvRV(sv)> if sv is an RV.
9129
9130 =cut
9131 */
9132
9133 IO*
9134 Perl_sv_2io(pTHX_ SV *const sv)
9135 {
9136     IO* io;
9137     GV* gv;
9138
9139     PERL_ARGS_ASSERT_SV_2IO;
9140
9141     switch (SvTYPE(sv)) {
9142     case SVt_PVIO:
9143         io = MUTABLE_IO(sv);
9144         break;
9145     case SVt_PVGV:
9146     case SVt_PVLV:
9147         if (isGV_with_GP(sv)) {
9148             gv = MUTABLE_GV(sv);
9149             io = GvIO(gv);
9150             if (!io)
9151                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9152                                     HEKfARG(GvNAME_HEK(gv)));
9153             break;
9154         }
9155         /* FALL THROUGH */
9156     default:
9157         if (!SvOK(sv))
9158             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9159         if (SvROK(sv)) {
9160             SvGETMAGIC(SvRV(sv));
9161             return sv_2io(SvRV(sv));
9162         }
9163         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9164         if (gv)
9165             io = GvIO(gv);
9166         else
9167             io = 0;
9168         if (!io) {
9169             SV *newsv = sv;
9170             if (SvGMAGICAL(sv)) {
9171                 newsv = sv_newmortal();
9172                 sv_setsv_nomg(newsv, sv);
9173             }
9174             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9175         }
9176         break;
9177     }
9178     return io;
9179 }
9180
9181 /*
9182 =for apidoc sv_2cv
9183
9184 Using various gambits, try to get a CV from an SV; in addition, try if
9185 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9186 The flags in C<lref> are passed to gv_fetchsv.
9187
9188 =cut
9189 */
9190
9191 CV *
9192 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9193 {
9194     dVAR;
9195     GV *gv = NULL;
9196     CV *cv = NULL;
9197
9198     PERL_ARGS_ASSERT_SV_2CV;
9199
9200     if (!sv) {
9201         *st = NULL;
9202         *gvp = NULL;
9203         return NULL;
9204     }
9205     switch (SvTYPE(sv)) {
9206     case SVt_PVCV:
9207         *st = CvSTASH(sv);
9208         *gvp = NULL;
9209         return MUTABLE_CV(sv);
9210     case SVt_PVHV:
9211     case SVt_PVAV:
9212         *st = NULL;
9213         *gvp = NULL;
9214         return NULL;
9215     default:
9216         SvGETMAGIC(sv);
9217         if (SvROK(sv)) {
9218             if (SvAMAGIC(sv))
9219                 sv = amagic_deref_call(sv, to_cv_amg);
9220
9221             sv = SvRV(sv);
9222             if (SvTYPE(sv) == SVt_PVCV) {
9223                 cv = MUTABLE_CV(sv);
9224                 *gvp = NULL;
9225                 *st = CvSTASH(cv);
9226                 return cv;
9227             }
9228             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9229                 gv = MUTABLE_GV(sv);
9230             else
9231                 Perl_croak(aTHX_ "Not a subroutine reference");
9232         }
9233         else if (isGV_with_GP(sv)) {
9234             gv = MUTABLE_GV(sv);
9235         }
9236         else {
9237             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9238         }
9239         *gvp = gv;
9240         if (!gv) {
9241             *st = NULL;
9242             return NULL;
9243         }
9244         /* Some flags to gv_fetchsv mean don't really create the GV  */
9245         if (!isGV_with_GP(gv)) {
9246             *st = NULL;
9247             return NULL;
9248         }
9249         *st = GvESTASH(gv);
9250         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9251             /* XXX this is probably not what they think they're getting.
9252              * It has the same effect as "sub name;", i.e. just a forward
9253              * declaration! */
9254             newSTUB(gv,0);
9255         }
9256         return GvCVu(gv);
9257     }
9258 }
9259
9260 /*
9261 =for apidoc sv_true
9262
9263 Returns true if the SV has a true value by Perl's rules.
9264 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9265 instead use an in-line version.
9266
9267 =cut
9268 */
9269
9270 I32
9271 Perl_sv_true(pTHX_ SV *const sv)
9272 {
9273     if (!sv)
9274         return 0;
9275     if (SvPOK(sv)) {
9276         const XPV* const tXpv = (XPV*)SvANY(sv);
9277         if (tXpv &&
9278                 (tXpv->xpv_cur > 1 ||
9279                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9280             return 1;
9281         else
9282             return 0;
9283     }
9284     else {
9285         if (SvIOK(sv))
9286             return SvIVX(sv) != 0;
9287         else {
9288             if (SvNOK(sv))
9289                 return SvNVX(sv) != 0.0;
9290             else
9291                 return sv_2bool(sv);
9292         }
9293     }
9294 }
9295
9296 /*
9297 =for apidoc sv_pvn_force
9298
9299 Get a sensible string out of the SV somehow.
9300 A private implementation of the C<SvPV_force> macro for compilers which
9301 can't cope with complex macro expressions.  Always use the macro instead.
9302
9303 =for apidoc sv_pvn_force_flags
9304
9305 Get a sensible string out of the SV somehow.
9306 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9307 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9308 implemented in terms of this function.
9309 You normally want to use the various wrapper macros instead: see
9310 C<SvPV_force> and C<SvPV_force_nomg>
9311
9312 =cut
9313 */
9314
9315 char *
9316 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9317 {
9318     dVAR;
9319
9320     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9321
9322     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9323     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9324         sv_force_normal_flags(sv, 0);
9325
9326     if (SvPOK(sv)) {
9327         if (lp)
9328             *lp = SvCUR(sv);
9329     }
9330     else {
9331         char *s;
9332         STRLEN len;
9333  
9334         if (SvTYPE(sv) > SVt_PVLV
9335             || isGV_with_GP(sv))
9336             /* diag_listed_as: Can't coerce %s to %s in %s */
9337             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9338                 OP_DESC(PL_op));
9339         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9340         if (!s) {
9341           s = (char *)"";
9342         }
9343         if (lp)
9344             *lp = len;
9345
9346         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9347             if (SvROK(sv))
9348                 sv_unref(sv);
9349             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9350             SvGROW(sv, len + 1);
9351             Move(s,SvPVX(sv),len,char);
9352             SvCUR_set(sv, len);
9353             SvPVX(sv)[len] = '\0';
9354         }
9355         if (!SvPOK(sv)) {
9356             SvPOK_on(sv);               /* validate pointer */
9357             SvTAINT(sv);
9358             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9359                                   PTR2UV(sv),SvPVX_const(sv)));
9360         }
9361     }
9362     (void)SvPOK_only_UTF8(sv);
9363     return SvPVX_mutable(sv);
9364 }
9365
9366 /*
9367 =for apidoc sv_pvbyten_force
9368
9369 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9370 instead.
9371
9372 =cut
9373 */
9374
9375 char *
9376 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9377 {
9378     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9379
9380     sv_pvn_force(sv,lp);
9381     sv_utf8_downgrade(sv,0);
9382     *lp = SvCUR(sv);
9383     return SvPVX(sv);
9384 }
9385
9386 /*
9387 =for apidoc sv_pvutf8n_force
9388
9389 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9390 instead.
9391
9392 =cut
9393 */
9394
9395 char *
9396 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9397 {
9398     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9399
9400     sv_pvn_force(sv,0);
9401     sv_utf8_upgrade_nomg(sv);
9402     *lp = SvCUR(sv);
9403     return SvPVX(sv);
9404 }
9405
9406 /*
9407 =for apidoc sv_reftype
9408
9409 Returns a string describing what the SV is a reference to.
9410
9411 =cut
9412 */
9413
9414 const char *
9415 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9416 {
9417     PERL_ARGS_ASSERT_SV_REFTYPE;
9418     if (ob && SvOBJECT(sv)) {
9419         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9420     }
9421     else {
9422         switch (SvTYPE(sv)) {
9423         case SVt_NULL:
9424         case SVt_IV:
9425         case SVt_NV:
9426         case SVt_PV:
9427         case SVt_PVIV:
9428         case SVt_PVNV:
9429         case SVt_PVMG:
9430                                 if (SvVOK(sv))
9431                                     return "VSTRING";
9432                                 if (SvROK(sv))
9433                                     return "REF";
9434                                 else
9435                                     return "SCALAR";
9436
9437         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9438                                 /* tied lvalues should appear to be
9439                                  * scalars for backwards compatibility */
9440                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9441                                     ? "SCALAR" : "LVALUE");
9442         case SVt_PVAV:          return "ARRAY";
9443         case SVt_PVHV:          return "HASH";
9444         case SVt_PVCV:          return "CODE";
9445         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9446                                     ? "GLOB" : "SCALAR");
9447         case SVt_PVFM:          return "FORMAT";
9448         case SVt_PVIO:          return "IO";
9449         case SVt_DUMMY:         return "DUMMY";
9450         case SVt_REGEXP:        return "REGEXP";
9451         default:                return "UNKNOWN";
9452         }
9453     }
9454 }
9455
9456 /*
9457 =for apidoc sv_ref
9458
9459 Returns a SV describing what the SV passed in is a reference to.
9460
9461 =cut
9462 */
9463
9464 SV *
9465 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9466 {
9467     PERL_ARGS_ASSERT_SV_REF;
9468
9469     if (!dst)
9470         dst = sv_newmortal();
9471
9472     if (ob && SvOBJECT(sv)) {
9473         HvNAME_get(SvSTASH(sv))
9474                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9475                     : sv_setpvn(dst, "__ANON__", 8);
9476     }
9477     else {
9478         const char * reftype = sv_reftype(sv, 0);
9479         sv_setpv(dst, reftype);
9480     }
9481     return dst;
9482 }
9483
9484 /*
9485 =for apidoc sv_isobject
9486
9487 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9488 object.  If the SV is not an RV, or if the object is not blessed, then this
9489 will return false.
9490
9491 =cut
9492 */
9493
9494 int
9495 Perl_sv_isobject(pTHX_ SV *sv)
9496 {
9497     if (!sv)
9498         return 0;
9499     SvGETMAGIC(sv);
9500     if (!SvROK(sv))
9501         return 0;
9502     sv = SvRV(sv);
9503     if (!SvOBJECT(sv))
9504         return 0;
9505     return 1;
9506 }
9507
9508 /*
9509 =for apidoc sv_isa
9510
9511 Returns a boolean indicating whether the SV is blessed into the specified
9512 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9513 an inheritance relationship.
9514
9515 =cut
9516 */
9517
9518 int
9519 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9520 {
9521     const char *hvname;
9522
9523     PERL_ARGS_ASSERT_SV_ISA;
9524
9525     if (!sv)
9526         return 0;
9527     SvGETMAGIC(sv);
9528     if (!SvROK(sv))
9529         return 0;
9530     sv = SvRV(sv);
9531     if (!SvOBJECT(sv))
9532         return 0;
9533     hvname = HvNAME_get(SvSTASH(sv));
9534     if (!hvname)
9535         return 0;
9536
9537     return strEQ(hvname, name);
9538 }
9539
9540 /*
9541 =for apidoc newSVrv
9542
9543 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9544 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9545 SV will be blessed in the specified package.  The new SV is returned and its
9546 reference count is 1. The reference count 1 is owned by C<rv>.
9547
9548 =cut
9549 */
9550
9551 SV*
9552 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9553 {
9554     dVAR;
9555     SV *sv;
9556
9557     PERL_ARGS_ASSERT_NEWSVRV;
9558
9559     new_SV(sv);
9560
9561     SV_CHECK_THINKFIRST_COW_DROP(rv);
9562
9563     if (SvTYPE(rv) >= SVt_PVMG) {
9564         const U32 refcnt = SvREFCNT(rv);
9565         SvREFCNT(rv) = 0;
9566         sv_clear(rv);
9567         SvFLAGS(rv) = 0;
9568         SvREFCNT(rv) = refcnt;
9569
9570         sv_upgrade(rv, SVt_IV);
9571     } else if (SvROK(rv)) {
9572         SvREFCNT_dec(SvRV(rv));
9573     } else {
9574         prepare_SV_for_RV(rv);
9575     }
9576
9577     SvOK_off(rv);
9578     SvRV_set(rv, sv);
9579     SvROK_on(rv);
9580
9581     if (classname) {
9582         HV* const stash = gv_stashpv(classname, GV_ADD);
9583         (void)sv_bless(rv, stash);
9584     }
9585     return sv;
9586 }
9587
9588 /*
9589 =for apidoc sv_setref_pv
9590
9591 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9592 argument will be upgraded to an RV.  That RV will be modified to point to
9593 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9594 into the SV.  The C<classname> argument indicates the package for the
9595 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9596 will have a reference count of 1, and the RV will be returned.
9597
9598 Do not use with other Perl types such as HV, AV, SV, CV, because those
9599 objects will become corrupted by the pointer copy process.
9600
9601 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9602
9603 =cut
9604 */
9605
9606 SV*
9607 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9608 {
9609     dVAR;
9610
9611     PERL_ARGS_ASSERT_SV_SETREF_PV;
9612
9613     if (!pv) {
9614         sv_setsv(rv, &PL_sv_undef);
9615         SvSETMAGIC(rv);
9616     }
9617     else
9618         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9619     return rv;
9620 }
9621
9622 /*
9623 =for apidoc sv_setref_iv
9624
9625 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9626 argument will be upgraded to an RV.  That RV will be modified to point to
9627 the new SV.  The C<classname> argument indicates the package for the
9628 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9629 will have a reference count of 1, and the RV will be returned.
9630
9631 =cut
9632 */
9633
9634 SV*
9635 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9636 {
9637     PERL_ARGS_ASSERT_SV_SETREF_IV;
9638
9639     sv_setiv(newSVrv(rv,classname), iv);
9640     return rv;
9641 }
9642
9643 /*
9644 =for apidoc sv_setref_uv
9645
9646 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9647 argument will be upgraded to an RV.  That RV will be modified to point to
9648 the new SV.  The C<classname> argument indicates the package for the
9649 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9650 will have a reference count of 1, and the RV will be returned.
9651
9652 =cut
9653 */
9654
9655 SV*
9656 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9657 {
9658     PERL_ARGS_ASSERT_SV_SETREF_UV;
9659
9660     sv_setuv(newSVrv(rv,classname), uv);
9661     return rv;
9662 }
9663
9664 /*
9665 =for apidoc sv_setref_nv
9666
9667 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9668 argument will be upgraded to an RV.  That RV will be modified to point to
9669 the new SV.  The C<classname> argument indicates the package for the
9670 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9671 will have a reference count of 1, and the RV will be returned.
9672
9673 =cut
9674 */
9675
9676 SV*
9677 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9678 {
9679     PERL_ARGS_ASSERT_SV_SETREF_NV;
9680
9681     sv_setnv(newSVrv(rv,classname), nv);
9682     return rv;
9683 }
9684
9685 /*
9686 =for apidoc sv_setref_pvn
9687
9688 Copies a string into a new SV, optionally blessing the SV.  The length of the
9689 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9690 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9691 argument indicates the package for the blessing.  Set C<classname> to
9692 C<NULL> to avoid the blessing.  The new SV will have a reference count
9693 of 1, and the RV will be returned.
9694
9695 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9696
9697 =cut
9698 */
9699
9700 SV*
9701 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9702                    const char *const pv, const STRLEN n)
9703 {
9704     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9705
9706     sv_setpvn(newSVrv(rv,classname), pv, n);
9707     return rv;
9708 }
9709
9710 /*
9711 =for apidoc sv_bless
9712
9713 Blesses an SV into a specified package.  The SV must be an RV.  The package
9714 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9715 of the SV is unaffected.
9716
9717 =cut
9718 */
9719
9720 SV*
9721 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9722 {
9723     dVAR;
9724     SV *tmpRef;
9725
9726     PERL_ARGS_ASSERT_SV_BLESS;
9727
9728     if (!SvROK(sv))
9729         Perl_croak(aTHX_ "Can't bless non-reference value");
9730     tmpRef = SvRV(sv);
9731     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9732         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9733             Perl_croak_no_modify();
9734         if (SvOBJECT(tmpRef)) {
9735             SvREFCNT_dec(SvSTASH(tmpRef));
9736         }
9737     }
9738     SvOBJECT_on(tmpRef);
9739     SvUPGRADE(tmpRef, SVt_PVMG);
9740     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9741
9742     if(SvSMAGICAL(tmpRef))
9743         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9744             mg_set(tmpRef);
9745
9746
9747
9748     return sv;
9749 }
9750
9751 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9752  * as it is after unglobbing it.
9753  */
9754
9755 PERL_STATIC_INLINE void
9756 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9757 {
9758     dVAR;
9759     void *xpvmg;
9760     HV *stash;
9761     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9762
9763     PERL_ARGS_ASSERT_SV_UNGLOB;
9764
9765     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9766     SvFAKE_off(sv);
9767     if (!(flags & SV_COW_DROP_PV))
9768         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9769
9770     if (GvGP(sv)) {
9771         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9772            && HvNAME_get(stash))
9773             mro_method_changed_in(stash);
9774         gp_free(MUTABLE_GV(sv));
9775     }
9776     if (GvSTASH(sv)) {
9777         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9778         GvSTASH(sv) = NULL;
9779     }
9780     GvMULTI_off(sv);
9781     if (GvNAME_HEK(sv)) {
9782         unshare_hek(GvNAME_HEK(sv));
9783     }
9784     isGV_with_GP_off(sv);
9785
9786     if(SvTYPE(sv) == SVt_PVGV) {
9787         /* need to keep SvANY(sv) in the right arena */
9788         xpvmg = new_XPVMG();
9789         StructCopy(SvANY(sv), xpvmg, XPVMG);
9790         del_XPVGV(SvANY(sv));
9791         SvANY(sv) = xpvmg;
9792
9793         SvFLAGS(sv) &= ~SVTYPEMASK;
9794         SvFLAGS(sv) |= SVt_PVMG;
9795     }
9796
9797     /* Intentionally not calling any local SET magic, as this isn't so much a
9798        set operation as merely an internal storage change.  */
9799     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9800     else sv_setsv_flags(sv, temp, 0);
9801
9802     if ((const GV *)sv == PL_last_in_gv)
9803         PL_last_in_gv = NULL;
9804     else if ((const GV *)sv == PL_statgv)
9805         PL_statgv = NULL;
9806 }
9807
9808 /*
9809 =for apidoc sv_unref_flags
9810
9811 Unsets the RV status of the SV, and decrements the reference count of
9812 whatever was being referenced by the RV.  This can almost be thought of
9813 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9814 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9815 (otherwise the decrementing is conditional on the reference count being
9816 different from one or the reference being a readonly SV).
9817 See C<SvROK_off>.
9818
9819 =cut
9820 */
9821
9822 void
9823 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9824 {
9825     SV* const target = SvRV(ref);
9826
9827     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9828
9829     if (SvWEAKREF(ref)) {
9830         sv_del_backref(target, ref);
9831         SvWEAKREF_off(ref);
9832         SvRV_set(ref, NULL);
9833         return;
9834     }
9835     SvRV_set(ref, NULL);
9836     SvROK_off(ref);
9837     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9838        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9839     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9840         SvREFCNT_dec_NN(target);
9841     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9842         sv_2mortal(target);     /* Schedule for freeing later */
9843 }
9844
9845 /*
9846 =for apidoc sv_untaint
9847
9848 Untaint an SV.  Use C<SvTAINTED_off> instead.
9849
9850 =cut
9851 */
9852
9853 void
9854 Perl_sv_untaint(pTHX_ SV *const sv)
9855 {
9856     PERL_ARGS_ASSERT_SV_UNTAINT;
9857
9858     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9859         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9860         if (mg)
9861             mg->mg_len &= ~1;
9862     }
9863 }
9864
9865 /*
9866 =for apidoc sv_tainted
9867
9868 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9869
9870 =cut
9871 */
9872
9873 bool
9874 Perl_sv_tainted(pTHX_ SV *const sv)
9875 {
9876     PERL_ARGS_ASSERT_SV_TAINTED;
9877
9878     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9879         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9880         if (mg && (mg->mg_len & 1) )
9881             return TRUE;
9882     }
9883     return FALSE;
9884 }
9885
9886 /*
9887 =for apidoc sv_setpviv
9888
9889 Copies an integer into the given SV, also updating its string value.
9890 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9891
9892 =cut
9893 */
9894
9895 void
9896 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9897 {
9898     char buf[TYPE_CHARS(UV)];
9899     char *ebuf;
9900     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9901
9902     PERL_ARGS_ASSERT_SV_SETPVIV;
9903
9904     sv_setpvn(sv, ptr, ebuf - ptr);
9905 }
9906
9907 /*
9908 =for apidoc sv_setpviv_mg
9909
9910 Like C<sv_setpviv>, but also handles 'set' magic.
9911
9912 =cut
9913 */
9914
9915 void
9916 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9917 {
9918     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9919
9920     sv_setpviv(sv, iv);
9921     SvSETMAGIC(sv);
9922 }
9923
9924 #if defined(PERL_IMPLICIT_CONTEXT)
9925
9926 /* pTHX_ magic can't cope with varargs, so this is a no-context
9927  * version of the main function, (which may itself be aliased to us).
9928  * Don't access this version directly.
9929  */
9930
9931 void
9932 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9933 {
9934     dTHX;
9935     va_list args;
9936
9937     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9938
9939     va_start(args, pat);
9940     sv_vsetpvf(sv, pat, &args);
9941     va_end(args);
9942 }
9943
9944 /* pTHX_ magic can't cope with varargs, so this is a no-context
9945  * version of the main function, (which may itself be aliased to us).
9946  * Don't access this version directly.
9947  */
9948
9949 void
9950 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9951 {
9952     dTHX;
9953     va_list args;
9954
9955     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9956
9957     va_start(args, pat);
9958     sv_vsetpvf_mg(sv, pat, &args);
9959     va_end(args);
9960 }
9961 #endif
9962
9963 /*
9964 =for apidoc sv_setpvf
9965
9966 Works like C<sv_catpvf> but copies the text into the SV instead of
9967 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9968
9969 =cut
9970 */
9971
9972 void
9973 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9974 {
9975     va_list args;
9976
9977     PERL_ARGS_ASSERT_SV_SETPVF;
9978
9979     va_start(args, pat);
9980     sv_vsetpvf(sv, pat, &args);
9981     va_end(args);
9982 }
9983
9984 /*
9985 =for apidoc sv_vsetpvf
9986
9987 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9988 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9989
9990 Usually used via its frontend C<sv_setpvf>.
9991
9992 =cut
9993 */
9994
9995 void
9996 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9997 {
9998     PERL_ARGS_ASSERT_SV_VSETPVF;
9999
10000     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10001 }
10002
10003 /*
10004 =for apidoc sv_setpvf_mg
10005
10006 Like C<sv_setpvf>, but also handles 'set' magic.
10007
10008 =cut
10009 */
10010
10011 void
10012 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10013 {
10014     va_list args;
10015
10016     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10017
10018     va_start(args, pat);
10019     sv_vsetpvf_mg(sv, pat, &args);
10020     va_end(args);
10021 }
10022
10023 /*
10024 =for apidoc sv_vsetpvf_mg
10025
10026 Like C<sv_vsetpvf>, but also handles 'set' magic.
10027
10028 Usually used via its frontend C<sv_setpvf_mg>.
10029
10030 =cut
10031 */
10032
10033 void
10034 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10035 {
10036     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10037
10038     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10039     SvSETMAGIC(sv);
10040 }
10041
10042 #if defined(PERL_IMPLICIT_CONTEXT)
10043
10044 /* pTHX_ magic can't cope with varargs, so this is a no-context
10045  * version of the main function, (which may itself be aliased to us).
10046  * Don't access this version directly.
10047  */
10048
10049 void
10050 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10051 {
10052     dTHX;
10053     va_list args;
10054
10055     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10056
10057     va_start(args, pat);
10058     sv_vcatpvf(sv, pat, &args);
10059     va_end(args);
10060 }
10061
10062 /* pTHX_ magic can't cope with varargs, so this is a no-context
10063  * version of the main function, (which may itself be aliased to us).
10064  * Don't access this version directly.
10065  */
10066
10067 void
10068 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10069 {
10070     dTHX;
10071     va_list args;
10072
10073     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10074
10075     va_start(args, pat);
10076     sv_vcatpvf_mg(sv, pat, &args);
10077     va_end(args);
10078 }
10079 #endif
10080
10081 /*
10082 =for apidoc sv_catpvf
10083
10084 Processes its arguments like C<sprintf> and appends the formatted
10085 output to an SV.  If the appended data contains "wide" characters
10086 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10087 and characters >255 formatted with %c), the original SV might get
10088 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10089 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10090 valid UTF-8; if the original SV was bytes, the pattern should be too.
10091
10092 =cut */
10093
10094 void
10095 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10096 {
10097     va_list args;
10098
10099     PERL_ARGS_ASSERT_SV_CATPVF;
10100
10101     va_start(args, pat);
10102     sv_vcatpvf(sv, pat, &args);
10103     va_end(args);
10104 }
10105
10106 /*
10107 =for apidoc sv_vcatpvf
10108
10109 Processes its arguments like C<vsprintf> and appends the formatted output
10110 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10111
10112 Usually used via its frontend C<sv_catpvf>.
10113
10114 =cut
10115 */
10116
10117 void
10118 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10119 {
10120     PERL_ARGS_ASSERT_SV_VCATPVF;
10121
10122     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10123 }
10124
10125 /*
10126 =for apidoc sv_catpvf_mg
10127
10128 Like C<sv_catpvf>, but also handles 'set' magic.
10129
10130 =cut
10131 */
10132
10133 void
10134 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10135 {
10136     va_list args;
10137
10138     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10139
10140     va_start(args, pat);
10141     sv_vcatpvf_mg(sv, pat, &args);
10142     va_end(args);
10143 }
10144
10145 /*
10146 =for apidoc sv_vcatpvf_mg
10147
10148 Like C<sv_vcatpvf>, but also handles 'set' magic.
10149
10150 Usually used via its frontend C<sv_catpvf_mg>.
10151
10152 =cut
10153 */
10154
10155 void
10156 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10157 {
10158     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10159
10160     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10161     SvSETMAGIC(sv);
10162 }
10163
10164 /*
10165 =for apidoc sv_vsetpvfn
10166
10167 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10168 appending it.
10169
10170 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10171
10172 =cut
10173 */
10174
10175 void
10176 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10177                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10178 {
10179     PERL_ARGS_ASSERT_SV_VSETPVFN;
10180
10181     sv_setpvs(sv, "");
10182     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10183 }
10184
10185
10186 /*
10187  * Warn of missing argument to sprintf, and then return a defined value
10188  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10189  */
10190 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10191 STATIC SV*
10192 S_vcatpvfn_missing_argument(pTHX) {
10193     if (ckWARN(WARN_MISSING)) {
10194         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10195                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10196     }
10197     return &PL_sv_no;
10198 }
10199
10200
10201 STATIC I32
10202 S_expect_number(pTHX_ char **const pattern)
10203 {
10204     dVAR;
10205     I32 var = 0;
10206
10207     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10208
10209     switch (**pattern) {
10210     case '1': case '2': case '3':
10211     case '4': case '5': case '6':
10212     case '7': case '8': case '9':
10213         var = *(*pattern)++ - '0';
10214         while (isDIGIT(**pattern)) {
10215             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10216             if (tmp < var)
10217                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10218             var = tmp;
10219         }
10220     }
10221     return var;
10222 }
10223
10224 STATIC char *
10225 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10226 {
10227     const int neg = nv < 0;
10228     UV uv;
10229
10230     PERL_ARGS_ASSERT_F0CONVERT;
10231
10232     if (neg)
10233         nv = -nv;
10234     if (nv < UV_MAX) {
10235         char *p = endbuf;
10236         nv += 0.5;
10237         uv = (UV)nv;
10238         if (uv & 1 && uv == nv)
10239             uv--;                       /* Round to even */
10240         do {
10241             const unsigned dig = uv % 10;
10242             *--p = '0' + dig;
10243         } while (uv /= 10);
10244         if (neg)
10245             *--p = '-';
10246         *len = endbuf - p;
10247         return p;
10248     }
10249     return NULL;
10250 }
10251
10252
10253 /*
10254 =for apidoc sv_vcatpvfn
10255
10256 =for apidoc sv_vcatpvfn_flags
10257
10258 Processes its arguments like C<vsprintf> and appends the formatted output
10259 to an SV.  Uses an array of SVs if the C style variable argument list is
10260 missing (NULL).  When running with taint checks enabled, indicates via
10261 C<maybe_tainted> if results are untrustworthy (often due to the use of
10262 locales).
10263
10264 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10265
10266 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10267
10268 =cut
10269 */
10270
10271 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10272                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10273                         vec_utf8 = DO_UTF8(vecsv);
10274
10275 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10276
10277 void
10278 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10279                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10280 {
10281     PERL_ARGS_ASSERT_SV_VCATPVFN;
10282
10283     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10284 }
10285
10286 void
10287 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10288                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10289                        const U32 flags)
10290 {
10291     dVAR;
10292     char *p;
10293     char *q;
10294     const char *patend;
10295     STRLEN origlen;
10296     I32 svix = 0;
10297     static const char nullstr[] = "(null)";
10298     SV *argsv = NULL;
10299     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10300     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10301     SV *nsv = NULL;
10302     /* Times 4: a decimal digit takes more than 3 binary digits.
10303      * NV_DIG: mantissa takes than many decimal digits.
10304      * Plus 32: Playing safe. */
10305     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10306     /* large enough for "%#.#f" --chip */
10307     /* what about long double NVs? --jhi */
10308
10309     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10310     PERL_UNUSED_ARG(maybe_tainted);
10311
10312     if (flags & SV_GMAGIC)
10313         SvGETMAGIC(sv);
10314
10315     /* no matter what, this is a string now */
10316     (void)SvPV_force_nomg(sv, origlen);
10317
10318     /* special-case "", "%s", and "%-p" (SVf - see below) */
10319     if (patlen == 0)
10320         return;
10321     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10322         if (args) {
10323             const char * const s = va_arg(*args, char*);
10324             sv_catpv_nomg(sv, s ? s : nullstr);
10325         }
10326         else if (svix < svmax) {
10327             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10328             SvGETMAGIC(*svargs);
10329             sv_catsv_nomg(sv, *svargs);
10330         }
10331         else
10332             S_vcatpvfn_missing_argument(aTHX);
10333         return;
10334     }
10335     if (args && patlen == 3 && pat[0] == '%' &&
10336                 pat[1] == '-' && pat[2] == 'p') {
10337         argsv = MUTABLE_SV(va_arg(*args, void*));
10338         sv_catsv_nomg(sv, argsv);
10339         return;
10340     }
10341
10342 #ifndef USE_LONG_DOUBLE
10343     /* special-case "%.<number>[gf]" */
10344     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10345          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10346         unsigned digits = 0;
10347         const char *pp;
10348
10349         pp = pat + 2;
10350         while (*pp >= '0' && *pp <= '9')
10351             digits = 10 * digits + (*pp++ - '0');
10352         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10353             const NV nv = SvNV(*svargs);
10354             if (*pp == 'g') {
10355                 /* Add check for digits != 0 because it seems that some
10356                    gconverts are buggy in this case, and we don't yet have
10357                    a Configure test for this.  */
10358                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10359                      /* 0, point, slack */
10360                     Gconvert(nv, (int)digits, 0, ebuf);
10361                     sv_catpv_nomg(sv, ebuf);
10362                     if (*ebuf)  /* May return an empty string for digits==0 */
10363                         return;
10364                 }
10365             } else if (!digits) {
10366                 STRLEN l;
10367
10368                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10369                     sv_catpvn_nomg(sv, p, l);
10370                     return;
10371                 }
10372             }
10373         }
10374     }
10375 #endif /* !USE_LONG_DOUBLE */
10376
10377     if (!args && svix < svmax && DO_UTF8(*svargs))
10378         has_utf8 = TRUE;
10379
10380     patend = (char*)pat + patlen;
10381     for (p = (char*)pat; p < patend; p = q) {
10382         bool alt = FALSE;
10383         bool left = FALSE;
10384         bool vectorize = FALSE;
10385         bool vectorarg = FALSE;
10386         bool vec_utf8 = FALSE;
10387         char fill = ' ';
10388         char plus = 0;
10389         char intsize = 0;
10390         STRLEN width = 0;
10391         STRLEN zeros = 0;
10392         bool has_precis = FALSE;
10393         STRLEN precis = 0;
10394         const I32 osvix = svix;
10395         bool is_utf8 = FALSE;  /* is this item utf8?   */
10396 #ifdef HAS_LDBL_SPRINTF_BUG
10397         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10398            with sfio - Allen <allens@cpan.org> */
10399         bool fix_ldbl_sprintf_bug = FALSE;
10400 #endif
10401
10402         char esignbuf[4];
10403         U8 utf8buf[UTF8_MAXBYTES+1];
10404         STRLEN esignlen = 0;
10405
10406         const char *eptr = NULL;
10407         const char *fmtstart;
10408         STRLEN elen = 0;
10409         SV *vecsv = NULL;
10410         const U8 *vecstr = NULL;
10411         STRLEN veclen = 0;
10412         char c = 0;
10413         int i;
10414         unsigned base = 0;
10415         IV iv = 0;
10416         UV uv = 0;
10417         /* we need a long double target in case HAS_LONG_DOUBLE but
10418            not USE_LONG_DOUBLE
10419         */
10420 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10421         long double nv;
10422 #else
10423         NV nv;
10424 #endif
10425         STRLEN have;
10426         STRLEN need;
10427         STRLEN gap;
10428         const char *dotstr = ".";
10429         STRLEN dotstrlen = 1;
10430         I32 efix = 0; /* explicit format parameter index */
10431         I32 ewix = 0; /* explicit width index */
10432         I32 epix = 0; /* explicit precision index */
10433         I32 evix = 0; /* explicit vector index */
10434         bool asterisk = FALSE;
10435
10436         /* echo everything up to the next format specification */
10437         for (q = p; q < patend && *q != '%'; ++q) ;
10438         if (q > p) {
10439             if (has_utf8 && !pat_utf8)
10440                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10441             else
10442                 sv_catpvn_nomg(sv, p, q - p);
10443             p = q;
10444         }
10445         if (q++ >= patend)
10446             break;
10447
10448         fmtstart = q;
10449
10450 /*
10451     We allow format specification elements in this order:
10452         \d+\$              explicit format parameter index
10453         [-+ 0#]+           flags
10454         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10455         0                  flag (as above): repeated to allow "v02"     
10456         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10457         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10458         [hlqLV]            size
10459     [%bcdefginopsuxDFOUX] format (mandatory)
10460 */
10461
10462         if (args) {
10463 /*  
10464         As of perl5.9.3, printf format checking is on by default.
10465         Internally, perl uses %p formats to provide an escape to
10466         some extended formatting.  This block deals with those
10467         extensions: if it does not match, (char*)q is reset and
10468         the normal format processing code is used.
10469
10470         Currently defined extensions are:
10471                 %p              include pointer address (standard)      
10472                 %-p     (SVf)   include an SV (previously %_)
10473                 %-<num>p        include an SV with precision <num>      
10474                 %2p             include a HEK
10475                 %3p             include a HEK with precision of 256
10476                 %4p             char* preceded by utf8 flag and length
10477                 %<num>p         (where num is 1 or > 4) reserved for future
10478                                 extensions
10479
10480         Robin Barker 2005-07-14 (but modified since)
10481
10482                 %1p     (VDf)   removed.  RMB 2007-10-19
10483 */
10484             char* r = q; 
10485             bool sv = FALSE;    
10486             STRLEN n = 0;
10487             if (*q == '-')
10488                 sv = *q++;
10489             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10490                 /* The argument has already gone through cBOOL, so the cast
10491                    is safe. */
10492                 is_utf8 = (bool)va_arg(*args, int);
10493                 elen = va_arg(*args, UV);
10494                 eptr = va_arg(*args, char *);
10495                 q += sizeof(UTF8f)-1;
10496                 goto string;
10497             }
10498             n = expect_number(&q);
10499             if (*q++ == 'p') {
10500                 if (sv) {                       /* SVf */
10501                     if (n) {
10502                         precis = n;
10503                         has_precis = TRUE;
10504                     }
10505                     argsv = MUTABLE_SV(va_arg(*args, void*));
10506                     eptr = SvPV_const(argsv, elen);
10507                     if (DO_UTF8(argsv))
10508                         is_utf8 = TRUE;
10509                     goto string;
10510                 }
10511                 else if (n==2 || n==3) {        /* HEKf */
10512                     HEK * const hek = va_arg(*args, HEK *);
10513                     eptr = HEK_KEY(hek);
10514                     elen = HEK_LEN(hek);
10515                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10516                     if (n==3) precis = 256, has_precis = TRUE;
10517                     goto string;
10518                 }
10519                 else if (n) {
10520                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10521                                      "internal %%<num>p might conflict with future printf extensions");
10522                 }
10523             }
10524             q = r; 
10525         }
10526
10527         if ( (width = expect_number(&q)) ) {
10528             if (*q == '$') {
10529                 ++q;
10530                 efix = width;
10531             } else {
10532                 goto gotwidth;
10533             }
10534         }
10535
10536         /* FLAGS */
10537
10538         while (*q) {
10539             switch (*q) {
10540             case ' ':
10541             case '+':
10542                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10543                     q++;
10544                 else
10545                     plus = *q++;
10546                 continue;
10547
10548             case '-':
10549                 left = TRUE;
10550                 q++;
10551                 continue;
10552
10553             case '0':
10554                 fill = *q++;
10555                 continue;
10556
10557             case '#':
10558                 alt = TRUE;
10559                 q++;
10560                 continue;
10561
10562             default:
10563                 break;
10564             }
10565             break;
10566         }
10567
10568       tryasterisk:
10569         if (*q == '*') {
10570             q++;
10571             if ( (ewix = expect_number(&q)) )
10572                 if (*q++ != '$')
10573                     goto unknown;
10574             asterisk = TRUE;
10575         }
10576         if (*q == 'v') {
10577             q++;
10578             if (vectorize)
10579                 goto unknown;
10580             if ((vectorarg = asterisk)) {
10581                 evix = ewix;
10582                 ewix = 0;
10583                 asterisk = FALSE;
10584             }
10585             vectorize = TRUE;
10586             goto tryasterisk;
10587         }
10588
10589         if (!asterisk)
10590         {
10591             if( *q == '0' )
10592                 fill = *q++;
10593             width = expect_number(&q);
10594         }
10595
10596         if (vectorize && vectorarg) {
10597             /* vectorizing, but not with the default "." */
10598             if (args)
10599                 vecsv = va_arg(*args, SV*);
10600             else if (evix) {
10601                 vecsv = (evix > 0 && evix <= svmax)
10602                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10603             } else {
10604                 vecsv = svix < svmax
10605                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10606             }
10607             dotstr = SvPV_const(vecsv, dotstrlen);
10608             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10609                bad with tied or overloaded values that return UTF8.  */
10610             if (DO_UTF8(vecsv))
10611                 is_utf8 = TRUE;
10612             else if (has_utf8) {
10613                 vecsv = sv_mortalcopy(vecsv);
10614                 sv_utf8_upgrade(vecsv);
10615                 dotstr = SvPV_const(vecsv, dotstrlen);
10616                 is_utf8 = TRUE;
10617             }               
10618         }
10619
10620         if (asterisk) {
10621             if (args)
10622                 i = va_arg(*args, int);
10623             else
10624                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10625                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10626             left |= (i < 0);
10627             width = (i < 0) ? -i : i;
10628         }
10629       gotwidth:
10630
10631         /* PRECISION */
10632
10633         if (*q == '.') {
10634             q++;
10635             if (*q == '*') {
10636                 q++;
10637                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10638                     goto unknown;
10639                 /* XXX: todo, support specified precision parameter */
10640                 if (epix)
10641                     goto unknown;
10642                 if (args)
10643                     i = va_arg(*args, int);
10644                 else
10645                     i = (ewix ? ewix <= svmax : svix < svmax)
10646                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10647                 precis = i;
10648                 has_precis = !(i < 0);
10649             }
10650             else {
10651                 precis = 0;
10652                 while (isDIGIT(*q))
10653                     precis = precis * 10 + (*q++ - '0');
10654                 has_precis = TRUE;
10655             }
10656         }
10657
10658         if (vectorize) {
10659             if (args) {
10660                 VECTORIZE_ARGS
10661             }
10662             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10663                 vecsv = svargs[efix ? efix-1 : svix++];
10664                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10665                 vec_utf8 = DO_UTF8(vecsv);
10666
10667                 /* if this is a version object, we need to convert
10668                  * back into v-string notation and then let the
10669                  * vectorize happen normally
10670                  */
10671                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10672                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10673                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10674                         "vector argument not supported with alpha versions");
10675                         goto vdblank;
10676                     }
10677                     vecsv = sv_newmortal();
10678                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10679                                  vecsv);
10680                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10681                     vec_utf8 = DO_UTF8(vecsv);
10682                 }
10683             }
10684             else {
10685               vdblank:
10686                 vecstr = (U8*)"";
10687                 veclen = 0;
10688             }
10689         }
10690
10691         /* SIZE */
10692
10693         switch (*q) {
10694 #ifdef WIN32
10695         case 'I':                       /* Ix, I32x, and I64x */
10696 #  ifdef USE_64_BIT_INT
10697             if (q[1] == '6' && q[2] == '4') {
10698                 q += 3;
10699                 intsize = 'q';
10700                 break;
10701             }
10702 #  endif
10703             if (q[1] == '3' && q[2] == '2') {
10704                 q += 3;
10705                 break;
10706             }
10707 #  ifdef USE_64_BIT_INT
10708             intsize = 'q';
10709 #  endif
10710             q++;
10711             break;
10712 #endif
10713 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10714         case 'L':                       /* Ld */
10715             /*FALLTHROUGH*/
10716 #ifdef HAS_QUAD
10717         case 'q':                       /* qd */
10718 #endif
10719             intsize = 'q';
10720             q++;
10721             break;
10722 #endif
10723         case 'l':
10724             ++q;
10725 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10726             if (*q == 'l') {    /* lld, llf */
10727                 intsize = 'q';
10728                 ++q;
10729             }
10730             else
10731 #endif
10732                 intsize = 'l';
10733             break;
10734         case 'h':
10735             if (*++q == 'h') {  /* hhd, hhu */
10736                 intsize = 'c';
10737                 ++q;
10738             }
10739             else
10740                 intsize = 'h';
10741             break;
10742         case 'V':
10743         case 'z':
10744         case 't':
10745 #if HAS_C99
10746         case 'j':
10747 #endif
10748             intsize = *q++;
10749             break;
10750         }
10751
10752         /* CONVERSION */
10753
10754         if (*q == '%') {
10755             eptr = q++;
10756             elen = 1;
10757             if (vectorize) {
10758                 c = '%';
10759                 goto unknown;
10760             }
10761             goto string;
10762         }
10763
10764         if (!vectorize && !args) {
10765             if (efix) {
10766                 const I32 i = efix-1;
10767                 argsv = (i >= 0 && i < svmax)
10768                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10769             } else {
10770                 argsv = (svix >= 0 && svix < svmax)
10771                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10772             }
10773         }
10774
10775         switch (c = *q++) {
10776
10777             /* STRINGS */
10778
10779         case 'c':
10780             if (vectorize)
10781                 goto unknown;
10782             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10783             if ((uv > 255 ||
10784                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10785                 && !IN_BYTES) {
10786                 eptr = (char*)utf8buf;
10787                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10788                 is_utf8 = TRUE;
10789             }
10790             else {
10791                 c = (char)uv;
10792                 eptr = &c;
10793                 elen = 1;
10794             }
10795             goto string;
10796
10797         case 's':
10798             if (vectorize)
10799                 goto unknown;
10800             if (args) {
10801                 eptr = va_arg(*args, char*);
10802                 if (eptr)
10803                     elen = strlen(eptr);
10804                 else {
10805                     eptr = (char *)nullstr;
10806                     elen = sizeof nullstr - 1;
10807                 }
10808             }
10809             else {
10810                 eptr = SvPV_const(argsv, elen);
10811                 if (DO_UTF8(argsv)) {
10812                     STRLEN old_precis = precis;
10813                     if (has_precis && precis < elen) {
10814                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10815                         STRLEN p = precis > ulen ? ulen : precis;
10816                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10817                                                         /* sticks at end */
10818                     }
10819                     if (width) { /* fudge width (can't fudge elen) */
10820                         if (has_precis && precis < elen)
10821                             width += precis - old_precis;
10822                         else
10823                             width +=
10824                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10825                     }
10826                     is_utf8 = TRUE;
10827                 }
10828             }
10829
10830         string:
10831             if (has_precis && precis < elen)
10832                 elen = precis;
10833             break;
10834
10835             /* INTEGERS */
10836
10837         case 'p':
10838             if (alt || vectorize)
10839                 goto unknown;
10840             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10841             base = 16;
10842             goto integer;
10843
10844         case 'D':
10845 #ifdef IV_IS_QUAD
10846             intsize = 'q';
10847 #else
10848             intsize = 'l';
10849 #endif
10850             /*FALLTHROUGH*/
10851         case 'd':
10852         case 'i':
10853 #if vdNUMBER
10854         format_vd:
10855 #endif
10856             if (vectorize) {
10857                 STRLEN ulen;
10858                 if (!veclen)
10859                     continue;
10860                 if (vec_utf8)
10861                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10862                                         UTF8_ALLOW_ANYUV);
10863                 else {
10864                     uv = *vecstr;
10865                     ulen = 1;
10866                 }
10867                 vecstr += ulen;
10868                 veclen -= ulen;
10869                 if (plus)
10870                      esignbuf[esignlen++] = plus;
10871             }
10872             else if (args) {
10873                 switch (intsize) {
10874                 case 'c':       iv = (char)va_arg(*args, int); break;
10875                 case 'h':       iv = (short)va_arg(*args, int); break;
10876                 case 'l':       iv = va_arg(*args, long); break;
10877                 case 'V':       iv = va_arg(*args, IV); break;
10878                 case 'z':       iv = va_arg(*args, SSize_t); break;
10879                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10880                 default:        iv = va_arg(*args, int); break;
10881 #if HAS_C99
10882                 case 'j':       iv = va_arg(*args, intmax_t); break;
10883 #endif
10884                 case 'q':
10885 #ifdef HAS_QUAD
10886                                 iv = va_arg(*args, Quad_t); break;
10887 #else
10888                                 goto unknown;
10889 #endif
10890                 }
10891             }
10892             else {
10893                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10894                 switch (intsize) {
10895                 case 'c':       iv = (char)tiv; break;
10896                 case 'h':       iv = (short)tiv; break;
10897                 case 'l':       iv = (long)tiv; break;
10898                 case 'V':
10899                 default:        iv = tiv; break;
10900                 case 'q':
10901 #ifdef HAS_QUAD
10902                                 iv = (Quad_t)tiv; break;
10903 #else
10904                                 goto unknown;
10905 #endif
10906                 }
10907             }
10908             if ( !vectorize )   /* we already set uv above */
10909             {
10910                 if (iv >= 0) {
10911                     uv = iv;
10912                     if (plus)
10913                         esignbuf[esignlen++] = plus;
10914                 }
10915                 else {
10916                     uv = -iv;
10917                     esignbuf[esignlen++] = '-';
10918                 }
10919             }
10920             base = 10;
10921             goto integer;
10922
10923         case 'U':
10924 #ifdef IV_IS_QUAD
10925             intsize = 'q';
10926 #else
10927             intsize = 'l';
10928 #endif
10929             /*FALLTHROUGH*/
10930         case 'u':
10931             base = 10;
10932             goto uns_integer;
10933
10934         case 'B':
10935         case 'b':
10936             base = 2;
10937             goto uns_integer;
10938
10939         case 'O':
10940 #ifdef IV_IS_QUAD
10941             intsize = 'q';
10942 #else
10943             intsize = 'l';
10944 #endif
10945             /*FALLTHROUGH*/
10946         case 'o':
10947             base = 8;
10948             goto uns_integer;
10949
10950         case 'X':
10951         case 'x':
10952             base = 16;
10953
10954         uns_integer:
10955             if (vectorize) {
10956                 STRLEN ulen;
10957         vector:
10958                 if (!veclen)
10959                     continue;
10960                 if (vec_utf8)
10961                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10962                                         UTF8_ALLOW_ANYUV);
10963                 else {
10964                     uv = *vecstr;
10965                     ulen = 1;
10966                 }
10967                 vecstr += ulen;
10968                 veclen -= ulen;
10969             }
10970             else if (args) {
10971                 switch (intsize) {
10972                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10973                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10974                 case 'l':  uv = va_arg(*args, unsigned long); break;
10975                 case 'V':  uv = va_arg(*args, UV); break;
10976                 case 'z':  uv = va_arg(*args, Size_t); break;
10977                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10978 #if HAS_C99
10979                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10980 #endif
10981                 default:   uv = va_arg(*args, unsigned); break;
10982                 case 'q':
10983 #ifdef HAS_QUAD
10984                            uv = va_arg(*args, Uquad_t); break;
10985 #else
10986                            goto unknown;
10987 #endif
10988                 }
10989             }
10990             else {
10991                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10992                 switch (intsize) {
10993                 case 'c':       uv = (unsigned char)tuv; break;
10994                 case 'h':       uv = (unsigned short)tuv; break;
10995                 case 'l':       uv = (unsigned long)tuv; break;
10996                 case 'V':
10997                 default:        uv = tuv; break;
10998                 case 'q':
10999 #ifdef HAS_QUAD
11000                                 uv = (Uquad_t)tuv; break;
11001 #else
11002                                 goto unknown;
11003 #endif
11004                 }
11005             }
11006
11007         integer:
11008             {
11009                 char *ptr = ebuf + sizeof ebuf;
11010                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11011                 zeros = 0;
11012
11013                 switch (base) {
11014                     unsigned dig;
11015                 case 16:
11016                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11017                     do {
11018                         dig = uv & 15;
11019                         *--ptr = p[dig];
11020                     } while (uv >>= 4);
11021                     if (tempalt) {
11022                         esignbuf[esignlen++] = '0';
11023                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11024                     }
11025                     break;
11026                 case 8:
11027                     do {
11028                         dig = uv & 7;
11029                         *--ptr = '0' + dig;
11030                     } while (uv >>= 3);
11031                     if (alt && *ptr != '0')
11032                         *--ptr = '0';
11033                     break;
11034                 case 2:
11035                     do {
11036                         dig = uv & 1;
11037                         *--ptr = '0' + dig;
11038                     } while (uv >>= 1);
11039                     if (tempalt) {
11040                         esignbuf[esignlen++] = '0';
11041                         esignbuf[esignlen++] = c;
11042                     }
11043                     break;
11044                 default:                /* it had better be ten or less */
11045                     do {
11046                         dig = uv % base;
11047                         *--ptr = '0' + dig;
11048                     } while (uv /= base);
11049                     break;
11050                 }
11051                 elen = (ebuf + sizeof ebuf) - ptr;
11052                 eptr = ptr;
11053                 if (has_precis) {
11054                     if (precis > elen)
11055                         zeros = precis - elen;
11056                     else if (precis == 0 && elen == 1 && *eptr == '0'
11057                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11058                         elen = 0;
11059
11060                 /* a precision nullifies the 0 flag. */
11061                     if (fill == '0')
11062                         fill = ' ';
11063                 }
11064             }
11065             break;
11066
11067             /* FLOATING POINT */
11068
11069         case 'F':
11070             c = 'f';            /* maybe %F isn't supported here */
11071             /*FALLTHROUGH*/
11072         case 'e': case 'E':
11073         case 'f':
11074         case 'g': case 'G':
11075             if (vectorize)
11076                 goto unknown;
11077
11078             /* This is evil, but floating point is even more evil */
11079
11080             /* for SV-style calling, we can only get NV
11081                for C-style calling, we assume %f is double;
11082                for simplicity we allow any of %Lf, %llf, %qf for long double
11083             */
11084             switch (intsize) {
11085             case 'V':
11086 #if defined(USE_LONG_DOUBLE)
11087                 intsize = 'q';
11088 #endif
11089                 break;
11090 /* [perl #20339] - we should accept and ignore %lf rather than die */
11091             case 'l':
11092                 /*FALLTHROUGH*/
11093             default:
11094 #if defined(USE_LONG_DOUBLE)
11095                 intsize = args ? 0 : 'q';
11096 #endif
11097                 break;
11098             case 'q':
11099 #if defined(HAS_LONG_DOUBLE)
11100                 break;
11101 #else
11102                 /*FALLTHROUGH*/
11103 #endif
11104             case 'c':
11105             case 'h':
11106             case 'z':
11107             case 't':
11108             case 'j':
11109                 goto unknown;
11110             }
11111
11112             /* now we need (long double) if intsize == 'q', else (double) */
11113             nv = (args) ?
11114 #if LONG_DOUBLESIZE > DOUBLESIZE
11115                 intsize == 'q' ?
11116                     va_arg(*args, long double) :
11117                     va_arg(*args, double)
11118 #else
11119                     va_arg(*args, double)
11120 #endif
11121                 : SvNV(argsv);
11122
11123             need = 0;
11124             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11125                else. frexp() has some unspecified behaviour for those three */
11126             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11127                 i = PERL_INT_MIN;
11128                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11129                    will cast our (long double) to (double) */
11130                 (void)Perl_frexp(nv, &i);
11131                 if (i == PERL_INT_MIN)
11132                     Perl_die(aTHX_ "panic: frexp");
11133                 if (i > 0)
11134                     need = BIT_DIGITS(i);
11135             }
11136             need += has_precis ? precis : 6; /* known default */
11137
11138             if (need < width)
11139                 need = width;
11140
11141 #ifdef HAS_LDBL_SPRINTF_BUG
11142             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11143                with sfio - Allen <allens@cpan.org> */
11144
11145 #  ifdef DBL_MAX
11146 #    define MY_DBL_MAX DBL_MAX
11147 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11148 #    if DOUBLESIZE >= 8
11149 #      define MY_DBL_MAX 1.7976931348623157E+308L
11150 #    else
11151 #      define MY_DBL_MAX 3.40282347E+38L
11152 #    endif
11153 #  endif
11154
11155 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11156 #    define MY_DBL_MAX_BUG 1L
11157 #  else
11158 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11159 #  endif
11160
11161 #  ifdef DBL_MIN
11162 #    define MY_DBL_MIN DBL_MIN
11163 #  else  /* XXX guessing! -Allen */
11164 #    if DOUBLESIZE >= 8
11165 #      define MY_DBL_MIN 2.2250738585072014E-308L
11166 #    else
11167 #      define MY_DBL_MIN 1.17549435E-38L
11168 #    endif
11169 #  endif
11170
11171             if ((intsize == 'q') && (c == 'f') &&
11172                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11173                 (need < DBL_DIG)) {
11174                 /* it's going to be short enough that
11175                  * long double precision is not needed */
11176
11177                 if ((nv <= 0L) && (nv >= -0L))
11178                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11179                 else {
11180                     /* would use Perl_fp_class as a double-check but not
11181                      * functional on IRIX - see perl.h comments */
11182
11183                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11184                         /* It's within the range that a double can represent */
11185 #if defined(DBL_MAX) && !defined(DBL_MIN)
11186                         if ((nv >= ((long double)1/DBL_MAX)) ||
11187                             (nv <= (-(long double)1/DBL_MAX)))
11188 #endif
11189                         fix_ldbl_sprintf_bug = TRUE;
11190                     }
11191                 }
11192                 if (fix_ldbl_sprintf_bug == TRUE) {
11193                     double temp;
11194
11195                     intsize = 0;
11196                     temp = (double)nv;
11197                     nv = (NV)temp;
11198                 }
11199             }
11200
11201 #  undef MY_DBL_MAX
11202 #  undef MY_DBL_MAX_BUG
11203 #  undef MY_DBL_MIN
11204
11205 #endif /* HAS_LDBL_SPRINTF_BUG */
11206
11207             need += 20; /* fudge factor */
11208             if (PL_efloatsize < need) {
11209                 Safefree(PL_efloatbuf);
11210                 PL_efloatsize = need + 20; /* more fudge */
11211                 Newx(PL_efloatbuf, PL_efloatsize, char);
11212                 PL_efloatbuf[0] = '\0';
11213             }
11214
11215             if ( !(width || left || plus || alt) && fill != '0'
11216                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11217                 /* See earlier comment about buggy Gconvert when digits,
11218                    aka precis is 0  */
11219                 if ( c == 'g' && precis) {
11220                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11221                     /* May return an empty string for digits==0 */
11222                     if (*PL_efloatbuf) {
11223                         elen = strlen(PL_efloatbuf);
11224                         goto float_converted;
11225                     }
11226                 } else if ( c == 'f' && !precis) {
11227                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11228                         break;
11229                 }
11230             }
11231             {
11232                 char *ptr = ebuf + sizeof ebuf;
11233                 *--ptr = '\0';
11234                 *--ptr = c;
11235                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11236 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11237                 if (intsize == 'q') {
11238                     /* Copy the one or more characters in a long double
11239                      * format before the 'base' ([efgEFG]) character to
11240                      * the format string. */
11241                     static char const prifldbl[] = PERL_PRIfldbl;
11242                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11243                     while (p >= prifldbl) { *--ptr = *p--; }
11244                 }
11245 #endif
11246                 if (has_precis) {
11247                     base = precis;
11248                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11249                     *--ptr = '.';
11250                 }
11251                 if (width) {
11252                     base = width;
11253                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11254                 }
11255                 if (fill == '0')
11256                     *--ptr = fill;
11257                 if (left)
11258                     *--ptr = '-';
11259                 if (plus)
11260                     *--ptr = plus;
11261                 if (alt)
11262                     *--ptr = '#';
11263                 *--ptr = '%';
11264
11265                 /* No taint.  Otherwise we are in the strange situation
11266                  * where printf() taints but print($float) doesn't.
11267                  * --jhi */
11268 #if defined(HAS_LONG_DOUBLE)
11269                 elen = ((intsize == 'q')
11270                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11271                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11272 #else
11273                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11274 #endif
11275             }
11276         float_converted:
11277             eptr = PL_efloatbuf;
11278             break;
11279
11280             /* SPECIAL */
11281
11282         case 'n':
11283             if (vectorize)
11284                 goto unknown;
11285             i = SvCUR(sv) - origlen;
11286             if (args) {
11287                 switch (intsize) {
11288                 case 'c':       *(va_arg(*args, char*)) = i; break;
11289                 case 'h':       *(va_arg(*args, short*)) = i; break;
11290                 default:        *(va_arg(*args, int*)) = i; break;
11291                 case 'l':       *(va_arg(*args, long*)) = i; break;
11292                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11293                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11294                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11295 #if HAS_C99
11296                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11297 #endif
11298                 case 'q':
11299 #ifdef HAS_QUAD
11300                                 *(va_arg(*args, Quad_t*)) = i; break;
11301 #else
11302                                 goto unknown;
11303 #endif
11304                 }
11305             }
11306             else
11307                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11308             continue;   /* not "break" */
11309
11310             /* UNKNOWN */
11311
11312         default:
11313       unknown:
11314             if (!args
11315                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11316                 && ckWARN(WARN_PRINTF))
11317             {
11318                 SV * const msg = sv_newmortal();
11319                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11320                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11321                 if (fmtstart < patend) {
11322                     const char * const fmtend = q < patend ? q : patend;
11323                     const char * f;
11324                     sv_catpvs(msg, "\"%");
11325                     for (f = fmtstart; f < fmtend; f++) {
11326                         if (isPRINT(*f)) {
11327                             sv_catpvn_nomg(msg, f, 1);
11328                         } else {
11329                             Perl_sv_catpvf(aTHX_ msg,
11330                                            "\\%03"UVof, (UV)*f & 0xFF);
11331                         }
11332                     }
11333                     sv_catpvs(msg, "\"");
11334                 } else {
11335                     sv_catpvs(msg, "end of string");
11336                 }
11337                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11338             }
11339
11340             /* output mangled stuff ... */
11341             if (c == '\0')
11342                 --q;
11343             eptr = p;
11344             elen = q - p;
11345
11346             /* ... right here, because formatting flags should not apply */
11347             SvGROW(sv, SvCUR(sv) + elen + 1);
11348             p = SvEND(sv);
11349             Copy(eptr, p, elen, char);
11350             p += elen;
11351             *p = '\0';
11352             SvCUR_set(sv, p - SvPVX_const(sv));
11353             svix = osvix;
11354             continue;   /* not "break" */
11355         }
11356
11357         if (is_utf8 != has_utf8) {
11358             if (is_utf8) {
11359                 if (SvCUR(sv))
11360                     sv_utf8_upgrade(sv);
11361             }
11362             else {
11363                 const STRLEN old_elen = elen;
11364                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11365                 sv_utf8_upgrade(nsv);
11366                 eptr = SvPVX_const(nsv);
11367                 elen = SvCUR(nsv);
11368
11369                 if (width) { /* fudge width (can't fudge elen) */
11370                     width += elen - old_elen;
11371                 }
11372                 is_utf8 = TRUE;
11373             }
11374         }
11375
11376         have = esignlen + zeros + elen;
11377         if (have < zeros)
11378             Perl_croak_memory_wrap();
11379
11380         need = (have > width ? have : width);
11381         gap = need - have;
11382
11383         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11384             Perl_croak_memory_wrap();
11385         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11386         p = SvEND(sv);
11387         if (esignlen && fill == '0') {
11388             int i;
11389             for (i = 0; i < (int)esignlen; i++)
11390                 *p++ = esignbuf[i];
11391         }
11392         if (gap && !left) {
11393             memset(p, fill, gap);
11394             p += gap;
11395         }
11396         if (esignlen && fill != '0') {
11397             int i;
11398             for (i = 0; i < (int)esignlen; i++)
11399                 *p++ = esignbuf[i];
11400         }
11401         if (zeros) {
11402             int i;
11403             for (i = zeros; i; i--)
11404                 *p++ = '0';
11405         }
11406         if (elen) {
11407             Copy(eptr, p, elen, char);
11408             p += elen;
11409         }
11410         if (gap && left) {
11411             memset(p, ' ', gap);
11412             p += gap;
11413         }
11414         if (vectorize) {
11415             if (veclen) {
11416                 Copy(dotstr, p, dotstrlen, char);
11417                 p += dotstrlen;
11418             }
11419             else
11420                 vectorize = FALSE;              /* done iterating over vecstr */
11421         }
11422         if (is_utf8)
11423             has_utf8 = TRUE;
11424         if (has_utf8)
11425             SvUTF8_on(sv);
11426         *p = '\0';
11427         SvCUR_set(sv, p - SvPVX_const(sv));
11428         if (vectorize) {
11429             esignlen = 0;
11430             goto vector;
11431         }
11432     }
11433     SvTAINT(sv);
11434 }
11435
11436 /* =========================================================================
11437
11438 =head1 Cloning an interpreter
11439
11440 All the macros and functions in this section are for the private use of
11441 the main function, perl_clone().
11442
11443 The foo_dup() functions make an exact copy of an existing foo thingy.
11444 During the course of a cloning, a hash table is used to map old addresses
11445 to new addresses.  The table is created and manipulated with the
11446 ptr_table_* functions.
11447
11448 =cut
11449
11450  * =========================================================================*/
11451
11452
11453 #if defined(USE_ITHREADS)
11454
11455 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11456 #ifndef GpREFCNT_inc
11457 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11458 #endif
11459
11460
11461 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11462    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11463    If this changes, please unmerge ss_dup.
11464    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11465 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11466 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11467 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11468 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11469 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11470 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11471 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11472 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11473 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11474 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11475 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11476 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11477 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11478
11479 /* clone a parser */
11480
11481 yy_parser *
11482 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11483 {
11484     yy_parser *parser;
11485
11486     PERL_ARGS_ASSERT_PARSER_DUP;
11487
11488     if (!proto)
11489         return NULL;
11490
11491     /* look for it in the table first */
11492     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11493     if (parser)
11494         return parser;
11495
11496     /* create anew and remember what it is */
11497     Newxz(parser, 1, yy_parser);
11498     ptr_table_store(PL_ptr_table, proto, parser);
11499
11500     /* XXX these not yet duped */
11501     parser->old_parser = NULL;
11502     parser->stack = NULL;
11503     parser->ps = NULL;
11504     parser->stack_size = 0;
11505     /* XXX parser->stack->state = 0; */
11506
11507     /* XXX eventually, just Copy() most of the parser struct ? */
11508
11509     parser->lex_brackets = proto->lex_brackets;
11510     parser->lex_casemods = proto->lex_casemods;
11511     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11512                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11513     parser->lex_casestack = savepvn(proto->lex_casestack,
11514                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11515     parser->lex_defer   = proto->lex_defer;
11516     parser->lex_dojoin  = proto->lex_dojoin;
11517     parser->lex_expect  = proto->lex_expect;
11518     parser->lex_formbrack = proto->lex_formbrack;
11519     parser->lex_inpat   = proto->lex_inpat;
11520     parser->lex_inwhat  = proto->lex_inwhat;
11521     parser->lex_op      = proto->lex_op;
11522     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11523     parser->lex_starts  = proto->lex_starts;
11524     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11525     parser->multi_close = proto->multi_close;
11526     parser->multi_open  = proto->multi_open;
11527     parser->multi_start = proto->multi_start;
11528     parser->multi_end   = proto->multi_end;
11529     parser->preambled   = proto->preambled;
11530     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11531     parser->linestr     = sv_dup_inc(proto->linestr, param);
11532     parser->expect      = proto->expect;
11533     parser->copline     = proto->copline;
11534     parser->last_lop_op = proto->last_lop_op;
11535     parser->lex_state   = proto->lex_state;
11536     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11537     /* rsfp_filters entries have fake IoDIRP() */
11538     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11539     parser->in_my       = proto->in_my;
11540     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11541     parser->error_count = proto->error_count;
11542
11543
11544     parser->linestr     = sv_dup_inc(proto->linestr, param);
11545
11546     {
11547         char * const ols = SvPVX(proto->linestr);
11548         char * const ls  = SvPVX(parser->linestr);
11549
11550         parser->bufptr      = ls + (proto->bufptr >= ols ?
11551                                     proto->bufptr -  ols : 0);
11552         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11553                                     proto->oldbufptr -  ols : 0);
11554         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11555                                     proto->oldoldbufptr -  ols : 0);
11556         parser->linestart   = ls + (proto->linestart >= ols ?
11557                                     proto->linestart -  ols : 0);
11558         parser->last_uni    = ls + (proto->last_uni >= ols ?
11559                                     proto->last_uni -  ols : 0);
11560         parser->last_lop    = ls + (proto->last_lop >= ols ?
11561                                     proto->last_lop -  ols : 0);
11562
11563         parser->bufend      = ls + SvCUR(parser->linestr);
11564     }
11565
11566     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11567
11568
11569 #ifdef PERL_MAD
11570     parser->endwhite    = proto->endwhite;
11571     parser->faketokens  = proto->faketokens;
11572     parser->lasttoke    = proto->lasttoke;
11573     parser->nextwhite   = proto->nextwhite;
11574     parser->realtokenstart = proto->realtokenstart;
11575     parser->skipwhite   = proto->skipwhite;
11576     parser->thisclose   = proto->thisclose;
11577     parser->thismad     = proto->thismad;
11578     parser->thisopen    = proto->thisopen;
11579     parser->thisstuff   = proto->thisstuff;
11580     parser->thistoken   = proto->thistoken;
11581     parser->thiswhite   = proto->thiswhite;
11582
11583     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11584     parser->curforce    = proto->curforce;
11585 #else
11586     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11587     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11588     parser->nexttoke    = proto->nexttoke;
11589 #endif
11590
11591     /* XXX should clone saved_curcop here, but we aren't passed
11592      * proto_perl; so do it in perl_clone_using instead */
11593
11594     return parser;
11595 }
11596
11597
11598 /* duplicate a file handle */
11599
11600 PerlIO *
11601 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11602 {
11603     PerlIO *ret;
11604
11605     PERL_ARGS_ASSERT_FP_DUP;
11606     PERL_UNUSED_ARG(type);
11607
11608     if (!fp)
11609         return (PerlIO*)NULL;
11610
11611     /* look for it in the table first */
11612     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11613     if (ret)
11614         return ret;
11615
11616     /* create anew and remember what it is */
11617     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11618     ptr_table_store(PL_ptr_table, fp, ret);
11619     return ret;
11620 }
11621
11622 /* duplicate a directory handle */
11623
11624 DIR *
11625 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11626 {
11627     DIR *ret;
11628
11629 #ifdef HAS_FCHDIR
11630     DIR *pwd;
11631     const Direntry_t *dirent;
11632     char smallbuf[256];
11633     char *name = NULL;
11634     STRLEN len = 0;
11635     long pos;
11636 #endif
11637
11638     PERL_UNUSED_CONTEXT;
11639     PERL_ARGS_ASSERT_DIRP_DUP;
11640
11641     if (!dp)
11642         return (DIR*)NULL;
11643
11644     /* look for it in the table first */
11645     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11646     if (ret)
11647         return ret;
11648
11649 #ifdef HAS_FCHDIR
11650
11651     PERL_UNUSED_ARG(param);
11652
11653     /* create anew */
11654
11655     /* open the current directory (so we can switch back) */
11656     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11657
11658     /* chdir to our dir handle and open the present working directory */
11659     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11660         PerlDir_close(pwd);
11661         return (DIR *)NULL;
11662     }
11663     /* Now we should have two dir handles pointing to the same dir. */
11664
11665     /* Be nice to the calling code and chdir back to where we were. */
11666     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11667
11668     /* We have no need of the pwd handle any more. */
11669     PerlDir_close(pwd);
11670
11671 #ifdef DIRNAMLEN
11672 # define d_namlen(d) (d)->d_namlen
11673 #else
11674 # define d_namlen(d) strlen((d)->d_name)
11675 #endif
11676     /* Iterate once through dp, to get the file name at the current posi-
11677        tion. Then step back. */
11678     pos = PerlDir_tell(dp);
11679     if ((dirent = PerlDir_read(dp))) {
11680         len = d_namlen(dirent);
11681         if (len <= sizeof smallbuf) name = smallbuf;
11682         else Newx(name, len, char);
11683         Move(dirent->d_name, name, len, char);
11684     }
11685     PerlDir_seek(dp, pos);
11686
11687     /* Iterate through the new dir handle, till we find a file with the
11688        right name. */
11689     if (!dirent) /* just before the end */
11690         for(;;) {
11691             pos = PerlDir_tell(ret);
11692             if (PerlDir_read(ret)) continue; /* not there yet */
11693             PerlDir_seek(ret, pos); /* step back */
11694             break;
11695         }
11696     else {
11697         const long pos0 = PerlDir_tell(ret);
11698         for(;;) {
11699             pos = PerlDir_tell(ret);
11700             if ((dirent = PerlDir_read(ret))) {
11701                 if (len == d_namlen(dirent)
11702                  && memEQ(name, dirent->d_name, len)) {
11703                     /* found it */
11704                     PerlDir_seek(ret, pos); /* step back */
11705                     break;
11706                 }
11707                 /* else we are not there yet; keep iterating */
11708             }
11709             else { /* This is not meant to happen. The best we can do is
11710                       reset the iterator to the beginning. */
11711                 PerlDir_seek(ret, pos0);
11712                 break;
11713             }
11714         }
11715     }
11716 #undef d_namlen
11717
11718     if (name && name != smallbuf)
11719         Safefree(name);
11720 #endif
11721
11722 #ifdef WIN32
11723     ret = win32_dirp_dup(dp, param);
11724 #endif
11725
11726     /* pop it in the pointer table */
11727     if (ret)
11728         ptr_table_store(PL_ptr_table, dp, ret);
11729
11730     return ret;
11731 }
11732
11733 /* duplicate a typeglob */
11734
11735 GP *
11736 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11737 {
11738     GP *ret;
11739
11740     PERL_ARGS_ASSERT_GP_DUP;
11741
11742     if (!gp)
11743         return (GP*)NULL;
11744     /* look for it in the table first */
11745     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11746     if (ret)
11747         return ret;
11748
11749     /* create anew and remember what it is */
11750     Newxz(ret, 1, GP);
11751     ptr_table_store(PL_ptr_table, gp, ret);
11752
11753     /* clone */
11754     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11755        on Newxz() to do this for us.  */
11756     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11757     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11758     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11759     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11760     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11761     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11762     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11763     ret->gp_cvgen       = gp->gp_cvgen;
11764     ret->gp_line        = gp->gp_line;
11765     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11766     return ret;
11767 }
11768
11769 /* duplicate a chain of magic */
11770
11771 MAGIC *
11772 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11773 {
11774     MAGIC *mgret = NULL;
11775     MAGIC **mgprev_p = &mgret;
11776
11777     PERL_ARGS_ASSERT_MG_DUP;
11778
11779     for (; mg; mg = mg->mg_moremagic) {
11780         MAGIC *nmg;
11781
11782         if ((param->flags & CLONEf_JOIN_IN)
11783                 && mg->mg_type == PERL_MAGIC_backref)
11784             /* when joining, we let the individual SVs add themselves to
11785              * backref as needed. */
11786             continue;
11787
11788         Newx(nmg, 1, MAGIC);
11789         *mgprev_p = nmg;
11790         mgprev_p = &(nmg->mg_moremagic);
11791
11792         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11793            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11794            from the original commit adding Perl_mg_dup() - revision 4538.
11795            Similarly there is the annotation "XXX random ptr?" next to the
11796            assignment to nmg->mg_ptr.  */
11797         *nmg = *mg;
11798
11799         /* FIXME for plugins
11800         if (nmg->mg_type == PERL_MAGIC_qr) {
11801             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11802         }
11803         else
11804         */
11805         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11806                           ? nmg->mg_type == PERL_MAGIC_backref
11807                                 /* The backref AV has its reference
11808                                  * count deliberately bumped by 1 */
11809                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11810                                                     nmg->mg_obj, param))
11811                                 : sv_dup_inc(nmg->mg_obj, param)
11812                           : sv_dup(nmg->mg_obj, param);
11813
11814         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11815             if (nmg->mg_len > 0) {
11816                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11817                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11818                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11819                 {
11820                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11821                     sv_dup_inc_multiple((SV**)(namtp->table),
11822                                         (SV**)(namtp->table), NofAMmeth, param);
11823                 }
11824             }
11825             else if (nmg->mg_len == HEf_SVKEY)
11826                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11827         }
11828         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11829             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11830         }
11831     }
11832     return mgret;
11833 }
11834
11835 #endif /* USE_ITHREADS */
11836
11837 struct ptr_tbl_arena {
11838     struct ptr_tbl_arena *next;
11839     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11840 };
11841
11842 /* create a new pointer-mapping table */
11843
11844 PTR_TBL_t *
11845 Perl_ptr_table_new(pTHX)
11846 {
11847     PTR_TBL_t *tbl;
11848     PERL_UNUSED_CONTEXT;
11849
11850     Newx(tbl, 1, PTR_TBL_t);
11851     tbl->tbl_max        = 511;
11852     tbl->tbl_items      = 0;
11853     tbl->tbl_arena      = NULL;
11854     tbl->tbl_arena_next = NULL;
11855     tbl->tbl_arena_end  = NULL;
11856     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11857     return tbl;
11858 }
11859
11860 #define PTR_TABLE_HASH(ptr) \
11861   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11862
11863 /* map an existing pointer using a table */
11864
11865 STATIC PTR_TBL_ENT_t *
11866 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11867 {
11868     PTR_TBL_ENT_t *tblent;
11869     const UV hash = PTR_TABLE_HASH(sv);
11870
11871     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11872
11873     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11874     for (; tblent; tblent = tblent->next) {
11875         if (tblent->oldval == sv)
11876             return tblent;
11877     }
11878     return NULL;
11879 }
11880
11881 void *
11882 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11883 {
11884     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11885
11886     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11887     PERL_UNUSED_CONTEXT;
11888
11889     return tblent ? tblent->newval : NULL;
11890 }
11891
11892 /* add a new entry to a pointer-mapping table */
11893
11894 void
11895 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11896 {
11897     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11898
11899     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11900     PERL_UNUSED_CONTEXT;
11901
11902     if (tblent) {
11903         tblent->newval = newsv;
11904     } else {
11905         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11906
11907         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11908             struct ptr_tbl_arena *new_arena;
11909
11910             Newx(new_arena, 1, struct ptr_tbl_arena);
11911             new_arena->next = tbl->tbl_arena;
11912             tbl->tbl_arena = new_arena;
11913             tbl->tbl_arena_next = new_arena->array;
11914             tbl->tbl_arena_end = new_arena->array
11915                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11916         }
11917
11918         tblent = tbl->tbl_arena_next++;
11919
11920         tblent->oldval = oldsv;
11921         tblent->newval = newsv;
11922         tblent->next = tbl->tbl_ary[entry];
11923         tbl->tbl_ary[entry] = tblent;
11924         tbl->tbl_items++;
11925         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11926             ptr_table_split(tbl);
11927     }
11928 }
11929
11930 /* double the hash bucket size of an existing ptr table */
11931
11932 void
11933 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11934 {
11935     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11936     const UV oldsize = tbl->tbl_max + 1;
11937     UV newsize = oldsize * 2;
11938     UV i;
11939
11940     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11941     PERL_UNUSED_CONTEXT;
11942
11943     Renew(ary, newsize, PTR_TBL_ENT_t*);
11944     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11945     tbl->tbl_max = --newsize;
11946     tbl->tbl_ary = ary;
11947     for (i=0; i < oldsize; i++, ary++) {
11948         PTR_TBL_ENT_t **entp = ary;
11949         PTR_TBL_ENT_t *ent = *ary;
11950         PTR_TBL_ENT_t **curentp;
11951         if (!ent)
11952             continue;
11953         curentp = ary + oldsize;
11954         do {
11955             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11956                 *entp = ent->next;
11957                 ent->next = *curentp;
11958                 *curentp = ent;
11959             }
11960             else
11961                 entp = &ent->next;
11962             ent = *entp;
11963         } while (ent);
11964     }
11965 }
11966
11967 /* remove all the entries from a ptr table */
11968 /* Deprecated - will be removed post 5.14 */
11969
11970 void
11971 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11972 {
11973     if (tbl && tbl->tbl_items) {
11974         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11975
11976         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11977
11978         while (arena) {
11979             struct ptr_tbl_arena *next = arena->next;
11980
11981             Safefree(arena);
11982             arena = next;
11983         };
11984
11985         tbl->tbl_items = 0;
11986         tbl->tbl_arena = NULL;
11987         tbl->tbl_arena_next = NULL;
11988         tbl->tbl_arena_end = NULL;
11989     }
11990 }
11991
11992 /* clear and free a ptr table */
11993
11994 void
11995 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11996 {
11997     struct ptr_tbl_arena *arena;
11998
11999     if (!tbl) {
12000         return;
12001     }
12002
12003     arena = tbl->tbl_arena;
12004
12005     while (arena) {
12006         struct ptr_tbl_arena *next = arena->next;
12007
12008         Safefree(arena);
12009         arena = next;
12010     }
12011
12012     Safefree(tbl->tbl_ary);
12013     Safefree(tbl);
12014 }
12015
12016 #if defined(USE_ITHREADS)
12017
12018 void
12019 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12020 {
12021     PERL_ARGS_ASSERT_RVPV_DUP;
12022
12023     assert(!isREGEXP(sstr));
12024     if (SvROK(sstr)) {
12025         if (SvWEAKREF(sstr)) {
12026             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12027             if (param->flags & CLONEf_JOIN_IN) {
12028                 /* if joining, we add any back references individually rather
12029                  * than copying the whole backref array */
12030                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12031             }
12032         }
12033         else
12034             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12035     }
12036     else if (SvPVX_const(sstr)) {
12037         /* Has something there */
12038         if (SvLEN(sstr)) {
12039             /* Normal PV - clone whole allocated space */
12040             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12041             /* sstr may not be that normal, but actually copy on write.
12042                But we are a true, independent SV, so:  */
12043             SvIsCOW_off(dstr);
12044         }
12045         else {
12046             /* Special case - not normally malloced for some reason */
12047             if (isGV_with_GP(sstr)) {
12048                 /* Don't need to do anything here.  */
12049             }
12050             else if ((SvIsCOW(sstr))) {
12051                 /* A "shared" PV - clone it as "shared" PV */
12052                 SvPV_set(dstr,
12053                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12054                                          param)));
12055             }
12056             else {
12057                 /* Some other special case - random pointer */
12058                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12059             }
12060         }
12061     }
12062     else {
12063         /* Copy the NULL */
12064         SvPV_set(dstr, NULL);
12065     }
12066 }
12067
12068 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12069 static SV **
12070 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12071                       SSize_t items, CLONE_PARAMS *const param)
12072 {
12073     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12074
12075     while (items-- > 0) {
12076         *dest++ = sv_dup_inc(*source++, param);
12077     }
12078
12079     return dest;
12080 }
12081
12082 /* duplicate an SV of any type (including AV, HV etc) */
12083
12084 static SV *
12085 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12086 {
12087     dVAR;
12088     SV *dstr;
12089
12090     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12091
12092     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12093 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12094         abort();
12095 #endif
12096         return NULL;
12097     }
12098     /* look for it in the table first */
12099     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12100     if (dstr)
12101         return dstr;
12102
12103     if(param->flags & CLONEf_JOIN_IN) {
12104         /** We are joining here so we don't want do clone
12105             something that is bad **/
12106         if (SvTYPE(sstr) == SVt_PVHV) {
12107             const HEK * const hvname = HvNAME_HEK(sstr);
12108             if (hvname) {
12109                 /** don't clone stashes if they already exist **/
12110                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12111                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12112                 ptr_table_store(PL_ptr_table, sstr, dstr);
12113                 return dstr;
12114             }
12115         }
12116         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12117             HV *stash = GvSTASH(sstr);
12118             const HEK * hvname;
12119             if (stash && (hvname = HvNAME_HEK(stash))) {
12120                 /** don't clone GVs if they already exist **/
12121                 SV **svp;
12122                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12123                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12124                 svp = hv_fetch(
12125                         stash, GvNAME(sstr),
12126                         GvNAMEUTF8(sstr)
12127                             ? -GvNAMELEN(sstr)
12128                             :  GvNAMELEN(sstr),
12129                         0
12130                       );
12131                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12132                     ptr_table_store(PL_ptr_table, sstr, *svp);
12133                     return *svp;
12134                 }
12135             }
12136         }
12137     }
12138
12139     /* create anew and remember what it is */
12140     new_SV(dstr);
12141
12142 #ifdef DEBUG_LEAKING_SCALARS
12143     dstr->sv_debug_optype = sstr->sv_debug_optype;
12144     dstr->sv_debug_line = sstr->sv_debug_line;
12145     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12146     dstr->sv_debug_parent = (SV*)sstr;
12147     FREE_SV_DEBUG_FILE(dstr);
12148     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12149 #endif
12150
12151     ptr_table_store(PL_ptr_table, sstr, dstr);
12152
12153     /* clone */
12154     SvFLAGS(dstr)       = SvFLAGS(sstr);
12155     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12156     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12157
12158 #ifdef DEBUGGING
12159     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12160         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12161                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12162 #endif
12163
12164     /* don't clone objects whose class has asked us not to */
12165     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12166         SvFLAGS(dstr) = 0;
12167         return dstr;
12168     }
12169
12170     switch (SvTYPE(sstr)) {
12171     case SVt_NULL:
12172         SvANY(dstr)     = NULL;
12173         break;
12174     case SVt_IV:
12175         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12176         if(SvROK(sstr)) {
12177             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12178         } else {
12179             SvIV_set(dstr, SvIVX(sstr));
12180         }
12181         break;
12182     case SVt_NV:
12183         SvANY(dstr)     = new_XNV();
12184         SvNV_set(dstr, SvNVX(sstr));
12185         break;
12186         /* case SVt_DUMMY: */
12187     default:
12188         {
12189             /* These are all the types that need complex bodies allocating.  */
12190             void *new_body;
12191             const svtype sv_type = SvTYPE(sstr);
12192             const struct body_details *const sv_type_details
12193                 = bodies_by_type + sv_type;
12194
12195             switch (sv_type) {
12196             default:
12197                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12198                 break;
12199
12200             case SVt_PVGV:
12201             case SVt_PVIO:
12202             case SVt_PVFM:
12203             case SVt_PVHV:
12204             case SVt_PVAV:
12205             case SVt_PVCV:
12206             case SVt_PVLV:
12207             case SVt_REGEXP:
12208             case SVt_PVMG:
12209             case SVt_PVNV:
12210             case SVt_PVIV:
12211             case SVt_PV:
12212                 assert(sv_type_details->body_size);
12213                 if (sv_type_details->arena) {
12214                     new_body_inline(new_body, sv_type);
12215                     new_body
12216                         = (void*)((char*)new_body - sv_type_details->offset);
12217                 } else {
12218                     new_body = new_NOARENA(sv_type_details);
12219                 }
12220             }
12221             assert(new_body);
12222             SvANY(dstr) = new_body;
12223
12224 #ifndef PURIFY
12225             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12226                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12227                  sv_type_details->copy, char);
12228 #else
12229             Copy(((char*)SvANY(sstr)),
12230                  ((char*)SvANY(dstr)),
12231                  sv_type_details->body_size + sv_type_details->offset, char);
12232 #endif
12233
12234             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12235                 && !isGV_with_GP(dstr)
12236                 && !isREGEXP(dstr)
12237                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12238                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12239
12240             /* The Copy above means that all the source (unduplicated) pointers
12241                are now in the destination.  We can check the flags and the
12242                pointers in either, but it's possible that there's less cache
12243                missing by always going for the destination.
12244                FIXME - instrument and check that assumption  */
12245             if (sv_type >= SVt_PVMG) {
12246                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12247                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12248                 } else if (SvMAGIC(dstr))
12249                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12250                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12251                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12252                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12253             }
12254
12255             /* The cast silences a GCC warning about unhandled types.  */
12256             switch ((int)sv_type) {
12257             case SVt_PV:
12258                 break;
12259             case SVt_PVIV:
12260                 break;
12261             case SVt_PVNV:
12262                 break;
12263             case SVt_PVMG:
12264                 break;
12265             case SVt_REGEXP:
12266               duprex:
12267                 /* FIXME for plugins */
12268                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12269                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12270                 break;
12271             case SVt_PVLV:
12272                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12273                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12274                     LvTARG(dstr) = dstr;
12275                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12276                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12277                 else
12278                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12279                 if (isREGEXP(sstr)) goto duprex;
12280             case SVt_PVGV:
12281                 /* non-GP case already handled above */
12282                 if(isGV_with_GP(sstr)) {
12283                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12284                     /* Don't call sv_add_backref here as it's going to be
12285                        created as part of the magic cloning of the symbol
12286                        table--unless this is during a join and the stash
12287                        is not actually being cloned.  */
12288                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12289                        at the point of this comment.  */
12290                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12291                     if (param->flags & CLONEf_JOIN_IN)
12292                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12293                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12294                     (void)GpREFCNT_inc(GvGP(dstr));
12295                 }
12296                 break;
12297             case SVt_PVIO:
12298                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12299                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12300                     /* I have no idea why fake dirp (rsfps)
12301                        should be treated differently but otherwise
12302                        we end up with leaks -- sky*/
12303                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12304                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12305                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12306                 } else {
12307                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12308                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12309                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12310                     if (IoDIRP(dstr)) {
12311                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12312                     } else {
12313                         NOOP;
12314                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12315                     }
12316                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12317                 }
12318                 if (IoOFP(dstr) == IoIFP(sstr))
12319                     IoOFP(dstr) = IoIFP(dstr);
12320                 else
12321                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12322                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12323                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12324                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12325                 break;
12326             case SVt_PVAV:
12327                 /* avoid cloning an empty array */
12328                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12329                     SV **dst_ary, **src_ary;
12330                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12331
12332                     src_ary = AvARRAY((const AV *)sstr);
12333                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12334                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12335                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12336                     AvALLOC((const AV *)dstr) = dst_ary;
12337                     if (AvREAL((const AV *)sstr)) {
12338                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12339                                                       param);
12340                     }
12341                     else {
12342                         while (items-- > 0)
12343                             *dst_ary++ = sv_dup(*src_ary++, param);
12344                     }
12345                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12346                     while (items-- > 0) {
12347                         *dst_ary++ = &PL_sv_undef;
12348                     }
12349                 }
12350                 else {
12351                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12352                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12353                     AvMAX(  (const AV *)dstr)   = -1;
12354                     AvFILLp((const AV *)dstr)   = -1;
12355                 }
12356                 break;
12357             case SVt_PVHV:
12358                 if (HvARRAY((const HV *)sstr)) {
12359                     STRLEN i = 0;
12360                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12361                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12362                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12363                     char *darray;
12364                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12365                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12366                         char);
12367                     HvARRAY(dstr) = (HE**)darray;
12368                     while (i <= sxhv->xhv_max) {
12369                         const HE * const source = HvARRAY(sstr)[i];
12370                         HvARRAY(dstr)[i] = source
12371                             ? he_dup(source, sharekeys, param) : 0;
12372                         ++i;
12373                     }
12374                     if (SvOOK(sstr)) {
12375                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12376                         struct xpvhv_aux * const daux = HvAUX(dstr);
12377                         /* This flag isn't copied.  */
12378                         SvOOK_on(dstr);
12379
12380                         if (saux->xhv_name_count) {
12381                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12382                             const I32 count
12383                              = saux->xhv_name_count < 0
12384                                 ? -saux->xhv_name_count
12385                                 :  saux->xhv_name_count;
12386                             HEK **shekp = sname + count;
12387                             HEK **dhekp;
12388                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12389                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12390                             while (shekp-- > sname) {
12391                                 dhekp--;
12392                                 *dhekp = hek_dup(*shekp, param);
12393                             }
12394                         }
12395                         else {
12396                             daux->xhv_name_u.xhvnameu_name
12397                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12398                                           param);
12399                         }
12400                         daux->xhv_name_count = saux->xhv_name_count;
12401
12402                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12403                         daux->xhv_riter = saux->xhv_riter;
12404                         daux->xhv_eiter = saux->xhv_eiter
12405                             ? he_dup(saux->xhv_eiter,
12406                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12407                         /* backref array needs refcnt=2; see sv_add_backref */
12408                         daux->xhv_backreferences =
12409                             (param->flags & CLONEf_JOIN_IN)
12410                                 /* when joining, we let the individual GVs and
12411                                  * CVs add themselves to backref as
12412                                  * needed. This avoids pulling in stuff
12413                                  * that isn't required, and simplifies the
12414                                  * case where stashes aren't cloned back
12415                                  * if they already exist in the parent
12416                                  * thread */
12417                             ? NULL
12418                             : saux->xhv_backreferences
12419                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12420                                     ? MUTABLE_AV(SvREFCNT_inc(
12421                                           sv_dup_inc((const SV *)
12422                                             saux->xhv_backreferences, param)))
12423                                     : MUTABLE_AV(sv_dup((const SV *)
12424                                             saux->xhv_backreferences, param))
12425                                 : 0;
12426
12427                         daux->xhv_mro_meta = saux->xhv_mro_meta
12428                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12429                             : 0;
12430                         daux->xhv_super = NULL;
12431
12432                         /* Record stashes for possible cloning in Perl_clone(). */
12433                         if (HvNAME(sstr))
12434                             av_push(param->stashes, dstr);
12435                     }
12436                 }
12437                 else
12438                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12439                 break;
12440             case SVt_PVCV:
12441                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12442                     CvDEPTH(dstr) = 0;
12443                 }
12444                 /*FALLTHROUGH*/
12445             case SVt_PVFM:
12446                 /* NOTE: not refcounted */
12447                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12448                     hv_dup(CvSTASH(dstr), param);
12449                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12450                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12451                 if (!CvISXSUB(dstr)) {
12452                     OP_REFCNT_LOCK;
12453                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12454                     OP_REFCNT_UNLOCK;
12455                     CvSLABBED_off(dstr);
12456                 } else if (CvCONST(dstr)) {
12457                     CvXSUBANY(dstr).any_ptr =
12458                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12459                 }
12460                 assert(!CvSLABBED(dstr));
12461                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12462                 if (CvNAMED(dstr))
12463                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12464                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12465                 /* don't dup if copying back - CvGV isn't refcounted, so the
12466                  * duped GV may never be freed. A bit of a hack! DAPM */
12467                 else
12468                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12469                     CvCVGV_RC(dstr)
12470                     ? gv_dup_inc(CvGV(sstr), param)
12471                     : (param->flags & CLONEf_JOIN_IN)
12472                         ? NULL
12473                         : gv_dup(CvGV(sstr), param);
12474
12475                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12476                 CvOUTSIDE(dstr) =
12477                     CvWEAKOUTSIDE(sstr)
12478                     ? cv_dup(    CvOUTSIDE(dstr), param)
12479                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12480                 break;
12481             }
12482         }
12483     }
12484
12485     return dstr;
12486  }
12487
12488 SV *
12489 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12490 {
12491     PERL_ARGS_ASSERT_SV_DUP_INC;
12492     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12493 }
12494
12495 SV *
12496 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12497 {
12498     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12499     PERL_ARGS_ASSERT_SV_DUP;
12500
12501     /* Track every SV that (at least initially) had a reference count of 0.
12502        We need to do this by holding an actual reference to it in this array.
12503        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12504        (akin to the stashes hash, and the perl stack), we come unstuck if
12505        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12506        thread) is manipulated in a CLONE method, because CLONE runs before the
12507        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12508        (and fix things up by giving each a reference via the temps stack).
12509        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12510        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12511        before the walk of unreferenced happens and a reference to that is SV
12512        added to the temps stack. At which point we have the same SV considered
12513        to be in use, and free to be re-used. Not good.
12514     */
12515     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12516         assert(param->unreferenced);
12517         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12518     }
12519
12520     return dstr;
12521 }
12522
12523 /* duplicate a context */
12524
12525 PERL_CONTEXT *
12526 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12527 {
12528     PERL_CONTEXT *ncxs;
12529
12530     PERL_ARGS_ASSERT_CX_DUP;
12531
12532     if (!cxs)
12533         return (PERL_CONTEXT*)NULL;
12534
12535     /* look for it in the table first */
12536     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12537     if (ncxs)
12538         return ncxs;
12539
12540     /* create anew and remember what it is */
12541     Newx(ncxs, max + 1, PERL_CONTEXT);
12542     ptr_table_store(PL_ptr_table, cxs, ncxs);
12543     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12544
12545     while (ix >= 0) {
12546         PERL_CONTEXT * const ncx = &ncxs[ix];
12547         if (CxTYPE(ncx) == CXt_SUBST) {
12548             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12549         }
12550         else {
12551             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12552             switch (CxTYPE(ncx)) {
12553             case CXt_SUB:
12554                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12555                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12556                                            : cv_dup(ncx->blk_sub.cv,param));
12557                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12558                                            ? av_dup_inc(ncx->blk_sub.argarray,
12559                                                         param)
12560                                            : NULL);
12561                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12562                                                      param);
12563                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12564                                            ncx->blk_sub.oldcomppad);
12565                 break;
12566             case CXt_EVAL:
12567                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12568                                                       param);
12569                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12570                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12571                 break;
12572             case CXt_LOOP_LAZYSV:
12573                 ncx->blk_loop.state_u.lazysv.end
12574                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12575                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12576                    actually being the same function, and order equivalence of
12577                    the two unions.
12578                    We can assert the later [but only at run time :-(]  */
12579                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12580                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12581             case CXt_LOOP_FOR:
12582                 ncx->blk_loop.state_u.ary.ary
12583                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12584             case CXt_LOOP_LAZYIV:
12585             case CXt_LOOP_PLAIN:
12586                 if (CxPADLOOP(ncx)) {
12587                     ncx->blk_loop.itervar_u.oldcomppad
12588                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12589                                         ncx->blk_loop.itervar_u.oldcomppad);
12590                 } else {
12591                     ncx->blk_loop.itervar_u.gv
12592                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12593                                     param);
12594                 }
12595                 break;
12596             case CXt_FORMAT:
12597                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12598                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12599                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12600                                                      param);
12601                 break;
12602             case CXt_BLOCK:
12603             case CXt_NULL:
12604             case CXt_WHEN:
12605             case CXt_GIVEN:
12606                 break;
12607             }
12608         }
12609         --ix;
12610     }
12611     return ncxs;
12612 }
12613
12614 /* duplicate a stack info structure */
12615
12616 PERL_SI *
12617 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12618 {
12619     PERL_SI *nsi;
12620
12621     PERL_ARGS_ASSERT_SI_DUP;
12622
12623     if (!si)
12624         return (PERL_SI*)NULL;
12625
12626     /* look for it in the table first */
12627     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12628     if (nsi)
12629         return nsi;
12630
12631     /* create anew and remember what it is */
12632     Newxz(nsi, 1, PERL_SI);
12633     ptr_table_store(PL_ptr_table, si, nsi);
12634
12635     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12636     nsi->si_cxix        = si->si_cxix;
12637     nsi->si_cxmax       = si->si_cxmax;
12638     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12639     nsi->si_type        = si->si_type;
12640     nsi->si_prev        = si_dup(si->si_prev, param);
12641     nsi->si_next        = si_dup(si->si_next, param);
12642     nsi->si_markoff     = si->si_markoff;
12643
12644     return nsi;
12645 }
12646
12647 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12648 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12649 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12650 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12651 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12652 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12653 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12654 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12655 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12656 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12657 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12658 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12659 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12660 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12661 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12662 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12663
12664 /* XXXXX todo */
12665 #define pv_dup_inc(p)   SAVEPV(p)
12666 #define pv_dup(p)       SAVEPV(p)
12667 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12668
12669 /* map any object to the new equivent - either something in the
12670  * ptr table, or something in the interpreter structure
12671  */
12672
12673 void *
12674 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12675 {
12676     void *ret;
12677
12678     PERL_ARGS_ASSERT_ANY_DUP;
12679
12680     if (!v)
12681         return (void*)NULL;
12682
12683     /* look for it in the table first */
12684     ret = ptr_table_fetch(PL_ptr_table, v);
12685     if (ret)
12686         return ret;
12687
12688     /* see if it is part of the interpreter structure */
12689     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12690         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12691     else {
12692         ret = v;
12693     }
12694
12695     return ret;
12696 }
12697
12698 /* duplicate the save stack */
12699
12700 ANY *
12701 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12702 {
12703     dVAR;
12704     ANY * const ss      = proto_perl->Isavestack;
12705     const I32 max       = proto_perl->Isavestack_max;
12706     I32 ix              = proto_perl->Isavestack_ix;
12707     ANY *nss;
12708     const SV *sv;
12709     const GV *gv;
12710     const AV *av;
12711     const HV *hv;
12712     void* ptr;
12713     int intval;
12714     long longval;
12715     GP *gp;
12716     IV iv;
12717     I32 i;
12718     char *c = NULL;
12719     void (*dptr) (void*);
12720     void (*dxptr) (pTHX_ void*);
12721
12722     PERL_ARGS_ASSERT_SS_DUP;
12723
12724     Newxz(nss, max, ANY);
12725
12726     while (ix > 0) {
12727         const UV uv = POPUV(ss,ix);
12728         const U8 type = (U8)uv & SAVE_MASK;
12729
12730         TOPUV(nss,ix) = uv;
12731         switch (type) {
12732         case SAVEt_CLEARSV:
12733         case SAVEt_CLEARPADRANGE:
12734             break;
12735         case SAVEt_HELEM:               /* hash element */
12736             sv = (const SV *)POPPTR(ss,ix);
12737             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12738             /* fall through */
12739         case SAVEt_ITEM:                        /* normal string */
12740         case SAVEt_GVSV:                        /* scalar slot in GV */
12741         case SAVEt_SV:                          /* scalar reference */
12742             sv = (const SV *)POPPTR(ss,ix);
12743             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12744             /* fall through */
12745         case SAVEt_FREESV:
12746         case SAVEt_MORTALIZESV:
12747             sv = (const SV *)POPPTR(ss,ix);
12748             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12749             break;
12750         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12751             c = (char*)POPPTR(ss,ix);
12752             TOPPTR(nss,ix) = savesharedpv(c);
12753             ptr = POPPTR(ss,ix);
12754             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12755             break;
12756         case SAVEt_GENERIC_SVREF:               /* generic sv */
12757         case SAVEt_SVREF:                       /* scalar reference */
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             break;
12763         case SAVEt_GVSLOT:              /* any slot in GV */
12764             sv = (const SV *)POPPTR(ss,ix);
12765             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12766             ptr = POPPTR(ss,ix);
12767             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12768             sv = (const SV *)POPPTR(ss,ix);
12769             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12770             break;
12771         case SAVEt_HV:                          /* hash reference */
12772         case SAVEt_AV:                          /* array reference */
12773             sv = (const SV *) POPPTR(ss,ix);
12774             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12775             /* fall through */
12776         case SAVEt_COMPPAD:
12777         case SAVEt_NSTAB:
12778             sv = (const SV *) POPPTR(ss,ix);
12779             TOPPTR(nss,ix) = sv_dup(sv, param);
12780             break;
12781         case SAVEt_INT:                         /* int reference */
12782             ptr = POPPTR(ss,ix);
12783             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12784             intval = (int)POPINT(ss,ix);
12785             TOPINT(nss,ix) = intval;
12786             break;
12787         case SAVEt_LONG:                        /* long reference */
12788             ptr = POPPTR(ss,ix);
12789             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12790             longval = (long)POPLONG(ss,ix);
12791             TOPLONG(nss,ix) = longval;
12792             break;
12793         case SAVEt_I32:                         /* I32 reference */
12794             ptr = POPPTR(ss,ix);
12795             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12796             i = POPINT(ss,ix);
12797             TOPINT(nss,ix) = i;
12798             break;
12799         case SAVEt_IV:                          /* IV reference */
12800             ptr = POPPTR(ss,ix);
12801             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12802             iv = POPIV(ss,ix);
12803             TOPIV(nss,ix) = iv;
12804             break;
12805         case SAVEt_HPTR:                        /* HV* reference */
12806         case SAVEt_APTR:                        /* AV* reference */
12807         case SAVEt_SPTR:                        /* SV* reference */
12808             ptr = POPPTR(ss,ix);
12809             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12810             sv = (const SV *)POPPTR(ss,ix);
12811             TOPPTR(nss,ix) = sv_dup(sv, param);
12812             break;
12813         case SAVEt_VPTR:                        /* random* reference */
12814             ptr = POPPTR(ss,ix);
12815             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12816             /* Fall through */
12817         case SAVEt_INT_SMALL:
12818         case SAVEt_I32_SMALL:
12819         case SAVEt_I16:                         /* I16 reference */
12820         case SAVEt_I8:                          /* I8 reference */
12821         case SAVEt_BOOL:
12822             ptr = POPPTR(ss,ix);
12823             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12824             break;
12825         case SAVEt_GENERIC_PVREF:               /* generic char* */
12826         case SAVEt_PPTR:                        /* char* reference */
12827             ptr = POPPTR(ss,ix);
12828             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12829             c = (char*)POPPTR(ss,ix);
12830             TOPPTR(nss,ix) = pv_dup(c);
12831             break;
12832         case SAVEt_GP:                          /* scalar reference */
12833             gp = (GP*)POPPTR(ss,ix);
12834             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12835             (void)GpREFCNT_inc(gp);
12836             gv = (const GV *)POPPTR(ss,ix);
12837             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12838             break;
12839         case SAVEt_FREEOP:
12840             ptr = POPPTR(ss,ix);
12841             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12842                 /* these are assumed to be refcounted properly */
12843                 OP *o;
12844                 switch (((OP*)ptr)->op_type) {
12845                 case OP_LEAVESUB:
12846                 case OP_LEAVESUBLV:
12847                 case OP_LEAVEEVAL:
12848                 case OP_LEAVE:
12849                 case OP_SCOPE:
12850                 case OP_LEAVEWRITE:
12851                     TOPPTR(nss,ix) = ptr;
12852                     o = (OP*)ptr;
12853                     OP_REFCNT_LOCK;
12854                     (void) OpREFCNT_inc(o);
12855                     OP_REFCNT_UNLOCK;
12856                     break;
12857                 default:
12858                     TOPPTR(nss,ix) = NULL;
12859                     break;
12860                 }
12861             }
12862             else
12863                 TOPPTR(nss,ix) = NULL;
12864             break;
12865         case SAVEt_FREECOPHH:
12866             ptr = POPPTR(ss,ix);
12867             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12868             break;
12869         case SAVEt_DELETE:
12870             hv = (const HV *)POPPTR(ss,ix);
12871             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12872             i = POPINT(ss,ix);
12873             TOPINT(nss,ix) = i;
12874             /* Fall through */
12875         case SAVEt_FREEPV:
12876             c = (char*)POPPTR(ss,ix);
12877             TOPPTR(nss,ix) = pv_dup_inc(c);
12878             break;
12879         case SAVEt_STACK_POS:           /* Position on Perl stack */
12880             i = POPINT(ss,ix);
12881             TOPINT(nss,ix) = i;
12882             break;
12883         case SAVEt_DESTRUCTOR:
12884             ptr = POPPTR(ss,ix);
12885             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12886             dptr = POPDPTR(ss,ix);
12887             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12888                                         any_dup(FPTR2DPTR(void *, dptr),
12889                                                 proto_perl));
12890             break;
12891         case SAVEt_DESTRUCTOR_X:
12892             ptr = POPPTR(ss,ix);
12893             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12894             dxptr = POPDXPTR(ss,ix);
12895             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12896                                          any_dup(FPTR2DPTR(void *, dxptr),
12897                                                  proto_perl));
12898             break;
12899         case SAVEt_REGCONTEXT:
12900         case SAVEt_ALLOC:
12901             ix -= uv >> SAVE_TIGHT_SHIFT;
12902             break;
12903         case SAVEt_AELEM:               /* array element */
12904             sv = (const SV *)POPPTR(ss,ix);
12905             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12906             i = POPINT(ss,ix);
12907             TOPINT(nss,ix) = i;
12908             av = (const AV *)POPPTR(ss,ix);
12909             TOPPTR(nss,ix) = av_dup_inc(av, param);
12910             break;
12911         case SAVEt_OP:
12912             ptr = POPPTR(ss,ix);
12913             TOPPTR(nss,ix) = ptr;
12914             break;
12915         case SAVEt_HINTS:
12916             ptr = POPPTR(ss,ix);
12917             ptr = cophh_copy((COPHH*)ptr);
12918             TOPPTR(nss,ix) = ptr;
12919             i = POPINT(ss,ix);
12920             TOPINT(nss,ix) = i;
12921             if (i & HINT_LOCALIZE_HH) {
12922                 hv = (const HV *)POPPTR(ss,ix);
12923                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12924             }
12925             break;
12926         case SAVEt_PADSV_AND_MORTALIZE:
12927             longval = (long)POPLONG(ss,ix);
12928             TOPLONG(nss,ix) = longval;
12929             ptr = POPPTR(ss,ix);
12930             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12931             sv = (const SV *)POPPTR(ss,ix);
12932             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12933             break;
12934         case SAVEt_SET_SVFLAGS:
12935             i = POPINT(ss,ix);
12936             TOPINT(nss,ix) = i;
12937             i = POPINT(ss,ix);
12938             TOPINT(nss,ix) = i;
12939             sv = (const SV *)POPPTR(ss,ix);
12940             TOPPTR(nss,ix) = sv_dup(sv, param);
12941             break;
12942         case SAVEt_COMPILE_WARNINGS:
12943             ptr = POPPTR(ss,ix);
12944             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12945             break;
12946         case SAVEt_PARSER:
12947             ptr = POPPTR(ss,ix);
12948             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12949             break;
12950         default:
12951             Perl_croak(aTHX_
12952                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12953         }
12954     }
12955
12956     return nss;
12957 }
12958
12959
12960 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12961  * flag to the result. This is done for each stash before cloning starts,
12962  * so we know which stashes want their objects cloned */
12963
12964 static void
12965 do_mark_cloneable_stash(pTHX_ SV *const sv)
12966 {
12967     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12968     if (hvname) {
12969         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12970         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12971         if (cloner && GvCV(cloner)) {
12972             dSP;
12973             UV status;
12974
12975             ENTER;
12976             SAVETMPS;
12977             PUSHMARK(SP);
12978             mXPUSHs(newSVhek(hvname));
12979             PUTBACK;
12980             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12981             SPAGAIN;
12982             status = POPu;
12983             PUTBACK;
12984             FREETMPS;
12985             LEAVE;
12986             if (status)
12987                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12988         }
12989     }
12990 }
12991
12992
12993
12994 /*
12995 =for apidoc perl_clone
12996
12997 Create and return a new interpreter by cloning the current one.
12998
12999 perl_clone takes these flags as parameters:
13000
13001 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13002 without it we only clone the data and zero the stacks,
13003 with it we copy the stacks and the new perl interpreter is
13004 ready to run at the exact same point as the previous one.
13005 The pseudo-fork code uses COPY_STACKS while the
13006 threads->create doesn't.
13007
13008 CLONEf_KEEP_PTR_TABLE -
13009 perl_clone keeps a ptr_table with the pointer of the old
13010 variable as a key and the new variable as a value,
13011 this allows it to check if something has been cloned and not
13012 clone it again but rather just use the value and increase the
13013 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13014 the ptr_table using the function
13015 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13016 reason to keep it around is if you want to dup some of your own
13017 variable who are outside the graph perl scans, example of this
13018 code is in threads.xs create.
13019
13020 CLONEf_CLONE_HOST -
13021 This is a win32 thing, it is ignored on unix, it tells perls
13022 win32host code (which is c++) to clone itself, this is needed on
13023 win32 if you want to run two threads at the same time,
13024 if you just want to do some stuff in a separate perl interpreter
13025 and then throw it away and return to the original one,
13026 you don't need to do anything.
13027
13028 =cut
13029 */
13030
13031 /* XXX the above needs expanding by someone who actually understands it ! */
13032 EXTERN_C PerlInterpreter *
13033 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13034
13035 PerlInterpreter *
13036 perl_clone(PerlInterpreter *proto_perl, UV flags)
13037 {
13038    dVAR;
13039 #ifdef PERL_IMPLICIT_SYS
13040
13041     PERL_ARGS_ASSERT_PERL_CLONE;
13042
13043    /* perlhost.h so we need to call into it
13044    to clone the host, CPerlHost should have a c interface, sky */
13045
13046    if (flags & CLONEf_CLONE_HOST) {
13047        return perl_clone_host(proto_perl,flags);
13048    }
13049    return perl_clone_using(proto_perl, flags,
13050                             proto_perl->IMem,
13051                             proto_perl->IMemShared,
13052                             proto_perl->IMemParse,
13053                             proto_perl->IEnv,
13054                             proto_perl->IStdIO,
13055                             proto_perl->ILIO,
13056                             proto_perl->IDir,
13057                             proto_perl->ISock,
13058                             proto_perl->IProc);
13059 }
13060
13061 PerlInterpreter *
13062 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13063                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13064                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13065                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13066                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13067                  struct IPerlProc* ipP)
13068 {
13069     /* XXX many of the string copies here can be optimized if they're
13070      * constants; they need to be allocated as common memory and just
13071      * their pointers copied. */
13072
13073     IV i;
13074     CLONE_PARAMS clone_params;
13075     CLONE_PARAMS* const param = &clone_params;
13076
13077     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13078
13079     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13080 #else           /* !PERL_IMPLICIT_SYS */
13081     IV i;
13082     CLONE_PARAMS clone_params;
13083     CLONE_PARAMS* param = &clone_params;
13084     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13085
13086     PERL_ARGS_ASSERT_PERL_CLONE;
13087 #endif          /* PERL_IMPLICIT_SYS */
13088
13089     /* for each stash, determine whether its objects should be cloned */
13090     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13091     PERL_SET_THX(my_perl);
13092
13093 #ifdef DEBUGGING
13094     PoisonNew(my_perl, 1, PerlInterpreter);
13095     PL_op = NULL;
13096     PL_curcop = NULL;
13097     PL_defstash = NULL; /* may be used by perl malloc() */
13098     PL_markstack = 0;
13099     PL_scopestack = 0;
13100     PL_scopestack_name = 0;
13101     PL_savestack = 0;
13102     PL_savestack_ix = 0;
13103     PL_savestack_max = -1;
13104     PL_sig_pending = 0;
13105     PL_parser = NULL;
13106     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13107 #  ifdef DEBUG_LEAKING_SCALARS
13108     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13109 #  endif
13110 #else   /* !DEBUGGING */
13111     Zero(my_perl, 1, PerlInterpreter);
13112 #endif  /* DEBUGGING */
13113
13114 #ifdef PERL_IMPLICIT_SYS
13115     /* host pointers */
13116     PL_Mem              = ipM;
13117     PL_MemShared        = ipMS;
13118     PL_MemParse         = ipMP;
13119     PL_Env              = ipE;
13120     PL_StdIO            = ipStd;
13121     PL_LIO              = ipLIO;
13122     PL_Dir              = ipD;
13123     PL_Sock             = ipS;
13124     PL_Proc             = ipP;
13125 #endif          /* PERL_IMPLICIT_SYS */
13126
13127
13128     param->flags = flags;
13129     /* Nothing in the core code uses this, but we make it available to
13130        extensions (using mg_dup).  */
13131     param->proto_perl = proto_perl;
13132     /* Likely nothing will use this, but it is initialised to be consistent
13133        with Perl_clone_params_new().  */
13134     param->new_perl = my_perl;
13135     param->unreferenced = NULL;
13136
13137
13138     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13139
13140     PL_body_arenas = NULL;
13141     Zero(&PL_body_roots, 1, PL_body_roots);
13142     
13143     PL_sv_count         = 0;
13144     PL_sv_root          = NULL;
13145     PL_sv_arenaroot     = NULL;
13146
13147     PL_debug            = proto_perl->Idebug;
13148
13149     /* dbargs array probably holds garbage */
13150     PL_dbargs           = NULL;
13151
13152     PL_compiling = proto_perl->Icompiling;
13153
13154     /* pseudo environmental stuff */
13155     PL_origargc         = proto_perl->Iorigargc;
13156     PL_origargv         = proto_perl->Iorigargv;
13157
13158 #if !NO_TAINT_SUPPORT
13159     /* Set tainting stuff before PerlIO_debug can possibly get called */
13160     PL_tainting         = proto_perl->Itainting;
13161     PL_taint_warn       = proto_perl->Itaint_warn;
13162 #else
13163     PL_tainting         = FALSE;
13164     PL_taint_warn       = FALSE;
13165 #endif
13166
13167     PL_minus_c          = proto_perl->Iminus_c;
13168
13169     PL_localpatches     = proto_perl->Ilocalpatches;
13170     PL_splitstr         = proto_perl->Isplitstr;
13171     PL_minus_n          = proto_perl->Iminus_n;
13172     PL_minus_p          = proto_perl->Iminus_p;
13173     PL_minus_l          = proto_perl->Iminus_l;
13174     PL_minus_a          = proto_perl->Iminus_a;
13175     PL_minus_E          = proto_perl->Iminus_E;
13176     PL_minus_F          = proto_perl->Iminus_F;
13177     PL_doswitches       = proto_perl->Idoswitches;
13178     PL_dowarn           = proto_perl->Idowarn;
13179 #ifdef PERL_SAWAMPERSAND
13180     PL_sawampersand     = proto_perl->Isawampersand;
13181 #endif
13182     PL_unsafe           = proto_perl->Iunsafe;
13183     PL_perldb           = proto_perl->Iperldb;
13184     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13185     PL_exit_flags       = proto_perl->Iexit_flags;
13186
13187     /* XXX time(&PL_basetime) when asked for? */
13188     PL_basetime         = proto_perl->Ibasetime;
13189
13190     PL_maxsysfd         = proto_perl->Imaxsysfd;
13191     PL_statusvalue      = proto_perl->Istatusvalue;
13192 #ifdef VMS
13193     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13194 #else
13195     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13196 #endif
13197
13198     /* RE engine related */
13199     PL_regmatch_slab    = NULL;
13200     PL_reg_curpm        = NULL;
13201
13202     PL_sub_generation   = proto_perl->Isub_generation;
13203
13204     /* funky return mechanisms */
13205     PL_forkprocess      = proto_perl->Iforkprocess;
13206
13207     /* internal state */
13208     PL_maxo             = proto_perl->Imaxo;
13209
13210     PL_main_start       = proto_perl->Imain_start;
13211     PL_eval_root        = proto_perl->Ieval_root;
13212     PL_eval_start       = proto_perl->Ieval_start;
13213
13214     PL_filemode         = proto_perl->Ifilemode;
13215     PL_lastfd           = proto_perl->Ilastfd;
13216     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13217     PL_Argv             = NULL;
13218     PL_Cmd              = NULL;
13219     PL_gensym           = proto_perl->Igensym;
13220
13221     PL_laststatval      = proto_perl->Ilaststatval;
13222     PL_laststype        = proto_perl->Ilaststype;
13223     PL_mess_sv          = NULL;
13224
13225     PL_profiledata      = NULL;
13226
13227     PL_generation       = proto_perl->Igeneration;
13228
13229     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13230     PL_in_clean_all     = proto_perl->Iin_clean_all;
13231
13232     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13233     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13234     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13235     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13236     PL_nomemok          = proto_perl->Inomemok;
13237     PL_an               = proto_perl->Ian;
13238     PL_evalseq          = proto_perl->Ievalseq;
13239     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13240     PL_origalen         = proto_perl->Iorigalen;
13241
13242     PL_sighandlerp      = proto_perl->Isighandlerp;
13243
13244     PL_runops           = proto_perl->Irunops;
13245
13246     PL_subline          = proto_perl->Isubline;
13247
13248 #ifdef FCRYPT
13249     PL_cryptseen        = proto_perl->Icryptseen;
13250 #endif
13251
13252     PL_hints            = proto_perl->Ihints;
13253
13254 #ifdef USE_LOCALE_COLLATE
13255     PL_collation_ix     = proto_perl->Icollation_ix;
13256     PL_collation_standard       = proto_perl->Icollation_standard;
13257     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13258     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13259 #endif /* USE_LOCALE_COLLATE */
13260
13261 #ifdef USE_LOCALE_NUMERIC
13262     PL_numeric_standard = proto_perl->Inumeric_standard;
13263     PL_numeric_local    = proto_perl->Inumeric_local;
13264 #endif /* !USE_LOCALE_NUMERIC */
13265
13266     /* Did the locale setup indicate UTF-8? */
13267     PL_utf8locale       = proto_perl->Iutf8locale;
13268     /* Unicode features (see perlrun/-C) */
13269     PL_unicode          = proto_perl->Iunicode;
13270
13271     /* Pre-5.8 signals control */
13272     PL_signals          = proto_perl->Isignals;
13273
13274     /* times() ticks per second */
13275     PL_clocktick        = proto_perl->Iclocktick;
13276
13277     /* Recursion stopper for PerlIO_find_layer */
13278     PL_in_load_module   = proto_perl->Iin_load_module;
13279
13280     /* sort() routine */
13281     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13282
13283     /* Not really needed/useful since the reenrant_retint is "volatile",
13284      * but do it for consistency's sake. */
13285     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13286
13287     /* Hooks to shared SVs and locks. */
13288     PL_sharehook        = proto_perl->Isharehook;
13289     PL_lockhook         = proto_perl->Ilockhook;
13290     PL_unlockhook       = proto_perl->Iunlockhook;
13291     PL_threadhook       = proto_perl->Ithreadhook;
13292     PL_destroyhook      = proto_perl->Idestroyhook;
13293     PL_signalhook       = proto_perl->Isignalhook;
13294
13295     PL_globhook         = proto_perl->Iglobhook;
13296
13297     /* swatch cache */
13298     PL_last_swash_hv    = NULL; /* reinits on demand */
13299     PL_last_swash_klen  = 0;
13300     PL_last_swash_key[0]= '\0';
13301     PL_last_swash_tmps  = (U8*)NULL;
13302     PL_last_swash_slen  = 0;
13303
13304     PL_srand_called     = proto_perl->Isrand_called;
13305
13306     if (flags & CLONEf_COPY_STACKS) {
13307         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13308         PL_tmps_ix              = proto_perl->Itmps_ix;
13309         PL_tmps_max             = proto_perl->Itmps_max;
13310         PL_tmps_floor           = proto_perl->Itmps_floor;
13311
13312         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13313          * NOTE: unlike the others! */
13314         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13315         PL_scopestack_max       = proto_perl->Iscopestack_max;
13316
13317         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13318          * NOTE: unlike the others! */
13319         PL_savestack_ix         = proto_perl->Isavestack_ix;
13320         PL_savestack_max        = proto_perl->Isavestack_max;
13321     }
13322
13323     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13324     PL_top_env          = &PL_start_env;
13325
13326     PL_op               = proto_perl->Iop;
13327
13328     PL_Sv               = NULL;
13329     PL_Xpv              = (XPV*)NULL;
13330     my_perl->Ina        = proto_perl->Ina;
13331
13332     PL_statbuf          = proto_perl->Istatbuf;
13333     PL_statcache        = proto_perl->Istatcache;
13334
13335 #ifdef HAS_TIMES
13336     PL_timesbuf         = proto_perl->Itimesbuf;
13337 #endif
13338
13339 #if !NO_TAINT_SUPPORT
13340     PL_tainted          = proto_perl->Itainted;
13341 #else
13342     PL_tainted          = FALSE;
13343 #endif
13344     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13345
13346     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13347
13348     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13349     PL_restartop        = proto_perl->Irestartop;
13350     PL_in_eval          = proto_perl->Iin_eval;
13351     PL_delaymagic       = proto_perl->Idelaymagic;
13352     PL_phase            = proto_perl->Iphase;
13353     PL_localizing       = proto_perl->Ilocalizing;
13354
13355     PL_hv_fetch_ent_mh  = NULL;
13356     PL_modcount         = proto_perl->Imodcount;
13357     PL_lastgotoprobe    = NULL;
13358     PL_dumpindent       = proto_perl->Idumpindent;
13359
13360     PL_efloatbuf        = NULL;         /* reinits on demand */
13361     PL_efloatsize       = 0;                    /* reinits on demand */
13362
13363     /* regex stuff */
13364
13365     PL_colorset         = 0;            /* reinits PL_colors[] */
13366     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13367
13368     /* Pluggable optimizer */
13369     PL_peepp            = proto_perl->Ipeepp;
13370     PL_rpeepp           = proto_perl->Irpeepp;
13371     /* op_free() hook */
13372     PL_opfreehook       = proto_perl->Iopfreehook;
13373
13374 #ifdef USE_REENTRANT_API
13375     /* XXX: things like -Dm will segfault here in perlio, but doing
13376      *  PERL_SET_CONTEXT(proto_perl);
13377      * breaks too many other things
13378      */
13379     Perl_reentrant_init(aTHX);
13380 #endif
13381
13382     /* create SV map for pointer relocation */
13383     PL_ptr_table = ptr_table_new();
13384
13385     /* initialize these special pointers as early as possible */
13386     init_constants();
13387     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13388     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13389     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13390
13391     /* create (a non-shared!) shared string table */
13392     PL_strtab           = newHV();
13393     HvSHAREKEYS_off(PL_strtab);
13394     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13395     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13396
13397     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13398
13399     /* This PV will be free'd special way so must set it same way op.c does */
13400     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13401     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13402
13403     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13404     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13405     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13406     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13407
13408     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13409     /* This makes no difference to the implementation, as it always pushes
13410        and shifts pointers to other SVs without changing their reference
13411        count, with the array becoming empty before it is freed. However, it
13412        makes it conceptually clear what is going on, and will avoid some
13413        work inside av.c, filling slots between AvFILL() and AvMAX() with
13414        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13415     AvREAL_off(param->stashes);
13416
13417     if (!(flags & CLONEf_COPY_STACKS)) {
13418         param->unreferenced = newAV();
13419     }
13420
13421 #ifdef PERLIO_LAYERS
13422     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13423     PerlIO_clone(aTHX_ proto_perl, param);
13424 #endif
13425
13426     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13427     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13428     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13429     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13430     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13431     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13432
13433     /* switches */
13434     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13435     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13436     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13437     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13438
13439     /* magical thingies */
13440
13441     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13442
13443     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13444     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13445     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13446
13447    
13448     /* Clone the regex array */
13449     /* ORANGE FIXME for plugins, probably in the SV dup code.
13450        newSViv(PTR2IV(CALLREGDUPE(
13451        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13452     */
13453     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13454     PL_regex_pad = AvARRAY(PL_regex_padav);
13455
13456     PL_stashpadmax      = proto_perl->Istashpadmax;
13457     PL_stashpadix       = proto_perl->Istashpadix ;
13458     Newx(PL_stashpad, PL_stashpadmax, HV *);
13459     {
13460         PADOFFSET o = 0;
13461         for (; o < PL_stashpadmax; ++o)
13462             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13463     }
13464
13465     /* shortcuts to various I/O objects */
13466     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13467     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13468     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13469     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13470     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13471     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13472     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13473
13474     /* shortcuts to regexp stuff */
13475     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13476
13477     /* shortcuts to misc objects */
13478     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13479
13480     /* shortcuts to debugging objects */
13481     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13482     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13483     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13484     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13485     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13486     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13487
13488     /* symbol tables */
13489     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13490     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13491     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13492     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13493     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13494
13495     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13496     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13497     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13498     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13499     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13500     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13501     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13502     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13503
13504     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13505
13506     /* subprocess state */
13507     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13508
13509     if (proto_perl->Iop_mask)
13510         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13511     else
13512         PL_op_mask      = NULL;
13513     /* PL_asserting        = proto_perl->Iasserting; */
13514
13515     /* current interpreter roots */
13516     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13517     OP_REFCNT_LOCK;
13518     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13519     OP_REFCNT_UNLOCK;
13520
13521     /* runtime control stuff */
13522     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13523
13524     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13525
13526     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13527
13528     /* interpreter atexit processing */
13529     PL_exitlistlen      = proto_perl->Iexitlistlen;
13530     if (PL_exitlistlen) {
13531         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13532         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13533     }
13534     else
13535         PL_exitlist     = (PerlExitListEntry*)NULL;
13536
13537     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13538     if (PL_my_cxt_size) {
13539         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13540         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13541 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13542         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13543         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13544 #endif
13545     }
13546     else {
13547         PL_my_cxt_list  = (void**)NULL;
13548 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13549         PL_my_cxt_keys  = (const char**)NULL;
13550 #endif
13551     }
13552     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13553     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13554     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13555     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13556
13557     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13558
13559     PAD_CLONE_VARS(proto_perl, param);
13560
13561 #ifdef HAVE_INTERP_INTERN
13562     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13563 #endif
13564
13565     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13566
13567 #ifdef PERL_USES_PL_PIDSTATUS
13568     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13569 #endif
13570     PL_osname           = SAVEPV(proto_perl->Iosname);
13571     PL_parser           = parser_dup(proto_perl->Iparser, param);
13572
13573     /* XXX this only works if the saved cop has already been cloned */
13574     if (proto_perl->Iparser) {
13575         PL_parser->saved_curcop = (COP*)any_dup(
13576                                     proto_perl->Iparser->saved_curcop,
13577                                     proto_perl);
13578     }
13579
13580     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13581
13582 #ifdef USE_LOCALE_COLLATE
13583     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13584 #endif /* USE_LOCALE_COLLATE */
13585
13586 #ifdef USE_LOCALE_NUMERIC
13587     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13588     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13589 #endif /* !USE_LOCALE_NUMERIC */
13590
13591     /* Unicode inversion lists */
13592     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13593     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13594
13595     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13596     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13597
13598     /* utf8 character class swashes */
13599     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13600         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13601     }
13602     for (i = 0; i < POSIX_CC_COUNT; i++) {
13603         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13604         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13605         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13606     }
13607     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13608     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13609     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13610     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13611     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13612     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13613     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13614     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13615     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13616     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13617     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13618     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13619     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13620     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13621     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13622     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13623     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13624     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13625     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13626
13627     if (proto_perl->Ipsig_pend) {
13628         Newxz(PL_psig_pend, SIG_SIZE, int);
13629     }
13630     else {
13631         PL_psig_pend    = (int*)NULL;
13632     }
13633
13634     if (proto_perl->Ipsig_name) {
13635         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13636         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13637                             param);
13638         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13639     }
13640     else {
13641         PL_psig_ptr     = (SV**)NULL;
13642         PL_psig_name    = (SV**)NULL;
13643     }
13644
13645     if (flags & CLONEf_COPY_STACKS) {
13646         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13647         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13648                             PL_tmps_ix+1, param);
13649
13650         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13651         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13652         Newxz(PL_markstack, i, I32);
13653         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13654                                                   - proto_perl->Imarkstack);
13655         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13656                                                   - proto_perl->Imarkstack);
13657         Copy(proto_perl->Imarkstack, PL_markstack,
13658              PL_markstack_ptr - PL_markstack + 1, I32);
13659
13660         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13661          * NOTE: unlike the others! */
13662         Newxz(PL_scopestack, PL_scopestack_max, I32);
13663         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13664
13665 #ifdef DEBUGGING
13666         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13667         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13668 #endif
13669         /* reset stack AV to correct length before its duped via
13670          * PL_curstackinfo */
13671         AvFILLp(proto_perl->Icurstack) =
13672                             proto_perl->Istack_sp - proto_perl->Istack_base;
13673
13674         /* NOTE: si_dup() looks at PL_markstack */
13675         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13676
13677         /* PL_curstack          = PL_curstackinfo->si_stack; */
13678         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13679         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13680
13681         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13682         PL_stack_base           = AvARRAY(PL_curstack);
13683         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13684                                                    - proto_perl->Istack_base);
13685         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13686
13687         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13688         PL_savestack            = ss_dup(proto_perl, param);
13689     }
13690     else {
13691         init_stacks();
13692         ENTER;                  /* perl_destruct() wants to LEAVE; */
13693     }
13694
13695     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13696     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13697
13698     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13699     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13700     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13701     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13702     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13703     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13704
13705     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13706
13707     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13708     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13709     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13710
13711     PL_stashcache       = newHV();
13712
13713     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13714                                             proto_perl->Iwatchaddr);
13715     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13716     if (PL_debug && PL_watchaddr) {
13717         PerlIO_printf(Perl_debug_log,
13718           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13719           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13720           PTR2UV(PL_watchok));
13721     }
13722
13723     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13724     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13725     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13726
13727     /* Call the ->CLONE method, if it exists, for each of the stashes
13728        identified by sv_dup() above.
13729     */
13730     while(av_len(param->stashes) != -1) {
13731         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13732         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13733         if (cloner && GvCV(cloner)) {
13734             dSP;
13735             ENTER;
13736             SAVETMPS;
13737             PUSHMARK(SP);
13738             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13739             PUTBACK;
13740             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13741             FREETMPS;
13742             LEAVE;
13743         }
13744     }
13745
13746     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13747         ptr_table_free(PL_ptr_table);
13748         PL_ptr_table = NULL;
13749     }
13750
13751     if (!(flags & CLONEf_COPY_STACKS)) {
13752         unreferenced_to_tmp_stack(param->unreferenced);
13753     }
13754
13755     SvREFCNT_dec(param->stashes);
13756
13757     /* orphaned? eg threads->new inside BEGIN or use */
13758     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13759         SvREFCNT_inc_simple_void(PL_compcv);
13760         SAVEFREESV(PL_compcv);
13761     }
13762
13763     return my_perl;
13764 }
13765
13766 static void
13767 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13768 {
13769     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13770     
13771     if (AvFILLp(unreferenced) > -1) {
13772         SV **svp = AvARRAY(unreferenced);
13773         SV **const last = svp + AvFILLp(unreferenced);
13774         SSize_t count = 0;
13775
13776         do {
13777             if (SvREFCNT(*svp) == 1)
13778                 ++count;
13779         } while (++svp <= last);
13780
13781         EXTEND_MORTAL(count);
13782         svp = AvARRAY(unreferenced);
13783
13784         do {
13785             if (SvREFCNT(*svp) == 1) {
13786                 /* Our reference is the only one to this SV. This means that
13787                    in this thread, the scalar effectively has a 0 reference.
13788                    That doesn't work (cleanup never happens), so donate our
13789                    reference to it onto the save stack. */
13790                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13791             } else {
13792                 /* As an optimisation, because we are already walking the
13793                    entire array, instead of above doing either
13794                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13795                    release our reference to the scalar, so that at the end of
13796                    the array owns zero references to the scalars it happens to
13797                    point to. We are effectively converting the array from
13798                    AvREAL() on to AvREAL() off. This saves the av_clear()
13799                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13800                    walking the array a second time.  */
13801                 SvREFCNT_dec(*svp);
13802             }
13803
13804         } while (++svp <= last);
13805         AvREAL_off(unreferenced);
13806     }
13807     SvREFCNT_dec_NN(unreferenced);
13808 }
13809
13810 void
13811 Perl_clone_params_del(CLONE_PARAMS *param)
13812 {
13813     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13814        happy: */
13815     PerlInterpreter *const to = param->new_perl;
13816     dTHXa(to);
13817     PerlInterpreter *const was = PERL_GET_THX;
13818
13819     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13820
13821     if (was != to) {
13822         PERL_SET_THX(to);
13823     }
13824
13825     SvREFCNT_dec(param->stashes);
13826     if (param->unreferenced)
13827         unreferenced_to_tmp_stack(param->unreferenced);
13828
13829     Safefree(param);
13830
13831     if (was != to) {
13832         PERL_SET_THX(was);
13833     }
13834 }
13835
13836 CLONE_PARAMS *
13837 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13838 {
13839     dVAR;
13840     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13841        does a dTHX; to get the context from thread local storage.
13842        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13843        a version that passes in my_perl.  */
13844     PerlInterpreter *const was = PERL_GET_THX;
13845     CLONE_PARAMS *param;
13846
13847     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13848
13849     if (was != to) {
13850         PERL_SET_THX(to);
13851     }
13852
13853     /* Given that we've set the context, we can do this unshared.  */
13854     Newx(param, 1, CLONE_PARAMS);
13855
13856     param->flags = 0;
13857     param->proto_perl = from;
13858     param->new_perl = to;
13859     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13860     AvREAL_off(param->stashes);
13861     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13862
13863     if (was != to) {
13864         PERL_SET_THX(was);
13865     }
13866     return param;
13867 }
13868
13869 #endif /* USE_ITHREADS */
13870
13871 void
13872 Perl_init_constants(pTHX)
13873 {
13874     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13875     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13876     SvANY(&PL_sv_undef)         = NULL;
13877
13878     SvANY(&PL_sv_no)            = new_XPVNV();
13879     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13880     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13881                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13882                                   |SVp_POK|SVf_POK;
13883
13884     SvANY(&PL_sv_yes)           = new_XPVNV();
13885     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13886     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13887                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13888                                   |SVp_POK|SVf_POK;
13889
13890     SvPV_set(&PL_sv_no, (char*)PL_No);
13891     SvCUR_set(&PL_sv_no, 0);
13892     SvLEN_set(&PL_sv_no, 0);
13893     SvIV_set(&PL_sv_no, 0);
13894     SvNV_set(&PL_sv_no, 0);
13895
13896     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13897     SvCUR_set(&PL_sv_yes, 1);
13898     SvLEN_set(&PL_sv_yes, 0);
13899     SvIV_set(&PL_sv_yes, 1);
13900     SvNV_set(&PL_sv_yes, 1);
13901 }
13902
13903 /*
13904 =head1 Unicode Support
13905
13906 =for apidoc sv_recode_to_utf8
13907
13908 The encoding is assumed to be an Encode object, on entry the PV
13909 of the sv is assumed to be octets in that encoding, and the sv
13910 will be converted into Unicode (and UTF-8).
13911
13912 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13913 is not a reference, nothing is done to the sv.  If the encoding is not
13914 an C<Encode::XS> Encoding object, bad things will happen.
13915 (See F<lib/encoding.pm> and L<Encode>.)
13916
13917 The PV of the sv is returned.
13918
13919 =cut */
13920
13921 char *
13922 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13923 {
13924     dVAR;
13925
13926     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13927
13928     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13929         SV *uni;
13930         STRLEN len;
13931         const char *s;
13932         dSP;
13933         ENTER;
13934         SAVETMPS;
13935         save_re_context();
13936         PUSHMARK(sp);
13937         EXTEND(SP, 3);
13938         PUSHs(encoding);
13939         PUSHs(sv);
13940 /*
13941   NI-S 2002/07/09
13942   Passing sv_yes is wrong - it needs to be or'ed set of constants
13943   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13944   remove converted chars from source.
13945
13946   Both will default the value - let them.
13947
13948         XPUSHs(&PL_sv_yes);
13949 */
13950         PUTBACK;
13951         call_method("decode", G_SCALAR);
13952         SPAGAIN;
13953         uni = POPs;
13954         PUTBACK;
13955         s = SvPV_const(uni, len);
13956         if (s != SvPVX_const(sv)) {
13957             SvGROW(sv, len + 1);
13958             Move(s, SvPVX(sv), len + 1, char);
13959             SvCUR_set(sv, len);
13960         }
13961         FREETMPS;
13962         LEAVE;
13963         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13964             /* clear pos and any utf8 cache */
13965             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13966             if (mg)
13967                 mg->mg_len = -1;
13968             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13969                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13970         }
13971         SvUTF8_on(sv);
13972         return SvPVX(sv);
13973     }
13974     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13975 }
13976
13977 /*
13978 =for apidoc sv_cat_decode
13979
13980 The encoding is assumed to be an Encode object, the PV of the ssv is
13981 assumed to be octets in that encoding and decoding the input starts
13982 from the position which (PV + *offset) pointed to.  The dsv will be
13983 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13984 when the string tstr appears in decoding output or the input ends on
13985 the PV of the ssv.  The value which the offset points will be modified
13986 to the last input position on the ssv.
13987
13988 Returns TRUE if the terminator was found, else returns FALSE.
13989
13990 =cut */
13991
13992 bool
13993 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13994                    SV *ssv, int *offset, char *tstr, int tlen)
13995 {
13996     dVAR;
13997     bool ret = FALSE;
13998
13999     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14000
14001     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14002         SV *offsv;
14003         dSP;
14004         ENTER;
14005         SAVETMPS;
14006         save_re_context();
14007         PUSHMARK(sp);
14008         EXTEND(SP, 6);
14009         PUSHs(encoding);
14010         PUSHs(dsv);
14011         PUSHs(ssv);
14012         offsv = newSViv(*offset);
14013         mPUSHs(offsv);
14014         mPUSHp(tstr, tlen);
14015         PUTBACK;
14016         call_method("cat_decode", G_SCALAR);
14017         SPAGAIN;
14018         ret = SvTRUE(TOPs);
14019         *offset = SvIV(offsv);
14020         PUTBACK;
14021         FREETMPS;
14022         LEAVE;
14023     }
14024     else
14025         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14026     return ret;
14027
14028 }
14029
14030 /* ---------------------------------------------------------------------
14031  *
14032  * support functions for report_uninit()
14033  */
14034
14035 /* the maxiumum size of array or hash where we will scan looking
14036  * for the undefined element that triggered the warning */
14037
14038 #define FUV_MAX_SEARCH_SIZE 1000
14039
14040 /* Look for an entry in the hash whose value has the same SV as val;
14041  * If so, return a mortal copy of the key. */
14042
14043 STATIC SV*
14044 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14045 {
14046     dVAR;
14047     HE **array;
14048     I32 i;
14049
14050     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14051
14052     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14053                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14054         return NULL;
14055
14056     array = HvARRAY(hv);
14057
14058     for (i=HvMAX(hv); i>=0; i--) {
14059         HE *entry;
14060         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14061             if (HeVAL(entry) != val)
14062                 continue;
14063             if (    HeVAL(entry) == &PL_sv_undef ||
14064                     HeVAL(entry) == &PL_sv_placeholder)
14065                 continue;
14066             if (!HeKEY(entry))
14067                 return NULL;
14068             if (HeKLEN(entry) == HEf_SVKEY)
14069                 return sv_mortalcopy(HeKEY_sv(entry));
14070             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14071         }
14072     }
14073     return NULL;
14074 }
14075
14076 /* Look for an entry in the array whose value has the same SV as val;
14077  * If so, return the index, otherwise return -1. */
14078
14079 STATIC I32
14080 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14081 {
14082     dVAR;
14083
14084     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14085
14086     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14087                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14088         return -1;
14089
14090     if (val != &PL_sv_undef) {
14091         SV ** const svp = AvARRAY(av);
14092         I32 i;
14093
14094         for (i=AvFILLp(av); i>=0; i--)
14095             if (svp[i] == val)
14096                 return i;
14097     }
14098     return -1;
14099 }
14100
14101 /* varname(): return the name of a variable, optionally with a subscript.
14102  * If gv is non-zero, use the name of that global, along with gvtype (one
14103  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14104  * targ.  Depending on the value of the subscript_type flag, return:
14105  */
14106
14107 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14108 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14109 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14110 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14111
14112 SV*
14113 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14114         const SV *const keyname, I32 aindex, int subscript_type)
14115 {
14116
14117     SV * const name = sv_newmortal();
14118     if (gv && isGV(gv)) {
14119         char buffer[2];
14120         buffer[0] = gvtype;
14121         buffer[1] = 0;
14122
14123         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14124
14125         gv_fullname4(name, gv, buffer, 0);
14126
14127         if ((unsigned int)SvPVX(name)[1] <= 26) {
14128             buffer[0] = '^';
14129             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14130
14131             /* Swap the 1 unprintable control character for the 2 byte pretty
14132                version - ie substr($name, 1, 1) = $buffer; */
14133             sv_insert(name, 1, 1, buffer, 2);
14134         }
14135     }
14136     else {
14137         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14138         SV *sv;
14139         AV *av;
14140
14141         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14142
14143         if (!cv || !CvPADLIST(cv))
14144             return NULL;
14145         av = *PadlistARRAY(CvPADLIST(cv));
14146         sv = *av_fetch(av, targ, FALSE);
14147         sv_setsv_flags(name, sv, 0);
14148     }
14149
14150     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14151         SV * const sv = newSV(0);
14152         *SvPVX(name) = '$';
14153         Perl_sv_catpvf(aTHX_ name, "{%s}",
14154             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14155                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14156         SvREFCNT_dec_NN(sv);
14157     }
14158     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14159         *SvPVX(name) = '$';
14160         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14161     }
14162     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14163         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14164         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14165     }
14166
14167     return name;
14168 }
14169
14170
14171 /*
14172 =for apidoc find_uninit_var
14173
14174 Find the name of the undefined variable (if any) that caused the operator
14175 to issue a "Use of uninitialized value" warning.
14176 If match is true, only return a name if its value matches uninit_sv.
14177 So roughly speaking, if a unary operator (such as OP_COS) generates a
14178 warning, then following the direct child of the op may yield an
14179 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14180 other hand, with OP_ADD there are two branches to follow, so we only print
14181 the variable name if we get an exact match.
14182
14183 The name is returned as a mortal SV.
14184
14185 Assumes that PL_op is the op that originally triggered the error, and that
14186 PL_comppad/PL_curpad points to the currently executing pad.
14187
14188 =cut
14189 */
14190
14191 STATIC SV *
14192 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14193                   bool match)
14194 {
14195     dVAR;
14196     SV *sv;
14197     const GV *gv;
14198     const OP *o, *o2, *kid;
14199
14200     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14201                             uninit_sv == &PL_sv_placeholder)))
14202         return NULL;
14203
14204     switch (obase->op_type) {
14205
14206     case OP_RV2AV:
14207     case OP_RV2HV:
14208     case OP_PADAV:
14209     case OP_PADHV:
14210       {
14211         const bool pad  = (    obase->op_type == OP_PADAV
14212                             || obase->op_type == OP_PADHV
14213                             || obase->op_type == OP_PADRANGE
14214                           );
14215
14216         const bool hash = (    obase->op_type == OP_PADHV
14217                             || obase->op_type == OP_RV2HV
14218                             || (obase->op_type == OP_PADRANGE
14219                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14220                           );
14221         I32 index = 0;
14222         SV *keysv = NULL;
14223         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14224
14225         if (pad) { /* @lex, %lex */
14226             sv = PAD_SVl(obase->op_targ);
14227             gv = NULL;
14228         }
14229         else {
14230             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14231             /* @global, %global */
14232                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14233                 if (!gv)
14234                     break;
14235                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14236             }
14237             else if (obase == PL_op) /* @{expr}, %{expr} */
14238                 return find_uninit_var(cUNOPx(obase)->op_first,
14239                                                     uninit_sv, match);
14240             else /* @{expr}, %{expr} as a sub-expression */
14241                 return NULL;
14242         }
14243
14244         /* attempt to find a match within the aggregate */
14245         if (hash) {
14246             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14247             if (keysv)
14248                 subscript_type = FUV_SUBSCRIPT_HASH;
14249         }
14250         else {
14251             index = find_array_subscript((const AV *)sv, uninit_sv);
14252             if (index >= 0)
14253                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14254         }
14255
14256         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14257             break;
14258
14259         return varname(gv, hash ? '%' : '@', obase->op_targ,
14260                                     keysv, index, subscript_type);
14261       }
14262
14263     case OP_RV2SV:
14264         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14265             /* $global */
14266             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14267             if (!gv || !GvSTASH(gv))
14268                 break;
14269             if (match && (GvSV(gv) != uninit_sv))
14270                 break;
14271             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14272         }
14273         /* ${expr} */
14274         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14275
14276     case OP_PADSV:
14277         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14278             break;
14279         return varname(NULL, '$', obase->op_targ,
14280                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14281
14282     case OP_GVSV:
14283         gv = cGVOPx_gv(obase);
14284         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14285             break;
14286         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14287
14288     case OP_AELEMFAST_LEX:
14289         if (match) {
14290             SV **svp;
14291             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14292             if (!av || SvRMAGICAL(av))
14293                 break;
14294             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14295             if (!svp || *svp != uninit_sv)
14296                 break;
14297         }
14298         return varname(NULL, '$', obase->op_targ,
14299                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14300     case OP_AELEMFAST:
14301         {
14302             gv = cGVOPx_gv(obase);
14303             if (!gv)
14304                 break;
14305             if (match) {
14306                 SV **svp;
14307                 AV *const av = GvAV(gv);
14308                 if (!av || SvRMAGICAL(av))
14309                     break;
14310                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14311                 if (!svp || *svp != uninit_sv)
14312                     break;
14313             }
14314             return varname(gv, '$', 0,
14315                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14316         }
14317         break;
14318
14319     case OP_EXISTS:
14320         o = cUNOPx(obase)->op_first;
14321         if (!o || o->op_type != OP_NULL ||
14322                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14323             break;
14324         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14325
14326     case OP_AELEM:
14327     case OP_HELEM:
14328     {
14329         bool negate = FALSE;
14330
14331         if (PL_op == obase)
14332             /* $a[uninit_expr] or $h{uninit_expr} */
14333             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14334
14335         gv = NULL;
14336         o = cBINOPx(obase)->op_first;
14337         kid = cBINOPx(obase)->op_last;
14338
14339         /* get the av or hv, and optionally the gv */
14340         sv = NULL;
14341         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14342             sv = PAD_SV(o->op_targ);
14343         }
14344         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14345                 && cUNOPo->op_first->op_type == OP_GV)
14346         {
14347             gv = cGVOPx_gv(cUNOPo->op_first);
14348             if (!gv)
14349                 break;
14350             sv = o->op_type
14351                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14352         }
14353         if (!sv)
14354             break;
14355
14356         if (kid && kid->op_type == OP_NEGATE) {
14357             negate = TRUE;
14358             kid = cUNOPx(kid)->op_first;
14359         }
14360
14361         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14362             /* index is constant */
14363             SV* kidsv;
14364             if (negate) {
14365                 kidsv = sv_2mortal(newSVpvs("-"));
14366                 sv_catsv(kidsv, cSVOPx_sv(kid));
14367             }
14368             else
14369                 kidsv = cSVOPx_sv(kid);
14370             if (match) {
14371                 if (SvMAGICAL(sv))
14372                     break;
14373                 if (obase->op_type == OP_HELEM) {
14374                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14375                     if (!he || HeVAL(he) != uninit_sv)
14376                         break;
14377                 }
14378                 else {
14379                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14380                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14381                         FALSE);
14382                     if (!svp || *svp != uninit_sv)
14383                         break;
14384                 }
14385             }
14386             if (obase->op_type == OP_HELEM)
14387                 return varname(gv, '%', o->op_targ,
14388                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14389             else
14390                 return varname(gv, '@', o->op_targ, NULL,
14391                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14392                     FUV_SUBSCRIPT_ARRAY);
14393         }
14394         else  {
14395             /* index is an expression;
14396              * attempt to find a match within the aggregate */
14397             if (obase->op_type == OP_HELEM) {
14398                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14399                 if (keysv)
14400                     return varname(gv, '%', o->op_targ,
14401                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14402             }
14403             else {
14404                 const I32 index
14405                     = find_array_subscript((const AV *)sv, uninit_sv);
14406                 if (index >= 0)
14407                     return varname(gv, '@', o->op_targ,
14408                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14409             }
14410             if (match)
14411                 break;
14412             return varname(gv,
14413                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14414                 ? '@' : '%',
14415                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14416         }
14417         break;
14418     }
14419
14420     case OP_AASSIGN:
14421         /* only examine RHS */
14422         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14423
14424     case OP_OPEN:
14425         o = cUNOPx(obase)->op_first;
14426         if (   o->op_type == OP_PUSHMARK
14427            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14428         )
14429             o = o->op_sibling;
14430
14431         if (!o->op_sibling) {
14432             /* one-arg version of open is highly magical */
14433
14434             if (o->op_type == OP_GV) { /* open FOO; */
14435                 gv = cGVOPx_gv(o);
14436                 if (match && GvSV(gv) != uninit_sv)
14437                     break;
14438                 return varname(gv, '$', 0,
14439                             NULL, 0, FUV_SUBSCRIPT_NONE);
14440             }
14441             /* other possibilities not handled are:
14442              * open $x; or open my $x;  should return '${*$x}'
14443              * open expr;               should return '$'.expr ideally
14444              */
14445              break;
14446         }
14447         goto do_op;
14448
14449     /* ops where $_ may be an implicit arg */
14450     case OP_TRANS:
14451     case OP_TRANSR:
14452     case OP_SUBST:
14453     case OP_MATCH:
14454         if ( !(obase->op_flags & OPf_STACKED)) {
14455             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14456                                  ? PAD_SVl(obase->op_targ)
14457                                  : DEFSV))
14458             {
14459                 sv = sv_newmortal();
14460                 sv_setpvs(sv, "$_");
14461                 return sv;
14462             }
14463         }
14464         goto do_op;
14465
14466     case OP_PRTF:
14467     case OP_PRINT:
14468     case OP_SAY:
14469         match = 1; /* print etc can return undef on defined args */
14470         /* skip filehandle as it can't produce 'undef' warning  */
14471         o = cUNOPx(obase)->op_first;
14472         if ((obase->op_flags & OPf_STACKED)
14473             &&
14474                (   o->op_type == OP_PUSHMARK
14475                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14476             o = o->op_sibling->op_sibling;
14477         goto do_op2;
14478
14479
14480     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14481     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14482
14483         /* the following ops are capable of returning PL_sv_undef even for
14484          * defined arg(s) */
14485
14486     case OP_BACKTICK:
14487     case OP_PIPE_OP:
14488     case OP_FILENO:
14489     case OP_BINMODE:
14490     case OP_TIED:
14491     case OP_GETC:
14492     case OP_SYSREAD:
14493     case OP_SEND:
14494     case OP_IOCTL:
14495     case OP_SOCKET:
14496     case OP_SOCKPAIR:
14497     case OP_BIND:
14498     case OP_CONNECT:
14499     case OP_LISTEN:
14500     case OP_ACCEPT:
14501     case OP_SHUTDOWN:
14502     case OP_SSOCKOPT:
14503     case OP_GETPEERNAME:
14504     case OP_FTRREAD:
14505     case OP_FTRWRITE:
14506     case OP_FTREXEC:
14507     case OP_FTROWNED:
14508     case OP_FTEREAD:
14509     case OP_FTEWRITE:
14510     case OP_FTEEXEC:
14511     case OP_FTEOWNED:
14512     case OP_FTIS:
14513     case OP_FTZERO:
14514     case OP_FTSIZE:
14515     case OP_FTFILE:
14516     case OP_FTDIR:
14517     case OP_FTLINK:
14518     case OP_FTPIPE:
14519     case OP_FTSOCK:
14520     case OP_FTBLK:
14521     case OP_FTCHR:
14522     case OP_FTTTY:
14523     case OP_FTSUID:
14524     case OP_FTSGID:
14525     case OP_FTSVTX:
14526     case OP_FTTEXT:
14527     case OP_FTBINARY:
14528     case OP_FTMTIME:
14529     case OP_FTATIME:
14530     case OP_FTCTIME:
14531     case OP_READLINK:
14532     case OP_OPEN_DIR:
14533     case OP_READDIR:
14534     case OP_TELLDIR:
14535     case OP_SEEKDIR:
14536     case OP_REWINDDIR:
14537     case OP_CLOSEDIR:
14538     case OP_GMTIME:
14539     case OP_ALARM:
14540     case OP_SEMGET:
14541     case OP_GETLOGIN:
14542     case OP_UNDEF:
14543     case OP_SUBSTR:
14544     case OP_AEACH:
14545     case OP_EACH:
14546     case OP_SORT:
14547     case OP_CALLER:
14548     case OP_DOFILE:
14549     case OP_PROTOTYPE:
14550     case OP_NCMP:
14551     case OP_SMARTMATCH:
14552     case OP_UNPACK:
14553     case OP_SYSOPEN:
14554     case OP_SYSSEEK:
14555         match = 1;
14556         goto do_op;
14557
14558     case OP_ENTERSUB:
14559     case OP_GOTO:
14560         /* XXX tmp hack: these two may call an XS sub, and currently
14561           XS subs don't have a SUB entry on the context stack, so CV and
14562           pad determination goes wrong, and BAD things happen. So, just
14563           don't try to determine the value under those circumstances.
14564           Need a better fix at dome point. DAPM 11/2007 */
14565         break;
14566
14567     case OP_FLIP:
14568     case OP_FLOP:
14569     {
14570         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14571         if (gv && GvSV(gv) == uninit_sv)
14572             return newSVpvs_flags("$.", SVs_TEMP);
14573         goto do_op;
14574     }
14575
14576     case OP_POS:
14577         /* def-ness of rval pos() is independent of the def-ness of its arg */
14578         if ( !(obase->op_flags & OPf_MOD))
14579             break;
14580
14581     case OP_SCHOMP:
14582     case OP_CHOMP:
14583         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14584             return newSVpvs_flags("${$/}", SVs_TEMP);
14585         /*FALLTHROUGH*/
14586
14587     default:
14588     do_op:
14589         if (!(obase->op_flags & OPf_KIDS))
14590             break;
14591         o = cUNOPx(obase)->op_first;
14592         
14593     do_op2:
14594         if (!o)
14595             break;
14596
14597         /* This loop checks all the kid ops, skipping any that cannot pos-
14598          * sibly be responsible for the uninitialized value; i.e., defined
14599          * constants and ops that return nothing.  If there is only one op
14600          * left that is not skipped, then we *know* it is responsible for
14601          * the uninitialized value.  If there is more than one op left, we
14602          * have to look for an exact match in the while() loop below.
14603          * Note that we skip padrange, because the individual pad ops that
14604          * it replaced are still in the tree, so we work on them instead.
14605          */
14606         o2 = NULL;
14607         for (kid=o; kid; kid = kid->op_sibling) {
14608             if (kid) {
14609                 const OPCODE type = kid->op_type;
14610                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14611                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14612                   || (type == OP_PUSHMARK)
14613                   || (type == OP_PADRANGE)
14614                 )
14615                 continue;
14616             }
14617             if (o2) { /* more than one found */
14618                 o2 = NULL;
14619                 break;
14620             }
14621             o2 = kid;
14622         }
14623         if (o2)
14624             return find_uninit_var(o2, uninit_sv, match);
14625
14626         /* scan all args */
14627         while (o) {
14628             sv = find_uninit_var(o, uninit_sv, 1);
14629             if (sv)
14630                 return sv;
14631             o = o->op_sibling;
14632         }
14633         break;
14634     }
14635     return NULL;
14636 }
14637
14638
14639 /*
14640 =for apidoc report_uninit
14641
14642 Print appropriate "Use of uninitialized variable" warning.
14643
14644 =cut
14645 */
14646
14647 void
14648 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14649 {
14650     dVAR;
14651     if (PL_op) {
14652         SV* varname = NULL;
14653         if (uninit_sv && PL_curpad) {
14654             varname = find_uninit_var(PL_op, uninit_sv,0);
14655             if (varname)
14656                 sv_insert(varname, 0, 0, " ", 1);
14657         }
14658         /* diag_listed_as: Use of uninitialized value%s */
14659         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14660                 SVfARG(varname ? varname : &PL_sv_no),
14661                 " in ", OP_DESC(PL_op));
14662     }
14663     else
14664         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14665                     "", "", "");
14666 }
14667
14668 /*
14669  * Local variables:
14670  * c-indentation-style: bsd
14671  * c-basic-offset: 4
14672  * indent-tabs-mode: nil
14673  * End:
14674  *
14675  * ex: set ts=8 sts=4 sw=4 et:
14676  */