This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fc22350b53d819d9fab4aa9a1b272b6c8904f174
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 #endif
70
71 /* ============================================================================
72
73 =head1 Allocation and deallocation of SVs.
74
75 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
76 sv, av, hv...) contains type and reference count information, and for
77 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
78 contains fields specific to each type.  Some types store all they need
79 in the head, so don't have a body.
80
81 In all but the most memory-paranoid configurations (ex: PURIFY), heads
82 and bodies are allocated out of arenas, which by default are
83 approximately 4K chunks of memory parcelled up into N heads or bodies.
84 Sv-bodies are allocated by their sv-type, guaranteeing size
85 consistency needed to allocate safely from arrays.
86
87 For SV-heads, the first slot in each arena is reserved, and holds a
88 link to the next arena, some flags, and a note of the number of slots.
89 Snaked through each arena chain is a linked list of free items; when
90 this becomes empty, an extra arena is allocated and divided up into N
91 items which are threaded into the free list.
92
93 SV-bodies are similar, but they use arena-sets by default, which
94 separate the link and info from the arena itself, and reclaim the 1st
95 slot in the arena.  SV-bodies are further described later.
96
97 The following global variables are associated with arenas:
98
99     PL_sv_arenaroot     pointer to list of SV arenas
100     PL_sv_root          pointer to list of free SV structures
101
102     PL_body_arenas      head of linked-list of body arenas
103     PL_body_roots[]     array of pointers to list of free bodies of svtype
104                         arrays are indexed by the svtype needed
105
106 A few special SV heads are not allocated from an arena, but are
107 instead directly created in the interpreter structure, eg PL_sv_undef.
108 The size of arenas can be changed from the default by setting
109 PERL_ARENA_SIZE appropriately at compile time.
110
111 The SV arena serves the secondary purpose of allowing still-live SVs
112 to be located and destroyed during final cleanup.
113
114 At the lowest level, the macros new_SV() and del_SV() grab and free
115 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
116 to return the SV to the free list with error checking.) new_SV() calls
117 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
118 SVs in the free list have their SvTYPE field set to all ones.
119
120 At the time of very final cleanup, sv_free_arenas() is called from
121 perl_destruct() to physically free all the arenas allocated since the
122 start of the interpreter.
123
124 The function visit() scans the SV arenas list, and calls a specified
125 function for each SV it finds which is still live - ie which has an SvTYPE
126 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
127 following functions (specified as [function that calls visit()] / [function
128 called by visit() for each SV]):
129
130     sv_report_used() / do_report_used()
131                         dump all remaining SVs (debugging aid)
132
133     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
134                       do_clean_named_io_objs(),do_curse()
135                         Attempt to free all objects pointed to by RVs,
136                         try to do the same for all objects indir-
137                         ectly referenced by typeglobs too, and
138                         then do a final sweep, cursing any
139                         objects that remain.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
186         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
187     } STMT_END
188 #  define DEBUG_SV_SERIAL(sv)                                               \
189     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
190             PTR2UV(sv), (long)(sv)->sv_debug_serial))
191 #else
192 #  define FREE_SV_DEBUG_FILE(sv)
193 #  define DEBUG_SV_SERIAL(sv)   NOOP
194 #endif
195
196 #ifdef PERL_POISON
197 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
198 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
199 /* Whilst I'd love to do this, it seems that things like to check on
200    unreferenced scalars
201 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
202 */
203 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
204                                 PoisonNew(&SvREFCNT(sv), 1, U32)
205 #else
206 #  define SvARENA_CHAIN(sv)     SvANY(sv)
207 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
208 #  define POSION_SV_HEAD(sv)
209 #endif
210
211 /* Mark an SV head as unused, and add to free list.
212  *
213  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
214  * its refcount artificially decremented during global destruction, so
215  * there may be dangling pointers to it. The last thing we want in that
216  * case is for it to be reused. */
217
218 #define plant_SV(p) \
219     STMT_START {                                        \
220         const U32 old_flags = SvFLAGS(p);                       \
221         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
222         DEBUG_SV_SERIAL(p);                             \
223         FREE_SV_DEBUG_FILE(p);                          \
224         POSION_SV_HEAD(p);                              \
225         SvFLAGS(p) = SVTYPEMASK;                        \
226         if (!(old_flags & SVf_BREAK)) {         \
227             SvARENA_CHAIN_SET(p, PL_sv_root);   \
228             PL_sv_root = (p);                           \
229         }                                               \
230         --PL_sv_count;                                  \
231     } STMT_END
232
233 #define uproot_SV(p) \
234     STMT_START {                                        \
235         (p) = PL_sv_root;                               \
236         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
237         ++PL_sv_count;                                  \
238     } STMT_END
239
240
241 /* make some more SVs by adding another arena */
242
243 STATIC SV*
244 S_more_sv(pTHX)
245 {
246     dVAR;
247     SV* sv;
248     char *chunk;                /* must use New here to match call to */
249     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
250     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
251     uproot_SV(sv);
252     return sv;
253 }
254
255 /* new_SV(): return a new, empty SV head */
256
257 #ifdef DEBUG_LEAKING_SCALARS
258 /* provide a real function for a debugger to play with */
259 STATIC SV*
260 S_new_SV(pTHX_ const char *file, int line, const char *func)
261 {
262     SV* sv;
263
264     if (PL_sv_root)
265         uproot_SV(sv);
266     else
267         sv = S_more_sv(aTHX);
268     SvANY(sv) = 0;
269     SvREFCNT(sv) = 1;
270     SvFLAGS(sv) = 0;
271     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
272     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
273                 ? PL_parser->copline
274                 :  PL_curcop
275                     ? CopLINE(PL_curcop)
276                     : 0
277             );
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_parent = NULL;
280     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
281
282     sv->sv_debug_serial = PL_sv_serial++;
283
284     MEM_LOG_NEW_SV(sv, file, line, func);
285     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
286             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
287
288     return sv;
289 }
290 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
291
292 #else
293 #  define new_SV(p) \
294     STMT_START {                                        \
295         if (PL_sv_root)                                 \
296             uproot_SV(p);                               \
297         else                                            \
298             (p) = S_more_sv(aTHX);                      \
299         SvANY(p) = 0;                                   \
300         SvREFCNT(p) = 1;                                \
301         SvFLAGS(p) = 0;                                 \
302         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
303     } STMT_END
304 #endif
305
306
307 /* del_SV(): return an empty SV head to the free list */
308
309 #ifdef DEBUGGING
310
311 #define del_SV(p) \
312     STMT_START {                                        \
313         if (DEBUG_D_TEST)                               \
314             del_sv(p);                                  \
315         else                                            \
316             plant_SV(p);                                \
317     } STMT_END
318
319 STATIC void
320 S_del_sv(pTHX_ SV *p)
321 {
322     dVAR;
323
324     PERL_ARGS_ASSERT_DEL_SV;
325
326     if (DEBUG_D_TEST) {
327         SV* sva;
328         bool ok = 0;
329         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
330             const SV * const sv = sva + 1;
331             const SV * const svend = &sva[SvREFCNT(sva)];
332             if (p >= sv && p < svend) {
333                 ok = 1;
334                 break;
335             }
336         }
337         if (!ok) {
338             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
339                              "Attempt to free non-arena SV: 0x%"UVxf
340                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
341             return;
342         }
343     }
344     plant_SV(p);
345 }
346
347 #else /* ! DEBUGGING */
348
349 #define del_SV(p)   plant_SV(p)
350
351 #endif /* DEBUGGING */
352
353
354 /*
355 =head1 SV Manipulation Functions
356
357 =for apidoc sv_add_arena
358
359 Given a chunk of memory, link it to the head of the list of arenas,
360 and split it into a list of free SVs.
361
362 =cut
363 */
364
365 static void
366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
367 {
368     dVAR;
369     SV *const sva = MUTABLE_SV(ptr);
370     SV* sv;
371     SV* svend;
372
373     PERL_ARGS_ASSERT_SV_ADD_ARENA;
374
375     /* The first SV in an arena isn't an SV. */
376     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
377     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
378     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
379
380     PL_sv_arenaroot = sva;
381     PL_sv_root = sva + 1;
382
383     svend = &sva[SvREFCNT(sva) - 1];
384     sv = sva + 1;
385     while (sv < svend) {
386         SvARENA_CHAIN_SET(sv, (sv + 1));
387 #ifdef DEBUGGING
388         SvREFCNT(sv) = 0;
389 #endif
390         /* Must always set typemask because it's always checked in on cleanup
391            when the arenas are walked looking for objects.  */
392         SvFLAGS(sv) = SVTYPEMASK;
393         sv++;
394     }
395     SvARENA_CHAIN_SET(sv, 0);
396 #ifdef DEBUGGING
397     SvREFCNT(sv) = 0;
398 #endif
399     SvFLAGS(sv) = SVTYPEMASK;
400 }
401
402 /* visit(): call the named function for each non-free SV in the arenas
403  * whose flags field matches the flags/mask args. */
404
405 STATIC I32
406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
407 {
408     dVAR;
409     SV* sva;
410     I32 visited = 0;
411
412     PERL_ARGS_ASSERT_VISIT;
413
414     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
415         const SV * const svend = &sva[SvREFCNT(sva)];
416         SV* sv;
417         for (sv = sva + 1; sv < svend; ++sv) {
418             if (SvTYPE(sv) != (svtype)SVTYPEMASK
419                     && (sv->sv_flags & mask) == flags
420                     && SvREFCNT(sv))
421             {
422                 (FCALL)(aTHX_ sv);
423                 ++visited;
424             }
425         }
426     }
427     return visited;
428 }
429
430 #ifdef DEBUGGING
431
432 /* called by sv_report_used() for each live SV */
433
434 static void
435 do_report_used(pTHX_ SV *const sv)
436 {
437     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
438         PerlIO_printf(Perl_debug_log, "****\n");
439         sv_dump(sv);
440     }
441 }
442 #endif
443
444 /*
445 =for apidoc sv_report_used
446
447 Dump the contents of all SVs not yet freed (debugging aid).
448
449 =cut
450 */
451
452 void
453 Perl_sv_report_used(pTHX)
454 {
455 #ifdef DEBUGGING
456     visit(do_report_used, 0, 0);
457 #else
458     PERL_UNUSED_CONTEXT;
459 #endif
460 }
461
462 /* called by sv_clean_objs() for each live SV */
463
464 static void
465 do_clean_objs(pTHX_ SV *const ref)
466 {
467     dVAR;
468     assert (SvROK(ref));
469     {
470         SV * const target = SvRV(ref);
471         if (SvOBJECT(target)) {
472             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
473             if (SvWEAKREF(ref)) {
474                 sv_del_backref(target, ref);
475                 SvWEAKREF_off(ref);
476                 SvRV_set(ref, NULL);
477             } else {
478                 SvROK_off(ref);
479                 SvRV_set(ref, NULL);
480                 SvREFCNT_dec_NN(target);
481             }
482         }
483     }
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec_NN(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec_NN(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec_NN(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec_NN(obj);
527     }
528     SvREFCNT_dec_NN(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec_NN(obj);
550     }
551     SvREFCNT_dec_NN(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec_NN(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* IVs are in the head, so the allocation size is 0.  */
885     { 0,
886       sizeof(IV), /* This is used to copy out the IV body.  */
887       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
888       NOARENA /* IVS don't need an arena  */, 0
889     },
890
891     { sizeof(NV), sizeof(NV),
892       STRUCT_OFFSET(XPVNV, xnv_u),
893       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
894
895     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
896       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
897       + STRUCT_OFFSET(XPV, xpv_cur),
898       SVt_PV, FALSE, NONV, HASARENA,
899       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
900
901     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
902       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
903       + STRUCT_OFFSET(XPV, xpv_cur),
904       SVt_INVLIST, TRUE, NONV, HASARENA,
905       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
906
907     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
908       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
909       + STRUCT_OFFSET(XPV, xpv_cur),
910       SVt_PVIV, FALSE, NONV, HASARENA,
911       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
912
913     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
914       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
915       + STRUCT_OFFSET(XPV, xpv_cur),
916       SVt_PVNV, FALSE, HADNV, HASARENA,
917       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
918
919     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
920       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
921
922     { sizeof(regexp),
923       sizeof(regexp),
924       0,
925       SVt_REGEXP, TRUE, NONV, HASARENA,
926       FIT_ARENA(0, sizeof(regexp))
927     },
928
929     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
930       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
931     
932     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
933       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
934
935     { sizeof(XPVAV),
936       copy_length(XPVAV, xav_alloc),
937       0,
938       SVt_PVAV, TRUE, NONV, HASARENA,
939       FIT_ARENA(0, sizeof(XPVAV)) },
940
941     { sizeof(XPVHV),
942       copy_length(XPVHV, xhv_max),
943       0,
944       SVt_PVHV, TRUE, NONV, HASARENA,
945       FIT_ARENA(0, sizeof(XPVHV)) },
946
947     { sizeof(XPVCV),
948       sizeof(XPVCV),
949       0,
950       SVt_PVCV, TRUE, NONV, HASARENA,
951       FIT_ARENA(0, sizeof(XPVCV)) },
952
953     { sizeof(XPVFM),
954       sizeof(XPVFM),
955       0,
956       SVt_PVFM, TRUE, NONV, NOARENA,
957       FIT_ARENA(20, sizeof(XPVFM)) },
958
959     { sizeof(XPVIO),
960       sizeof(XPVIO),
961       0,
962       SVt_PVIO, TRUE, NONV, HASARENA,
963       FIT_ARENA(24, sizeof(XPVIO)) },
964 };
965
966 #define new_body_allocated(sv_type)             \
967     (void *)((char *)S_new_body(aTHX_ sv_type)  \
968              - bodies_by_type[sv_type].offset)
969
970 /* return a thing to the free list */
971
972 #define del_body(thing, root)                           \
973     STMT_START {                                        \
974         void ** const thing_copy = (void **)thing;      \
975         *thing_copy = *root;                            \
976         *root = (void*)thing_copy;                      \
977     } STMT_END
978
979 #ifdef PURIFY
980
981 #define new_XNV()       safemalloc(sizeof(XPVNV))
982 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
983 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
984
985 #define del_XPVGV(p)    safefree(p)
986
987 #else /* !PURIFY */
988
989 #define new_XNV()       new_body_allocated(SVt_NV)
990 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
991 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
992
993 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
994                                  &PL_body_roots[SVt_PVGV])
995
996 #endif /* PURIFY */
997
998 /* no arena for you! */
999
1000 #define new_NOARENA(details) \
1001         safemalloc((details)->body_size + (details)->offset)
1002 #define new_NOARENAZ(details) \
1003         safecalloc((details)->body_size + (details)->offset, 1)
1004
1005 void *
1006 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1007                   const size_t arena_size)
1008 {
1009     dVAR;
1010     void ** const root = &PL_body_roots[sv_type];
1011     struct arena_desc *adesc;
1012     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1013     unsigned int curr;
1014     char *start;
1015     const char *end;
1016     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1017 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1018     static bool done_sanity_check;
1019
1020     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1021      * variables like done_sanity_check. */
1022     if (!done_sanity_check) {
1023         unsigned int i = SVt_LAST;
1024
1025         done_sanity_check = TRUE;
1026
1027         while (i--)
1028             assert (bodies_by_type[i].type == i);
1029     }
1030 #endif
1031
1032     assert(arena_size);
1033
1034     /* may need new arena-set to hold new arena */
1035     if (!aroot || aroot->curr >= aroot->set_size) {
1036         struct arena_set *newroot;
1037         Newxz(newroot, 1, struct arena_set);
1038         newroot->set_size = ARENAS_PER_SET;
1039         newroot->next = aroot;
1040         aroot = newroot;
1041         PL_body_arenas = (void *) newroot;
1042         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1043     }
1044
1045     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1046     curr = aroot->curr++;
1047     adesc = &(aroot->set[curr]);
1048     assert(!adesc->arena);
1049     
1050     Newx(adesc->arena, good_arena_size, char);
1051     adesc->size = good_arena_size;
1052     adesc->utype = sv_type;
1053     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1054                           curr, (void*)adesc->arena, (UV)good_arena_size));
1055
1056     start = (char *) adesc->arena;
1057
1058     /* Get the address of the byte after the end of the last body we can fit.
1059        Remember, this is integer division:  */
1060     end = start + good_arena_size / body_size * body_size;
1061
1062     /* computed count doesn't reflect the 1st slot reservation */
1063 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1064     DEBUG_m(PerlIO_printf(Perl_debug_log,
1065                           "arena %p end %p arena-size %d (from %d) type %d "
1066                           "size %d ct %d\n",
1067                           (void*)start, (void*)end, (int)good_arena_size,
1068                           (int)arena_size, sv_type, (int)body_size,
1069                           (int)good_arena_size / (int)body_size));
1070 #else
1071     DEBUG_m(PerlIO_printf(Perl_debug_log,
1072                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1073                           (void*)start, (void*)end,
1074                           (int)arena_size, sv_type, (int)body_size,
1075                           (int)good_arena_size / (int)body_size));
1076 #endif
1077     *root = (void *)start;
1078
1079     while (1) {
1080         /* Where the next body would start:  */
1081         char * const next = start + body_size;
1082
1083         if (next >= end) {
1084             /* This is the last body:  */
1085             assert(next == end);
1086
1087             *(void **)start = 0;
1088             return *root;
1089         }
1090
1091         *(void**) start = (void *)next;
1092         start = next;
1093     }
1094 }
1095
1096 /* grab a new thing from the free list, allocating more if necessary.
1097    The inline version is used for speed in hot routines, and the
1098    function using it serves the rest (unless PURIFY).
1099 */
1100 #define new_body_inline(xpv, sv_type) \
1101     STMT_START { \
1102         void ** const r3wt = &PL_body_roots[sv_type]; \
1103         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1104           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1105                                              bodies_by_type[sv_type].body_size,\
1106                                              bodies_by_type[sv_type].arena_size)); \
1107         *(r3wt) = *(void**)(xpv); \
1108     } STMT_END
1109
1110 #ifndef PURIFY
1111
1112 STATIC void *
1113 S_new_body(pTHX_ const svtype sv_type)
1114 {
1115     dVAR;
1116     void *xpv;
1117     new_body_inline(xpv, sv_type);
1118     return xpv;
1119 }
1120
1121 #endif
1122
1123 static const struct body_details fake_rv =
1124     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1125
1126 /*
1127 =for apidoc sv_upgrade
1128
1129 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1130 SV, then copies across as much information as possible from the old body.
1131 It croaks if the SV is already in a more complex form than requested.  You
1132 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1133 before calling C<sv_upgrade>, and hence does not croak.  See also
1134 C<svtype>.
1135
1136 =cut
1137 */
1138
1139 void
1140 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1141 {
1142     dVAR;
1143     void*       old_body;
1144     void*       new_body;
1145     const svtype old_type = SvTYPE(sv);
1146     const struct body_details *new_type_details;
1147     const struct body_details *old_type_details
1148         = bodies_by_type + old_type;
1149     SV *referant = NULL;
1150
1151     PERL_ARGS_ASSERT_SV_UPGRADE;
1152
1153     if (old_type == new_type)
1154         return;
1155
1156     /* This clause was purposefully added ahead of the early return above to
1157        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1158        inference by Nick I-S that it would fix other troublesome cases. See
1159        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1160
1161        Given that shared hash key scalars are no longer PVIV, but PV, there is
1162        no longer need to unshare so as to free up the IVX slot for its proper
1163        purpose. So it's safe to move the early return earlier.  */
1164
1165     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1166         sv_force_normal_flags(sv, 0);
1167     }
1168
1169     old_body = SvANY(sv);
1170
1171     /* Copying structures onto other structures that have been neatly zeroed
1172        has a subtle gotcha. Consider XPVMG
1173
1174        +------+------+------+------+------+-------+-------+
1175        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1176        +------+------+------+------+------+-------+-------+
1177        0      4      8     12     16     20      24      28
1178
1179        where NVs are aligned to 8 bytes, so that sizeof that structure is
1180        actually 32 bytes long, with 4 bytes of padding at the end:
1181
1182        +------+------+------+------+------+-------+-------+------+
1183        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1184        +------+------+------+------+------+-------+-------+------+
1185        0      4      8     12     16     20      24      28     32
1186
1187        so what happens if you allocate memory for this structure:
1188
1189        +------+------+------+------+------+-------+-------+------+------+...
1190        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1191        +------+------+------+------+------+-------+-------+------+------+...
1192        0      4      8     12     16     20      24      28     32     36
1193
1194        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1195        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1196        started out as zero once, but it's quite possible that it isn't. So now,
1197        rather than a nicely zeroed GP, you have it pointing somewhere random.
1198        Bugs ensue.
1199
1200        (In fact, GP ends up pointing at a previous GP structure, because the
1201        principle cause of the padding in XPVMG getting garbage is a copy of
1202        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1203        this happens to be moot because XPVGV has been re-ordered, with GP
1204        no longer after STASH)
1205
1206        So we are careful and work out the size of used parts of all the
1207        structures.  */
1208
1209     switch (old_type) {
1210     case SVt_NULL:
1211         break;
1212     case SVt_IV:
1213         if (SvROK(sv)) {
1214             referant = SvRV(sv);
1215             old_type_details = &fake_rv;
1216             if (new_type == SVt_NV)
1217                 new_type = SVt_PVNV;
1218         } else {
1219             if (new_type < SVt_PVIV) {
1220                 new_type = (new_type == SVt_NV)
1221                     ? SVt_PVNV : SVt_PVIV;
1222             }
1223         }
1224         break;
1225     case SVt_NV:
1226         if (new_type < SVt_PVNV) {
1227             new_type = SVt_PVNV;
1228         }
1229         break;
1230     case SVt_PV:
1231         assert(new_type > SVt_PV);
1232         assert(SVt_IV < SVt_PV);
1233         assert(SVt_NV < SVt_PV);
1234         break;
1235     case SVt_PVIV:
1236         break;
1237     case SVt_PVNV:
1238         break;
1239     case SVt_PVMG:
1240         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1241            there's no way that it can be safely upgraded, because perl.c
1242            expects to Safefree(SvANY(PL_mess_sv))  */
1243         assert(sv != PL_mess_sv);
1244         /* This flag bit is used to mean other things in other scalar types.
1245            Given that it only has meaning inside the pad, it shouldn't be set
1246            on anything that can get upgraded.  */
1247         assert(!SvPAD_TYPED(sv));
1248         break;
1249     default:
1250         if (UNLIKELY(old_type_details->cant_upgrade))
1251             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1252                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1253     }
1254
1255     if (UNLIKELY(old_type > new_type))
1256         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1257                 (int)old_type, (int)new_type);
1258
1259     new_type_details = bodies_by_type + new_type;
1260
1261     SvFLAGS(sv) &= ~SVTYPEMASK;
1262     SvFLAGS(sv) |= new_type;
1263
1264     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1265        the return statements above will have triggered.  */
1266     assert (new_type != SVt_NULL);
1267     switch (new_type) {
1268     case SVt_IV:
1269         assert(old_type == SVt_NULL);
1270         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1271         SvIV_set(sv, 0);
1272         return;
1273     case SVt_NV:
1274         assert(old_type == SVt_NULL);
1275         SvANY(sv) = new_XNV();
1276         SvNV_set(sv, 0);
1277         return;
1278     case SVt_PVHV:
1279     case SVt_PVAV:
1280         assert(new_type_details->body_size);
1281
1282 #ifndef PURIFY  
1283         assert(new_type_details->arena);
1284         assert(new_type_details->arena_size);
1285         /* This points to the start of the allocated area.  */
1286         new_body_inline(new_body, new_type);
1287         Zero(new_body, new_type_details->body_size, char);
1288         new_body = ((char *)new_body) - new_type_details->offset;
1289 #else
1290         /* We always allocated the full length item with PURIFY. To do this
1291            we fake things so that arena is false for all 16 types..  */
1292         new_body = new_NOARENAZ(new_type_details);
1293 #endif
1294         SvANY(sv) = new_body;
1295         if (new_type == SVt_PVAV) {
1296             AvMAX(sv)   = -1;
1297             AvFILLp(sv) = -1;
1298             AvREAL_only(sv);
1299             if (old_type_details->body_size) {
1300                 AvALLOC(sv) = 0;
1301             } else {
1302                 /* It will have been zeroed when the new body was allocated.
1303                    Lets not write to it, in case it confuses a write-back
1304                    cache.  */
1305             }
1306         } else {
1307             assert(!SvOK(sv));
1308             SvOK_off(sv);
1309 #ifndef NODEFAULT_SHAREKEYS
1310             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1311 #endif
1312             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1313             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1314         }
1315
1316         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1317            The target created by newSVrv also is, and it can have magic.
1318            However, it never has SvPVX set.
1319         */
1320         if (old_type == SVt_IV) {
1321             assert(!SvROK(sv));
1322         } else if (old_type >= SVt_PV) {
1323             assert(SvPVX_const(sv) == 0);
1324         }
1325
1326         if (old_type >= SVt_PVMG) {
1327             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1328             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1329         } else {
1330             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1331         }
1332         break;
1333
1334     case SVt_PVIV:
1335         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1336            no route from NV to PVIV, NOK can never be true  */
1337         assert(!SvNOKp(sv));
1338         assert(!SvNOK(sv));
1339     case SVt_PVIO:
1340     case SVt_PVFM:
1341     case SVt_PVGV:
1342     case SVt_PVCV:
1343     case SVt_PVLV:
1344     case SVt_INVLIST:
1345     case SVt_REGEXP:
1346     case SVt_PVMG:
1347     case SVt_PVNV:
1348     case SVt_PV:
1349
1350         assert(new_type_details->body_size);
1351         /* We always allocated the full length item with PURIFY. To do this
1352            we fake things so that arena is false for all 16 types..  */
1353         if(new_type_details->arena) {
1354             /* This points to the start of the allocated area.  */
1355             new_body_inline(new_body, new_type);
1356             Zero(new_body, new_type_details->body_size, char);
1357             new_body = ((char *)new_body) - new_type_details->offset;
1358         } else {
1359             new_body = new_NOARENAZ(new_type_details);
1360         }
1361         SvANY(sv) = new_body;
1362
1363         if (old_type_details->copy) {
1364             /* There is now the potential for an upgrade from something without
1365                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1366             int offset = old_type_details->offset;
1367             int length = old_type_details->copy;
1368
1369             if (new_type_details->offset > old_type_details->offset) {
1370                 const int difference
1371                     = new_type_details->offset - old_type_details->offset;
1372                 offset += difference;
1373                 length -= difference;
1374             }
1375             assert (length >= 0);
1376                 
1377             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1378                  char);
1379         }
1380
1381 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1382         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1383          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1384          * NV slot, but the new one does, then we need to initialise the
1385          * freshly created NV slot with whatever the correct bit pattern is
1386          * for 0.0  */
1387         if (old_type_details->zero_nv && !new_type_details->zero_nv
1388             && !isGV_with_GP(sv))
1389             SvNV_set(sv, 0);
1390 #endif
1391
1392         if (UNLIKELY(new_type == SVt_PVIO)) {
1393             IO * const io = MUTABLE_IO(sv);
1394             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1395
1396             SvOBJECT_on(io);
1397             /* Clear the stashcache because a new IO could overrule a package
1398                name */
1399             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1400             hv_clear(PL_stashcache);
1401
1402             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1403             IoPAGE_LEN(sv) = 60;
1404         }
1405         if (UNLIKELY(new_type == SVt_REGEXP))
1406             sv->sv_u.svu_rx = (regexp *)new_body;
1407         else if (old_type < SVt_PV) {
1408             /* referant will be NULL unless the old type was SVt_IV emulating
1409                SVt_RV */
1410             sv->sv_u.svu_rv = referant;
1411         }
1412         break;
1413     default:
1414         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1415                    (unsigned long)new_type);
1416     }
1417
1418     if (old_type > SVt_IV) {
1419 #ifdef PURIFY
1420         safefree(old_body);
1421 #else
1422         /* Note that there is an assumption that all bodies of types that
1423            can be upgraded came from arenas. Only the more complex non-
1424            upgradable types are allowed to be directly malloc()ed.  */
1425         assert(old_type_details->arena);
1426         del_body((void*)((char*)old_body + old_type_details->offset),
1427                  &PL_body_roots[old_type]);
1428 #endif
1429     }
1430 }
1431
1432 /*
1433 =for apidoc sv_backoff
1434
1435 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1436 wrapper instead.
1437
1438 =cut
1439 */
1440
1441 int
1442 Perl_sv_backoff(pTHX_ SV *const sv)
1443 {
1444     STRLEN delta;
1445     const char * const s = SvPVX_const(sv);
1446
1447     PERL_ARGS_ASSERT_SV_BACKOFF;
1448     PERL_UNUSED_CONTEXT;
1449
1450     assert(SvOOK(sv));
1451     assert(SvTYPE(sv) != SVt_PVHV);
1452     assert(SvTYPE(sv) != SVt_PVAV);
1453
1454     SvOOK_offset(sv, delta);
1455     
1456     SvLEN_set(sv, SvLEN(sv) + delta);
1457     SvPV_set(sv, SvPVX(sv) - delta);
1458     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1459     SvFLAGS(sv) &= ~SVf_OOK;
1460     return 0;
1461 }
1462
1463 /*
1464 =for apidoc sv_grow
1465
1466 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1467 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1468 Use the C<SvGROW> wrapper instead.
1469
1470 =cut
1471 */
1472
1473 char *
1474 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1475 {
1476     char *s;
1477
1478     PERL_ARGS_ASSERT_SV_GROW;
1479
1480 #ifdef HAS_64K_LIMIT
1481     if (newlen >= 0x10000) {
1482         PerlIO_printf(Perl_debug_log,
1483                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1484         my_exit(1);
1485     }
1486 #endif /* HAS_64K_LIMIT */
1487     if (SvROK(sv))
1488         sv_unref(sv);
1489     if (SvTYPE(sv) < SVt_PV) {
1490         sv_upgrade(sv, SVt_PV);
1491         s = SvPVX_mutable(sv);
1492     }
1493     else if (SvOOK(sv)) {       /* pv is offset? */
1494         sv_backoff(sv);
1495         s = SvPVX_mutable(sv);
1496         if (newlen > SvLEN(sv))
1497             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1498 #ifdef HAS_64K_LIMIT
1499         if (newlen >= 0x10000)
1500             newlen = 0xFFFF;
1501 #endif
1502     }
1503     else
1504     {
1505         if (SvIsCOW(sv)) sv_force_normal(sv);
1506         s = SvPVX_mutable(sv);
1507     }
1508
1509 #ifdef PERL_NEW_COPY_ON_WRITE
1510     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1511      * to store the COW count. So in general, allocate one more byte than
1512      * asked for, to make it likely this byte is always spare: and thus
1513      * make more strings COW-able.
1514      * If the new size is a big power of two, don't bother: we assume the
1515      * caller wanted a nice 2^N sized block and will be annoyed at getting
1516      * 2^N+1 */
1517     if (newlen & 0xff)
1518         newlen++;
1519 #endif
1520
1521     if (newlen > SvLEN(sv)) {           /* need more room? */
1522         STRLEN minlen = SvCUR(sv);
1523         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1524         if (newlen < minlen)
1525             newlen = minlen;
1526 #ifndef Perl_safesysmalloc_size
1527         newlen = PERL_STRLEN_ROUNDUP(newlen);
1528 #endif
1529         if (SvLEN(sv) && s) {
1530             s = (char*)saferealloc(s, newlen);
1531         }
1532         else {
1533             s = (char*)safemalloc(newlen);
1534             if (SvPVX_const(sv) && SvCUR(sv)) {
1535                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1536             }
1537         }
1538         SvPV_set(sv, s);
1539 #ifdef Perl_safesysmalloc_size
1540         /* Do this here, do it once, do it right, and then we will never get
1541            called back into sv_grow() unless there really is some growing
1542            needed.  */
1543         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1544 #else
1545         SvLEN_set(sv, newlen);
1546 #endif
1547     }
1548     return s;
1549 }
1550
1551 /*
1552 =for apidoc sv_setiv
1553
1554 Copies an integer into the given SV, upgrading first if necessary.
1555 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1556
1557 =cut
1558 */
1559
1560 void
1561 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1562 {
1563     dVAR;
1564
1565     PERL_ARGS_ASSERT_SV_SETIV;
1566
1567     SV_CHECK_THINKFIRST_COW_DROP(sv);
1568     switch (SvTYPE(sv)) {
1569     case SVt_NULL:
1570     case SVt_NV:
1571         sv_upgrade(sv, SVt_IV);
1572         break;
1573     case SVt_PV:
1574         sv_upgrade(sv, SVt_PVIV);
1575         break;
1576
1577     case SVt_PVGV:
1578         if (!isGV_with_GP(sv))
1579             break;
1580     case SVt_PVAV:
1581     case SVt_PVHV:
1582     case SVt_PVCV:
1583     case SVt_PVFM:
1584     case SVt_PVIO:
1585         /* diag_listed_as: Can't coerce %s to %s in %s */
1586         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1587                    OP_DESC(PL_op));
1588     default: NOOP;
1589     }
1590     (void)SvIOK_only(sv);                       /* validate number */
1591     SvIV_set(sv, i);
1592     SvTAINT(sv);
1593 }
1594
1595 /*
1596 =for apidoc sv_setiv_mg
1597
1598 Like C<sv_setiv>, but also handles 'set' magic.
1599
1600 =cut
1601 */
1602
1603 void
1604 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1605 {
1606     PERL_ARGS_ASSERT_SV_SETIV_MG;
1607
1608     sv_setiv(sv,i);
1609     SvSETMAGIC(sv);
1610 }
1611
1612 /*
1613 =for apidoc sv_setuv
1614
1615 Copies an unsigned integer into the given SV, upgrading first if necessary.
1616 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1617
1618 =cut
1619 */
1620
1621 void
1622 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1623 {
1624     PERL_ARGS_ASSERT_SV_SETUV;
1625
1626     /* With the if statement to ensure that integers are stored as IVs whenever
1627        possible:
1628        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1629
1630        without
1631        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1632
1633        If you wish to remove the following if statement, so that this routine
1634        (and its callers) always return UVs, please benchmark to see what the
1635        effect is. Modern CPUs may be different. Or may not :-)
1636     */
1637     if (u <= (UV)IV_MAX) {
1638        sv_setiv(sv, (IV)u);
1639        return;
1640     }
1641     sv_setiv(sv, 0);
1642     SvIsUV_on(sv);
1643     SvUV_set(sv, u);
1644 }
1645
1646 /*
1647 =for apidoc sv_setuv_mg
1648
1649 Like C<sv_setuv>, but also handles 'set' magic.
1650
1651 =cut
1652 */
1653
1654 void
1655 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1656 {
1657     PERL_ARGS_ASSERT_SV_SETUV_MG;
1658
1659     sv_setuv(sv,u);
1660     SvSETMAGIC(sv);
1661 }
1662
1663 /*
1664 =for apidoc sv_setnv
1665
1666 Copies a double into the given SV, upgrading first if necessary.
1667 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1668
1669 =cut
1670 */
1671
1672 void
1673 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1674 {
1675     dVAR;
1676
1677     PERL_ARGS_ASSERT_SV_SETNV;
1678
1679     SV_CHECK_THINKFIRST_COW_DROP(sv);
1680     switch (SvTYPE(sv)) {
1681     case SVt_NULL:
1682     case SVt_IV:
1683         sv_upgrade(sv, SVt_NV);
1684         break;
1685     case SVt_PV:
1686     case SVt_PVIV:
1687         sv_upgrade(sv, SVt_PVNV);
1688         break;
1689
1690     case SVt_PVGV:
1691         if (!isGV_with_GP(sv))
1692             break;
1693     case SVt_PVAV:
1694     case SVt_PVHV:
1695     case SVt_PVCV:
1696     case SVt_PVFM:
1697     case SVt_PVIO:
1698         /* diag_listed_as: Can't coerce %s to %s in %s */
1699         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1700                    OP_DESC(PL_op));
1701     default: NOOP;
1702     }
1703     SvNV_set(sv, num);
1704     (void)SvNOK_only(sv);                       /* validate number */
1705     SvTAINT(sv);
1706 }
1707
1708 /*
1709 =for apidoc sv_setnv_mg
1710
1711 Like C<sv_setnv>, but also handles 'set' magic.
1712
1713 =cut
1714 */
1715
1716 void
1717 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1718 {
1719     PERL_ARGS_ASSERT_SV_SETNV_MG;
1720
1721     sv_setnv(sv,num);
1722     SvSETMAGIC(sv);
1723 }
1724
1725 /* Print an "isn't numeric" warning, using a cleaned-up,
1726  * printable version of the offending string
1727  */
1728
1729 STATIC void
1730 S_not_a_number(pTHX_ SV *const sv)
1731 {
1732      dVAR;
1733      SV *dsv;
1734      char tmpbuf[64];
1735      const char *pv;
1736
1737      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1738
1739      if (DO_UTF8(sv)) {
1740           dsv = newSVpvs_flags("", SVs_TEMP);
1741           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1742      } else {
1743           char *d = tmpbuf;
1744           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1745           /* each *s can expand to 4 chars + "...\0",
1746              i.e. need room for 8 chars */
1747         
1748           const char *s = SvPVX_const(sv);
1749           const char * const end = s + SvCUR(sv);
1750           for ( ; s < end && d < limit; s++ ) {
1751                int ch = *s & 0xFF;
1752                if (ch & 128 && !isPRINT_LC(ch)) {
1753                     *d++ = 'M';
1754                     *d++ = '-';
1755                     ch &= 127;
1756                }
1757                if (ch == '\n') {
1758                     *d++ = '\\';
1759                     *d++ = 'n';
1760                }
1761                else if (ch == '\r') {
1762                     *d++ = '\\';
1763                     *d++ = 'r';
1764                }
1765                else if (ch == '\f') {
1766                     *d++ = '\\';
1767                     *d++ = 'f';
1768                }
1769                else if (ch == '\\') {
1770                     *d++ = '\\';
1771                     *d++ = '\\';
1772                }
1773                else if (ch == '\0') {
1774                     *d++ = '\\';
1775                     *d++ = '0';
1776                }
1777                else if (isPRINT_LC(ch))
1778                     *d++ = ch;
1779                else {
1780                     *d++ = '^';
1781                     *d++ = toCTRL(ch);
1782                }
1783           }
1784           if (s < end) {
1785                *d++ = '.';
1786                *d++ = '.';
1787                *d++ = '.';
1788           }
1789           *d = '\0';
1790           pv = tmpbuf;
1791     }
1792
1793     if (PL_op)
1794         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1795                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1796                     "Argument \"%s\" isn't numeric in %s", pv,
1797                     OP_DESC(PL_op));
1798     else
1799         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1800                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1801                     "Argument \"%s\" isn't numeric", pv);
1802 }
1803
1804 /*
1805 =for apidoc looks_like_number
1806
1807 Test if the content of an SV looks like a number (or is a number).
1808 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1809 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1810 ignored.
1811
1812 =cut
1813 */
1814
1815 I32
1816 Perl_looks_like_number(pTHX_ SV *const sv)
1817 {
1818     const char *sbegin;
1819     STRLEN len;
1820
1821     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1822
1823     if (SvPOK(sv) || SvPOKp(sv)) {
1824         sbegin = SvPV_nomg_const(sv, len);
1825     }
1826     else
1827         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1828     return grok_number(sbegin, len, NULL);
1829 }
1830
1831 STATIC bool
1832 S_glob_2number(pTHX_ GV * const gv)
1833 {
1834     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1835
1836     /* We know that all GVs stringify to something that is not-a-number,
1837         so no need to test that.  */
1838     if (ckWARN(WARN_NUMERIC))
1839     {
1840         SV *const buffer = sv_newmortal();
1841         gv_efullname3(buffer, gv, "*");
1842         not_a_number(buffer);
1843     }
1844     /* We just want something true to return, so that S_sv_2iuv_common
1845         can tail call us and return true.  */
1846     return TRUE;
1847 }
1848
1849 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1850    until proven guilty, assume that things are not that bad... */
1851
1852 /*
1853    NV_PRESERVES_UV:
1854
1855    As 64 bit platforms often have an NV that doesn't preserve all bits of
1856    an IV (an assumption perl has been based on to date) it becomes necessary
1857    to remove the assumption that the NV always carries enough precision to
1858    recreate the IV whenever needed, and that the NV is the canonical form.
1859    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1860    precision as a side effect of conversion (which would lead to insanity
1861    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1862    1) to distinguish between IV/UV/NV slots that have cached a valid
1863       conversion where precision was lost and IV/UV/NV slots that have a
1864       valid conversion which has lost no precision
1865    2) to ensure that if a numeric conversion to one form is requested that
1866       would lose precision, the precise conversion (or differently
1867       imprecise conversion) is also performed and cached, to prevent
1868       requests for different numeric formats on the same SV causing
1869       lossy conversion chains. (lossless conversion chains are perfectly
1870       acceptable (still))
1871
1872
1873    flags are used:
1874    SvIOKp is true if the IV slot contains a valid value
1875    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1876    SvNOKp is true if the NV slot contains a valid value
1877    SvNOK  is true only if the NV value is accurate
1878
1879    so
1880    while converting from PV to NV, check to see if converting that NV to an
1881    IV(or UV) would lose accuracy over a direct conversion from PV to
1882    IV(or UV). If it would, cache both conversions, return NV, but mark
1883    SV as IOK NOKp (ie not NOK).
1884
1885    While converting from PV to IV, check to see if converting that IV to an
1886    NV would lose accuracy over a direct conversion from PV to NV. If it
1887    would, cache both conversions, flag similarly.
1888
1889    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1890    correctly because if IV & NV were set NV *always* overruled.
1891    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1892    changes - now IV and NV together means that the two are interchangeable:
1893    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1894
1895    The benefit of this is that operations such as pp_add know that if
1896    SvIOK is true for both left and right operands, then integer addition
1897    can be used instead of floating point (for cases where the result won't
1898    overflow). Before, floating point was always used, which could lead to
1899    loss of precision compared with integer addition.
1900
1901    * making IV and NV equal status should make maths accurate on 64 bit
1902      platforms
1903    * may speed up maths somewhat if pp_add and friends start to use
1904      integers when possible instead of fp. (Hopefully the overhead in
1905      looking for SvIOK and checking for overflow will not outweigh the
1906      fp to integer speedup)
1907    * will slow down integer operations (callers of SvIV) on "inaccurate"
1908      values, as the change from SvIOK to SvIOKp will cause a call into
1909      sv_2iv each time rather than a macro access direct to the IV slot
1910    * should speed up number->string conversion on integers as IV is
1911      favoured when IV and NV are equally accurate
1912
1913    ####################################################################
1914    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1915    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1916    On the other hand, SvUOK is true iff UV.
1917    ####################################################################
1918
1919    Your mileage will vary depending your CPU's relative fp to integer
1920    performance ratio.
1921 */
1922
1923 #ifndef NV_PRESERVES_UV
1924 #  define IS_NUMBER_UNDERFLOW_IV 1
1925 #  define IS_NUMBER_UNDERFLOW_UV 2
1926 #  define IS_NUMBER_IV_AND_UV    2
1927 #  define IS_NUMBER_OVERFLOW_IV  4
1928 #  define IS_NUMBER_OVERFLOW_UV  5
1929
1930 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1931
1932 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1933 STATIC int
1934 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1935 #  ifdef DEBUGGING
1936                        , I32 numtype
1937 #  endif
1938                        )
1939 {
1940     dVAR;
1941
1942     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1943
1944     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1945     if (SvNVX(sv) < (NV)IV_MIN) {
1946         (void)SvIOKp_on(sv);
1947         (void)SvNOK_on(sv);
1948         SvIV_set(sv, IV_MIN);
1949         return IS_NUMBER_UNDERFLOW_IV;
1950     }
1951     if (SvNVX(sv) > (NV)UV_MAX) {
1952         (void)SvIOKp_on(sv);
1953         (void)SvNOK_on(sv);
1954         SvIsUV_on(sv);
1955         SvUV_set(sv, UV_MAX);
1956         return IS_NUMBER_OVERFLOW_UV;
1957     }
1958     (void)SvIOKp_on(sv);
1959     (void)SvNOK_on(sv);
1960     /* Can't use strtol etc to convert this string.  (See truth table in
1961        sv_2iv  */
1962     if (SvNVX(sv) <= (UV)IV_MAX) {
1963         SvIV_set(sv, I_V(SvNVX(sv)));
1964         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1965             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1966         } else {
1967             /* Integer is imprecise. NOK, IOKp */
1968         }
1969         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1970     }
1971     SvIsUV_on(sv);
1972     SvUV_set(sv, U_V(SvNVX(sv)));
1973     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1974         if (SvUVX(sv) == UV_MAX) {
1975             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1976                possibly be preserved by NV. Hence, it must be overflow.
1977                NOK, IOKp */
1978             return IS_NUMBER_OVERFLOW_UV;
1979         }
1980         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1981     } else {
1982         /* Integer is imprecise. NOK, IOKp */
1983     }
1984     return IS_NUMBER_OVERFLOW_IV;
1985 }
1986 #endif /* !NV_PRESERVES_UV*/
1987
1988 STATIC bool
1989 S_sv_2iuv_common(pTHX_ SV *const sv)
1990 {
1991     dVAR;
1992
1993     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1994
1995     if (SvNOKp(sv)) {
1996         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1997          * without also getting a cached IV/UV from it at the same time
1998          * (ie PV->NV conversion should detect loss of accuracy and cache
1999          * IV or UV at same time to avoid this. */
2000         /* IV-over-UV optimisation - choose to cache IV if possible */
2001
2002         if (SvTYPE(sv) == SVt_NV)
2003             sv_upgrade(sv, SVt_PVNV);
2004
2005         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2006         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2007            certainly cast into the IV range at IV_MAX, whereas the correct
2008            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2009            cases go to UV */
2010 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2011         if (Perl_isnan(SvNVX(sv))) {
2012             SvUV_set(sv, 0);
2013             SvIsUV_on(sv);
2014             return FALSE;
2015         }
2016 #endif
2017         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2018             SvIV_set(sv, I_V(SvNVX(sv)));
2019             if (SvNVX(sv) == (NV) SvIVX(sv)
2020 #ifndef NV_PRESERVES_UV
2021                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2022                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2023                 /* Don't flag it as "accurately an integer" if the number
2024                    came from a (by definition imprecise) NV operation, and
2025                    we're outside the range of NV integer precision */
2026 #endif
2027                 ) {
2028                 if (SvNOK(sv))
2029                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2030                 else {
2031                     /* scalar has trailing garbage, eg "42a" */
2032                 }
2033                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2034                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2035                                       PTR2UV(sv),
2036                                       SvNVX(sv),
2037                                       SvIVX(sv)));
2038
2039             } else {
2040                 /* IV not precise.  No need to convert from PV, as NV
2041                    conversion would already have cached IV if it detected
2042                    that PV->IV would be better than PV->NV->IV
2043                    flags already correct - don't set public IOK.  */
2044                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2045                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2046                                       PTR2UV(sv),
2047                                       SvNVX(sv),
2048                                       SvIVX(sv)));
2049             }
2050             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2051                but the cast (NV)IV_MIN rounds to a the value less (more
2052                negative) than IV_MIN which happens to be equal to SvNVX ??
2053                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2054                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2055                (NV)UVX == NVX are both true, but the values differ. :-(
2056                Hopefully for 2s complement IV_MIN is something like
2057                0x8000000000000000 which will be exact. NWC */
2058         }
2059         else {
2060             SvUV_set(sv, U_V(SvNVX(sv)));
2061             if (
2062                 (SvNVX(sv) == (NV) SvUVX(sv))
2063 #ifndef  NV_PRESERVES_UV
2064                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2065                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2066                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2067                 /* Don't flag it as "accurately an integer" if the number
2068                    came from a (by definition imprecise) NV operation, and
2069                    we're outside the range of NV integer precision */
2070 #endif
2071                 && SvNOK(sv)
2072                 )
2073                 SvIOK_on(sv);
2074             SvIsUV_on(sv);
2075             DEBUG_c(PerlIO_printf(Perl_debug_log,
2076                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2077                                   PTR2UV(sv),
2078                                   SvUVX(sv),
2079                                   SvUVX(sv)));
2080         }
2081     }
2082     else if (SvPOKp(sv)) {
2083         UV value;
2084         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2085         /* We want to avoid a possible problem when we cache an IV/ a UV which
2086            may be later translated to an NV, and the resulting NV is not
2087            the same as the direct translation of the initial string
2088            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2089            be careful to ensure that the value with the .456 is around if the
2090            NV value is requested in the future).
2091         
2092            This means that if we cache such an IV/a UV, we need to cache the
2093            NV as well.  Moreover, we trade speed for space, and do not
2094            cache the NV if we are sure it's not needed.
2095          */
2096
2097         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2098         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2099              == IS_NUMBER_IN_UV) {
2100             /* It's definitely an integer, only upgrade to PVIV */
2101             if (SvTYPE(sv) < SVt_PVIV)
2102                 sv_upgrade(sv, SVt_PVIV);
2103             (void)SvIOK_on(sv);
2104         } else if (SvTYPE(sv) < SVt_PVNV)
2105             sv_upgrade(sv, SVt_PVNV);
2106
2107         /* If NVs preserve UVs then we only use the UV value if we know that
2108            we aren't going to call atof() below. If NVs don't preserve UVs
2109            then the value returned may have more precision than atof() will
2110            return, even though value isn't perfectly accurate.  */
2111         if ((numtype & (IS_NUMBER_IN_UV
2112 #ifdef NV_PRESERVES_UV
2113                         | IS_NUMBER_NOT_INT
2114 #endif
2115             )) == IS_NUMBER_IN_UV) {
2116             /* This won't turn off the public IOK flag if it was set above  */
2117             (void)SvIOKp_on(sv);
2118
2119             if (!(numtype & IS_NUMBER_NEG)) {
2120                 /* positive */;
2121                 if (value <= (UV)IV_MAX) {
2122                     SvIV_set(sv, (IV)value);
2123                 } else {
2124                     /* it didn't overflow, and it was positive. */
2125                     SvUV_set(sv, value);
2126                     SvIsUV_on(sv);
2127                 }
2128             } else {
2129                 /* 2s complement assumption  */
2130                 if (value <= (UV)IV_MIN) {
2131                     SvIV_set(sv, -(IV)value);
2132                 } else {
2133                     /* Too negative for an IV.  This is a double upgrade, but
2134                        I'm assuming it will be rare.  */
2135                     if (SvTYPE(sv) < SVt_PVNV)
2136                         sv_upgrade(sv, SVt_PVNV);
2137                     SvNOK_on(sv);
2138                     SvIOK_off(sv);
2139                     SvIOKp_on(sv);
2140                     SvNV_set(sv, -(NV)value);
2141                     SvIV_set(sv, IV_MIN);
2142                 }
2143             }
2144         }
2145         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2146            will be in the previous block to set the IV slot, and the next
2147            block to set the NV slot.  So no else here.  */
2148         
2149         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2150             != IS_NUMBER_IN_UV) {
2151             /* It wasn't an (integer that doesn't overflow the UV). */
2152             SvNV_set(sv, Atof(SvPVX_const(sv)));
2153
2154             if (! numtype && ckWARN(WARN_NUMERIC))
2155                 not_a_number(sv);
2156
2157 #if defined(USE_LONG_DOUBLE)
2158             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2159                                   PTR2UV(sv), SvNVX(sv)));
2160 #else
2161             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2162                                   PTR2UV(sv), SvNVX(sv)));
2163 #endif
2164
2165 #ifdef NV_PRESERVES_UV
2166             (void)SvIOKp_on(sv);
2167             (void)SvNOK_on(sv);
2168             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2169                 SvIV_set(sv, I_V(SvNVX(sv)));
2170                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2171                     SvIOK_on(sv);
2172                 } else {
2173                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2174                 }
2175                 /* UV will not work better than IV */
2176             } else {
2177                 if (SvNVX(sv) > (NV)UV_MAX) {
2178                     SvIsUV_on(sv);
2179                     /* Integer is inaccurate. NOK, IOKp, is UV */
2180                     SvUV_set(sv, UV_MAX);
2181                 } else {
2182                     SvUV_set(sv, U_V(SvNVX(sv)));
2183                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2184                        NV preservse UV so can do correct comparison.  */
2185                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2186                         SvIOK_on(sv);
2187                     } else {
2188                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2189                     }
2190                 }
2191                 SvIsUV_on(sv);
2192             }
2193 #else /* NV_PRESERVES_UV */
2194             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2195                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2196                 /* The IV/UV slot will have been set from value returned by
2197                    grok_number above.  The NV slot has just been set using
2198                    Atof.  */
2199                 SvNOK_on(sv);
2200                 assert (SvIOKp(sv));
2201             } else {
2202                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2203                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2204                     /* Small enough to preserve all bits. */
2205                     (void)SvIOKp_on(sv);
2206                     SvNOK_on(sv);
2207                     SvIV_set(sv, I_V(SvNVX(sv)));
2208                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2209                         SvIOK_on(sv);
2210                     /* Assumption: first non-preserved integer is < IV_MAX,
2211                        this NV is in the preserved range, therefore: */
2212                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2213                           < (UV)IV_MAX)) {
2214                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2215                     }
2216                 } else {
2217                     /* IN_UV NOT_INT
2218                          0      0       already failed to read UV.
2219                          0      1       already failed to read UV.
2220                          1      0       you won't get here in this case. IV/UV
2221                                         slot set, public IOK, Atof() unneeded.
2222                          1      1       already read UV.
2223                        so there's no point in sv_2iuv_non_preserve() attempting
2224                        to use atol, strtol, strtoul etc.  */
2225 #  ifdef DEBUGGING
2226                     sv_2iuv_non_preserve (sv, numtype);
2227 #  else
2228                     sv_2iuv_non_preserve (sv);
2229 #  endif
2230                 }
2231             }
2232 #endif /* NV_PRESERVES_UV */
2233         /* It might be more code efficient to go through the entire logic above
2234            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2235            gets complex and potentially buggy, so more programmer efficient
2236            to do it this way, by turning off the public flags:  */
2237         if (!numtype)
2238             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2239         }
2240     }
2241     else  {
2242         if (isGV_with_GP(sv))
2243             return glob_2number(MUTABLE_GV(sv));
2244
2245         if (!SvPADTMP(sv)) {
2246             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2247                 report_uninit(sv);
2248         }
2249         if (SvTYPE(sv) < SVt_IV)
2250             /* Typically the caller expects that sv_any is not NULL now.  */
2251             sv_upgrade(sv, SVt_IV);
2252         /* Return 0 from the caller.  */
2253         return TRUE;
2254     }
2255     return FALSE;
2256 }
2257
2258 /*
2259 =for apidoc sv_2iv_flags
2260
2261 Return the integer value of an SV, doing any necessary string
2262 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2263 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2264
2265 =cut
2266 */
2267
2268 IV
2269 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2270 {
2271     dVAR;
2272
2273     if (!sv)
2274         return 0;
2275
2276     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2277          && SvTYPE(sv) != SVt_PVFM);
2278
2279     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2280         mg_get(sv);
2281
2282     if (SvROK(sv)) {
2283         if (SvAMAGIC(sv)) {
2284             SV * tmpstr;
2285             if (flags & SV_SKIP_OVERLOAD)
2286                 return 0;
2287             tmpstr = AMG_CALLunary(sv, numer_amg);
2288             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2289                 return SvIV(tmpstr);
2290             }
2291         }
2292         return PTR2IV(SvRV(sv));
2293     }
2294
2295     if (SvVALID(sv) || isREGEXP(sv)) {
2296         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2297            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2298            In practice they are extremely unlikely to actually get anywhere
2299            accessible by user Perl code - the only way that I'm aware of is when
2300            a constant subroutine which is used as the second argument to index.
2301
2302            Regexps have no SvIVX and SvNVX fields.
2303         */
2304         assert(isREGEXP(sv) || SvPOKp(sv));
2305         {
2306             UV value;
2307             const char * const ptr =
2308                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2309             const int numtype
2310                 = grok_number(ptr, SvCUR(sv), &value);
2311
2312             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2313                 == IS_NUMBER_IN_UV) {
2314                 /* It's definitely an integer */
2315                 if (numtype & IS_NUMBER_NEG) {
2316                     if (value < (UV)IV_MIN)
2317                         return -(IV)value;
2318                 } else {
2319                     if (value < (UV)IV_MAX)
2320                         return (IV)value;
2321                 }
2322             }
2323             if (!numtype) {
2324                 if (ckWARN(WARN_NUMERIC))
2325                     not_a_number(sv);
2326             }
2327             return I_V(Atof(ptr));
2328         }
2329     }
2330
2331     if (SvTHINKFIRST(sv)) {
2332 #ifdef PERL_OLD_COPY_ON_WRITE
2333         if (SvIsCOW(sv)) {
2334             sv_force_normal_flags(sv, 0);
2335         }
2336 #endif
2337         if (SvREADONLY(sv) && !SvOK(sv)) {
2338             if (ckWARN(WARN_UNINITIALIZED))
2339                 report_uninit(sv);
2340             return 0;
2341         }
2342     }
2343
2344     if (!SvIOKp(sv)) {
2345         if (S_sv_2iuv_common(aTHX_ sv))
2346             return 0;
2347     }
2348
2349     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2350         PTR2UV(sv),SvIVX(sv)));
2351     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2352 }
2353
2354 /*
2355 =for apidoc sv_2uv_flags
2356
2357 Return the unsigned integer value of an SV, doing any necessary string
2358 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2359 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2360
2361 =cut
2362 */
2363
2364 UV
2365 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2366 {
2367     dVAR;
2368
2369     if (!sv)
2370         return 0;
2371
2372     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2373         mg_get(sv);
2374
2375     if (SvROK(sv)) {
2376         if (SvAMAGIC(sv)) {
2377             SV *tmpstr;
2378             if (flags & SV_SKIP_OVERLOAD)
2379                 return 0;
2380             tmpstr = AMG_CALLunary(sv, numer_amg);
2381             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2382                 return SvUV(tmpstr);
2383             }
2384         }
2385         return PTR2UV(SvRV(sv));
2386     }
2387
2388     if (SvVALID(sv) || isREGEXP(sv)) {
2389         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2390            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2391            Regexps have no SvIVX and SvNVX fields. */
2392         assert(isREGEXP(sv) || SvPOKp(sv));
2393         {
2394             UV value;
2395             const char * const ptr =
2396                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2397             const int numtype
2398                 = grok_number(ptr, SvCUR(sv), &value);
2399
2400             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2401                 == IS_NUMBER_IN_UV) {
2402                 /* It's definitely an integer */
2403                 if (!(numtype & IS_NUMBER_NEG))
2404                     return value;
2405             }
2406             if (!numtype) {
2407                 if (ckWARN(WARN_NUMERIC))
2408                     not_a_number(sv);
2409             }
2410             return U_V(Atof(ptr));
2411         }
2412     }
2413
2414     if (SvTHINKFIRST(sv)) {
2415 #ifdef PERL_OLD_COPY_ON_WRITE
2416         if (SvIsCOW(sv)) {
2417             sv_force_normal_flags(sv, 0);
2418         }
2419 #endif
2420         if (SvREADONLY(sv) && !SvOK(sv)) {
2421             if (ckWARN(WARN_UNINITIALIZED))
2422                 report_uninit(sv);
2423             return 0;
2424         }
2425     }
2426
2427     if (!SvIOKp(sv)) {
2428         if (S_sv_2iuv_common(aTHX_ sv))
2429             return 0;
2430     }
2431
2432     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2433                           PTR2UV(sv),SvUVX(sv)));
2434     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2435 }
2436
2437 /*
2438 =for apidoc sv_2nv_flags
2439
2440 Return the num value of an SV, doing any necessary string or integer
2441 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2442 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2443
2444 =cut
2445 */
2446
2447 NV
2448 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2449 {
2450     dVAR;
2451     if (!sv)
2452         return 0.0;
2453     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2454          && SvTYPE(sv) != SVt_PVFM);
2455     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2456         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2457            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2458            Regexps have no SvIVX and SvNVX fields.  */
2459         const char *ptr;
2460         if (flags & SV_GMAGIC)
2461             mg_get(sv);
2462         if (SvNOKp(sv))
2463             return SvNVX(sv);
2464         if (SvPOKp(sv) && !SvIOKp(sv)) {
2465             ptr = SvPVX_const(sv);
2466           grokpv:
2467             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2468                 !grok_number(ptr, SvCUR(sv), NULL))
2469                 not_a_number(sv);
2470             return Atof(ptr);
2471         }
2472         if (SvIOKp(sv)) {
2473             if (SvIsUV(sv))
2474                 return (NV)SvUVX(sv);
2475             else
2476                 return (NV)SvIVX(sv);
2477         }
2478         if (SvROK(sv)) {
2479             goto return_rok;
2480         }
2481         if (isREGEXP(sv)) {
2482             ptr = RX_WRAPPED((REGEXP *)sv);
2483             goto grokpv;
2484         }
2485         assert(SvTYPE(sv) >= SVt_PVMG);
2486         /* This falls through to the report_uninit near the end of the
2487            function. */
2488     } else if (SvTHINKFIRST(sv)) {
2489         if (SvROK(sv)) {
2490         return_rok:
2491             if (SvAMAGIC(sv)) {
2492                 SV *tmpstr;
2493                 if (flags & SV_SKIP_OVERLOAD)
2494                     return 0;
2495                 tmpstr = AMG_CALLunary(sv, numer_amg);
2496                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2497                     return SvNV(tmpstr);
2498                 }
2499             }
2500             return PTR2NV(SvRV(sv));
2501         }
2502 #ifdef PERL_OLD_COPY_ON_WRITE
2503         if (SvIsCOW(sv)) {
2504             sv_force_normal_flags(sv, 0);
2505         }
2506 #endif
2507         if (SvREADONLY(sv) && !SvOK(sv)) {
2508             if (ckWARN(WARN_UNINITIALIZED))
2509                 report_uninit(sv);
2510             return 0.0;
2511         }
2512     }
2513     if (SvTYPE(sv) < SVt_NV) {
2514         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2515         sv_upgrade(sv, SVt_NV);
2516 #ifdef USE_LONG_DOUBLE
2517         DEBUG_c({
2518             STORE_NUMERIC_LOCAL_SET_STANDARD();
2519             PerlIO_printf(Perl_debug_log,
2520                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2521                           PTR2UV(sv), SvNVX(sv));
2522             RESTORE_NUMERIC_LOCAL();
2523         });
2524 #else
2525         DEBUG_c({
2526             STORE_NUMERIC_LOCAL_SET_STANDARD();
2527             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2528                           PTR2UV(sv), SvNVX(sv));
2529             RESTORE_NUMERIC_LOCAL();
2530         });
2531 #endif
2532     }
2533     else if (SvTYPE(sv) < SVt_PVNV)
2534         sv_upgrade(sv, SVt_PVNV);
2535     if (SvNOKp(sv)) {
2536         return SvNVX(sv);
2537     }
2538     if (SvIOKp(sv)) {
2539         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2540 #ifdef NV_PRESERVES_UV
2541         if (SvIOK(sv))
2542             SvNOK_on(sv);
2543         else
2544             SvNOKp_on(sv);
2545 #else
2546         /* Only set the public NV OK flag if this NV preserves the IV  */
2547         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2548         if (SvIOK(sv) &&
2549             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2550                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2551             SvNOK_on(sv);
2552         else
2553             SvNOKp_on(sv);
2554 #endif
2555     }
2556     else if (SvPOKp(sv)) {
2557         UV value;
2558         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2559         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2560             not_a_number(sv);
2561 #ifdef NV_PRESERVES_UV
2562         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563             == IS_NUMBER_IN_UV) {
2564             /* It's definitely an integer */
2565             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2566         } else
2567             SvNV_set(sv, Atof(SvPVX_const(sv)));
2568         if (numtype)
2569             SvNOK_on(sv);
2570         else
2571             SvNOKp_on(sv);
2572 #else
2573         SvNV_set(sv, Atof(SvPVX_const(sv)));
2574         /* Only set the public NV OK flag if this NV preserves the value in
2575            the PV at least as well as an IV/UV would.
2576            Not sure how to do this 100% reliably. */
2577         /* if that shift count is out of range then Configure's test is
2578            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2579            UV_BITS */
2580         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2581             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2582             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2583         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2584             /* Can't use strtol etc to convert this string, so don't try.
2585                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2586             SvNOK_on(sv);
2587         } else {
2588             /* value has been set.  It may not be precise.  */
2589             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2590                 /* 2s complement assumption for (UV)IV_MIN  */
2591                 SvNOK_on(sv); /* Integer is too negative.  */
2592             } else {
2593                 SvNOKp_on(sv);
2594                 SvIOKp_on(sv);
2595
2596                 if (numtype & IS_NUMBER_NEG) {
2597                     SvIV_set(sv, -(IV)value);
2598                 } else if (value <= (UV)IV_MAX) {
2599                     SvIV_set(sv, (IV)value);
2600                 } else {
2601                     SvUV_set(sv, value);
2602                     SvIsUV_on(sv);
2603                 }
2604
2605                 if (numtype & IS_NUMBER_NOT_INT) {
2606                     /* I believe that even if the original PV had decimals,
2607                        they are lost beyond the limit of the FP precision.
2608                        However, neither is canonical, so both only get p
2609                        flags.  NWC, 2000/11/25 */
2610                     /* Both already have p flags, so do nothing */
2611                 } else {
2612                     const NV nv = SvNVX(sv);
2613                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2614                         if (SvIVX(sv) == I_V(nv)) {
2615                             SvNOK_on(sv);
2616                         } else {
2617                             /* It had no "." so it must be integer.  */
2618                         }
2619                         SvIOK_on(sv);
2620                     } else {
2621                         /* between IV_MAX and NV(UV_MAX).
2622                            Could be slightly > UV_MAX */
2623
2624                         if (numtype & IS_NUMBER_NOT_INT) {
2625                             /* UV and NV both imprecise.  */
2626                         } else {
2627                             const UV nv_as_uv = U_V(nv);
2628
2629                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2630                                 SvNOK_on(sv);
2631                             }
2632                             SvIOK_on(sv);
2633                         }
2634                     }
2635                 }
2636             }
2637         }
2638         /* It might be more code efficient to go through the entire logic above
2639            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2640            gets complex and potentially buggy, so more programmer efficient
2641            to do it this way, by turning off the public flags:  */
2642         if (!numtype)
2643             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2644 #endif /* NV_PRESERVES_UV */
2645     }
2646     else  {
2647         if (isGV_with_GP(sv)) {
2648             glob_2number(MUTABLE_GV(sv));
2649             return 0.0;
2650         }
2651
2652         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2653             report_uninit(sv);
2654         assert (SvTYPE(sv) >= SVt_NV);
2655         /* Typically the caller expects that sv_any is not NULL now.  */
2656         /* XXX Ilya implies that this is a bug in callers that assume this
2657            and ideally should be fixed.  */
2658         return 0.0;
2659     }
2660 #if defined(USE_LONG_DOUBLE)
2661     DEBUG_c({
2662         STORE_NUMERIC_LOCAL_SET_STANDARD();
2663         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2664                       PTR2UV(sv), SvNVX(sv));
2665         RESTORE_NUMERIC_LOCAL();
2666     });
2667 #else
2668     DEBUG_c({
2669         STORE_NUMERIC_LOCAL_SET_STANDARD();
2670         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2671                       PTR2UV(sv), SvNVX(sv));
2672         RESTORE_NUMERIC_LOCAL();
2673     });
2674 #endif
2675     return SvNVX(sv);
2676 }
2677
2678 /*
2679 =for apidoc sv_2num
2680
2681 Return an SV with the numeric value of the source SV, doing any necessary
2682 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2683 access this function.
2684
2685 =cut
2686 */
2687
2688 SV *
2689 Perl_sv_2num(pTHX_ SV *const sv)
2690 {
2691     PERL_ARGS_ASSERT_SV_2NUM;
2692
2693     if (!SvROK(sv))
2694         return sv;
2695     if (SvAMAGIC(sv)) {
2696         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2697         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2698         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2699             return sv_2num(tmpsv);
2700     }
2701     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2702 }
2703
2704 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2705  * UV as a string towards the end of buf, and return pointers to start and
2706  * end of it.
2707  *
2708  * We assume that buf is at least TYPE_CHARS(UV) long.
2709  */
2710
2711 static char *
2712 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2713 {
2714     char *ptr = buf + TYPE_CHARS(UV);
2715     char * const ebuf = ptr;
2716     int sign;
2717
2718     PERL_ARGS_ASSERT_UIV_2BUF;
2719
2720     if (is_uv)
2721         sign = 0;
2722     else if (iv >= 0) {
2723         uv = iv;
2724         sign = 0;
2725     } else {
2726         uv = -iv;
2727         sign = 1;
2728     }
2729     do {
2730         *--ptr = '0' + (char)(uv % 10);
2731     } while (uv /= 10);
2732     if (sign)
2733         *--ptr = '-';
2734     *peob = ebuf;
2735     return ptr;
2736 }
2737
2738 /*
2739 =for apidoc sv_2pv_flags
2740
2741 Returns a pointer to the string value of an SV, and sets *lp to its length.
2742 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2743 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2744 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2745
2746 =cut
2747 */
2748
2749 char *
2750 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2751 {
2752     dVAR;
2753     char *s;
2754
2755     if (!sv) {
2756         if (lp)
2757             *lp = 0;
2758         return (char *)"";
2759     }
2760     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2761          && SvTYPE(sv) != SVt_PVFM);
2762     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2763         mg_get(sv);
2764     if (SvROK(sv)) {
2765         if (SvAMAGIC(sv)) {
2766             SV *tmpstr;
2767             if (flags & SV_SKIP_OVERLOAD)
2768                 return NULL;
2769             tmpstr = AMG_CALLunary(sv, string_amg);
2770             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2771             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2772                 /* Unwrap this:  */
2773                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2774                  */
2775
2776                 char *pv;
2777                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2778                     if (flags & SV_CONST_RETURN) {
2779                         pv = (char *) SvPVX_const(tmpstr);
2780                     } else {
2781                         pv = (flags & SV_MUTABLE_RETURN)
2782                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2783                     }
2784                     if (lp)
2785                         *lp = SvCUR(tmpstr);
2786                 } else {
2787                     pv = sv_2pv_flags(tmpstr, lp, flags);
2788                 }
2789                 if (SvUTF8(tmpstr))
2790                     SvUTF8_on(sv);
2791                 else
2792                     SvUTF8_off(sv);
2793                 return pv;
2794             }
2795         }
2796         {
2797             STRLEN len;
2798             char *retval;
2799             char *buffer;
2800             SV *const referent = SvRV(sv);
2801
2802             if (!referent) {
2803                 len = 7;
2804                 retval = buffer = savepvn("NULLREF", len);
2805             } else if (SvTYPE(referent) == SVt_REGEXP &&
2806                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2807                         amagic_is_enabled(string_amg))) {
2808                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2809
2810                 assert(re);
2811                         
2812                 /* If the regex is UTF-8 we want the containing scalar to
2813                    have an UTF-8 flag too */
2814                 if (RX_UTF8(re))
2815                     SvUTF8_on(sv);
2816                 else
2817                     SvUTF8_off(sv);     
2818
2819                 if (lp)
2820                     *lp = RX_WRAPLEN(re);
2821  
2822                 return RX_WRAPPED(re);
2823             } else {
2824                 const char *const typestr = sv_reftype(referent, 0);
2825                 const STRLEN typelen = strlen(typestr);
2826                 UV addr = PTR2UV(referent);
2827                 const char *stashname = NULL;
2828                 STRLEN stashnamelen = 0; /* hush, gcc */
2829                 const char *buffer_end;
2830
2831                 if (SvOBJECT(referent)) {
2832                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2833
2834                     if (name) {
2835                         stashname = HEK_KEY(name);
2836                         stashnamelen = HEK_LEN(name);
2837
2838                         if (HEK_UTF8(name)) {
2839                             SvUTF8_on(sv);
2840                         } else {
2841                             SvUTF8_off(sv);
2842                         }
2843                     } else {
2844                         stashname = "__ANON__";
2845                         stashnamelen = 8;
2846                     }
2847                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2848                         + 2 * sizeof(UV) + 2 /* )\0 */;
2849                 } else {
2850                     len = typelen + 3 /* (0x */
2851                         + 2 * sizeof(UV) + 2 /* )\0 */;
2852                 }
2853
2854                 Newx(buffer, len, char);
2855                 buffer_end = retval = buffer + len;
2856
2857                 /* Working backwards  */
2858                 *--retval = '\0';
2859                 *--retval = ')';
2860                 do {
2861                     *--retval = PL_hexdigit[addr & 15];
2862                 } while (addr >>= 4);
2863                 *--retval = 'x';
2864                 *--retval = '0';
2865                 *--retval = '(';
2866
2867                 retval -= typelen;
2868                 memcpy(retval, typestr, typelen);
2869
2870                 if (stashname) {
2871                     *--retval = '=';
2872                     retval -= stashnamelen;
2873                     memcpy(retval, stashname, stashnamelen);
2874                 }
2875                 /* retval may not necessarily have reached the start of the
2876                    buffer here.  */
2877                 assert (retval >= buffer);
2878
2879                 len = buffer_end - retval - 1; /* -1 for that \0  */
2880             }
2881             if (lp)
2882                 *lp = len;
2883             SAVEFREEPV(buffer);
2884             return retval;
2885         }
2886     }
2887
2888     if (SvPOKp(sv)) {
2889         if (lp)
2890             *lp = SvCUR(sv);
2891         if (flags & SV_MUTABLE_RETURN)
2892             return SvPVX_mutable(sv);
2893         if (flags & SV_CONST_RETURN)
2894             return (char *)SvPVX_const(sv);
2895         return SvPVX(sv);
2896     }
2897
2898     if (SvIOK(sv)) {
2899         /* I'm assuming that if both IV and NV are equally valid then
2900            converting the IV is going to be more efficient */
2901         const U32 isUIOK = SvIsUV(sv);
2902         char buf[TYPE_CHARS(UV)];
2903         char *ebuf, *ptr;
2904         STRLEN len;
2905
2906         if (SvTYPE(sv) < SVt_PVIV)
2907             sv_upgrade(sv, SVt_PVIV);
2908         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2909         len = ebuf - ptr;
2910         /* inlined from sv_setpvn */
2911         s = SvGROW_mutable(sv, len + 1);
2912         Move(ptr, s, len, char);
2913         s += len;
2914         *s = '\0';
2915         SvPOK_on(sv);
2916     }
2917     else if (SvNOK(sv)) {
2918         if (SvTYPE(sv) < SVt_PVNV)
2919             sv_upgrade(sv, SVt_PVNV);
2920         if (SvNVX(sv) == 0.0) {
2921             s = SvGROW_mutable(sv, 2);
2922             *s++ = '0';
2923             *s = '\0';
2924         } else {
2925             dSAVE_ERRNO;
2926             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2927             s = SvGROW_mutable(sv, NV_DIG + 20);
2928             /* some Xenix systems wipe out errno here */
2929
2930 #ifndef USE_LOCALE_NUMERIC
2931             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2932             SvPOK_on(sv);
2933 #else
2934             /* Gconvert always uses the current locale.  That's the right thing
2935              * to do if we're supposed to be using locales.  But otherwise, we
2936              * want the result to be based on the C locale, so we need to
2937              * change to the C locale during the Gconvert and then change back.
2938              * But if we're already in the C locale (PL_numeric_standard is
2939              * TRUE in that case), no need to do any changing */
2940             if (PL_numeric_standard || IN_SOME_LOCALE_FORM_RUNTIME) {
2941                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2942
2943                 /* If the radix character is UTF-8, and actually is in the
2944                  * output, turn on the UTF-8 flag for the scalar */
2945                 if (! PL_numeric_standard
2946                     && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
2947                     && instr(s, SvPVX_const(PL_numeric_radix_sv)))
2948                 {
2949                     SvUTF8_on(sv);
2950                 }
2951             }
2952             else {
2953                 char *loc = savepv(setlocale(LC_NUMERIC, NULL));
2954                 setlocale(LC_NUMERIC, "C");
2955                 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2956                 setlocale(LC_NUMERIC, loc);
2957                 Safefree(loc);
2958
2959             }
2960
2961             /* We don't call SvPOK_on(), because it may come to pass that the
2962              * locale changes so that the stringification we just did is no
2963              * longer correct.  We will have to re-stringify every time it is
2964              * needed */
2965 #endif
2966             RESTORE_ERRNO;
2967             while (*s) s++;
2968         }
2969 #ifdef hcx
2970         if (s[-1] == '.')
2971             *--s = '\0';
2972 #endif
2973     }
2974     else if (isGV_with_GP(sv)) {
2975         GV *const gv = MUTABLE_GV(sv);
2976         SV *const buffer = sv_newmortal();
2977
2978         gv_efullname3(buffer, gv, "*");
2979
2980         assert(SvPOK(buffer));
2981         if (SvUTF8(buffer))
2982             SvUTF8_on(sv);
2983         if (lp)
2984             *lp = SvCUR(buffer);
2985         return SvPVX(buffer);
2986     }
2987     else if (isREGEXP(sv)) {
2988         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
2989         return RX_WRAPPED((REGEXP *)sv);
2990     }
2991     else {
2992         if (lp)
2993             *lp = 0;
2994         if (flags & SV_UNDEF_RETURNS_NULL)
2995             return NULL;
2996         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2997             report_uninit(sv);
2998         /* Typically the caller expects that sv_any is not NULL now.  */
2999         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3000             sv_upgrade(sv, SVt_PV);
3001         return (char *)"";
3002     }
3003
3004     {
3005         const STRLEN len = s - SvPVX_const(sv);
3006         if (lp) 
3007             *lp = len;
3008         SvCUR_set(sv, len);
3009     }
3010     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3011                           PTR2UV(sv),SvPVX_const(sv)));
3012     if (flags & SV_CONST_RETURN)
3013         return (char *)SvPVX_const(sv);
3014     if (flags & SV_MUTABLE_RETURN)
3015         return SvPVX_mutable(sv);
3016     return SvPVX(sv);
3017 }
3018
3019 /*
3020 =for apidoc sv_copypv
3021
3022 Copies a stringified representation of the source SV into the
3023 destination SV.  Automatically performs any necessary mg_get and
3024 coercion of numeric values into strings.  Guaranteed to preserve
3025 UTF8 flag even from overloaded objects.  Similar in nature to
3026 sv_2pv[_flags] but operates directly on an SV instead of just the
3027 string.  Mostly uses sv_2pv_flags to do its work, except when that
3028 would lose the UTF-8'ness of the PV.
3029
3030 =for apidoc sv_copypv_nomg
3031
3032 Like sv_copypv, but doesn't invoke get magic first.
3033
3034 =for apidoc sv_copypv_flags
3035
3036 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3037 include SV_GMAGIC.
3038
3039 =cut
3040 */
3041
3042 void
3043 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3044 {
3045     PERL_ARGS_ASSERT_SV_COPYPV;
3046
3047     sv_copypv_flags(dsv, ssv, 0);
3048 }
3049
3050 void
3051 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3052 {
3053     STRLEN len;
3054     const char *s;
3055
3056     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3057
3058     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3059         mg_get(ssv);
3060     s = SvPV_nomg_const(ssv,len);
3061     sv_setpvn(dsv,s,len);
3062     if (SvUTF8(ssv))
3063         SvUTF8_on(dsv);
3064     else
3065         SvUTF8_off(dsv);
3066 }
3067
3068 /*
3069 =for apidoc sv_2pvbyte
3070
3071 Return a pointer to the byte-encoded representation of the SV, and set *lp
3072 to its length.  May cause the SV to be downgraded from UTF-8 as a
3073 side-effect.
3074
3075 Usually accessed via the C<SvPVbyte> macro.
3076
3077 =cut
3078 */
3079
3080 char *
3081 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3082 {
3083     PERL_ARGS_ASSERT_SV_2PVBYTE;
3084
3085     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3086      || isGV_with_GP(sv) || SvROK(sv)) {
3087         SV *sv2 = sv_newmortal();
3088         sv_copypv(sv2,sv);
3089         sv = sv2;
3090     }
3091     else SvGETMAGIC(sv);
3092     sv_utf8_downgrade(sv,0);
3093     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3094 }
3095
3096 /*
3097 =for apidoc sv_2pvutf8
3098
3099 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3100 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3101
3102 Usually accessed via the C<SvPVutf8> macro.
3103
3104 =cut
3105 */
3106
3107 char *
3108 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3109 {
3110     PERL_ARGS_ASSERT_SV_2PVUTF8;
3111
3112     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3113      || isGV_with_GP(sv) || SvROK(sv))
3114         sv = sv_mortalcopy(sv);
3115     else
3116         SvGETMAGIC(sv);
3117     sv_utf8_upgrade_nomg(sv);
3118     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3119 }
3120
3121
3122 /*
3123 =for apidoc sv_2bool
3124
3125 This macro is only used by sv_true() or its macro equivalent, and only if
3126 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3127 It calls sv_2bool_flags with the SV_GMAGIC flag.
3128
3129 =for apidoc sv_2bool_flags
3130
3131 This function is only used by sv_true() and friends,  and only if
3132 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3133 contain SV_GMAGIC, then it does an mg_get() first.
3134
3135
3136 =cut
3137 */
3138
3139 bool
3140 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
3141 {
3142     dVAR;
3143
3144     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3145
3146     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3147
3148     if (!SvOK(sv))
3149         return 0;
3150     if (SvROK(sv)) {
3151         if (SvAMAGIC(sv)) {
3152             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3153             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3154                 return cBOOL(SvTRUE(tmpsv));
3155         }
3156         return SvRV(sv) != 0;
3157     }
3158     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3159 }
3160
3161 /*
3162 =for apidoc sv_utf8_upgrade
3163
3164 Converts the PV of an SV to its UTF-8-encoded form.
3165 Forces the SV to string form if it is not already.
3166 Will C<mg_get> on C<sv> if appropriate.
3167 Always sets the SvUTF8 flag to avoid future validity checks even
3168 if the whole string is the same in UTF-8 as not.
3169 Returns the number of bytes in the converted string
3170
3171 This is not a general purpose byte encoding to Unicode interface:
3172 use the Encode extension for that.
3173
3174 =for apidoc sv_utf8_upgrade_nomg
3175
3176 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3177
3178 =for apidoc sv_utf8_upgrade_flags
3179
3180 Converts the PV of an SV to its UTF-8-encoded form.
3181 Forces the SV to string form if it is not already.
3182 Always sets the SvUTF8 flag to avoid future validity checks even
3183 if all the bytes are invariant in UTF-8.
3184 If C<flags> has C<SV_GMAGIC> bit set,
3185 will C<mg_get> on C<sv> if appropriate, else not.
3186 Returns the number of bytes in the converted string
3187 C<sv_utf8_upgrade> and
3188 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3189
3190 This is not a general purpose byte encoding to Unicode interface:
3191 use the Encode extension for that.
3192
3193 =cut
3194
3195 The grow version is currently not externally documented.  It adds a parameter,
3196 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3197 have free after it upon return.  This allows the caller to reserve extra space
3198 that it intends to fill, to avoid extra grows.
3199
3200 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3201 which can be used to tell this function to not first check to see if there are
3202 any characters that are different in UTF-8 (variant characters) which would
3203 force it to allocate a new string to sv, but to assume there are.  Typically
3204 this flag is used by a routine that has already parsed the string to find that
3205 there are such characters, and passes this information on so that the work
3206 doesn't have to be repeated.
3207
3208 (One might think that the calling routine could pass in the position of the
3209 first such variant, so it wouldn't have to be found again.  But that is not the
3210 case, because typically when the caller is likely to use this flag, it won't be
3211 calling this routine unless it finds something that won't fit into a byte.
3212 Otherwise it tries to not upgrade and just use bytes.  But some things that
3213 do fit into a byte are variants in utf8, and the caller may not have been
3214 keeping track of these.)
3215
3216 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3217 isn't guaranteed due to having other routines do the work in some input cases,
3218 or if the input is already flagged as being in utf8.
3219
3220 The speed of this could perhaps be improved for many cases if someone wanted to
3221 write a fast function that counts the number of variant characters in a string,
3222 especially if it could return the position of the first one.
3223
3224 */
3225
3226 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
3227
3228 STRLEN
3229 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3230 {
3231     dVAR;
3232
3233     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3234
3235     if (sv == &PL_sv_undef)
3236         return 0;
3237     if (!SvPOK_nog(sv)) {
3238         STRLEN len = 0;
3239         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3240             (void) sv_2pv_flags(sv,&len, flags);
3241             if (SvUTF8(sv)) {
3242                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3243                 return len;
3244             }
3245         } else {
3246             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3247         }
3248     }
3249
3250     if (SvUTF8(sv)) {
3251         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3252         return SvCUR(sv);
3253     }
3254
3255     if (SvIsCOW(sv)) {
3256         S_sv_uncow(aTHX_ sv, 0);
3257     }
3258
3259     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3260         sv_recode_to_utf8(sv, PL_encoding);
3261         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3262         return SvCUR(sv);
3263     }
3264
3265     if (SvCUR(sv) == 0) {
3266         if (extra) SvGROW(sv, extra);
3267     } else { /* Assume Latin-1/EBCDIC */
3268         /* This function could be much more efficient if we
3269          * had a FLAG in SVs to signal if there are any variant
3270          * chars in the PV.  Given that there isn't such a flag
3271          * make the loop as fast as possible (although there are certainly ways
3272          * to speed this up, eg. through vectorization) */
3273         U8 * s = (U8 *) SvPVX_const(sv);
3274         U8 * e = (U8 *) SvEND(sv);
3275         U8 *t = s;
3276         STRLEN two_byte_count = 0;
3277         
3278         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3279
3280         /* See if really will need to convert to utf8.  We mustn't rely on our
3281          * incoming SV being well formed and having a trailing '\0', as certain
3282          * code in pp_formline can send us partially built SVs. */
3283
3284         while (t < e) {
3285             const U8 ch = *t++;
3286             if (NATIVE_IS_INVARIANT(ch)) continue;
3287
3288             t--;    /* t already incremented; re-point to first variant */
3289             two_byte_count = 1;
3290             goto must_be_utf8;
3291         }
3292
3293         /* utf8 conversion not needed because all are invariants.  Mark as
3294          * UTF-8 even if no variant - saves scanning loop */
3295         SvUTF8_on(sv);
3296         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3297         return SvCUR(sv);
3298
3299 must_be_utf8:
3300
3301         /* Here, the string should be converted to utf8, either because of an
3302          * input flag (two_byte_count = 0), or because a character that
3303          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3304          * the beginning of the string (if we didn't examine anything), or to
3305          * the first variant.  In either case, everything from s to t - 1 will
3306          * occupy only 1 byte each on output.
3307          *
3308          * There are two main ways to convert.  One is to create a new string
3309          * and go through the input starting from the beginning, appending each
3310          * converted value onto the new string as we go along.  It's probably
3311          * best to allocate enough space in the string for the worst possible
3312          * case rather than possibly running out of space and having to
3313          * reallocate and then copy what we've done so far.  Since everything
3314          * from s to t - 1 is invariant, the destination can be initialized
3315          * with these using a fast memory copy
3316          *
3317          * The other way is to figure out exactly how big the string should be
3318          * by parsing the entire input.  Then you don't have to make it big
3319          * enough to handle the worst possible case, and more importantly, if
3320          * the string you already have is large enough, you don't have to
3321          * allocate a new string, you can copy the last character in the input
3322          * string to the final position(s) that will be occupied by the
3323          * converted string and go backwards, stopping at t, since everything
3324          * before that is invariant.
3325          *
3326          * There are advantages and disadvantages to each method.
3327          *
3328          * In the first method, we can allocate a new string, do the memory
3329          * copy from the s to t - 1, and then proceed through the rest of the
3330          * string byte-by-byte.
3331          *
3332          * In the second method, we proceed through the rest of the input
3333          * string just calculating how big the converted string will be.  Then
3334          * there are two cases:
3335          *  1)  if the string has enough extra space to handle the converted
3336          *      value.  We go backwards through the string, converting until we
3337          *      get to the position we are at now, and then stop.  If this
3338          *      position is far enough along in the string, this method is
3339          *      faster than the other method.  If the memory copy were the same
3340          *      speed as the byte-by-byte loop, that position would be about
3341          *      half-way, as at the half-way mark, parsing to the end and back
3342          *      is one complete string's parse, the same amount as starting
3343          *      over and going all the way through.  Actually, it would be
3344          *      somewhat less than half-way, as it's faster to just count bytes
3345          *      than to also copy, and we don't have the overhead of allocating
3346          *      a new string, changing the scalar to use it, and freeing the
3347          *      existing one.  But if the memory copy is fast, the break-even
3348          *      point is somewhere after half way.  The counting loop could be
3349          *      sped up by vectorization, etc, to move the break-even point
3350          *      further towards the beginning.
3351          *  2)  if the string doesn't have enough space to handle the converted
3352          *      value.  A new string will have to be allocated, and one might
3353          *      as well, given that, start from the beginning doing the first
3354          *      method.  We've spent extra time parsing the string and in
3355          *      exchange all we've gotten is that we know precisely how big to
3356          *      make the new one.  Perl is more optimized for time than space,
3357          *      so this case is a loser.
3358          * So what I've decided to do is not use the 2nd method unless it is
3359          * guaranteed that a new string won't have to be allocated, assuming
3360          * the worst case.  I also decided not to put any more conditions on it
3361          * than this, for now.  It seems likely that, since the worst case is
3362          * twice as big as the unknown portion of the string (plus 1), we won't
3363          * be guaranteed enough space, causing us to go to the first method,
3364          * unless the string is short, or the first variant character is near
3365          * the end of it.  In either of these cases, it seems best to use the
3366          * 2nd method.  The only circumstance I can think of where this would
3367          * be really slower is if the string had once had much more data in it
3368          * than it does now, but there is still a substantial amount in it  */
3369
3370         {
3371             STRLEN invariant_head = t - s;
3372             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3373             if (SvLEN(sv) < size) {
3374
3375                 /* Here, have decided to allocate a new string */
3376
3377                 U8 *dst;
3378                 U8 *d;
3379
3380                 Newx(dst, size, U8);
3381
3382                 /* If no known invariants at the beginning of the input string,
3383                  * set so starts from there.  Otherwise, can use memory copy to
3384                  * get up to where we are now, and then start from here */
3385
3386                 if (invariant_head <= 0) {
3387                     d = dst;
3388                 } else {
3389                     Copy(s, dst, invariant_head, char);
3390                     d = dst + invariant_head;
3391                 }
3392
3393                 while (t < e) {
3394                     const UV uv = NATIVE8_TO_UNI(*t++);
3395                     if (UNI_IS_INVARIANT(uv))
3396                         *d++ = (U8)UNI_TO_NATIVE(uv);
3397                     else {
3398                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3399                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3400                     }
3401                 }
3402                 *d = '\0';
3403                 SvPV_free(sv); /* No longer using pre-existing string */
3404                 SvPV_set(sv, (char*)dst);
3405                 SvCUR_set(sv, d - dst);
3406                 SvLEN_set(sv, size);
3407             } else {
3408
3409                 /* Here, have decided to get the exact size of the string.
3410                  * Currently this happens only when we know that there is
3411                  * guaranteed enough space to fit the converted string, so
3412                  * don't have to worry about growing.  If two_byte_count is 0,
3413                  * then t points to the first byte of the string which hasn't
3414                  * been examined yet.  Otherwise two_byte_count is 1, and t
3415                  * points to the first byte in the string that will expand to
3416                  * two.  Depending on this, start examining at t or 1 after t.
3417                  * */
3418
3419                 U8 *d = t + two_byte_count;
3420
3421
3422                 /* Count up the remaining bytes that expand to two */
3423
3424                 while (d < e) {
3425                     const U8 chr = *d++;
3426                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3427                 }
3428
3429                 /* The string will expand by just the number of bytes that
3430                  * occupy two positions.  But we are one afterwards because of
3431                  * the increment just above.  This is the place to put the
3432                  * trailing NUL, and to set the length before we decrement */
3433
3434                 d += two_byte_count;
3435                 SvCUR_set(sv, d - s);
3436                 *d-- = '\0';
3437
3438
3439                 /* Having decremented d, it points to the position to put the
3440                  * very last byte of the expanded string.  Go backwards through
3441                  * the string, copying and expanding as we go, stopping when we
3442                  * get to the part that is invariant the rest of the way down */
3443
3444                 e--;
3445                 while (e >= t) {
3446                     const U8 ch = NATIVE8_TO_UNI(*e--);
3447                     if (UNI_IS_INVARIANT(ch)) {
3448                         *d-- = UNI_TO_NATIVE(ch);
3449                     } else {
3450                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3451                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3452                     }
3453                 }
3454             }
3455
3456             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3457                 /* Update pos. We do it at the end rather than during
3458                  * the upgrade, to avoid slowing down the common case
3459                  * (upgrade without pos) */
3460                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3461                 if (mg) {
3462                     I32 pos = mg->mg_len;
3463                     if (pos > 0 && (U32)pos > invariant_head) {
3464                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3465                         STRLEN n = (U32)pos - invariant_head;
3466                         while (n > 0) {
3467                             if (UTF8_IS_START(*d))
3468                                 d++;
3469                             d++;
3470                             n--;
3471                         }
3472                         mg->mg_len  = d - (U8*)SvPVX(sv);
3473                     }
3474                 }
3475                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3476                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3477             }
3478         }
3479     }
3480
3481     /* Mark as UTF-8 even if no variant - saves scanning loop */
3482     SvUTF8_on(sv);
3483     return SvCUR(sv);
3484 }
3485
3486 /*
3487 =for apidoc sv_utf8_downgrade
3488
3489 Attempts to convert the PV of an SV from characters to bytes.
3490 If the PV contains a character that cannot fit
3491 in a byte, this conversion will fail;
3492 in this case, either returns false or, if C<fail_ok> is not
3493 true, croaks.
3494
3495 This is not a general purpose Unicode to byte encoding interface:
3496 use the Encode extension for that.
3497
3498 =cut
3499 */
3500
3501 bool
3502 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3503 {
3504     dVAR;
3505
3506     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3507
3508     if (SvPOKp(sv) && SvUTF8(sv)) {
3509         if (SvCUR(sv)) {
3510             U8 *s;
3511             STRLEN len;
3512             int mg_flags = SV_GMAGIC;
3513
3514             if (SvIsCOW(sv)) {
3515                 S_sv_uncow(aTHX_ sv, 0);
3516             }
3517             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3518                 /* update pos */
3519                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3520                 if (mg) {
3521                     I32 pos = mg->mg_len;
3522                     if (pos > 0) {
3523                         sv_pos_b2u(sv, &pos);
3524                         mg_flags = 0; /* sv_pos_b2u does get magic */
3525                         mg->mg_len  = pos;
3526                     }
3527                 }
3528                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3529                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3530
3531             }
3532             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3533
3534             if (!utf8_to_bytes(s, &len)) {
3535                 if (fail_ok)
3536                     return FALSE;
3537                 else {
3538                     if (PL_op)
3539                         Perl_croak(aTHX_ "Wide character in %s",
3540                                    OP_DESC(PL_op));
3541                     else
3542                         Perl_croak(aTHX_ "Wide character");
3543                 }
3544             }
3545             SvCUR_set(sv, len);
3546         }
3547     }
3548     SvUTF8_off(sv);
3549     return TRUE;
3550 }
3551
3552 /*
3553 =for apidoc sv_utf8_encode
3554
3555 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3556 flag off so that it looks like octets again.
3557
3558 =cut
3559 */
3560
3561 void
3562 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3563 {
3564     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3565
3566     if (SvREADONLY(sv)) {
3567         sv_force_normal_flags(sv, 0);
3568     }
3569     (void) sv_utf8_upgrade(sv);
3570     SvUTF8_off(sv);
3571 }
3572
3573 /*
3574 =for apidoc sv_utf8_decode
3575
3576 If the PV of the SV is an octet sequence in UTF-8
3577 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3578 so that it looks like a character.  If the PV contains only single-byte
3579 characters, the C<SvUTF8> flag stays off.
3580 Scans PV for validity and returns false if the PV is invalid UTF-8.
3581
3582 =cut
3583 */
3584
3585 bool
3586 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3587 {
3588     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3589
3590     if (SvPOKp(sv)) {
3591         const U8 *start, *c;
3592         const U8 *e;
3593
3594         /* The octets may have got themselves encoded - get them back as
3595          * bytes
3596          */
3597         if (!sv_utf8_downgrade(sv, TRUE))
3598             return FALSE;
3599
3600         /* it is actually just a matter of turning the utf8 flag on, but
3601          * we want to make sure everything inside is valid utf8 first.
3602          */
3603         c = start = (const U8 *) SvPVX_const(sv);
3604         if (!is_utf8_string(c, SvCUR(sv)))
3605             return FALSE;
3606         e = (const U8 *) SvEND(sv);
3607         while (c < e) {
3608             const U8 ch = *c++;
3609             if (!UTF8_IS_INVARIANT(ch)) {
3610                 SvUTF8_on(sv);
3611                 break;
3612             }
3613         }
3614         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3615             /* adjust pos to the start of a UTF8 char sequence */
3616             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3617             if (mg) {
3618                 I32 pos = mg->mg_len;
3619                 if (pos > 0) {
3620                     for (c = start + pos; c > start; c--) {
3621                         if (UTF8_IS_START(*c))
3622                             break;
3623                     }
3624                     mg->mg_len  = c - start;
3625                 }
3626             }
3627             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3628                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3629         }
3630     }
3631     return TRUE;
3632 }
3633
3634 /*
3635 =for apidoc sv_setsv
3636
3637 Copies the contents of the source SV C<ssv> into the destination SV
3638 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3639 function if the source SV needs to be reused.  Does not handle 'set' magic.
3640 Loosely speaking, it performs a copy-by-value, obliterating any previous
3641 content of the destination.
3642
3643 You probably want to use one of the assortment of wrappers, such as
3644 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3645 C<SvSetMagicSV_nosteal>.
3646
3647 =for apidoc sv_setsv_flags
3648
3649 Copies the contents of the source SV C<ssv> into the destination SV
3650 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3651 function if the source SV needs to be reused.  Does not handle 'set' magic.
3652 Loosely speaking, it performs a copy-by-value, obliterating any previous
3653 content of the destination.
3654 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3655 C<ssv> if appropriate, else not.  If the C<flags>
3656 parameter has the C<NOSTEAL> bit set then the
3657 buffers of temps will not be stolen.  <sv_setsv>
3658 and C<sv_setsv_nomg> are implemented in terms of this function.
3659
3660 You probably want to use one of the assortment of wrappers, such as
3661 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3662 C<SvSetMagicSV_nosteal>.
3663
3664 This is the primary function for copying scalars, and most other
3665 copy-ish functions and macros use this underneath.
3666
3667 =cut
3668 */
3669
3670 static void
3671 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3672 {
3673     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3674     HV *old_stash = NULL;
3675
3676     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3677
3678     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3679         const char * const name = GvNAME(sstr);
3680         const STRLEN len = GvNAMELEN(sstr);
3681         {
3682             if (dtype >= SVt_PV) {
3683                 SvPV_free(dstr);
3684                 SvPV_set(dstr, 0);
3685                 SvLEN_set(dstr, 0);
3686                 SvCUR_set(dstr, 0);
3687             }
3688             SvUPGRADE(dstr, SVt_PVGV);
3689             (void)SvOK_off(dstr);
3690             /* We have to turn this on here, even though we turn it off
3691                below, as GvSTASH will fail an assertion otherwise. */
3692             isGV_with_GP_on(dstr);
3693         }
3694         GvSTASH(dstr) = GvSTASH(sstr);
3695         if (GvSTASH(dstr))
3696             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3697         gv_name_set(MUTABLE_GV(dstr), name, len,
3698                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3699         SvFAKE_on(dstr);        /* can coerce to non-glob */
3700     }
3701
3702     if(GvGP(MUTABLE_GV(sstr))) {
3703         /* If source has method cache entry, clear it */
3704         if(GvCVGEN(sstr)) {
3705             SvREFCNT_dec(GvCV(sstr));
3706             GvCV_set(sstr, NULL);
3707             GvCVGEN(sstr) = 0;
3708         }
3709         /* If source has a real method, then a method is
3710            going to change */
3711         else if(
3712          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3713         ) {
3714             mro_changes = 1;
3715         }
3716     }
3717
3718     /* If dest already had a real method, that's a change as well */
3719     if(
3720         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3721      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3722     ) {
3723         mro_changes = 1;
3724     }
3725
3726     /* We don't need to check the name of the destination if it was not a
3727        glob to begin with. */
3728     if(dtype == SVt_PVGV) {
3729         const char * const name = GvNAME((const GV *)dstr);
3730         if(
3731             strEQ(name,"ISA")
3732          /* The stash may have been detached from the symbol table, so
3733             check its name. */
3734          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3735         )
3736             mro_changes = 2;
3737         else {
3738             const STRLEN len = GvNAMELEN(dstr);
3739             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3740              || (len == 1 && name[0] == ':')) {
3741                 mro_changes = 3;
3742
3743                 /* Set aside the old stash, so we can reset isa caches on
3744                    its subclasses. */
3745                 if((old_stash = GvHV(dstr)))
3746                     /* Make sure we do not lose it early. */
3747                     SvREFCNT_inc_simple_void_NN(
3748                      sv_2mortal((SV *)old_stash)
3749                     );
3750             }
3751         }
3752     }
3753
3754     gp_free(MUTABLE_GV(dstr));
3755     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3756     (void)SvOK_off(dstr);
3757     isGV_with_GP_on(dstr);
3758     GvINTRO_off(dstr);          /* one-shot flag */
3759     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3760     if (SvTAINTED(sstr))
3761         SvTAINT(dstr);
3762     if (GvIMPORTED(dstr) != GVf_IMPORTED
3763         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3764         {
3765             GvIMPORTED_on(dstr);
3766         }
3767     GvMULTI_on(dstr);
3768     if(mro_changes == 2) {
3769       if (GvAV((const GV *)sstr)) {
3770         MAGIC *mg;
3771         SV * const sref = (SV *)GvAV((const GV *)dstr);
3772         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3773             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3774                 AV * const ary = newAV();
3775                 av_push(ary, mg->mg_obj); /* takes the refcount */
3776                 mg->mg_obj = (SV *)ary;
3777             }
3778             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3779         }
3780         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3781       }
3782       mro_isa_changed_in(GvSTASH(dstr));
3783     }
3784     else if(mro_changes == 3) {
3785         HV * const stash = GvHV(dstr);
3786         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3787             mro_package_moved(
3788                 stash, old_stash,
3789                 (GV *)dstr, 0
3790             );
3791     }
3792     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3793     if (GvIO(dstr) && dtype == SVt_PVGV) {
3794         DEBUG_o(Perl_deb(aTHX_
3795                         "glob_assign_glob clearing PL_stashcache\n"));
3796         /* It's a cache. It will rebuild itself quite happily.
3797            It's a lot of effort to work out exactly which key (or keys)
3798            might be invalidated by the creation of the this file handle.
3799          */
3800         hv_clear(PL_stashcache);
3801     }
3802     return;
3803 }
3804
3805 static void
3806 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3807 {
3808     SV * const sref = SvRV(sstr);
3809     SV *dref;
3810     const int intro = GvINTRO(dstr);
3811     SV **location;
3812     U8 import_flag = 0;
3813     const U32 stype = SvTYPE(sref);
3814
3815     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3816
3817     if (intro) {
3818         GvINTRO_off(dstr);      /* one-shot flag */
3819         GvLINE(dstr) = CopLINE(PL_curcop);
3820         GvEGV(dstr) = MUTABLE_GV(dstr);
3821     }
3822     GvMULTI_on(dstr);
3823     switch (stype) {
3824     case SVt_PVCV:
3825         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3826         import_flag = GVf_IMPORTED_CV;
3827         goto common;
3828     case SVt_PVHV:
3829         location = (SV **) &GvHV(dstr);
3830         import_flag = GVf_IMPORTED_HV;
3831         goto common;
3832     case SVt_PVAV:
3833         location = (SV **) &GvAV(dstr);
3834         import_flag = GVf_IMPORTED_AV;
3835         goto common;
3836     case SVt_PVIO:
3837         location = (SV **) &GvIOp(dstr);
3838         goto common;
3839     case SVt_PVFM:
3840         location = (SV **) &GvFORM(dstr);
3841         goto common;
3842     default:
3843         location = &GvSV(dstr);
3844         import_flag = GVf_IMPORTED_SV;
3845     common:
3846         if (intro) {
3847             if (stype == SVt_PVCV) {
3848                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3849                 if (GvCVGEN(dstr)) {
3850                     SvREFCNT_dec(GvCV(dstr));
3851                     GvCV_set(dstr, NULL);
3852                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3853                 }
3854             }
3855             /* SAVEt_GVSLOT takes more room on the savestack and has more
3856                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3857                leave_scope needs access to the GV so it can reset method
3858                caches.  We must use SAVEt_GVSLOT whenever the type is
3859                SVt_PVCV, even if the stash is anonymous, as the stash may
3860                gain a name somehow before leave_scope. */
3861             if (stype == SVt_PVCV) {
3862                 /* There is no save_pushptrptrptr.  Creating it for this
3863                    one call site would be overkill.  So inline the ss add
3864                    routines here. */
3865                 dSS_ADD;
3866                 SS_ADD_PTR(dstr);
3867                 SS_ADD_PTR(location);
3868                 SS_ADD_PTR(SvREFCNT_inc(*location));
3869                 SS_ADD_UV(SAVEt_GVSLOT);
3870                 SS_ADD_END(4);
3871             }
3872             else SAVEGENERICSV(*location);
3873         }
3874         dref = *location;
3875         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3876             CV* const cv = MUTABLE_CV(*location);
3877             if (cv) {
3878                 if (!GvCVGEN((const GV *)dstr) &&
3879                     (CvROOT(cv) || CvXSUB(cv)) &&
3880                     /* redundant check that avoids creating the extra SV
3881                        most of the time: */
3882                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3883                     {
3884                         SV * const new_const_sv =
3885                             CvCONST((const CV *)sref)
3886                                  ? cv_const_sv((const CV *)sref)
3887                                  : NULL;
3888                         report_redefined_cv(
3889                            sv_2mortal(Perl_newSVpvf(aTHX_
3890                                 "%"HEKf"::%"HEKf,
3891                                 HEKfARG(
3892                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3893                                 ),
3894                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3895                            )),
3896                            cv,
3897                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3898                         );
3899                     }
3900                 if (!intro)
3901                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3902                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3903                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3904                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3905             }
3906             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3907             GvASSUMECV_on(dstr);
3908             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3909         }
3910         *location = SvREFCNT_inc_simple_NN(sref);
3911         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3912             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3913             GvFLAGS(dstr) |= import_flag;
3914         }
3915         if (stype == SVt_PVHV) {
3916             const char * const name = GvNAME((GV*)dstr);
3917             const STRLEN len = GvNAMELEN(dstr);
3918             if (
3919                 (
3920                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3921                 || (len == 1 && name[0] == ':')
3922                 )
3923              && (!dref || HvENAME_get(dref))
3924             ) {
3925                 mro_package_moved(
3926                     (HV *)sref, (HV *)dref,
3927                     (GV *)dstr, 0
3928                 );
3929             }
3930         }
3931         else if (
3932             stype == SVt_PVAV && sref != dref
3933          && strEQ(GvNAME((GV*)dstr), "ISA")
3934          /* The stash may have been detached from the symbol table, so
3935             check its name before doing anything. */
3936          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3937         ) {
3938             MAGIC *mg;
3939             MAGIC * const omg = dref && SvSMAGICAL(dref)
3940                                  ? mg_find(dref, PERL_MAGIC_isa)
3941                                  : NULL;
3942             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3943                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3944                     AV * const ary = newAV();
3945                     av_push(ary, mg->mg_obj); /* takes the refcount */
3946                     mg->mg_obj = (SV *)ary;
3947                 }
3948                 if (omg) {
3949                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3950                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3951                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3952                         while (items--)
3953                             av_push(
3954                              (AV *)mg->mg_obj,
3955                              SvREFCNT_inc_simple_NN(*svp++)
3956                             );
3957                     }
3958                     else
3959                         av_push(
3960                          (AV *)mg->mg_obj,
3961                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3962                         );
3963                 }
3964                 else
3965                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3966             }
3967             else
3968             {
3969                 sv_magic(
3970                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3971                 );
3972                 mg = mg_find(sref, PERL_MAGIC_isa);
3973             }
3974             /* Since the *ISA assignment could have affected more than
3975                one stash, don't call mro_isa_changed_in directly, but let
3976                magic_clearisa do it for us, as it already has the logic for
3977                dealing with globs vs arrays of globs. */
3978             assert(mg);
3979             Perl_magic_clearisa(aTHX_ NULL, mg);
3980         }
3981         else if (stype == SVt_PVIO) {
3982             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3983             /* It's a cache. It will rebuild itself quite happily.
3984                It's a lot of effort to work out exactly which key (or keys)
3985                might be invalidated by the creation of the this file handle.
3986             */
3987             hv_clear(PL_stashcache);
3988         }
3989         break;
3990     }
3991     if (!intro) SvREFCNT_dec(dref);
3992     if (SvTAINTED(sstr))
3993         SvTAINT(dstr);
3994     return;
3995 }
3996
3997 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
3998    hold is 0. */
3999 #if SV_COW_THRESHOLD
4000 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
4001 #else
4002 # define GE_COW_THRESHOLD(len)          1
4003 #endif
4004 #if SV_COWBUF_THRESHOLD
4005 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
4006 #else
4007 # define GE_COWBUF_THRESHOLD(len)       1
4008 #endif
4009
4010 void
4011 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4012 {
4013     dVAR;
4014     U32 sflags;
4015     int dtype;
4016     svtype stype;
4017
4018     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4019
4020     if (sstr == dstr)
4021         return;
4022
4023     if (SvIS_FREED(dstr)) {
4024         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4025                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4026     }
4027     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4028     if (!sstr)
4029         sstr = &PL_sv_undef;
4030     if (SvIS_FREED(sstr)) {
4031         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4032                    (void*)sstr, (void*)dstr);
4033     }
4034     stype = SvTYPE(sstr);
4035     dtype = SvTYPE(dstr);
4036
4037     /* There's a lot of redundancy below but we're going for speed here */
4038
4039     switch (stype) {
4040     case SVt_NULL:
4041       undef_sstr:
4042         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4043             (void)SvOK_off(dstr);
4044             return;
4045         }
4046         break;
4047     case SVt_IV:
4048         if (SvIOK(sstr)) {
4049             switch (dtype) {
4050             case SVt_NULL:
4051                 sv_upgrade(dstr, SVt_IV);
4052                 break;
4053             case SVt_NV:
4054             case SVt_PV:
4055                 sv_upgrade(dstr, SVt_PVIV);
4056                 break;
4057             case SVt_PVGV:
4058             case SVt_PVLV:
4059                 goto end_of_first_switch;
4060             }
4061             (void)SvIOK_only(dstr);
4062             SvIV_set(dstr,  SvIVX(sstr));
4063             if (SvIsUV(sstr))
4064                 SvIsUV_on(dstr);
4065             /* SvTAINTED can only be true if the SV has taint magic, which in
4066                turn means that the SV type is PVMG (or greater). This is the
4067                case statement for SVt_IV, so this cannot be true (whatever gcov
4068                may say).  */
4069             assert(!SvTAINTED(sstr));
4070             return;
4071         }
4072         if (!SvROK(sstr))
4073             goto undef_sstr;
4074         if (dtype < SVt_PV && dtype != SVt_IV)
4075             sv_upgrade(dstr, SVt_IV);
4076         break;
4077
4078     case SVt_NV:
4079         if (SvNOK(sstr)) {
4080             switch (dtype) {
4081             case SVt_NULL:
4082             case SVt_IV:
4083                 sv_upgrade(dstr, SVt_NV);
4084                 break;
4085             case SVt_PV:
4086             case SVt_PVIV:
4087                 sv_upgrade(dstr, SVt_PVNV);
4088                 break;
4089             case SVt_PVGV:
4090             case SVt_PVLV:
4091                 goto end_of_first_switch;
4092             }
4093             SvNV_set(dstr, SvNVX(sstr));
4094             (void)SvNOK_only(dstr);
4095             /* SvTAINTED can only be true if the SV has taint magic, which in
4096                turn means that the SV type is PVMG (or greater). This is the
4097                case statement for SVt_NV, so this cannot be true (whatever gcov
4098                may say).  */
4099             assert(!SvTAINTED(sstr));
4100             return;
4101         }
4102         goto undef_sstr;
4103
4104     case SVt_PV:
4105         if (dtype < SVt_PV)
4106             sv_upgrade(dstr, SVt_PV);
4107         break;
4108     case SVt_PVIV:
4109         if (dtype < SVt_PVIV)
4110             sv_upgrade(dstr, SVt_PVIV);
4111         break;
4112     case SVt_PVNV:
4113         if (dtype < SVt_PVNV)
4114             sv_upgrade(dstr, SVt_PVNV);
4115         break;
4116     default:
4117         {
4118         const char * const type = sv_reftype(sstr,0);
4119         if (PL_op)
4120             /* diag_listed_as: Bizarre copy of %s */
4121             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4122         else
4123             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4124         }
4125         break;
4126
4127     case SVt_REGEXP:
4128       upgregexp:
4129         if (dtype < SVt_REGEXP)
4130         {
4131             if (dtype >= SVt_PV) {
4132                 SvPV_free(dstr);
4133                 SvPV_set(dstr, 0);
4134                 SvLEN_set(dstr, 0);
4135                 SvCUR_set(dstr, 0);
4136             }
4137             sv_upgrade(dstr, SVt_REGEXP);
4138         }
4139         break;
4140
4141         case SVt_INVLIST:
4142     case SVt_PVLV:
4143     case SVt_PVGV:
4144     case SVt_PVMG:
4145         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4146             mg_get(sstr);
4147             if (SvTYPE(sstr) != stype)
4148                 stype = SvTYPE(sstr);
4149         }
4150         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4151                     glob_assign_glob(dstr, sstr, dtype);
4152                     return;
4153         }
4154         if (stype == SVt_PVLV)
4155         {
4156             if (isREGEXP(sstr)) goto upgregexp;
4157             SvUPGRADE(dstr, SVt_PVNV);
4158         }
4159         else
4160             SvUPGRADE(dstr, (svtype)stype);
4161     }
4162  end_of_first_switch:
4163
4164     /* dstr may have been upgraded.  */
4165     dtype = SvTYPE(dstr);
4166     sflags = SvFLAGS(sstr);
4167
4168     if (dtype == SVt_PVCV) {
4169         /* Assigning to a subroutine sets the prototype.  */
4170         if (SvOK(sstr)) {
4171             STRLEN len;
4172             const char *const ptr = SvPV_const(sstr, len);
4173
4174             SvGROW(dstr, len + 1);
4175             Copy(ptr, SvPVX(dstr), len + 1, char);
4176             SvCUR_set(dstr, len);
4177             SvPOK_only(dstr);
4178             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4179             CvAUTOLOAD_off(dstr);
4180         } else {
4181             SvOK_off(dstr);
4182         }
4183     }
4184     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4185         const char * const type = sv_reftype(dstr,0);
4186         if (PL_op)
4187             /* diag_listed_as: Cannot copy to %s */
4188             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4189         else
4190             Perl_croak(aTHX_ "Cannot copy to %s", type);
4191     } else if (sflags & SVf_ROK) {
4192         if (isGV_with_GP(dstr)
4193             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4194             sstr = SvRV(sstr);
4195             if (sstr == dstr) {
4196                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4197                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4198                 {
4199                     GvIMPORTED_on(dstr);
4200                 }
4201                 GvMULTI_on(dstr);
4202                 return;
4203             }
4204             glob_assign_glob(dstr, sstr, dtype);
4205             return;
4206         }
4207
4208         if (dtype >= SVt_PV) {
4209             if (isGV_with_GP(dstr)) {
4210                 glob_assign_ref(dstr, sstr);
4211                 return;
4212             }
4213             if (SvPVX_const(dstr)) {
4214                 SvPV_free(dstr);
4215                 SvLEN_set(dstr, 0);
4216                 SvCUR_set(dstr, 0);
4217             }
4218         }
4219         (void)SvOK_off(dstr);
4220         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4221         SvFLAGS(dstr) |= sflags & SVf_ROK;
4222         assert(!(sflags & SVp_NOK));
4223         assert(!(sflags & SVp_IOK));
4224         assert(!(sflags & SVf_NOK));
4225         assert(!(sflags & SVf_IOK));
4226     }
4227     else if (isGV_with_GP(dstr)) {
4228         if (!(sflags & SVf_OK)) {
4229             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4230                            "Undefined value assigned to typeglob");
4231         }
4232         else {
4233             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4234             if (dstr != (const SV *)gv) {
4235                 const char * const name = GvNAME((const GV *)dstr);
4236                 const STRLEN len = GvNAMELEN(dstr);
4237                 HV *old_stash = NULL;
4238                 bool reset_isa = FALSE;
4239                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4240                  || (len == 1 && name[0] == ':')) {
4241                     /* Set aside the old stash, so we can reset isa caches
4242                        on its subclasses. */
4243                     if((old_stash = GvHV(dstr))) {
4244                         /* Make sure we do not lose it early. */
4245                         SvREFCNT_inc_simple_void_NN(
4246                          sv_2mortal((SV *)old_stash)
4247                         );
4248                     }
4249                     reset_isa = TRUE;
4250                 }
4251
4252                 if (GvGP(dstr))
4253                     gp_free(MUTABLE_GV(dstr));
4254                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4255
4256                 if (reset_isa) {
4257                     HV * const stash = GvHV(dstr);
4258                     if(
4259                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4260                     )
4261                         mro_package_moved(
4262                          stash, old_stash,
4263                          (GV *)dstr, 0
4264                         );
4265                 }
4266             }
4267         }
4268     }
4269     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4270           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4271         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4272     }
4273     else if (sflags & SVp_POK) {
4274         bool isSwipe = 0;
4275         const STRLEN cur = SvCUR(sstr);
4276         const STRLEN len = SvLEN(sstr);
4277
4278         /*
4279          * Check to see if we can just swipe the string.  If so, it's a
4280          * possible small lose on short strings, but a big win on long ones.
4281          * It might even be a win on short strings if SvPVX_const(dstr)
4282          * has to be allocated and SvPVX_const(sstr) has to be freed.
4283          * Likewise if we can set up COW rather than doing an actual copy, we
4284          * drop to the else clause, as the swipe code and the COW setup code
4285          * have much in common.
4286          */
4287
4288         /* Whichever path we take through the next code, we want this true,
4289            and doing it now facilitates the COW check.  */
4290         (void)SvPOK_only(dstr);
4291
4292         if (
4293             /* If we're already COW then this clause is not true, and if COW
4294                is allowed then we drop down to the else and make dest COW 
4295                with us.  If caller hasn't said that we're allowed to COW
4296                shared hash keys then we don't do the COW setup, even if the
4297                source scalar is a shared hash key scalar.  */
4298             (((flags & SV_COW_SHARED_HASH_KEYS)
4299                ? !(sflags & SVf_IsCOW)
4300 #ifdef PERL_NEW_COPY_ON_WRITE
4301                 || (len &&
4302                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4303                    /* If this is a regular (non-hek) COW, only so many COW
4304                       "copies" are possible. */
4305                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4306 #endif
4307                : 1 /* If making a COW copy is forbidden then the behaviour we
4308                        desire is as if the source SV isn't actually already
4309                        COW, even if it is.  So we act as if the source flags
4310                        are not COW, rather than actually testing them.  */
4311               )
4312 #ifndef PERL_ANY_COW
4313              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4314                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4315                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4316                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4317                 but in turn, it's somewhat dead code, never expected to go
4318                 live, but more kept as a placeholder on how to do it better
4319                 in a newer implementation.  */
4320              /* If we are COW and dstr is a suitable target then we drop down
4321                 into the else and make dest a COW of us.  */
4322              || (SvFLAGS(dstr) & SVf_BREAK)
4323 #endif
4324              )
4325             &&
4326             !(isSwipe =
4327 #ifdef PERL_NEW_COPY_ON_WRITE
4328                                 /* slated for free anyway (and not COW)? */
4329                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4330 #else
4331                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4332 #endif
4333                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4334                  (!(flags & SV_NOSTEAL)) &&
4335                                         /* and we're allowed to steal temps */
4336                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4337                  len)             /* and really is a string */
4338 #ifdef PERL_ANY_COW
4339             && ((flags & SV_COW_SHARED_HASH_KEYS)
4340                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4341 # ifdef PERL_OLD_COPY_ON_WRITE
4342                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4343                      && SvTYPE(sstr) >= SVt_PVIV && len
4344 # else
4345                      && !(SvFLAGS(dstr) & SVf_BREAK)
4346                      && !(sflags & SVf_IsCOW)
4347                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4348                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4349 # endif
4350                     ))
4351                 : 1)
4352 #endif
4353             ) {
4354             /* Failed the swipe test, and it's not a shared hash key either.
4355                Have to copy the string.  */
4356             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4357             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4358             SvCUR_set(dstr, cur);
4359             *SvEND(dstr) = '\0';
4360         } else {
4361             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4362                be true in here.  */
4363             /* Either it's a shared hash key, or it's suitable for
4364                copy-on-write or we can swipe the string.  */
4365             if (DEBUG_C_TEST) {
4366                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4367                 sv_dump(sstr);
4368                 sv_dump(dstr);
4369             }
4370 #ifdef PERL_ANY_COW
4371             if (!isSwipe) {
4372                 if (!(sflags & SVf_IsCOW)) {
4373                     SvIsCOW_on(sstr);
4374 # ifdef PERL_OLD_COPY_ON_WRITE
4375                     /* Make the source SV into a loop of 1.
4376                        (about to become 2) */
4377                     SV_COW_NEXT_SV_SET(sstr, sstr);
4378 # else
4379                     CowREFCNT(sstr) = 0;
4380 # endif
4381                 }
4382             }
4383 #endif
4384             /* Initial code is common.  */
4385             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4386                 SvPV_free(dstr);
4387             }
4388
4389             if (!isSwipe) {
4390                 /* making another shared SV.  */
4391 #ifdef PERL_ANY_COW
4392                 if (len) {
4393 # ifdef PERL_OLD_COPY_ON_WRITE
4394                     assert (SvTYPE(dstr) >= SVt_PVIV);
4395                     /* SvIsCOW_normal */
4396                     /* splice us in between source and next-after-source.  */
4397                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4398                     SV_COW_NEXT_SV_SET(sstr, dstr);
4399 # else
4400                     CowREFCNT(sstr)++;
4401 # endif
4402                     SvPV_set(dstr, SvPVX_mutable(sstr));
4403                 } else
4404 #endif
4405                 {
4406                     /* SvIsCOW_shared_hash */
4407                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4408                                           "Copy on write: Sharing hash\n"));
4409
4410                     assert (SvTYPE(dstr) >= SVt_PV);
4411                     SvPV_set(dstr,
4412                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4413                 }
4414                 SvLEN_set(dstr, len);
4415                 SvCUR_set(dstr, cur);
4416                 SvIsCOW_on(dstr);
4417             }
4418             else
4419                 {       /* Passes the swipe test.  */
4420                 SvPV_set(dstr, SvPVX_mutable(sstr));
4421                 SvLEN_set(dstr, SvLEN(sstr));
4422                 SvCUR_set(dstr, SvCUR(sstr));
4423
4424                 SvTEMP_off(dstr);
4425                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4426                 SvPV_set(sstr, NULL);
4427                 SvLEN_set(sstr, 0);
4428                 SvCUR_set(sstr, 0);
4429                 SvTEMP_off(sstr);
4430             }
4431         }
4432         if (sflags & SVp_NOK) {
4433             SvNV_set(dstr, SvNVX(sstr));
4434         }
4435         if (sflags & SVp_IOK) {
4436             SvIV_set(dstr, SvIVX(sstr));
4437             /* Must do this otherwise some other overloaded use of 0x80000000
4438                gets confused. I guess SVpbm_VALID */
4439             if (sflags & SVf_IVisUV)
4440                 SvIsUV_on(dstr);
4441         }
4442         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4443         {
4444             const MAGIC * const smg = SvVSTRING_mg(sstr);
4445             if (smg) {
4446                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4447                          smg->mg_ptr, smg->mg_len);
4448                 SvRMAGICAL_on(dstr);
4449             }
4450         }
4451     }
4452     else if (sflags & (SVp_IOK|SVp_NOK)) {
4453         (void)SvOK_off(dstr);
4454         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4455         if (sflags & SVp_IOK) {
4456             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4457             SvIV_set(dstr, SvIVX(sstr));
4458         }
4459         if (sflags & SVp_NOK) {
4460             SvNV_set(dstr, SvNVX(sstr));
4461         }
4462     }
4463     else {
4464         if (isGV_with_GP(sstr)) {
4465             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4466         }
4467         else
4468             (void)SvOK_off(dstr);
4469     }
4470     if (SvTAINTED(sstr))
4471         SvTAINT(dstr);
4472 }
4473
4474 /*
4475 =for apidoc sv_setsv_mg
4476
4477 Like C<sv_setsv>, but also handles 'set' magic.
4478
4479 =cut
4480 */
4481
4482 void
4483 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4484 {
4485     PERL_ARGS_ASSERT_SV_SETSV_MG;
4486
4487     sv_setsv(dstr,sstr);
4488     SvSETMAGIC(dstr);
4489 }
4490
4491 #ifdef PERL_ANY_COW
4492 # ifdef PERL_OLD_COPY_ON_WRITE
4493 #  define SVt_COW SVt_PVIV
4494 # else
4495 #  define SVt_COW SVt_PV
4496 # endif
4497 SV *
4498 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4499 {
4500     STRLEN cur = SvCUR(sstr);
4501     STRLEN len = SvLEN(sstr);
4502     char *new_pv;
4503
4504     PERL_ARGS_ASSERT_SV_SETSV_COW;
4505
4506     if (DEBUG_C_TEST) {
4507         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4508                       (void*)sstr, (void*)dstr);
4509         sv_dump(sstr);
4510         if (dstr)
4511                     sv_dump(dstr);
4512     }
4513
4514     if (dstr) {
4515         if (SvTHINKFIRST(dstr))
4516             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4517         else if (SvPVX_const(dstr))
4518             Safefree(SvPVX_mutable(dstr));
4519     }
4520     else
4521         new_SV(dstr);
4522     SvUPGRADE(dstr, SVt_COW);
4523
4524     assert (SvPOK(sstr));
4525     assert (SvPOKp(sstr));
4526 # ifdef PERL_OLD_COPY_ON_WRITE
4527     assert (!SvIOK(sstr));
4528     assert (!SvIOKp(sstr));
4529     assert (!SvNOK(sstr));
4530     assert (!SvNOKp(sstr));
4531 # endif
4532
4533     if (SvIsCOW(sstr)) {
4534
4535         if (SvLEN(sstr) == 0) {
4536             /* source is a COW shared hash key.  */
4537             DEBUG_C(PerlIO_printf(Perl_debug_log,
4538                                   "Fast copy on write: Sharing hash\n"));
4539             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4540             goto common_exit;
4541         }
4542 # ifdef PERL_OLD_COPY_ON_WRITE
4543         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4544 # else
4545         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4546         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4547 # endif
4548     } else {
4549         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4550         SvUPGRADE(sstr, SVt_COW);
4551         SvIsCOW_on(sstr);
4552         DEBUG_C(PerlIO_printf(Perl_debug_log,
4553                               "Fast copy on write: Converting sstr to COW\n"));
4554 # ifdef PERL_OLD_COPY_ON_WRITE
4555         SV_COW_NEXT_SV_SET(dstr, sstr);
4556 # else
4557         CowREFCNT(sstr) = 0;    
4558 # endif
4559     }
4560 # ifdef PERL_OLD_COPY_ON_WRITE
4561     SV_COW_NEXT_SV_SET(sstr, dstr);
4562 # else
4563     CowREFCNT(sstr)++;  
4564 # endif
4565     new_pv = SvPVX_mutable(sstr);
4566
4567   common_exit:
4568     SvPV_set(dstr, new_pv);
4569     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4570     if (SvUTF8(sstr))
4571         SvUTF8_on(dstr);
4572     SvLEN_set(dstr, len);
4573     SvCUR_set(dstr, cur);
4574     if (DEBUG_C_TEST) {
4575         sv_dump(dstr);
4576     }
4577     return dstr;
4578 }
4579 #endif
4580
4581 /*
4582 =for apidoc sv_setpvn
4583
4584 Copies a string into an SV.  The C<len> parameter indicates the number of
4585 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4586 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4587
4588 =cut
4589 */
4590
4591 void
4592 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4593 {
4594     dVAR;
4595     char *dptr;
4596
4597     PERL_ARGS_ASSERT_SV_SETPVN;
4598
4599     SV_CHECK_THINKFIRST_COW_DROP(sv);
4600     if (!ptr) {
4601         (void)SvOK_off(sv);
4602         return;
4603     }
4604     else {
4605         /* len is STRLEN which is unsigned, need to copy to signed */
4606         const IV iv = len;
4607         if (iv < 0)
4608             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4609                        IVdf, iv);
4610     }
4611     SvUPGRADE(sv, SVt_PV);
4612
4613     dptr = SvGROW(sv, len + 1);
4614     Move(ptr,dptr,len,char);
4615     dptr[len] = '\0';
4616     SvCUR_set(sv, len);
4617     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4618     SvTAINT(sv);
4619     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4620 }
4621
4622 /*
4623 =for apidoc sv_setpvn_mg
4624
4625 Like C<sv_setpvn>, but also handles 'set' magic.
4626
4627 =cut
4628 */
4629
4630 void
4631 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4632 {
4633     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4634
4635     sv_setpvn(sv,ptr,len);
4636     SvSETMAGIC(sv);
4637 }
4638
4639 /*
4640 =for apidoc sv_setpv
4641
4642 Copies a string into an SV.  The string must be null-terminated.  Does not
4643 handle 'set' magic.  See C<sv_setpv_mg>.
4644
4645 =cut
4646 */
4647
4648 void
4649 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4650 {
4651     dVAR;
4652     STRLEN len;
4653
4654     PERL_ARGS_ASSERT_SV_SETPV;
4655
4656     SV_CHECK_THINKFIRST_COW_DROP(sv);
4657     if (!ptr) {
4658         (void)SvOK_off(sv);
4659         return;
4660     }
4661     len = strlen(ptr);
4662     SvUPGRADE(sv, SVt_PV);
4663
4664     SvGROW(sv, len + 1);
4665     Move(ptr,SvPVX(sv),len+1,char);
4666     SvCUR_set(sv, len);
4667     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4668     SvTAINT(sv);
4669     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4670 }
4671
4672 /*
4673 =for apidoc sv_setpv_mg
4674
4675 Like C<sv_setpv>, but also handles 'set' magic.
4676
4677 =cut
4678 */
4679
4680 void
4681 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4682 {
4683     PERL_ARGS_ASSERT_SV_SETPV_MG;
4684
4685     sv_setpv(sv,ptr);
4686     SvSETMAGIC(sv);
4687 }
4688
4689 void
4690 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4691 {
4692     dVAR;
4693
4694     PERL_ARGS_ASSERT_SV_SETHEK;
4695
4696     if (!hek) {
4697         return;
4698     }
4699
4700     if (HEK_LEN(hek) == HEf_SVKEY) {
4701         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4702         return;
4703     } else {
4704         const int flags = HEK_FLAGS(hek);
4705         if (flags & HVhek_WASUTF8) {
4706             STRLEN utf8_len = HEK_LEN(hek);
4707             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4708             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4709             SvUTF8_on(sv);
4710             return;
4711         } else if (flags & HVhek_UNSHARED) {
4712             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4713             if (HEK_UTF8(hek))
4714                 SvUTF8_on(sv);
4715             else SvUTF8_off(sv);
4716             return;
4717         }
4718         {
4719             SV_CHECK_THINKFIRST_COW_DROP(sv);
4720             SvUPGRADE(sv, SVt_PV);
4721             SvPV_free(sv);
4722             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4723             SvCUR_set(sv, HEK_LEN(hek));
4724             SvLEN_set(sv, 0);
4725             SvIsCOW_on(sv);
4726             SvPOK_on(sv);
4727             if (HEK_UTF8(hek))
4728                 SvUTF8_on(sv);
4729             else SvUTF8_off(sv);
4730             return;
4731         }
4732     }
4733 }
4734
4735
4736 /*
4737 =for apidoc sv_usepvn_flags
4738
4739 Tells an SV to use C<ptr> to find its string value.  Normally the
4740 string is stored inside the SV but sv_usepvn allows the SV to use an
4741 outside string.  The C<ptr> should point to memory that was allocated
4742 by C<malloc>.  It must be the start of a mallocked block
4743 of memory, and not a pointer to the middle of it.  The
4744 string length, C<len>, must be supplied.  By default
4745 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4746 so that pointer should not be freed or used by the programmer after
4747 giving it to sv_usepvn, and neither should any pointers from "behind"
4748 that pointer (e.g. ptr + 1) be used.
4749
4750 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4751 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4752 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4753 C<len>, and already meets the requirements for storing in C<SvPVX>).
4754
4755 =cut
4756 */
4757
4758 void
4759 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4760 {
4761     dVAR;
4762     STRLEN allocate;
4763
4764     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4765
4766     SV_CHECK_THINKFIRST_COW_DROP(sv);
4767     SvUPGRADE(sv, SVt_PV);
4768     if (!ptr) {
4769         (void)SvOK_off(sv);
4770         if (flags & SV_SMAGIC)
4771             SvSETMAGIC(sv);
4772         return;
4773     }
4774     if (SvPVX_const(sv))
4775         SvPV_free(sv);
4776
4777 #ifdef DEBUGGING
4778     if (flags & SV_HAS_TRAILING_NUL)
4779         assert(ptr[len] == '\0');
4780 #endif
4781
4782     allocate = (flags & SV_HAS_TRAILING_NUL)
4783         ? len + 1 :
4784 #ifdef Perl_safesysmalloc_size
4785         len + 1;
4786 #else 
4787         PERL_STRLEN_ROUNDUP(len + 1);
4788 #endif
4789     if (flags & SV_HAS_TRAILING_NUL) {
4790         /* It's long enough - do nothing.
4791            Specifically Perl_newCONSTSUB is relying on this.  */
4792     } else {
4793 #ifdef DEBUGGING
4794         /* Force a move to shake out bugs in callers.  */
4795         char *new_ptr = (char*)safemalloc(allocate);
4796         Copy(ptr, new_ptr, len, char);
4797         PoisonFree(ptr,len,char);
4798         Safefree(ptr);
4799         ptr = new_ptr;
4800 #else
4801         ptr = (char*) saferealloc (ptr, allocate);
4802 #endif
4803     }
4804 #ifdef Perl_safesysmalloc_size
4805     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4806 #else
4807     SvLEN_set(sv, allocate);
4808 #endif
4809     SvCUR_set(sv, len);
4810     SvPV_set(sv, ptr);
4811     if (!(flags & SV_HAS_TRAILING_NUL)) {
4812         ptr[len] = '\0';
4813     }
4814     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4815     SvTAINT(sv);
4816     if (flags & SV_SMAGIC)
4817         SvSETMAGIC(sv);
4818 }
4819
4820 #ifdef PERL_OLD_COPY_ON_WRITE
4821 /* Need to do this *after* making the SV normal, as we need the buffer
4822    pointer to remain valid until after we've copied it.  If we let go too early,
4823    another thread could invalidate it by unsharing last of the same hash key
4824    (which it can do by means other than releasing copy-on-write Svs)
4825    or by changing the other copy-on-write SVs in the loop.  */
4826 STATIC void
4827 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4828 {
4829     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4830
4831     { /* this SV was SvIsCOW_normal(sv) */
4832          /* we need to find the SV pointing to us.  */
4833         SV *current = SV_COW_NEXT_SV(after);
4834
4835         if (current == sv) {
4836             /* The SV we point to points back to us (there were only two of us
4837                in the loop.)
4838                Hence other SV is no longer copy on write either.  */
4839             SvIsCOW_off(after);
4840         } else {
4841             /* We need to follow the pointers around the loop.  */
4842             SV *next;
4843             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4844                 assert (next);
4845                 current = next;
4846                  /* don't loop forever if the structure is bust, and we have
4847                     a pointer into a closed loop.  */
4848                 assert (current != after);
4849                 assert (SvPVX_const(current) == pvx);
4850             }
4851             /* Make the SV before us point to the SV after us.  */
4852             SV_COW_NEXT_SV_SET(current, after);
4853         }
4854     }
4855 }
4856 #endif
4857 /*
4858 =for apidoc sv_force_normal_flags
4859
4860 Undo various types of fakery on an SV, where fakery means
4861 "more than" a string: if the PV is a shared string, make
4862 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4863 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4864 we do the copy, and is also used locally; if this is a
4865 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4866 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4867 SvPOK_off rather than making a copy.  (Used where this
4868 scalar is about to be set to some other value.)  In addition,
4869 the C<flags> parameter gets passed to C<sv_unref_flags()>
4870 when unreffing.  C<sv_force_normal> calls this function
4871 with flags set to 0.
4872
4873 =cut
4874 */
4875
4876 static void
4877 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
4878 {
4879     dVAR;
4880
4881     assert(SvIsCOW(sv));
4882     {
4883 #ifdef PERL_ANY_COW
4884         const char * const pvx = SvPVX_const(sv);
4885         const STRLEN len = SvLEN(sv);
4886         const STRLEN cur = SvCUR(sv);
4887 # ifdef PERL_OLD_COPY_ON_WRITE
4888         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4889            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4890            we'll fail an assertion.  */
4891         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4892 # endif
4893
4894         if (DEBUG_C_TEST) {
4895                 PerlIO_printf(Perl_debug_log,
4896                               "Copy on write: Force normal %ld\n",
4897                               (long) flags);
4898                 sv_dump(sv);
4899         }
4900         SvIsCOW_off(sv);
4901 # ifdef PERL_NEW_COPY_ON_WRITE
4902         if (len && CowREFCNT(sv) == 0)
4903             /* We own the buffer ourselves. */
4904             NOOP;
4905         else
4906 # endif
4907         {
4908                 
4909             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4910 # ifdef PERL_NEW_COPY_ON_WRITE
4911             /* Must do this first, since the macro uses SvPVX. */
4912             if (len) CowREFCNT(sv)--;
4913 # endif
4914             SvPV_set(sv, NULL);
4915             SvLEN_set(sv, 0);
4916             if (flags & SV_COW_DROP_PV) {
4917                 /* OK, so we don't need to copy our buffer.  */
4918                 SvPOK_off(sv);
4919             } else {
4920                 SvGROW(sv, cur + 1);
4921                 Move(pvx,SvPVX(sv),cur,char);
4922                 SvCUR_set(sv, cur);
4923                 *SvEND(sv) = '\0';
4924             }
4925             if (len) {
4926 # ifdef PERL_OLD_COPY_ON_WRITE
4927                 sv_release_COW(sv, pvx, next);
4928 # endif
4929             } else {
4930                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4931             }
4932             if (DEBUG_C_TEST) {
4933                 sv_dump(sv);
4934             }
4935         }
4936 #else
4937             const char * const pvx = SvPVX_const(sv);
4938             const STRLEN len = SvCUR(sv);
4939             SvIsCOW_off(sv);
4940             SvPV_set(sv, NULL);
4941             SvLEN_set(sv, 0);
4942             if (flags & SV_COW_DROP_PV) {
4943                 /* OK, so we don't need to copy our buffer.  */
4944                 SvPOK_off(sv);
4945             } else {
4946                 SvGROW(sv, len + 1);
4947                 Move(pvx,SvPVX(sv),len,char);
4948                 *SvEND(sv) = '\0';
4949             }
4950             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4951 #endif
4952     }
4953 }
4954
4955 void
4956 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4957 {
4958     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4959
4960     if (SvREADONLY(sv))
4961         Perl_croak_no_modify();
4962     else if (SvIsCOW(sv))
4963         S_sv_uncow(aTHX_ sv, flags);
4964     if (SvROK(sv))
4965         sv_unref_flags(sv, flags);
4966     else if (SvFAKE(sv) && isGV_with_GP(sv))
4967         sv_unglob(sv, flags);
4968     else if (SvFAKE(sv) && isREGEXP(sv)) {
4969         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4970            to sv_unglob. We only need it here, so inline it.  */
4971         const bool islv = SvTYPE(sv) == SVt_PVLV;
4972         const svtype new_type =
4973           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4974         SV *const temp = newSV_type(new_type);
4975         regexp *const temp_p = ReANY((REGEXP *)sv);
4976
4977         if (new_type == SVt_PVMG) {
4978             SvMAGIC_set(temp, SvMAGIC(sv));
4979             SvMAGIC_set(sv, NULL);
4980             SvSTASH_set(temp, SvSTASH(sv));
4981             SvSTASH_set(sv, NULL);
4982         }
4983         if (!islv) SvCUR_set(temp, SvCUR(sv));
4984         /* Remember that SvPVX is in the head, not the body.  But
4985            RX_WRAPPED is in the body. */
4986         assert(ReANY((REGEXP *)sv)->mother_re);
4987         /* Their buffer is already owned by someone else. */
4988         if (flags & SV_COW_DROP_PV) {
4989             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
4990                zeroed body.  For SVt_PVLV, it should have been set to 0
4991                before turning into a regexp. */
4992             assert(!SvLEN(islv ? sv : temp));
4993             sv->sv_u.svu_pv = 0;
4994         }
4995         else {
4996             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
4997             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
4998             SvPOK_on(sv);
4999         }
5000
5001         /* Now swap the rest of the bodies. */
5002
5003         SvFAKE_off(sv);
5004         if (!islv) {
5005             SvFLAGS(sv) &= ~SVTYPEMASK;
5006             SvFLAGS(sv) |= new_type;
5007             SvANY(sv) = SvANY(temp);
5008         }
5009
5010         SvFLAGS(temp) &= ~(SVTYPEMASK);
5011         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5012         SvANY(temp) = temp_p;
5013         temp->sv_u.svu_rx = (regexp *)temp_p;
5014
5015         SvREFCNT_dec_NN(temp);
5016     }
5017     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5018 }
5019
5020 /*
5021 =for apidoc sv_chop
5022
5023 Efficient removal of characters from the beginning of the string buffer.
5024 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5025 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5026 character of the adjusted string.  Uses the "OOK hack".  On return, only
5027 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5028
5029 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5030 refer to the same chunk of data.
5031
5032 The unfortunate similarity of this function's name to that of Perl's C<chop>
5033 operator is strictly coincidental.  This function works from the left;
5034 C<chop> works from the right.
5035
5036 =cut
5037 */
5038
5039 void
5040 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5041 {
5042     STRLEN delta;
5043     STRLEN old_delta;
5044     U8 *p;
5045 #ifdef DEBUGGING
5046     const U8 *evacp;
5047     STRLEN evacn;
5048 #endif
5049     STRLEN max_delta;
5050
5051     PERL_ARGS_ASSERT_SV_CHOP;
5052
5053     if (!ptr || !SvPOKp(sv))
5054         return;
5055     delta = ptr - SvPVX_const(sv);
5056     if (!delta) {
5057         /* Nothing to do.  */
5058         return;
5059     }
5060     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5061     if (delta > max_delta)
5062         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5063                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5064     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5065     SV_CHECK_THINKFIRST(sv);
5066     SvPOK_only_UTF8(sv);
5067
5068     if (!SvOOK(sv)) {
5069         if (!SvLEN(sv)) { /* make copy of shared string */
5070             const char *pvx = SvPVX_const(sv);
5071             const STRLEN len = SvCUR(sv);
5072             SvGROW(sv, len + 1);
5073             Move(pvx,SvPVX(sv),len,char);
5074             *SvEND(sv) = '\0';
5075         }
5076         SvOOK_on(sv);
5077         old_delta = 0;
5078     } else {
5079         SvOOK_offset(sv, old_delta);
5080     }
5081     SvLEN_set(sv, SvLEN(sv) - delta);
5082     SvCUR_set(sv, SvCUR(sv) - delta);
5083     SvPV_set(sv, SvPVX(sv) + delta);
5084
5085     p = (U8 *)SvPVX_const(sv);
5086
5087 #ifdef DEBUGGING
5088     /* how many bytes were evacuated?  we will fill them with sentinel
5089        bytes, except for the part holding the new offset of course. */
5090     evacn = delta;
5091     if (old_delta)
5092         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5093     assert(evacn);
5094     assert(evacn <= delta + old_delta);
5095     evacp = p - evacn;
5096 #endif
5097
5098     /* This sets 'delta' to the accumulated value of all deltas so far */
5099     delta += old_delta;
5100     assert(delta);
5101
5102     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5103      * the string; otherwise store a 0 byte there and store 'delta' just prior
5104      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5105      * portion of the chopped part of the string */
5106     if (delta < 0x100) {
5107         *--p = (U8) delta;
5108     } else {
5109         *--p = 0;
5110         p -= sizeof(STRLEN);
5111         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5112     }
5113
5114 #ifdef DEBUGGING
5115     /* Fill the preceding buffer with sentinals to verify that no-one is
5116        using it.  */
5117     while (p > evacp) {
5118         --p;
5119         *p = (U8)PTR2UV(p);
5120     }
5121 #endif
5122 }
5123
5124 /*
5125 =for apidoc sv_catpvn
5126
5127 Concatenates the string onto the end of the string which is in the SV.  The
5128 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5129 status set, then the bytes appended should be valid UTF-8.
5130 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5131
5132 =for apidoc sv_catpvn_flags
5133
5134 Concatenates the string onto the end of the string which is in the SV.  The
5135 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5136 status set, then the bytes appended should be valid UTF-8.
5137 If C<flags> has the C<SV_SMAGIC> bit set, will
5138 C<mg_set> on C<dsv> afterwards if appropriate.
5139 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5140 in terms of this function.
5141
5142 =cut
5143 */
5144
5145 void
5146 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5147 {
5148     dVAR;
5149     STRLEN dlen;
5150     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5151
5152     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5153     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5154
5155     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5156       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5157          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5158          dlen = SvCUR(dsv);
5159       }
5160       else SvGROW(dsv, dlen + slen + 1);
5161       if (sstr == dstr)
5162         sstr = SvPVX_const(dsv);
5163       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5164       SvCUR_set(dsv, SvCUR(dsv) + slen);
5165     }
5166     else {
5167         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5168         const char * const send = sstr + slen;
5169         U8 *d;
5170
5171         /* Something this code does not account for, which I think is
5172            impossible; it would require the same pv to be treated as
5173            bytes *and* utf8, which would indicate a bug elsewhere. */
5174         assert(sstr != dstr);
5175
5176         SvGROW(dsv, dlen + slen * 2 + 1);
5177         d = (U8 *)SvPVX(dsv) + dlen;
5178
5179         while (sstr < send) {
5180             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5181             if (UNI_IS_INVARIANT(uv))
5182                 *d++ = (U8)UTF_TO_NATIVE(uv);
5183             else {
5184                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5185                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5186             }
5187         }
5188         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5189     }
5190     *SvEND(dsv) = '\0';
5191     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5192     SvTAINT(dsv);
5193     if (flags & SV_SMAGIC)
5194         SvSETMAGIC(dsv);
5195 }
5196
5197 /*
5198 =for apidoc sv_catsv
5199
5200 Concatenates the string from SV C<ssv> onto the end of the string in SV
5201 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5202 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5203 C<sv_catsv_nomg>.
5204
5205 =for apidoc sv_catsv_flags
5206
5207 Concatenates the string from SV C<ssv> onto the end of the string in SV
5208 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5209 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5210 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5211 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5212 and C<sv_catsv_mg> are implemented in terms of this function.
5213
5214 =cut */
5215
5216 void
5217 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5218 {
5219     dVAR;
5220  
5221     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5222
5223     if (ssv) {
5224         STRLEN slen;
5225         const char *spv = SvPV_flags_const(ssv, slen, flags);
5226         if (spv) {
5227             if (flags & SV_GMAGIC)
5228                 SvGETMAGIC(dsv);
5229             sv_catpvn_flags(dsv, spv, slen,
5230                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5231             if (flags & SV_SMAGIC)
5232                 SvSETMAGIC(dsv);
5233         }
5234     }
5235 }
5236
5237 /*
5238 =for apidoc sv_catpv
5239
5240 Concatenates the string onto the end of the string which is in the SV.
5241 If the SV has the UTF-8 status set, then the bytes appended should be
5242 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5243
5244 =cut */
5245
5246 void
5247 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5248 {
5249     dVAR;
5250     STRLEN len;
5251     STRLEN tlen;
5252     char *junk;
5253
5254     PERL_ARGS_ASSERT_SV_CATPV;
5255
5256     if (!ptr)
5257         return;
5258     junk = SvPV_force(sv, tlen);
5259     len = strlen(ptr);
5260     SvGROW(sv, tlen + len + 1);
5261     if (ptr == junk)
5262         ptr = SvPVX_const(sv);
5263     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5264     SvCUR_set(sv, SvCUR(sv) + len);
5265     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5266     SvTAINT(sv);
5267 }
5268
5269 /*
5270 =for apidoc sv_catpv_flags
5271
5272 Concatenates the string onto the end of the string which is in the SV.
5273 If the SV has the UTF-8 status set, then the bytes appended should
5274 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5275 on the modified SV if appropriate.
5276
5277 =cut
5278 */
5279
5280 void
5281 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5282 {
5283     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5284     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5285 }
5286
5287 /*
5288 =for apidoc sv_catpv_mg
5289
5290 Like C<sv_catpv>, but also handles 'set' magic.
5291
5292 =cut
5293 */
5294
5295 void
5296 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5297 {
5298     PERL_ARGS_ASSERT_SV_CATPV_MG;
5299
5300     sv_catpv(sv,ptr);
5301     SvSETMAGIC(sv);
5302 }
5303
5304 /*
5305 =for apidoc newSV
5306
5307 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5308 bytes of preallocated string space the SV should have.  An extra byte for a
5309 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5310 space is allocated.)  The reference count for the new SV is set to 1.
5311
5312 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5313 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5314 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5315 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5316 modules supporting older perls.
5317
5318 =cut
5319 */
5320
5321 SV *
5322 Perl_newSV(pTHX_ const STRLEN len)
5323 {
5324     dVAR;
5325     SV *sv;
5326
5327     new_SV(sv);
5328     if (len) {
5329         sv_upgrade(sv, SVt_PV);
5330         SvGROW(sv, len + 1);
5331     }
5332     return sv;
5333 }
5334 /*
5335 =for apidoc sv_magicext
5336
5337 Adds magic to an SV, upgrading it if necessary.  Applies the
5338 supplied vtable and returns a pointer to the magic added.
5339
5340 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5341 In particular, you can add magic to SvREADONLY SVs, and add more than
5342 one instance of the same 'how'.
5343
5344 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5345 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5346 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5347 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5348
5349 (This is now used as a subroutine by C<sv_magic>.)
5350
5351 =cut
5352 */
5353 MAGIC * 
5354 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5355                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5356 {
5357     dVAR;
5358     MAGIC* mg;
5359
5360     PERL_ARGS_ASSERT_SV_MAGICEXT;
5361
5362     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5363
5364     SvUPGRADE(sv, SVt_PVMG);
5365     Newxz(mg, 1, MAGIC);
5366     mg->mg_moremagic = SvMAGIC(sv);
5367     SvMAGIC_set(sv, mg);
5368
5369     /* Sometimes a magic contains a reference loop, where the sv and
5370        object refer to each other.  To prevent a reference loop that
5371        would prevent such objects being freed, we look for such loops
5372        and if we find one we avoid incrementing the object refcount.
5373
5374        Note we cannot do this to avoid self-tie loops as intervening RV must
5375        have its REFCNT incremented to keep it in existence.
5376
5377     */
5378     if (!obj || obj == sv ||
5379         how == PERL_MAGIC_arylen ||
5380         how == PERL_MAGIC_symtab ||
5381         (SvTYPE(obj) == SVt_PVGV &&
5382             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5383              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5384              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5385     {
5386         mg->mg_obj = obj;
5387     }
5388     else {
5389         mg->mg_obj = SvREFCNT_inc_simple(obj);
5390         mg->mg_flags |= MGf_REFCOUNTED;
5391     }
5392
5393     /* Normal self-ties simply pass a null object, and instead of
5394        using mg_obj directly, use the SvTIED_obj macro to produce a
5395        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5396        with an RV obj pointing to the glob containing the PVIO.  In
5397        this case, to avoid a reference loop, we need to weaken the
5398        reference.
5399     */
5400
5401     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5402         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5403     {
5404       sv_rvweaken(obj);
5405     }
5406
5407     mg->mg_type = how;
5408     mg->mg_len = namlen;
5409     if (name) {
5410         if (namlen > 0)
5411             mg->mg_ptr = savepvn(name, namlen);
5412         else if (namlen == HEf_SVKEY) {
5413             /* Yes, this is casting away const. This is only for the case of
5414                HEf_SVKEY. I think we need to document this aberation of the
5415                constness of the API, rather than making name non-const, as
5416                that change propagating outwards a long way.  */
5417             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5418         } else
5419             mg->mg_ptr = (char *) name;
5420     }
5421     mg->mg_virtual = (MGVTBL *) vtable;
5422
5423     mg_magical(sv);
5424     return mg;
5425 }
5426
5427 MAGIC *
5428 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5429 {
5430     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5431     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5432         /* This sv is only a delegate.  //g magic must be attached to
5433            its target. */
5434         vivify_defelem(sv);
5435         sv = LvTARG(sv);
5436     }
5437 #ifdef PERL_OLD_COPY_ON_WRITE
5438     if (SvIsCOW(sv))
5439         sv_force_normal_flags(sv, 0);
5440 #endif
5441     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5442                        &PL_vtbl_mglob, 0, 0);
5443 }
5444
5445 /*
5446 =for apidoc sv_magic
5447
5448 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5449 necessary, then adds a new magic item of type C<how> to the head of the
5450 magic list.
5451
5452 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5453 handling of the C<name> and C<namlen> arguments.
5454
5455 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5456 to add more than one instance of the same 'how'.
5457
5458 =cut
5459 */
5460
5461 void
5462 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5463              const char *const name, const I32 namlen)
5464 {
5465     dVAR;
5466     const MGVTBL *vtable;
5467     MAGIC* mg;
5468     unsigned int flags;
5469     unsigned int vtable_index;
5470
5471     PERL_ARGS_ASSERT_SV_MAGIC;
5472
5473     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5474         || ((flags = PL_magic_data[how]),
5475             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5476             > magic_vtable_max))
5477         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5478
5479     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5480        Useful for attaching extension internal data to perl vars.
5481        Note that multiple extensions may clash if magical scalars
5482        etc holding private data from one are passed to another. */
5483
5484     vtable = (vtable_index == magic_vtable_max)
5485         ? NULL : PL_magic_vtables + vtable_index;
5486
5487 #ifdef PERL_OLD_COPY_ON_WRITE
5488     if (SvIsCOW(sv))
5489         sv_force_normal_flags(sv, 0);
5490 #endif
5491     if (SvREADONLY(sv)) {
5492         if (
5493             /* its okay to attach magic to shared strings */
5494             !SvIsCOW(sv)
5495
5496             && IN_PERL_RUNTIME
5497             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5498            )
5499         {
5500             Perl_croak_no_modify();
5501         }
5502     }
5503     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5504         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5505             /* sv_magic() refuses to add a magic of the same 'how' as an
5506                existing one
5507              */
5508             if (how == PERL_MAGIC_taint)
5509                 mg->mg_len |= 1;
5510             return;
5511         }
5512     }
5513
5514     /* Rest of work is done else where */
5515     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5516
5517     switch (how) {
5518     case PERL_MAGIC_taint:
5519         mg->mg_len = 1;
5520         break;
5521     case PERL_MAGIC_ext:
5522     case PERL_MAGIC_dbfile:
5523         SvRMAGICAL_on(sv);
5524         break;
5525     }
5526 }
5527
5528 static int
5529 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5530 {
5531     MAGIC* mg;
5532     MAGIC** mgp;
5533
5534     assert(flags <= 1);
5535
5536     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5537         return 0;
5538     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5539     for (mg = *mgp; mg; mg = *mgp) {
5540         const MGVTBL* const virt = mg->mg_virtual;
5541         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5542             *mgp = mg->mg_moremagic;
5543             if (virt && virt->svt_free)
5544                 virt->svt_free(aTHX_ sv, mg);
5545             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5546                 if (mg->mg_len > 0)
5547                     Safefree(mg->mg_ptr);
5548                 else if (mg->mg_len == HEf_SVKEY)
5549                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5550                 else if (mg->mg_type == PERL_MAGIC_utf8)
5551                     Safefree(mg->mg_ptr);
5552             }
5553             if (mg->mg_flags & MGf_REFCOUNTED)
5554                 SvREFCNT_dec(mg->mg_obj);
5555             Safefree(mg);
5556         }
5557         else
5558             mgp = &mg->mg_moremagic;
5559     }
5560     if (SvMAGIC(sv)) {
5561         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5562             mg_magical(sv);     /*    else fix the flags now */
5563     }
5564     else {
5565         SvMAGICAL_off(sv);
5566         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5567     }
5568     return 0;
5569 }
5570
5571 /*
5572 =for apidoc sv_unmagic
5573
5574 Removes all magic of type C<type> from an SV.
5575
5576 =cut
5577 */
5578
5579 int
5580 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5581 {
5582     PERL_ARGS_ASSERT_SV_UNMAGIC;
5583     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5584 }
5585
5586 /*
5587 =for apidoc sv_unmagicext
5588
5589 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5590
5591 =cut
5592 */
5593
5594 int
5595 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5596 {
5597     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5598     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5599 }
5600
5601 /*
5602 =for apidoc sv_rvweaken
5603
5604 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5605 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5606 push a back-reference to this RV onto the array of backreferences
5607 associated with that magic.  If the RV is magical, set magic will be
5608 called after the RV is cleared.
5609
5610 =cut
5611 */
5612
5613 SV *
5614 Perl_sv_rvweaken(pTHX_ SV *const sv)
5615 {
5616     SV *tsv;
5617
5618     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5619
5620     if (!SvOK(sv))  /* let undefs pass */
5621         return sv;
5622     if (!SvROK(sv))
5623         Perl_croak(aTHX_ "Can't weaken a nonreference");
5624     else if (SvWEAKREF(sv)) {
5625         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5626         return sv;
5627     }
5628     else if (SvREADONLY(sv)) croak_no_modify();
5629     tsv = SvRV(sv);
5630     Perl_sv_add_backref(aTHX_ tsv, sv);
5631     SvWEAKREF_on(sv);
5632     SvREFCNT_dec_NN(tsv);
5633     return sv;
5634 }
5635
5636 /* Give tsv backref magic if it hasn't already got it, then push a
5637  * back-reference to sv onto the array associated with the backref magic.
5638  *
5639  * As an optimisation, if there's only one backref and it's not an AV,
5640  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5641  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5642  * active.)
5643  */
5644
5645 /* A discussion about the backreferences array and its refcount:
5646  *
5647  * The AV holding the backreferences is pointed to either as the mg_obj of
5648  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5649  * xhv_backreferences field. The array is created with a refcount
5650  * of 2. This means that if during global destruction the array gets
5651  * picked on before its parent to have its refcount decremented by the
5652  * random zapper, it won't actually be freed, meaning it's still there for
5653  * when its parent gets freed.
5654  *
5655  * When the parent SV is freed, the extra ref is killed by
5656  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5657  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5658  *
5659  * When a single backref SV is stored directly, it is not reference
5660  * counted.
5661  */
5662
5663 void
5664 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5665 {
5666     dVAR;
5667     SV **svp;
5668     AV *av = NULL;
5669     MAGIC *mg = NULL;
5670
5671     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5672
5673     /* find slot to store array or singleton backref */
5674
5675     if (SvTYPE(tsv) == SVt_PVHV) {
5676         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5677     } else {
5678         if (! ((mg =
5679             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5680         {
5681             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5682             mg = mg_find(tsv, PERL_MAGIC_backref);
5683         }
5684         svp = &(mg->mg_obj);
5685     }
5686
5687     /* create or retrieve the array */
5688
5689     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5690         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5691     ) {
5692         /* create array */
5693         av = newAV();
5694         AvREAL_off(av);
5695         SvREFCNT_inc_simple_void(av);
5696         /* av now has a refcnt of 2; see discussion above */
5697         if (*svp) {
5698             /* move single existing backref to the array */
5699             av_extend(av, 1);
5700             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5701         }
5702         *svp = (SV*)av;
5703         if (mg)
5704             mg->mg_flags |= MGf_REFCOUNTED;
5705     }
5706     else
5707         av = MUTABLE_AV(*svp);
5708
5709     if (!av) {
5710         /* optimisation: store single backref directly in HvAUX or mg_obj */
5711         *svp = sv;
5712         return;
5713     }
5714     /* push new backref */
5715     assert(SvTYPE(av) == SVt_PVAV);
5716     if (AvFILLp(av) >= AvMAX(av)) {
5717         av_extend(av, AvFILLp(av)+1);
5718     }
5719     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5720 }
5721
5722 /* delete a back-reference to ourselves from the backref magic associated
5723  * with the SV we point to.
5724  */
5725
5726 void
5727 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5728 {
5729     dVAR;
5730     SV **svp = NULL;
5731
5732     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5733
5734     if (SvTYPE(tsv) == SVt_PVHV) {
5735         if (SvOOK(tsv))
5736             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5737     }
5738     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5739         /* It's possible for the the last (strong) reference to tsv to have
5740            become freed *before* the last thing holding a weak reference.
5741            If both survive longer than the backreferences array, then when
5742            the referent's reference count drops to 0 and it is freed, it's
5743            not able to chase the backreferences, so they aren't NULLed.
5744
5745            For example, a CV holds a weak reference to its stash. If both the
5746            CV and the stash survive longer than the backreferences array,
5747            and the CV gets picked for the SvBREAK() treatment first,
5748            *and* it turns out that the stash is only being kept alive because
5749            of an our variable in the pad of the CV, then midway during CV
5750            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5751            It ends up pointing to the freed HV. Hence it's chased in here, and
5752            if this block wasn't here, it would hit the !svp panic just below.
5753
5754            I don't believe that "better" destruction ordering is going to help
5755            here - during global destruction there's always going to be the
5756            chance that something goes out of order. We've tried to make it
5757            foolproof before, and it only resulted in evolutionary pressure on
5758            fools. Which made us look foolish for our hubris. :-(
5759         */
5760         return;
5761     }
5762     else {
5763         MAGIC *const mg
5764             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5765         svp =  mg ? &(mg->mg_obj) : NULL;
5766     }
5767
5768     if (!svp)
5769         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5770     if (!*svp) {
5771         /* It's possible that sv is being freed recursively part way through the
5772            freeing of tsv. If this happens, the backreferences array of tsv has
5773            already been freed, and so svp will be NULL. If this is the case,
5774            we should not panic. Instead, nothing needs doing, so return.  */
5775         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5776             return;
5777         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5778                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5779     }
5780
5781     if (SvTYPE(*svp) == SVt_PVAV) {
5782 #ifdef DEBUGGING
5783         int count = 1;
5784 #endif
5785         AV * const av = (AV*)*svp;
5786         SSize_t fill;
5787         assert(!SvIS_FREED(av));
5788         fill = AvFILLp(av);
5789         assert(fill > -1);
5790         svp = AvARRAY(av);
5791         /* for an SV with N weak references to it, if all those
5792          * weak refs are deleted, then sv_del_backref will be called
5793          * N times and O(N^2) compares will be done within the backref
5794          * array. To ameliorate this potential slowness, we:
5795          * 1) make sure this code is as tight as possible;
5796          * 2) when looking for SV, look for it at both the head and tail of the
5797          *    array first before searching the rest, since some create/destroy
5798          *    patterns will cause the backrefs to be freed in order.
5799          */
5800         if (*svp == sv) {
5801             AvARRAY(av)++;
5802             AvMAX(av)--;
5803         }
5804         else {
5805             SV **p = &svp[fill];
5806             SV *const topsv = *p;
5807             if (topsv != sv) {
5808 #ifdef DEBUGGING
5809                 count = 0;
5810 #endif
5811                 while (--p > svp) {
5812                     if (*p == sv) {
5813                         /* We weren't the last entry.
5814                            An unordered list has this property that you
5815                            can take the last element off the end to fill
5816                            the hole, and it's still an unordered list :-)
5817                         */
5818                         *p = topsv;
5819 #ifdef DEBUGGING
5820                         count++;
5821 #else
5822                         break; /* should only be one */
5823 #endif
5824                     }
5825                 }
5826             }
5827         }
5828         assert(count ==1);
5829         AvFILLp(av) = fill-1;
5830     }
5831     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5832         /* freed AV; skip */
5833     }
5834     else {
5835         /* optimisation: only a single backref, stored directly */
5836         if (*svp != sv)
5837             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5838         *svp = NULL;
5839     }
5840
5841 }
5842
5843 void
5844 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5845 {
5846     SV **svp;
5847     SV **last;
5848     bool is_array;
5849
5850     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5851
5852     if (!av)
5853         return;
5854
5855     /* after multiple passes through Perl_sv_clean_all() for a thingy
5856      * that has badly leaked, the backref array may have gotten freed,
5857      * since we only protect it against 1 round of cleanup */
5858     if (SvIS_FREED(av)) {
5859         if (PL_in_clean_all) /* All is fair */
5860             return;
5861         Perl_croak(aTHX_
5862                    "panic: magic_killbackrefs (freed backref AV/SV)");
5863     }
5864
5865
5866     is_array = (SvTYPE(av) == SVt_PVAV);
5867     if (is_array) {
5868         assert(!SvIS_FREED(av));
5869         svp = AvARRAY(av);
5870         if (svp)
5871             last = svp + AvFILLp(av);
5872     }
5873     else {
5874         /* optimisation: only a single backref, stored directly */
5875         svp = (SV**)&av;
5876         last = svp;
5877     }
5878
5879     if (svp) {
5880         while (svp <= last) {
5881             if (*svp) {
5882                 SV *const referrer = *svp;
5883                 if (SvWEAKREF(referrer)) {
5884                     /* XXX Should we check that it hasn't changed? */
5885                     assert(SvROK(referrer));
5886                     SvRV_set(referrer, 0);
5887                     SvOK_off(referrer);
5888                     SvWEAKREF_off(referrer);
5889                     SvSETMAGIC(referrer);
5890                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5891                            SvTYPE(referrer) == SVt_PVLV) {
5892                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5893                     /* You lookin' at me?  */
5894                     assert(GvSTASH(referrer));
5895                     assert(GvSTASH(referrer) == (const HV *)sv);
5896                     GvSTASH(referrer) = 0;
5897                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5898                            SvTYPE(referrer) == SVt_PVFM) {
5899                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5900                         /* You lookin' at me?  */
5901                         assert(CvSTASH(referrer));
5902                         assert(CvSTASH(referrer) == (const HV *)sv);
5903                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5904                     }
5905                     else {
5906                         assert(SvTYPE(sv) == SVt_PVGV);
5907                         /* You lookin' at me?  */
5908                         assert(CvGV(referrer));
5909                         assert(CvGV(referrer) == (const GV *)sv);
5910                         anonymise_cv_maybe(MUTABLE_GV(sv),
5911                                                 MUTABLE_CV(referrer));
5912                     }
5913
5914                 } else {
5915                     Perl_croak(aTHX_
5916                                "panic: magic_killbackrefs (flags=%"UVxf")",
5917                                (UV)SvFLAGS(referrer));
5918                 }
5919
5920                 if (is_array)
5921                     *svp = NULL;
5922             }
5923             svp++;
5924         }
5925     }
5926     if (is_array) {
5927         AvFILLp(av) = -1;
5928         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5929     }
5930     return;
5931 }
5932
5933 /*
5934 =for apidoc sv_insert
5935
5936 Inserts a string at the specified offset/length within the SV.  Similar to
5937 the Perl substr() function.  Handles get magic.
5938
5939 =for apidoc sv_insert_flags
5940
5941 Same as C<sv_insert>, but the extra C<flags> are passed to the
5942 C<SvPV_force_flags> that applies to C<bigstr>.
5943
5944 =cut
5945 */
5946
5947 void
5948 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5949 {
5950     dVAR;
5951     char *big;
5952     char *mid;
5953     char *midend;
5954     char *bigend;
5955     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5956     STRLEN curlen;
5957
5958     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5959
5960     if (!bigstr)
5961         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5962     SvPV_force_flags(bigstr, curlen, flags);
5963     (void)SvPOK_only_UTF8(bigstr);
5964     if (offset + len > curlen) {
5965         SvGROW(bigstr, offset+len+1);
5966         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5967         SvCUR_set(bigstr, offset+len);
5968     }
5969
5970     SvTAINT(bigstr);
5971     i = littlelen - len;
5972     if (i > 0) {                        /* string might grow */
5973         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5974         mid = big + offset + len;
5975         midend = bigend = big + SvCUR(bigstr);
5976         bigend += i;
5977         *bigend = '\0';
5978         while (midend > mid)            /* shove everything down */
5979             *--bigend = *--midend;
5980         Move(little,big+offset,littlelen,char);
5981         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5982         SvSETMAGIC(bigstr);
5983         return;
5984     }
5985     else if (i == 0) {
5986         Move(little,SvPVX(bigstr)+offset,len,char);
5987         SvSETMAGIC(bigstr);
5988         return;
5989     }
5990
5991     big = SvPVX(bigstr);
5992     mid = big + offset;
5993     midend = mid + len;
5994     bigend = big + SvCUR(bigstr);
5995
5996     if (midend > bigend)
5997         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5998                    midend, bigend);
5999
6000     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6001         if (littlelen) {
6002             Move(little, mid, littlelen,char);
6003             mid += littlelen;
6004         }
6005         i = bigend - midend;
6006         if (i > 0) {
6007             Move(midend, mid, i,char);
6008             mid += i;
6009         }
6010         *mid = '\0';
6011         SvCUR_set(bigstr, mid - big);
6012     }
6013     else if ((i = mid - big)) { /* faster from front */
6014         midend -= littlelen;
6015         mid = midend;
6016         Move(big, midend - i, i, char);
6017         sv_chop(bigstr,midend-i);
6018         if (littlelen)
6019             Move(little, mid, littlelen,char);
6020     }
6021     else if (littlelen) {
6022         midend -= littlelen;
6023         sv_chop(bigstr,midend);
6024         Move(little,midend,littlelen,char);
6025     }
6026     else {
6027         sv_chop(bigstr,midend);
6028     }
6029     SvSETMAGIC(bigstr);
6030 }
6031
6032 /*
6033 =for apidoc sv_replace
6034
6035 Make the first argument a copy of the second, then delete the original.
6036 The target SV physically takes over ownership of the body of the source SV
6037 and inherits its flags; however, the target keeps any magic it owns,
6038 and any magic in the source is discarded.
6039 Note that this is a rather specialist SV copying operation; most of the
6040 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6041
6042 =cut
6043 */
6044
6045 void
6046 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6047 {
6048     dVAR;
6049     const U32 refcnt = SvREFCNT(sv);
6050
6051     PERL_ARGS_ASSERT_SV_REPLACE;
6052
6053     SV_CHECK_THINKFIRST_COW_DROP(sv);
6054     if (SvREFCNT(nsv) != 1) {
6055         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6056                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6057     }
6058     if (SvMAGICAL(sv)) {
6059         if (SvMAGICAL(nsv))
6060             mg_free(nsv);
6061         else
6062             sv_upgrade(nsv, SVt_PVMG);
6063         SvMAGIC_set(nsv, SvMAGIC(sv));
6064         SvFLAGS(nsv) |= SvMAGICAL(sv);
6065         SvMAGICAL_off(sv);
6066         SvMAGIC_set(sv, NULL);
6067     }
6068     SvREFCNT(sv) = 0;
6069     sv_clear(sv);
6070     assert(!SvREFCNT(sv));
6071 #ifdef DEBUG_LEAKING_SCALARS
6072     sv->sv_flags  = nsv->sv_flags;
6073     sv->sv_any    = nsv->sv_any;
6074     sv->sv_refcnt = nsv->sv_refcnt;
6075     sv->sv_u      = nsv->sv_u;
6076 #else
6077     StructCopy(nsv,sv,SV);
6078 #endif
6079     if(SvTYPE(sv) == SVt_IV) {
6080         SvANY(sv)
6081             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6082     }
6083         
6084
6085 #ifdef PERL_OLD_COPY_ON_WRITE
6086     if (SvIsCOW_normal(nsv)) {
6087         /* We need to follow the pointers around the loop to make the
6088            previous SV point to sv, rather than nsv.  */
6089         SV *next;
6090         SV *current = nsv;
6091         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6092             assert(next);
6093             current = next;
6094             assert(SvPVX_const(current) == SvPVX_const(nsv));
6095         }
6096         /* Make the SV before us point to the SV after us.  */
6097         if (DEBUG_C_TEST) {
6098             PerlIO_printf(Perl_debug_log, "previous is\n");
6099             sv_dump(current);
6100             PerlIO_printf(Perl_debug_log,
6101                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6102                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6103         }
6104         SV_COW_NEXT_SV_SET(current, sv);
6105     }
6106 #endif
6107     SvREFCNT(sv) = refcnt;
6108     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6109     SvREFCNT(nsv) = 0;
6110     del_SV(nsv);
6111 }
6112
6113 /* We're about to free a GV which has a CV that refers back to us.
6114  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6115  * field) */
6116
6117 STATIC void
6118 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6119 {
6120     SV *gvname;
6121     GV *anongv;
6122
6123     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6124
6125     /* be assertive! */
6126     assert(SvREFCNT(gv) == 0);
6127     assert(isGV(gv) && isGV_with_GP(gv));
6128     assert(GvGP(gv));
6129     assert(!CvANON(cv));
6130     assert(CvGV(cv) == gv);
6131     assert(!CvNAMED(cv));
6132
6133     /* will the CV shortly be freed by gp_free() ? */
6134     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6135         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6136         return;
6137     }
6138
6139     /* if not, anonymise: */
6140     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6141                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6142                     : newSVpvn_flags( "__ANON__", 8, 0 );
6143     sv_catpvs(gvname, "::__ANON__");
6144     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6145     SvREFCNT_dec_NN(gvname);
6146
6147     CvANON_on(cv);
6148     CvCVGV_RC_on(cv);
6149     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6150 }
6151
6152
6153 /*
6154 =for apidoc sv_clear
6155
6156 Clear an SV: call any destructors, free up any memory used by the body,
6157 and free the body itself.  The SV's head is I<not> freed, although
6158 its type is set to all 1's so that it won't inadvertently be assumed
6159 to be live during global destruction etc.
6160 This function should only be called when REFCNT is zero.  Most of the time
6161 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6162 instead.
6163
6164 =cut
6165 */
6166
6167 void
6168 Perl_sv_clear(pTHX_ SV *const orig_sv)
6169 {
6170     dVAR;
6171     HV *stash;
6172     U32 type;
6173     const struct body_details *sv_type_details;
6174     SV* iter_sv = NULL;
6175     SV* next_sv = NULL;
6176     SV *sv = orig_sv;
6177     STRLEN hash_index;
6178
6179     PERL_ARGS_ASSERT_SV_CLEAR;
6180
6181     /* within this loop, sv is the SV currently being freed, and
6182      * iter_sv is the most recent AV or whatever that's being iterated
6183      * over to provide more SVs */
6184
6185     while (sv) {
6186
6187         type = SvTYPE(sv);
6188
6189         assert(SvREFCNT(sv) == 0);
6190         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6191
6192         if (type <= SVt_IV) {
6193             /* See the comment in sv.h about the collusion between this
6194              * early return and the overloading of the NULL slots in the
6195              * size table.  */
6196             if (SvROK(sv))
6197                 goto free_rv;
6198             SvFLAGS(sv) &= SVf_BREAK;
6199             SvFLAGS(sv) |= SVTYPEMASK;
6200             goto free_head;
6201         }
6202
6203         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6204
6205         if (type >= SVt_PVMG) {
6206             if (SvOBJECT(sv)) {
6207                 if (!curse(sv, 1)) goto get_next_sv;
6208                 type = SvTYPE(sv); /* destructor may have changed it */
6209             }
6210             /* Free back-references before magic, in case the magic calls
6211              * Perl code that has weak references to sv. */
6212             if (type == SVt_PVHV) {
6213                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6214                 if (SvMAGIC(sv))
6215                     mg_free(sv);
6216             }
6217             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6218                 SvREFCNT_dec(SvOURSTASH(sv));
6219             }
6220             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6221                 assert(!SvMAGICAL(sv));
6222             } else if (SvMAGIC(sv)) {
6223                 /* Free back-references before other types of magic. */
6224                 sv_unmagic(sv, PERL_MAGIC_backref);
6225                 mg_free(sv);
6226             }
6227             SvMAGICAL_off(sv);
6228             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6229                 SvREFCNT_dec(SvSTASH(sv));
6230         }
6231         switch (type) {
6232             /* case SVt_INVLIST: */
6233         case SVt_PVIO:
6234             if (IoIFP(sv) &&
6235                 IoIFP(sv) != PerlIO_stdin() &&
6236                 IoIFP(sv) != PerlIO_stdout() &&
6237                 IoIFP(sv) != PerlIO_stderr() &&
6238                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6239             {
6240                 io_close(MUTABLE_IO(sv), FALSE);
6241             }
6242             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6243                 PerlDir_close(IoDIRP(sv));
6244             IoDIRP(sv) = (DIR*)NULL;
6245             Safefree(IoTOP_NAME(sv));
6246             Safefree(IoFMT_NAME(sv));
6247             Safefree(IoBOTTOM_NAME(sv));
6248             if ((const GV *)sv == PL_statgv)
6249                 PL_statgv = NULL;
6250             goto freescalar;
6251         case SVt_REGEXP:
6252             /* FIXME for plugins */
6253           freeregexp:
6254             pregfree2((REGEXP*) sv);
6255             goto freescalar;
6256         case SVt_PVCV:
6257         case SVt_PVFM:
6258             cv_undef(MUTABLE_CV(sv));
6259             /* If we're in a stash, we don't own a reference to it.
6260              * However it does have a back reference to us, which needs to
6261              * be cleared.  */
6262             if ((stash = CvSTASH(sv)))
6263                 sv_del_backref(MUTABLE_SV(stash), sv);
6264             goto freescalar;
6265         case SVt_PVHV:
6266             if (PL_last_swash_hv == (const HV *)sv) {
6267                 PL_last_swash_hv = NULL;
6268             }
6269             if (HvTOTALKEYS((HV*)sv) > 0) {
6270                 const char *name;
6271                 /* this statement should match the one at the beginning of
6272                  * hv_undef_flags() */
6273                 if (   PL_phase != PERL_PHASE_DESTRUCT
6274                     && (name = HvNAME((HV*)sv)))
6275                 {
6276                     if (PL_stashcache) {
6277                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6278                                      sv));
6279                         (void)hv_delete(PL_stashcache, name,
6280                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6281                     }
6282                     hv_name_set((HV*)sv, NULL, 0, 0);
6283                 }
6284
6285                 /* save old iter_sv in unused SvSTASH field */
6286                 assert(!SvOBJECT(sv));
6287                 SvSTASH(sv) = (HV*)iter_sv;
6288                 iter_sv = sv;
6289
6290                 /* save old hash_index in unused SvMAGIC field */
6291                 assert(!SvMAGICAL(sv));
6292                 assert(!SvMAGIC(sv));
6293                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6294                 hash_index = 0;
6295
6296                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6297                 goto get_next_sv; /* process this new sv */
6298             }
6299             /* free empty hash */
6300             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6301             assert(!HvARRAY((HV*)sv));
6302             break;
6303         case SVt_PVAV:
6304             {
6305                 AV* av = MUTABLE_AV(sv);
6306                 if (PL_comppad == av) {
6307                     PL_comppad = NULL;
6308                     PL_curpad = NULL;
6309                 }
6310                 if (AvREAL(av) && AvFILLp(av) > -1) {
6311                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6312                     /* save old iter_sv in top-most slot of AV,
6313                      * and pray that it doesn't get wiped in the meantime */
6314                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6315                     iter_sv = sv;
6316                     goto get_next_sv; /* process this new sv */
6317                 }
6318                 Safefree(AvALLOC(av));
6319             }
6320
6321             break;
6322         case SVt_PVLV:
6323             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6324                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6325                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6326                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6327             }
6328             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6329                 SvREFCNT_dec(LvTARG(sv));
6330             if (isREGEXP(sv)) goto freeregexp;
6331         case SVt_PVGV:
6332             if (isGV_with_GP(sv)) {
6333                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6334                    && HvENAME_get(stash))
6335                     mro_method_changed_in(stash);
6336                 gp_free(MUTABLE_GV(sv));
6337                 if (GvNAME_HEK(sv))
6338                     unshare_hek(GvNAME_HEK(sv));
6339                 /* If we're in a stash, we don't own a reference to it.
6340                  * However it does have a back reference to us, which
6341                  * needs to be cleared.  */
6342                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6343                         sv_del_backref(MUTABLE_SV(stash), sv);
6344             }
6345             /* FIXME. There are probably more unreferenced pointers to SVs
6346              * in the interpreter struct that we should check and tidy in
6347              * a similar fashion to this:  */
6348             /* See also S_sv_unglob, which does the same thing. */
6349             if ((const GV *)sv == PL_last_in_gv)
6350                 PL_last_in_gv = NULL;
6351             else if ((const GV *)sv == PL_statgv)
6352                 PL_statgv = NULL;
6353             else if ((const GV *)sv == PL_stderrgv)
6354                 PL_stderrgv = NULL;
6355         case SVt_PVMG:
6356         case SVt_PVNV:
6357         case SVt_PVIV:
6358         case SVt_INVLIST:
6359         case SVt_PV:
6360           freescalar:
6361             /* Don't bother with SvOOK_off(sv); as we're only going to
6362              * free it.  */
6363             if (SvOOK(sv)) {
6364                 STRLEN offset;
6365                 SvOOK_offset(sv, offset);
6366                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6367                 /* Don't even bother with turning off the OOK flag.  */
6368             }
6369             if (SvROK(sv)) {
6370             free_rv:
6371                 {
6372                     SV * const target = SvRV(sv);
6373                     if (SvWEAKREF(sv))
6374                         sv_del_backref(target, sv);
6375                     else
6376                         next_sv = target;
6377                 }
6378             }
6379 #ifdef PERL_ANY_COW
6380             else if (SvPVX_const(sv)
6381                      && !(SvTYPE(sv) == SVt_PVIO
6382                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6383             {
6384                 if (SvIsCOW(sv)) {
6385                     if (DEBUG_C_TEST) {
6386                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6387                         sv_dump(sv);
6388                     }
6389                     if (SvLEN(sv)) {
6390 # ifdef PERL_OLD_COPY_ON_WRITE
6391                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6392 # else
6393                         if (CowREFCNT(sv)) {
6394                             CowREFCNT(sv)--;
6395                             SvLEN_set(sv, 0);
6396                         }
6397 # endif
6398                     } else {
6399                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6400                     }
6401
6402                 }
6403 # ifdef PERL_OLD_COPY_ON_WRITE
6404                 else
6405 # endif
6406                 if (SvLEN(sv)) {
6407                     Safefree(SvPVX_mutable(sv));
6408                 }
6409             }
6410 #else
6411             else if (SvPVX_const(sv) && SvLEN(sv)
6412                      && !(SvTYPE(sv) == SVt_PVIO
6413                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6414                 Safefree(SvPVX_mutable(sv));
6415             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6416                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6417             }
6418 #endif
6419             break;
6420         case SVt_NV:
6421             break;
6422         }
6423
6424       free_body:
6425
6426         SvFLAGS(sv) &= SVf_BREAK;
6427         SvFLAGS(sv) |= SVTYPEMASK;
6428
6429         sv_type_details = bodies_by_type + type;
6430         if (sv_type_details->arena) {
6431             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6432                      &PL_body_roots[type]);
6433         }
6434         else if (sv_type_details->body_size) {
6435             safefree(SvANY(sv));
6436         }
6437
6438       free_head:
6439         /* caller is responsible for freeing the head of the original sv */
6440         if (sv != orig_sv && !SvREFCNT(sv))
6441             del_SV(sv);
6442
6443         /* grab and free next sv, if any */
6444       get_next_sv:
6445         while (1) {
6446             sv = NULL;
6447             if (next_sv) {
6448                 sv = next_sv;
6449                 next_sv = NULL;
6450             }
6451             else if (!iter_sv) {
6452                 break;
6453             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6454                 AV *const av = (AV*)iter_sv;
6455                 if (AvFILLp(av) > -1) {
6456                     sv = AvARRAY(av)[AvFILLp(av)--];
6457                 }
6458                 else { /* no more elements of current AV to free */
6459                     sv = iter_sv;
6460                     type = SvTYPE(sv);
6461                     /* restore previous value, squirrelled away */
6462                     iter_sv = AvARRAY(av)[AvMAX(av)];
6463                     Safefree(AvALLOC(av));
6464                     goto free_body;
6465                 }
6466             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6467                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6468                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6469                     /* no more elements of current HV to free */
6470                     sv = iter_sv;
6471                     type = SvTYPE(sv);
6472                     /* Restore previous values of iter_sv and hash_index,
6473                      * squirrelled away */
6474                     assert(!SvOBJECT(sv));
6475                     iter_sv = (SV*)SvSTASH(sv);
6476                     assert(!SvMAGICAL(sv));
6477                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6478 #ifdef DEBUGGING
6479                     /* perl -DA does not like rubbish in SvMAGIC. */
6480                     SvMAGIC_set(sv, 0);
6481 #endif
6482
6483                     /* free any remaining detritus from the hash struct */
6484                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6485                     assert(!HvARRAY((HV*)sv));
6486                     goto free_body;
6487                 }
6488             }
6489
6490             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6491
6492             if (!sv)
6493                 continue;
6494             if (!SvREFCNT(sv)) {
6495                 sv_free(sv);
6496                 continue;
6497             }
6498             if (--(SvREFCNT(sv)))
6499                 continue;
6500 #ifdef DEBUGGING
6501             if (SvTEMP(sv)) {
6502                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6503                          "Attempt to free temp prematurely: SV 0x%"UVxf
6504                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6505                 continue;
6506             }
6507 #endif
6508             if (SvIMMORTAL(sv)) {
6509                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6510                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6511                 continue;
6512             }
6513             break;
6514         } /* while 1 */
6515
6516     } /* while sv */
6517 }
6518
6519 /* This routine curses the sv itself, not the object referenced by sv. So
6520    sv does not have to be ROK. */
6521
6522 static bool
6523 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6524     dVAR;
6525
6526     PERL_ARGS_ASSERT_CURSE;
6527     assert(SvOBJECT(sv));
6528
6529     if (PL_defstash &&  /* Still have a symbol table? */
6530         SvDESTROYABLE(sv))
6531     {
6532         dSP;
6533         HV* stash;
6534         do {
6535           stash = SvSTASH(sv);
6536           assert(SvTYPE(stash) == SVt_PVHV);
6537           if (HvNAME(stash)) {
6538             CV* destructor = NULL;
6539             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6540             if (!destructor) {
6541                 GV * const gv =
6542                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6543                 if (gv) destructor = GvCV(gv);
6544                 if (!SvOBJECT(stash))
6545                     SvSTASH(stash) =
6546                         destructor ? (HV *)destructor : ((HV *)0)+1;
6547             }
6548             assert(!destructor || destructor == ((CV *)0)+1
6549                 || SvTYPE(destructor) == SVt_PVCV);
6550             if (destructor && destructor != ((CV *)0)+1
6551                 /* A constant subroutine can have no side effects, so
6552                    don't bother calling it.  */
6553                 && !CvCONST(destructor)
6554                 /* Don't bother calling an empty destructor or one that
6555                    returns immediately. */
6556                 && (CvISXSUB(destructor)
6557                 || (CvSTART(destructor)
6558                     && (CvSTART(destructor)->op_next->op_type
6559                                         != OP_LEAVESUB)
6560                     && (CvSTART(destructor)->op_next->op_type
6561                                         != OP_PUSHMARK
6562                         || CvSTART(destructor)->op_next->op_next->op_type
6563                                         != OP_RETURN
6564                        )
6565                    ))
6566                )
6567             {
6568                 SV* const tmpref = newRV(sv);
6569                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6570                 ENTER;
6571                 PUSHSTACKi(PERLSI_DESTROY);
6572                 EXTEND(SP, 2);
6573                 PUSHMARK(SP);
6574                 PUSHs(tmpref);
6575                 PUTBACK;
6576                 call_sv(MUTABLE_SV(destructor),
6577                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6578                 POPSTACK;
6579                 SPAGAIN;
6580                 LEAVE;
6581                 if(SvREFCNT(tmpref) < 2) {
6582                     /* tmpref is not kept alive! */
6583                     SvREFCNT(sv)--;
6584                     SvRV_set(tmpref, NULL);
6585                     SvROK_off(tmpref);
6586                 }
6587                 SvREFCNT_dec_NN(tmpref);
6588             }
6589           }
6590         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6591
6592
6593         if (check_refcnt && SvREFCNT(sv)) {
6594             if (PL_in_clean_objs)
6595                 Perl_croak(aTHX_
6596                   "DESTROY created new reference to dead object '%"HEKf"'",
6597                    HEKfARG(HvNAME_HEK(stash)));
6598             /* DESTROY gave object new lease on life */
6599             return FALSE;
6600         }
6601     }
6602
6603     if (SvOBJECT(sv)) {
6604         HV * const stash = SvSTASH(sv);
6605         /* Curse before freeing the stash, as freeing the stash could cause
6606            a recursive call into S_curse. */
6607         SvOBJECT_off(sv);       /* Curse the object. */
6608         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6609         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6610     }
6611     return TRUE;
6612 }
6613
6614 /*
6615 =for apidoc sv_newref
6616
6617 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6618 instead.
6619
6620 =cut
6621 */
6622
6623 SV *
6624 Perl_sv_newref(pTHX_ SV *const sv)
6625 {
6626     PERL_UNUSED_CONTEXT;
6627     if (sv)
6628         (SvREFCNT(sv))++;
6629     return sv;
6630 }
6631
6632 /*
6633 =for apidoc sv_free
6634
6635 Decrement an SV's reference count, and if it drops to zero, call
6636 C<sv_clear> to invoke destructors and free up any memory used by
6637 the body; finally, deallocate the SV's head itself.
6638 Normally called via a wrapper macro C<SvREFCNT_dec>.
6639
6640 =cut
6641 */
6642
6643 void
6644 Perl_sv_free(pTHX_ SV *const sv)
6645 {
6646     SvREFCNT_dec(sv);
6647 }
6648
6649
6650 /* Private helper function for SvREFCNT_dec().
6651  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6652
6653 void
6654 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6655 {
6656     dVAR;
6657
6658     PERL_ARGS_ASSERT_SV_FREE2;
6659
6660     if (LIKELY( rc == 1 )) {
6661         /* normal case */
6662         SvREFCNT(sv) = 0;
6663
6664 #ifdef DEBUGGING
6665         if (SvTEMP(sv)) {
6666             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6667                              "Attempt to free temp prematurely: SV 0x%"UVxf
6668                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6669             return;
6670         }
6671 #endif
6672         if (SvIMMORTAL(sv)) {
6673             /* make sure SvREFCNT(sv)==0 happens very seldom */
6674             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6675             return;
6676         }
6677         sv_clear(sv);
6678         if (! SvREFCNT(sv)) /* may have have been resurrected */
6679             del_SV(sv);
6680         return;
6681     }
6682
6683     /* handle exceptional cases */
6684
6685     assert(rc == 0);
6686
6687     if (SvFLAGS(sv) & SVf_BREAK)
6688         /* this SV's refcnt has been artificially decremented to
6689          * trigger cleanup */
6690         return;
6691     if (PL_in_clean_all) /* All is fair */
6692         return;
6693     if (SvIMMORTAL(sv)) {
6694         /* make sure SvREFCNT(sv)==0 happens very seldom */
6695         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6696         return;
6697     }
6698     if (ckWARN_d(WARN_INTERNAL)) {
6699 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6700         Perl_dump_sv_child(aTHX_ sv);
6701 #else
6702     #ifdef DEBUG_LEAKING_SCALARS
6703         sv_dump(sv);
6704     #endif
6705 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6706         if (PL_warnhook == PERL_WARNHOOK_FATAL
6707             || ckDEAD(packWARN(WARN_INTERNAL))) {
6708             /* Don't let Perl_warner cause us to escape our fate:  */
6709             abort();
6710         }
6711 #endif
6712         /* This may not return:  */
6713         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6714                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6715                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6716 #endif
6717     }
6718 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6719     abort();
6720 #endif
6721
6722 }
6723
6724
6725 /*
6726 =for apidoc sv_len
6727
6728 Returns the length of the string in the SV.  Handles magic and type
6729 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6730 gives raw access to the xpv_cur slot.
6731
6732 =cut
6733 */
6734
6735 STRLEN
6736 Perl_sv_len(pTHX_ SV *const sv)
6737 {
6738     STRLEN len;
6739
6740     if (!sv)
6741         return 0;
6742
6743     (void)SvPV_const(sv, len);
6744     return len;
6745 }
6746
6747 /*
6748 =for apidoc sv_len_utf8
6749
6750 Returns the number of characters in the string in an SV, counting wide
6751 UTF-8 bytes as a single character.  Handles magic and type coercion.
6752
6753 =cut
6754 */
6755
6756 /*
6757  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6758  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6759  * (Note that the mg_len is not the length of the mg_ptr field.
6760  * This allows the cache to store the character length of the string without
6761  * needing to malloc() extra storage to attach to the mg_ptr.)
6762  *
6763  */
6764
6765 STRLEN
6766 Perl_sv_len_utf8(pTHX_ SV *const sv)
6767 {
6768     if (!sv)
6769         return 0;
6770
6771     SvGETMAGIC(sv);
6772     return sv_len_utf8_nomg(sv);
6773 }
6774
6775 STRLEN
6776 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6777 {
6778     dVAR;
6779     STRLEN len;
6780     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6781
6782     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6783
6784     if (PL_utf8cache && SvUTF8(sv)) {
6785             STRLEN ulen;
6786             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6787
6788             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6789                 if (mg->mg_len != -1)
6790                     ulen = mg->mg_len;
6791                 else {
6792                     /* We can use the offset cache for a headstart.
6793                        The longer value is stored in the first pair.  */
6794                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6795
6796                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6797                                                        s + len);
6798                 }
6799                 
6800                 if (PL_utf8cache < 0) {
6801                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6802                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6803                 }
6804             }
6805             else {
6806                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6807                 utf8_mg_len_cache_update(sv, &mg, ulen);
6808             }
6809             return ulen;
6810     }
6811     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6812 }
6813
6814 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6815    offset.  */
6816 static STRLEN
6817 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6818                       STRLEN *const uoffset_p, bool *const at_end)
6819 {
6820     const U8 *s = start;
6821     STRLEN uoffset = *uoffset_p;
6822
6823     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6824
6825     while (s < send && uoffset) {
6826         --uoffset;
6827         s += UTF8SKIP(s);
6828     }
6829     if (s == send) {
6830         *at_end = TRUE;
6831     }
6832     else if (s > send) {
6833         *at_end = TRUE;
6834         /* This is the existing behaviour. Possibly it should be a croak, as
6835            it's actually a bounds error  */
6836         s = send;
6837     }
6838     *uoffset_p -= uoffset;
6839     return s - start;
6840 }
6841
6842 /* Given the length of the string in both bytes and UTF-8 characters, decide
6843    whether to walk forwards or backwards to find the byte corresponding to
6844    the passed in UTF-8 offset.  */
6845 static STRLEN
6846 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6847                     STRLEN uoffset, const STRLEN uend)
6848 {
6849     STRLEN backw = uend - uoffset;
6850
6851     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6852
6853     if (uoffset < 2 * backw) {
6854         /* The assumption is that going forwards is twice the speed of going
6855            forward (that's where the 2 * backw comes from).
6856            (The real figure of course depends on the UTF-8 data.)  */
6857         const U8 *s = start;
6858
6859         while (s < send && uoffset--)
6860             s += UTF8SKIP(s);
6861         assert (s <= send);
6862         if (s > send)
6863             s = send;
6864         return s - start;
6865     }
6866
6867     while (backw--) {
6868         send--;
6869         while (UTF8_IS_CONTINUATION(*send))
6870             send--;
6871     }
6872     return send - start;
6873 }
6874
6875 /* For the string representation of the given scalar, find the byte
6876    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6877    give another position in the string, *before* the sought offset, which
6878    (which is always true, as 0, 0 is a valid pair of positions), which should
6879    help reduce the amount of linear searching.
6880    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6881    will be used to reduce the amount of linear searching. The cache will be
6882    created if necessary, and the found value offered to it for update.  */
6883 static STRLEN
6884 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6885                     const U8 *const send, STRLEN uoffset,
6886                     STRLEN uoffset0, STRLEN boffset0)
6887 {
6888     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6889     bool found = FALSE;
6890     bool at_end = FALSE;
6891
6892     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6893
6894     assert (uoffset >= uoffset0);
6895
6896     if (!uoffset)
6897         return 0;
6898
6899     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6900         && PL_utf8cache
6901         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6902                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6903         if ((*mgp)->mg_ptr) {
6904             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6905             if (cache[0] == uoffset) {
6906                 /* An exact match. */
6907                 return cache[1];
6908             }
6909             if (cache[2] == uoffset) {
6910                 /* An exact match. */
6911                 return cache[3];
6912             }
6913
6914             if (cache[0] < uoffset) {
6915                 /* The cache already knows part of the way.   */
6916                 if (cache[0] > uoffset0) {
6917                     /* The cache knows more than the passed in pair  */
6918                     uoffset0 = cache[0];
6919                     boffset0 = cache[1];
6920                 }
6921                 if ((*mgp)->mg_len != -1) {
6922                     /* And we know the end too.  */
6923                     boffset = boffset0
6924                         + sv_pos_u2b_midway(start + boffset0, send,
6925                                               uoffset - uoffset0,
6926                                               (*mgp)->mg_len - uoffset0);
6927                 } else {
6928                     uoffset -= uoffset0;
6929                     boffset = boffset0
6930                         + sv_pos_u2b_forwards(start + boffset0,
6931                                               send, &uoffset, &at_end);
6932                     uoffset += uoffset0;
6933                 }
6934             }
6935             else if (cache[2] < uoffset) {
6936                 /* We're between the two cache entries.  */
6937                 if (cache[2] > uoffset0) {
6938                     /* and the cache knows more than the passed in pair  */
6939                     uoffset0 = cache[2];
6940                     boffset0 = cache[3];
6941                 }
6942
6943                 boffset = boffset0
6944                     + sv_pos_u2b_midway(start + boffset0,
6945                                           start + cache[1],
6946                                           uoffset - uoffset0,
6947                                           cache[0] - uoffset0);
6948             } else {
6949                 boffset = boffset0
6950                     + sv_pos_u2b_midway(start + boffset0,
6951                                           start + cache[3],
6952                                           uoffset - uoffset0,
6953                                           cache[2] - uoffset0);
6954             }
6955             found = TRUE;
6956         }
6957         else if ((*mgp)->mg_len != -1) {
6958             /* If we can take advantage of a passed in offset, do so.  */
6959             /* In fact, offset0 is either 0, or less than offset, so don't
6960                need to worry about the other possibility.  */
6961             boffset = boffset0
6962                 + sv_pos_u2b_midway(start + boffset0, send,
6963                                       uoffset - uoffset0,
6964                                       (*mgp)->mg_len - uoffset0);
6965             found = TRUE;
6966         }
6967     }
6968
6969     if (!found || PL_utf8cache < 0) {
6970         STRLEN real_boffset;
6971         uoffset -= uoffset0;
6972         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6973                                                       send, &uoffset, &at_end);
6974         uoffset += uoffset0;
6975
6976         if (found && PL_utf8cache < 0)
6977             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6978                                        real_boffset, sv);
6979         boffset = real_boffset;
6980     }
6981
6982     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6983         if (at_end)
6984             utf8_mg_len_cache_update(sv, mgp, uoffset);
6985         else
6986             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6987     }
6988     return boffset;
6989 }
6990
6991
6992 /*
6993 =for apidoc sv_pos_u2b_flags
6994
6995 Converts the offset from a count of UTF-8 chars from
6996 the start of the string, to a count of the equivalent number of bytes; if
6997 lenp is non-zero, it does the same to lenp, but this time starting from
6998 the offset, rather than from the start
6999 of the string.  Handles type coercion.
7000 I<flags> is passed to C<SvPV_flags>, and usually should be
7001 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7002
7003 =cut
7004 */
7005
7006 /*
7007  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7008  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7009  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7010  *
7011  */
7012
7013 STRLEN
7014 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7015                       U32 flags)
7016 {
7017     const U8 *start;
7018     STRLEN len;
7019     STRLEN boffset;
7020
7021     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7022
7023     start = (U8*)SvPV_flags(sv, len, flags);
7024     if (len) {
7025         const U8 * const send = start + len;
7026         MAGIC *mg = NULL;
7027         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7028
7029         if (lenp
7030             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7031                         is 0, and *lenp is already set to that.  */) {
7032             /* Convert the relative offset to absolute.  */
7033             const STRLEN uoffset2 = uoffset + *lenp;
7034             const STRLEN boffset2
7035                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7036                                       uoffset, boffset) - boffset;
7037
7038             *lenp = boffset2;
7039         }
7040     } else {
7041         if (lenp)
7042             *lenp = 0;
7043         boffset = 0;
7044     }
7045
7046     return boffset;
7047 }
7048
7049 /*
7050 =for apidoc sv_pos_u2b
7051
7052 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7053 the start of the string, to a count of the equivalent number of bytes; if
7054 lenp is non-zero, it does the same to lenp, but this time starting from
7055 the offset, rather than from the start of the string.  Handles magic and
7056 type coercion.
7057
7058 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7059 than 2Gb.
7060
7061 =cut
7062 */
7063
7064 /*
7065  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7066  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7067  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7068  *
7069  */
7070
7071 /* This function is subject to size and sign problems */
7072
7073 void
7074 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7075 {
7076     PERL_ARGS_ASSERT_SV_POS_U2B;
7077
7078     if (lenp) {
7079         STRLEN ulen = (STRLEN)*lenp;
7080         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7081                                          SV_GMAGIC|SV_CONST_RETURN);
7082         *lenp = (I32)ulen;
7083     } else {
7084         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7085                                          SV_GMAGIC|SV_CONST_RETURN);
7086     }
7087 }
7088
7089 static void
7090 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7091                            const STRLEN ulen)
7092 {
7093     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7094     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(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, &PL_vtbl_utf8, 0, 0);
7100     }
7101     assert(*mgp);
7102
7103     (*mgp)->mg_len = ulen;
7104 }
7105
7106 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7107    byte length pairing. The (byte) length of the total SV is passed in too,
7108    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7109    may not have updated SvCUR, so we can't rely on reading it directly.
7110
7111    The proffered utf8/byte length pairing isn't used if the cache already has
7112    two pairs, and swapping either for the proffered pair would increase the
7113    RMS of the intervals between known byte offsets.
7114
7115    The cache itself consists of 4 STRLEN values
7116    0: larger UTF-8 offset
7117    1: corresponding byte offset
7118    2: smaller UTF-8 offset
7119    3: corresponding byte offset
7120
7121    Unused cache pairs have the value 0, 0.
7122    Keeping the cache "backwards" means that the invariant of
7123    cache[0] >= cache[2] is maintained even with empty slots, which means that
7124    the code that uses it doesn't need to worry if only 1 entry has actually
7125    been set to non-zero.  It also makes the "position beyond the end of the
7126    cache" logic much simpler, as the first slot is always the one to start
7127    from.   
7128 */
7129 static void
7130 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7131                            const STRLEN utf8, const STRLEN blen)
7132 {
7133     STRLEN *cache;
7134
7135     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7136
7137     if (SvREADONLY(sv))
7138         return;
7139
7140     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7141                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7142         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7143                            0);
7144         (*mgp)->mg_len = -1;
7145     }
7146     assert(*mgp);
7147
7148     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7149         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7150         (*mgp)->mg_ptr = (char *) cache;
7151     }
7152     assert(cache);
7153
7154     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7155         /* SvPOKp() because it's possible that sv has string overloading, and
7156            therefore is a reference, hence SvPVX() is actually a pointer.
7157            This cures the (very real) symptoms of RT 69422, but I'm not actually
7158            sure whether we should even be caching the results of UTF-8
7159            operations on overloading, given that nothing stops overloading
7160            returning a different value every time it's called.  */
7161         const U8 *start = (const U8 *) SvPVX_const(sv);
7162         const STRLEN realutf8 = utf8_length(start, start + byte);
7163
7164         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7165                                    sv);
7166     }
7167
7168     /* Cache is held with the later position first, to simplify the code
7169        that deals with unbounded ends.  */
7170        
7171     ASSERT_UTF8_CACHE(cache);
7172     if (cache[1] == 0) {
7173         /* Cache is totally empty  */
7174         cache[0] = utf8;
7175         cache[1] = byte;
7176     } else if (cache[3] == 0) {
7177         if (byte > cache[1]) {
7178             /* New one is larger, so goes first.  */
7179             cache[2] = cache[0];
7180             cache[3] = cache[1];
7181             cache[0] = utf8;
7182             cache[1] = byte;
7183         } else {
7184             cache[2] = utf8;
7185             cache[3] = byte;
7186         }
7187     } else {
7188 #define THREEWAY_SQUARE(a,b,c,d) \
7189             ((float)((d) - (c))) * ((float)((d) - (c))) \
7190             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7191                + ((float)((b) - (a))) * ((float)((b) - (a)))
7192
7193         /* Cache has 2 slots in use, and we know three potential pairs.
7194            Keep the two that give the lowest RMS distance. Do the
7195            calculation in bytes simply because we always know the byte
7196            length.  squareroot has the same ordering as the positive value,
7197            so don't bother with the actual square root.  */
7198         if (byte > cache[1]) {
7199             /* New position is after the existing pair of pairs.  */
7200             const float keep_earlier
7201                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7202             const float keep_later
7203                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7204
7205             if (keep_later < keep_earlier) {
7206                 cache[2] = cache[0];
7207                 cache[3] = cache[1];
7208                 cache[0] = utf8;
7209                 cache[1] = byte;
7210             }
7211             else {
7212                 cache[0] = utf8;
7213                 cache[1] = byte;
7214             }
7215         }
7216         else if (byte > cache[3]) {
7217             /* New position is between the existing pair of pairs.  */
7218             const float keep_earlier
7219                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7220             const float keep_later
7221                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7222
7223             if (keep_later < keep_earlier) {
7224                 cache[2] = utf8;
7225                 cache[3] = byte;
7226             }
7227             else {
7228                 cache[0] = utf8;
7229                 cache[1] = byte;
7230             }
7231         }
7232         else {
7233             /* New position is before the existing pair of pairs.  */
7234             const float keep_earlier
7235                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7236             const float keep_later
7237                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7238
7239             if (keep_later < keep_earlier) {
7240                 cache[2] = utf8;
7241                 cache[3] = byte;
7242             }
7243             else {
7244                 cache[0] = cache[2];
7245                 cache[1] = cache[3];
7246                 cache[2] = utf8;
7247                 cache[3] = byte;
7248             }
7249         }
7250     }
7251     ASSERT_UTF8_CACHE(cache);
7252 }
7253
7254 /* We already know all of the way, now we may be able to walk back.  The same
7255    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7256    backward is half the speed of walking forward. */
7257 static STRLEN
7258 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7259                     const U8 *end, STRLEN endu)
7260 {
7261     const STRLEN forw = target - s;
7262     STRLEN backw = end - target;
7263
7264     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7265
7266     if (forw < 2 * backw) {
7267         return utf8_length(s, target);
7268     }
7269
7270     while (end > target) {
7271         end--;
7272         while (UTF8_IS_CONTINUATION(*end)) {
7273             end--;
7274         }
7275         endu--;
7276     }
7277     return endu;
7278 }
7279
7280 /*
7281 =for apidoc sv_pos_b2u_flags
7282
7283 Converts the offset from a count of bytes from the start of the string, to
7284 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7285 I<flags> is passed to C<SvPV_flags>, and usually should be
7286 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7287
7288 =cut
7289 */
7290
7291 /*
7292  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7293  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7294  * and byte offsets.
7295  *
7296  */
7297 STRLEN
7298 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7299 {
7300     const U8* s;
7301     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7302     STRLEN blen;
7303     MAGIC* mg = NULL;
7304     const U8* send;
7305     bool found = FALSE;
7306
7307     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7308
7309     s = (const U8*)SvPV_flags(sv, blen, flags);
7310
7311     if (blen < offset)
7312         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7313                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7314
7315     send = s + offset;
7316
7317     if (!SvREADONLY(sv)
7318         && PL_utf8cache
7319         && SvTYPE(sv) >= SVt_PVMG
7320         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7321     {
7322         if (mg->mg_ptr) {
7323             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7324             if (cache[1] == offset) {
7325                 /* An exact match. */
7326                 return cache[0];
7327             }
7328             if (cache[3] == offset) {
7329                 /* An exact match. */
7330                 return cache[2];
7331             }
7332
7333             if (cache[1] < offset) {
7334                 /* We already know part of the way. */
7335                 if (mg->mg_len != -1) {
7336                     /* Actually, we know the end too.  */
7337                     len = cache[0]
7338                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7339                                               s + blen, mg->mg_len - cache[0]);
7340                 } else {
7341                     len = cache[0] + utf8_length(s + cache[1], send);
7342                 }
7343             }
7344             else if (cache[3] < offset) {
7345                 /* We're between the two cached pairs, so we do the calculation
7346                    offset by the byte/utf-8 positions for the earlier pair,
7347                    then add the utf-8 characters from the string start to
7348                    there.  */
7349                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7350                                           s + cache[1], cache[0] - cache[2])
7351                     + cache[2];
7352
7353             }
7354             else { /* cache[3] > offset */
7355                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7356                                           cache[2]);
7357
7358             }
7359             ASSERT_UTF8_CACHE(cache);
7360             found = TRUE;
7361         } else if (mg->mg_len != -1) {
7362             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7363             found = TRUE;
7364         }
7365     }
7366     if (!found || PL_utf8cache < 0) {
7367         const STRLEN real_len = utf8_length(s, send);
7368
7369         if (found && PL_utf8cache < 0)
7370             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7371         len = real_len;
7372     }
7373
7374     if (PL_utf8cache) {
7375         if (blen == offset)
7376             utf8_mg_len_cache_update(sv, &mg, len);
7377         else
7378             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7379     }
7380
7381     return len;
7382 }
7383
7384 /*
7385 =for apidoc sv_pos_b2u
7386
7387 Converts the value pointed to by offsetp from a count of bytes from the
7388 start of the string, to a count of the equivalent number of UTF-8 chars.
7389 Handles magic and type coercion.
7390
7391 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7392 longer than 2Gb.
7393
7394 =cut
7395 */
7396
7397 /*
7398  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7399  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7400  * byte offsets.
7401  *
7402  */
7403 void
7404 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7405 {
7406     PERL_ARGS_ASSERT_SV_POS_B2U;
7407
7408     if (!sv)
7409         return;
7410
7411     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7412                                      SV_GMAGIC|SV_CONST_RETURN);
7413 }
7414
7415 static void
7416 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7417                              STRLEN real, SV *const sv)
7418 {
7419     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7420
7421     /* As this is debugging only code, save space by keeping this test here,
7422        rather than inlining it in all the callers.  */
7423     if (from_cache == real)
7424         return;
7425
7426     /* Need to turn the assertions off otherwise we may recurse infinitely
7427        while printing error messages.  */
7428     SAVEI8(PL_utf8cache);
7429     PL_utf8cache = 0;
7430     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7431                func, (UV) from_cache, (UV) real, SVfARG(sv));
7432 }
7433
7434 /*
7435 =for apidoc sv_eq
7436
7437 Returns a boolean indicating whether the strings in the two SVs are
7438 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7439 coerce its args to strings if necessary.
7440
7441 =for apidoc sv_eq_flags
7442
7443 Returns a boolean indicating whether the strings in the two SVs are
7444 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7445 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7446
7447 =cut
7448 */
7449
7450 I32
7451 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7452 {
7453     dVAR;
7454     const char *pv1;
7455     STRLEN cur1;
7456     const char *pv2;
7457     STRLEN cur2;
7458     I32  eq     = 0;
7459     SV* svrecode = NULL;
7460
7461     if (!sv1) {
7462         pv1 = "";
7463         cur1 = 0;
7464     }
7465     else {
7466         /* if pv1 and pv2 are the same, second SvPV_const call may
7467          * invalidate pv1 (if we are handling magic), so we may need to
7468          * make a copy */
7469         if (sv1 == sv2 && flags & SV_GMAGIC
7470          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7471             pv1 = SvPV_const(sv1, cur1);
7472             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7473         }
7474         pv1 = SvPV_flags_const(sv1, cur1, flags);
7475     }
7476
7477     if (!sv2){
7478         pv2 = "";
7479         cur2 = 0;
7480     }
7481     else
7482         pv2 = SvPV_flags_const(sv2, cur2, flags);
7483
7484     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7485         /* Differing utf8ness.
7486          * Do not UTF8size the comparands as a side-effect. */
7487          if (PL_encoding) {
7488               if (SvUTF8(sv1)) {
7489                    svrecode = newSVpvn(pv2, cur2);
7490                    sv_recode_to_utf8(svrecode, PL_encoding);
7491                    pv2 = SvPV_const(svrecode, cur2);
7492               }
7493               else {
7494                    svrecode = newSVpvn(pv1, cur1);
7495                    sv_recode_to_utf8(svrecode, PL_encoding);
7496                    pv1 = SvPV_const(svrecode, cur1);
7497               }
7498               /* Now both are in UTF-8. */
7499               if (cur1 != cur2) {
7500                    SvREFCNT_dec_NN(svrecode);
7501                    return FALSE;
7502               }
7503          }
7504          else {
7505               if (SvUTF8(sv1)) {
7506                   /* sv1 is the UTF-8 one  */
7507                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7508                                         (const U8*)pv1, cur1) == 0;
7509               }
7510               else {
7511                   /* sv2 is the UTF-8 one  */
7512                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7513                                         (const U8*)pv2, cur2) == 0;
7514               }
7515          }
7516     }
7517
7518     if (cur1 == cur2)
7519         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7520         
7521     SvREFCNT_dec(svrecode);
7522
7523     return eq;
7524 }
7525
7526 /*
7527 =for apidoc sv_cmp
7528
7529 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7530 string in C<sv1> is less than, equal to, or greater than the string in
7531 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7532 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7533
7534 =for apidoc sv_cmp_flags
7535
7536 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7537 string in C<sv1> is less than, equal to, or greater than the string in
7538 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7539 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7540 also C<sv_cmp_locale_flags>.
7541
7542 =cut
7543 */
7544
7545 I32
7546 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7547 {
7548     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7549 }
7550
7551 I32
7552 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7553                   const U32 flags)
7554 {
7555     dVAR;
7556     STRLEN cur1, cur2;
7557     const char *pv1, *pv2;
7558     I32  cmp;
7559     SV *svrecode = NULL;
7560
7561     if (!sv1) {
7562         pv1 = "";
7563         cur1 = 0;
7564     }
7565     else
7566         pv1 = SvPV_flags_const(sv1, cur1, flags);
7567
7568     if (!sv2) {
7569         pv2 = "";
7570         cur2 = 0;
7571     }
7572     else
7573         pv2 = SvPV_flags_const(sv2, cur2, flags);
7574
7575     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7576         /* Differing utf8ness.
7577          * Do not UTF8size the comparands as a side-effect. */
7578         if (SvUTF8(sv1)) {
7579             if (PL_encoding) {
7580                  svrecode = newSVpvn(pv2, cur2);
7581                  sv_recode_to_utf8(svrecode, PL_encoding);
7582                  pv2 = SvPV_const(svrecode, cur2);
7583             }
7584             else {
7585                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7586                                                    (const U8*)pv1, cur1);
7587                 return retval ? retval < 0 ? -1 : +1 : 0;
7588             }
7589         }
7590         else {
7591             if (PL_encoding) {
7592                  svrecode = newSVpvn(pv1, cur1);
7593                  sv_recode_to_utf8(svrecode, PL_encoding);
7594                  pv1 = SvPV_const(svrecode, cur1);
7595             }
7596             else {
7597                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7598                                                   (const U8*)pv2, cur2);
7599                 return retval ? retval < 0 ? -1 : +1 : 0;
7600             }
7601         }
7602     }
7603
7604     if (!cur1) {
7605         cmp = cur2 ? -1 : 0;
7606     } else if (!cur2) {
7607         cmp = 1;
7608     } else {
7609         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7610
7611         if (retval) {
7612             cmp = retval < 0 ? -1 : 1;
7613         } else if (cur1 == cur2) {
7614             cmp = 0;
7615         } else {
7616             cmp = cur1 < cur2 ? -1 : 1;
7617         }
7618     }
7619
7620     SvREFCNT_dec(svrecode);
7621
7622     return cmp;
7623 }
7624
7625 /*
7626 =for apidoc sv_cmp_locale
7627
7628 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7629 'use bytes' aware, handles get magic, and will coerce its args to strings
7630 if necessary.  See also C<sv_cmp>.
7631
7632 =for apidoc sv_cmp_locale_flags
7633
7634 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7635 'use bytes' aware and will coerce its args to strings if necessary.  If the
7636 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7637
7638 =cut
7639 */
7640
7641 I32
7642 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7643 {
7644     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7645 }
7646
7647 I32
7648 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7649                          const U32 flags)
7650 {
7651     dVAR;
7652 #ifdef USE_LOCALE_COLLATE
7653
7654     char *pv1, *pv2;
7655     STRLEN len1, len2;
7656     I32 retval;
7657
7658     if (PL_collation_standard)
7659         goto raw_compare;
7660
7661     len1 = 0;
7662     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7663     len2 = 0;
7664     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7665
7666     if (!pv1 || !len1) {
7667         if (pv2 && len2)
7668             return -1;
7669         else
7670             goto raw_compare;
7671     }
7672     else {
7673         if (!pv2 || !len2)
7674             return 1;
7675     }
7676
7677     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7678
7679     if (retval)
7680         return retval < 0 ? -1 : 1;
7681
7682     /*
7683      * When the result of collation is equality, that doesn't mean
7684      * that there are no differences -- some locales exclude some
7685      * characters from consideration.  So to avoid false equalities,
7686      * we use the raw string as a tiebreaker.
7687      */
7688
7689   raw_compare:
7690     /*FALLTHROUGH*/
7691
7692 #endif /* USE_LOCALE_COLLATE */
7693
7694     return sv_cmp(sv1, sv2);
7695 }
7696
7697
7698 #ifdef USE_LOCALE_COLLATE
7699
7700 /*
7701 =for apidoc sv_collxfrm
7702
7703 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7704 C<sv_collxfrm_flags>.
7705
7706 =for apidoc sv_collxfrm_flags
7707
7708 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7709 flags contain SV_GMAGIC, it handles get-magic.
7710
7711 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7712 scalar data of the variable, but transformed to such a format that a normal
7713 memory comparison can be used to compare the data according to the locale
7714 settings.
7715
7716 =cut
7717 */
7718
7719 char *
7720 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7721 {
7722     dVAR;
7723     MAGIC *mg;
7724
7725     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7726
7727     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7728     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7729         const char *s;
7730         char *xf;
7731         STRLEN len, xlen;
7732
7733         if (mg)
7734             Safefree(mg->mg_ptr);
7735         s = SvPV_flags_const(sv, len, flags);
7736         if ((xf = mem_collxfrm(s, len, &xlen))) {
7737             if (! mg) {
7738 #ifdef PERL_OLD_COPY_ON_WRITE
7739                 if (SvIsCOW(sv))
7740                     sv_force_normal_flags(sv, 0);
7741 #endif
7742                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7743                                  0, 0);
7744                 assert(mg);
7745             }
7746             mg->mg_ptr = xf;
7747             mg->mg_len = xlen;
7748         }
7749         else {
7750             if (mg) {
7751                 mg->mg_ptr = NULL;
7752                 mg->mg_len = -1;
7753             }
7754         }
7755     }
7756     if (mg && mg->mg_ptr) {
7757         *nxp = mg->mg_len;
7758         return mg->mg_ptr + sizeof(PL_collation_ix);
7759     }
7760     else {
7761         *nxp = 0;
7762         return NULL;
7763     }
7764 }
7765
7766 #endif /* USE_LOCALE_COLLATE */
7767
7768 static char *
7769 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7770 {
7771     SV * const tsv = newSV(0);
7772     ENTER;
7773     SAVEFREESV(tsv);
7774     sv_gets(tsv, fp, 0);
7775     sv_utf8_upgrade_nomg(tsv);
7776     SvCUR_set(sv,append);
7777     sv_catsv(sv,tsv);
7778     LEAVE;
7779     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7780 }
7781
7782 static char *
7783 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7784 {
7785     SSize_t bytesread;
7786     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7787       /* Grab the size of the record we're getting */
7788     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7789     
7790     /* Go yank in */
7791 #ifdef VMS
7792 #include <rms.h>
7793     int fd;
7794     Stat_t st;
7795
7796     /* With a true, record-oriented file on VMS, we need to use read directly
7797      * to ensure that we respect RMS record boundaries.  The user is responsible
7798      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7799      * record size) field.  N.B. This is likely to produce invalid results on
7800      * varying-width character data when a record ends mid-character.
7801      */
7802     fd = PerlIO_fileno(fp);
7803     if (fd != -1
7804         && PerlLIO_fstat(fd, &st) == 0
7805         && (st.st_fab_rfm == FAB$C_VAR
7806             || st.st_fab_rfm == FAB$C_VFC
7807             || st.st_fab_rfm == FAB$C_FIX)) {
7808
7809         bytesread = PerlLIO_read(fd, buffer, recsize);
7810     }
7811     else /* in-memory file from PerlIO::Scalar
7812           * or not a record-oriented file
7813           */
7814 #endif
7815     {
7816         bytesread = PerlIO_read(fp, buffer, recsize);
7817
7818         /* At this point, the logic in sv_get() means that sv will
7819            be treated as utf-8 if the handle is utf8.
7820         */
7821         if (PerlIO_isutf8(fp) && bytesread > 0) {
7822             char *bend = buffer + bytesread;
7823             char *bufp = buffer;
7824             size_t charcount = 0;
7825             bool charstart = TRUE;
7826             STRLEN skip = 0;
7827
7828             while (charcount < recsize) {
7829                 /* count accumulated characters */
7830                 while (bufp < bend) {
7831                     if (charstart) {
7832                         skip = UTF8SKIP(bufp);
7833                     }
7834                     if (bufp + skip > bend) {
7835                         /* partial at the end */
7836                         charstart = FALSE;
7837                         break;
7838                     }
7839                     else {
7840                         ++charcount;
7841                         bufp += skip;
7842                         charstart = TRUE;
7843                     }
7844                 }
7845
7846                 if (charcount < recsize) {
7847                     STRLEN readsize;
7848                     STRLEN bufp_offset = bufp - buffer;
7849                     SSize_t morebytesread;
7850
7851                     /* originally I read enough to fill any incomplete
7852                        character and the first byte of the next
7853                        character if needed, but if there's many
7854                        multi-byte encoded characters we're going to be
7855                        making a read call for every character beyond
7856                        the original read size.
7857
7858                        So instead, read the rest of the character if
7859                        any, and enough bytes to match at least the
7860                        start bytes for each character we're going to
7861                        read.
7862                     */
7863                     if (charstart)
7864                         readsize = recsize - charcount;
7865                     else 
7866                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7867                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7868                     bend = buffer + bytesread;
7869                     morebytesread = PerlIO_read(fp, bend, readsize);
7870                     if (morebytesread <= 0) {
7871                         /* we're done, if we still have incomplete
7872                            characters the check code in sv_gets() will
7873                            warn about them.
7874
7875                            I'd originally considered doing
7876                            PerlIO_ungetc() on all but the lead
7877                            character of the incomplete character, but
7878                            read() doesn't do that, so I don't.
7879                         */
7880                         break;
7881                     }
7882
7883                     /* prepare to scan some more */
7884                     bytesread += morebytesread;
7885                     bend = buffer + bytesread;
7886                     bufp = buffer + bufp_offset;
7887                 }
7888             }
7889         }
7890     }
7891
7892     if (bytesread < 0)
7893         bytesread = 0;
7894     SvCUR_set(sv, bytesread + append);
7895     buffer[bytesread] = '\0';
7896     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7897 }
7898
7899 /*
7900 =for apidoc sv_gets
7901
7902 Get a line from the filehandle and store it into the SV, optionally
7903 appending to the currently-stored string. If C<append> is not 0, the
7904 line is appended to the SV instead of overwriting it. C<append> should
7905 be set to the byte offset that the appended string should start at
7906 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7907
7908 =cut
7909 */
7910
7911 char *
7912 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7913 {
7914     dVAR;
7915     const char *rsptr;
7916     STRLEN rslen;
7917     STDCHAR rslast;
7918     STDCHAR *bp;
7919     I32 cnt;
7920     I32 i = 0;
7921     I32 rspara = 0;
7922
7923     PERL_ARGS_ASSERT_SV_GETS;
7924
7925     if (SvTHINKFIRST(sv))
7926         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7927     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7928        from <>.
7929        However, perlbench says it's slower, because the existing swipe code
7930        is faster than copy on write.
7931        Swings and roundabouts.  */
7932     SvUPGRADE(sv, SVt_PV);
7933
7934     if (append) {
7935         if (PerlIO_isutf8(fp)) {
7936             if (!SvUTF8(sv)) {
7937                 sv_utf8_upgrade_nomg(sv);
7938                 sv_pos_u2b(sv,&append,0);
7939             }
7940         } else if (SvUTF8(sv)) {
7941             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7942         }
7943     }
7944
7945     SvPOK_only(sv);
7946     if (!append) {
7947         SvCUR_set(sv,0);
7948     }
7949     if (PerlIO_isutf8(fp))
7950         SvUTF8_on(sv);
7951
7952     if (IN_PERL_COMPILETIME) {
7953         /* we always read code in line mode */
7954         rsptr = "\n";
7955         rslen = 1;
7956     }
7957     else if (RsSNARF(PL_rs)) {
7958         /* If it is a regular disk file use size from stat() as estimate
7959            of amount we are going to read -- may result in mallocing
7960            more memory than we really need if the layers below reduce
7961            the size we read (e.g. CRLF or a gzip layer).
7962          */
7963         Stat_t st;
7964         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7965             const Off_t offset = PerlIO_tell(fp);
7966             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7967                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7968             }
7969         }
7970         rsptr = NULL;
7971         rslen = 0;
7972     }
7973     else if (RsRECORD(PL_rs)) {
7974         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7975     }
7976     else if (RsPARA(PL_rs)) {
7977         rsptr = "\n\n";
7978         rslen = 2;
7979         rspara = 1;
7980     }
7981     else {
7982         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7983         if (PerlIO_isutf8(fp)) {
7984             rsptr = SvPVutf8(PL_rs, rslen);
7985         }
7986         else {
7987             if (SvUTF8(PL_rs)) {
7988                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7989                     Perl_croak(aTHX_ "Wide character in $/");
7990                 }
7991             }
7992             rsptr = SvPV_const(PL_rs, rslen);
7993         }
7994     }
7995
7996     rslast = rslen ? rsptr[rslen - 1] : '\0';
7997
7998     if (rspara) {               /* have to do this both before and after */
7999         do {                    /* to make sure file boundaries work right */
8000             if (PerlIO_eof(fp))
8001                 return 0;
8002             i = PerlIO_getc(fp);
8003             if (i != '\n') {
8004                 if (i == -1)
8005                     return 0;
8006                 PerlIO_ungetc(fp,i);
8007                 break;
8008             }
8009         } while (i != EOF);
8010     }
8011
8012     /* See if we know enough about I/O mechanism to cheat it ! */
8013
8014     /* This used to be #ifdef test - it is made run-time test for ease
8015        of abstracting out stdio interface. One call should be cheap
8016        enough here - and may even be a macro allowing compile
8017        time optimization.
8018      */
8019
8020     if (PerlIO_fast_gets(fp)) {
8021
8022     /*
8023      * We're going to steal some values from the stdio struct
8024      * and put EVERYTHING in the innermost loop into registers.
8025      */
8026     STDCHAR *ptr;
8027     STRLEN bpx;
8028     I32 shortbuffered;
8029
8030 #if defined(VMS) && defined(PERLIO_IS_STDIO)
8031     /* An ungetc()d char is handled separately from the regular
8032      * buffer, so we getc() it back out and stuff it in the buffer.
8033      */
8034     i = PerlIO_getc(fp);
8035     if (i == EOF) return 0;
8036     *(--((*fp)->_ptr)) = (unsigned char) i;
8037     (*fp)->_cnt++;
8038 #endif
8039
8040     /* Here is some breathtakingly efficient cheating */
8041
8042     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
8043     /* make sure we have the room */
8044     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8045         /* Not room for all of it
8046            if we are looking for a separator and room for some
8047          */
8048         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8049             /* just process what we have room for */
8050             shortbuffered = cnt - SvLEN(sv) + append + 1;
8051             cnt -= shortbuffered;
8052         }
8053         else {
8054             shortbuffered = 0;
8055             /* remember that cnt can be negative */
8056             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8057         }
8058     }
8059     else
8060         shortbuffered = 0;
8061     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8062     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8063     DEBUG_P(PerlIO_printf(Perl_debug_log,
8064         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8065     DEBUG_P(PerlIO_printf(Perl_debug_log,
8066         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8067                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8068                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8069     for (;;) {
8070       screamer:
8071         if (cnt > 0) {
8072             if (rslen) {
8073                 while (cnt > 0) {                    /* this     |  eat */
8074                     cnt--;
8075                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8076                         goto thats_all_folks;        /* screams  |  sed :-) */
8077                 }
8078             }
8079             else {
8080                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8081                 bp += cnt;                           /* screams  |  dust */
8082                 ptr += cnt;                          /* louder   |  sed :-) */
8083                 cnt = 0;
8084                 assert (!shortbuffered);
8085                 goto cannot_be_shortbuffered;
8086             }
8087         }
8088         
8089         if (shortbuffered) {            /* oh well, must extend */
8090             cnt = shortbuffered;
8091             shortbuffered = 0;
8092             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8093             SvCUR_set(sv, bpx);
8094             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8095             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8096             continue;
8097         }
8098
8099     cannot_be_shortbuffered:
8100         DEBUG_P(PerlIO_printf(Perl_debug_log,
8101                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
8102                               PTR2UV(ptr),(long)cnt));
8103         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8104
8105         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8106             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8107             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8108             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8109
8110         /* This used to call 'filbuf' in stdio form, but as that behaves like
8111            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8112            another abstraction.  */
8113         i   = PerlIO_getc(fp);          /* get more characters */
8114
8115         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8116             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8117             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8118             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8119
8120         cnt = PerlIO_get_cnt(fp);
8121         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8122         DEBUG_P(PerlIO_printf(Perl_debug_log,
8123             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8124
8125         if (i == EOF)                   /* all done for ever? */
8126             goto thats_really_all_folks;
8127
8128         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8129         SvCUR_set(sv, bpx);
8130         SvGROW(sv, bpx + cnt + 2);
8131         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8132
8133         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8134
8135         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8136             goto thats_all_folks;
8137     }
8138
8139 thats_all_folks:
8140     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8141           memNE((char*)bp - rslen, rsptr, rslen))
8142         goto screamer;                          /* go back to the fray */
8143 thats_really_all_folks:
8144     if (shortbuffered)
8145         cnt += shortbuffered;
8146         DEBUG_P(PerlIO_printf(Perl_debug_log,
8147             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8148     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8149     DEBUG_P(PerlIO_printf(Perl_debug_log,
8150         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8151         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8152         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8153     *bp = '\0';
8154     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8155     DEBUG_P(PerlIO_printf(Perl_debug_log,
8156         "Screamer: done, len=%ld, string=|%.*s|\n",
8157         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8158     }
8159    else
8160     {
8161        /*The big, slow, and stupid way. */
8162 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8163         STDCHAR *buf = NULL;
8164         Newx(buf, 8192, STDCHAR);
8165         assert(buf);
8166 #else
8167         STDCHAR buf[8192];
8168 #endif
8169
8170 screamer2:
8171         if (rslen) {
8172             const STDCHAR * const bpe = buf + sizeof(buf);
8173             bp = buf;
8174             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8175                 ; /* keep reading */
8176             cnt = bp - buf;
8177         }
8178         else {
8179             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8180             /* Accommodate broken VAXC compiler, which applies U8 cast to
8181              * both args of ?: operator, causing EOF to change into 255
8182              */
8183             if (cnt > 0)
8184                  i = (U8)buf[cnt - 1];
8185             else
8186                  i = EOF;
8187         }
8188
8189         if (cnt < 0)
8190             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8191         if (append)
8192             sv_catpvn_nomg(sv, (char *) buf, cnt);
8193         else
8194             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8195
8196         if (i != EOF &&                 /* joy */
8197             (!rslen ||
8198              SvCUR(sv) < rslen ||
8199              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8200         {
8201             append = -1;
8202             /*
8203              * If we're reading from a TTY and we get a short read,
8204              * indicating that the user hit his EOF character, we need
8205              * to notice it now, because if we try to read from the TTY
8206              * again, the EOF condition will disappear.
8207              *
8208              * The comparison of cnt to sizeof(buf) is an optimization
8209              * that prevents unnecessary calls to feof().
8210              *
8211              * - jik 9/25/96
8212              */
8213             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8214                 goto screamer2;
8215         }
8216
8217 #ifdef USE_HEAP_INSTEAD_OF_STACK
8218         Safefree(buf);
8219 #endif
8220     }
8221
8222     if (rspara) {               /* have to do this both before and after */
8223         while (i != EOF) {      /* to make sure file boundaries work right */
8224             i = PerlIO_getc(fp);
8225             if (i != '\n') {
8226                 PerlIO_ungetc(fp,i);
8227                 break;
8228             }
8229         }
8230     }
8231
8232     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8233 }
8234
8235 /*
8236 =for apidoc sv_inc
8237
8238 Auto-increment of the value in the SV, doing string to numeric conversion
8239 if necessary.  Handles 'get' magic and operator overloading.
8240
8241 =cut
8242 */
8243
8244 void
8245 Perl_sv_inc(pTHX_ SV *const sv)
8246 {
8247     if (!sv)
8248         return;
8249     SvGETMAGIC(sv);
8250     sv_inc_nomg(sv);
8251 }
8252
8253 /*
8254 =for apidoc sv_inc_nomg
8255
8256 Auto-increment of the value in the SV, doing string to numeric conversion
8257 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8258
8259 =cut
8260 */
8261
8262 void
8263 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8264 {
8265     dVAR;
8266     char *d;
8267     int flags;
8268
8269     if (!sv)
8270         return;
8271     if (SvTHINKFIRST(sv)) {
8272         if (SvIsCOW(sv) || isGV_with_GP(sv))
8273             sv_force_normal_flags(sv, 0);
8274         if (SvREADONLY(sv)) {
8275             if (IN_PERL_RUNTIME)
8276                 Perl_croak_no_modify();
8277         }
8278         if (SvROK(sv)) {
8279             IV i;
8280             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8281                 return;
8282             i = PTR2IV(SvRV(sv));
8283             sv_unref(sv);
8284             sv_setiv(sv, i);
8285         }
8286     }
8287     flags = SvFLAGS(sv);
8288     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8289         /* It's (privately or publicly) a float, but not tested as an
8290            integer, so test it to see. */
8291         (void) SvIV(sv);
8292         flags = SvFLAGS(sv);
8293     }
8294     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8295         /* It's publicly an integer, or privately an integer-not-float */
8296 #ifdef PERL_PRESERVE_IVUV
8297       oops_its_int:
8298 #endif
8299         if (SvIsUV(sv)) {
8300             if (SvUVX(sv) == UV_MAX)
8301                 sv_setnv(sv, UV_MAX_P1);
8302             else
8303                 (void)SvIOK_only_UV(sv);
8304                 SvUV_set(sv, SvUVX(sv) + 1);
8305         } else {
8306             if (SvIVX(sv) == IV_MAX)
8307                 sv_setuv(sv, (UV)IV_MAX + 1);
8308             else {
8309                 (void)SvIOK_only(sv);
8310                 SvIV_set(sv, SvIVX(sv) + 1);
8311             }   
8312         }
8313         return;
8314     }
8315     if (flags & SVp_NOK) {
8316         const NV was = SvNVX(sv);
8317         if (NV_OVERFLOWS_INTEGERS_AT &&
8318             was >= NV_OVERFLOWS_INTEGERS_AT) {
8319             /* diag_listed_as: Lost precision when %s %f by 1 */
8320             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8321                            "Lost precision when incrementing %" NVff " by 1",
8322                            was);
8323         }
8324         (void)SvNOK_only(sv);
8325         SvNV_set(sv, was + 1.0);
8326         return;
8327     }
8328
8329     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8330         if ((flags & SVTYPEMASK) < SVt_PVIV)
8331             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8332         (void)SvIOK_only(sv);
8333         SvIV_set(sv, 1);
8334         return;
8335     }
8336     d = SvPVX(sv);
8337     while (isALPHA(*d)) d++;
8338     while (isDIGIT(*d)) d++;
8339     if (d < SvEND(sv)) {
8340 #ifdef PERL_PRESERVE_IVUV
8341         /* Got to punt this as an integer if needs be, but we don't issue
8342            warnings. Probably ought to make the sv_iv_please() that does
8343            the conversion if possible, and silently.  */
8344         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8345         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8346             /* Need to try really hard to see if it's an integer.
8347                9.22337203685478e+18 is an integer.
8348                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8349                so $a="9.22337203685478e+18"; $a+0; $a++
8350                needs to be the same as $a="9.22337203685478e+18"; $a++
8351                or we go insane. */
8352         
8353             (void) sv_2iv(sv);
8354             if (SvIOK(sv))
8355                 goto oops_its_int;
8356
8357             /* sv_2iv *should* have made this an NV */
8358             if (flags & SVp_NOK) {
8359                 (void)SvNOK_only(sv);
8360                 SvNV_set(sv, SvNVX(sv) + 1.0);
8361                 return;
8362             }
8363             /* I don't think we can get here. Maybe I should assert this
8364                And if we do get here I suspect that sv_setnv will croak. NWC
8365                Fall through. */
8366 #if defined(USE_LONG_DOUBLE)
8367             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",
8368                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8369 #else
8370             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8371                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8372 #endif
8373         }
8374 #endif /* PERL_PRESERVE_IVUV */
8375         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8376         return;
8377     }
8378     d--;
8379     while (d >= SvPVX_const(sv)) {
8380         if (isDIGIT(*d)) {
8381             if (++*d <= '9')
8382                 return;
8383             *(d--) = '0';
8384         }
8385         else {
8386 #ifdef EBCDIC
8387             /* MKS: The original code here died if letters weren't consecutive.
8388              * at least it didn't have to worry about non-C locales.  The
8389              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8390              * arranged in order (although not consecutively) and that only
8391              * [A-Za-z] are accepted by isALPHA in the C locale.
8392              */
8393             if (*d != 'z' && *d != 'Z') {
8394                 do { ++*d; } while (!isALPHA(*d));
8395                 return;
8396             }
8397             *(d--) -= 'z' - 'a';
8398 #else
8399             ++*d;
8400             if (isALPHA(*d))
8401                 return;
8402             *(d--) -= 'z' - 'a' + 1;
8403 #endif
8404         }
8405     }
8406     /* oh,oh, the number grew */
8407     SvGROW(sv, SvCUR(sv) + 2);
8408     SvCUR_set(sv, SvCUR(sv) + 1);
8409     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8410         *d = d[-1];
8411     if (isDIGIT(d[1]))
8412         *d = '1';
8413     else
8414         *d = d[1];
8415 }
8416
8417 /*
8418 =for apidoc sv_dec
8419
8420 Auto-decrement of the value in the SV, doing string to numeric conversion
8421 if necessary.  Handles 'get' magic and operator overloading.
8422
8423 =cut
8424 */
8425
8426 void
8427 Perl_sv_dec(pTHX_ SV *const sv)
8428 {
8429     dVAR;
8430     if (!sv)
8431         return;
8432     SvGETMAGIC(sv);
8433     sv_dec_nomg(sv);
8434 }
8435
8436 /*
8437 =for apidoc sv_dec_nomg
8438
8439 Auto-decrement of the value in the SV, doing string to numeric conversion
8440 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8441
8442 =cut
8443 */
8444
8445 void
8446 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8447 {
8448     dVAR;
8449     int flags;
8450
8451     if (!sv)
8452         return;
8453     if (SvTHINKFIRST(sv)) {
8454         if (SvIsCOW(sv) || isGV_with_GP(sv))
8455             sv_force_normal_flags(sv, 0);
8456         if (SvREADONLY(sv)) {
8457             if (IN_PERL_RUNTIME)
8458                 Perl_croak_no_modify();
8459         }
8460         if (SvROK(sv)) {
8461             IV i;
8462             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8463                 return;
8464             i = PTR2IV(SvRV(sv));
8465             sv_unref(sv);
8466             sv_setiv(sv, i);
8467         }
8468     }
8469     /* Unlike sv_inc we don't have to worry about string-never-numbers
8470        and keeping them magic. But we mustn't warn on punting */
8471     flags = SvFLAGS(sv);
8472     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8473         /* It's publicly an integer, or privately an integer-not-float */
8474 #ifdef PERL_PRESERVE_IVUV
8475       oops_its_int:
8476 #endif
8477         if (SvIsUV(sv)) {
8478             if (SvUVX(sv) == 0) {
8479                 (void)SvIOK_only(sv);
8480                 SvIV_set(sv, -1);
8481             }
8482             else {
8483                 (void)SvIOK_only_UV(sv);
8484                 SvUV_set(sv, SvUVX(sv) - 1);
8485             }   
8486         } else {
8487             if (SvIVX(sv) == IV_MIN) {
8488                 sv_setnv(sv, (NV)IV_MIN);
8489                 goto oops_its_num;
8490             }
8491             else {
8492                 (void)SvIOK_only(sv);
8493                 SvIV_set(sv, SvIVX(sv) - 1);
8494             }   
8495         }
8496         return;
8497     }
8498     if (flags & SVp_NOK) {
8499     oops_its_num:
8500         {
8501             const NV was = SvNVX(sv);
8502             if (NV_OVERFLOWS_INTEGERS_AT &&
8503                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8504                 /* diag_listed_as: Lost precision when %s %f by 1 */
8505                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8506                                "Lost precision when decrementing %" NVff " by 1",
8507                                was);
8508             }
8509             (void)SvNOK_only(sv);
8510             SvNV_set(sv, was - 1.0);
8511             return;
8512         }
8513     }
8514     if (!(flags & SVp_POK)) {
8515         if ((flags & SVTYPEMASK) < SVt_PVIV)
8516             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8517         SvIV_set(sv, -1);
8518         (void)SvIOK_only(sv);
8519         return;
8520     }
8521 #ifdef PERL_PRESERVE_IVUV
8522     {
8523         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8524         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8525             /* Need to try really hard to see if it's an integer.
8526                9.22337203685478e+18 is an integer.
8527                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8528                so $a="9.22337203685478e+18"; $a+0; $a--
8529                needs to be the same as $a="9.22337203685478e+18"; $a--
8530                or we go insane. */
8531         
8532             (void) sv_2iv(sv);
8533             if (SvIOK(sv))
8534                 goto oops_its_int;
8535
8536             /* sv_2iv *should* have made this an NV */
8537             if (flags & SVp_NOK) {
8538                 (void)SvNOK_only(sv);
8539                 SvNV_set(sv, SvNVX(sv) - 1.0);
8540                 return;
8541             }
8542             /* I don't think we can get here. Maybe I should assert this
8543                And if we do get here I suspect that sv_setnv will croak. NWC
8544                Fall through. */
8545 #if defined(USE_LONG_DOUBLE)
8546             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",
8547                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8548 #else
8549             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8550                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8551 #endif
8552         }
8553     }
8554 #endif /* PERL_PRESERVE_IVUV */
8555     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8556 }
8557
8558 /* this define is used to eliminate a chunk of duplicated but shared logic
8559  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8560  * used anywhere but here - yves
8561  */
8562 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8563     STMT_START {      \
8564         EXTEND_MORTAL(1); \
8565         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8566     } STMT_END
8567
8568 /*
8569 =for apidoc sv_mortalcopy
8570
8571 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8572 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8573 explicit call to FREETMPS, or by an implicit call at places such as
8574 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8575
8576 =cut
8577 */
8578
8579 /* Make a string that will exist for the duration of the expression
8580  * evaluation.  Actually, it may have to last longer than that, but
8581  * hopefully we won't free it until it has been assigned to a
8582  * permanent location. */
8583
8584 SV *
8585 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8586 {
8587     dVAR;
8588     SV *sv;
8589
8590     if (flags & SV_GMAGIC)
8591         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8592     new_SV(sv);
8593     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8594     PUSH_EXTEND_MORTAL__SV_C(sv);
8595     SvTEMP_on(sv);
8596     return sv;
8597 }
8598
8599 /*
8600 =for apidoc sv_newmortal
8601
8602 Creates a new null SV which is mortal.  The reference count of the SV is
8603 set to 1.  It will be destroyed "soon", either by an explicit call to
8604 FREETMPS, or by an implicit call at places such as statement boundaries.
8605 See also C<sv_mortalcopy> and C<sv_2mortal>.
8606
8607 =cut
8608 */
8609
8610 SV *
8611 Perl_sv_newmortal(pTHX)
8612 {
8613     dVAR;
8614     SV *sv;
8615
8616     new_SV(sv);
8617     SvFLAGS(sv) = SVs_TEMP;
8618     PUSH_EXTEND_MORTAL__SV_C(sv);
8619     return sv;
8620 }
8621
8622
8623 /*
8624 =for apidoc newSVpvn_flags
8625
8626 Creates a new SV and copies a string into it.  The reference count for the
8627 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8628 string.  You are responsible for ensuring that the source string is at least
8629 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8630 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8631 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8632 returning.  If C<SVf_UTF8> is set, C<s>
8633 is considered to be in UTF-8 and the
8634 C<SVf_UTF8> flag will be set on the new SV.
8635 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8636
8637     #define newSVpvn_utf8(s, len, u)                    \
8638         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8639
8640 =cut
8641 */
8642
8643 SV *
8644 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8645 {
8646     dVAR;
8647     SV *sv;
8648
8649     /* All the flags we don't support must be zero.
8650        And we're new code so I'm going to assert this from the start.  */
8651     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8652     new_SV(sv);
8653     sv_setpvn(sv,s,len);
8654
8655     /* This code used to do a sv_2mortal(), however we now unroll the call to
8656      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8657      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8658      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8659      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8660      * means that we eliminate quite a few steps than it looks - Yves
8661      * (explaining patch by gfx) */
8662
8663     SvFLAGS(sv) |= flags;
8664
8665     if(flags & SVs_TEMP){
8666         PUSH_EXTEND_MORTAL__SV_C(sv);
8667     }
8668
8669     return sv;
8670 }
8671
8672 /*
8673 =for apidoc sv_2mortal
8674
8675 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8676 by an explicit call to FREETMPS, or by an implicit call at places such as
8677 statement boundaries.  SvTEMP() is turned on which means that the SV's
8678 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8679 and C<sv_mortalcopy>.
8680
8681 =cut
8682 */
8683
8684 SV *
8685 Perl_sv_2mortal(pTHX_ SV *const sv)
8686 {
8687     dVAR;
8688     if (!sv)
8689         return NULL;
8690     if (SvIMMORTAL(sv))
8691         return sv;
8692     PUSH_EXTEND_MORTAL__SV_C(sv);
8693     SvTEMP_on(sv);
8694     return sv;
8695 }
8696
8697 /*
8698 =for apidoc newSVpv
8699
8700 Creates a new SV and copies a string into it.  The reference count for the
8701 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8702 strlen().  For efficiency, consider using C<newSVpvn> instead.
8703
8704 =cut
8705 */
8706
8707 SV *
8708 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8709 {
8710     dVAR;
8711     SV *sv;
8712
8713     new_SV(sv);
8714     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8715     return sv;
8716 }
8717
8718 /*
8719 =for apidoc newSVpvn
8720
8721 Creates a new SV and copies a buffer into it, which may contain NUL characters
8722 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8723 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8724 are responsible for ensuring that the source buffer is at least
8725 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8726 undefined.
8727
8728 =cut
8729 */
8730
8731 SV *
8732 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8733 {
8734     dVAR;
8735     SV *sv;
8736
8737     new_SV(sv);
8738     sv_setpvn(sv,buffer,len);
8739     return sv;
8740 }
8741
8742 /*
8743 =for apidoc newSVhek
8744
8745 Creates a new SV from the hash key structure.  It will generate scalars that
8746 point to the shared string table where possible.  Returns a new (undefined)
8747 SV if the hek is NULL.
8748
8749 =cut
8750 */
8751
8752 SV *
8753 Perl_newSVhek(pTHX_ const HEK *const hek)
8754 {
8755     dVAR;
8756     if (!hek) {
8757         SV *sv;
8758
8759         new_SV(sv);
8760         return sv;
8761     }
8762
8763     if (HEK_LEN(hek) == HEf_SVKEY) {
8764         return newSVsv(*(SV**)HEK_KEY(hek));
8765     } else {
8766         const int flags = HEK_FLAGS(hek);
8767         if (flags & HVhek_WASUTF8) {
8768             /* Trouble :-)
8769                Andreas would like keys he put in as utf8 to come back as utf8
8770             */
8771             STRLEN utf8_len = HEK_LEN(hek);
8772             SV * const sv = newSV_type(SVt_PV);
8773             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8774             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8775             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8776             SvUTF8_on (sv);
8777             return sv;
8778         } else if (flags & HVhek_UNSHARED) {
8779             /* A hash that isn't using shared hash keys has to have
8780                the flag in every key so that we know not to try to call
8781                share_hek_hek on it.  */
8782
8783             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8784             if (HEK_UTF8(hek))
8785                 SvUTF8_on (sv);
8786             return sv;
8787         }
8788         /* This will be overwhelminly the most common case.  */
8789         {
8790             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8791                more efficient than sharepvn().  */
8792             SV *sv;
8793
8794             new_SV(sv);
8795             sv_upgrade(sv, SVt_PV);
8796             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8797             SvCUR_set(sv, HEK_LEN(hek));
8798             SvLEN_set(sv, 0);
8799             SvIsCOW_on(sv);
8800             SvPOK_on(sv);
8801             if (HEK_UTF8(hek))
8802                 SvUTF8_on(sv);
8803             return sv;
8804         }
8805     }
8806 }
8807
8808 /*
8809 =for apidoc newSVpvn_share
8810
8811 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8812 table.  If the string does not already exist in the table, it is
8813 created first.  Turns on the SvIsCOW flag (or READONLY
8814 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8815 is non-zero, that value is used; otherwise the hash is computed.
8816 The string's hash can later be retrieved from the SV
8817 with the C<SvSHARED_HASH()> macro.  The idea here is
8818 that as the string table is used for shared hash keys these strings will have
8819 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8820
8821 =cut
8822 */
8823
8824 SV *
8825 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8826 {
8827     dVAR;
8828     SV *sv;
8829     bool is_utf8 = FALSE;
8830     const char *const orig_src = src;
8831
8832     if (len < 0) {
8833         STRLEN tmplen = -len;
8834         is_utf8 = TRUE;
8835         /* See the note in hv.c:hv_fetch() --jhi */
8836         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8837         len = tmplen;
8838     }
8839     if (!hash)
8840         PERL_HASH(hash, src, len);
8841     new_SV(sv);
8842     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8843        changes here, update it there too.  */
8844     sv_upgrade(sv, SVt_PV);
8845     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8846     SvCUR_set(sv, len);
8847     SvLEN_set(sv, 0);
8848     SvIsCOW_on(sv);
8849     SvPOK_on(sv);
8850     if (is_utf8)
8851         SvUTF8_on(sv);
8852     if (src != orig_src)
8853         Safefree(src);
8854     return sv;
8855 }
8856
8857 /*
8858 =for apidoc newSVpv_share
8859
8860 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8861 string/length pair.
8862
8863 =cut
8864 */
8865
8866 SV *
8867 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8868 {
8869     return newSVpvn_share(src, strlen(src), hash);
8870 }
8871
8872 #if defined(PERL_IMPLICIT_CONTEXT)
8873
8874 /* pTHX_ magic can't cope with varargs, so this is a no-context
8875  * version of the main function, (which may itself be aliased to us).
8876  * Don't access this version directly.
8877  */
8878
8879 SV *
8880 Perl_newSVpvf_nocontext(const char *const pat, ...)
8881 {
8882     dTHX;
8883     SV *sv;
8884     va_list args;
8885
8886     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8887
8888     va_start(args, pat);
8889     sv = vnewSVpvf(pat, &args);
8890     va_end(args);
8891     return sv;
8892 }
8893 #endif
8894
8895 /*
8896 =for apidoc newSVpvf
8897
8898 Creates a new SV and initializes it with the string formatted like
8899 C<sprintf>.
8900
8901 =cut
8902 */
8903
8904 SV *
8905 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8906 {
8907     SV *sv;
8908     va_list args;
8909
8910     PERL_ARGS_ASSERT_NEWSVPVF;
8911
8912     va_start(args, pat);
8913     sv = vnewSVpvf(pat, &args);
8914     va_end(args);
8915     return sv;
8916 }
8917
8918 /* backend for newSVpvf() and newSVpvf_nocontext() */
8919
8920 SV *
8921 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8922 {
8923     dVAR;
8924     SV *sv;
8925
8926     PERL_ARGS_ASSERT_VNEWSVPVF;
8927
8928     new_SV(sv);
8929     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8930     return sv;
8931 }
8932
8933 /*
8934 =for apidoc newSVnv
8935
8936 Creates a new SV and copies a floating point value into it.
8937 The reference count for the SV is set to 1.
8938
8939 =cut
8940 */
8941
8942 SV *
8943 Perl_newSVnv(pTHX_ const NV n)
8944 {
8945     dVAR;
8946     SV *sv;
8947
8948     new_SV(sv);
8949     sv_setnv(sv,n);
8950     return sv;
8951 }
8952
8953 /*
8954 =for apidoc newSViv
8955
8956 Creates a new SV and copies an integer into it.  The reference count for the
8957 SV is set to 1.
8958
8959 =cut
8960 */
8961
8962 SV *
8963 Perl_newSViv(pTHX_ const IV i)
8964 {
8965     dVAR;
8966     SV *sv;
8967
8968     new_SV(sv);
8969     sv_setiv(sv,i);
8970     return sv;
8971 }
8972
8973 /*
8974 =for apidoc newSVuv
8975
8976 Creates a new SV and copies an unsigned integer into it.
8977 The reference count for the SV is set to 1.
8978
8979 =cut
8980 */
8981
8982 SV *
8983 Perl_newSVuv(pTHX_ const UV u)
8984 {
8985     dVAR;
8986     SV *sv;
8987
8988     new_SV(sv);
8989     sv_setuv(sv,u);
8990     return sv;
8991 }
8992
8993 /*
8994 =for apidoc newSV_type
8995
8996 Creates a new SV, of the type specified.  The reference count for the new SV
8997 is set to 1.
8998
8999 =cut
9000 */
9001
9002 SV *
9003 Perl_newSV_type(pTHX_ const svtype type)
9004 {
9005     SV *sv;
9006
9007     new_SV(sv);
9008     sv_upgrade(sv, type);
9009     return sv;
9010 }
9011
9012 /*
9013 =for apidoc newRV_noinc
9014
9015 Creates an RV wrapper for an SV.  The reference count for the original
9016 SV is B<not> incremented.
9017
9018 =cut
9019 */
9020
9021 SV *
9022 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9023 {
9024     dVAR;
9025     SV *sv = newSV_type(SVt_IV);
9026
9027     PERL_ARGS_ASSERT_NEWRV_NOINC;
9028
9029     SvTEMP_off(tmpRef);
9030     SvRV_set(sv, tmpRef);
9031     SvROK_on(sv);
9032     return sv;
9033 }
9034
9035 /* newRV_inc is the official function name to use now.
9036  * newRV_inc is in fact #defined to newRV in sv.h
9037  */
9038
9039 SV *
9040 Perl_newRV(pTHX_ SV *const sv)
9041 {
9042     dVAR;
9043
9044     PERL_ARGS_ASSERT_NEWRV;
9045
9046     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9047 }
9048
9049 /*
9050 =for apidoc newSVsv
9051
9052 Creates a new SV which is an exact duplicate of the original SV.
9053 (Uses C<sv_setsv>.)
9054
9055 =cut
9056 */
9057
9058 SV *
9059 Perl_newSVsv(pTHX_ SV *const old)
9060 {
9061     dVAR;
9062     SV *sv;
9063
9064     if (!old)
9065         return NULL;
9066     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9067         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9068         return NULL;
9069     }
9070     /* Do this here, otherwise we leak the new SV if this croaks. */
9071     SvGETMAGIC(old);
9072     new_SV(sv);
9073     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9074        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9075     sv_setsv_flags(sv, old, SV_NOSTEAL);
9076     return sv;
9077 }
9078
9079 /*
9080 =for apidoc sv_reset
9081
9082 Underlying implementation for the C<reset> Perl function.
9083 Note that the perl-level function is vaguely deprecated.
9084
9085 =cut
9086 */
9087
9088 void
9089 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9090 {
9091     PERL_ARGS_ASSERT_SV_RESET;
9092
9093     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9094 }
9095
9096 void
9097 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9098 {
9099     dVAR;
9100     char todo[PERL_UCHAR_MAX+1];
9101     const char *send;
9102
9103     if (!stash || SvTYPE(stash) != SVt_PVHV)
9104         return;
9105
9106     if (!s) {           /* reset ?? searches */
9107         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9108         if (mg) {
9109             const U32 count = mg->mg_len / sizeof(PMOP**);
9110             PMOP **pmp = (PMOP**) mg->mg_ptr;
9111             PMOP *const *const end = pmp + count;
9112
9113             while (pmp < end) {
9114 #ifdef USE_ITHREADS
9115                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9116 #else
9117                 (*pmp)->op_pmflags &= ~PMf_USED;
9118 #endif
9119                 ++pmp;
9120             }
9121         }
9122         return;
9123     }
9124
9125     /* reset variables */
9126
9127     if (!HvARRAY(stash))
9128         return;
9129
9130     Zero(todo, 256, char);
9131     send = s + len;
9132     while (s < send) {
9133         I32 max;
9134         I32 i = (unsigned char)*s;
9135         if (s[1] == '-') {
9136             s += 2;
9137         }
9138         max = (unsigned char)*s++;
9139         for ( ; i <= max; i++) {
9140             todo[i] = 1;
9141         }
9142         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9143             HE *entry;
9144             for (entry = HvARRAY(stash)[i];
9145                  entry;
9146                  entry = HeNEXT(entry))
9147             {
9148                 GV *gv;
9149                 SV *sv;
9150
9151                 if (!todo[(U8)*HeKEY(entry)])
9152                     continue;
9153                 gv = MUTABLE_GV(HeVAL(entry));
9154                 sv = GvSV(gv);
9155                 if (sv) {
9156                     if (SvTHINKFIRST(sv)) {
9157                         if (!SvREADONLY(sv) && SvROK(sv))
9158                             sv_unref(sv);
9159                         /* XXX Is this continue a bug? Why should THINKFIRST
9160                            exempt us from resetting arrays and hashes?  */
9161                         continue;
9162                     }
9163                     SvOK_off(sv);
9164                     if (SvTYPE(sv) >= SVt_PV) {
9165                         SvCUR_set(sv, 0);
9166                         if (SvPVX_const(sv) != NULL)
9167                             *SvPVX(sv) = '\0';
9168                         SvTAINT(sv);
9169                     }
9170                 }
9171                 if (GvAV(gv)) {
9172                     av_clear(GvAV(gv));
9173                 }
9174                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9175 #if defined(VMS)
9176                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9177 #else /* ! VMS */
9178                     hv_clear(GvHV(gv));
9179 #  if defined(USE_ENVIRON_ARRAY)
9180                     if (gv == PL_envgv)
9181                         my_clearenv();
9182 #  endif /* USE_ENVIRON_ARRAY */
9183 #endif /* VMS */
9184                 }
9185             }
9186         }
9187     }
9188 }
9189
9190 /*
9191 =for apidoc sv_2io
9192
9193 Using various gambits, try to get an IO from an SV: the IO slot if its a
9194 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9195 named after the PV if we're a string.
9196
9197 'Get' magic is ignored on the sv passed in, but will be called on
9198 C<SvRV(sv)> if sv is an RV.
9199
9200 =cut
9201 */
9202
9203 IO*
9204 Perl_sv_2io(pTHX_ SV *const sv)
9205 {
9206     IO* io;
9207     GV* gv;
9208
9209     PERL_ARGS_ASSERT_SV_2IO;
9210
9211     switch (SvTYPE(sv)) {
9212     case SVt_PVIO:
9213         io = MUTABLE_IO(sv);
9214         break;
9215     case SVt_PVGV:
9216     case SVt_PVLV:
9217         if (isGV_with_GP(sv)) {
9218             gv = MUTABLE_GV(sv);
9219             io = GvIO(gv);
9220             if (!io)
9221                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9222                                     HEKfARG(GvNAME_HEK(gv)));
9223             break;
9224         }
9225         /* FALL THROUGH */
9226     default:
9227         if (!SvOK(sv))
9228             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9229         if (SvROK(sv)) {
9230             SvGETMAGIC(SvRV(sv));
9231             return sv_2io(SvRV(sv));
9232         }
9233         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9234         if (gv)
9235             io = GvIO(gv);
9236         else
9237             io = 0;
9238         if (!io) {
9239             SV *newsv = sv;
9240             if (SvGMAGICAL(sv)) {
9241                 newsv = sv_newmortal();
9242                 sv_setsv_nomg(newsv, sv);
9243             }
9244             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9245         }
9246         break;
9247     }
9248     return io;
9249 }
9250
9251 /*
9252 =for apidoc sv_2cv
9253
9254 Using various gambits, try to get a CV from an SV; in addition, try if
9255 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9256 The flags in C<lref> are passed to gv_fetchsv.
9257
9258 =cut
9259 */
9260
9261 CV *
9262 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9263 {
9264     dVAR;
9265     GV *gv = NULL;
9266     CV *cv = NULL;
9267
9268     PERL_ARGS_ASSERT_SV_2CV;
9269
9270     if (!sv) {
9271         *st = NULL;
9272         *gvp = NULL;
9273         return NULL;
9274     }
9275     switch (SvTYPE(sv)) {
9276     case SVt_PVCV:
9277         *st = CvSTASH(sv);
9278         *gvp = NULL;
9279         return MUTABLE_CV(sv);
9280     case SVt_PVHV:
9281     case SVt_PVAV:
9282         *st = NULL;
9283         *gvp = NULL;
9284         return NULL;
9285     default:
9286         SvGETMAGIC(sv);
9287         if (SvROK(sv)) {
9288             if (SvAMAGIC(sv))
9289                 sv = amagic_deref_call(sv, to_cv_amg);
9290
9291             sv = SvRV(sv);
9292             if (SvTYPE(sv) == SVt_PVCV) {
9293                 cv = MUTABLE_CV(sv);
9294                 *gvp = NULL;
9295                 *st = CvSTASH(cv);
9296                 return cv;
9297             }
9298             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9299                 gv = MUTABLE_GV(sv);
9300             else
9301                 Perl_croak(aTHX_ "Not a subroutine reference");
9302         }
9303         else if (isGV_with_GP(sv)) {
9304             gv = MUTABLE_GV(sv);
9305         }
9306         else {
9307             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9308         }
9309         *gvp = gv;
9310         if (!gv) {
9311             *st = NULL;
9312             return NULL;
9313         }
9314         /* Some flags to gv_fetchsv mean don't really create the GV  */
9315         if (!isGV_with_GP(gv)) {
9316             *st = NULL;
9317             return NULL;
9318         }
9319         *st = GvESTASH(gv);
9320         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9321             /* XXX this is probably not what they think they're getting.
9322              * It has the same effect as "sub name;", i.e. just a forward
9323              * declaration! */
9324             newSTUB(gv,0);
9325         }
9326         return GvCVu(gv);
9327     }
9328 }
9329
9330 /*
9331 =for apidoc sv_true
9332
9333 Returns true if the SV has a true value by Perl's rules.
9334 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9335 instead use an in-line version.
9336
9337 =cut
9338 */
9339
9340 I32
9341 Perl_sv_true(pTHX_ SV *const sv)
9342 {
9343     if (!sv)
9344         return 0;
9345     if (SvPOK(sv)) {
9346         const XPV* const tXpv = (XPV*)SvANY(sv);
9347         if (tXpv &&
9348                 (tXpv->xpv_cur > 1 ||
9349                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9350             return 1;
9351         else
9352             return 0;
9353     }
9354     else {
9355         if (SvIOK(sv))
9356             return SvIVX(sv) != 0;
9357         else {
9358             if (SvNOK(sv))
9359                 return SvNVX(sv) != 0.0;
9360             else
9361                 return sv_2bool(sv);
9362         }
9363     }
9364 }
9365
9366 /*
9367 =for apidoc sv_pvn_force
9368
9369 Get a sensible string out of the SV somehow.
9370 A private implementation of the C<SvPV_force> macro for compilers which
9371 can't cope with complex macro expressions.  Always use the macro instead.
9372
9373 =for apidoc sv_pvn_force_flags
9374
9375 Get a sensible string out of the SV somehow.
9376 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9377 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9378 implemented in terms of this function.
9379 You normally want to use the various wrapper macros instead: see
9380 C<SvPV_force> and C<SvPV_force_nomg>
9381
9382 =cut
9383 */
9384
9385 char *
9386 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9387 {
9388     dVAR;
9389
9390     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9391
9392     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9393     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9394         sv_force_normal_flags(sv, 0);
9395
9396     if (SvPOK(sv)) {
9397         if (lp)
9398             *lp = SvCUR(sv);
9399     }
9400     else {
9401         char *s;
9402         STRLEN len;
9403  
9404         if (SvTYPE(sv) > SVt_PVLV
9405             || isGV_with_GP(sv))
9406             /* diag_listed_as: Can't coerce %s to %s in %s */
9407             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9408                 OP_DESC(PL_op));
9409         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9410         if (!s) {
9411           s = (char *)"";
9412         }
9413         if (lp)
9414             *lp = len;
9415
9416         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9417             if (SvROK(sv))
9418                 sv_unref(sv);
9419             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9420             SvGROW(sv, len + 1);
9421             Move(s,SvPVX(sv),len,char);
9422             SvCUR_set(sv, len);
9423             SvPVX(sv)[len] = '\0';
9424         }
9425         if (!SvPOK(sv)) {
9426             SvPOK_on(sv);               /* validate pointer */
9427             SvTAINT(sv);
9428             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9429                                   PTR2UV(sv),SvPVX_const(sv)));
9430         }
9431     }
9432     (void)SvPOK_only_UTF8(sv);
9433     return SvPVX_mutable(sv);
9434 }
9435
9436 /*
9437 =for apidoc sv_pvbyten_force
9438
9439 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9440 instead.
9441
9442 =cut
9443 */
9444
9445 char *
9446 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9447 {
9448     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9449
9450     sv_pvn_force(sv,lp);
9451     sv_utf8_downgrade(sv,0);
9452     *lp = SvCUR(sv);
9453     return SvPVX(sv);
9454 }
9455
9456 /*
9457 =for apidoc sv_pvutf8n_force
9458
9459 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9460 instead.
9461
9462 =cut
9463 */
9464
9465 char *
9466 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9467 {
9468     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9469
9470     sv_pvn_force(sv,0);
9471     sv_utf8_upgrade_nomg(sv);
9472     *lp = SvCUR(sv);
9473     return SvPVX(sv);
9474 }
9475
9476 /*
9477 =for apidoc sv_reftype
9478
9479 Returns a string describing what the SV is a reference to.
9480
9481 =cut
9482 */
9483
9484 const char *
9485 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9486 {
9487     PERL_ARGS_ASSERT_SV_REFTYPE;
9488     if (ob && SvOBJECT(sv)) {
9489         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9490     }
9491     else {
9492         switch (SvTYPE(sv)) {
9493         case SVt_NULL:
9494         case SVt_IV:
9495         case SVt_NV:
9496         case SVt_PV:
9497         case SVt_PVIV:
9498         case SVt_PVNV:
9499         case SVt_PVMG:
9500                                 if (SvVOK(sv))
9501                                     return "VSTRING";
9502                                 if (SvROK(sv))
9503                                     return "REF";
9504                                 else
9505                                     return "SCALAR";
9506
9507         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9508                                 /* tied lvalues should appear to be
9509                                  * scalars for backwards compatibility */
9510                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9511                                     ? "SCALAR" : "LVALUE");
9512         case SVt_PVAV:          return "ARRAY";
9513         case SVt_PVHV:          return "HASH";
9514         case SVt_PVCV:          return "CODE";
9515         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9516                                     ? "GLOB" : "SCALAR");
9517         case SVt_PVFM:          return "FORMAT";
9518         case SVt_PVIO:          return "IO";
9519         case SVt_INVLIST:       return "INVLIST";
9520         case SVt_REGEXP:        return "REGEXP";
9521         default:                return "UNKNOWN";
9522         }
9523     }
9524 }
9525
9526 /*
9527 =for apidoc sv_ref
9528
9529 Returns a SV describing what the SV passed in is a reference to.
9530
9531 =cut
9532 */
9533
9534 SV *
9535 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9536 {
9537     PERL_ARGS_ASSERT_SV_REF;
9538
9539     if (!dst)
9540         dst = sv_newmortal();
9541
9542     if (ob && SvOBJECT(sv)) {
9543         HvNAME_get(SvSTASH(sv))
9544                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9545                     : sv_setpvn(dst, "__ANON__", 8);
9546     }
9547     else {
9548         const char * reftype = sv_reftype(sv, 0);
9549         sv_setpv(dst, reftype);
9550     }
9551     return dst;
9552 }
9553
9554 /*
9555 =for apidoc sv_isobject
9556
9557 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9558 object.  If the SV is not an RV, or if the object is not blessed, then this
9559 will return false.
9560
9561 =cut
9562 */
9563
9564 int
9565 Perl_sv_isobject(pTHX_ SV *sv)
9566 {
9567     if (!sv)
9568         return 0;
9569     SvGETMAGIC(sv);
9570     if (!SvROK(sv))
9571         return 0;
9572     sv = SvRV(sv);
9573     if (!SvOBJECT(sv))
9574         return 0;
9575     return 1;
9576 }
9577
9578 /*
9579 =for apidoc sv_isa
9580
9581 Returns a boolean indicating whether the SV is blessed into the specified
9582 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9583 an inheritance relationship.
9584
9585 =cut
9586 */
9587
9588 int
9589 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9590 {
9591     const char *hvname;
9592
9593     PERL_ARGS_ASSERT_SV_ISA;
9594
9595     if (!sv)
9596         return 0;
9597     SvGETMAGIC(sv);
9598     if (!SvROK(sv))
9599         return 0;
9600     sv = SvRV(sv);
9601     if (!SvOBJECT(sv))
9602         return 0;
9603     hvname = HvNAME_get(SvSTASH(sv));
9604     if (!hvname)
9605         return 0;
9606
9607     return strEQ(hvname, name);
9608 }
9609
9610 /*
9611 =for apidoc newSVrv
9612
9613 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9614 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9615 SV will be blessed in the specified package.  The new SV is returned and its
9616 reference count is 1. The reference count 1 is owned by C<rv>.
9617
9618 =cut
9619 */
9620
9621 SV*
9622 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9623 {
9624     dVAR;
9625     SV *sv;
9626
9627     PERL_ARGS_ASSERT_NEWSVRV;
9628
9629     new_SV(sv);
9630
9631     SV_CHECK_THINKFIRST_COW_DROP(rv);
9632
9633     if (SvTYPE(rv) >= SVt_PVMG) {
9634         const U32 refcnt = SvREFCNT(rv);
9635         SvREFCNT(rv) = 0;
9636         sv_clear(rv);
9637         SvFLAGS(rv) = 0;
9638         SvREFCNT(rv) = refcnt;
9639
9640         sv_upgrade(rv, SVt_IV);
9641     } else if (SvROK(rv)) {
9642         SvREFCNT_dec(SvRV(rv));
9643     } else {
9644         prepare_SV_for_RV(rv);
9645     }
9646
9647     SvOK_off(rv);
9648     SvRV_set(rv, sv);
9649     SvROK_on(rv);
9650
9651     if (classname) {
9652         HV* const stash = gv_stashpv(classname, GV_ADD);
9653         (void)sv_bless(rv, stash);
9654     }
9655     return sv;
9656 }
9657
9658 /*
9659 =for apidoc sv_setref_pv
9660
9661 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9662 argument will be upgraded to an RV.  That RV will be modified to point to
9663 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9664 into the SV.  The C<classname> argument indicates the package for the
9665 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9666 will have a reference count of 1, and the RV will be returned.
9667
9668 Do not use with other Perl types such as HV, AV, SV, CV, because those
9669 objects will become corrupted by the pointer copy process.
9670
9671 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9672
9673 =cut
9674 */
9675
9676 SV*
9677 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9678 {
9679     dVAR;
9680
9681     PERL_ARGS_ASSERT_SV_SETREF_PV;
9682
9683     if (!pv) {
9684         sv_setsv(rv, &PL_sv_undef);
9685         SvSETMAGIC(rv);
9686     }
9687     else
9688         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9689     return rv;
9690 }
9691
9692 /*
9693 =for apidoc sv_setref_iv
9694
9695 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9696 argument will be upgraded to an RV.  That RV will be modified to point to
9697 the new SV.  The C<classname> argument indicates the package for the
9698 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9699 will have a reference count of 1, and the RV will be returned.
9700
9701 =cut
9702 */
9703
9704 SV*
9705 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9706 {
9707     PERL_ARGS_ASSERT_SV_SETREF_IV;
9708
9709     sv_setiv(newSVrv(rv,classname), iv);
9710     return rv;
9711 }
9712
9713 /*
9714 =for apidoc sv_setref_uv
9715
9716 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9717 argument will be upgraded to an RV.  That RV will be modified to point to
9718 the new SV.  The C<classname> argument indicates the package for the
9719 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9720 will have a reference count of 1, and the RV will be returned.
9721
9722 =cut
9723 */
9724
9725 SV*
9726 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9727 {
9728     PERL_ARGS_ASSERT_SV_SETREF_UV;
9729
9730     sv_setuv(newSVrv(rv,classname), uv);
9731     return rv;
9732 }
9733
9734 /*
9735 =for apidoc sv_setref_nv
9736
9737 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9738 argument will be upgraded to an RV.  That RV will be modified to point to
9739 the new SV.  The C<classname> argument indicates the package for the
9740 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9741 will have a reference count of 1, and the RV will be returned.
9742
9743 =cut
9744 */
9745
9746 SV*
9747 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9748 {
9749     PERL_ARGS_ASSERT_SV_SETREF_NV;
9750
9751     sv_setnv(newSVrv(rv,classname), nv);
9752     return rv;
9753 }
9754
9755 /*
9756 =for apidoc sv_setref_pvn
9757
9758 Copies a string into a new SV, optionally blessing the SV.  The length of the
9759 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9760 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9761 argument indicates the package for the blessing.  Set C<classname> to
9762 C<NULL> to avoid the blessing.  The new SV will have a reference count
9763 of 1, and the RV will be returned.
9764
9765 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9766
9767 =cut
9768 */
9769
9770 SV*
9771 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9772                    const char *const pv, const STRLEN n)
9773 {
9774     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9775
9776     sv_setpvn(newSVrv(rv,classname), pv, n);
9777     return rv;
9778 }
9779
9780 /*
9781 =for apidoc sv_bless
9782
9783 Blesses an SV into a specified package.  The SV must be an RV.  The package
9784 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9785 of the SV is unaffected.
9786
9787 =cut
9788 */
9789
9790 SV*
9791 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9792 {
9793     dVAR;
9794     SV *tmpRef;
9795
9796     PERL_ARGS_ASSERT_SV_BLESS;
9797
9798     if (!SvROK(sv))
9799         Perl_croak(aTHX_ "Can't bless non-reference value");
9800     tmpRef = SvRV(sv);
9801     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9802         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9803             Perl_croak_no_modify();
9804         if (SvOBJECT(tmpRef)) {
9805             SvREFCNT_dec(SvSTASH(tmpRef));
9806         }
9807     }
9808     SvOBJECT_on(tmpRef);
9809     SvUPGRADE(tmpRef, SVt_PVMG);
9810     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9811
9812     if(SvSMAGICAL(tmpRef))
9813         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9814             mg_set(tmpRef);
9815
9816
9817
9818     return sv;
9819 }
9820
9821 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9822  * as it is after unglobbing it.
9823  */
9824
9825 PERL_STATIC_INLINE void
9826 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9827 {
9828     dVAR;
9829     void *xpvmg;
9830     HV *stash;
9831     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9832
9833     PERL_ARGS_ASSERT_SV_UNGLOB;
9834
9835     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9836     SvFAKE_off(sv);
9837     if (!(flags & SV_COW_DROP_PV))
9838         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9839
9840     if (GvGP(sv)) {
9841         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9842            && HvNAME_get(stash))
9843             mro_method_changed_in(stash);
9844         gp_free(MUTABLE_GV(sv));
9845     }
9846     if (GvSTASH(sv)) {
9847         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9848         GvSTASH(sv) = NULL;
9849     }
9850     GvMULTI_off(sv);
9851     if (GvNAME_HEK(sv)) {
9852         unshare_hek(GvNAME_HEK(sv));
9853     }
9854     isGV_with_GP_off(sv);
9855
9856     if(SvTYPE(sv) == SVt_PVGV) {
9857         /* need to keep SvANY(sv) in the right arena */
9858         xpvmg = new_XPVMG();
9859         StructCopy(SvANY(sv), xpvmg, XPVMG);
9860         del_XPVGV(SvANY(sv));
9861         SvANY(sv) = xpvmg;
9862
9863         SvFLAGS(sv) &= ~SVTYPEMASK;
9864         SvFLAGS(sv) |= SVt_PVMG;
9865     }
9866
9867     /* Intentionally not calling any local SET magic, as this isn't so much a
9868        set operation as merely an internal storage change.  */
9869     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9870     else sv_setsv_flags(sv, temp, 0);
9871
9872     if ((const GV *)sv == PL_last_in_gv)
9873         PL_last_in_gv = NULL;
9874     else if ((const GV *)sv == PL_statgv)
9875         PL_statgv = NULL;
9876 }
9877
9878 /*
9879 =for apidoc sv_unref_flags
9880
9881 Unsets the RV status of the SV, and decrements the reference count of
9882 whatever was being referenced by the RV.  This can almost be thought of
9883 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9884 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9885 (otherwise the decrementing is conditional on the reference count being
9886 different from one or the reference being a readonly SV).
9887 See C<SvROK_off>.
9888
9889 =cut
9890 */
9891
9892 void
9893 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9894 {
9895     SV* const target = SvRV(ref);
9896
9897     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9898
9899     if (SvWEAKREF(ref)) {
9900         sv_del_backref(target, ref);
9901         SvWEAKREF_off(ref);
9902         SvRV_set(ref, NULL);
9903         return;
9904     }
9905     SvRV_set(ref, NULL);
9906     SvROK_off(ref);
9907     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9908        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9909     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9910         SvREFCNT_dec_NN(target);
9911     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9912         sv_2mortal(target);     /* Schedule for freeing later */
9913 }
9914
9915 /*
9916 =for apidoc sv_untaint
9917
9918 Untaint an SV.  Use C<SvTAINTED_off> instead.
9919
9920 =cut
9921 */
9922
9923 void
9924 Perl_sv_untaint(pTHX_ SV *const sv)
9925 {
9926     PERL_ARGS_ASSERT_SV_UNTAINT;
9927
9928     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9929         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9930         if (mg)
9931             mg->mg_len &= ~1;
9932     }
9933 }
9934
9935 /*
9936 =for apidoc sv_tainted
9937
9938 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9939
9940 =cut
9941 */
9942
9943 bool
9944 Perl_sv_tainted(pTHX_ SV *const sv)
9945 {
9946     PERL_ARGS_ASSERT_SV_TAINTED;
9947
9948     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9949         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9950         if (mg && (mg->mg_len & 1) )
9951             return TRUE;
9952     }
9953     return FALSE;
9954 }
9955
9956 /*
9957 =for apidoc sv_setpviv
9958
9959 Copies an integer into the given SV, also updating its string value.
9960 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9961
9962 =cut
9963 */
9964
9965 void
9966 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9967 {
9968     char buf[TYPE_CHARS(UV)];
9969     char *ebuf;
9970     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9971
9972     PERL_ARGS_ASSERT_SV_SETPVIV;
9973
9974     sv_setpvn(sv, ptr, ebuf - ptr);
9975 }
9976
9977 /*
9978 =for apidoc sv_setpviv_mg
9979
9980 Like C<sv_setpviv>, but also handles 'set' magic.
9981
9982 =cut
9983 */
9984
9985 void
9986 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9987 {
9988     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9989
9990     sv_setpviv(sv, iv);
9991     SvSETMAGIC(sv);
9992 }
9993
9994 #if defined(PERL_IMPLICIT_CONTEXT)
9995
9996 /* pTHX_ magic can't cope with varargs, so this is a no-context
9997  * version of the main function, (which may itself be aliased to us).
9998  * Don't access this version directly.
9999  */
10000
10001 void
10002 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10003 {
10004     dTHX;
10005     va_list args;
10006
10007     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10008
10009     va_start(args, pat);
10010     sv_vsetpvf(sv, pat, &args);
10011     va_end(args);
10012 }
10013
10014 /* pTHX_ magic can't cope with varargs, so this is a no-context
10015  * version of the main function, (which may itself be aliased to us).
10016  * Don't access this version directly.
10017  */
10018
10019 void
10020 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10021 {
10022     dTHX;
10023     va_list args;
10024
10025     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10026
10027     va_start(args, pat);
10028     sv_vsetpvf_mg(sv, pat, &args);
10029     va_end(args);
10030 }
10031 #endif
10032
10033 /*
10034 =for apidoc sv_setpvf
10035
10036 Works like C<sv_catpvf> but copies the text into the SV instead of
10037 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10038
10039 =cut
10040 */
10041
10042 void
10043 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10044 {
10045     va_list args;
10046
10047     PERL_ARGS_ASSERT_SV_SETPVF;
10048
10049     va_start(args, pat);
10050     sv_vsetpvf(sv, pat, &args);
10051     va_end(args);
10052 }
10053
10054 /*
10055 =for apidoc sv_vsetpvf
10056
10057 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10058 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10059
10060 Usually used via its frontend C<sv_setpvf>.
10061
10062 =cut
10063 */
10064
10065 void
10066 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10067 {
10068     PERL_ARGS_ASSERT_SV_VSETPVF;
10069
10070     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10071 }
10072
10073 /*
10074 =for apidoc sv_setpvf_mg
10075
10076 Like C<sv_setpvf>, but also handles 'set' magic.
10077
10078 =cut
10079 */
10080
10081 void
10082 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10083 {
10084     va_list args;
10085
10086     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10087
10088     va_start(args, pat);
10089     sv_vsetpvf_mg(sv, pat, &args);
10090     va_end(args);
10091 }
10092
10093 /*
10094 =for apidoc sv_vsetpvf_mg
10095
10096 Like C<sv_vsetpvf>, but also handles 'set' magic.
10097
10098 Usually used via its frontend C<sv_setpvf_mg>.
10099
10100 =cut
10101 */
10102
10103 void
10104 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10105 {
10106     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10107
10108     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10109     SvSETMAGIC(sv);
10110 }
10111
10112 #if defined(PERL_IMPLICIT_CONTEXT)
10113
10114 /* pTHX_ magic can't cope with varargs, so this is a no-context
10115  * version of the main function, (which may itself be aliased to us).
10116  * Don't access this version directly.
10117  */
10118
10119 void
10120 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10121 {
10122     dTHX;
10123     va_list args;
10124
10125     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10126
10127     va_start(args, pat);
10128     sv_vcatpvf(sv, pat, &args);
10129     va_end(args);
10130 }
10131
10132 /* pTHX_ magic can't cope with varargs, so this is a no-context
10133  * version of the main function, (which may itself be aliased to us).
10134  * Don't access this version directly.
10135  */
10136
10137 void
10138 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10139 {
10140     dTHX;
10141     va_list args;
10142
10143     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10144
10145     va_start(args, pat);
10146     sv_vcatpvf_mg(sv, pat, &args);
10147     va_end(args);
10148 }
10149 #endif
10150
10151 /*
10152 =for apidoc sv_catpvf
10153
10154 Processes its arguments like C<sprintf> and appends the formatted
10155 output to an SV.  If the appended data contains "wide" characters
10156 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10157 and characters >255 formatted with %c), the original SV might get
10158 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10159 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10160 valid UTF-8; if the original SV was bytes, the pattern should be too.
10161
10162 =cut */
10163
10164 void
10165 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10166 {
10167     va_list args;
10168
10169     PERL_ARGS_ASSERT_SV_CATPVF;
10170
10171     va_start(args, pat);
10172     sv_vcatpvf(sv, pat, &args);
10173     va_end(args);
10174 }
10175
10176 /*
10177 =for apidoc sv_vcatpvf
10178
10179 Processes its arguments like C<vsprintf> and appends the formatted output
10180 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10181
10182 Usually used via its frontend C<sv_catpvf>.
10183
10184 =cut
10185 */
10186
10187 void
10188 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10189 {
10190     PERL_ARGS_ASSERT_SV_VCATPVF;
10191
10192     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10193 }
10194
10195 /*
10196 =for apidoc sv_catpvf_mg
10197
10198 Like C<sv_catpvf>, but also handles 'set' magic.
10199
10200 =cut
10201 */
10202
10203 void
10204 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10205 {
10206     va_list args;
10207
10208     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10209
10210     va_start(args, pat);
10211     sv_vcatpvf_mg(sv, pat, &args);
10212     va_end(args);
10213 }
10214
10215 /*
10216 =for apidoc sv_vcatpvf_mg
10217
10218 Like C<sv_vcatpvf>, but also handles 'set' magic.
10219
10220 Usually used via its frontend C<sv_catpvf_mg>.
10221
10222 =cut
10223 */
10224
10225 void
10226 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10227 {
10228     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10229
10230     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10231     SvSETMAGIC(sv);
10232 }
10233
10234 /*
10235 =for apidoc sv_vsetpvfn
10236
10237 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10238 appending it.
10239
10240 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10241
10242 =cut
10243 */
10244
10245 void
10246 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10247                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10248 {
10249     PERL_ARGS_ASSERT_SV_VSETPVFN;
10250
10251     sv_setpvs(sv, "");
10252     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10253 }
10254
10255
10256 /*
10257  * Warn of missing argument to sprintf, and then return a defined value
10258  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10259  */
10260 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10261 STATIC SV*
10262 S_vcatpvfn_missing_argument(pTHX) {
10263     if (ckWARN(WARN_MISSING)) {
10264         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10265                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10266     }
10267     return &PL_sv_no;
10268 }
10269
10270
10271 STATIC I32
10272 S_expect_number(pTHX_ char **const pattern)
10273 {
10274     dVAR;
10275     I32 var = 0;
10276
10277     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10278
10279     switch (**pattern) {
10280     case '1': case '2': case '3':
10281     case '4': case '5': case '6':
10282     case '7': case '8': case '9':
10283         var = *(*pattern)++ - '0';
10284         while (isDIGIT(**pattern)) {
10285             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10286             if (tmp < var)
10287                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10288             var = tmp;
10289         }
10290     }
10291     return var;
10292 }
10293
10294 STATIC char *
10295 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10296 {
10297     const int neg = nv < 0;
10298     UV uv;
10299
10300     PERL_ARGS_ASSERT_F0CONVERT;
10301
10302     if (neg)
10303         nv = -nv;
10304     if (nv < UV_MAX) {
10305         char *p = endbuf;
10306         nv += 0.5;
10307         uv = (UV)nv;
10308         if (uv & 1 && uv == nv)
10309             uv--;                       /* Round to even */
10310         do {
10311             const unsigned dig = uv % 10;
10312             *--p = '0' + dig;
10313         } while (uv /= 10);
10314         if (neg)
10315             *--p = '-';
10316         *len = endbuf - p;
10317         return p;
10318     }
10319     return NULL;
10320 }
10321
10322
10323 /*
10324 =for apidoc sv_vcatpvfn
10325
10326 =for apidoc sv_vcatpvfn_flags
10327
10328 Processes its arguments like C<vsprintf> and appends the formatted output
10329 to an SV.  Uses an array of SVs if the C style variable argument list is
10330 missing (NULL).  When running with taint checks enabled, indicates via
10331 C<maybe_tainted> if results are untrustworthy (often due to the use of
10332 locales).
10333
10334 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10335
10336 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10337
10338 =cut
10339 */
10340
10341 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10342                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10343                         vec_utf8 = DO_UTF8(vecsv);
10344
10345 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10346
10347 void
10348 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10349                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10350 {
10351     PERL_ARGS_ASSERT_SV_VCATPVFN;
10352
10353     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10354 }
10355
10356 void
10357 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10358                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10359                        const U32 flags)
10360 {
10361     dVAR;
10362     char *p;
10363     char *q;
10364     const char *patend;
10365     STRLEN origlen;
10366     I32 svix = 0;
10367     static const char nullstr[] = "(null)";
10368     SV *argsv = NULL;
10369     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10370     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10371     SV *nsv = NULL;
10372     /* Times 4: a decimal digit takes more than 3 binary digits.
10373      * NV_DIG: mantissa takes than many decimal digits.
10374      * Plus 32: Playing safe. */
10375     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10376     /* large enough for "%#.#f" --chip */
10377     /* what about long double NVs? --jhi */
10378
10379     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10380     PERL_UNUSED_ARG(maybe_tainted);
10381
10382     if (flags & SV_GMAGIC)
10383         SvGETMAGIC(sv);
10384
10385     /* no matter what, this is a string now */
10386     (void)SvPV_force_nomg(sv, origlen);
10387
10388     /* special-case "", "%s", and "%-p" (SVf - see below) */
10389     if (patlen == 0)
10390         return;
10391     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10392         if (args) {
10393             const char * const s = va_arg(*args, char*);
10394             sv_catpv_nomg(sv, s ? s : nullstr);
10395         }
10396         else if (svix < svmax) {
10397             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10398             SvGETMAGIC(*svargs);
10399             sv_catsv_nomg(sv, *svargs);
10400         }
10401         else
10402             S_vcatpvfn_missing_argument(aTHX);
10403         return;
10404     }
10405     if (args && patlen == 3 && pat[0] == '%' &&
10406                 pat[1] == '-' && pat[2] == 'p') {
10407         argsv = MUTABLE_SV(va_arg(*args, void*));
10408         sv_catsv_nomg(sv, argsv);
10409         return;
10410     }
10411
10412 #ifndef USE_LONG_DOUBLE
10413     /* special-case "%.<number>[gf]" */
10414     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10415          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10416         unsigned digits = 0;
10417         const char *pp;
10418
10419         pp = pat + 2;
10420         while (*pp >= '0' && *pp <= '9')
10421             digits = 10 * digits + (*pp++ - '0');
10422         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10423             const NV nv = SvNV(*svargs);
10424             if (*pp == 'g') {
10425                 /* Add check for digits != 0 because it seems that some
10426                    gconverts are buggy in this case, and we don't yet have
10427                    a Configure test for this.  */
10428                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10429                      /* 0, point, slack */
10430                     Gconvert(nv, (int)digits, 0, ebuf);
10431                     sv_catpv_nomg(sv, ebuf);
10432                     if (*ebuf)  /* May return an empty string for digits==0 */
10433                         return;
10434                 }
10435             } else if (!digits) {
10436                 STRLEN l;
10437
10438                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10439                     sv_catpvn_nomg(sv, p, l);
10440                     return;
10441                 }
10442             }
10443         }
10444     }
10445 #endif /* !USE_LONG_DOUBLE */
10446
10447     if (!args && svix < svmax && DO_UTF8(*svargs))
10448         has_utf8 = TRUE;
10449
10450     patend = (char*)pat + patlen;
10451     for (p = (char*)pat; p < patend; p = q) {
10452         bool alt = FALSE;
10453         bool left = FALSE;
10454         bool vectorize = FALSE;
10455         bool vectorarg = FALSE;
10456         bool vec_utf8 = FALSE;
10457         char fill = ' ';
10458         char plus = 0;
10459         char intsize = 0;
10460         STRLEN width = 0;
10461         STRLEN zeros = 0;
10462         bool has_precis = FALSE;
10463         STRLEN precis = 0;
10464         const I32 osvix = svix;
10465         bool is_utf8 = FALSE;  /* is this item utf8?   */
10466 #ifdef HAS_LDBL_SPRINTF_BUG
10467         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10468            with sfio - Allen <allens@cpan.org> */
10469         bool fix_ldbl_sprintf_bug = FALSE;
10470 #endif
10471
10472         char esignbuf[4];
10473         U8 utf8buf[UTF8_MAXBYTES+1];
10474         STRLEN esignlen = 0;
10475
10476         const char *eptr = NULL;
10477         const char *fmtstart;
10478         STRLEN elen = 0;
10479         SV *vecsv = NULL;
10480         const U8 *vecstr = NULL;
10481         STRLEN veclen = 0;
10482         char c = 0;
10483         int i;
10484         unsigned base = 0;
10485         IV iv = 0;
10486         UV uv = 0;
10487         /* we need a long double target in case HAS_LONG_DOUBLE but
10488            not USE_LONG_DOUBLE
10489         */
10490 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10491         long double nv;
10492 #else
10493         NV nv;
10494 #endif
10495         STRLEN have;
10496         STRLEN need;
10497         STRLEN gap;
10498         const char *dotstr = ".";
10499         STRLEN dotstrlen = 1;
10500         I32 efix = 0; /* explicit format parameter index */
10501         I32 ewix = 0; /* explicit width index */
10502         I32 epix = 0; /* explicit precision index */
10503         I32 evix = 0; /* explicit vector index */
10504         bool asterisk = FALSE;
10505
10506         /* echo everything up to the next format specification */
10507         for (q = p; q < patend && *q != '%'; ++q) ;
10508         if (q > p) {
10509             if (has_utf8 && !pat_utf8)
10510                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10511             else
10512                 sv_catpvn_nomg(sv, p, q - p);
10513             p = q;
10514         }
10515         if (q++ >= patend)
10516             break;
10517
10518         fmtstart = q;
10519
10520 /*
10521     We allow format specification elements in this order:
10522         \d+\$              explicit format parameter index
10523         [-+ 0#]+           flags
10524         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10525         0                  flag (as above): repeated to allow "v02"     
10526         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10527         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10528         [hlqLV]            size
10529     [%bcdefginopsuxDFOUX] format (mandatory)
10530 */
10531
10532         if (args) {
10533 /*  
10534         As of perl5.9.3, printf format checking is on by default.
10535         Internally, perl uses %p formats to provide an escape to
10536         some extended formatting.  This block deals with those
10537         extensions: if it does not match, (char*)q is reset and
10538         the normal format processing code is used.
10539
10540         Currently defined extensions are:
10541                 %p              include pointer address (standard)      
10542                 %-p     (SVf)   include an SV (previously %_)
10543                 %-<num>p        include an SV with precision <num>      
10544                 %2p             include a HEK
10545                 %3p             include a HEK with precision of 256
10546                 %4p             char* preceded by utf8 flag and length
10547                 %<num>p         (where num is 1 or > 4) reserved for future
10548                                 extensions
10549
10550         Robin Barker 2005-07-14 (but modified since)
10551
10552                 %1p     (VDf)   removed.  RMB 2007-10-19
10553 */
10554             char* r = q; 
10555             bool sv = FALSE;    
10556             STRLEN n = 0;
10557             if (*q == '-')
10558                 sv = *q++;
10559             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
10560                 /* The argument has already gone through cBOOL, so the cast
10561                    is safe. */
10562                 is_utf8 = (bool)va_arg(*args, int);
10563                 elen = va_arg(*args, UV);
10564                 eptr = va_arg(*args, char *);
10565                 q += sizeof(UTF8f)-1;
10566                 goto string;
10567             }
10568             n = expect_number(&q);
10569             if (*q++ == 'p') {
10570                 if (sv) {                       /* SVf */
10571                     if (n) {
10572                         precis = n;
10573                         has_precis = TRUE;
10574                     }
10575                     argsv = MUTABLE_SV(va_arg(*args, void*));
10576                     eptr = SvPV_const(argsv, elen);
10577                     if (DO_UTF8(argsv))
10578                         is_utf8 = TRUE;
10579                     goto string;
10580                 }
10581                 else if (n==2 || n==3) {        /* HEKf */
10582                     HEK * const hek = va_arg(*args, HEK *);
10583                     eptr = HEK_KEY(hek);
10584                     elen = HEK_LEN(hek);
10585                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10586                     if (n==3) precis = 256, has_precis = TRUE;
10587                     goto string;
10588                 }
10589                 else if (n) {
10590                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10591                                      "internal %%<num>p might conflict with future printf extensions");
10592                 }
10593             }
10594             q = r; 
10595         }
10596
10597         if ( (width = expect_number(&q)) ) {
10598             if (*q == '$') {
10599                 ++q;
10600                 efix = width;
10601             } else {
10602                 goto gotwidth;
10603             }
10604         }
10605
10606         /* FLAGS */
10607
10608         while (*q) {
10609             switch (*q) {
10610             case ' ':
10611             case '+':
10612                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10613                     q++;
10614                 else
10615                     plus = *q++;
10616                 continue;
10617
10618             case '-':
10619                 left = TRUE;
10620                 q++;
10621                 continue;
10622
10623             case '0':
10624                 fill = *q++;
10625                 continue;
10626
10627             case '#':
10628                 alt = TRUE;
10629                 q++;
10630                 continue;
10631
10632             default:
10633                 break;
10634             }
10635             break;
10636         }
10637
10638       tryasterisk:
10639         if (*q == '*') {
10640             q++;
10641             if ( (ewix = expect_number(&q)) )
10642                 if (*q++ != '$')
10643                     goto unknown;
10644             asterisk = TRUE;
10645         }
10646         if (*q == 'v') {
10647             q++;
10648             if (vectorize)
10649                 goto unknown;
10650             if ((vectorarg = asterisk)) {
10651                 evix = ewix;
10652                 ewix = 0;
10653                 asterisk = FALSE;
10654             }
10655             vectorize = TRUE;
10656             goto tryasterisk;
10657         }
10658
10659         if (!asterisk)
10660         {
10661             if( *q == '0' )
10662                 fill = *q++;
10663             width = expect_number(&q);
10664         }
10665
10666         if (vectorize && vectorarg) {
10667             /* vectorizing, but not with the default "." */
10668             if (args)
10669                 vecsv = va_arg(*args, SV*);
10670             else if (evix) {
10671                 vecsv = (evix > 0 && evix <= svmax)
10672                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10673             } else {
10674                 vecsv = svix < svmax
10675                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10676             }
10677             dotstr = SvPV_const(vecsv, dotstrlen);
10678             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10679                bad with tied or overloaded values that return UTF8.  */
10680             if (DO_UTF8(vecsv))
10681                 is_utf8 = TRUE;
10682             else if (has_utf8) {
10683                 vecsv = sv_mortalcopy(vecsv);
10684                 sv_utf8_upgrade(vecsv);
10685                 dotstr = SvPV_const(vecsv, dotstrlen);
10686                 is_utf8 = TRUE;
10687             }               
10688         }
10689
10690         if (asterisk) {
10691             if (args)
10692                 i = va_arg(*args, int);
10693             else
10694                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10695                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10696             left |= (i < 0);
10697             width = (i < 0) ? -i : i;
10698         }
10699       gotwidth:
10700
10701         /* PRECISION */
10702
10703         if (*q == '.') {
10704             q++;
10705             if (*q == '*') {
10706                 q++;
10707                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10708                     goto unknown;
10709                 /* XXX: todo, support specified precision parameter */
10710                 if (epix)
10711                     goto unknown;
10712                 if (args)
10713                     i = va_arg(*args, int);
10714                 else
10715                     i = (ewix ? ewix <= svmax : svix < svmax)
10716                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10717                 precis = i;
10718                 has_precis = !(i < 0);
10719             }
10720             else {
10721                 precis = 0;
10722                 while (isDIGIT(*q))
10723                     precis = precis * 10 + (*q++ - '0');
10724                 has_precis = TRUE;
10725             }
10726         }
10727
10728         if (vectorize) {
10729             if (args) {
10730                 VECTORIZE_ARGS
10731             }
10732             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10733                 vecsv = svargs[efix ? efix-1 : svix++];
10734                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10735                 vec_utf8 = DO_UTF8(vecsv);
10736
10737                 /* if this is a version object, we need to convert
10738                  * back into v-string notation and then let the
10739                  * vectorize happen normally
10740                  */
10741                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10742                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10743                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10744                         "vector argument not supported with alpha versions");
10745                         goto vdblank;
10746                     }
10747                     vecsv = sv_newmortal();
10748                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10749                                  vecsv);
10750                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10751                     vec_utf8 = DO_UTF8(vecsv);
10752                 }
10753             }
10754             else {
10755               vdblank:
10756                 vecstr = (U8*)"";
10757                 veclen = 0;
10758             }
10759         }
10760
10761         /* SIZE */
10762
10763         switch (*q) {
10764 #ifdef WIN32
10765         case 'I':                       /* Ix, I32x, and I64x */
10766 #  ifdef USE_64_BIT_INT
10767             if (q[1] == '6' && q[2] == '4') {
10768                 q += 3;
10769                 intsize = 'q';
10770                 break;
10771             }
10772 #  endif
10773             if (q[1] == '3' && q[2] == '2') {
10774                 q += 3;
10775                 break;
10776             }
10777 #  ifdef USE_64_BIT_INT
10778             intsize = 'q';
10779 #  endif
10780             q++;
10781             break;
10782 #endif
10783 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10784         case 'L':                       /* Ld */
10785             /*FALLTHROUGH*/
10786 #ifdef HAS_QUAD
10787         case 'q':                       /* qd */
10788 #endif
10789             intsize = 'q';
10790             q++;
10791             break;
10792 #endif
10793         case 'l':
10794             ++q;
10795 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10796             if (*q == 'l') {    /* lld, llf */
10797                 intsize = 'q';
10798                 ++q;
10799             }
10800             else
10801 #endif
10802                 intsize = 'l';
10803             break;
10804         case 'h':
10805             if (*++q == 'h') {  /* hhd, hhu */
10806                 intsize = 'c';
10807                 ++q;
10808             }
10809             else
10810                 intsize = 'h';
10811             break;
10812         case 'V':
10813         case 'z':
10814         case 't':
10815 #if HAS_C99
10816         case 'j':
10817 #endif
10818             intsize = *q++;
10819             break;
10820         }
10821
10822         /* CONVERSION */
10823
10824         if (*q == '%') {
10825             eptr = q++;
10826             elen = 1;
10827             if (vectorize) {
10828                 c = '%';
10829                 goto unknown;
10830             }
10831             goto string;
10832         }
10833
10834         if (!vectorize && !args) {
10835             if (efix) {
10836                 const I32 i = efix-1;
10837                 argsv = (i >= 0 && i < svmax)
10838                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10839             } else {
10840                 argsv = (svix >= 0 && svix < svmax)
10841                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10842             }
10843         }
10844
10845         switch (c = *q++) {
10846
10847             /* STRINGS */
10848
10849         case 'c':
10850             if (vectorize)
10851                 goto unknown;
10852             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10853             if ((uv > 255 ||
10854                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10855                 && !IN_BYTES) {
10856                 eptr = (char*)utf8buf;
10857                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10858                 is_utf8 = TRUE;
10859             }
10860             else {
10861                 c = (char)uv;
10862                 eptr = &c;
10863                 elen = 1;
10864             }
10865             goto string;
10866
10867         case 's':
10868             if (vectorize)
10869                 goto unknown;
10870             if (args) {
10871                 eptr = va_arg(*args, char*);
10872                 if (eptr)
10873                     elen = strlen(eptr);
10874                 else {
10875                     eptr = (char *)nullstr;
10876                     elen = sizeof nullstr - 1;
10877                 }
10878             }
10879             else {
10880                 eptr = SvPV_const(argsv, elen);
10881                 if (DO_UTF8(argsv)) {
10882                     STRLEN old_precis = precis;
10883                     if (has_precis && precis < elen) {
10884                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10885                         STRLEN p = precis > ulen ? ulen : precis;
10886                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10887                                                         /* sticks at end */
10888                     }
10889                     if (width) { /* fudge width (can't fudge elen) */
10890                         if (has_precis && precis < elen)
10891                             width += precis - old_precis;
10892                         else
10893                             width +=
10894                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10895                     }
10896                     is_utf8 = TRUE;
10897                 }
10898             }
10899
10900         string:
10901             if (has_precis && precis < elen)
10902                 elen = precis;
10903             break;
10904
10905             /* INTEGERS */
10906
10907         case 'p':
10908             if (alt || vectorize)
10909                 goto unknown;
10910             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10911             base = 16;
10912             goto integer;
10913
10914         case 'D':
10915 #ifdef IV_IS_QUAD
10916             intsize = 'q';
10917 #else
10918             intsize = 'l';
10919 #endif
10920             /*FALLTHROUGH*/
10921         case 'd':
10922         case 'i':
10923 #if vdNUMBER
10924         format_vd:
10925 #endif
10926             if (vectorize) {
10927                 STRLEN ulen;
10928                 if (!veclen)
10929                     continue;
10930                 if (vec_utf8)
10931                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10932                                         UTF8_ALLOW_ANYUV);
10933                 else {
10934                     uv = *vecstr;
10935                     ulen = 1;
10936                 }
10937                 vecstr += ulen;
10938                 veclen -= ulen;
10939                 if (plus)
10940                      esignbuf[esignlen++] = plus;
10941             }
10942             else if (args) {
10943                 switch (intsize) {
10944                 case 'c':       iv = (char)va_arg(*args, int); break;
10945                 case 'h':       iv = (short)va_arg(*args, int); break;
10946                 case 'l':       iv = va_arg(*args, long); break;
10947                 case 'V':       iv = va_arg(*args, IV); break;
10948                 case 'z':       iv = va_arg(*args, SSize_t); break;
10949                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10950                 default:        iv = va_arg(*args, int); break;
10951 #if HAS_C99
10952                 case 'j':       iv = va_arg(*args, intmax_t); break;
10953 #endif
10954                 case 'q':
10955 #ifdef HAS_QUAD
10956                                 iv = va_arg(*args, Quad_t); break;
10957 #else
10958                                 goto unknown;
10959 #endif
10960                 }
10961             }
10962             else {
10963                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10964                 switch (intsize) {
10965                 case 'c':       iv = (char)tiv; break;
10966                 case 'h':       iv = (short)tiv; break;
10967                 case 'l':       iv = (long)tiv; break;
10968                 case 'V':
10969                 default:        iv = tiv; break;
10970                 case 'q':
10971 #ifdef HAS_QUAD
10972                                 iv = (Quad_t)tiv; break;
10973 #else
10974                                 goto unknown;
10975 #endif
10976                 }
10977             }
10978             if ( !vectorize )   /* we already set uv above */
10979             {
10980                 if (iv >= 0) {
10981                     uv = iv;
10982                     if (plus)
10983                         esignbuf[esignlen++] = plus;
10984                 }
10985                 else {
10986                     uv = -iv;
10987                     esignbuf[esignlen++] = '-';
10988                 }
10989             }
10990             base = 10;
10991             goto integer;
10992
10993         case 'U':
10994 #ifdef IV_IS_QUAD
10995             intsize = 'q';
10996 #else
10997             intsize = 'l';
10998 #endif
10999             /*FALLTHROUGH*/
11000         case 'u':
11001             base = 10;
11002             goto uns_integer;
11003
11004         case 'B':
11005         case 'b':
11006             base = 2;
11007             goto uns_integer;
11008
11009         case 'O':
11010 #ifdef IV_IS_QUAD
11011             intsize = 'q';
11012 #else
11013             intsize = 'l';
11014 #endif
11015             /*FALLTHROUGH*/
11016         case 'o':
11017             base = 8;
11018             goto uns_integer;
11019
11020         case 'X':
11021         case 'x':
11022             base = 16;
11023
11024         uns_integer:
11025             if (vectorize) {
11026                 STRLEN ulen;
11027         vector:
11028                 if (!veclen)
11029                     continue;
11030                 if (vec_utf8)
11031                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11032                                         UTF8_ALLOW_ANYUV);
11033                 else {
11034                     uv = *vecstr;
11035                     ulen = 1;
11036                 }
11037                 vecstr += ulen;
11038                 veclen -= ulen;
11039             }
11040             else if (args) {
11041                 switch (intsize) {
11042                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11043                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11044                 case 'l':  uv = va_arg(*args, unsigned long); break;
11045                 case 'V':  uv = va_arg(*args, UV); break;
11046                 case 'z':  uv = va_arg(*args, Size_t); break;
11047                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11048 #if HAS_C99
11049                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11050 #endif
11051                 default:   uv = va_arg(*args, unsigned); break;
11052                 case 'q':
11053 #ifdef HAS_QUAD
11054                            uv = va_arg(*args, Uquad_t); break;
11055 #else
11056                            goto unknown;
11057 #endif
11058                 }
11059             }
11060             else {
11061                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
11062                 switch (intsize) {
11063                 case 'c':       uv = (unsigned char)tuv; break;
11064                 case 'h':       uv = (unsigned short)tuv; break;
11065                 case 'l':       uv = (unsigned long)tuv; break;
11066                 case 'V':
11067                 default:        uv = tuv; break;
11068                 case 'q':
11069 #ifdef HAS_QUAD
11070                                 uv = (Uquad_t)tuv; break;
11071 #else
11072                                 goto unknown;
11073 #endif
11074                 }
11075             }
11076
11077         integer:
11078             {
11079                 char *ptr = ebuf + sizeof ebuf;
11080                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11081                 zeros = 0;
11082
11083                 switch (base) {
11084                     unsigned dig;
11085                 case 16:
11086                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11087                     do {
11088                         dig = uv & 15;
11089                         *--ptr = p[dig];
11090                     } while (uv >>= 4);
11091                     if (tempalt) {
11092                         esignbuf[esignlen++] = '0';
11093                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11094                     }
11095                     break;
11096                 case 8:
11097                     do {
11098                         dig = uv & 7;
11099                         *--ptr = '0' + dig;
11100                     } while (uv >>= 3);
11101                     if (alt && *ptr != '0')
11102                         *--ptr = '0';
11103                     break;
11104                 case 2:
11105                     do {
11106                         dig = uv & 1;
11107                         *--ptr = '0' + dig;
11108                     } while (uv >>= 1);
11109                     if (tempalt) {
11110                         esignbuf[esignlen++] = '0';
11111                         esignbuf[esignlen++] = c;
11112                     }
11113                     break;
11114                 default:                /* it had better be ten or less */
11115                     do {
11116                         dig = uv % base;
11117                         *--ptr = '0' + dig;
11118                     } while (uv /= base);
11119                     break;
11120                 }
11121                 elen = (ebuf + sizeof ebuf) - ptr;
11122                 eptr = ptr;
11123                 if (has_precis) {
11124                     if (precis > elen)
11125                         zeros = precis - elen;
11126                     else if (precis == 0 && elen == 1 && *eptr == '0'
11127                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11128                         elen = 0;
11129
11130                 /* a precision nullifies the 0 flag. */
11131                     if (fill == '0')
11132                         fill = ' ';
11133                 }
11134             }
11135             break;
11136
11137             /* FLOATING POINT */
11138
11139         case 'F':
11140             c = 'f';            /* maybe %F isn't supported here */
11141             /*FALLTHROUGH*/
11142         case 'e': case 'E':
11143         case 'f':
11144         case 'g': case 'G':
11145             if (vectorize)
11146                 goto unknown;
11147
11148             /* This is evil, but floating point is even more evil */
11149
11150             /* for SV-style calling, we can only get NV
11151                for C-style calling, we assume %f is double;
11152                for simplicity we allow any of %Lf, %llf, %qf for long double
11153             */
11154             switch (intsize) {
11155             case 'V':
11156 #if defined(USE_LONG_DOUBLE)
11157                 intsize = 'q';
11158 #endif
11159                 break;
11160 /* [perl #20339] - we should accept and ignore %lf rather than die */
11161             case 'l':
11162                 /*FALLTHROUGH*/
11163             default:
11164 #if defined(USE_LONG_DOUBLE)
11165                 intsize = args ? 0 : 'q';
11166 #endif
11167                 break;
11168             case 'q':
11169 #if defined(HAS_LONG_DOUBLE)
11170                 break;
11171 #else
11172                 /*FALLTHROUGH*/
11173 #endif
11174             case 'c':
11175             case 'h':
11176             case 'z':
11177             case 't':
11178             case 'j':
11179                 goto unknown;
11180             }
11181
11182             /* now we need (long double) if intsize == 'q', else (double) */
11183             nv = (args) ?
11184 #if LONG_DOUBLESIZE > DOUBLESIZE
11185                 intsize == 'q' ?
11186                     va_arg(*args, long double) :
11187                     va_arg(*args, double)
11188 #else
11189                     va_arg(*args, double)
11190 #endif
11191                 : SvNV(argsv);
11192
11193             need = 0;
11194             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11195                else. frexp() has some unspecified behaviour for those three */
11196             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11197                 i = PERL_INT_MIN;
11198                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11199                    will cast our (long double) to (double) */
11200                 (void)Perl_frexp(nv, &i);
11201                 if (i == PERL_INT_MIN)
11202                     Perl_die(aTHX_ "panic: frexp");
11203                 if (i > 0)
11204                     need = BIT_DIGITS(i);
11205             }
11206             need += has_precis ? precis : 6; /* known default */
11207
11208             if (need < width)
11209                 need = width;
11210
11211 #ifdef HAS_LDBL_SPRINTF_BUG
11212             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11213                with sfio - Allen <allens@cpan.org> */
11214
11215 #  ifdef DBL_MAX
11216 #    define MY_DBL_MAX DBL_MAX
11217 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11218 #    if DOUBLESIZE >= 8
11219 #      define MY_DBL_MAX 1.7976931348623157E+308L
11220 #    else
11221 #      define MY_DBL_MAX 3.40282347E+38L
11222 #    endif
11223 #  endif
11224
11225 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11226 #    define MY_DBL_MAX_BUG 1L
11227 #  else
11228 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11229 #  endif
11230
11231 #  ifdef DBL_MIN
11232 #    define MY_DBL_MIN DBL_MIN
11233 #  else  /* XXX guessing! -Allen */
11234 #    if DOUBLESIZE >= 8
11235 #      define MY_DBL_MIN 2.2250738585072014E-308L
11236 #    else
11237 #      define MY_DBL_MIN 1.17549435E-38L
11238 #    endif
11239 #  endif
11240
11241             if ((intsize == 'q') && (c == 'f') &&
11242                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11243                 (need < DBL_DIG)) {
11244                 /* it's going to be short enough that
11245                  * long double precision is not needed */
11246
11247                 if ((nv <= 0L) && (nv >= -0L))
11248                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11249                 else {
11250                     /* would use Perl_fp_class as a double-check but not
11251                      * functional on IRIX - see perl.h comments */
11252
11253                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11254                         /* It's within the range that a double can represent */
11255 #if defined(DBL_MAX) && !defined(DBL_MIN)
11256                         if ((nv >= ((long double)1/DBL_MAX)) ||
11257                             (nv <= (-(long double)1/DBL_MAX)))
11258 #endif
11259                         fix_ldbl_sprintf_bug = TRUE;
11260                     }
11261                 }
11262                 if (fix_ldbl_sprintf_bug == TRUE) {
11263                     double temp;
11264
11265                     intsize = 0;
11266                     temp = (double)nv;
11267                     nv = (NV)temp;
11268                 }
11269             }
11270
11271 #  undef MY_DBL_MAX
11272 #  undef MY_DBL_MAX_BUG
11273 #  undef MY_DBL_MIN
11274
11275 #endif /* HAS_LDBL_SPRINTF_BUG */
11276
11277             need += 20; /* fudge factor */
11278             if (PL_efloatsize < need) {
11279                 Safefree(PL_efloatbuf);
11280                 PL_efloatsize = need + 20; /* more fudge */
11281                 Newx(PL_efloatbuf, PL_efloatsize, char);
11282                 PL_efloatbuf[0] = '\0';
11283             }
11284
11285             if ( !(width || left || plus || alt) && fill != '0'
11286                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11287                 /* See earlier comment about buggy Gconvert when digits,
11288                    aka precis is 0  */
11289                 if ( c == 'g' && precis) {
11290                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11291                     /* May return an empty string for digits==0 */
11292                     if (*PL_efloatbuf) {
11293                         elen = strlen(PL_efloatbuf);
11294                         goto float_converted;
11295                     }
11296                 } else if ( c == 'f' && !precis) {
11297                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11298                         break;
11299                 }
11300             }
11301             {
11302                 char *ptr = ebuf + sizeof ebuf;
11303                 *--ptr = '\0';
11304                 *--ptr = c;
11305                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11306 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11307                 if (intsize == 'q') {
11308                     /* Copy the one or more characters in a long double
11309                      * format before the 'base' ([efgEFG]) character to
11310                      * the format string. */
11311                     static char const prifldbl[] = PERL_PRIfldbl;
11312                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11313                     while (p >= prifldbl) { *--ptr = *p--; }
11314                 }
11315 #endif
11316                 if (has_precis) {
11317                     base = precis;
11318                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11319                     *--ptr = '.';
11320                 }
11321                 if (width) {
11322                     base = width;
11323                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11324                 }
11325                 if (fill == '0')
11326                     *--ptr = fill;
11327                 if (left)
11328                     *--ptr = '-';
11329                 if (plus)
11330                     *--ptr = plus;
11331                 if (alt)
11332                     *--ptr = '#';
11333                 *--ptr = '%';
11334
11335                 /* No taint.  Otherwise we are in the strange situation
11336                  * where printf() taints but print($float) doesn't.
11337                  * --jhi */
11338 #if defined(HAS_LONG_DOUBLE)
11339                 elen = ((intsize == 'q')
11340                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11341                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11342 #else
11343                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11344 #endif
11345             }
11346         float_converted:
11347             eptr = PL_efloatbuf;
11348             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
11349                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
11350             {
11351                 is_utf8 = TRUE;
11352             }
11353
11354             break;
11355
11356             /* SPECIAL */
11357
11358         case 'n':
11359             if (vectorize)
11360                 goto unknown;
11361             i = SvCUR(sv) - origlen;
11362             if (args) {
11363                 switch (intsize) {
11364                 case 'c':       *(va_arg(*args, char*)) = i; break;
11365                 case 'h':       *(va_arg(*args, short*)) = i; break;
11366                 default:        *(va_arg(*args, int*)) = i; break;
11367                 case 'l':       *(va_arg(*args, long*)) = i; break;
11368                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11369                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11370                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11371 #if HAS_C99
11372                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11373 #endif
11374                 case 'q':
11375 #ifdef HAS_QUAD
11376                                 *(va_arg(*args, Quad_t*)) = i; break;
11377 #else
11378                                 goto unknown;
11379 #endif
11380                 }
11381             }
11382             else
11383                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11384             continue;   /* not "break" */
11385
11386             /* UNKNOWN */
11387
11388         default:
11389       unknown:
11390             if (!args
11391                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11392                 && ckWARN(WARN_PRINTF))
11393             {
11394                 SV * const msg = sv_newmortal();
11395                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11396                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11397                 if (fmtstart < patend) {
11398                     const char * const fmtend = q < patend ? q : patend;
11399                     const char * f;
11400                     sv_catpvs(msg, "\"%");
11401                     for (f = fmtstart; f < fmtend; f++) {
11402                         if (isPRINT(*f)) {
11403                             sv_catpvn_nomg(msg, f, 1);
11404                         } else {
11405                             Perl_sv_catpvf(aTHX_ msg,
11406                                            "\\%03"UVof, (UV)*f & 0xFF);
11407                         }
11408                     }
11409                     sv_catpvs(msg, "\"");
11410                 } else {
11411                     sv_catpvs(msg, "end of string");
11412                 }
11413                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11414             }
11415
11416             /* output mangled stuff ... */
11417             if (c == '\0')
11418                 --q;
11419             eptr = p;
11420             elen = q - p;
11421
11422             /* ... right here, because formatting flags should not apply */
11423             SvGROW(sv, SvCUR(sv) + elen + 1);
11424             p = SvEND(sv);
11425             Copy(eptr, p, elen, char);
11426             p += elen;
11427             *p = '\0';
11428             SvCUR_set(sv, p - SvPVX_const(sv));
11429             svix = osvix;
11430             continue;   /* not "break" */
11431         }
11432
11433         if (is_utf8 != has_utf8) {
11434             if (is_utf8) {
11435                 if (SvCUR(sv))
11436                     sv_utf8_upgrade(sv);
11437             }
11438             else {
11439                 const STRLEN old_elen = elen;
11440                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11441                 sv_utf8_upgrade(nsv);
11442                 eptr = SvPVX_const(nsv);
11443                 elen = SvCUR(nsv);
11444
11445                 if (width) { /* fudge width (can't fudge elen) */
11446                     width += elen - old_elen;
11447                 }
11448                 is_utf8 = TRUE;
11449             }
11450         }
11451
11452         have = esignlen + zeros + elen;
11453         if (have < zeros)
11454             croak_memory_wrap();
11455
11456         need = (have > width ? have : width);
11457         gap = need - have;
11458
11459         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11460             croak_memory_wrap();
11461         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11462         p = SvEND(sv);
11463         if (esignlen && fill == '0') {
11464             int i;
11465             for (i = 0; i < (int)esignlen; i++)
11466                 *p++ = esignbuf[i];
11467         }
11468         if (gap && !left) {
11469             memset(p, fill, gap);
11470             p += gap;
11471         }
11472         if (esignlen && fill != '0') {
11473             int i;
11474             for (i = 0; i < (int)esignlen; i++)
11475                 *p++ = esignbuf[i];
11476         }
11477         if (zeros) {
11478             int i;
11479             for (i = zeros; i; i--)
11480                 *p++ = '0';
11481         }
11482         if (elen) {
11483             Copy(eptr, p, elen, char);
11484             p += elen;
11485         }
11486         if (gap && left) {
11487             memset(p, ' ', gap);
11488             p += gap;
11489         }
11490         if (vectorize) {
11491             if (veclen) {
11492                 Copy(dotstr, p, dotstrlen, char);
11493                 p += dotstrlen;
11494             }
11495             else
11496                 vectorize = FALSE;              /* done iterating over vecstr */
11497         }
11498         if (is_utf8)
11499             has_utf8 = TRUE;
11500         if (has_utf8)
11501             SvUTF8_on(sv);
11502         *p = '\0';
11503         SvCUR_set(sv, p - SvPVX_const(sv));
11504         if (vectorize) {
11505             esignlen = 0;
11506             goto vector;
11507         }
11508     }
11509     SvTAINT(sv);
11510 }
11511
11512 /* =========================================================================
11513
11514 =head1 Cloning an interpreter
11515
11516 All the macros and functions in this section are for the private use of
11517 the main function, perl_clone().
11518
11519 The foo_dup() functions make an exact copy of an existing foo thingy.
11520 During the course of a cloning, a hash table is used to map old addresses
11521 to new addresses.  The table is created and manipulated with the
11522 ptr_table_* functions.
11523
11524 =cut
11525
11526  * =========================================================================*/
11527
11528
11529 #if defined(USE_ITHREADS)
11530
11531 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11532 #ifndef GpREFCNT_inc
11533 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11534 #endif
11535
11536
11537 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11538    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11539    If this changes, please unmerge ss_dup.
11540    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11541 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11542 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11543 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11544 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11545 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11546 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11547 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11548 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11549 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11550 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11551 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11552 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11553 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11554
11555 /* clone a parser */
11556
11557 yy_parser *
11558 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11559 {
11560     yy_parser *parser;
11561
11562     PERL_ARGS_ASSERT_PARSER_DUP;
11563
11564     if (!proto)
11565         return NULL;
11566
11567     /* look for it in the table first */
11568     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11569     if (parser)
11570         return parser;
11571
11572     /* create anew and remember what it is */
11573     Newxz(parser, 1, yy_parser);
11574     ptr_table_store(PL_ptr_table, proto, parser);
11575
11576     /* XXX these not yet duped */
11577     parser->old_parser = NULL;
11578     parser->stack = NULL;
11579     parser->ps = NULL;
11580     parser->stack_size = 0;
11581     /* XXX parser->stack->state = 0; */
11582
11583     /* XXX eventually, just Copy() most of the parser struct ? */
11584
11585     parser->lex_brackets = proto->lex_brackets;
11586     parser->lex_casemods = proto->lex_casemods;
11587     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11588                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11589     parser->lex_casestack = savepvn(proto->lex_casestack,
11590                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11591     parser->lex_defer   = proto->lex_defer;
11592     parser->lex_dojoin  = proto->lex_dojoin;
11593     parser->lex_expect  = proto->lex_expect;
11594     parser->lex_formbrack = proto->lex_formbrack;
11595     parser->lex_inpat   = proto->lex_inpat;
11596     parser->lex_inwhat  = proto->lex_inwhat;
11597     parser->lex_op      = proto->lex_op;
11598     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11599     parser->lex_starts  = proto->lex_starts;
11600     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11601     parser->multi_close = proto->multi_close;
11602     parser->multi_open  = proto->multi_open;
11603     parser->multi_start = proto->multi_start;
11604     parser->multi_end   = proto->multi_end;
11605     parser->preambled   = proto->preambled;
11606     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11607     parser->linestr     = sv_dup_inc(proto->linestr, param);
11608     parser->expect      = proto->expect;
11609     parser->copline     = proto->copline;
11610     parser->last_lop_op = proto->last_lop_op;
11611     parser->lex_state   = proto->lex_state;
11612     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11613     /* rsfp_filters entries have fake IoDIRP() */
11614     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11615     parser->in_my       = proto->in_my;
11616     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11617     parser->error_count = proto->error_count;
11618
11619
11620     parser->linestr     = sv_dup_inc(proto->linestr, param);
11621
11622     {
11623         char * const ols = SvPVX(proto->linestr);
11624         char * const ls  = SvPVX(parser->linestr);
11625
11626         parser->bufptr      = ls + (proto->bufptr >= ols ?
11627                                     proto->bufptr -  ols : 0);
11628         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11629                                     proto->oldbufptr -  ols : 0);
11630         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11631                                     proto->oldoldbufptr -  ols : 0);
11632         parser->linestart   = ls + (proto->linestart >= ols ?
11633                                     proto->linestart -  ols : 0);
11634         parser->last_uni    = ls + (proto->last_uni >= ols ?
11635                                     proto->last_uni -  ols : 0);
11636         parser->last_lop    = ls + (proto->last_lop >= ols ?
11637                                     proto->last_lop -  ols : 0);
11638
11639         parser->bufend      = ls + SvCUR(parser->linestr);
11640     }
11641
11642     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11643
11644
11645 #ifdef PERL_MAD
11646     parser->endwhite    = proto->endwhite;
11647     parser->faketokens  = proto->faketokens;
11648     parser->lasttoke    = proto->lasttoke;
11649     parser->nextwhite   = proto->nextwhite;
11650     parser->realtokenstart = proto->realtokenstart;
11651     parser->skipwhite   = proto->skipwhite;
11652     parser->thisclose   = proto->thisclose;
11653     parser->thismad     = proto->thismad;
11654     parser->thisopen    = proto->thisopen;
11655     parser->thisstuff   = proto->thisstuff;
11656     parser->thistoken   = proto->thistoken;
11657     parser->thiswhite   = proto->thiswhite;
11658
11659     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11660     parser->curforce    = proto->curforce;
11661 #else
11662     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11663     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11664     parser->nexttoke    = proto->nexttoke;
11665 #endif
11666
11667     /* XXX should clone saved_curcop here, but we aren't passed
11668      * proto_perl; so do it in perl_clone_using instead */
11669
11670     return parser;
11671 }
11672
11673
11674 /* duplicate a file handle */
11675
11676 PerlIO *
11677 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11678 {
11679     PerlIO *ret;
11680
11681     PERL_ARGS_ASSERT_FP_DUP;
11682     PERL_UNUSED_ARG(type);
11683
11684     if (!fp)
11685         return (PerlIO*)NULL;
11686
11687     /* look for it in the table first */
11688     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11689     if (ret)
11690         return ret;
11691
11692     /* create anew and remember what it is */
11693     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11694     ptr_table_store(PL_ptr_table, fp, ret);
11695     return ret;
11696 }
11697
11698 /* duplicate a directory handle */
11699
11700 DIR *
11701 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11702 {
11703     DIR *ret;
11704
11705 #ifdef HAS_FCHDIR
11706     DIR *pwd;
11707     const Direntry_t *dirent;
11708     char smallbuf[256];
11709     char *name = NULL;
11710     STRLEN len = 0;
11711     long pos;
11712 #endif
11713
11714     PERL_UNUSED_CONTEXT;
11715     PERL_ARGS_ASSERT_DIRP_DUP;
11716
11717     if (!dp)
11718         return (DIR*)NULL;
11719
11720     /* look for it in the table first */
11721     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11722     if (ret)
11723         return ret;
11724
11725 #ifdef HAS_FCHDIR
11726
11727     PERL_UNUSED_ARG(param);
11728
11729     /* create anew */
11730
11731     /* open the current directory (so we can switch back) */
11732     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11733
11734     /* chdir to our dir handle and open the present working directory */
11735     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11736         PerlDir_close(pwd);
11737         return (DIR *)NULL;
11738     }
11739     /* Now we should have two dir handles pointing to the same dir. */
11740
11741     /* Be nice to the calling code and chdir back to where we were. */
11742     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11743
11744     /* We have no need of the pwd handle any more. */
11745     PerlDir_close(pwd);
11746
11747 #ifdef DIRNAMLEN
11748 # define d_namlen(d) (d)->d_namlen
11749 #else
11750 # define d_namlen(d) strlen((d)->d_name)
11751 #endif
11752     /* Iterate once through dp, to get the file name at the current posi-
11753        tion. Then step back. */
11754     pos = PerlDir_tell(dp);
11755     if ((dirent = PerlDir_read(dp))) {
11756         len = d_namlen(dirent);
11757         if (len <= sizeof smallbuf) name = smallbuf;
11758         else Newx(name, len, char);
11759         Move(dirent->d_name, name, len, char);
11760     }
11761     PerlDir_seek(dp, pos);
11762
11763     /* Iterate through the new dir handle, till we find a file with the
11764        right name. */
11765     if (!dirent) /* just before the end */
11766         for(;;) {
11767             pos = PerlDir_tell(ret);
11768             if (PerlDir_read(ret)) continue; /* not there yet */
11769             PerlDir_seek(ret, pos); /* step back */
11770             break;
11771         }
11772     else {
11773         const long pos0 = PerlDir_tell(ret);
11774         for(;;) {
11775             pos = PerlDir_tell(ret);
11776             if ((dirent = PerlDir_read(ret))) {
11777                 if (len == d_namlen(dirent)
11778                  && memEQ(name, dirent->d_name, len)) {
11779                     /* found it */
11780                     PerlDir_seek(ret, pos); /* step back */
11781                     break;
11782                 }
11783                 /* else we are not there yet; keep iterating */
11784             }
11785             else { /* This is not meant to happen. The best we can do is
11786                       reset the iterator to the beginning. */
11787                 PerlDir_seek(ret, pos0);
11788                 break;
11789             }
11790         }
11791     }
11792 #undef d_namlen
11793
11794     if (name && name != smallbuf)
11795         Safefree(name);
11796 #endif
11797
11798 #ifdef WIN32
11799     ret = win32_dirp_dup(dp, param);
11800 #endif
11801
11802     /* pop it in the pointer table */
11803     if (ret)
11804         ptr_table_store(PL_ptr_table, dp, ret);
11805
11806     return ret;
11807 }
11808
11809 /* duplicate a typeglob */
11810
11811 GP *
11812 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11813 {
11814     GP *ret;
11815
11816     PERL_ARGS_ASSERT_GP_DUP;
11817
11818     if (!gp)
11819         return (GP*)NULL;
11820     /* look for it in the table first */
11821     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11822     if (ret)
11823         return ret;
11824
11825     /* create anew and remember what it is */
11826     Newxz(ret, 1, GP);
11827     ptr_table_store(PL_ptr_table, gp, ret);
11828
11829     /* clone */
11830     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11831        on Newxz() to do this for us.  */
11832     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11833     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11834     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11835     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11836     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11837     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11838     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11839     ret->gp_cvgen       = gp->gp_cvgen;
11840     ret->gp_line        = gp->gp_line;
11841     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11842     return ret;
11843 }
11844
11845 /* duplicate a chain of magic */
11846
11847 MAGIC *
11848 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11849 {
11850     MAGIC *mgret = NULL;
11851     MAGIC **mgprev_p = &mgret;
11852
11853     PERL_ARGS_ASSERT_MG_DUP;
11854
11855     for (; mg; mg = mg->mg_moremagic) {
11856         MAGIC *nmg;
11857
11858         if ((param->flags & CLONEf_JOIN_IN)
11859                 && mg->mg_type == PERL_MAGIC_backref)
11860             /* when joining, we let the individual SVs add themselves to
11861              * backref as needed. */
11862             continue;
11863
11864         Newx(nmg, 1, MAGIC);
11865         *mgprev_p = nmg;
11866         mgprev_p = &(nmg->mg_moremagic);
11867
11868         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11869            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11870            from the original commit adding Perl_mg_dup() - revision 4538.
11871            Similarly there is the annotation "XXX random ptr?" next to the
11872            assignment to nmg->mg_ptr.  */
11873         *nmg = *mg;
11874
11875         /* FIXME for plugins
11876         if (nmg->mg_type == PERL_MAGIC_qr) {
11877             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11878         }
11879         else
11880         */
11881         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11882                           ? nmg->mg_type == PERL_MAGIC_backref
11883                                 /* The backref AV has its reference
11884                                  * count deliberately bumped by 1 */
11885                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11886                                                     nmg->mg_obj, param))
11887                                 : sv_dup_inc(nmg->mg_obj, param)
11888                           : sv_dup(nmg->mg_obj, param);
11889
11890         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11891             if (nmg->mg_len > 0) {
11892                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11893                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11894                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11895                 {
11896                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11897                     sv_dup_inc_multiple((SV**)(namtp->table),
11898                                         (SV**)(namtp->table), NofAMmeth, param);
11899                 }
11900             }
11901             else if (nmg->mg_len == HEf_SVKEY)
11902                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11903         }
11904         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11905             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11906         }
11907     }
11908     return mgret;
11909 }
11910
11911 #endif /* USE_ITHREADS */
11912
11913 struct ptr_tbl_arena {
11914     struct ptr_tbl_arena *next;
11915     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11916 };
11917
11918 /* create a new pointer-mapping table */
11919
11920 PTR_TBL_t *
11921 Perl_ptr_table_new(pTHX)
11922 {
11923     PTR_TBL_t *tbl;
11924     PERL_UNUSED_CONTEXT;
11925
11926     Newx(tbl, 1, PTR_TBL_t);
11927     tbl->tbl_max        = 511;
11928     tbl->tbl_items      = 0;
11929     tbl->tbl_arena      = NULL;
11930     tbl->tbl_arena_next = NULL;
11931     tbl->tbl_arena_end  = NULL;
11932     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11933     return tbl;
11934 }
11935
11936 #define PTR_TABLE_HASH(ptr) \
11937   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11938
11939 /* map an existing pointer using a table */
11940
11941 STATIC PTR_TBL_ENT_t *
11942 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11943 {
11944     PTR_TBL_ENT_t *tblent;
11945     const UV hash = PTR_TABLE_HASH(sv);
11946
11947     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11948
11949     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11950     for (; tblent; tblent = tblent->next) {
11951         if (tblent->oldval == sv)
11952             return tblent;
11953     }
11954     return NULL;
11955 }
11956
11957 void *
11958 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11959 {
11960     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11961
11962     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11963     PERL_UNUSED_CONTEXT;
11964
11965     return tblent ? tblent->newval : NULL;
11966 }
11967
11968 /* add a new entry to a pointer-mapping table */
11969
11970 void
11971 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11972 {
11973     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11974
11975     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11976     PERL_UNUSED_CONTEXT;
11977
11978     if (tblent) {
11979         tblent->newval = newsv;
11980     } else {
11981         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11982
11983         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11984             struct ptr_tbl_arena *new_arena;
11985
11986             Newx(new_arena, 1, struct ptr_tbl_arena);
11987             new_arena->next = tbl->tbl_arena;
11988             tbl->tbl_arena = new_arena;
11989             tbl->tbl_arena_next = new_arena->array;
11990             tbl->tbl_arena_end = new_arena->array
11991                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11992         }
11993
11994         tblent = tbl->tbl_arena_next++;
11995
11996         tblent->oldval = oldsv;
11997         tblent->newval = newsv;
11998         tblent->next = tbl->tbl_ary[entry];
11999         tbl->tbl_ary[entry] = tblent;
12000         tbl->tbl_items++;
12001         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
12002             ptr_table_split(tbl);
12003     }
12004 }
12005
12006 /* double the hash bucket size of an existing ptr table */
12007
12008 void
12009 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
12010 {
12011     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
12012     const UV oldsize = tbl->tbl_max + 1;
12013     UV newsize = oldsize * 2;
12014     UV i;
12015
12016     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
12017     PERL_UNUSED_CONTEXT;
12018
12019     Renew(ary, newsize, PTR_TBL_ENT_t*);
12020     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
12021     tbl->tbl_max = --newsize;
12022     tbl->tbl_ary = ary;
12023     for (i=0; i < oldsize; i++, ary++) {
12024         PTR_TBL_ENT_t **entp = ary;
12025         PTR_TBL_ENT_t *ent = *ary;
12026         PTR_TBL_ENT_t **curentp;
12027         if (!ent)
12028             continue;
12029         curentp = ary + oldsize;
12030         do {
12031             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
12032                 *entp = ent->next;
12033                 ent->next = *curentp;
12034                 *curentp = ent;
12035             }
12036             else
12037                 entp = &ent->next;
12038             ent = *entp;
12039         } while (ent);
12040     }
12041 }
12042
12043 /* remove all the entries from a ptr table */
12044 /* Deprecated - will be removed post 5.14 */
12045
12046 void
12047 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
12048 {
12049     if (tbl && tbl->tbl_items) {
12050         struct ptr_tbl_arena *arena = tbl->tbl_arena;
12051
12052         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
12053
12054         while (arena) {
12055             struct ptr_tbl_arena *next = arena->next;
12056
12057             Safefree(arena);
12058             arena = next;
12059         };
12060
12061         tbl->tbl_items = 0;
12062         tbl->tbl_arena = NULL;
12063         tbl->tbl_arena_next = NULL;
12064         tbl->tbl_arena_end = NULL;
12065     }
12066 }
12067
12068 /* clear and free a ptr table */
12069
12070 void
12071 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
12072 {
12073     struct ptr_tbl_arena *arena;
12074
12075     if (!tbl) {
12076         return;
12077     }
12078
12079     arena = tbl->tbl_arena;
12080
12081     while (arena) {
12082         struct ptr_tbl_arena *next = arena->next;
12083
12084         Safefree(arena);
12085         arena = next;
12086     }
12087
12088     Safefree(tbl->tbl_ary);
12089     Safefree(tbl);
12090 }
12091
12092 #if defined(USE_ITHREADS)
12093
12094 void
12095 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
12096 {
12097     PERL_ARGS_ASSERT_RVPV_DUP;
12098
12099     assert(!isREGEXP(sstr));
12100     if (SvROK(sstr)) {
12101         if (SvWEAKREF(sstr)) {
12102             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
12103             if (param->flags & CLONEf_JOIN_IN) {
12104                 /* if joining, we add any back references individually rather
12105                  * than copying the whole backref array */
12106                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
12107             }
12108         }
12109         else
12110             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
12111     }
12112     else if (SvPVX_const(sstr)) {
12113         /* Has something there */
12114         if (SvLEN(sstr)) {
12115             /* Normal PV - clone whole allocated space */
12116             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
12117             /* sstr may not be that normal, but actually copy on write.
12118                But we are a true, independent SV, so:  */
12119             SvIsCOW_off(dstr);
12120         }
12121         else {
12122             /* Special case - not normally malloced for some reason */
12123             if (isGV_with_GP(sstr)) {
12124                 /* Don't need to do anything here.  */
12125             }
12126             else if ((SvIsCOW(sstr))) {
12127                 /* A "shared" PV - clone it as "shared" PV */
12128                 SvPV_set(dstr,
12129                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12130                                          param)));
12131             }
12132             else {
12133                 /* Some other special case - random pointer */
12134                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12135             }
12136         }
12137     }
12138     else {
12139         /* Copy the NULL */
12140         SvPV_set(dstr, NULL);
12141     }
12142 }
12143
12144 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12145 static SV **
12146 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12147                       SSize_t items, CLONE_PARAMS *const param)
12148 {
12149     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12150
12151     while (items-- > 0) {
12152         *dest++ = sv_dup_inc(*source++, param);
12153     }
12154
12155     return dest;
12156 }
12157
12158 /* duplicate an SV of any type (including AV, HV etc) */
12159
12160 static SV *
12161 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12162 {
12163     dVAR;
12164     SV *dstr;
12165
12166     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12167
12168     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12169 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12170         abort();
12171 #endif
12172         return NULL;
12173     }
12174     /* look for it in the table first */
12175     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12176     if (dstr)
12177         return dstr;
12178
12179     if(param->flags & CLONEf_JOIN_IN) {
12180         /** We are joining here so we don't want do clone
12181             something that is bad **/
12182         if (SvTYPE(sstr) == SVt_PVHV) {
12183             const HEK * const hvname = HvNAME_HEK(sstr);
12184             if (hvname) {
12185                 /** don't clone stashes if they already exist **/
12186                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12187                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12188                 ptr_table_store(PL_ptr_table, sstr, dstr);
12189                 return dstr;
12190             }
12191         }
12192         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12193             HV *stash = GvSTASH(sstr);
12194             const HEK * hvname;
12195             if (stash && (hvname = HvNAME_HEK(stash))) {
12196                 /** don't clone GVs if they already exist **/
12197                 SV **svp;
12198                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12199                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12200                 svp = hv_fetch(
12201                         stash, GvNAME(sstr),
12202                         GvNAMEUTF8(sstr)
12203                             ? -GvNAMELEN(sstr)
12204                             :  GvNAMELEN(sstr),
12205                         0
12206                       );
12207                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12208                     ptr_table_store(PL_ptr_table, sstr, *svp);
12209                     return *svp;
12210                 }
12211             }
12212         }
12213     }
12214
12215     /* create anew and remember what it is */
12216     new_SV(dstr);
12217
12218 #ifdef DEBUG_LEAKING_SCALARS
12219     dstr->sv_debug_optype = sstr->sv_debug_optype;
12220     dstr->sv_debug_line = sstr->sv_debug_line;
12221     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12222     dstr->sv_debug_parent = (SV*)sstr;
12223     FREE_SV_DEBUG_FILE(dstr);
12224     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12225 #endif
12226
12227     ptr_table_store(PL_ptr_table, sstr, dstr);
12228
12229     /* clone */
12230     SvFLAGS(dstr)       = SvFLAGS(sstr);
12231     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12232     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12233
12234 #ifdef DEBUGGING
12235     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12236         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12237                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12238 #endif
12239
12240     /* don't clone objects whose class has asked us not to */
12241     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12242         SvFLAGS(dstr) = 0;
12243         return dstr;
12244     }
12245
12246     switch (SvTYPE(sstr)) {
12247     case SVt_NULL:
12248         SvANY(dstr)     = NULL;
12249         break;
12250     case SVt_IV:
12251         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12252         if(SvROK(sstr)) {
12253             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12254         } else {
12255             SvIV_set(dstr, SvIVX(sstr));
12256         }
12257         break;
12258     case SVt_NV:
12259         SvANY(dstr)     = new_XNV();
12260         SvNV_set(dstr, SvNVX(sstr));
12261         break;
12262     default:
12263         {
12264             /* These are all the types that need complex bodies allocating.  */
12265             void *new_body;
12266             const svtype sv_type = SvTYPE(sstr);
12267             const struct body_details *const sv_type_details
12268                 = bodies_by_type + sv_type;
12269
12270             switch (sv_type) {
12271             default:
12272                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12273                 break;
12274
12275             case SVt_PVGV:
12276             case SVt_PVIO:
12277             case SVt_PVFM:
12278             case SVt_PVHV:
12279             case SVt_PVAV:
12280             case SVt_PVCV:
12281             case SVt_PVLV:
12282             case SVt_REGEXP:
12283             case SVt_PVMG:
12284             case SVt_PVNV:
12285             case SVt_PVIV:
12286             case SVt_INVLIST:
12287             case SVt_PV:
12288                 assert(sv_type_details->body_size);
12289                 if (sv_type_details->arena) {
12290                     new_body_inline(new_body, sv_type);
12291                     new_body
12292                         = (void*)((char*)new_body - sv_type_details->offset);
12293                 } else {
12294                     new_body = new_NOARENA(sv_type_details);
12295                 }
12296             }
12297             assert(new_body);
12298             SvANY(dstr) = new_body;
12299
12300 #ifndef PURIFY
12301             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12302                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12303                  sv_type_details->copy, char);
12304 #else
12305             Copy(((char*)SvANY(sstr)),
12306                  ((char*)SvANY(dstr)),
12307                  sv_type_details->body_size + sv_type_details->offset, char);
12308 #endif
12309
12310             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12311                 && !isGV_with_GP(dstr)
12312                 && !isREGEXP(dstr)
12313                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12314                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12315
12316             /* The Copy above means that all the source (unduplicated) pointers
12317                are now in the destination.  We can check the flags and the
12318                pointers in either, but it's possible that there's less cache
12319                missing by always going for the destination.
12320                FIXME - instrument and check that assumption  */
12321             if (sv_type >= SVt_PVMG) {
12322                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12323                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12324                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
12325                     NOOP;
12326                 } else if (SvMAGIC(dstr))
12327                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12328                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12329                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12330                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12331             }
12332
12333             /* The cast silences a GCC warning about unhandled types.  */
12334             switch ((int)sv_type) {
12335             case SVt_PV:
12336                 break;
12337             case SVt_PVIV:
12338                 break;
12339             case SVt_PVNV:
12340                 break;
12341             case SVt_PVMG:
12342                 break;
12343             case SVt_REGEXP:
12344               duprex:
12345                 /* FIXME for plugins */
12346                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12347                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12348                 break;
12349             case SVt_PVLV:
12350                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12351                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12352                     LvTARG(dstr) = dstr;
12353                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12354                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12355                 else
12356                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12357                 if (isREGEXP(sstr)) goto duprex;
12358             case SVt_PVGV:
12359                 /* non-GP case already handled above */
12360                 if(isGV_with_GP(sstr)) {
12361                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12362                     /* Don't call sv_add_backref here as it's going to be
12363                        created as part of the magic cloning of the symbol
12364                        table--unless this is during a join and the stash
12365                        is not actually being cloned.  */
12366                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12367                        at the point of this comment.  */
12368                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12369                     if (param->flags & CLONEf_JOIN_IN)
12370                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12371                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12372                     (void)GpREFCNT_inc(GvGP(dstr));
12373                 }
12374                 break;
12375             case SVt_PVIO:
12376                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12377                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12378                     /* I have no idea why fake dirp (rsfps)
12379                        should be treated differently but otherwise
12380                        we end up with leaks -- sky*/
12381                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12382                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12383                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12384                 } else {
12385                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12386                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12387                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12388                     if (IoDIRP(dstr)) {
12389                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12390                     } else {
12391                         NOOP;
12392                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12393                     }
12394                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12395                 }
12396                 if (IoOFP(dstr) == IoIFP(sstr))
12397                     IoOFP(dstr) = IoIFP(dstr);
12398                 else
12399                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12400                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12401                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12402                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12403                 break;
12404             case SVt_PVAV:
12405                 /* avoid cloning an empty array */
12406                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12407                     SV **dst_ary, **src_ary;
12408                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12409
12410                     src_ary = AvARRAY((const AV *)sstr);
12411                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12412                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12413                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12414                     AvALLOC((const AV *)dstr) = dst_ary;
12415                     if (AvREAL((const AV *)sstr)) {
12416                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12417                                                       param);
12418                     }
12419                     else {
12420                         while (items-- > 0)
12421                             *dst_ary++ = sv_dup(*src_ary++, param);
12422                     }
12423                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12424                     while (items-- > 0) {
12425                         *dst_ary++ = &PL_sv_undef;
12426                     }
12427                 }
12428                 else {
12429                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12430                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12431                     AvMAX(  (const AV *)dstr)   = -1;
12432                     AvFILLp((const AV *)dstr)   = -1;
12433                 }
12434                 break;
12435             case SVt_PVHV:
12436                 if (HvARRAY((const HV *)sstr)) {
12437                     STRLEN i = 0;
12438                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12439                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12440                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12441                     char *darray;
12442                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12443                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12444                         char);
12445                     HvARRAY(dstr) = (HE**)darray;
12446                     while (i <= sxhv->xhv_max) {
12447                         const HE * const source = HvARRAY(sstr)[i];
12448                         HvARRAY(dstr)[i] = source
12449                             ? he_dup(source, sharekeys, param) : 0;
12450                         ++i;
12451                     }
12452                     if (SvOOK(sstr)) {
12453                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12454                         struct xpvhv_aux * const daux = HvAUX(dstr);
12455                         /* This flag isn't copied.  */
12456                         SvOOK_on(dstr);
12457
12458                         if (saux->xhv_name_count) {
12459                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12460                             const I32 count
12461                              = saux->xhv_name_count < 0
12462                                 ? -saux->xhv_name_count
12463                                 :  saux->xhv_name_count;
12464                             HEK **shekp = sname + count;
12465                             HEK **dhekp;
12466                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12467                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12468                             while (shekp-- > sname) {
12469                                 dhekp--;
12470                                 *dhekp = hek_dup(*shekp, param);
12471                             }
12472                         }
12473                         else {
12474                             daux->xhv_name_u.xhvnameu_name
12475                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12476                                           param);
12477                         }
12478                         daux->xhv_name_count = saux->xhv_name_count;
12479
12480                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
12481                         daux->xhv_riter = saux->xhv_riter;
12482                         daux->xhv_eiter = saux->xhv_eiter
12483                             ? he_dup(saux->xhv_eiter,
12484                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12485                         /* backref array needs refcnt=2; see sv_add_backref */
12486                         daux->xhv_backreferences =
12487                             (param->flags & CLONEf_JOIN_IN)
12488                                 /* when joining, we let the individual GVs and
12489                                  * CVs add themselves to backref as
12490                                  * needed. This avoids pulling in stuff
12491                                  * that isn't required, and simplifies the
12492                                  * case where stashes aren't cloned back
12493                                  * if they already exist in the parent
12494                                  * thread */
12495                             ? NULL
12496                             : saux->xhv_backreferences
12497                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12498                                     ? MUTABLE_AV(SvREFCNT_inc(
12499                                           sv_dup_inc((const SV *)
12500                                             saux->xhv_backreferences, param)))
12501                                     : MUTABLE_AV(sv_dup((const SV *)
12502                                             saux->xhv_backreferences, param))
12503                                 : 0;
12504
12505                         daux->xhv_mro_meta = saux->xhv_mro_meta
12506                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12507                             : 0;
12508                         daux->xhv_super = NULL;
12509
12510                         /* Record stashes for possible cloning in Perl_clone(). */
12511                         if (HvNAME(sstr))
12512                             av_push(param->stashes, dstr);
12513                     }
12514                 }
12515                 else
12516                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12517                 break;
12518             case SVt_PVCV:
12519                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12520                     CvDEPTH(dstr) = 0;
12521                 }
12522                 /*FALLTHROUGH*/
12523             case SVt_PVFM:
12524                 /* NOTE: not refcounted */
12525                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12526                     hv_dup(CvSTASH(dstr), param);
12527                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12528                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12529                 if (!CvISXSUB(dstr)) {
12530                     OP_REFCNT_LOCK;
12531                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12532                     OP_REFCNT_UNLOCK;
12533                     CvSLABBED_off(dstr);
12534                 } else if (CvCONST(dstr)) {
12535                     CvXSUBANY(dstr).any_ptr =
12536                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12537                 }
12538                 assert(!CvSLABBED(dstr));
12539                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12540                 if (CvNAMED(dstr))
12541                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12542                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12543                 /* don't dup if copying back - CvGV isn't refcounted, so the
12544                  * duped GV may never be freed. A bit of a hack! DAPM */
12545                 else
12546                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12547                     CvCVGV_RC(dstr)
12548                     ? gv_dup_inc(CvGV(sstr), param)
12549                     : (param->flags & CLONEf_JOIN_IN)
12550                         ? NULL
12551                         : gv_dup(CvGV(sstr), param);
12552
12553                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12554                 CvOUTSIDE(dstr) =
12555                     CvWEAKOUTSIDE(sstr)
12556                     ? cv_dup(    CvOUTSIDE(dstr), param)
12557                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12558                 break;
12559             }
12560         }
12561     }
12562
12563     return dstr;
12564  }
12565
12566 SV *
12567 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12568 {
12569     PERL_ARGS_ASSERT_SV_DUP_INC;
12570     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12571 }
12572
12573 SV *
12574 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12575 {
12576     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12577     PERL_ARGS_ASSERT_SV_DUP;
12578
12579     /* Track every SV that (at least initially) had a reference count of 0.
12580        We need to do this by holding an actual reference to it in this array.
12581        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12582        (akin to the stashes hash, and the perl stack), we come unstuck if
12583        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12584        thread) is manipulated in a CLONE method, because CLONE runs before the
12585        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12586        (and fix things up by giving each a reference via the temps stack).
12587        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12588        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12589        before the walk of unreferenced happens and a reference to that is SV
12590        added to the temps stack. At which point we have the same SV considered
12591        to be in use, and free to be re-used. Not good.
12592     */
12593     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12594         assert(param->unreferenced);
12595         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12596     }
12597
12598     return dstr;
12599 }
12600
12601 /* duplicate a context */
12602
12603 PERL_CONTEXT *
12604 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12605 {
12606     PERL_CONTEXT *ncxs;
12607
12608     PERL_ARGS_ASSERT_CX_DUP;
12609
12610     if (!cxs)
12611         return (PERL_CONTEXT*)NULL;
12612
12613     /* look for it in the table first */
12614     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12615     if (ncxs)
12616         return ncxs;
12617
12618     /* create anew and remember what it is */
12619     Newx(ncxs, max + 1, PERL_CONTEXT);
12620     ptr_table_store(PL_ptr_table, cxs, ncxs);
12621     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12622
12623     while (ix >= 0) {
12624         PERL_CONTEXT * const ncx = &ncxs[ix];
12625         if (CxTYPE(ncx) == CXt_SUBST) {
12626             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12627         }
12628         else {
12629             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12630             switch (CxTYPE(ncx)) {
12631             case CXt_SUB:
12632                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12633                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12634                                            : cv_dup(ncx->blk_sub.cv,param));
12635                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12636                                            ? av_dup_inc(ncx->blk_sub.argarray,
12637                                                         param)
12638                                            : NULL);
12639                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12640                                                      param);
12641                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12642                                            ncx->blk_sub.oldcomppad);
12643                 break;
12644             case CXt_EVAL:
12645                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12646                                                       param);
12647                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12648                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12649                 break;
12650             case CXt_LOOP_LAZYSV:
12651                 ncx->blk_loop.state_u.lazysv.end
12652                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12653                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12654                    actually being the same function, and order equivalence of
12655                    the two unions.
12656                    We can assert the later [but only at run time :-(]  */
12657                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12658                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12659             case CXt_LOOP_FOR:
12660                 ncx->blk_loop.state_u.ary.ary
12661                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12662             case CXt_LOOP_LAZYIV:
12663             case CXt_LOOP_PLAIN:
12664                 if (CxPADLOOP(ncx)) {
12665                     ncx->blk_loop.itervar_u.oldcomppad
12666                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12667                                         ncx->blk_loop.itervar_u.oldcomppad);
12668                 } else {
12669                     ncx->blk_loop.itervar_u.gv
12670                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12671                                     param);
12672                 }
12673                 break;
12674             case CXt_FORMAT:
12675                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12676                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12677                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12678                                                      param);
12679                 break;
12680             case CXt_BLOCK:
12681             case CXt_NULL:
12682             case CXt_WHEN:
12683             case CXt_GIVEN:
12684                 break;
12685             }
12686         }
12687         --ix;
12688     }
12689     return ncxs;
12690 }
12691
12692 /* duplicate a stack info structure */
12693
12694 PERL_SI *
12695 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12696 {
12697     PERL_SI *nsi;
12698
12699     PERL_ARGS_ASSERT_SI_DUP;
12700
12701     if (!si)
12702         return (PERL_SI*)NULL;
12703
12704     /* look for it in the table first */
12705     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12706     if (nsi)
12707         return nsi;
12708
12709     /* create anew and remember what it is */
12710     Newxz(nsi, 1, PERL_SI);
12711     ptr_table_store(PL_ptr_table, si, nsi);
12712
12713     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12714     nsi->si_cxix        = si->si_cxix;
12715     nsi->si_cxmax       = si->si_cxmax;
12716     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12717     nsi->si_type        = si->si_type;
12718     nsi->si_prev        = si_dup(si->si_prev, param);
12719     nsi->si_next        = si_dup(si->si_next, param);
12720     nsi->si_markoff     = si->si_markoff;
12721
12722     return nsi;
12723 }
12724
12725 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12726 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12727 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12728 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12729 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12730 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12731 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12732 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12733 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12734 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12735 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12736 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12737 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12738 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12739 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12740 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12741
12742 /* XXXXX todo */
12743 #define pv_dup_inc(p)   SAVEPV(p)
12744 #define pv_dup(p)       SAVEPV(p)
12745 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12746
12747 /* map any object to the new equivent - either something in the
12748  * ptr table, or something in the interpreter structure
12749  */
12750
12751 void *
12752 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12753 {
12754     void *ret;
12755
12756     PERL_ARGS_ASSERT_ANY_DUP;
12757
12758     if (!v)
12759         return (void*)NULL;
12760
12761     /* look for it in the table first */
12762     ret = ptr_table_fetch(PL_ptr_table, v);
12763     if (ret)
12764         return ret;
12765
12766     /* see if it is part of the interpreter structure */
12767     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12768         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12769     else {
12770         ret = v;
12771     }
12772
12773     return ret;
12774 }
12775
12776 /* duplicate the save stack */
12777
12778 ANY *
12779 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12780 {
12781     dVAR;
12782     ANY * const ss      = proto_perl->Isavestack;
12783     const I32 max       = proto_perl->Isavestack_max;
12784     I32 ix              = proto_perl->Isavestack_ix;
12785     ANY *nss;
12786     const SV *sv;
12787     const GV *gv;
12788     const AV *av;
12789     const HV *hv;
12790     void* ptr;
12791     int intval;
12792     long longval;
12793     GP *gp;
12794     IV iv;
12795     I32 i;
12796     char *c = NULL;
12797     void (*dptr) (void*);
12798     void (*dxptr) (pTHX_ void*);
12799
12800     PERL_ARGS_ASSERT_SS_DUP;
12801
12802     Newxz(nss, max, ANY);
12803
12804     while (ix > 0) {
12805         const UV uv = POPUV(ss,ix);
12806         const U8 type = (U8)uv & SAVE_MASK;
12807
12808         TOPUV(nss,ix) = uv;
12809         switch (type) {
12810         case SAVEt_CLEARSV:
12811         case SAVEt_CLEARPADRANGE:
12812             break;
12813         case SAVEt_HELEM:               /* hash element */
12814             sv = (const SV *)POPPTR(ss,ix);
12815             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12816             /* fall through */
12817         case SAVEt_ITEM:                        /* normal string */
12818         case SAVEt_GVSV:                        /* scalar slot in GV */
12819         case SAVEt_SV:                          /* scalar reference */
12820             sv = (const SV *)POPPTR(ss,ix);
12821             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12822             /* fall through */
12823         case SAVEt_FREESV:
12824         case SAVEt_MORTALIZESV:
12825         case SAVEt_READONLY_OFF:
12826             sv = (const SV *)POPPTR(ss,ix);
12827             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12828             break;
12829         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12830             c = (char*)POPPTR(ss,ix);
12831             TOPPTR(nss,ix) = savesharedpv(c);
12832             ptr = POPPTR(ss,ix);
12833             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12834             break;
12835         case SAVEt_GENERIC_SVREF:               /* generic sv */
12836         case SAVEt_SVREF:                       /* scalar reference */
12837             sv = (const SV *)POPPTR(ss,ix);
12838             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12839             ptr = POPPTR(ss,ix);
12840             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12841             break;
12842         case SAVEt_GVSLOT:              /* any slot in GV */
12843             sv = (const SV *)POPPTR(ss,ix);
12844             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12845             ptr = POPPTR(ss,ix);
12846             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12847             sv = (const SV *)POPPTR(ss,ix);
12848             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12849             break;
12850         case SAVEt_HV:                          /* hash reference */
12851         case SAVEt_AV:                          /* array reference */
12852             sv = (const SV *) POPPTR(ss,ix);
12853             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12854             /* fall through */
12855         case SAVEt_COMPPAD:
12856         case SAVEt_NSTAB:
12857             sv = (const SV *) POPPTR(ss,ix);
12858             TOPPTR(nss,ix) = sv_dup(sv, param);
12859             break;
12860         case SAVEt_INT:                         /* int reference */
12861             ptr = POPPTR(ss,ix);
12862             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12863             intval = (int)POPINT(ss,ix);
12864             TOPINT(nss,ix) = intval;
12865             break;
12866         case SAVEt_LONG:                        /* long reference */
12867             ptr = POPPTR(ss,ix);
12868             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12869             longval = (long)POPLONG(ss,ix);
12870             TOPLONG(nss,ix) = longval;
12871             break;
12872         case SAVEt_I32:                         /* I32 reference */
12873             ptr = POPPTR(ss,ix);
12874             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12875             i = POPINT(ss,ix);
12876             TOPINT(nss,ix) = i;
12877             break;
12878         case SAVEt_IV:                          /* IV reference */
12879             ptr = POPPTR(ss,ix);
12880             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12881             iv = POPIV(ss,ix);
12882             TOPIV(nss,ix) = iv;
12883             break;
12884         case SAVEt_HPTR:                        /* HV* reference */
12885         case SAVEt_APTR:                        /* AV* reference */
12886         case SAVEt_SPTR:                        /* SV* reference */
12887             ptr = POPPTR(ss,ix);
12888             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12889             sv = (const SV *)POPPTR(ss,ix);
12890             TOPPTR(nss,ix) = sv_dup(sv, param);
12891             break;
12892         case SAVEt_VPTR:                        /* random* reference */
12893             ptr = POPPTR(ss,ix);
12894             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12895             /* Fall through */
12896         case SAVEt_INT_SMALL:
12897         case SAVEt_I32_SMALL:
12898         case SAVEt_I16:                         /* I16 reference */
12899         case SAVEt_I8:                          /* I8 reference */
12900         case SAVEt_BOOL:
12901             ptr = POPPTR(ss,ix);
12902             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12903             break;
12904         case SAVEt_GENERIC_PVREF:               /* generic char* */
12905         case SAVEt_PPTR:                        /* char* reference */
12906             ptr = POPPTR(ss,ix);
12907             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12908             c = (char*)POPPTR(ss,ix);
12909             TOPPTR(nss,ix) = pv_dup(c);
12910             break;
12911         case SAVEt_GP:                          /* scalar reference */
12912             gp = (GP*)POPPTR(ss,ix);
12913             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12914             (void)GpREFCNT_inc(gp);
12915             gv = (const GV *)POPPTR(ss,ix);
12916             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12917             break;
12918         case SAVEt_FREEOP:
12919             ptr = POPPTR(ss,ix);
12920             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12921                 /* these are assumed to be refcounted properly */
12922                 OP *o;
12923                 switch (((OP*)ptr)->op_type) {
12924                 case OP_LEAVESUB:
12925                 case OP_LEAVESUBLV:
12926                 case OP_LEAVEEVAL:
12927                 case OP_LEAVE:
12928                 case OP_SCOPE:
12929                 case OP_LEAVEWRITE:
12930                     TOPPTR(nss,ix) = ptr;
12931                     o = (OP*)ptr;
12932                     OP_REFCNT_LOCK;
12933                     (void) OpREFCNT_inc(o);
12934                     OP_REFCNT_UNLOCK;
12935                     break;
12936                 default:
12937                     TOPPTR(nss,ix) = NULL;
12938                     break;
12939                 }
12940             }
12941             else
12942                 TOPPTR(nss,ix) = NULL;
12943             break;
12944         case SAVEt_FREECOPHH:
12945             ptr = POPPTR(ss,ix);
12946             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12947             break;
12948         case SAVEt_ADELETE:
12949             av = (const AV *)POPPTR(ss,ix);
12950             TOPPTR(nss,ix) = av_dup_inc(av, param);
12951             i = POPINT(ss,ix);
12952             TOPINT(nss,ix) = i;
12953             break;
12954         case SAVEt_DELETE:
12955             hv = (const HV *)POPPTR(ss,ix);
12956             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12957             i = POPINT(ss,ix);
12958             TOPINT(nss,ix) = i;
12959             /* Fall through */
12960         case SAVEt_FREEPV:
12961             c = (char*)POPPTR(ss,ix);
12962             TOPPTR(nss,ix) = pv_dup_inc(c);
12963             break;
12964         case SAVEt_STACK_POS:           /* Position on Perl stack */
12965             i = POPINT(ss,ix);
12966             TOPINT(nss,ix) = i;
12967             break;
12968         case SAVEt_DESTRUCTOR:
12969             ptr = POPPTR(ss,ix);
12970             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12971             dptr = POPDPTR(ss,ix);
12972             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12973                                         any_dup(FPTR2DPTR(void *, dptr),
12974                                                 proto_perl));
12975             break;
12976         case SAVEt_DESTRUCTOR_X:
12977             ptr = POPPTR(ss,ix);
12978             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12979             dxptr = POPDXPTR(ss,ix);
12980             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12981                                          any_dup(FPTR2DPTR(void *, dxptr),
12982                                                  proto_perl));
12983             break;
12984         case SAVEt_REGCONTEXT:
12985         case SAVEt_ALLOC:
12986             ix -= uv >> SAVE_TIGHT_SHIFT;
12987             break;
12988         case SAVEt_AELEM:               /* array element */
12989             sv = (const SV *)POPPTR(ss,ix);
12990             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12991             i = POPINT(ss,ix);
12992             TOPINT(nss,ix) = i;
12993             av = (const AV *)POPPTR(ss,ix);
12994             TOPPTR(nss,ix) = av_dup_inc(av, param);
12995             break;
12996         case SAVEt_OP:
12997             ptr = POPPTR(ss,ix);
12998             TOPPTR(nss,ix) = ptr;
12999             break;
13000         case SAVEt_HINTS:
13001             ptr = POPPTR(ss,ix);
13002             ptr = cophh_copy((COPHH*)ptr);
13003             TOPPTR(nss,ix) = ptr;
13004             i = POPINT(ss,ix);
13005             TOPINT(nss,ix) = i;
13006             if (i & HINT_LOCALIZE_HH) {
13007                 hv = (const HV *)POPPTR(ss,ix);
13008                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
13009             }
13010             break;
13011         case SAVEt_PADSV_AND_MORTALIZE:
13012             longval = (long)POPLONG(ss,ix);
13013             TOPLONG(nss,ix) = longval;
13014             ptr = POPPTR(ss,ix);
13015             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13016             sv = (const SV *)POPPTR(ss,ix);
13017             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13018             break;
13019         case SAVEt_SET_SVFLAGS:
13020             i = POPINT(ss,ix);
13021             TOPINT(nss,ix) = i;
13022             i = POPINT(ss,ix);
13023             TOPINT(nss,ix) = i;
13024             sv = (const SV *)POPPTR(ss,ix);
13025             TOPPTR(nss,ix) = sv_dup(sv, param);
13026             break;
13027         case SAVEt_COMPILE_WARNINGS:
13028             ptr = POPPTR(ss,ix);
13029             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
13030             break;
13031         case SAVEt_PARSER:
13032             ptr = POPPTR(ss,ix);
13033             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
13034             break;
13035         default:
13036             Perl_croak(aTHX_
13037                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
13038         }
13039     }
13040
13041     return nss;
13042 }
13043
13044
13045 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
13046  * flag to the result. This is done for each stash before cloning starts,
13047  * so we know which stashes want their objects cloned */
13048
13049 static void
13050 do_mark_cloneable_stash(pTHX_ SV *const sv)
13051 {
13052     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
13053     if (hvname) {
13054         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
13055         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
13056         if (cloner && GvCV(cloner)) {
13057             dSP;
13058             UV status;
13059
13060             ENTER;
13061             SAVETMPS;
13062             PUSHMARK(SP);
13063             mXPUSHs(newSVhek(hvname));
13064             PUTBACK;
13065             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
13066             SPAGAIN;
13067             status = POPu;
13068             PUTBACK;
13069             FREETMPS;
13070             LEAVE;
13071             if (status)
13072                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
13073         }
13074     }
13075 }
13076
13077
13078
13079 /*
13080 =for apidoc perl_clone
13081
13082 Create and return a new interpreter by cloning the current one.
13083
13084 perl_clone takes these flags as parameters:
13085
13086 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
13087 without it we only clone the data and zero the stacks,
13088 with it we copy the stacks and the new perl interpreter is
13089 ready to run at the exact same point as the previous one.
13090 The pseudo-fork code uses COPY_STACKS while the
13091 threads->create doesn't.
13092
13093 CLONEf_KEEP_PTR_TABLE -
13094 perl_clone keeps a ptr_table with the pointer of the old
13095 variable as a key and the new variable as a value,
13096 this allows it to check if something has been cloned and not
13097 clone it again but rather just use the value and increase the
13098 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13099 the ptr_table using the function
13100 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13101 reason to keep it around is if you want to dup some of your own
13102 variable who are outside the graph perl scans, example of this
13103 code is in threads.xs create.
13104
13105 CLONEf_CLONE_HOST -
13106 This is a win32 thing, it is ignored on unix, it tells perls
13107 win32host code (which is c++) to clone itself, this is needed on
13108 win32 if you want to run two threads at the same time,
13109 if you just want to do some stuff in a separate perl interpreter
13110 and then throw it away and return to the original one,
13111 you don't need to do anything.
13112
13113 =cut
13114 */
13115
13116 /* XXX the above needs expanding by someone who actually understands it ! */
13117 EXTERN_C PerlInterpreter *
13118 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13119
13120 PerlInterpreter *
13121 perl_clone(PerlInterpreter *proto_perl, UV flags)
13122 {
13123    dVAR;
13124 #ifdef PERL_IMPLICIT_SYS
13125
13126     PERL_ARGS_ASSERT_PERL_CLONE;
13127
13128    /* perlhost.h so we need to call into it
13129    to clone the host, CPerlHost should have a c interface, sky */
13130
13131    if (flags & CLONEf_CLONE_HOST) {
13132        return perl_clone_host(proto_perl,flags);
13133    }
13134    return perl_clone_using(proto_perl, flags,
13135                             proto_perl->IMem,
13136                             proto_perl->IMemShared,
13137                             proto_perl->IMemParse,
13138                             proto_perl->IEnv,
13139                             proto_perl->IStdIO,
13140                             proto_perl->ILIO,
13141                             proto_perl->IDir,
13142                             proto_perl->ISock,
13143                             proto_perl->IProc);
13144 }
13145
13146 PerlInterpreter *
13147 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13148                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13149                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13150                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13151                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13152                  struct IPerlProc* ipP)
13153 {
13154     /* XXX many of the string copies here can be optimized if they're
13155      * constants; they need to be allocated as common memory and just
13156      * their pointers copied. */
13157
13158     IV i;
13159     CLONE_PARAMS clone_params;
13160     CLONE_PARAMS* const param = &clone_params;
13161
13162     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13163
13164     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13165 #else           /* !PERL_IMPLICIT_SYS */
13166     IV i;
13167     CLONE_PARAMS clone_params;
13168     CLONE_PARAMS* param = &clone_params;
13169     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13170
13171     PERL_ARGS_ASSERT_PERL_CLONE;
13172 #endif          /* PERL_IMPLICIT_SYS */
13173
13174     /* for each stash, determine whether its objects should be cloned */
13175     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13176     PERL_SET_THX(my_perl);
13177
13178 #ifdef DEBUGGING
13179     PoisonNew(my_perl, 1, PerlInterpreter);
13180     PL_op = NULL;
13181     PL_curcop = NULL;
13182     PL_defstash = NULL; /* may be used by perl malloc() */
13183     PL_markstack = 0;
13184     PL_scopestack = 0;
13185     PL_scopestack_name = 0;
13186     PL_savestack = 0;
13187     PL_savestack_ix = 0;
13188     PL_savestack_max = -1;
13189     PL_sig_pending = 0;
13190     PL_parser = NULL;
13191     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13192 #  ifdef DEBUG_LEAKING_SCALARS
13193     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13194 #  endif
13195 #else   /* !DEBUGGING */
13196     Zero(my_perl, 1, PerlInterpreter);
13197 #endif  /* DEBUGGING */
13198
13199 #ifdef PERL_IMPLICIT_SYS
13200     /* host pointers */
13201     PL_Mem              = ipM;
13202     PL_MemShared        = ipMS;
13203     PL_MemParse         = ipMP;
13204     PL_Env              = ipE;
13205     PL_StdIO            = ipStd;
13206     PL_LIO              = ipLIO;
13207     PL_Dir              = ipD;
13208     PL_Sock             = ipS;
13209     PL_Proc             = ipP;
13210 #endif          /* PERL_IMPLICIT_SYS */
13211
13212
13213     param->flags = flags;
13214     /* Nothing in the core code uses this, but we make it available to
13215        extensions (using mg_dup).  */
13216     param->proto_perl = proto_perl;
13217     /* Likely nothing will use this, but it is initialised to be consistent
13218        with Perl_clone_params_new().  */
13219     param->new_perl = my_perl;
13220     param->unreferenced = NULL;
13221
13222
13223     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13224
13225     PL_body_arenas = NULL;
13226     Zero(&PL_body_roots, 1, PL_body_roots);
13227     
13228     PL_sv_count         = 0;
13229     PL_sv_root          = NULL;
13230     PL_sv_arenaroot     = NULL;
13231
13232     PL_debug            = proto_perl->Idebug;
13233
13234     /* dbargs array probably holds garbage */
13235     PL_dbargs           = NULL;
13236
13237     PL_compiling = proto_perl->Icompiling;
13238
13239     /* pseudo environmental stuff */
13240     PL_origargc         = proto_perl->Iorigargc;
13241     PL_origargv         = proto_perl->Iorigargv;
13242
13243 #if !NO_TAINT_SUPPORT
13244     /* Set tainting stuff before PerlIO_debug can possibly get called */
13245     PL_tainting         = proto_perl->Itainting;
13246     PL_taint_warn       = proto_perl->Itaint_warn;
13247 #else
13248     PL_tainting         = FALSE;
13249     PL_taint_warn       = FALSE;
13250 #endif
13251
13252     PL_minus_c          = proto_perl->Iminus_c;
13253
13254     PL_localpatches     = proto_perl->Ilocalpatches;
13255     PL_splitstr         = proto_perl->Isplitstr;
13256     PL_minus_n          = proto_perl->Iminus_n;
13257     PL_minus_p          = proto_perl->Iminus_p;
13258     PL_minus_l          = proto_perl->Iminus_l;
13259     PL_minus_a          = proto_perl->Iminus_a;
13260     PL_minus_E          = proto_perl->Iminus_E;
13261     PL_minus_F          = proto_perl->Iminus_F;
13262     PL_doswitches       = proto_perl->Idoswitches;
13263     PL_dowarn           = proto_perl->Idowarn;
13264 #ifdef PERL_SAWAMPERSAND
13265     PL_sawampersand     = proto_perl->Isawampersand;
13266 #endif
13267     PL_unsafe           = proto_perl->Iunsafe;
13268     PL_perldb           = proto_perl->Iperldb;
13269     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13270     PL_exit_flags       = proto_perl->Iexit_flags;
13271
13272     /* XXX time(&PL_basetime) when asked for? */
13273     PL_basetime         = proto_perl->Ibasetime;
13274
13275     PL_maxsysfd         = proto_perl->Imaxsysfd;
13276     PL_statusvalue      = proto_perl->Istatusvalue;
13277 #ifdef VMS
13278     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13279 #else
13280     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13281 #endif
13282
13283     /* RE engine related */
13284     PL_regmatch_slab    = NULL;
13285     PL_reg_curpm        = NULL;
13286
13287     PL_sub_generation   = proto_perl->Isub_generation;
13288
13289     /* funky return mechanisms */
13290     PL_forkprocess      = proto_perl->Iforkprocess;
13291
13292     /* internal state */
13293     PL_maxo             = proto_perl->Imaxo;
13294
13295     PL_main_start       = proto_perl->Imain_start;
13296     PL_eval_root        = proto_perl->Ieval_root;
13297     PL_eval_start       = proto_perl->Ieval_start;
13298
13299     PL_filemode         = proto_perl->Ifilemode;
13300     PL_lastfd           = proto_perl->Ilastfd;
13301     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13302     PL_Argv             = NULL;
13303     PL_Cmd              = NULL;
13304     PL_gensym           = proto_perl->Igensym;
13305
13306     PL_laststatval      = proto_perl->Ilaststatval;
13307     PL_laststype        = proto_perl->Ilaststype;
13308     PL_mess_sv          = NULL;
13309
13310     PL_profiledata      = NULL;
13311
13312     PL_generation       = proto_perl->Igeneration;
13313
13314     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13315     PL_in_clean_all     = proto_perl->Iin_clean_all;
13316
13317     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13318     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13319     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13320     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13321     PL_nomemok          = proto_perl->Inomemok;
13322     PL_an               = proto_perl->Ian;
13323     PL_evalseq          = proto_perl->Ievalseq;
13324     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13325     PL_origalen         = proto_perl->Iorigalen;
13326
13327     PL_sighandlerp      = proto_perl->Isighandlerp;
13328
13329     PL_runops           = proto_perl->Irunops;
13330
13331     PL_subline          = proto_perl->Isubline;
13332
13333 #ifdef FCRYPT
13334     PL_cryptseen        = proto_perl->Icryptseen;
13335 #endif
13336
13337     PL_hints            = proto_perl->Ihints;
13338
13339 #ifdef USE_LOCALE_COLLATE
13340     PL_collation_ix     = proto_perl->Icollation_ix;
13341     PL_collation_standard       = proto_perl->Icollation_standard;
13342     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13343     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13344 #endif /* USE_LOCALE_COLLATE */
13345
13346 #ifdef USE_LOCALE_NUMERIC
13347     PL_numeric_standard = proto_perl->Inumeric_standard;
13348     PL_numeric_local    = proto_perl->Inumeric_local;
13349 #endif /* !USE_LOCALE_NUMERIC */
13350
13351     /* Did the locale setup indicate UTF-8? */
13352     PL_utf8locale       = proto_perl->Iutf8locale;
13353     /* Unicode features (see perlrun/-C) */
13354     PL_unicode          = proto_perl->Iunicode;
13355
13356     /* Pre-5.8 signals control */
13357     PL_signals          = proto_perl->Isignals;
13358
13359     /* times() ticks per second */
13360     PL_clocktick        = proto_perl->Iclocktick;
13361
13362     /* Recursion stopper for PerlIO_find_layer */
13363     PL_in_load_module   = proto_perl->Iin_load_module;
13364
13365     /* sort() routine */
13366     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13367
13368     /* Not really needed/useful since the reenrant_retint is "volatile",
13369      * but do it for consistency's sake. */
13370     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13371
13372     /* Hooks to shared SVs and locks. */
13373     PL_sharehook        = proto_perl->Isharehook;
13374     PL_lockhook         = proto_perl->Ilockhook;
13375     PL_unlockhook       = proto_perl->Iunlockhook;
13376     PL_threadhook       = proto_perl->Ithreadhook;
13377     PL_destroyhook      = proto_perl->Idestroyhook;
13378     PL_signalhook       = proto_perl->Isignalhook;
13379
13380     PL_globhook         = proto_perl->Iglobhook;
13381
13382     /* swatch cache */
13383     PL_last_swash_hv    = NULL; /* reinits on demand */
13384     PL_last_swash_klen  = 0;
13385     PL_last_swash_key[0]= '\0';
13386     PL_last_swash_tmps  = (U8*)NULL;
13387     PL_last_swash_slen  = 0;
13388
13389     PL_srand_called     = proto_perl->Isrand_called;
13390
13391     if (flags & CLONEf_COPY_STACKS) {
13392         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13393         PL_tmps_ix              = proto_perl->Itmps_ix;
13394         PL_tmps_max             = proto_perl->Itmps_max;
13395         PL_tmps_floor           = proto_perl->Itmps_floor;
13396
13397         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13398          * NOTE: unlike the others! */
13399         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13400         PL_scopestack_max       = proto_perl->Iscopestack_max;
13401
13402         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13403          * NOTE: unlike the others! */
13404         PL_savestack_ix         = proto_perl->Isavestack_ix;
13405         PL_savestack_max        = proto_perl->Isavestack_max;
13406     }
13407
13408     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13409     PL_top_env          = &PL_start_env;
13410
13411     PL_op               = proto_perl->Iop;
13412
13413     PL_Sv               = NULL;
13414     PL_Xpv              = (XPV*)NULL;
13415     my_perl->Ina        = proto_perl->Ina;
13416
13417     PL_statbuf          = proto_perl->Istatbuf;
13418     PL_statcache        = proto_perl->Istatcache;
13419
13420 #ifdef HAS_TIMES
13421     PL_timesbuf         = proto_perl->Itimesbuf;
13422 #endif
13423
13424 #if !NO_TAINT_SUPPORT
13425     PL_tainted          = proto_perl->Itainted;
13426 #else
13427     PL_tainted          = FALSE;
13428 #endif
13429     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13430
13431     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13432
13433     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13434     PL_restartop        = proto_perl->Irestartop;
13435     PL_in_eval          = proto_perl->Iin_eval;
13436     PL_delaymagic       = proto_perl->Idelaymagic;
13437     PL_phase            = proto_perl->Iphase;
13438     PL_localizing       = proto_perl->Ilocalizing;
13439
13440     PL_hv_fetch_ent_mh  = NULL;
13441     PL_modcount         = proto_perl->Imodcount;
13442     PL_lastgotoprobe    = NULL;
13443     PL_dumpindent       = proto_perl->Idumpindent;
13444
13445     PL_efloatbuf        = NULL;         /* reinits on demand */
13446     PL_efloatsize       = 0;                    /* reinits on demand */
13447
13448     /* regex stuff */
13449
13450     PL_colorset         = 0;            /* reinits PL_colors[] */
13451     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13452
13453     /* Pluggable optimizer */
13454     PL_peepp            = proto_perl->Ipeepp;
13455     PL_rpeepp           = proto_perl->Irpeepp;
13456     /* op_free() hook */
13457     PL_opfreehook       = proto_perl->Iopfreehook;
13458
13459 #ifdef USE_REENTRANT_API
13460     /* XXX: things like -Dm will segfault here in perlio, but doing
13461      *  PERL_SET_CONTEXT(proto_perl);
13462      * breaks too many other things
13463      */
13464     Perl_reentrant_init(aTHX);
13465 #endif
13466
13467     /* create SV map for pointer relocation */
13468     PL_ptr_table = ptr_table_new();
13469
13470     /* initialize these special pointers as early as possible */
13471     init_constants();
13472     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13473     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13474     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13475
13476     /* create (a non-shared!) shared string table */
13477     PL_strtab           = newHV();
13478     HvSHAREKEYS_off(PL_strtab);
13479     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13480     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13481
13482     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
13483
13484     /* This PV will be free'd special way so must set it same way op.c does */
13485     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13486     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13487
13488     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13489     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13490     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13491     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13492
13493     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13494     /* This makes no difference to the implementation, as it always pushes
13495        and shifts pointers to other SVs without changing their reference
13496        count, with the array becoming empty before it is freed. However, it
13497        makes it conceptually clear what is going on, and will avoid some
13498        work inside av.c, filling slots between AvFILL() and AvMAX() with
13499        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13500     AvREAL_off(param->stashes);
13501
13502     if (!(flags & CLONEf_COPY_STACKS)) {
13503         param->unreferenced = newAV();
13504     }
13505
13506 #ifdef PERLIO_LAYERS
13507     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13508     PerlIO_clone(aTHX_ proto_perl, param);
13509 #endif
13510
13511     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13512     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13513     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13514     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13515     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13516     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13517
13518     /* switches */
13519     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13520     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13521     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13522     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13523
13524     /* magical thingies */
13525
13526     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13527
13528     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13529     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13530     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13531
13532    
13533     /* Clone the regex array */
13534     /* ORANGE FIXME for plugins, probably in the SV dup code.
13535        newSViv(PTR2IV(CALLREGDUPE(
13536        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13537     */
13538     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13539     PL_regex_pad = AvARRAY(PL_regex_padav);
13540
13541     PL_stashpadmax      = proto_perl->Istashpadmax;
13542     PL_stashpadix       = proto_perl->Istashpadix ;
13543     Newx(PL_stashpad, PL_stashpadmax, HV *);
13544     {
13545         PADOFFSET o = 0;
13546         for (; o < PL_stashpadmax; ++o)
13547             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13548     }
13549
13550     /* shortcuts to various I/O objects */
13551     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13552     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13553     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13554     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13555     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13556     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13557     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13558
13559     /* shortcuts to regexp stuff */
13560     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13561
13562     /* shortcuts to misc objects */
13563     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13564
13565     /* shortcuts to debugging objects */
13566     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13567     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13568     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13569     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13570     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13571     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13572
13573     /* symbol tables */
13574     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13575     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13576     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13577     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13578     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13579
13580     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13581     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13582     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13583     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13584     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13585     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13586     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13587     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13588
13589     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13590
13591     /* subprocess state */
13592     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13593
13594     if (proto_perl->Iop_mask)
13595         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13596     else
13597         PL_op_mask      = NULL;
13598     /* PL_asserting        = proto_perl->Iasserting; */
13599
13600     /* current interpreter roots */
13601     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13602     OP_REFCNT_LOCK;
13603     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13604     OP_REFCNT_UNLOCK;
13605
13606     /* runtime control stuff */
13607     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13608
13609     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13610
13611     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13612
13613     /* interpreter atexit processing */
13614     PL_exitlistlen      = proto_perl->Iexitlistlen;
13615     if (PL_exitlistlen) {
13616         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13617         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13618     }
13619     else
13620         PL_exitlist     = (PerlExitListEntry*)NULL;
13621
13622     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13623     if (PL_my_cxt_size) {
13624         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13625         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13626 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13627         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13628         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13629 #endif
13630     }
13631     else {
13632         PL_my_cxt_list  = (void**)NULL;
13633 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13634         PL_my_cxt_keys  = (const char**)NULL;
13635 #endif
13636     }
13637     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13638     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13639     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13640     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13641
13642     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13643
13644     PAD_CLONE_VARS(proto_perl, param);
13645
13646 #ifdef HAVE_INTERP_INTERN
13647     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13648 #endif
13649
13650     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13651
13652 #ifdef PERL_USES_PL_PIDSTATUS
13653     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13654 #endif
13655     PL_osname           = SAVEPV(proto_perl->Iosname);
13656     PL_parser           = parser_dup(proto_perl->Iparser, param);
13657
13658     /* XXX this only works if the saved cop has already been cloned */
13659     if (proto_perl->Iparser) {
13660         PL_parser->saved_curcop = (COP*)any_dup(
13661                                     proto_perl->Iparser->saved_curcop,
13662                                     proto_perl);
13663     }
13664
13665     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13666
13667 #ifdef USE_LOCALE_COLLATE
13668     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13669 #endif /* USE_LOCALE_COLLATE */
13670
13671 #ifdef USE_LOCALE_NUMERIC
13672     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13673     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13674 #endif /* !USE_LOCALE_NUMERIC */
13675
13676     /* Unicode inversion lists */
13677     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13678     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13679     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13680
13681     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13682     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13683
13684     /* utf8 character class swashes */
13685     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13686         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13687     }
13688     for (i = 0; i < POSIX_CC_COUNT; i++) {
13689         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13690         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13691         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13692     }
13693     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13694     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13695     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13696     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13697     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13698     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13699     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13700     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13701     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13702     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13703     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13704     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13705     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13706     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13707     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13708     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13709
13710     if (proto_perl->Ipsig_pend) {
13711         Newxz(PL_psig_pend, SIG_SIZE, int);
13712     }
13713     else {
13714         PL_psig_pend    = (int*)NULL;
13715     }
13716
13717     if (proto_perl->Ipsig_name) {
13718         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13719         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13720                             param);
13721         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13722     }
13723     else {
13724         PL_psig_ptr     = (SV**)NULL;
13725         PL_psig_name    = (SV**)NULL;
13726     }
13727
13728     if (flags & CLONEf_COPY_STACKS) {
13729         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13730         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13731                             PL_tmps_ix+1, param);
13732
13733         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13734         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13735         Newxz(PL_markstack, i, I32);
13736         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13737                                                   - proto_perl->Imarkstack);
13738         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13739                                                   - proto_perl->Imarkstack);
13740         Copy(proto_perl->Imarkstack, PL_markstack,
13741              PL_markstack_ptr - PL_markstack + 1, I32);
13742
13743         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13744          * NOTE: unlike the others! */
13745         Newxz(PL_scopestack, PL_scopestack_max, I32);
13746         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13747
13748 #ifdef DEBUGGING
13749         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13750         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13751 #endif
13752         /* reset stack AV to correct length before its duped via
13753          * PL_curstackinfo */
13754         AvFILLp(proto_perl->Icurstack) =
13755                             proto_perl->Istack_sp - proto_perl->Istack_base;
13756
13757         /* NOTE: si_dup() looks at PL_markstack */
13758         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13759
13760         /* PL_curstack          = PL_curstackinfo->si_stack; */
13761         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13762         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13763
13764         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13765         PL_stack_base           = AvARRAY(PL_curstack);
13766         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13767                                                    - proto_perl->Istack_base);
13768         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13769
13770         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13771         PL_savestack            = ss_dup(proto_perl, param);
13772     }
13773     else {
13774         init_stacks();
13775         ENTER;                  /* perl_destruct() wants to LEAVE; */
13776     }
13777
13778     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13779     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13780
13781     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13782     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13783     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13784     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13785     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13786     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13787
13788     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13789
13790     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13791     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13792     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13793
13794     PL_stashcache       = newHV();
13795
13796     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13797                                             proto_perl->Iwatchaddr);
13798     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13799     if (PL_debug && PL_watchaddr) {
13800         PerlIO_printf(Perl_debug_log,
13801           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13802           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13803           PTR2UV(PL_watchok));
13804     }
13805
13806     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13807     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13808     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13809
13810     /* Call the ->CLONE method, if it exists, for each of the stashes
13811        identified by sv_dup() above.
13812     */
13813     while(av_len(param->stashes) != -1) {
13814         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13815         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13816         if (cloner && GvCV(cloner)) {
13817             dSP;
13818             ENTER;
13819             SAVETMPS;
13820             PUSHMARK(SP);
13821             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13822             PUTBACK;
13823             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13824             FREETMPS;
13825             LEAVE;
13826         }
13827     }
13828
13829     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13830         ptr_table_free(PL_ptr_table);
13831         PL_ptr_table = NULL;
13832     }
13833
13834     if (!(flags & CLONEf_COPY_STACKS)) {
13835         unreferenced_to_tmp_stack(param->unreferenced);
13836     }
13837
13838     SvREFCNT_dec(param->stashes);
13839
13840     /* orphaned? eg threads->new inside BEGIN or use */
13841     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13842         SvREFCNT_inc_simple_void(PL_compcv);
13843         SAVEFREESV(PL_compcv);
13844     }
13845
13846     return my_perl;
13847 }
13848
13849 static void
13850 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13851 {
13852     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13853     
13854     if (AvFILLp(unreferenced) > -1) {
13855         SV **svp = AvARRAY(unreferenced);
13856         SV **const last = svp + AvFILLp(unreferenced);
13857         SSize_t count = 0;
13858
13859         do {
13860             if (SvREFCNT(*svp) == 1)
13861                 ++count;
13862         } while (++svp <= last);
13863
13864         EXTEND_MORTAL(count);
13865         svp = AvARRAY(unreferenced);
13866
13867         do {
13868             if (SvREFCNT(*svp) == 1) {
13869                 /* Our reference is the only one to this SV. This means that
13870                    in this thread, the scalar effectively has a 0 reference.
13871                    That doesn't work (cleanup never happens), so donate our
13872                    reference to it onto the save stack. */
13873                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13874             } else {
13875                 /* As an optimisation, because we are already walking the
13876                    entire array, instead of above doing either
13877                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13878                    release our reference to the scalar, so that at the end of
13879                    the array owns zero references to the scalars it happens to
13880                    point to. We are effectively converting the array from
13881                    AvREAL() on to AvREAL() off. This saves the av_clear()
13882                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13883                    walking the array a second time.  */
13884                 SvREFCNT_dec(*svp);
13885             }
13886
13887         } while (++svp <= last);
13888         AvREAL_off(unreferenced);
13889     }
13890     SvREFCNT_dec_NN(unreferenced);
13891 }
13892
13893 void
13894 Perl_clone_params_del(CLONE_PARAMS *param)
13895 {
13896     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13897        happy: */
13898     PerlInterpreter *const to = param->new_perl;
13899     dTHXa(to);
13900     PerlInterpreter *const was = PERL_GET_THX;
13901
13902     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13903
13904     if (was != to) {
13905         PERL_SET_THX(to);
13906     }
13907
13908     SvREFCNT_dec(param->stashes);
13909     if (param->unreferenced)
13910         unreferenced_to_tmp_stack(param->unreferenced);
13911
13912     Safefree(param);
13913
13914     if (was != to) {
13915         PERL_SET_THX(was);
13916     }
13917 }
13918
13919 CLONE_PARAMS *
13920 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13921 {
13922     dVAR;
13923     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13924        does a dTHX; to get the context from thread local storage.
13925        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13926        a version that passes in my_perl.  */
13927     PerlInterpreter *const was = PERL_GET_THX;
13928     CLONE_PARAMS *param;
13929
13930     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13931
13932     if (was != to) {
13933         PERL_SET_THX(to);
13934     }
13935
13936     /* Given that we've set the context, we can do this unshared.  */
13937     Newx(param, 1, CLONE_PARAMS);
13938
13939     param->flags = 0;
13940     param->proto_perl = from;
13941     param->new_perl = to;
13942     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13943     AvREAL_off(param->stashes);
13944     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13945
13946     if (was != to) {
13947         PERL_SET_THX(was);
13948     }
13949     return param;
13950 }
13951
13952 #endif /* USE_ITHREADS */
13953
13954 void
13955 Perl_init_constants(pTHX)
13956 {
13957     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13958     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13959     SvANY(&PL_sv_undef)         = NULL;
13960
13961     SvANY(&PL_sv_no)            = new_XPVNV();
13962     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13963     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13964                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13965                                   |SVp_POK|SVf_POK;
13966
13967     SvANY(&PL_sv_yes)           = new_XPVNV();
13968     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13969     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13970                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13971                                   |SVp_POK|SVf_POK;
13972
13973     SvPV_set(&PL_sv_no, (char*)PL_No);
13974     SvCUR_set(&PL_sv_no, 0);
13975     SvLEN_set(&PL_sv_no, 0);
13976     SvIV_set(&PL_sv_no, 0);
13977     SvNV_set(&PL_sv_no, 0);
13978
13979     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13980     SvCUR_set(&PL_sv_yes, 1);
13981     SvLEN_set(&PL_sv_yes, 0);
13982     SvIV_set(&PL_sv_yes, 1);
13983     SvNV_set(&PL_sv_yes, 1);
13984 }
13985
13986 /*
13987 =head1 Unicode Support
13988
13989 =for apidoc sv_recode_to_utf8
13990
13991 The encoding is assumed to be an Encode object, on entry the PV
13992 of the sv is assumed to be octets in that encoding, and the sv
13993 will be converted into Unicode (and UTF-8).
13994
13995 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13996 is not a reference, nothing is done to the sv.  If the encoding is not
13997 an C<Encode::XS> Encoding object, bad things will happen.
13998 (See F<lib/encoding.pm> and L<Encode>.)
13999
14000 The PV of the sv is returned.
14001
14002 =cut */
14003
14004 char *
14005 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
14006 {
14007     dVAR;
14008
14009     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
14010
14011     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
14012         SV *uni;
14013         STRLEN len;
14014         const char *s;
14015         dSP;
14016         ENTER;
14017         SAVETMPS;
14018         save_re_context();
14019         PUSHMARK(sp);
14020         EXTEND(SP, 3);
14021         PUSHs(encoding);
14022         PUSHs(sv);
14023 /*
14024   NI-S 2002/07/09
14025   Passing sv_yes is wrong - it needs to be or'ed set of constants
14026   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
14027   remove converted chars from source.
14028
14029   Both will default the value - let them.
14030
14031         XPUSHs(&PL_sv_yes);
14032 */
14033         PUTBACK;
14034         call_method("decode", G_SCALAR);
14035         SPAGAIN;
14036         uni = POPs;
14037         PUTBACK;
14038         s = SvPV_const(uni, len);
14039         if (s != SvPVX_const(sv)) {
14040             SvGROW(sv, len + 1);
14041             Move(s, SvPVX(sv), len + 1, char);
14042             SvCUR_set(sv, len);
14043         }
14044         FREETMPS;
14045         LEAVE;
14046         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
14047             /* clear pos and any utf8 cache */
14048             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
14049             if (mg)
14050                 mg->mg_len = -1;
14051             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
14052                 magic_setutf8(sv,mg); /* clear UTF8 cache */
14053         }
14054         SvUTF8_on(sv);
14055         return SvPVX(sv);
14056     }
14057     return SvPOKp(sv) ? SvPVX(sv) : NULL;
14058 }
14059
14060 /*
14061 =for apidoc sv_cat_decode
14062
14063 The encoding is assumed to be an Encode object, the PV of the ssv is
14064 assumed to be octets in that encoding and decoding the input starts
14065 from the position which (PV + *offset) pointed to.  The dsv will be
14066 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
14067 when the string tstr appears in decoding output or the input ends on
14068 the PV of the ssv.  The value which the offset points will be modified
14069 to the last input position on the ssv.
14070
14071 Returns TRUE if the terminator was found, else returns FALSE.
14072
14073 =cut */
14074
14075 bool
14076 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
14077                    SV *ssv, int *offset, char *tstr, int tlen)
14078 {
14079     dVAR;
14080     bool ret = FALSE;
14081
14082     PERL_ARGS_ASSERT_SV_CAT_DECODE;
14083
14084     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
14085         SV *offsv;
14086         dSP;
14087         ENTER;
14088         SAVETMPS;
14089         save_re_context();
14090         PUSHMARK(sp);
14091         EXTEND(SP, 6);
14092         PUSHs(encoding);
14093         PUSHs(dsv);
14094         PUSHs(ssv);
14095         offsv = newSViv(*offset);
14096         mPUSHs(offsv);
14097         mPUSHp(tstr, tlen);
14098         PUTBACK;
14099         call_method("cat_decode", G_SCALAR);
14100         SPAGAIN;
14101         ret = SvTRUE(TOPs);
14102         *offset = SvIV(offsv);
14103         PUTBACK;
14104         FREETMPS;
14105         LEAVE;
14106     }
14107     else
14108         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14109     return ret;
14110
14111 }
14112
14113 /* ---------------------------------------------------------------------
14114  *
14115  * support functions for report_uninit()
14116  */
14117
14118 /* the maxiumum size of array or hash where we will scan looking
14119  * for the undefined element that triggered the warning */
14120
14121 #define FUV_MAX_SEARCH_SIZE 1000
14122
14123 /* Look for an entry in the hash whose value has the same SV as val;
14124  * If so, return a mortal copy of the key. */
14125
14126 STATIC SV*
14127 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14128 {
14129     dVAR;
14130     HE **array;
14131     I32 i;
14132
14133     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14134
14135     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14136                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14137         return NULL;
14138
14139     array = HvARRAY(hv);
14140
14141     for (i=HvMAX(hv); i>=0; i--) {
14142         HE *entry;
14143         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14144             if (HeVAL(entry) != val)
14145                 continue;
14146             if (    HeVAL(entry) == &PL_sv_undef ||
14147                     HeVAL(entry) == &PL_sv_placeholder)
14148                 continue;
14149             if (!HeKEY(entry))
14150                 return NULL;
14151             if (HeKLEN(entry) == HEf_SVKEY)
14152                 return sv_mortalcopy(HeKEY_sv(entry));
14153             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14154         }
14155     }
14156     return NULL;
14157 }
14158
14159 /* Look for an entry in the array whose value has the same SV as val;
14160  * If so, return the index, otherwise return -1. */
14161
14162 STATIC I32
14163 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14164 {
14165     dVAR;
14166
14167     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14168
14169     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14170                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14171         return -1;
14172
14173     if (val != &PL_sv_undef) {
14174         SV ** const svp = AvARRAY(av);
14175         I32 i;
14176
14177         for (i=AvFILLp(av); i>=0; i--)
14178             if (svp[i] == val)
14179                 return i;
14180     }
14181     return -1;
14182 }
14183
14184 /* varname(): return the name of a variable, optionally with a subscript.
14185  * If gv is non-zero, use the name of that global, along with gvtype (one
14186  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14187  * targ.  Depending on the value of the subscript_type flag, return:
14188  */
14189
14190 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14191 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14192 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14193 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14194
14195 SV*
14196 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14197         const SV *const keyname, I32 aindex, int subscript_type)
14198 {
14199
14200     SV * const name = sv_newmortal();
14201     if (gv && isGV(gv)) {
14202         char buffer[2];
14203         buffer[0] = gvtype;
14204         buffer[1] = 0;
14205
14206         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14207
14208         gv_fullname4(name, gv, buffer, 0);
14209
14210         if ((unsigned int)SvPVX(name)[1] <= 26) {
14211             buffer[0] = '^';
14212             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14213
14214             /* Swap the 1 unprintable control character for the 2 byte pretty
14215                version - ie substr($name, 1, 1) = $buffer; */
14216             sv_insert(name, 1, 1, buffer, 2);
14217         }
14218     }
14219     else {
14220         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14221         SV *sv;
14222         AV *av;
14223
14224         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14225
14226         if (!cv || !CvPADLIST(cv))
14227             return NULL;
14228         av = *PadlistARRAY(CvPADLIST(cv));
14229         sv = *av_fetch(av, targ, FALSE);
14230         sv_setsv_flags(name, sv, 0);
14231     }
14232
14233     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14234         SV * const sv = newSV(0);
14235         *SvPVX(name) = '$';
14236         Perl_sv_catpvf(aTHX_ name, "{%s}",
14237             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14238                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14239         SvREFCNT_dec_NN(sv);
14240     }
14241     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14242         *SvPVX(name) = '$';
14243         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14244     }
14245     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14246         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14247         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14248     }
14249
14250     return name;
14251 }
14252
14253
14254 /*
14255 =for apidoc find_uninit_var
14256
14257 Find the name of the undefined variable (if any) that caused the operator
14258 to issue a "Use of uninitialized value" warning.
14259 If match is true, only return a name if its value matches uninit_sv.
14260 So roughly speaking, if a unary operator (such as OP_COS) generates a
14261 warning, then following the direct child of the op may yield an
14262 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14263 other hand, with OP_ADD there are two branches to follow, so we only print
14264 the variable name if we get an exact match.
14265
14266 The name is returned as a mortal SV.
14267
14268 Assumes that PL_op is the op that originally triggered the error, and that
14269 PL_comppad/PL_curpad points to the currently executing pad.
14270
14271 =cut
14272 */
14273
14274 STATIC SV *
14275 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14276                   bool match)
14277 {
14278     dVAR;
14279     SV *sv;
14280     const GV *gv;
14281     const OP *o, *o2, *kid;
14282
14283     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14284                             uninit_sv == &PL_sv_placeholder)))
14285         return NULL;
14286
14287     switch (obase->op_type) {
14288
14289     case OP_RV2AV:
14290     case OP_RV2HV:
14291     case OP_PADAV:
14292     case OP_PADHV:
14293       {
14294         const bool pad  = (    obase->op_type == OP_PADAV
14295                             || obase->op_type == OP_PADHV
14296                             || obase->op_type == OP_PADRANGE
14297                           );
14298
14299         const bool hash = (    obase->op_type == OP_PADHV
14300                             || obase->op_type == OP_RV2HV
14301                             || (obase->op_type == OP_PADRANGE
14302                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14303                           );
14304         I32 index = 0;
14305         SV *keysv = NULL;
14306         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14307
14308         if (pad) { /* @lex, %lex */
14309             sv = PAD_SVl(obase->op_targ);
14310             gv = NULL;
14311         }
14312         else {
14313             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14314             /* @global, %global */
14315                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14316                 if (!gv)
14317                     break;
14318                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14319             }
14320             else if (obase == PL_op) /* @{expr}, %{expr} */
14321                 return find_uninit_var(cUNOPx(obase)->op_first,
14322                                                     uninit_sv, match);
14323             else /* @{expr}, %{expr} as a sub-expression */
14324                 return NULL;
14325         }
14326
14327         /* attempt to find a match within the aggregate */
14328         if (hash) {
14329             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14330             if (keysv)
14331                 subscript_type = FUV_SUBSCRIPT_HASH;
14332         }
14333         else {
14334             index = find_array_subscript((const AV *)sv, uninit_sv);
14335             if (index >= 0)
14336                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14337         }
14338
14339         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14340             break;
14341
14342         return varname(gv, hash ? '%' : '@', obase->op_targ,
14343                                     keysv, index, subscript_type);
14344       }
14345
14346     case OP_RV2SV:
14347         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14348             /* $global */
14349             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14350             if (!gv || !GvSTASH(gv))
14351                 break;
14352             if (match && (GvSV(gv) != uninit_sv))
14353                 break;
14354             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14355         }
14356         /* ${expr} */
14357         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14358
14359     case OP_PADSV:
14360         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14361             break;
14362         return varname(NULL, '$', obase->op_targ,
14363                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14364
14365     case OP_GVSV:
14366         gv = cGVOPx_gv(obase);
14367         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14368             break;
14369         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14370
14371     case OP_AELEMFAST_LEX:
14372         if (match) {
14373             SV **svp;
14374             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14375             if (!av || SvRMAGICAL(av))
14376                 break;
14377             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14378             if (!svp || *svp != uninit_sv)
14379                 break;
14380         }
14381         return varname(NULL, '$', obase->op_targ,
14382                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14383     case OP_AELEMFAST:
14384         {
14385             gv = cGVOPx_gv(obase);
14386             if (!gv)
14387                 break;
14388             if (match) {
14389                 SV **svp;
14390                 AV *const av = GvAV(gv);
14391                 if (!av || SvRMAGICAL(av))
14392                     break;
14393                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14394                 if (!svp || *svp != uninit_sv)
14395                     break;
14396             }
14397             return varname(gv, '$', 0,
14398                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14399         }
14400         break;
14401
14402     case OP_EXISTS:
14403         o = cUNOPx(obase)->op_first;
14404         if (!o || o->op_type != OP_NULL ||
14405                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14406             break;
14407         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14408
14409     case OP_AELEM:
14410     case OP_HELEM:
14411     {
14412         bool negate = FALSE;
14413
14414         if (PL_op == obase)
14415             /* $a[uninit_expr] or $h{uninit_expr} */
14416             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14417
14418         gv = NULL;
14419         o = cBINOPx(obase)->op_first;
14420         kid = cBINOPx(obase)->op_last;
14421
14422         /* get the av or hv, and optionally the gv */
14423         sv = NULL;
14424         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14425             sv = PAD_SV(o->op_targ);
14426         }
14427         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14428                 && cUNOPo->op_first->op_type == OP_GV)
14429         {
14430             gv = cGVOPx_gv(cUNOPo->op_first);
14431             if (!gv)
14432                 break;
14433             sv = o->op_type
14434                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14435         }
14436         if (!sv)
14437             break;
14438
14439         if (kid && kid->op_type == OP_NEGATE) {
14440             negate = TRUE;
14441             kid = cUNOPx(kid)->op_first;
14442         }
14443
14444         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14445             /* index is constant */
14446             SV* kidsv;
14447             if (negate) {
14448                 kidsv = sv_2mortal(newSVpvs("-"));
14449                 sv_catsv(kidsv, cSVOPx_sv(kid));
14450             }
14451             else
14452                 kidsv = cSVOPx_sv(kid);
14453             if (match) {
14454                 if (SvMAGICAL(sv))
14455                     break;
14456                 if (obase->op_type == OP_HELEM) {
14457                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14458                     if (!he || HeVAL(he) != uninit_sv)
14459                         break;
14460                 }
14461                 else {
14462                     SV * const  opsv = cSVOPx_sv(kid);
14463                     const IV  opsviv = SvIV(opsv);
14464                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14465                         negate ? - opsviv : opsviv,
14466                         FALSE);
14467                     if (!svp || *svp != uninit_sv)
14468                         break;
14469                 }
14470             }
14471             if (obase->op_type == OP_HELEM)
14472                 return varname(gv, '%', o->op_targ,
14473                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14474             else
14475                 return varname(gv, '@', o->op_targ, NULL,
14476                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14477                     FUV_SUBSCRIPT_ARRAY);
14478         }
14479         else  {
14480             /* index is an expression;
14481              * attempt to find a match within the aggregate */
14482             if (obase->op_type == OP_HELEM) {
14483                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14484                 if (keysv)
14485                     return varname(gv, '%', o->op_targ,
14486                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14487             }
14488             else {
14489                 const I32 index
14490                     = find_array_subscript((const AV *)sv, uninit_sv);
14491                 if (index >= 0)
14492                     return varname(gv, '@', o->op_targ,
14493                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14494             }
14495             if (match)
14496                 break;
14497             return varname(gv,
14498                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14499                 ? '@' : '%',
14500                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14501         }
14502         break;
14503     }
14504
14505     case OP_AASSIGN:
14506         /* only examine RHS */
14507         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14508
14509     case OP_OPEN:
14510         o = cUNOPx(obase)->op_first;
14511         if (   o->op_type == OP_PUSHMARK
14512            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14513         )
14514             o = o->op_sibling;
14515
14516         if (!o->op_sibling) {
14517             /* one-arg version of open is highly magical */
14518
14519             if (o->op_type == OP_GV) { /* open FOO; */
14520                 gv = cGVOPx_gv(o);
14521                 if (match && GvSV(gv) != uninit_sv)
14522                     break;
14523                 return varname(gv, '$', 0,
14524                             NULL, 0, FUV_SUBSCRIPT_NONE);
14525             }
14526             /* other possibilities not handled are:
14527              * open $x; or open my $x;  should return '${*$x}'
14528              * open expr;               should return '$'.expr ideally
14529              */
14530              break;
14531         }
14532         goto do_op;
14533
14534     /* ops where $_ may be an implicit arg */
14535     case OP_TRANS:
14536     case OP_TRANSR:
14537     case OP_SUBST:
14538     case OP_MATCH:
14539         if ( !(obase->op_flags & OPf_STACKED)) {
14540             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14541                                  ? PAD_SVl(obase->op_targ)
14542                                  : DEFSV))
14543             {
14544                 sv = sv_newmortal();
14545                 sv_setpvs(sv, "$_");
14546                 return sv;
14547             }
14548         }
14549         goto do_op;
14550
14551     case OP_PRTF:
14552     case OP_PRINT:
14553     case OP_SAY:
14554         match = 1; /* print etc can return undef on defined args */
14555         /* skip filehandle as it can't produce 'undef' warning  */
14556         o = cUNOPx(obase)->op_first;
14557         if ((obase->op_flags & OPf_STACKED)
14558             &&
14559                (   o->op_type == OP_PUSHMARK
14560                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14561             o = o->op_sibling->op_sibling;
14562         goto do_op2;
14563
14564
14565     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14566     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14567
14568         /* the following ops are capable of returning PL_sv_undef even for
14569          * defined arg(s) */
14570
14571     case OP_BACKTICK:
14572     case OP_PIPE_OP:
14573     case OP_FILENO:
14574     case OP_BINMODE:
14575     case OP_TIED:
14576     case OP_GETC:
14577     case OP_SYSREAD:
14578     case OP_SEND:
14579     case OP_IOCTL:
14580     case OP_SOCKET:
14581     case OP_SOCKPAIR:
14582     case OP_BIND:
14583     case OP_CONNECT:
14584     case OP_LISTEN:
14585     case OP_ACCEPT:
14586     case OP_SHUTDOWN:
14587     case OP_SSOCKOPT:
14588     case OP_GETPEERNAME:
14589     case OP_FTRREAD:
14590     case OP_FTRWRITE:
14591     case OP_FTREXEC:
14592     case OP_FTROWNED:
14593     case OP_FTEREAD:
14594     case OP_FTEWRITE:
14595     case OP_FTEEXEC:
14596     case OP_FTEOWNED:
14597     case OP_FTIS:
14598     case OP_FTZERO:
14599     case OP_FTSIZE:
14600     case OP_FTFILE:
14601     case OP_FTDIR:
14602     case OP_FTLINK:
14603     case OP_FTPIPE:
14604     case OP_FTSOCK:
14605     case OP_FTBLK:
14606     case OP_FTCHR:
14607     case OP_FTTTY:
14608     case OP_FTSUID:
14609     case OP_FTSGID:
14610     case OP_FTSVTX:
14611     case OP_FTTEXT:
14612     case OP_FTBINARY:
14613     case OP_FTMTIME:
14614     case OP_FTATIME:
14615     case OP_FTCTIME:
14616     case OP_READLINK:
14617     case OP_OPEN_DIR:
14618     case OP_READDIR:
14619     case OP_TELLDIR:
14620     case OP_SEEKDIR:
14621     case OP_REWINDDIR:
14622     case OP_CLOSEDIR:
14623     case OP_GMTIME:
14624     case OP_ALARM:
14625     case OP_SEMGET:
14626     case OP_GETLOGIN:
14627     case OP_UNDEF:
14628     case OP_SUBSTR:
14629     case OP_AEACH:
14630     case OP_EACH:
14631     case OP_SORT:
14632     case OP_CALLER:
14633     case OP_DOFILE:
14634     case OP_PROTOTYPE:
14635     case OP_NCMP:
14636     case OP_SMARTMATCH:
14637     case OP_UNPACK:
14638     case OP_SYSOPEN:
14639     case OP_SYSSEEK:
14640         match = 1;
14641         goto do_op;
14642
14643     case OP_ENTERSUB:
14644     case OP_GOTO:
14645         /* XXX tmp hack: these two may call an XS sub, and currently
14646           XS subs don't have a SUB entry on the context stack, so CV and
14647           pad determination goes wrong, and BAD things happen. So, just
14648           don't try to determine the value under those circumstances.
14649           Need a better fix at dome point. DAPM 11/2007 */
14650         break;
14651
14652     case OP_FLIP:
14653     case OP_FLOP:
14654     {
14655         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14656         if (gv && GvSV(gv) == uninit_sv)
14657             return newSVpvs_flags("$.", SVs_TEMP);
14658         goto do_op;
14659     }
14660
14661     case OP_POS:
14662         /* def-ness of rval pos() is independent of the def-ness of its arg */
14663         if ( !(obase->op_flags & OPf_MOD))
14664             break;
14665
14666     case OP_SCHOMP:
14667     case OP_CHOMP:
14668         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14669             return newSVpvs_flags("${$/}", SVs_TEMP);
14670         /*FALLTHROUGH*/
14671
14672     default:
14673     do_op:
14674         if (!(obase->op_flags & OPf_KIDS))
14675             break;
14676         o = cUNOPx(obase)->op_first;
14677         
14678     do_op2:
14679         if (!o)
14680             break;
14681
14682         /* This loop checks all the kid ops, skipping any that cannot pos-
14683          * sibly be responsible for the uninitialized value; i.e., defined
14684          * constants and ops that return nothing.  If there is only one op
14685          * left that is not skipped, then we *know* it is responsible for
14686          * the uninitialized value.  If there is more than one op left, we
14687          * have to look for an exact match in the while() loop below.
14688          * Note that we skip padrange, because the individual pad ops that
14689          * it replaced are still in the tree, so we work on them instead.
14690          */
14691         o2 = NULL;
14692         for (kid=o; kid; kid = kid->op_sibling) {
14693             if (kid) {
14694                 const OPCODE type = kid->op_type;
14695                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14696                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14697                   || (type == OP_PUSHMARK)
14698                   || (type == OP_PADRANGE)
14699                 )
14700                 continue;
14701             }
14702             if (o2) { /* more than one found */
14703                 o2 = NULL;
14704                 break;
14705             }
14706             o2 = kid;
14707         }
14708         if (o2)
14709             return find_uninit_var(o2, uninit_sv, match);
14710
14711         /* scan all args */
14712         while (o) {
14713             sv = find_uninit_var(o, uninit_sv, 1);
14714             if (sv)
14715                 return sv;
14716             o = o->op_sibling;
14717         }
14718         break;
14719     }
14720     return NULL;
14721 }
14722
14723
14724 /*
14725 =for apidoc report_uninit
14726
14727 Print appropriate "Use of uninitialized variable" warning.
14728
14729 =cut
14730 */
14731
14732 void
14733 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14734 {
14735     dVAR;
14736     if (PL_op) {
14737         SV* varname = NULL;
14738         if (uninit_sv && PL_curpad) {
14739             varname = find_uninit_var(PL_op, uninit_sv,0);
14740             if (varname)
14741                 sv_insert(varname, 0, 0, " ", 1);
14742         }
14743         /* diag_listed_as: Use of uninitialized value%s */
14744         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14745                 SVfARG(varname ? varname : &PL_sv_no),
14746                 " in ", OP_DESC(PL_op));
14747     }
14748     else
14749         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14750                     "", "", "");
14751 }
14752
14753 /*
14754  * Local variables:
14755  * c-indentation-style: bsd
14756  * c-basic-offset: 4
14757  * indent-tabs-mode: nil
14758  * End:
14759  *
14760  * ex: set ts=8 sts=4 sw=4 et:
14761  */