This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
import perl5175delta content to perl5180delta
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #ifndef HAS_C99
36 # if __STDC_VERSION__ >= 199901L && !defined(VMS)
37 #  define HAS_C99 1
38 # endif
39 #endif
40 #if HAS_C99
41 # include <stdint.h>
42 #endif
43
44 #define FCALL *f
45
46 #ifdef __Lynx__
47 /* Missing proto on LynxOS */
48   char *gconvert(double, int, int,  char *);
49 #endif
50
51 #ifdef PERL_UTF8_CACHE_ASSERT
52 /* if adding more checks watch out for the following tests:
53  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
54  *   lib/utf8.t lib/Unicode/Collate/t/index.t
55  * --jhi
56  */
57 #   define ASSERT_UTF8_CACHE(cache) \
58     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
59                               assert((cache)[2] <= (cache)[3]); \
60                               assert((cache)[3] <= (cache)[1]);} \
61                               } STMT_END
62 #else
63 #   define ASSERT_UTF8_CACHE(cache) NOOP
64 #endif
65
66 #ifdef PERL_OLD_COPY_ON_WRITE
67 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
68 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
69 #endif
70
71 /* ============================================================================
72
73 =head1 Allocation and deallocation of SVs.
74
75 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
76 sv, av, hv...) contains type and reference count information, and for
77 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
78 contains fields specific to each type.  Some types store all they need
79 in the head, so don't have a body.
80
81 In all but the most memory-paranoid configurations (ex: PURIFY), heads
82 and bodies are allocated out of arenas, which by default are
83 approximately 4K chunks of memory parcelled up into N heads or bodies.
84 Sv-bodies are allocated by their sv-type, guaranteeing size
85 consistency needed to allocate safely from arrays.
86
87 For SV-heads, the first slot in each arena is reserved, and holds a
88 link to the next arena, some flags, and a note of the number of slots.
89 Snaked through each arena chain is a linked list of free items; when
90 this becomes empty, an extra arena is allocated and divided up into N
91 items which are threaded into the free list.
92
93 SV-bodies are similar, but they use arena-sets by default, which
94 separate the link and info from the arena itself, and reclaim the 1st
95 slot in the arena.  SV-bodies are further described later.
96
97 The following global variables are associated with arenas:
98
99     PL_sv_arenaroot     pointer to list of SV arenas
100     PL_sv_root          pointer to list of free SV structures
101
102     PL_body_arenas      head of linked-list of body arenas
103     PL_body_roots[]     array of pointers to list of free bodies of svtype
104                         arrays are indexed by the svtype needed
105
106 A few special SV heads are not allocated from an arena, but are
107 instead directly created in the interpreter structure, eg PL_sv_undef.
108 The size of arenas can be changed from the default by setting
109 PERL_ARENA_SIZE appropriately at compile time.
110
111 The SV arena serves the secondary purpose of allowing still-live SVs
112 to be located and destroyed during final cleanup.
113
114 At the lowest level, the macros new_SV() and del_SV() grab and free
115 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
116 to return the SV to the free list with error checking.) new_SV() calls
117 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
118 SVs in the free list have their SvTYPE field set to all ones.
119
120 At the time of very final cleanup, sv_free_arenas() is called from
121 perl_destruct() to physically free all the arenas allocated since the
122 start of the interpreter.
123
124 The function visit() scans the SV arenas list, and calls a specified
125 function for each SV it finds which is still live - ie which has an SvTYPE
126 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
127 following functions (specified as [function that calls visit()] / [function
128 called by visit() for each SV]):
129
130     sv_report_used() / do_report_used()
131                         dump all remaining SVs (debugging aid)
132
133     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
134                       do_clean_named_io_objs(),do_curse()
135                         Attempt to free all objects pointed to by RVs,
136                         try to do the same for all objects indir-
137                         ectly referenced by typeglobs too, and
138                         then do a final sweep, cursing any
139                         objects that remain.  Called once from
140                         perl_destruct(), prior to calling sv_clean_all()
141                         below.
142
143     sv_clean_all() / do_clean_all()
144                         SvREFCNT_dec(sv) each remaining SV, possibly
145                         triggering an sv_free(). It also sets the
146                         SVf_BREAK flag on the SV to indicate that the
147                         refcnt has been artificially lowered, and thus
148                         stopping sv_free() from giving spurious warnings
149                         about SVs which unexpectedly have a refcnt
150                         of zero.  called repeatedly from perl_destruct()
151                         until there are no SVs left.
152
153 =head2 Arena allocator API Summary
154
155 Private API to rest of sv.c
156
157     new_SV(),  del_SV(),
158
159     new_XPVNV(), del_XPVGV(),
160     etc
161
162 Public API:
163
164     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165
166 =cut
167
168  * ========================================================================= */
169
170 /*
171  * "A time to plant, and a time to uproot what was planted..."
172  */
173
174 #ifdef PERL_MEM_LOG
175 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
176             Perl_mem_log_new_sv(sv, file, line, func)
177 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
178             Perl_mem_log_del_sv(sv, file, line, func)
179 #else
180 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
181 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
182 #endif
183
184 #ifdef DEBUG_LEAKING_SCALARS
185 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
186         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
187     } STMT_END
188 #  define DEBUG_SV_SERIAL(sv)                                               \
189     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
190             PTR2UV(sv), (long)(sv)->sv_debug_serial))
191 #else
192 #  define FREE_SV_DEBUG_FILE(sv)
193 #  define DEBUG_SV_SERIAL(sv)   NOOP
194 #endif
195
196 #ifdef PERL_POISON
197 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
198 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
199 /* Whilst I'd love to do this, it seems that things like to check on
200    unreferenced scalars
201 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
202 */
203 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
204                                 PoisonNew(&SvREFCNT(sv), 1, U32)
205 #else
206 #  define SvARENA_CHAIN(sv)     SvANY(sv)
207 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
208 #  define POSION_SV_HEAD(sv)
209 #endif
210
211 /* Mark an SV head as unused, and add to free list.
212  *
213  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
214  * its refcount artificially decremented during global destruction, so
215  * there may be dangling pointers to it. The last thing we want in that
216  * case is for it to be reused. */
217
218 #define plant_SV(p) \
219     STMT_START {                                        \
220         const U32 old_flags = SvFLAGS(p);                       \
221         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
222         DEBUG_SV_SERIAL(p);                             \
223         FREE_SV_DEBUG_FILE(p);                          \
224         POSION_SV_HEAD(p);                              \
225         SvFLAGS(p) = SVTYPEMASK;                        \
226         if (!(old_flags & SVf_BREAK)) {         \
227             SvARENA_CHAIN_SET(p, PL_sv_root);   \
228             PL_sv_root = (p);                           \
229         }                                               \
230         --PL_sv_count;                                  \
231     } STMT_END
232
233 #define uproot_SV(p) \
234     STMT_START {                                        \
235         (p) = PL_sv_root;                               \
236         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
237         ++PL_sv_count;                                  \
238     } STMT_END
239
240
241 /* make some more SVs by adding another arena */
242
243 STATIC SV*
244 S_more_sv(pTHX)
245 {
246     dVAR;
247     SV* sv;
248     char *chunk;                /* must use New here to match call to */
249     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
250     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
251     uproot_SV(sv);
252     return sv;
253 }
254
255 /* new_SV(): return a new, empty SV head */
256
257 #ifdef DEBUG_LEAKING_SCALARS
258 /* provide a real function for a debugger to play with */
259 STATIC SV*
260 S_new_SV(pTHX_ const char *file, int line, const char *func)
261 {
262     SV* sv;
263
264     if (PL_sv_root)
265         uproot_SV(sv);
266     else
267         sv = S_more_sv(aTHX);
268     SvANY(sv) = 0;
269     SvREFCNT(sv) = 1;
270     SvFLAGS(sv) = 0;
271     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
272     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
273                 ? PL_parser->copline
274                 :  PL_curcop
275                     ? CopLINE(PL_curcop)
276                     : 0
277             );
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_parent = NULL;
280     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
281
282     sv->sv_debug_serial = PL_sv_serial++;
283
284     MEM_LOG_NEW_SV(sv, file, line, func);
285     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
286             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
287
288     return sv;
289 }
290 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
291
292 #else
293 #  define new_SV(p) \
294     STMT_START {                                        \
295         if (PL_sv_root)                                 \
296             uproot_SV(p);                               \
297         else                                            \
298             (p) = S_more_sv(aTHX);                      \
299         SvANY(p) = 0;                                   \
300         SvREFCNT(p) = 1;                                \
301         SvFLAGS(p) = 0;                                 \
302         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
303     } STMT_END
304 #endif
305
306
307 /* del_SV(): return an empty SV head to the free list */
308
309 #ifdef DEBUGGING
310
311 #define del_SV(p) \
312     STMT_START {                                        \
313         if (DEBUG_D_TEST)                               \
314             del_sv(p);                                  \
315         else                                            \
316             plant_SV(p);                                \
317     } STMT_END
318
319 STATIC void
320 S_del_sv(pTHX_ SV *p)
321 {
322     dVAR;
323
324     PERL_ARGS_ASSERT_DEL_SV;
325
326     if (DEBUG_D_TEST) {
327         SV* sva;
328         bool ok = 0;
329         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
330             const SV * const sv = sva + 1;
331             const SV * const svend = &sva[SvREFCNT(sva)];
332             if (p >= sv && p < svend) {
333                 ok = 1;
334                 break;
335             }
336         }
337         if (!ok) {
338             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
339                              "Attempt to free non-arena SV: 0x%"UVxf
340                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
341             return;
342         }
343     }
344     plant_SV(p);
345 }
346
347 #else /* ! DEBUGGING */
348
349 #define del_SV(p)   plant_SV(p)
350
351 #endif /* DEBUGGING */
352
353
354 /*
355 =head1 SV Manipulation Functions
356
357 =for apidoc sv_add_arena
358
359 Given a chunk of memory, link it to the head of the list of arenas,
360 and split it into a list of free SVs.
361
362 =cut
363 */
364
365 static void
366 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
367 {
368     dVAR;
369     SV *const sva = MUTABLE_SV(ptr);
370     SV* sv;
371     SV* svend;
372
373     PERL_ARGS_ASSERT_SV_ADD_ARENA;
374
375     /* The first SV in an arena isn't an SV. */
376     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
377     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
378     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
379
380     PL_sv_arenaroot = sva;
381     PL_sv_root = sva + 1;
382
383     svend = &sva[SvREFCNT(sva) - 1];
384     sv = sva + 1;
385     while (sv < svend) {
386         SvARENA_CHAIN_SET(sv, (sv + 1));
387 #ifdef DEBUGGING
388         SvREFCNT(sv) = 0;
389 #endif
390         /* Must always set typemask because it's always checked in on cleanup
391            when the arenas are walked looking for objects.  */
392         SvFLAGS(sv) = SVTYPEMASK;
393         sv++;
394     }
395     SvARENA_CHAIN_SET(sv, 0);
396 #ifdef DEBUGGING
397     SvREFCNT(sv) = 0;
398 #endif
399     SvFLAGS(sv) = SVTYPEMASK;
400 }
401
402 /* visit(): call the named function for each non-free SV in the arenas
403  * whose flags field matches the flags/mask args. */
404
405 STATIC I32
406 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
407 {
408     dVAR;
409     SV* sva;
410     I32 visited = 0;
411
412     PERL_ARGS_ASSERT_VISIT;
413
414     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
415         const SV * const svend = &sva[SvREFCNT(sva)];
416         SV* sv;
417         for (sv = sva + 1; sv < svend; ++sv) {
418             if (SvTYPE(sv) != (svtype)SVTYPEMASK
419                     && (sv->sv_flags & mask) == flags
420                     && SvREFCNT(sv))
421             {
422                 (FCALL)(aTHX_ sv);
423                 ++visited;
424             }
425         }
426     }
427     return visited;
428 }
429
430 #ifdef DEBUGGING
431
432 /* called by sv_report_used() for each live SV */
433
434 static void
435 do_report_used(pTHX_ SV *const sv)
436 {
437     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
438         PerlIO_printf(Perl_debug_log, "****\n");
439         sv_dump(sv);
440     }
441 }
442 #endif
443
444 /*
445 =for apidoc sv_report_used
446
447 Dump the contents of all SVs not yet freed (debugging aid).
448
449 =cut
450 */
451
452 void
453 Perl_sv_report_used(pTHX)
454 {
455 #ifdef DEBUGGING
456     visit(do_report_used, 0, 0);
457 #else
458     PERL_UNUSED_CONTEXT;
459 #endif
460 }
461
462 /* called by sv_clean_objs() for each live SV */
463
464 static void
465 do_clean_objs(pTHX_ SV *const ref)
466 {
467     dVAR;
468     assert (SvROK(ref));
469     {
470         SV * const target = SvRV(ref);
471         if (SvOBJECT(target)) {
472             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
473             if (SvWEAKREF(ref)) {
474                 sv_del_backref(target, ref);
475                 SvWEAKREF_off(ref);
476                 SvRV_set(ref, NULL);
477             } else {
478                 SvROK_off(ref);
479                 SvRV_set(ref, NULL);
480                 SvREFCNT_dec_NN(target);
481             }
482         }
483     }
484 }
485
486
487 /* clear any slots in a GV which hold objects - except IO;
488  * called by sv_clean_objs() for each live GV */
489
490 static void
491 do_clean_named_objs(pTHX_ SV *const sv)
492 {
493     dVAR;
494     SV *obj;
495     assert(SvTYPE(sv) == SVt_PVGV);
496     assert(isGV_with_GP(sv));
497     if (!GvGP(sv))
498         return;
499
500     /* freeing GP entries may indirectly free the current GV;
501      * hold onto it while we mess with the GP slots */
502     SvREFCNT_inc(sv);
503
504     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
505         DEBUG_D((PerlIO_printf(Perl_debug_log,
506                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
507         GvSV(sv) = NULL;
508         SvREFCNT_dec_NN(obj);
509     }
510     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
511         DEBUG_D((PerlIO_printf(Perl_debug_log,
512                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
513         GvAV(sv) = NULL;
514         SvREFCNT_dec_NN(obj);
515     }
516     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
517         DEBUG_D((PerlIO_printf(Perl_debug_log,
518                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
519         GvHV(sv) = NULL;
520         SvREFCNT_dec_NN(obj);
521     }
522     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
523         DEBUG_D((PerlIO_printf(Perl_debug_log,
524                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
525         GvCV_set(sv, NULL);
526         SvREFCNT_dec_NN(obj);
527     }
528     SvREFCNT_dec_NN(sv); /* undo the inc above */
529 }
530
531 /* clear any IO slots in a GV which hold objects (except stderr, defout);
532  * called by sv_clean_objs() for each live GV */
533
534 static void
535 do_clean_named_io_objs(pTHX_ SV *const sv)
536 {
537     dVAR;
538     SV *obj;
539     assert(SvTYPE(sv) == SVt_PVGV);
540     assert(isGV_with_GP(sv));
541     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
542         return;
543
544     SvREFCNT_inc(sv);
545     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
546         DEBUG_D((PerlIO_printf(Perl_debug_log,
547                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
548         GvIOp(sv) = NULL;
549         SvREFCNT_dec_NN(obj);
550     }
551     SvREFCNT_dec_NN(sv); /* undo the inc above */
552 }
553
554 /* Void wrapper to pass to visit() */
555 static void
556 do_curse(pTHX_ SV * const sv) {
557     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
558      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
559         return;
560     (void)curse(sv, 0);
561 }
562
563 /*
564 =for apidoc sv_clean_objs
565
566 Attempt to destroy all objects not yet freed.
567
568 =cut
569 */
570
571 void
572 Perl_sv_clean_objs(pTHX)
573 {
574     dVAR;
575     GV *olddef, *olderr;
576     PL_in_clean_objs = TRUE;
577     visit(do_clean_objs, SVf_ROK, SVf_ROK);
578     /* Some barnacles may yet remain, clinging to typeglobs.
579      * Run the non-IO destructors first: they may want to output
580      * error messages, close files etc */
581     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
582     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
583     /* And if there are some very tenacious barnacles clinging to arrays,
584        closures, or what have you.... */
585     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
586     olddef = PL_defoutgv;
587     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
588     if (olddef && isGV_with_GP(olddef))
589         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
590     olderr = PL_stderrgv;
591     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
592     if (olderr && isGV_with_GP(olderr))
593         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
594     SvREFCNT_dec(olddef);
595     PL_in_clean_objs = FALSE;
596 }
597
598 /* called by sv_clean_all() for each live SV */
599
600 static void
601 do_clean_all(pTHX_ SV *const sv)
602 {
603     dVAR;
604     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
605         /* don't clean pid table and strtab */
606         return;
607     }
608     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
609     SvFLAGS(sv) |= SVf_BREAK;
610     SvREFCNT_dec_NN(sv);
611 }
612
613 /*
614 =for apidoc sv_clean_all
615
616 Decrement the refcnt of each remaining SV, possibly triggering a
617 cleanup.  This function may have to be called multiple times to free
618 SVs which are in complex self-referential hierarchies.
619
620 =cut
621 */
622
623 I32
624 Perl_sv_clean_all(pTHX)
625 {
626     dVAR;
627     I32 cleaned;
628     PL_in_clean_all = TRUE;
629     cleaned = visit(do_clean_all, 0,0);
630     return cleaned;
631 }
632
633 /*
634   ARENASETS: a meta-arena implementation which separates arena-info
635   into struct arena_set, which contains an array of struct
636   arena_descs, each holding info for a single arena.  By separating
637   the meta-info from the arena, we recover the 1st slot, formerly
638   borrowed for list management.  The arena_set is about the size of an
639   arena, avoiding the needless malloc overhead of a naive linked-list.
640
641   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
642   memory in the last arena-set (1/2 on average).  In trade, we get
643   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
644   smaller types).  The recovery of the wasted space allows use of
645   small arenas for large, rare body types, by changing array* fields
646   in body_details_by_type[] below.
647 */
648 struct arena_desc {
649     char       *arena;          /* the raw storage, allocated aligned */
650     size_t      size;           /* its size ~4k typ */
651     svtype      utype;          /* bodytype stored in arena */
652 };
653
654 struct arena_set;
655
656 /* Get the maximum number of elements in set[] such that struct arena_set
657    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
658    therefore likely to be 1 aligned memory page.  */
659
660 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
661                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
662
663 struct arena_set {
664     struct arena_set* next;
665     unsigned int   set_size;    /* ie ARENAS_PER_SET */
666     unsigned int   curr;        /* index of next available arena-desc */
667     struct arena_desc set[ARENAS_PER_SET];
668 };
669
670 /*
671 =for apidoc sv_free_arenas
672
673 Deallocate the memory used by all arenas.  Note that all the individual SV
674 heads and bodies within the arenas must already have been freed.
675
676 =cut
677 */
678 void
679 Perl_sv_free_arenas(pTHX)
680 {
681     dVAR;
682     SV* sva;
683     SV* svanext;
684     unsigned int i;
685
686     /* Free arenas here, but be careful about fake ones.  (We assume
687        contiguity of the fake ones with the corresponding real ones.) */
688
689     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
690         svanext = MUTABLE_SV(SvANY(sva));
691         while (svanext && SvFAKE(svanext))
692             svanext = MUTABLE_SV(SvANY(svanext));
693
694         if (!SvFAKE(sva))
695             Safefree(sva);
696     }
697
698     {
699         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
700
701         while (aroot) {
702             struct arena_set *current = aroot;
703             i = aroot->curr;
704             while (i--) {
705                 assert(aroot->set[i].arena);
706                 Safefree(aroot->set[i].arena);
707             }
708             aroot = aroot->next;
709             Safefree(current);
710         }
711     }
712     PL_body_arenas = 0;
713
714     i = PERL_ARENA_ROOTS_SIZE;
715     while (i--)
716         PL_body_roots[i] = 0;
717
718     PL_sv_arenaroot = 0;
719     PL_sv_root = 0;
720 }
721
722 /*
723   Here are mid-level routines that manage the allocation of bodies out
724   of the various arenas.  There are 5 kinds of arenas:
725
726   1. SV-head arenas, which are discussed and handled above
727   2. regular body arenas
728   3. arenas for reduced-size bodies
729   4. Hash-Entry arenas
730
731   Arena types 2 & 3 are chained by body-type off an array of
732   arena-root pointers, which is indexed by svtype.  Some of the
733   larger/less used body types are malloced singly, since a large
734   unused block of them is wasteful.  Also, several svtypes dont have
735   bodies; the data fits into the sv-head itself.  The arena-root
736   pointer thus has a few unused root-pointers (which may be hijacked
737   later for arena types 4,5)
738
739   3 differs from 2 as an optimization; some body types have several
740   unused fields in the front of the structure (which are kept in-place
741   for consistency).  These bodies can be allocated in smaller chunks,
742   because the leading fields arent accessed.  Pointers to such bodies
743   are decremented to point at the unused 'ghost' memory, knowing that
744   the pointers are used with offsets to the real memory.
745
746
747 =head1 SV-Body Allocation
748
749 Allocation of SV-bodies is similar to SV-heads, differing as follows;
750 the allocation mechanism is used for many body types, so is somewhat
751 more complicated, it uses arena-sets, and has no need for still-live
752 SV detection.
753
754 At the outermost level, (new|del)_X*V macros return bodies of the
755 appropriate type.  These macros call either (new|del)_body_type or
756 (new|del)_body_allocated macro pairs, depending on specifics of the
757 type.  Most body types use the former pair, the latter pair is used to
758 allocate body types with "ghost fields".
759
760 "ghost fields" are fields that are unused in certain types, and
761 consequently don't need to actually exist.  They are declared because
762 they're part of a "base type", which allows use of functions as
763 methods.  The simplest examples are AVs and HVs, 2 aggregate types
764 which don't use the fields which support SCALAR semantics.
765
766 For these types, the arenas are carved up into appropriately sized
767 chunks, we thus avoid wasted memory for those unaccessed members.
768 When bodies are allocated, we adjust the pointer back in memory by the
769 size of the part not allocated, so it's as if we allocated the full
770 structure.  (But things will all go boom if you write to the part that
771 is "not there", because you'll be overwriting the last members of the
772 preceding structure in memory.)
773
774 We calculate the correction using the STRUCT_OFFSET macro on the first
775 member present. If the allocated structure is smaller (no initial NV
776 actually allocated) then the net effect is to subtract the size of the NV
777 from the pointer, to return a new pointer as if an initial NV were actually
778 allocated. (We were using structures named *_allocated for this, but
779 this turned out to be a subtle bug, because a structure without an NV
780 could have a lower alignment constraint, but the compiler is allowed to
781 optimised accesses based on the alignment constraint of the actual pointer
782 to the full structure, for example, using a single 64 bit load instruction
783 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
784
785 This is the same trick as was used for NV and IV bodies. Ironically it
786 doesn't need to be used for NV bodies any more, because NV is now at
787 the start of the structure. IV bodies don't need it either, because
788 they are no longer allocated.
789
790 In turn, the new_body_* allocators call S_new_body(), which invokes
791 new_body_inline macro, which takes a lock, and takes a body off the
792 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
793 necessary to refresh an empty list.  Then the lock is released, and
794 the body is returned.
795
796 Perl_more_bodies allocates a new arena, and carves it up into an array of N
797 bodies, which it strings into a linked list.  It looks up arena-size
798 and body-size from the body_details table described below, thus
799 supporting the multiple body-types.
800
801 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
802 the (new|del)_X*V macros are mapped directly to malloc/free.
803
804 For each sv-type, struct body_details bodies_by_type[] carries
805 parameters which control these aspects of SV handling:
806
807 Arena_size determines whether arenas are used for this body type, and if
808 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
809 zero, forcing individual mallocs and frees.
810
811 Body_size determines how big a body is, and therefore how many fit into
812 each arena.  Offset carries the body-pointer adjustment needed for
813 "ghost fields", and is used in *_allocated macros.
814
815 But its main purpose is to parameterize info needed in
816 Perl_sv_upgrade().  The info here dramatically simplifies the function
817 vs the implementation in 5.8.8, making it table-driven.  All fields
818 are used for this, except for arena_size.
819
820 For the sv-types that have no bodies, arenas are not used, so those
821 PL_body_roots[sv_type] are unused, and can be overloaded.  In
822 something of a special case, SVt_NULL is borrowed for HE arenas;
823 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
824 bodies_by_type[SVt_NULL] slot is not used, as the table is not
825 available in hv.c.
826
827 */
828
829 struct body_details {
830     U8 body_size;       /* Size to allocate  */
831     U8 copy;            /* Size of structure to copy (may be shorter)  */
832     U8 offset;
833     unsigned int type : 4;          /* We have space for a sanity check.  */
834     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
835     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
836     unsigned int arena : 1;         /* Allocated from an arena */
837     size_t arena_size;              /* Size of arena to allocate */
838 };
839
840 #define HADNV FALSE
841 #define NONV TRUE
842
843
844 #ifdef PURIFY
845 /* With -DPURFIY we allocate everything directly, and don't use arenas.
846    This seems a rather elegant way to simplify some of the code below.  */
847 #define HASARENA FALSE
848 #else
849 #define HASARENA TRUE
850 #endif
851 #define NOARENA FALSE
852
853 /* Size the arenas to exactly fit a given number of bodies.  A count
854    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
855    simplifying the default.  If count > 0, the arena is sized to fit
856    only that many bodies, allowing arenas to be used for large, rare
857    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
858    limited by PERL_ARENA_SIZE, so we can safely oversize the
859    declarations.
860  */
861 #define FIT_ARENA0(body_size)                           \
862     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
863 #define FIT_ARENAn(count,body_size)                     \
864     ( count * body_size <= PERL_ARENA_SIZE)             \
865     ? count * body_size                                 \
866     : FIT_ARENA0 (body_size)
867 #define FIT_ARENA(count,body_size)                      \
868     count                                               \
869     ? FIT_ARENAn (count, body_size)                     \
870     : FIT_ARENA0 (body_size)
871
872 /* Calculate the length to copy. Specifically work out the length less any
873    final padding the compiler needed to add.  See the comment in sv_upgrade
874    for why copying the padding proved to be a bug.  */
875
876 #define copy_length(type, last_member) \
877         STRUCT_OFFSET(type, last_member) \
878         + sizeof (((type*)SvANY((const SV *)0))->last_member)
879
880 static const struct body_details bodies_by_type[] = {
881     /* HEs use this offset for their arena.  */
882     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
883
884     /* The bind placeholder pretends to be an RV for now.
885        Also it's marked as "can't upgrade" to stop anyone using it before it's
886        implemented.  */
887     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
888
889     /* IVs are in the head, so the allocation size is 0.  */
890     { 0,
891       sizeof(IV), /* This is used to copy out the IV body.  */
892       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
893       NOARENA /* IVS don't need an arena  */, 0
894     },
895
896     { sizeof(NV), sizeof(NV),
897       STRUCT_OFFSET(XPVNV, xnv_u),
898       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
899
900     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
901       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
902       + STRUCT_OFFSET(XPV, xpv_cur),
903       SVt_PV, FALSE, NONV, HASARENA,
904       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
905
906     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
907       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
908       + STRUCT_OFFSET(XPV, xpv_cur),
909       SVt_PVIV, FALSE, NONV, HASARENA,
910       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
911
912     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
913       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
914       + STRUCT_OFFSET(XPV, xpv_cur),
915       SVt_PVNV, FALSE, HADNV, HASARENA,
916       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
917
918     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
919       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
920
921     { sizeof(regexp),
922       sizeof(regexp),
923       0,
924       SVt_REGEXP, FALSE, NONV, HASARENA,
925       FIT_ARENA(0, sizeof(regexp))
926     },
927
928     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
929       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
930     
931     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
932       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
933
934     { sizeof(XPVAV),
935       copy_length(XPVAV, xav_alloc),
936       0,
937       SVt_PVAV, TRUE, NONV, HASARENA,
938       FIT_ARENA(0, sizeof(XPVAV)) },
939
940     { sizeof(XPVHV),
941       copy_length(XPVHV, xhv_max),
942       0,
943       SVt_PVHV, TRUE, NONV, HASARENA,
944       FIT_ARENA(0, sizeof(XPVHV)) },
945
946     { sizeof(XPVCV),
947       sizeof(XPVCV),
948       0,
949       SVt_PVCV, TRUE, NONV, HASARENA,
950       FIT_ARENA(0, sizeof(XPVCV)) },
951
952     { sizeof(XPVFM),
953       sizeof(XPVFM),
954       0,
955       SVt_PVFM, TRUE, NONV, NOARENA,
956       FIT_ARENA(20, sizeof(XPVFM)) },
957
958     { sizeof(XPVIO),
959       sizeof(XPVIO),
960       0,
961       SVt_PVIO, TRUE, NONV, HASARENA,
962       FIT_ARENA(24, sizeof(XPVIO)) },
963 };
964
965 #define new_body_allocated(sv_type)             \
966     (void *)((char *)S_new_body(aTHX_ sv_type)  \
967              - bodies_by_type[sv_type].offset)
968
969 /* return a thing to the free list */
970
971 #define del_body(thing, root)                           \
972     STMT_START {                                        \
973         void ** const thing_copy = (void **)thing;      \
974         *thing_copy = *root;                            \
975         *root = (void*)thing_copy;                      \
976     } STMT_END
977
978 #ifdef PURIFY
979
980 #define new_XNV()       safemalloc(sizeof(XPVNV))
981 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
982 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
983
984 #define del_XPVGV(p)    safefree(p)
985
986 #else /* !PURIFY */
987
988 #define new_XNV()       new_body_allocated(SVt_NV)
989 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
990 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
991
992 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
993                                  &PL_body_roots[SVt_PVGV])
994
995 #endif /* PURIFY */
996
997 /* no arena for you! */
998
999 #define new_NOARENA(details) \
1000         safemalloc((details)->body_size + (details)->offset)
1001 #define new_NOARENAZ(details) \
1002         safecalloc((details)->body_size + (details)->offset, 1)
1003
1004 void *
1005 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1006                   const size_t arena_size)
1007 {
1008     dVAR;
1009     void ** const root = &PL_body_roots[sv_type];
1010     struct arena_desc *adesc;
1011     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1012     unsigned int curr;
1013     char *start;
1014     const char *end;
1015     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1016 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1017     static bool done_sanity_check;
1018
1019     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1020      * variables like done_sanity_check. */
1021     if (!done_sanity_check) {
1022         unsigned int i = SVt_LAST;
1023
1024         done_sanity_check = TRUE;
1025
1026         while (i--)
1027             assert (bodies_by_type[i].type == i);
1028     }
1029 #endif
1030
1031     assert(arena_size);
1032
1033     /* may need new arena-set to hold new arena */
1034     if (!aroot || aroot->curr >= aroot->set_size) {
1035         struct arena_set *newroot;
1036         Newxz(newroot, 1, struct arena_set);
1037         newroot->set_size = ARENAS_PER_SET;
1038         newroot->next = aroot;
1039         aroot = newroot;
1040         PL_body_arenas = (void *) newroot;
1041         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1042     }
1043
1044     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1045     curr = aroot->curr++;
1046     adesc = &(aroot->set[curr]);
1047     assert(!adesc->arena);
1048     
1049     Newx(adesc->arena, good_arena_size, char);
1050     adesc->size = good_arena_size;
1051     adesc->utype = sv_type;
1052     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1053                           curr, (void*)adesc->arena, (UV)good_arena_size));
1054
1055     start = (char *) adesc->arena;
1056
1057     /* Get the address of the byte after the end of the last body we can fit.
1058        Remember, this is integer division:  */
1059     end = start + good_arena_size / body_size * body_size;
1060
1061     /* computed count doesn't reflect the 1st slot reservation */
1062 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1063     DEBUG_m(PerlIO_printf(Perl_debug_log,
1064                           "arena %p end %p arena-size %d (from %d) type %d "
1065                           "size %d ct %d\n",
1066                           (void*)start, (void*)end, (int)good_arena_size,
1067                           (int)arena_size, sv_type, (int)body_size,
1068                           (int)good_arena_size / (int)body_size));
1069 #else
1070     DEBUG_m(PerlIO_printf(Perl_debug_log,
1071                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1072                           (void*)start, (void*)end,
1073                           (int)arena_size, sv_type, (int)body_size,
1074                           (int)good_arena_size / (int)body_size));
1075 #endif
1076     *root = (void *)start;
1077
1078     while (1) {
1079         /* Where the next body would start:  */
1080         char * const next = start + body_size;
1081
1082         if (next >= end) {
1083             /* This is the last body:  */
1084             assert(next == end);
1085
1086             *(void **)start = 0;
1087             return *root;
1088         }
1089
1090         *(void**) start = (void *)next;
1091         start = next;
1092     }
1093 }
1094
1095 /* grab a new thing from the free list, allocating more if necessary.
1096    The inline version is used for speed in hot routines, and the
1097    function using it serves the rest (unless PURIFY).
1098 */
1099 #define new_body_inline(xpv, sv_type) \
1100     STMT_START { \
1101         void ** const r3wt = &PL_body_roots[sv_type]; \
1102         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1103           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1104                                              bodies_by_type[sv_type].body_size,\
1105                                              bodies_by_type[sv_type].arena_size)); \
1106         *(r3wt) = *(void**)(xpv); \
1107     } STMT_END
1108
1109 #ifndef PURIFY
1110
1111 STATIC void *
1112 S_new_body(pTHX_ const svtype sv_type)
1113 {
1114     dVAR;
1115     void *xpv;
1116     new_body_inline(xpv, sv_type);
1117     return xpv;
1118 }
1119
1120 #endif
1121
1122 static const struct body_details fake_rv =
1123     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1124
1125 /*
1126 =for apidoc sv_upgrade
1127
1128 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1129 SV, then copies across as much information as possible from the old body.
1130 It croaks if the SV is already in a more complex form than requested.  You
1131 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1132 before calling C<sv_upgrade>, and hence does not croak.  See also
1133 C<svtype>.
1134
1135 =cut
1136 */
1137
1138 void
1139 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1140 {
1141     dVAR;
1142     void*       old_body;
1143     void*       new_body;
1144     const svtype old_type = SvTYPE(sv);
1145     const struct body_details *new_type_details;
1146     const struct body_details *old_type_details
1147         = bodies_by_type + old_type;
1148     SV *referant = NULL;
1149
1150     PERL_ARGS_ASSERT_SV_UPGRADE;
1151
1152     if (old_type == new_type)
1153         return;
1154
1155     /* This clause was purposefully added ahead of the early return above to
1156        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1157        inference by Nick I-S that it would fix other troublesome cases. See
1158        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1159
1160        Given that shared hash key scalars are no longer PVIV, but PV, there is
1161        no longer need to unshare so as to free up the IVX slot for its proper
1162        purpose. So it's safe to move the early return earlier.  */
1163
1164     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1165         sv_force_normal_flags(sv, 0);
1166     }
1167
1168     old_body = SvANY(sv);
1169
1170     /* Copying structures onto other structures that have been neatly zeroed
1171        has a subtle gotcha. Consider XPVMG
1172
1173        +------+------+------+------+------+-------+-------+
1174        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1175        +------+------+------+------+------+-------+-------+
1176        0      4      8     12     16     20      24      28
1177
1178        where NVs are aligned to 8 bytes, so that sizeof that structure is
1179        actually 32 bytes long, with 4 bytes of padding at the end:
1180
1181        +------+------+------+------+------+-------+-------+------+
1182        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1183        +------+------+------+------+------+-------+-------+------+
1184        0      4      8     12     16     20      24      28     32
1185
1186        so what happens if you allocate memory for this structure:
1187
1188        +------+------+------+------+------+-------+-------+------+------+...
1189        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1190        +------+------+------+------+------+-------+-------+------+------+...
1191        0      4      8     12     16     20      24      28     32     36
1192
1193        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1194        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1195        started out as zero once, but it's quite possible that it isn't. So now,
1196        rather than a nicely zeroed GP, you have it pointing somewhere random.
1197        Bugs ensue.
1198
1199        (In fact, GP ends up pointing at a previous GP structure, because the
1200        principle cause of the padding in XPVMG getting garbage is a copy of
1201        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1202        this happens to be moot because XPVGV has been re-ordered, with GP
1203        no longer after STASH)
1204
1205        So we are careful and work out the size of used parts of all the
1206        structures.  */
1207
1208     switch (old_type) {
1209     case SVt_NULL:
1210         break;
1211     case SVt_IV:
1212         if (SvROK(sv)) {
1213             referant = SvRV(sv);
1214             old_type_details = &fake_rv;
1215             if (new_type == SVt_NV)
1216                 new_type = SVt_PVNV;
1217         } else {
1218             if (new_type < SVt_PVIV) {
1219                 new_type = (new_type == SVt_NV)
1220                     ? SVt_PVNV : SVt_PVIV;
1221             }
1222         }
1223         break;
1224     case SVt_NV:
1225         if (new_type < SVt_PVNV) {
1226             new_type = SVt_PVNV;
1227         }
1228         break;
1229     case SVt_PV:
1230         assert(new_type > SVt_PV);
1231         assert(SVt_IV < SVt_PV);
1232         assert(SVt_NV < SVt_PV);
1233         break;
1234     case SVt_PVIV:
1235         break;
1236     case SVt_PVNV:
1237         break;
1238     case SVt_PVMG:
1239         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1240            there's no way that it can be safely upgraded, because perl.c
1241            expects to Safefree(SvANY(PL_mess_sv))  */
1242         assert(sv != PL_mess_sv);
1243         /* This flag bit is used to mean other things in other scalar types.
1244            Given that it only has meaning inside the pad, it shouldn't be set
1245            on anything that can get upgraded.  */
1246         assert(!SvPAD_TYPED(sv));
1247         break;
1248     default:
1249         if (UNLIKELY(old_type_details->cant_upgrade))
1250             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1251                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1252     }
1253
1254     if (UNLIKELY(old_type > new_type))
1255         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1256                 (int)old_type, (int)new_type);
1257
1258     new_type_details = bodies_by_type + new_type;
1259
1260     SvFLAGS(sv) &= ~SVTYPEMASK;
1261     SvFLAGS(sv) |= new_type;
1262
1263     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1264        the return statements above will have triggered.  */
1265     assert (new_type != SVt_NULL);
1266     switch (new_type) {
1267     case SVt_IV:
1268         assert(old_type == SVt_NULL);
1269         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1270         SvIV_set(sv, 0);
1271         return;
1272     case SVt_NV:
1273         assert(old_type == SVt_NULL);
1274         SvANY(sv) = new_XNV();
1275         SvNV_set(sv, 0);
1276         return;
1277     case SVt_PVHV:
1278     case SVt_PVAV:
1279         assert(new_type_details->body_size);
1280
1281 #ifndef PURIFY  
1282         assert(new_type_details->arena);
1283         assert(new_type_details->arena_size);
1284         /* This points to the start of the allocated area.  */
1285         new_body_inline(new_body, new_type);
1286         Zero(new_body, new_type_details->body_size, char);
1287         new_body = ((char *)new_body) - new_type_details->offset;
1288 #else
1289         /* We always allocated the full length item with PURIFY. To do this
1290            we fake things so that arena is false for all 16 types..  */
1291         new_body = new_NOARENAZ(new_type_details);
1292 #endif
1293         SvANY(sv) = new_body;
1294         if (new_type == SVt_PVAV) {
1295             AvMAX(sv)   = -1;
1296             AvFILLp(sv) = -1;
1297             AvREAL_only(sv);
1298             if (old_type_details->body_size) {
1299                 AvALLOC(sv) = 0;
1300             } else {
1301                 /* It will have been zeroed when the new body was allocated.
1302                    Lets not write to it, in case it confuses a write-back
1303                    cache.  */
1304             }
1305         } else {
1306             assert(!SvOK(sv));
1307             SvOK_off(sv);
1308 #ifndef NODEFAULT_SHAREKEYS
1309             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1310 #endif
1311             HvMAX(sv) = 7; /* (start with 8 buckets) */
1312         }
1313
1314         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1315            The target created by newSVrv also is, and it can have magic.
1316            However, it never has SvPVX set.
1317         */
1318         if (old_type == SVt_IV) {
1319             assert(!SvROK(sv));
1320         } else if (old_type >= SVt_PV) {
1321             assert(SvPVX_const(sv) == 0);
1322         }
1323
1324         if (old_type >= SVt_PVMG) {
1325             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1326             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1327         } else {
1328             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1329         }
1330         break;
1331
1332     case SVt_PVIV:
1333         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1334            no route from NV to PVIV, NOK can never be true  */
1335         assert(!SvNOKp(sv));
1336         assert(!SvNOK(sv));
1337     case SVt_PVIO:
1338     case SVt_PVFM:
1339     case SVt_PVGV:
1340     case SVt_PVCV:
1341     case SVt_PVLV:
1342     case SVt_REGEXP:
1343     case SVt_PVMG:
1344     case SVt_PVNV:
1345     case SVt_PV:
1346
1347         assert(new_type_details->body_size);
1348         /* We always allocated the full length item with PURIFY. To do this
1349            we fake things so that arena is false for all 16 types..  */
1350         if(new_type_details->arena) {
1351             /* This points to the start of the allocated area.  */
1352             new_body_inline(new_body, new_type);
1353             Zero(new_body, new_type_details->body_size, char);
1354             new_body = ((char *)new_body) - new_type_details->offset;
1355         } else {
1356             new_body = new_NOARENAZ(new_type_details);
1357         }
1358         SvANY(sv) = new_body;
1359
1360         if (old_type_details->copy) {
1361             /* There is now the potential for an upgrade from something without
1362                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1363             int offset = old_type_details->offset;
1364             int length = old_type_details->copy;
1365
1366             if (new_type_details->offset > old_type_details->offset) {
1367                 const int difference
1368                     = new_type_details->offset - old_type_details->offset;
1369                 offset += difference;
1370                 length -= difference;
1371             }
1372             assert (length >= 0);
1373                 
1374             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1375                  char);
1376         }
1377
1378 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1379         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1380          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1381          * NV slot, but the new one does, then we need to initialise the
1382          * freshly created NV slot with whatever the correct bit pattern is
1383          * for 0.0  */
1384         if (old_type_details->zero_nv && !new_type_details->zero_nv
1385             && !isGV_with_GP(sv))
1386             SvNV_set(sv, 0);
1387 #endif
1388
1389         if (UNLIKELY(new_type == SVt_PVIO)) {
1390             IO * const io = MUTABLE_IO(sv);
1391             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1392
1393             SvOBJECT_on(io);
1394             /* Clear the stashcache because a new IO could overrule a package
1395                name */
1396             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1397             hv_clear(PL_stashcache);
1398
1399             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1400             IoPAGE_LEN(sv) = 60;
1401         }
1402         if (UNLIKELY(new_type == SVt_REGEXP))
1403             sv->sv_u.svu_rx = (regexp *)new_body;
1404         else if (old_type < SVt_PV) {
1405             /* referant will be NULL unless the old type was SVt_IV emulating
1406                SVt_RV */
1407             sv->sv_u.svu_rv = referant;
1408         }
1409         break;
1410     default:
1411         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1412                    (unsigned long)new_type);
1413     }
1414
1415     if (old_type > SVt_IV) {
1416 #ifdef PURIFY
1417         safefree(old_body);
1418 #else
1419         /* Note that there is an assumption that all bodies of types that
1420            can be upgraded came from arenas. Only the more complex non-
1421            upgradable types are allowed to be directly malloc()ed.  */
1422         assert(old_type_details->arena);
1423         del_body((void*)((char*)old_body + old_type_details->offset),
1424                  &PL_body_roots[old_type]);
1425 #endif
1426     }
1427 }
1428
1429 /*
1430 =for apidoc sv_backoff
1431
1432 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1433 wrapper instead.
1434
1435 =cut
1436 */
1437
1438 int
1439 Perl_sv_backoff(pTHX_ SV *const sv)
1440 {
1441     STRLEN delta;
1442     const char * const s = SvPVX_const(sv);
1443
1444     PERL_ARGS_ASSERT_SV_BACKOFF;
1445     PERL_UNUSED_CONTEXT;
1446
1447     assert(SvOOK(sv));
1448     assert(SvTYPE(sv) != SVt_PVHV);
1449     assert(SvTYPE(sv) != SVt_PVAV);
1450
1451     SvOOK_offset(sv, delta);
1452     
1453     SvLEN_set(sv, SvLEN(sv) + delta);
1454     SvPV_set(sv, SvPVX(sv) - delta);
1455     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1456     SvFLAGS(sv) &= ~SVf_OOK;
1457     return 0;
1458 }
1459
1460 /*
1461 =for apidoc sv_grow
1462
1463 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1464 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1465 Use the C<SvGROW> wrapper instead.
1466
1467 =cut
1468 */
1469
1470 char *
1471 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1472 {
1473     char *s;
1474
1475     PERL_ARGS_ASSERT_SV_GROW;
1476
1477     if (PL_madskills && newlen >= 0x100000) {
1478         PerlIO_printf(Perl_debug_log,
1479                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1480     }
1481 #ifdef HAS_64K_LIMIT
1482     if (newlen >= 0x10000) {
1483         PerlIO_printf(Perl_debug_log,
1484                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1485         my_exit(1);
1486     }
1487 #endif /* HAS_64K_LIMIT */
1488     if (SvROK(sv))
1489         sv_unref(sv);
1490     if (SvTYPE(sv) < SVt_PV) {
1491         sv_upgrade(sv, SVt_PV);
1492         s = SvPVX_mutable(sv);
1493     }
1494     else if (SvOOK(sv)) {       /* pv is offset? */
1495         sv_backoff(sv);
1496         s = SvPVX_mutable(sv);
1497         if (newlen > SvLEN(sv))
1498             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1499 #ifdef HAS_64K_LIMIT
1500         if (newlen >= 0x10000)
1501             newlen = 0xFFFF;
1502 #endif
1503     }
1504     else
1505     {
1506         if (SvIsCOW(sv)) sv_force_normal(sv);
1507         s = SvPVX_mutable(sv);
1508     }
1509
1510     if (newlen > SvLEN(sv)) {           /* need more room? */
1511         STRLEN minlen = SvCUR(sv);
1512         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1513         if (newlen < minlen)
1514             newlen = minlen;
1515 #ifndef Perl_safesysmalloc_size
1516         newlen = PERL_STRLEN_ROUNDUP(newlen);
1517 #endif
1518         if (SvLEN(sv) && s) {
1519             s = (char*)saferealloc(s, newlen);
1520         }
1521         else {
1522             s = (char*)safemalloc(newlen);
1523             if (SvPVX_const(sv) && SvCUR(sv)) {
1524                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1525             }
1526         }
1527         SvPV_set(sv, s);
1528 #ifdef Perl_safesysmalloc_size
1529         /* Do this here, do it once, do it right, and then we will never get
1530            called back into sv_grow() unless there really is some growing
1531            needed.  */
1532         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1533 #else
1534         SvLEN_set(sv, newlen);
1535 #endif
1536     }
1537     return s;
1538 }
1539
1540 /*
1541 =for apidoc sv_setiv
1542
1543 Copies an integer into the given SV, upgrading first if necessary.
1544 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1545
1546 =cut
1547 */
1548
1549 void
1550 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1551 {
1552     dVAR;
1553
1554     PERL_ARGS_ASSERT_SV_SETIV;
1555
1556     SV_CHECK_THINKFIRST_COW_DROP(sv);
1557     switch (SvTYPE(sv)) {
1558     case SVt_NULL:
1559     case SVt_NV:
1560         sv_upgrade(sv, SVt_IV);
1561         break;
1562     case SVt_PV:
1563         sv_upgrade(sv, SVt_PVIV);
1564         break;
1565
1566     case SVt_PVGV:
1567         if (!isGV_with_GP(sv))
1568             break;
1569     case SVt_PVAV:
1570     case SVt_PVHV:
1571     case SVt_PVCV:
1572     case SVt_PVFM:
1573     case SVt_PVIO:
1574         /* diag_listed_as: Can't coerce %s to %s in %s */
1575         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1576                    OP_DESC(PL_op));
1577     default: NOOP;
1578     }
1579     (void)SvIOK_only(sv);                       /* validate number */
1580     SvIV_set(sv, i);
1581     SvTAINT(sv);
1582 }
1583
1584 /*
1585 =for apidoc sv_setiv_mg
1586
1587 Like C<sv_setiv>, but also handles 'set' magic.
1588
1589 =cut
1590 */
1591
1592 void
1593 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1594 {
1595     PERL_ARGS_ASSERT_SV_SETIV_MG;
1596
1597     sv_setiv(sv,i);
1598     SvSETMAGIC(sv);
1599 }
1600
1601 /*
1602 =for apidoc sv_setuv
1603
1604 Copies an unsigned integer into the given SV, upgrading first if necessary.
1605 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1606
1607 =cut
1608 */
1609
1610 void
1611 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1612 {
1613     PERL_ARGS_ASSERT_SV_SETUV;
1614
1615     /* With the if statement to ensure that integers are stored as IVs whenever
1616        possible:
1617        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1618
1619        without
1620        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1621
1622        If you wish to remove the following if statement, so that this routine
1623        (and its callers) always return UVs, please benchmark to see what the
1624        effect is. Modern CPUs may be different. Or may not :-)
1625     */
1626     if (u <= (UV)IV_MAX) {
1627        sv_setiv(sv, (IV)u);
1628        return;
1629     }
1630     sv_setiv(sv, 0);
1631     SvIsUV_on(sv);
1632     SvUV_set(sv, u);
1633 }
1634
1635 /*
1636 =for apidoc sv_setuv_mg
1637
1638 Like C<sv_setuv>, but also handles 'set' magic.
1639
1640 =cut
1641 */
1642
1643 void
1644 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1645 {
1646     PERL_ARGS_ASSERT_SV_SETUV_MG;
1647
1648     sv_setuv(sv,u);
1649     SvSETMAGIC(sv);
1650 }
1651
1652 /*
1653 =for apidoc sv_setnv
1654
1655 Copies a double into the given SV, upgrading first if necessary.
1656 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1657
1658 =cut
1659 */
1660
1661 void
1662 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1663 {
1664     dVAR;
1665
1666     PERL_ARGS_ASSERT_SV_SETNV;
1667
1668     SV_CHECK_THINKFIRST_COW_DROP(sv);
1669     switch (SvTYPE(sv)) {
1670     case SVt_NULL:
1671     case SVt_IV:
1672         sv_upgrade(sv, SVt_NV);
1673         break;
1674     case SVt_PV:
1675     case SVt_PVIV:
1676         sv_upgrade(sv, SVt_PVNV);
1677         break;
1678
1679     case SVt_PVGV:
1680         if (!isGV_with_GP(sv))
1681             break;
1682     case SVt_PVAV:
1683     case SVt_PVHV:
1684     case SVt_PVCV:
1685     case SVt_PVFM:
1686     case SVt_PVIO:
1687         /* diag_listed_as: Can't coerce %s to %s in %s */
1688         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1689                    OP_DESC(PL_op));
1690     default: NOOP;
1691     }
1692     SvNV_set(sv, num);
1693     (void)SvNOK_only(sv);                       /* validate number */
1694     SvTAINT(sv);
1695 }
1696
1697 /*
1698 =for apidoc sv_setnv_mg
1699
1700 Like C<sv_setnv>, but also handles 'set' magic.
1701
1702 =cut
1703 */
1704
1705 void
1706 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1707 {
1708     PERL_ARGS_ASSERT_SV_SETNV_MG;
1709
1710     sv_setnv(sv,num);
1711     SvSETMAGIC(sv);
1712 }
1713
1714 /* Print an "isn't numeric" warning, using a cleaned-up,
1715  * printable version of the offending string
1716  */
1717
1718 STATIC void
1719 S_not_a_number(pTHX_ SV *const sv)
1720 {
1721      dVAR;
1722      SV *dsv;
1723      char tmpbuf[64];
1724      const char *pv;
1725
1726      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1727
1728      if (DO_UTF8(sv)) {
1729           dsv = newSVpvs_flags("", SVs_TEMP);
1730           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1731      } else {
1732           char *d = tmpbuf;
1733           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1734           /* each *s can expand to 4 chars + "...\0",
1735              i.e. need room for 8 chars */
1736         
1737           const char *s = SvPVX_const(sv);
1738           const char * const end = s + SvCUR(sv);
1739           for ( ; s < end && d < limit; s++ ) {
1740                int ch = *s & 0xFF;
1741                if (ch & 128 && !isPRINT_LC(ch)) {
1742                     *d++ = 'M';
1743                     *d++ = '-';
1744                     ch &= 127;
1745                }
1746                if (ch == '\n') {
1747                     *d++ = '\\';
1748                     *d++ = 'n';
1749                }
1750                else if (ch == '\r') {
1751                     *d++ = '\\';
1752                     *d++ = 'r';
1753                }
1754                else if (ch == '\f') {
1755                     *d++ = '\\';
1756                     *d++ = 'f';
1757                }
1758                else if (ch == '\\') {
1759                     *d++ = '\\';
1760                     *d++ = '\\';
1761                }
1762                else if (ch == '\0') {
1763                     *d++ = '\\';
1764                     *d++ = '0';
1765                }
1766                else if (isPRINT_LC(ch))
1767                     *d++ = ch;
1768                else {
1769                     *d++ = '^';
1770                     *d++ = toCTRL(ch);
1771                }
1772           }
1773           if (s < end) {
1774                *d++ = '.';
1775                *d++ = '.';
1776                *d++ = '.';
1777           }
1778           *d = '\0';
1779           pv = tmpbuf;
1780     }
1781
1782     if (PL_op)
1783         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1784                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1785                     "Argument \"%s\" isn't numeric in %s", pv,
1786                     OP_DESC(PL_op));
1787     else
1788         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1789                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1790                     "Argument \"%s\" isn't numeric", pv);
1791 }
1792
1793 /*
1794 =for apidoc looks_like_number
1795
1796 Test if the content of an SV looks like a number (or is a number).
1797 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1798 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1799 ignored.
1800
1801 =cut
1802 */
1803
1804 I32
1805 Perl_looks_like_number(pTHX_ SV *const sv)
1806 {
1807     const char *sbegin;
1808     STRLEN len;
1809
1810     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1811
1812     if (SvPOK(sv) || SvPOKp(sv)) {
1813         sbegin = SvPV_nomg_const(sv, len);
1814     }
1815     else
1816         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1817     return grok_number(sbegin, len, NULL);
1818 }
1819
1820 STATIC bool
1821 S_glob_2number(pTHX_ GV * const gv)
1822 {
1823     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1824
1825     /* We know that all GVs stringify to something that is not-a-number,
1826         so no need to test that.  */
1827     if (ckWARN(WARN_NUMERIC))
1828     {
1829         SV *const buffer = sv_newmortal();
1830         gv_efullname3(buffer, gv, "*");
1831         not_a_number(buffer);
1832     }
1833     /* We just want something true to return, so that S_sv_2iuv_common
1834         can tail call us and return true.  */
1835     return TRUE;
1836 }
1837
1838 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1839    until proven guilty, assume that things are not that bad... */
1840
1841 /*
1842    NV_PRESERVES_UV:
1843
1844    As 64 bit platforms often have an NV that doesn't preserve all bits of
1845    an IV (an assumption perl has been based on to date) it becomes necessary
1846    to remove the assumption that the NV always carries enough precision to
1847    recreate the IV whenever needed, and that the NV is the canonical form.
1848    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1849    precision as a side effect of conversion (which would lead to insanity
1850    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1851    1) to distinguish between IV/UV/NV slots that have cached a valid
1852       conversion where precision was lost and IV/UV/NV slots that have a
1853       valid conversion which has lost no precision
1854    2) to ensure that if a numeric conversion to one form is requested that
1855       would lose precision, the precise conversion (or differently
1856       imprecise conversion) is also performed and cached, to prevent
1857       requests for different numeric formats on the same SV causing
1858       lossy conversion chains. (lossless conversion chains are perfectly
1859       acceptable (still))
1860
1861
1862    flags are used:
1863    SvIOKp is true if the IV slot contains a valid value
1864    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1865    SvNOKp is true if the NV slot contains a valid value
1866    SvNOK  is true only if the NV value is accurate
1867
1868    so
1869    while converting from PV to NV, check to see if converting that NV to an
1870    IV(or UV) would lose accuracy over a direct conversion from PV to
1871    IV(or UV). If it would, cache both conversions, return NV, but mark
1872    SV as IOK NOKp (ie not NOK).
1873
1874    While converting from PV to IV, check to see if converting that IV to an
1875    NV would lose accuracy over a direct conversion from PV to NV. If it
1876    would, cache both conversions, flag similarly.
1877
1878    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1879    correctly because if IV & NV were set NV *always* overruled.
1880    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1881    changes - now IV and NV together means that the two are interchangeable:
1882    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1883
1884    The benefit of this is that operations such as pp_add know that if
1885    SvIOK is true for both left and right operands, then integer addition
1886    can be used instead of floating point (for cases where the result won't
1887    overflow). Before, floating point was always used, which could lead to
1888    loss of precision compared with integer addition.
1889
1890    * making IV and NV equal status should make maths accurate on 64 bit
1891      platforms
1892    * may speed up maths somewhat if pp_add and friends start to use
1893      integers when possible instead of fp. (Hopefully the overhead in
1894      looking for SvIOK and checking for overflow will not outweigh the
1895      fp to integer speedup)
1896    * will slow down integer operations (callers of SvIV) on "inaccurate"
1897      values, as the change from SvIOK to SvIOKp will cause a call into
1898      sv_2iv each time rather than a macro access direct to the IV slot
1899    * should speed up number->string conversion on integers as IV is
1900      favoured when IV and NV are equally accurate
1901
1902    ####################################################################
1903    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1904    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1905    On the other hand, SvUOK is true iff UV.
1906    ####################################################################
1907
1908    Your mileage will vary depending your CPU's relative fp to integer
1909    performance ratio.
1910 */
1911
1912 #ifndef NV_PRESERVES_UV
1913 #  define IS_NUMBER_UNDERFLOW_IV 1
1914 #  define IS_NUMBER_UNDERFLOW_UV 2
1915 #  define IS_NUMBER_IV_AND_UV    2
1916 #  define IS_NUMBER_OVERFLOW_IV  4
1917 #  define IS_NUMBER_OVERFLOW_UV  5
1918
1919 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1920
1921 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1922 STATIC int
1923 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
1924 #  ifdef DEBUGGING
1925                        , I32 numtype
1926 #  endif
1927                        )
1928 {
1929     dVAR;
1930
1931     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1932
1933     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));
1934     if (SvNVX(sv) < (NV)IV_MIN) {
1935         (void)SvIOKp_on(sv);
1936         (void)SvNOK_on(sv);
1937         SvIV_set(sv, IV_MIN);
1938         return IS_NUMBER_UNDERFLOW_IV;
1939     }
1940     if (SvNVX(sv) > (NV)UV_MAX) {
1941         (void)SvIOKp_on(sv);
1942         (void)SvNOK_on(sv);
1943         SvIsUV_on(sv);
1944         SvUV_set(sv, UV_MAX);
1945         return IS_NUMBER_OVERFLOW_UV;
1946     }
1947     (void)SvIOKp_on(sv);
1948     (void)SvNOK_on(sv);
1949     /* Can't use strtol etc to convert this string.  (See truth table in
1950        sv_2iv  */
1951     if (SvNVX(sv) <= (UV)IV_MAX) {
1952         SvIV_set(sv, I_V(SvNVX(sv)));
1953         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1954             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1955         } else {
1956             /* Integer is imprecise. NOK, IOKp */
1957         }
1958         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1959     }
1960     SvIsUV_on(sv);
1961     SvUV_set(sv, U_V(SvNVX(sv)));
1962     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1963         if (SvUVX(sv) == UV_MAX) {
1964             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1965                possibly be preserved by NV. Hence, it must be overflow.
1966                NOK, IOKp */
1967             return IS_NUMBER_OVERFLOW_UV;
1968         }
1969         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1970     } else {
1971         /* Integer is imprecise. NOK, IOKp */
1972     }
1973     return IS_NUMBER_OVERFLOW_IV;
1974 }
1975 #endif /* !NV_PRESERVES_UV*/
1976
1977 STATIC bool
1978 S_sv_2iuv_common(pTHX_ SV *const sv)
1979 {
1980     dVAR;
1981
1982     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1983
1984     if (SvNOKp(sv)) {
1985         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1986          * without also getting a cached IV/UV from it at the same time
1987          * (ie PV->NV conversion should detect loss of accuracy and cache
1988          * IV or UV at same time to avoid this. */
1989         /* IV-over-UV optimisation - choose to cache IV if possible */
1990
1991         if (SvTYPE(sv) == SVt_NV)
1992             sv_upgrade(sv, SVt_PVNV);
1993
1994         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1995         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1996            certainly cast into the IV range at IV_MAX, whereas the correct
1997            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1998            cases go to UV */
1999 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2000         if (Perl_isnan(SvNVX(sv))) {
2001             SvUV_set(sv, 0);
2002             SvIsUV_on(sv);
2003             return FALSE;
2004         }
2005 #endif
2006         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2007             SvIV_set(sv, I_V(SvNVX(sv)));
2008             if (SvNVX(sv) == (NV) SvIVX(sv)
2009 #ifndef NV_PRESERVES_UV
2010                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2011                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2012                 /* Don't flag it as "accurately an integer" if the number
2013                    came from a (by definition imprecise) NV operation, and
2014                    we're outside the range of NV integer precision */
2015 #endif
2016                 ) {
2017                 if (SvNOK(sv))
2018                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2019                 else {
2020                     /* scalar has trailing garbage, eg "42a" */
2021                 }
2022                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2023                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2024                                       PTR2UV(sv),
2025                                       SvNVX(sv),
2026                                       SvIVX(sv)));
2027
2028             } else {
2029                 /* IV not precise.  No need to convert from PV, as NV
2030                    conversion would already have cached IV if it detected
2031                    that PV->IV would be better than PV->NV->IV
2032                    flags already correct - don't set public IOK.  */
2033                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2034                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2035                                       PTR2UV(sv),
2036                                       SvNVX(sv),
2037                                       SvIVX(sv)));
2038             }
2039             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2040                but the cast (NV)IV_MIN rounds to a the value less (more
2041                negative) than IV_MIN which happens to be equal to SvNVX ??
2042                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2043                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2044                (NV)UVX == NVX are both true, but the values differ. :-(
2045                Hopefully for 2s complement IV_MIN is something like
2046                0x8000000000000000 which will be exact. NWC */
2047         }
2048         else {
2049             SvUV_set(sv, U_V(SvNVX(sv)));
2050             if (
2051                 (SvNVX(sv) == (NV) SvUVX(sv))
2052 #ifndef  NV_PRESERVES_UV
2053                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2054                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2055                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2056                 /* Don't flag it as "accurately an integer" if the number
2057                    came from a (by definition imprecise) NV operation, and
2058                    we're outside the range of NV integer precision */
2059 #endif
2060                 && SvNOK(sv)
2061                 )
2062                 SvIOK_on(sv);
2063             SvIsUV_on(sv);
2064             DEBUG_c(PerlIO_printf(Perl_debug_log,
2065                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2066                                   PTR2UV(sv),
2067                                   SvUVX(sv),
2068                                   SvUVX(sv)));
2069         }
2070     }
2071     else if (SvPOKp(sv)) {
2072         UV value;
2073         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2074         /* We want to avoid a possible problem when we cache an IV/ a UV which
2075            may be later translated to an NV, and the resulting NV is not
2076            the same as the direct translation of the initial string
2077            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2078            be careful to ensure that the value with the .456 is around if the
2079            NV value is requested in the future).
2080         
2081            This means that if we cache such an IV/a UV, we need to cache the
2082            NV as well.  Moreover, we trade speed for space, and do not
2083            cache the NV if we are sure it's not needed.
2084          */
2085
2086         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2087         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2088              == IS_NUMBER_IN_UV) {
2089             /* It's definitely an integer, only upgrade to PVIV */
2090             if (SvTYPE(sv) < SVt_PVIV)
2091                 sv_upgrade(sv, SVt_PVIV);
2092             (void)SvIOK_on(sv);
2093         } else if (SvTYPE(sv) < SVt_PVNV)
2094             sv_upgrade(sv, SVt_PVNV);
2095
2096         /* If NVs preserve UVs then we only use the UV value if we know that
2097            we aren't going to call atof() below. If NVs don't preserve UVs
2098            then the value returned may have more precision than atof() will
2099            return, even though value isn't perfectly accurate.  */
2100         if ((numtype & (IS_NUMBER_IN_UV
2101 #ifdef NV_PRESERVES_UV
2102                         | IS_NUMBER_NOT_INT
2103 #endif
2104             )) == IS_NUMBER_IN_UV) {
2105             /* This won't turn off the public IOK flag if it was set above  */
2106             (void)SvIOKp_on(sv);
2107
2108             if (!(numtype & IS_NUMBER_NEG)) {
2109                 /* positive */;
2110                 if (value <= (UV)IV_MAX) {
2111                     SvIV_set(sv, (IV)value);
2112                 } else {
2113                     /* it didn't overflow, and it was positive. */
2114                     SvUV_set(sv, value);
2115                     SvIsUV_on(sv);
2116                 }
2117             } else {
2118                 /* 2s complement assumption  */
2119                 if (value <= (UV)IV_MIN) {
2120                     SvIV_set(sv, -(IV)value);
2121                 } else {
2122                     /* Too negative for an IV.  This is a double upgrade, but
2123                        I'm assuming it will be rare.  */
2124                     if (SvTYPE(sv) < SVt_PVNV)
2125                         sv_upgrade(sv, SVt_PVNV);
2126                     SvNOK_on(sv);
2127                     SvIOK_off(sv);
2128                     SvIOKp_on(sv);
2129                     SvNV_set(sv, -(NV)value);
2130                     SvIV_set(sv, IV_MIN);
2131                 }
2132             }
2133         }
2134         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2135            will be in the previous block to set the IV slot, and the next
2136            block to set the NV slot.  So no else here.  */
2137         
2138         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2139             != IS_NUMBER_IN_UV) {
2140             /* It wasn't an (integer that doesn't overflow the UV). */
2141             SvNV_set(sv, Atof(SvPVX_const(sv)));
2142
2143             if (! numtype && ckWARN(WARN_NUMERIC))
2144                 not_a_number(sv);
2145
2146 #if defined(USE_LONG_DOUBLE)
2147             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2148                                   PTR2UV(sv), SvNVX(sv)));
2149 #else
2150             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2151                                   PTR2UV(sv), SvNVX(sv)));
2152 #endif
2153
2154 #ifdef NV_PRESERVES_UV
2155             (void)SvIOKp_on(sv);
2156             (void)SvNOK_on(sv);
2157             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2158                 SvIV_set(sv, I_V(SvNVX(sv)));
2159                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2160                     SvIOK_on(sv);
2161                 } else {
2162                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2163                 }
2164                 /* UV will not work better than IV */
2165             } else {
2166                 if (SvNVX(sv) > (NV)UV_MAX) {
2167                     SvIsUV_on(sv);
2168                     /* Integer is inaccurate. NOK, IOKp, is UV */
2169                     SvUV_set(sv, UV_MAX);
2170                 } else {
2171                     SvUV_set(sv, U_V(SvNVX(sv)));
2172                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2173                        NV preservse UV so can do correct comparison.  */
2174                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2175                         SvIOK_on(sv);
2176                     } else {
2177                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2178                     }
2179                 }
2180                 SvIsUV_on(sv);
2181             }
2182 #else /* NV_PRESERVES_UV */
2183             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2184                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2185                 /* The IV/UV slot will have been set from value returned by
2186                    grok_number above.  The NV slot has just been set using
2187                    Atof.  */
2188                 SvNOK_on(sv);
2189                 assert (SvIOKp(sv));
2190             } else {
2191                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2192                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2193                     /* Small enough to preserve all bits. */
2194                     (void)SvIOKp_on(sv);
2195                     SvNOK_on(sv);
2196                     SvIV_set(sv, I_V(SvNVX(sv)));
2197                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2198                         SvIOK_on(sv);
2199                     /* Assumption: first non-preserved integer is < IV_MAX,
2200                        this NV is in the preserved range, therefore: */
2201                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2202                           < (UV)IV_MAX)) {
2203                         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);
2204                     }
2205                 } else {
2206                     /* IN_UV NOT_INT
2207                          0      0       already failed to read UV.
2208                          0      1       already failed to read UV.
2209                          1      0       you won't get here in this case. IV/UV
2210                                         slot set, public IOK, Atof() unneeded.
2211                          1      1       already read UV.
2212                        so there's no point in sv_2iuv_non_preserve() attempting
2213                        to use atol, strtol, strtoul etc.  */
2214 #  ifdef DEBUGGING
2215                     sv_2iuv_non_preserve (sv, numtype);
2216 #  else
2217                     sv_2iuv_non_preserve (sv);
2218 #  endif
2219                 }
2220             }
2221 #endif /* NV_PRESERVES_UV */
2222         /* It might be more code efficient to go through the entire logic above
2223            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2224            gets complex and potentially buggy, so more programmer efficient
2225            to do it this way, by turning off the public flags:  */
2226         if (!numtype)
2227             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2228         }
2229     }
2230     else  {
2231         if (isGV_with_GP(sv))
2232             return glob_2number(MUTABLE_GV(sv));
2233
2234         if (!SvPADTMP(sv)) {
2235             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2236                 report_uninit(sv);
2237         }
2238         if (SvTYPE(sv) < SVt_IV)
2239             /* Typically the caller expects that sv_any is not NULL now.  */
2240             sv_upgrade(sv, SVt_IV);
2241         /* Return 0 from the caller.  */
2242         return TRUE;
2243     }
2244     return FALSE;
2245 }
2246
2247 /*
2248 =for apidoc sv_2iv_flags
2249
2250 Return the integer value of an SV, doing any necessary string
2251 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2252 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2253
2254 =cut
2255 */
2256
2257 IV
2258 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2259 {
2260     dVAR;
2261
2262     if (!sv)
2263         return 0;
2264
2265     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2266         mg_get(sv);
2267
2268     if (SvROK(sv)) {
2269         if (SvAMAGIC(sv)) {
2270             SV * tmpstr;
2271             if (flags & SV_SKIP_OVERLOAD)
2272                 return 0;
2273             tmpstr = AMG_CALLunary(sv, numer_amg);
2274             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2275                 return SvIV(tmpstr);
2276             }
2277         }
2278         return PTR2IV(SvRV(sv));
2279     }
2280
2281     if (SvVALID(sv) || isREGEXP(sv)) {
2282         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2283            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2284            In practice they are extremely unlikely to actually get anywhere
2285            accessible by user Perl code - the only way that I'm aware of is when
2286            a constant subroutine which is used as the second argument to index.
2287
2288            Regexps have no SvIVX and SvNVX fields.
2289         */
2290         assert(isREGEXP(sv) || SvPOKp(sv));
2291         {
2292             UV value;
2293             const char * const ptr =
2294                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2295             const int numtype
2296                 = grok_number(ptr, SvCUR(sv), &value);
2297
2298             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2299                 == IS_NUMBER_IN_UV) {
2300                 /* It's definitely an integer */
2301                 if (numtype & IS_NUMBER_NEG) {
2302                     if (value < (UV)IV_MIN)
2303                         return -(IV)value;
2304                 } else {
2305                     if (value < (UV)IV_MAX)
2306                         return (IV)value;
2307                 }
2308             }
2309             if (!numtype) {
2310                 if (ckWARN(WARN_NUMERIC))
2311                     not_a_number(sv);
2312             }
2313             return I_V(Atof(ptr));
2314         }
2315     }
2316
2317     if (SvTHINKFIRST(sv)) {
2318 #ifdef PERL_OLD_COPY_ON_WRITE
2319         if (SvIsCOW(sv)) {
2320             sv_force_normal_flags(sv, 0);
2321         }
2322 #endif
2323         if (SvREADONLY(sv) && !SvOK(sv)) {
2324             if (ckWARN(WARN_UNINITIALIZED))
2325                 report_uninit(sv);
2326             return 0;
2327         }
2328     }
2329
2330     if (!SvIOKp(sv)) {
2331         if (S_sv_2iuv_common(aTHX_ sv))
2332             return 0;
2333     }
2334
2335     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2336         PTR2UV(sv),SvIVX(sv)));
2337     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2338 }
2339
2340 /*
2341 =for apidoc sv_2uv_flags
2342
2343 Return the unsigned integer value of an SV, doing any necessary string
2344 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2345 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2346
2347 =cut
2348 */
2349
2350 UV
2351 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2352 {
2353     dVAR;
2354
2355     if (!sv)
2356         return 0;
2357
2358     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2359         mg_get(sv);
2360
2361     if (SvROK(sv)) {
2362         if (SvAMAGIC(sv)) {
2363             SV *tmpstr;
2364             if (flags & SV_SKIP_OVERLOAD)
2365                 return 0;
2366             tmpstr = AMG_CALLunary(sv, numer_amg);
2367             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2368                 return SvUV(tmpstr);
2369             }
2370         }
2371         return PTR2UV(SvRV(sv));
2372     }
2373
2374     if (SvVALID(sv) || isREGEXP(sv)) {
2375         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2376            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2377            Regexps have no SvIVX and SvNVX fields. */
2378         assert(isREGEXP(sv) || SvPOKp(sv));
2379         {
2380             UV value;
2381             const char * const ptr =
2382                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2383             const int numtype
2384                 = grok_number(ptr, SvCUR(sv), &value);
2385
2386             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2387                 == IS_NUMBER_IN_UV) {
2388                 /* It's definitely an integer */
2389                 if (!(numtype & IS_NUMBER_NEG))
2390                     return value;
2391             }
2392             if (!numtype) {
2393                 if (ckWARN(WARN_NUMERIC))
2394                     not_a_number(sv);
2395             }
2396             return U_V(Atof(ptr));
2397         }
2398     }
2399
2400     if (SvTHINKFIRST(sv)) {
2401 #ifdef PERL_OLD_COPY_ON_WRITE
2402         if (SvIsCOW(sv)) {
2403             sv_force_normal_flags(sv, 0);
2404         }
2405 #endif
2406         if (SvREADONLY(sv) && !SvOK(sv)) {
2407             if (ckWARN(WARN_UNINITIALIZED))
2408                 report_uninit(sv);
2409             return 0;
2410         }
2411     }
2412
2413     if (!SvIOKp(sv)) {
2414         if (S_sv_2iuv_common(aTHX_ sv))
2415             return 0;
2416     }
2417
2418     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2419                           PTR2UV(sv),SvUVX(sv)));
2420     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2421 }
2422
2423 /*
2424 =for apidoc sv_2nv_flags
2425
2426 Return the num value of an SV, doing any necessary string or integer
2427 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2428 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 NV
2434 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2435 {
2436     dVAR;
2437     if (!sv)
2438         return 0.0;
2439     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2440         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2441            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2442            Regexps have no SvIVX and SvNVX fields.  */
2443         const char *ptr;
2444         if (flags & SV_GMAGIC)
2445             mg_get(sv);
2446         if (SvNOKp(sv))
2447             return SvNVX(sv);
2448         if (SvPOKp(sv) && !SvIOKp(sv)) {
2449             ptr = SvPVX_const(sv);
2450           grokpv:
2451             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2452                 !grok_number(ptr, SvCUR(sv), NULL))
2453                 not_a_number(sv);
2454             return Atof(ptr);
2455         }
2456         if (SvIOKp(sv)) {
2457             if (SvIsUV(sv))
2458                 return (NV)SvUVX(sv);
2459             else
2460                 return (NV)SvIVX(sv);
2461         }
2462         if (SvROK(sv)) {
2463             goto return_rok;
2464         }
2465         if (isREGEXP(sv)) {
2466             ptr = RX_WRAPPED((REGEXP *)sv);
2467             goto grokpv;
2468         }
2469         assert(SvTYPE(sv) >= SVt_PVMG);
2470         /* This falls through to the report_uninit near the end of the
2471            function. */
2472     } else if (SvTHINKFIRST(sv)) {
2473         if (SvROK(sv)) {
2474         return_rok:
2475             if (SvAMAGIC(sv)) {
2476                 SV *tmpstr;
2477                 if (flags & SV_SKIP_OVERLOAD)
2478                     return 0;
2479                 tmpstr = AMG_CALLunary(sv, numer_amg);
2480                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2481                     return SvNV(tmpstr);
2482                 }
2483             }
2484             return PTR2NV(SvRV(sv));
2485         }
2486 #ifdef PERL_OLD_COPY_ON_WRITE
2487         if (SvIsCOW(sv)) {
2488             sv_force_normal_flags(sv, 0);
2489         }
2490 #endif
2491         if (SvREADONLY(sv) && !SvOK(sv)) {
2492             if (ckWARN(WARN_UNINITIALIZED))
2493                 report_uninit(sv);
2494             return 0.0;
2495         }
2496     }
2497     if (SvTYPE(sv) < SVt_NV) {
2498         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2499         sv_upgrade(sv, SVt_NV);
2500 #ifdef USE_LONG_DOUBLE
2501         DEBUG_c({
2502             STORE_NUMERIC_LOCAL_SET_STANDARD();
2503             PerlIO_printf(Perl_debug_log,
2504                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2505                           PTR2UV(sv), SvNVX(sv));
2506             RESTORE_NUMERIC_LOCAL();
2507         });
2508 #else
2509         DEBUG_c({
2510             STORE_NUMERIC_LOCAL_SET_STANDARD();
2511             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2512                           PTR2UV(sv), SvNVX(sv));
2513             RESTORE_NUMERIC_LOCAL();
2514         });
2515 #endif
2516     }
2517     else if (SvTYPE(sv) < SVt_PVNV)
2518         sv_upgrade(sv, SVt_PVNV);
2519     if (SvNOKp(sv)) {
2520         return SvNVX(sv);
2521     }
2522     if (SvIOKp(sv)) {
2523         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2524 #ifdef NV_PRESERVES_UV
2525         if (SvIOK(sv))
2526             SvNOK_on(sv);
2527         else
2528             SvNOKp_on(sv);
2529 #else
2530         /* Only set the public NV OK flag if this NV preserves the IV  */
2531         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2532         if (SvIOK(sv) &&
2533             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2534                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2535             SvNOK_on(sv);
2536         else
2537             SvNOKp_on(sv);
2538 #endif
2539     }
2540     else if (SvPOKp(sv)) {
2541         UV value;
2542         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2543         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2544             not_a_number(sv);
2545 #ifdef NV_PRESERVES_UV
2546         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2547             == IS_NUMBER_IN_UV) {
2548             /* It's definitely an integer */
2549             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2550         } else
2551             SvNV_set(sv, Atof(SvPVX_const(sv)));
2552         if (numtype)
2553             SvNOK_on(sv);
2554         else
2555             SvNOKp_on(sv);
2556 #else
2557         SvNV_set(sv, Atof(SvPVX_const(sv)));
2558         /* Only set the public NV OK flag if this NV preserves the value in
2559            the PV at least as well as an IV/UV would.
2560            Not sure how to do this 100% reliably. */
2561         /* if that shift count is out of range then Configure's test is
2562            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2563            UV_BITS */
2564         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2565             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2566             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2567         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2568             /* Can't use strtol etc to convert this string, so don't try.
2569                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2570             SvNOK_on(sv);
2571         } else {
2572             /* value has been set.  It may not be precise.  */
2573             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2574                 /* 2s complement assumption for (UV)IV_MIN  */
2575                 SvNOK_on(sv); /* Integer is too negative.  */
2576             } else {
2577                 SvNOKp_on(sv);
2578                 SvIOKp_on(sv);
2579
2580                 if (numtype & IS_NUMBER_NEG) {
2581                     SvIV_set(sv, -(IV)value);
2582                 } else if (value <= (UV)IV_MAX) {
2583                     SvIV_set(sv, (IV)value);
2584                 } else {
2585                     SvUV_set(sv, value);
2586                     SvIsUV_on(sv);
2587                 }
2588
2589                 if (numtype & IS_NUMBER_NOT_INT) {
2590                     /* I believe that even if the original PV had decimals,
2591                        they are lost beyond the limit of the FP precision.
2592                        However, neither is canonical, so both only get p
2593                        flags.  NWC, 2000/11/25 */
2594                     /* Both already have p flags, so do nothing */
2595                 } else {
2596                     const NV nv = SvNVX(sv);
2597                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2598                         if (SvIVX(sv) == I_V(nv)) {
2599                             SvNOK_on(sv);
2600                         } else {
2601                             /* It had no "." so it must be integer.  */
2602                         }
2603                         SvIOK_on(sv);
2604                     } else {
2605                         /* between IV_MAX and NV(UV_MAX).
2606                            Could be slightly > UV_MAX */
2607
2608                         if (numtype & IS_NUMBER_NOT_INT) {
2609                             /* UV and NV both imprecise.  */
2610                         } else {
2611                             const UV nv_as_uv = U_V(nv);
2612
2613                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2614                                 SvNOK_on(sv);
2615                             }
2616                             SvIOK_on(sv);
2617                         }
2618                     }
2619                 }
2620             }
2621         }
2622         /* It might be more code efficient to go through the entire logic above
2623            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2624            gets complex and potentially buggy, so more programmer efficient
2625            to do it this way, by turning off the public flags:  */
2626         if (!numtype)
2627             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2628 #endif /* NV_PRESERVES_UV */
2629     }
2630     else  {
2631         if (isGV_with_GP(sv)) {
2632             glob_2number(MUTABLE_GV(sv));
2633             return 0.0;
2634         }
2635
2636         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2637             report_uninit(sv);
2638         assert (SvTYPE(sv) >= SVt_NV);
2639         /* Typically the caller expects that sv_any is not NULL now.  */
2640         /* XXX Ilya implies that this is a bug in callers that assume this
2641            and ideally should be fixed.  */
2642         return 0.0;
2643     }
2644 #if defined(USE_LONG_DOUBLE)
2645     DEBUG_c({
2646         STORE_NUMERIC_LOCAL_SET_STANDARD();
2647         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2648                       PTR2UV(sv), SvNVX(sv));
2649         RESTORE_NUMERIC_LOCAL();
2650     });
2651 #else
2652     DEBUG_c({
2653         STORE_NUMERIC_LOCAL_SET_STANDARD();
2654         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2655                       PTR2UV(sv), SvNVX(sv));
2656         RESTORE_NUMERIC_LOCAL();
2657     });
2658 #endif
2659     return SvNVX(sv);
2660 }
2661
2662 /*
2663 =for apidoc sv_2num
2664
2665 Return an SV with the numeric value of the source SV, doing any necessary
2666 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2667 access this function.
2668
2669 =cut
2670 */
2671
2672 SV *
2673 Perl_sv_2num(pTHX_ SV *const sv)
2674 {
2675     PERL_ARGS_ASSERT_SV_2NUM;
2676
2677     if (!SvROK(sv))
2678         return sv;
2679     if (SvAMAGIC(sv)) {
2680         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2681         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2682         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2683             return sv_2num(tmpsv);
2684     }
2685     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2686 }
2687
2688 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2689  * UV as a string towards the end of buf, and return pointers to start and
2690  * end of it.
2691  *
2692  * We assume that buf is at least TYPE_CHARS(UV) long.
2693  */
2694
2695 static char *
2696 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2697 {
2698     char *ptr = buf + TYPE_CHARS(UV);
2699     char * const ebuf = ptr;
2700     int sign;
2701
2702     PERL_ARGS_ASSERT_UIV_2BUF;
2703
2704     if (is_uv)
2705         sign = 0;
2706     else if (iv >= 0) {
2707         uv = iv;
2708         sign = 0;
2709     } else {
2710         uv = -iv;
2711         sign = 1;
2712     }
2713     do {
2714         *--ptr = '0' + (char)(uv % 10);
2715     } while (uv /= 10);
2716     if (sign)
2717         *--ptr = '-';
2718     *peob = ebuf;
2719     return ptr;
2720 }
2721
2722 /*
2723 =for apidoc sv_2pv_flags
2724
2725 Returns a pointer to the string value of an SV, and sets *lp to its length.
2726 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2727 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2728 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2729
2730 =cut
2731 */
2732
2733 char *
2734 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2735 {
2736     dVAR;
2737     char *s;
2738
2739     if (!sv) {
2740         if (lp)
2741             *lp = 0;
2742         return (char *)"";
2743     }
2744     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2745         mg_get(sv);
2746     if (SvROK(sv)) {
2747         if (SvAMAGIC(sv)) {
2748             SV *tmpstr;
2749             if (flags & SV_SKIP_OVERLOAD)
2750                 return NULL;
2751             tmpstr = AMG_CALLunary(sv, string_amg);
2752             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2753             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2754                 /* Unwrap this:  */
2755                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2756                  */
2757
2758                 char *pv;
2759                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2760                     if (flags & SV_CONST_RETURN) {
2761                         pv = (char *) SvPVX_const(tmpstr);
2762                     } else {
2763                         pv = (flags & SV_MUTABLE_RETURN)
2764                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2765                     }
2766                     if (lp)
2767                         *lp = SvCUR(tmpstr);
2768                 } else {
2769                     pv = sv_2pv_flags(tmpstr, lp, flags);
2770                 }
2771                 if (SvUTF8(tmpstr))
2772                     SvUTF8_on(sv);
2773                 else
2774                     SvUTF8_off(sv);
2775                 return pv;
2776             }
2777         }
2778         {
2779             STRLEN len;
2780             char *retval;
2781             char *buffer;
2782             SV *const referent = SvRV(sv);
2783
2784             if (!referent) {
2785                 len = 7;
2786                 retval = buffer = savepvn("NULLREF", len);
2787             } else if (SvTYPE(referent) == SVt_REGEXP &&
2788                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2789                         amagic_is_enabled(string_amg))) {
2790                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2791
2792                 assert(re);
2793                         
2794                 /* If the regex is UTF-8 we want the containing scalar to
2795                    have an UTF-8 flag too */
2796                 if (RX_UTF8(re))
2797                     SvUTF8_on(sv);
2798                 else
2799                     SvUTF8_off(sv);     
2800
2801                 if (lp)
2802                     *lp = RX_WRAPLEN(re);
2803  
2804                 return RX_WRAPPED(re);
2805             } else {
2806                 const char *const typestr = sv_reftype(referent, 0);
2807                 const STRLEN typelen = strlen(typestr);
2808                 UV addr = PTR2UV(referent);
2809                 const char *stashname = NULL;
2810                 STRLEN stashnamelen = 0; /* hush, gcc */
2811                 const char *buffer_end;
2812
2813                 if (SvOBJECT(referent)) {
2814                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2815
2816                     if (name) {
2817                         stashname = HEK_KEY(name);
2818                         stashnamelen = HEK_LEN(name);
2819
2820                         if (HEK_UTF8(name)) {
2821                             SvUTF8_on(sv);
2822                         } else {
2823                             SvUTF8_off(sv);
2824                         }
2825                     } else {
2826                         stashname = "__ANON__";
2827                         stashnamelen = 8;
2828                     }
2829                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2830                         + 2 * sizeof(UV) + 2 /* )\0 */;
2831                 } else {
2832                     len = typelen + 3 /* (0x */
2833                         + 2 * sizeof(UV) + 2 /* )\0 */;
2834                 }
2835
2836                 Newx(buffer, len, char);
2837                 buffer_end = retval = buffer + len;
2838
2839                 /* Working backwards  */
2840                 *--retval = '\0';
2841                 *--retval = ')';
2842                 do {
2843                     *--retval = PL_hexdigit[addr & 15];
2844                 } while (addr >>= 4);
2845                 *--retval = 'x';
2846                 *--retval = '0';
2847                 *--retval = '(';
2848
2849                 retval -= typelen;
2850                 memcpy(retval, typestr, typelen);
2851
2852                 if (stashname) {
2853                     *--retval = '=';
2854                     retval -= stashnamelen;
2855                     memcpy(retval, stashname, stashnamelen);
2856                 }
2857                 /* retval may not necessarily have reached the start of the
2858                    buffer here.  */
2859                 assert (retval >= buffer);
2860
2861                 len = buffer_end - retval - 1; /* -1 for that \0  */
2862             }
2863             if (lp)
2864                 *lp = len;
2865             SAVEFREEPV(buffer);
2866             return retval;
2867         }
2868     }
2869
2870     if (SvPOKp(sv)) {
2871         if (lp)
2872             *lp = SvCUR(sv);
2873         if (flags & SV_MUTABLE_RETURN)
2874             return SvPVX_mutable(sv);
2875         if (flags & SV_CONST_RETURN)
2876             return (char *)SvPVX_const(sv);
2877         return SvPVX(sv);
2878     }
2879
2880     if (SvIOK(sv)) {
2881         /* I'm assuming that if both IV and NV are equally valid then
2882            converting the IV is going to be more efficient */
2883         const U32 isUIOK = SvIsUV(sv);
2884         char buf[TYPE_CHARS(UV)];
2885         char *ebuf, *ptr;
2886         STRLEN len;
2887
2888         if (SvTYPE(sv) < SVt_PVIV)
2889             sv_upgrade(sv, SVt_PVIV);
2890         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2891         len = ebuf - ptr;
2892         /* inlined from sv_setpvn */
2893         s = SvGROW_mutable(sv, len + 1);
2894         Move(ptr, s, len, char);
2895         s += len;
2896         *s = '\0';
2897     }
2898     else if (SvNOK(sv)) {
2899         if (SvTYPE(sv) < SVt_PVNV)
2900             sv_upgrade(sv, SVt_PVNV);
2901         if (SvNVX(sv) == 0.0) {
2902             s = SvGROW_mutable(sv, 2);
2903             *s++ = '0';
2904             *s = '\0';
2905         } else {
2906             dSAVE_ERRNO;
2907             /* The +20 is pure guesswork.  Configure test needed. --jhi */
2908             s = SvGROW_mutable(sv, NV_DIG + 20);
2909             /* some Xenix systems wipe out errno here */
2910             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2911             RESTORE_ERRNO;
2912             while (*s) s++;
2913         }
2914 #ifdef hcx
2915         if (s[-1] == '.')
2916             *--s = '\0';
2917 #endif
2918     }
2919     else if (isGV_with_GP(sv)) {
2920         GV *const gv = MUTABLE_GV(sv);
2921         SV *const buffer = sv_newmortal();
2922
2923         gv_efullname3(buffer, gv, "*");
2924
2925         assert(SvPOK(buffer));
2926         if (SvUTF8(buffer))
2927             SvUTF8_on(sv);
2928         if (lp)
2929             *lp = SvCUR(buffer);
2930         return SvPVX(buffer);
2931     }
2932     else if (isREGEXP(sv)) {
2933         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
2934         return RX_WRAPPED((REGEXP *)sv);
2935     }
2936     else {
2937         if (lp)
2938             *lp = 0;
2939         if (flags & SV_UNDEF_RETURNS_NULL)
2940             return NULL;
2941         if (!PL_localizing && !SvPADTMP(sv) && ckWARN(WARN_UNINITIALIZED))
2942             report_uninit(sv);
2943         /* Typically the caller expects that sv_any is not NULL now.  */
2944         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
2945             sv_upgrade(sv, SVt_PV);
2946         return (char *)"";
2947     }
2948
2949     {
2950         const STRLEN len = s - SvPVX_const(sv);
2951         if (lp) 
2952             *lp = len;
2953         SvCUR_set(sv, len);
2954     }
2955     SvPOK_on(sv);
2956     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2957                           PTR2UV(sv),SvPVX_const(sv)));
2958     if (flags & SV_CONST_RETURN)
2959         return (char *)SvPVX_const(sv);
2960     if (flags & SV_MUTABLE_RETURN)
2961         return SvPVX_mutable(sv);
2962     return SvPVX(sv);
2963 }
2964
2965 /*
2966 =for apidoc sv_copypv
2967
2968 Copies a stringified representation of the source SV into the
2969 destination SV.  Automatically performs any necessary mg_get and
2970 coercion of numeric values into strings.  Guaranteed to preserve
2971 UTF8 flag even from overloaded objects.  Similar in nature to
2972 sv_2pv[_flags] but operates directly on an SV instead of just the
2973 string.  Mostly uses sv_2pv_flags to do its work, except when that
2974 would lose the UTF-8'ness of the PV.
2975
2976 =for apidoc sv_copypv_nomg
2977
2978 Like sv_copypv, but doesn't invoke get magic first.
2979
2980 =for apidoc sv_copypv_flags
2981
2982 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
2983 include SV_GMAGIC.
2984
2985 =cut
2986 */
2987
2988 void
2989 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
2990 {
2991     PERL_ARGS_ASSERT_SV_COPYPV;
2992
2993     sv_copypv_flags(dsv, ssv, 0);
2994 }
2995
2996 void
2997 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
2998 {
2999     STRLEN len;
3000     const char *s;
3001
3002     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3003
3004     if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3005         mg_get(ssv);
3006     s = SvPV_nomg_const(ssv,len);
3007     sv_setpvn(dsv,s,len);
3008     if (SvUTF8(ssv))
3009         SvUTF8_on(dsv);
3010     else
3011         SvUTF8_off(dsv);
3012 }
3013
3014 /*
3015 =for apidoc sv_2pvbyte
3016
3017 Return a pointer to the byte-encoded representation of the SV, and set *lp
3018 to its length.  May cause the SV to be downgraded from UTF-8 as a
3019 side-effect.
3020
3021 Usually accessed via the C<SvPVbyte> macro.
3022
3023 =cut
3024 */
3025
3026 char *
3027 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3028 {
3029     PERL_ARGS_ASSERT_SV_2PVBYTE;
3030
3031     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3032      || isGV_with_GP(sv) || SvROK(sv)) {
3033         SV *sv2 = sv_newmortal();
3034         sv_copypv(sv2,sv);
3035         sv = sv2;
3036     }
3037     else SvGETMAGIC(sv);
3038     sv_utf8_downgrade(sv,0);
3039     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3040 }
3041
3042 /*
3043 =for apidoc sv_2pvutf8
3044
3045 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3046 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3047
3048 Usually accessed via the C<SvPVutf8> macro.
3049
3050 =cut
3051 */
3052
3053 char *
3054 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3055 {
3056     PERL_ARGS_ASSERT_SV_2PVUTF8;
3057
3058     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3059      || isGV_with_GP(sv) || SvROK(sv))
3060         sv = sv_mortalcopy(sv);
3061     else
3062         SvGETMAGIC(sv);
3063     sv_utf8_upgrade_nomg(sv);
3064     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3065 }
3066
3067
3068 /*
3069 =for apidoc sv_2bool
3070
3071 This macro is only used by sv_true() or its macro equivalent, and only if
3072 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3073 It calls sv_2bool_flags with the SV_GMAGIC flag.
3074
3075 =for apidoc sv_2bool_flags
3076
3077 This function is only used by sv_true() and friends,  and only if
3078 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3079 contain SV_GMAGIC, then it does an mg_get() first.
3080
3081
3082 =cut
3083 */
3084
3085 bool
3086 Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
3087 {
3088     dVAR;
3089
3090     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3091
3092     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3093
3094     if (!SvOK(sv))
3095         return 0;
3096     if (SvROK(sv)) {
3097         if (SvAMAGIC(sv)) {
3098             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3099             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3100                 return cBOOL(SvTRUE(tmpsv));
3101         }
3102         return SvRV(sv) != 0;
3103     }
3104     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3105 }
3106
3107 /*
3108 =for apidoc sv_utf8_upgrade
3109
3110 Converts the PV of an SV to its UTF-8-encoded form.
3111 Forces the SV to string form if it is not already.
3112 Will C<mg_get> on C<sv> if appropriate.
3113 Always sets the SvUTF8 flag to avoid future validity checks even
3114 if the whole string is the same in UTF-8 as not.
3115 Returns the number of bytes in the converted string
3116
3117 This is not a general purpose byte encoding to Unicode interface:
3118 use the Encode extension for that.
3119
3120 =for apidoc sv_utf8_upgrade_nomg
3121
3122 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3123
3124 =for apidoc sv_utf8_upgrade_flags
3125
3126 Converts the PV of an SV to its UTF-8-encoded form.
3127 Forces the SV to string form if it is not already.
3128 Always sets the SvUTF8 flag to avoid future validity checks even
3129 if all the bytes are invariant in UTF-8.
3130 If C<flags> has C<SV_GMAGIC> bit set,
3131 will C<mg_get> on C<sv> if appropriate, else not.
3132 Returns the number of bytes in the converted string
3133 C<sv_utf8_upgrade> and
3134 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3135
3136 This is not a general purpose byte encoding to Unicode interface:
3137 use the Encode extension for that.
3138
3139 =cut
3140
3141 The grow version is currently not externally documented.  It adds a parameter,
3142 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3143 have free after it upon return.  This allows the caller to reserve extra space
3144 that it intends to fill, to avoid extra grows.
3145
3146 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3147 which can be used to tell this function to not first check to see if there are
3148 any characters that are different in UTF-8 (variant characters) which would
3149 force it to allocate a new string to sv, but to assume there are.  Typically
3150 this flag is used by a routine that has already parsed the string to find that
3151 there are such characters, and passes this information on so that the work
3152 doesn't have to be repeated.
3153
3154 (One might think that the calling routine could pass in the position of the
3155 first such variant, so it wouldn't have to be found again.  But that is not the
3156 case, because typically when the caller is likely to use this flag, it won't be
3157 calling this routine unless it finds something that won't fit into a byte.
3158 Otherwise it tries to not upgrade and just use bytes.  But some things that
3159 do fit into a byte are variants in utf8, and the caller may not have been
3160 keeping track of these.)
3161
3162 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3163 isn't guaranteed due to having other routines do the work in some input cases,
3164 or if the input is already flagged as being in utf8.
3165
3166 The speed of this could perhaps be improved for many cases if someone wanted to
3167 write a fast function that counts the number of variant characters in a string,
3168 especially if it could return the position of the first one.
3169
3170 */
3171
3172 STRLEN
3173 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3174 {
3175     dVAR;
3176
3177     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3178
3179     if (sv == &PL_sv_undef)
3180         return 0;
3181     if (!SvPOK_nog(sv)) {
3182         STRLEN len = 0;
3183         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3184             (void) sv_2pv_flags(sv,&len, flags);
3185             if (SvUTF8(sv)) {
3186                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3187                 return len;
3188             }
3189         } else {
3190             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3191         }
3192     }
3193
3194     if (SvUTF8(sv)) {
3195         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3196         return SvCUR(sv);
3197     }
3198
3199     if (SvIsCOW(sv)) {
3200         sv_force_normal_flags(sv, 0);
3201     }
3202
3203     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3204         sv_recode_to_utf8(sv, PL_encoding);
3205         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3206         return SvCUR(sv);
3207     }
3208
3209     if (SvCUR(sv) == 0) {
3210         if (extra) SvGROW(sv, extra);
3211     } else { /* Assume Latin-1/EBCDIC */
3212         /* This function could be much more efficient if we
3213          * had a FLAG in SVs to signal if there are any variant
3214          * chars in the PV.  Given that there isn't such a flag
3215          * make the loop as fast as possible (although there are certainly ways
3216          * to speed this up, eg. through vectorization) */
3217         U8 * s = (U8 *) SvPVX_const(sv);
3218         U8 * e = (U8 *) SvEND(sv);
3219         U8 *t = s;
3220         STRLEN two_byte_count = 0;
3221         
3222         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3223
3224         /* See if really will need to convert to utf8.  We mustn't rely on our
3225          * incoming SV being well formed and having a trailing '\0', as certain
3226          * code in pp_formline can send us partially built SVs. */
3227
3228         while (t < e) {
3229             const U8 ch = *t++;
3230             if (NATIVE_IS_INVARIANT(ch)) continue;
3231
3232             t--;    /* t already incremented; re-point to first variant */
3233             two_byte_count = 1;
3234             goto must_be_utf8;
3235         }
3236
3237         /* utf8 conversion not needed because all are invariants.  Mark as
3238          * UTF-8 even if no variant - saves scanning loop */
3239         SvUTF8_on(sv);
3240         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3241         return SvCUR(sv);
3242
3243 must_be_utf8:
3244
3245         /* Here, the string should be converted to utf8, either because of an
3246          * input flag (two_byte_count = 0), or because a character that
3247          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3248          * the beginning of the string (if we didn't examine anything), or to
3249          * the first variant.  In either case, everything from s to t - 1 will
3250          * occupy only 1 byte each on output.
3251          *
3252          * There are two main ways to convert.  One is to create a new string
3253          * and go through the input starting from the beginning, appending each
3254          * converted value onto the new string as we go along.  It's probably
3255          * best to allocate enough space in the string for the worst possible
3256          * case rather than possibly running out of space and having to
3257          * reallocate and then copy what we've done so far.  Since everything
3258          * from s to t - 1 is invariant, the destination can be initialized
3259          * with these using a fast memory copy
3260          *
3261          * The other way is to figure out exactly how big the string should be
3262          * by parsing the entire input.  Then you don't have to make it big
3263          * enough to handle the worst possible case, and more importantly, if
3264          * the string you already have is large enough, you don't have to
3265          * allocate a new string, you can copy the last character in the input
3266          * string to the final position(s) that will be occupied by the
3267          * converted string and go backwards, stopping at t, since everything
3268          * before that is invariant.
3269          *
3270          * There are advantages and disadvantages to each method.
3271          *
3272          * In the first method, we can allocate a new string, do the memory
3273          * copy from the s to t - 1, and then proceed through the rest of the
3274          * string byte-by-byte.
3275          *
3276          * In the second method, we proceed through the rest of the input
3277          * string just calculating how big the converted string will be.  Then
3278          * there are two cases:
3279          *  1)  if the string has enough extra space to handle the converted
3280          *      value.  We go backwards through the string, converting until we
3281          *      get to the position we are at now, and then stop.  If this
3282          *      position is far enough along in the string, this method is
3283          *      faster than the other method.  If the memory copy were the same
3284          *      speed as the byte-by-byte loop, that position would be about
3285          *      half-way, as at the half-way mark, parsing to the end and back
3286          *      is one complete string's parse, the same amount as starting
3287          *      over and going all the way through.  Actually, it would be
3288          *      somewhat less than half-way, as it's faster to just count bytes
3289          *      than to also copy, and we don't have the overhead of allocating
3290          *      a new string, changing the scalar to use it, and freeing the
3291          *      existing one.  But if the memory copy is fast, the break-even
3292          *      point is somewhere after half way.  The counting loop could be
3293          *      sped up by vectorization, etc, to move the break-even point
3294          *      further towards the beginning.
3295          *  2)  if the string doesn't have enough space to handle the converted
3296          *      value.  A new string will have to be allocated, and one might
3297          *      as well, given that, start from the beginning doing the first
3298          *      method.  We've spent extra time parsing the string and in
3299          *      exchange all we've gotten is that we know precisely how big to
3300          *      make the new one.  Perl is more optimized for time than space,
3301          *      so this case is a loser.
3302          * So what I've decided to do is not use the 2nd method unless it is
3303          * guaranteed that a new string won't have to be allocated, assuming
3304          * the worst case.  I also decided not to put any more conditions on it
3305          * than this, for now.  It seems likely that, since the worst case is
3306          * twice as big as the unknown portion of the string (plus 1), we won't
3307          * be guaranteed enough space, causing us to go to the first method,
3308          * unless the string is short, or the first variant character is near
3309          * the end of it.  In either of these cases, it seems best to use the
3310          * 2nd method.  The only circumstance I can think of where this would
3311          * be really slower is if the string had once had much more data in it
3312          * than it does now, but there is still a substantial amount in it  */
3313
3314         {
3315             STRLEN invariant_head = t - s;
3316             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3317             if (SvLEN(sv) < size) {
3318
3319                 /* Here, have decided to allocate a new string */
3320
3321                 U8 *dst;
3322                 U8 *d;
3323
3324                 Newx(dst, size, U8);
3325
3326                 /* If no known invariants at the beginning of the input string,
3327                  * set so starts from there.  Otherwise, can use memory copy to
3328                  * get up to where we are now, and then start from here */
3329
3330                 if (invariant_head <= 0) {
3331                     d = dst;
3332                 } else {
3333                     Copy(s, dst, invariant_head, char);
3334                     d = dst + invariant_head;
3335                 }
3336
3337                 while (t < e) {
3338                     const UV uv = NATIVE8_TO_UNI(*t++);
3339                     if (UNI_IS_INVARIANT(uv))
3340                         *d++ = (U8)UNI_TO_NATIVE(uv);
3341                     else {
3342                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3343                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3344                     }
3345                 }
3346                 *d = '\0';
3347                 SvPV_free(sv); /* No longer using pre-existing string */
3348                 SvPV_set(sv, (char*)dst);
3349                 SvCUR_set(sv, d - dst);
3350                 SvLEN_set(sv, size);
3351             } else {
3352
3353                 /* Here, have decided to get the exact size of the string.
3354                  * Currently this happens only when we know that there is
3355                  * guaranteed enough space to fit the converted string, so
3356                  * don't have to worry about growing.  If two_byte_count is 0,
3357                  * then t points to the first byte of the string which hasn't
3358                  * been examined yet.  Otherwise two_byte_count is 1, and t
3359                  * points to the first byte in the string that will expand to
3360                  * two.  Depending on this, start examining at t or 1 after t.
3361                  * */
3362
3363                 U8 *d = t + two_byte_count;
3364
3365
3366                 /* Count up the remaining bytes that expand to two */
3367
3368                 while (d < e) {
3369                     const U8 chr = *d++;
3370                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3371                 }
3372
3373                 /* The string will expand by just the number of bytes that
3374                  * occupy two positions.  But we are one afterwards because of
3375                  * the increment just above.  This is the place to put the
3376                  * trailing NUL, and to set the length before we decrement */
3377
3378                 d += two_byte_count;
3379                 SvCUR_set(sv, d - s);
3380                 *d-- = '\0';
3381
3382
3383                 /* Having decremented d, it points to the position to put the
3384                  * very last byte of the expanded string.  Go backwards through
3385                  * the string, copying and expanding as we go, stopping when we
3386                  * get to the part that is invariant the rest of the way down */
3387
3388                 e--;
3389                 while (e >= t) {
3390                     const U8 ch = NATIVE8_TO_UNI(*e--);
3391                     if (UNI_IS_INVARIANT(ch)) {
3392                         *d-- = UNI_TO_NATIVE(ch);
3393                     } else {
3394                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3395                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3396                     }
3397                 }
3398             }
3399
3400             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3401                 /* Update pos. We do it at the end rather than during
3402                  * the upgrade, to avoid slowing down the common case
3403                  * (upgrade without pos) */
3404                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3405                 if (mg) {
3406                     I32 pos = mg->mg_len;
3407                     if (pos > 0 && (U32)pos > invariant_head) {
3408                         U8 *d = (U8*) SvPVX(sv) + invariant_head;
3409                         STRLEN n = (U32)pos - invariant_head;
3410                         while (n > 0) {
3411                             if (UTF8_IS_START(*d))
3412                                 d++;
3413                             d++;
3414                             n--;
3415                         }
3416                         mg->mg_len  = d - (U8*)SvPVX(sv);
3417                     }
3418                 }
3419                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3420                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3421             }
3422         }
3423     }
3424
3425     /* Mark as UTF-8 even if no variant - saves scanning loop */
3426     SvUTF8_on(sv);
3427     return SvCUR(sv);
3428 }
3429
3430 /*
3431 =for apidoc sv_utf8_downgrade
3432
3433 Attempts to convert the PV of an SV from characters to bytes.
3434 If the PV contains a character that cannot fit
3435 in a byte, this conversion will fail;
3436 in this case, either returns false or, if C<fail_ok> is not
3437 true, croaks.
3438
3439 This is not a general purpose Unicode to byte encoding interface:
3440 use the Encode extension for that.
3441
3442 =cut
3443 */
3444
3445 bool
3446 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3447 {
3448     dVAR;
3449
3450     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3451
3452     if (SvPOKp(sv) && SvUTF8(sv)) {
3453         if (SvCUR(sv)) {
3454             U8 *s;
3455             STRLEN len;
3456             int mg_flags = SV_GMAGIC;
3457
3458             if (SvIsCOW(sv)) {
3459                 sv_force_normal_flags(sv, 0);
3460             }
3461             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3462                 /* update pos */
3463                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3464                 if (mg) {
3465                     I32 pos = mg->mg_len;
3466                     if (pos > 0) {
3467                         sv_pos_b2u(sv, &pos);
3468                         mg_flags = 0; /* sv_pos_b2u does get magic */
3469                         mg->mg_len  = pos;
3470                     }
3471                 }
3472                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3473                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3474
3475             }
3476             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3477
3478             if (!utf8_to_bytes(s, &len)) {
3479                 if (fail_ok)
3480                     return FALSE;
3481                 else {
3482                     if (PL_op)
3483                         Perl_croak(aTHX_ "Wide character in %s",
3484                                    OP_DESC(PL_op));
3485                     else
3486                         Perl_croak(aTHX_ "Wide character");
3487                 }
3488             }
3489             SvCUR_set(sv, len);
3490         }
3491     }
3492     SvUTF8_off(sv);
3493     return TRUE;
3494 }
3495
3496 /*
3497 =for apidoc sv_utf8_encode
3498
3499 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3500 flag off so that it looks like octets again.
3501
3502 =cut
3503 */
3504
3505 void
3506 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3507 {
3508     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3509
3510     if (SvREADONLY(sv)) {
3511         sv_force_normal_flags(sv, 0);
3512     }
3513     (void) sv_utf8_upgrade(sv);
3514     SvUTF8_off(sv);
3515 }
3516
3517 /*
3518 =for apidoc sv_utf8_decode
3519
3520 If the PV of the SV is an octet sequence in UTF-8
3521 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3522 so that it looks like a character.  If the PV contains only single-byte
3523 characters, the C<SvUTF8> flag stays off.
3524 Scans PV for validity and returns false if the PV is invalid UTF-8.
3525
3526 =cut
3527 */
3528
3529 bool
3530 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3531 {
3532     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3533
3534     if (SvPOKp(sv)) {
3535         const U8 *start, *c;
3536         const U8 *e;
3537
3538         /* The octets may have got themselves encoded - get them back as
3539          * bytes
3540          */
3541         if (!sv_utf8_downgrade(sv, TRUE))
3542             return FALSE;
3543
3544         /* it is actually just a matter of turning the utf8 flag on, but
3545          * we want to make sure everything inside is valid utf8 first.
3546          */
3547         c = start = (const U8 *) SvPVX_const(sv);
3548         if (!is_utf8_string(c, SvCUR(sv)))
3549             return FALSE;
3550         e = (const U8 *) SvEND(sv);
3551         while (c < e) {
3552             const U8 ch = *c++;
3553             if (!UTF8_IS_INVARIANT(ch)) {
3554                 SvUTF8_on(sv);
3555                 break;
3556             }
3557         }
3558         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3559             /* adjust pos to the start of a UTF8 char sequence */
3560             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3561             if (mg) {
3562                 I32 pos = mg->mg_len;
3563                 if (pos > 0) {
3564                     for (c = start + pos; c > start; c--) {
3565                         if (UTF8_IS_START(*c))
3566                             break;
3567                     }
3568                     mg->mg_len  = c - start;
3569                 }
3570             }
3571             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3572                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3573         }
3574     }
3575     return TRUE;
3576 }
3577
3578 /*
3579 =for apidoc sv_setsv
3580
3581 Copies the contents of the source SV C<ssv> into the destination SV
3582 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3583 function if the source SV needs to be reused.  Does not handle 'set' magic.
3584 Loosely speaking, it performs a copy-by-value, obliterating any previous
3585 content of the destination.
3586
3587 You probably want to use one of the assortment of wrappers, such as
3588 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3589 C<SvSetMagicSV_nosteal>.
3590
3591 =for apidoc sv_setsv_flags
3592
3593 Copies the contents of the source SV C<ssv> into the destination SV
3594 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3595 function if the source SV needs to be reused.  Does not handle 'set' magic.
3596 Loosely speaking, it performs a copy-by-value, obliterating any previous
3597 content of the destination.
3598 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3599 C<ssv> if appropriate, else not.  If the C<flags>
3600 parameter has the C<NOSTEAL> bit set then the
3601 buffers of temps will not be stolen.  <sv_setsv>
3602 and C<sv_setsv_nomg> are implemented in terms of this function.
3603
3604 You probably want to use one of the assortment of wrappers, such as
3605 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3606 C<SvSetMagicSV_nosteal>.
3607
3608 This is the primary function for copying scalars, and most other
3609 copy-ish functions and macros use this underneath.
3610
3611 =cut
3612 */
3613
3614 static void
3615 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3616 {
3617     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3618     HV *old_stash = NULL;
3619
3620     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3621
3622     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3623         const char * const name = GvNAME(sstr);
3624         const STRLEN len = GvNAMELEN(sstr);
3625         {
3626             if (dtype >= SVt_PV) {
3627                 SvPV_free(dstr);
3628                 SvPV_set(dstr, 0);
3629                 SvLEN_set(dstr, 0);
3630                 SvCUR_set(dstr, 0);
3631             }
3632             SvUPGRADE(dstr, SVt_PVGV);
3633             (void)SvOK_off(dstr);
3634             /* We have to turn this on here, even though we turn it off
3635                below, as GvSTASH will fail an assertion otherwise. */
3636             isGV_with_GP_on(dstr);
3637         }
3638         GvSTASH(dstr) = GvSTASH(sstr);
3639         if (GvSTASH(dstr))
3640             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3641         gv_name_set(MUTABLE_GV(dstr), name, len,
3642                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3643         SvFAKE_on(dstr);        /* can coerce to non-glob */
3644     }
3645
3646     if(GvGP(MUTABLE_GV(sstr))) {
3647         /* If source has method cache entry, clear it */
3648         if(GvCVGEN(sstr)) {
3649             SvREFCNT_dec(GvCV(sstr));
3650             GvCV_set(sstr, NULL);
3651             GvCVGEN(sstr) = 0;
3652         }
3653         /* If source has a real method, then a method is
3654            going to change */
3655         else if(
3656          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3657         ) {
3658             mro_changes = 1;
3659         }
3660     }
3661
3662     /* If dest already had a real method, that's a change as well */
3663     if(
3664         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3665      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3666     ) {
3667         mro_changes = 1;
3668     }
3669
3670     /* We don't need to check the name of the destination if it was not a
3671        glob to begin with. */
3672     if(dtype == SVt_PVGV) {
3673         const char * const name = GvNAME((const GV *)dstr);
3674         if(
3675             strEQ(name,"ISA")
3676          /* The stash may have been detached from the symbol table, so
3677             check its name. */
3678          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3679         )
3680             mro_changes = 2;
3681         else {
3682             const STRLEN len = GvNAMELEN(dstr);
3683             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3684              || (len == 1 && name[0] == ':')) {
3685                 mro_changes = 3;
3686
3687                 /* Set aside the old stash, so we can reset isa caches on
3688                    its subclasses. */
3689                 if((old_stash = GvHV(dstr)))
3690                     /* Make sure we do not lose it early. */
3691                     SvREFCNT_inc_simple_void_NN(
3692                      sv_2mortal((SV *)old_stash)
3693                     );
3694             }
3695         }
3696     }
3697
3698     gp_free(MUTABLE_GV(dstr));
3699     isGV_with_GP_off(dstr); /* SvOK_off does not like globs. */
3700     (void)SvOK_off(dstr);
3701     isGV_with_GP_on(dstr);
3702     GvINTRO_off(dstr);          /* one-shot flag */
3703     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3704     if (SvTAINTED(sstr))
3705         SvTAINT(dstr);
3706     if (GvIMPORTED(dstr) != GVf_IMPORTED
3707         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3708         {
3709             GvIMPORTED_on(dstr);
3710         }
3711     GvMULTI_on(dstr);
3712     if(mro_changes == 2) {
3713       if (GvAV((const GV *)sstr)) {
3714         MAGIC *mg;
3715         SV * const sref = (SV *)GvAV((const GV *)dstr);
3716         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3717             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3718                 AV * const ary = newAV();
3719                 av_push(ary, mg->mg_obj); /* takes the refcount */
3720                 mg->mg_obj = (SV *)ary;
3721             }
3722             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3723         }
3724         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3725       }
3726       mro_isa_changed_in(GvSTASH(dstr));
3727     }
3728     else if(mro_changes == 3) {
3729         HV * const stash = GvHV(dstr);
3730         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3731             mro_package_moved(
3732                 stash, old_stash,
3733                 (GV *)dstr, 0
3734             );
3735     }
3736     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3737     return;
3738 }
3739
3740 static void
3741 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3742 {
3743     SV * const sref = SvRV(sstr);
3744     SV *dref;
3745     const int intro = GvINTRO(dstr);
3746     SV **location;
3747     U8 import_flag = 0;
3748     const U32 stype = SvTYPE(sref);
3749
3750     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3751
3752     if (intro) {
3753         GvINTRO_off(dstr);      /* one-shot flag */
3754         GvLINE(dstr) = CopLINE(PL_curcop);
3755         GvEGV(dstr) = MUTABLE_GV(dstr);
3756     }
3757     GvMULTI_on(dstr);
3758     switch (stype) {
3759     case SVt_PVCV:
3760         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3761         import_flag = GVf_IMPORTED_CV;
3762         goto common;
3763     case SVt_PVHV:
3764         location = (SV **) &GvHV(dstr);
3765         import_flag = GVf_IMPORTED_HV;
3766         goto common;
3767     case SVt_PVAV:
3768         location = (SV **) &GvAV(dstr);
3769         import_flag = GVf_IMPORTED_AV;
3770         goto common;
3771     case SVt_PVIO:
3772         location = (SV **) &GvIOp(dstr);
3773         goto common;
3774     case SVt_PVFM:
3775         location = (SV **) &GvFORM(dstr);
3776         goto common;
3777     default:
3778         location = &GvSV(dstr);
3779         import_flag = GVf_IMPORTED_SV;
3780     common:
3781         if (intro) {
3782             if (stype == SVt_PVCV) {
3783                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3784                 if (GvCVGEN(dstr)) {
3785                     SvREFCNT_dec(GvCV(dstr));
3786                     GvCV_set(dstr, NULL);
3787                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3788                 }
3789             }
3790             /* SAVEt_GVSLOT takes more room on the savestack and has more
3791                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3792                leave_scope needs access to the GV so it can reset method
3793                caches.  We must use SAVEt_GVSLOT whenever the type is
3794                SVt_PVCV, even if the stash is anonymous, as the stash may
3795                gain a name somehow before leave_scope. */
3796             if (stype == SVt_PVCV) {
3797                 /* There is no save_pushptrptrptr.  Creating it for this
3798                    one call site would be overkill.  So inline the ss add
3799                    routines here. */
3800                 dSS_ADD;
3801                 SS_ADD_PTR(dstr);
3802                 SS_ADD_PTR(location);
3803                 SS_ADD_PTR(SvREFCNT_inc(*location));
3804                 SS_ADD_UV(SAVEt_GVSLOT);
3805                 SS_ADD_END(4);
3806             }
3807             else SAVEGENERICSV(*location);
3808         }
3809         dref = *location;
3810         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3811             CV* const cv = MUTABLE_CV(*location);
3812             if (cv) {
3813                 if (!GvCVGEN((const GV *)dstr) &&
3814                     (CvROOT(cv) || CvXSUB(cv)) &&
3815                     /* redundant check that avoids creating the extra SV
3816                        most of the time: */
3817                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3818                     {
3819                         SV * const new_const_sv =
3820                             CvCONST((const CV *)sref)
3821                                  ? cv_const_sv((const CV *)sref)
3822                                  : NULL;
3823                         report_redefined_cv(
3824                            sv_2mortal(Perl_newSVpvf(aTHX_
3825                                 "%"HEKf"::%"HEKf,
3826                                 HEKfARG(
3827                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
3828                                 ),
3829                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3830                            )),
3831                            cv,
3832                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3833                         );
3834                     }
3835                 if (!intro)
3836                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3837                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3838                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3839                                    SvPOK(sref) ? SvUTF8(sref) : 0);
3840             }
3841             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3842             GvASSUMECV_on(dstr);
3843             if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3844         }
3845         *location = SvREFCNT_inc_simple_NN(sref);
3846         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3847             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3848             GvFLAGS(dstr) |= import_flag;
3849         }
3850         if (stype == SVt_PVHV) {
3851             const char * const name = GvNAME((GV*)dstr);
3852             const STRLEN len = GvNAMELEN(dstr);
3853             if (
3854                 (
3855                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3856                 || (len == 1 && name[0] == ':')
3857                 )
3858              && (!dref || HvENAME_get(dref))
3859             ) {
3860                 mro_package_moved(
3861                     (HV *)sref, (HV *)dref,
3862                     (GV *)dstr, 0
3863                 );
3864             }
3865         }
3866         else if (
3867             stype == SVt_PVAV && sref != dref
3868          && strEQ(GvNAME((GV*)dstr), "ISA")
3869          /* The stash may have been detached from the symbol table, so
3870             check its name before doing anything. */
3871          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3872         ) {
3873             MAGIC *mg;
3874             MAGIC * const omg = dref && SvSMAGICAL(dref)
3875                                  ? mg_find(dref, PERL_MAGIC_isa)
3876                                  : NULL;
3877             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3878                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3879                     AV * const ary = newAV();
3880                     av_push(ary, mg->mg_obj); /* takes the refcount */
3881                     mg->mg_obj = (SV *)ary;
3882                 }
3883                 if (omg) {
3884                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
3885                         SV **svp = AvARRAY((AV *)omg->mg_obj);
3886                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
3887                         while (items--)
3888                             av_push(
3889                              (AV *)mg->mg_obj,
3890                              SvREFCNT_inc_simple_NN(*svp++)
3891                             );
3892                     }
3893                     else
3894                         av_push(
3895                          (AV *)mg->mg_obj,
3896                          SvREFCNT_inc_simple_NN(omg->mg_obj)
3897                         );
3898                 }
3899                 else
3900                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
3901             }
3902             else
3903             {
3904                 sv_magic(
3905                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
3906                 );
3907                 mg = mg_find(sref, PERL_MAGIC_isa);
3908             }
3909             /* Since the *ISA assignment could have affected more than
3910                one stash, don't call mro_isa_changed_in directly, but let
3911                magic_clearisa do it for us, as it already has the logic for
3912                dealing with globs vs arrays of globs. */
3913             assert(mg);
3914             Perl_magic_clearisa(aTHX_ NULL, mg);
3915         }
3916         else if (stype == SVt_PVIO) {
3917             DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
3918             /* It's a cache. It will rebuild itself quite happily.
3919                It's a lot of effort to work out exactly which key (or keys)
3920                might be invalidated by the creation of the this file handle.
3921             */
3922             hv_clear(PL_stashcache);
3923         }
3924         break;
3925     }
3926     if (!intro) SvREFCNT_dec(dref);
3927     if (SvTAINTED(sstr))
3928         SvTAINT(dstr);
3929     return;
3930 }
3931
3932 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
3933    hold is 0. */
3934 #if SV_COW_THRESHOLD
3935 # define GE_COW_THRESHOLD(len)          ((len) >= SV_COW_THRESHOLD)
3936 #else
3937 # define GE_COW_THRESHOLD(len)          1
3938 #endif
3939 #if SV_COWBUF_THRESHOLD
3940 # define GE_COWBUF_THRESHOLD(len)       ((len) >= SV_COWBUF_THRESHOLD)
3941 #else
3942 # define GE_COWBUF_THRESHOLD(len)       1
3943 #endif
3944
3945 void
3946 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
3947 {
3948     dVAR;
3949     U32 sflags;
3950     int dtype;
3951     svtype stype;
3952
3953     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3954
3955     if (sstr == dstr)
3956         return;
3957
3958     if (SvIS_FREED(dstr)) {
3959         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3960                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3961     }
3962     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3963     if (!sstr)
3964         sstr = &PL_sv_undef;
3965     if (SvIS_FREED(sstr)) {
3966         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3967                    (void*)sstr, (void*)dstr);
3968     }
3969     stype = SvTYPE(sstr);
3970     dtype = SvTYPE(dstr);
3971
3972     /* There's a lot of redundancy below but we're going for speed here */
3973
3974     switch (stype) {
3975     case SVt_NULL:
3976       undef_sstr:
3977         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
3978             (void)SvOK_off(dstr);
3979             return;
3980         }
3981         break;
3982     case SVt_IV:
3983         if (SvIOK(sstr)) {
3984             switch (dtype) {
3985             case SVt_NULL:
3986                 sv_upgrade(dstr, SVt_IV);
3987                 break;
3988             case SVt_NV:
3989             case SVt_PV:
3990                 sv_upgrade(dstr, SVt_PVIV);
3991                 break;
3992             case SVt_PVGV:
3993             case SVt_PVLV:
3994                 goto end_of_first_switch;
3995             }
3996             (void)SvIOK_only(dstr);
3997             SvIV_set(dstr,  SvIVX(sstr));
3998             if (SvIsUV(sstr))
3999                 SvIsUV_on(dstr);
4000             /* SvTAINTED can only be true if the SV has taint magic, which in
4001                turn means that the SV type is PVMG (or greater). This is the
4002                case statement for SVt_IV, so this cannot be true (whatever gcov
4003                may say).  */
4004             assert(!SvTAINTED(sstr));
4005             return;
4006         }
4007         if (!SvROK(sstr))
4008             goto undef_sstr;
4009         if (dtype < SVt_PV && dtype != SVt_IV)
4010             sv_upgrade(dstr, SVt_IV);
4011         break;
4012
4013     case SVt_NV:
4014         if (SvNOK(sstr)) {
4015             switch (dtype) {
4016             case SVt_NULL:
4017             case SVt_IV:
4018                 sv_upgrade(dstr, SVt_NV);
4019                 break;
4020             case SVt_PV:
4021             case SVt_PVIV:
4022                 sv_upgrade(dstr, SVt_PVNV);
4023                 break;
4024             case SVt_PVGV:
4025             case SVt_PVLV:
4026                 goto end_of_first_switch;
4027             }
4028             SvNV_set(dstr, SvNVX(sstr));
4029             (void)SvNOK_only(dstr);
4030             /* SvTAINTED can only be true if the SV has taint magic, which in
4031                turn means that the SV type is PVMG (or greater). This is the
4032                case statement for SVt_NV, so this cannot be true (whatever gcov
4033                may say).  */
4034             assert(!SvTAINTED(sstr));
4035             return;
4036         }
4037         goto undef_sstr;
4038
4039     case SVt_PV:
4040         if (dtype < SVt_PV)
4041             sv_upgrade(dstr, SVt_PV);
4042         break;
4043     case SVt_PVIV:
4044         if (dtype < SVt_PVIV)
4045             sv_upgrade(dstr, SVt_PVIV);
4046         break;
4047     case SVt_PVNV:
4048         if (dtype < SVt_PVNV)
4049             sv_upgrade(dstr, SVt_PVNV);
4050         break;
4051     default:
4052         {
4053         const char * const type = sv_reftype(sstr,0);
4054         if (PL_op)
4055             /* diag_listed_as: Bizarre copy of %s */
4056             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4057         else
4058             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4059         }
4060         break;
4061
4062     case SVt_REGEXP:
4063       upgregexp:
4064         if (dtype < SVt_REGEXP)
4065         {
4066             if (dtype >= SVt_PV) {
4067                 SvPV_free(dstr);
4068                 SvPV_set(dstr, 0);
4069                 SvLEN_set(dstr, 0);
4070                 SvCUR_set(dstr, 0);
4071             }
4072             sv_upgrade(dstr, SVt_REGEXP);
4073         }
4074         break;
4075
4076         /* case SVt_BIND: */
4077     case SVt_PVLV:
4078     case SVt_PVGV:
4079     case SVt_PVMG:
4080         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4081             mg_get(sstr);
4082             if (SvTYPE(sstr) != stype)
4083                 stype = SvTYPE(sstr);
4084         }
4085         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4086                     glob_assign_glob(dstr, sstr, dtype);
4087                     return;
4088         }
4089         if (stype == SVt_PVLV)
4090         {
4091             if (isREGEXP(sstr)) goto upgregexp;
4092             SvUPGRADE(dstr, SVt_PVNV);
4093         }
4094         else
4095             SvUPGRADE(dstr, (svtype)stype);
4096     }
4097  end_of_first_switch:
4098
4099     /* dstr may have been upgraded.  */
4100     dtype = SvTYPE(dstr);
4101     sflags = SvFLAGS(sstr);
4102
4103     if (dtype == SVt_PVCV) {
4104         /* Assigning to a subroutine sets the prototype.  */
4105         if (SvOK(sstr)) {
4106             STRLEN len;
4107             const char *const ptr = SvPV_const(sstr, len);
4108
4109             SvGROW(dstr, len + 1);
4110             Copy(ptr, SvPVX(dstr), len + 1, char);
4111             SvCUR_set(dstr, len);
4112             SvPOK_only(dstr);
4113             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4114             CvAUTOLOAD_off(dstr);
4115         } else {
4116             SvOK_off(dstr);
4117         }
4118     }
4119     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4120         const char * const type = sv_reftype(dstr,0);
4121         if (PL_op)
4122             /* diag_listed_as: Cannot copy to %s */
4123             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4124         else
4125             Perl_croak(aTHX_ "Cannot copy to %s", type);
4126     } else if (sflags & SVf_ROK) {
4127         if (isGV_with_GP(dstr)
4128             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4129             sstr = SvRV(sstr);
4130             if (sstr == dstr) {
4131                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4132                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4133                 {
4134                     GvIMPORTED_on(dstr);
4135                 }
4136                 GvMULTI_on(dstr);
4137                 return;
4138             }
4139             glob_assign_glob(dstr, sstr, dtype);
4140             return;
4141         }
4142
4143         if (dtype >= SVt_PV) {
4144             if (isGV_with_GP(dstr)) {
4145                 glob_assign_ref(dstr, sstr);
4146                 return;
4147             }
4148             if (SvPVX_const(dstr)) {
4149                 SvPV_free(dstr);
4150                 SvLEN_set(dstr, 0);
4151                 SvCUR_set(dstr, 0);
4152             }
4153         }
4154         (void)SvOK_off(dstr);
4155         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4156         SvFLAGS(dstr) |= sflags & SVf_ROK;
4157         assert(!(sflags & SVp_NOK));
4158         assert(!(sflags & SVp_IOK));
4159         assert(!(sflags & SVf_NOK));
4160         assert(!(sflags & SVf_IOK));
4161     }
4162     else if (isGV_with_GP(dstr)) {
4163         if (!(sflags & SVf_OK)) {
4164             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4165                            "Undefined value assigned to typeglob");
4166         }
4167         else {
4168             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4169             if (dstr != (const SV *)gv) {
4170                 const char * const name = GvNAME((const GV *)dstr);
4171                 const STRLEN len = GvNAMELEN(dstr);
4172                 HV *old_stash = NULL;
4173                 bool reset_isa = FALSE;
4174                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4175                  || (len == 1 && name[0] == ':')) {
4176                     /* Set aside the old stash, so we can reset isa caches
4177                        on its subclasses. */
4178                     if((old_stash = GvHV(dstr))) {
4179                         /* Make sure we do not lose it early. */
4180                         SvREFCNT_inc_simple_void_NN(
4181                          sv_2mortal((SV *)old_stash)
4182                         );
4183                     }
4184                     reset_isa = TRUE;
4185                 }
4186
4187                 if (GvGP(dstr))
4188                     gp_free(MUTABLE_GV(dstr));
4189                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4190
4191                 if (reset_isa) {
4192                     HV * const stash = GvHV(dstr);
4193                     if(
4194                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4195                     )
4196                         mro_package_moved(
4197                          stash, old_stash,
4198                          (GV *)dstr, 0
4199                         );
4200                 }
4201             }
4202         }
4203     }
4204     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4205           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4206         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4207     }
4208     else if (sflags & SVp_POK) {
4209         bool isSwipe = 0;
4210         const STRLEN cur = SvCUR(sstr);
4211         const STRLEN len = SvLEN(sstr);
4212
4213         /*
4214          * Check to see if we can just swipe the string.  If so, it's a
4215          * possible small lose on short strings, but a big win on long ones.
4216          * It might even be a win on short strings if SvPVX_const(dstr)
4217          * has to be allocated and SvPVX_const(sstr) has to be freed.
4218          * Likewise if we can set up COW rather than doing an actual copy, we
4219          * drop to the else clause, as the swipe code and the COW setup code
4220          * have much in common.
4221          */
4222
4223         /* Whichever path we take through the next code, we want this true,
4224            and doing it now facilitates the COW check.  */
4225         (void)SvPOK_only(dstr);
4226
4227         if (
4228             /* If we're already COW then this clause is not true, and if COW
4229                is allowed then we drop down to the else and make dest COW 
4230                with us.  If caller hasn't said that we're allowed to COW
4231                shared hash keys then we don't do the COW setup, even if the
4232                source scalar is a shared hash key scalar.  */
4233             (((flags & SV_COW_SHARED_HASH_KEYS)
4234                ? !(sflags & SVf_IsCOW)
4235 #ifdef PERL_NEW_COPY_ON_WRITE
4236                 || (len &&
4237                     ((!GE_COWBUF_THRESHOLD(cur) && SvLEN(dstr) > cur)
4238                    /* If this is a regular (non-hek) COW, only so many COW
4239                       "copies" are possible. */
4240                     || CowREFCNT(sstr) == SV_COW_REFCNT_MAX))
4241 #endif
4242                : 1 /* If making a COW copy is forbidden then the behaviour we
4243                        desire is as if the source SV isn't actually already
4244                        COW, even if it is.  So we act as if the source flags
4245                        are not COW, rather than actually testing them.  */
4246               )
4247 #ifndef PERL_ANY_COW
4248              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4249                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4250                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4251                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4252                 but in turn, it's somewhat dead code, never expected to go
4253                 live, but more kept as a placeholder on how to do it better
4254                 in a newer implementation.  */
4255              /* If we are COW and dstr is a suitable target then we drop down
4256                 into the else and make dest a COW of us.  */
4257              || (SvFLAGS(dstr) & SVf_BREAK)
4258 #endif
4259              )
4260             &&
4261             !(isSwipe =
4262 #ifdef PERL_NEW_COPY_ON_WRITE
4263                                 /* slated for free anyway (and not COW)? */
4264                  (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP &&
4265 #else
4266                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4267 #endif
4268                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4269                  (!(flags & SV_NOSTEAL)) &&
4270                                         /* and we're allowed to steal temps */
4271                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4272                  len)             /* and really is a string */
4273 #ifdef PERL_ANY_COW
4274             && ((flags & SV_COW_SHARED_HASH_KEYS)
4275                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4276 # ifdef PERL_OLD_COPY_ON_WRITE
4277                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4278                      && SvTYPE(sstr) >= SVt_PVIV
4279 # else
4280                      && !(SvFLAGS(dstr) & SVf_BREAK)
4281                      && !(sflags & SVf_IsCOW)
4282                      && GE_COW_THRESHOLD(cur) && cur+1 < len
4283                      && (GE_COWBUF_THRESHOLD(cur) || SvLEN(dstr) < cur+1)
4284 # endif
4285                     ))
4286                 : 1)
4287 #endif
4288             ) {
4289             /* Failed the swipe test, and it's not a shared hash key either.
4290                Have to copy the string.  */
4291             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4292             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4293             SvCUR_set(dstr, cur);
4294             *SvEND(dstr) = '\0';
4295         } else {
4296             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4297                be true in here.  */
4298             /* Either it's a shared hash key, or it's suitable for
4299                copy-on-write or we can swipe the string.  */
4300             if (DEBUG_C_TEST) {
4301                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4302                 sv_dump(sstr);
4303                 sv_dump(dstr);
4304             }
4305 #ifdef PERL_ANY_COW
4306             if (!isSwipe) {
4307                 if (!(sflags & SVf_IsCOW)) {
4308                     SvIsCOW_on(sstr);
4309 # ifdef PERL_OLD_COPY_ON_WRITE
4310                     /* Make the source SV into a loop of 1.
4311                        (about to become 2) */
4312                     SV_COW_NEXT_SV_SET(sstr, sstr);
4313 # else
4314                     CowREFCNT(sstr) = 0;
4315 # endif
4316                 }
4317             }
4318 #endif
4319             /* Initial code is common.  */
4320             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4321                 SvPV_free(dstr);
4322             }
4323
4324             if (!isSwipe) {
4325                 /* making another shared SV.  */
4326 #ifdef PERL_ANY_COW
4327                 if (len) {
4328 # ifdef PERL_OLD_COPY_ON_WRITE
4329                     assert (SvTYPE(dstr) >= SVt_PVIV);
4330                     /* SvIsCOW_normal */
4331                     /* splice us in between source and next-after-source.  */
4332                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4333                     SV_COW_NEXT_SV_SET(sstr, dstr);
4334 # else
4335                     CowREFCNT(sstr)++;
4336 # endif
4337                     SvPV_set(dstr, SvPVX_mutable(sstr));
4338                 } else
4339 #endif
4340                 {
4341                     /* SvIsCOW_shared_hash */
4342                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4343                                           "Copy on write: Sharing hash\n"));
4344
4345                     assert (SvTYPE(dstr) >= SVt_PV);
4346                     SvPV_set(dstr,
4347                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4348                 }
4349                 SvLEN_set(dstr, len);
4350                 SvCUR_set(dstr, cur);
4351                 SvIsCOW_on(dstr);
4352             }
4353             else
4354                 {       /* Passes the swipe test.  */
4355                 SvPV_set(dstr, SvPVX_mutable(sstr));
4356                 SvLEN_set(dstr, SvLEN(sstr));
4357                 SvCUR_set(dstr, SvCUR(sstr));
4358
4359                 SvTEMP_off(dstr);
4360                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4361                 SvPV_set(sstr, NULL);
4362                 SvLEN_set(sstr, 0);
4363                 SvCUR_set(sstr, 0);
4364                 SvTEMP_off(sstr);
4365             }
4366         }
4367         if (sflags & SVp_NOK) {
4368             SvNV_set(dstr, SvNVX(sstr));
4369         }
4370         if (sflags & SVp_IOK) {
4371             SvIV_set(dstr, SvIVX(sstr));
4372             /* Must do this otherwise some other overloaded use of 0x80000000
4373                gets confused. I guess SVpbm_VALID */
4374             if (sflags & SVf_IVisUV)
4375                 SvIsUV_on(dstr);
4376         }
4377         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4378         {
4379             const MAGIC * const smg = SvVSTRING_mg(sstr);
4380             if (smg) {
4381                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4382                          smg->mg_ptr, smg->mg_len);
4383                 SvRMAGICAL_on(dstr);
4384             }
4385         }
4386     }
4387     else if (sflags & (SVp_IOK|SVp_NOK)) {
4388         (void)SvOK_off(dstr);
4389         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4390         if (sflags & SVp_IOK) {
4391             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4392             SvIV_set(dstr, SvIVX(sstr));
4393         }
4394         if (sflags & SVp_NOK) {
4395             SvNV_set(dstr, SvNVX(sstr));
4396         }
4397     }
4398     else {
4399         if (isGV_with_GP(sstr)) {
4400             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4401         }
4402         else
4403             (void)SvOK_off(dstr);
4404     }
4405     if (SvTAINTED(sstr))
4406         SvTAINT(dstr);
4407 }
4408
4409 /*
4410 =for apidoc sv_setsv_mg
4411
4412 Like C<sv_setsv>, but also handles 'set' magic.
4413
4414 =cut
4415 */
4416
4417 void
4418 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4419 {
4420     PERL_ARGS_ASSERT_SV_SETSV_MG;
4421
4422     sv_setsv(dstr,sstr);
4423     SvSETMAGIC(dstr);
4424 }
4425
4426 #ifdef PERL_ANY_COW
4427 # ifdef PERL_OLD_COPY_ON_WRITE
4428 #  define SVt_COW SVt_PVIV
4429 # else
4430 #  define SVt_COW SVt_PV
4431 # endif
4432 SV *
4433 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4434 {
4435     STRLEN cur = SvCUR(sstr);
4436     STRLEN len = SvLEN(sstr);
4437     char *new_pv;
4438
4439     PERL_ARGS_ASSERT_SV_SETSV_COW;
4440
4441     if (DEBUG_C_TEST) {
4442         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4443                       (void*)sstr, (void*)dstr);
4444         sv_dump(sstr);
4445         if (dstr)
4446                     sv_dump(dstr);
4447     }
4448
4449     if (dstr) {
4450         if (SvTHINKFIRST(dstr))
4451             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4452         else if (SvPVX_const(dstr))
4453             Safefree(SvPVX_mutable(dstr));
4454     }
4455     else
4456         new_SV(dstr);
4457     SvUPGRADE(dstr, SVt_COW);
4458
4459     assert (SvPOK(sstr));
4460     assert (SvPOKp(sstr));
4461 # ifdef PERL_OLD_COPY_ON_WRITE
4462     assert (!SvIOK(sstr));
4463     assert (!SvIOKp(sstr));
4464     assert (!SvNOK(sstr));
4465     assert (!SvNOKp(sstr));
4466 # endif
4467
4468     if (SvIsCOW(sstr)) {
4469
4470         if (SvLEN(sstr) == 0) {
4471             /* source is a COW shared hash key.  */
4472             DEBUG_C(PerlIO_printf(Perl_debug_log,
4473                                   "Fast copy on write: Sharing hash\n"));
4474             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4475             goto common_exit;
4476         }
4477 # ifdef PERL_OLD_COPY_ON_WRITE
4478         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4479 # else
4480         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4481         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4482 # endif
4483     } else {
4484         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4485         SvUPGRADE(sstr, SVt_COW);
4486         SvIsCOW_on(sstr);
4487         DEBUG_C(PerlIO_printf(Perl_debug_log,
4488                               "Fast copy on write: Converting sstr to COW\n"));
4489 # ifdef PERL_OLD_COPY_ON_WRITE
4490         SV_COW_NEXT_SV_SET(dstr, sstr);
4491 # else
4492         CowREFCNT(sstr) = 0;    
4493 # endif
4494     }
4495 # ifdef PERL_OLD_COPY_ON_WRITE
4496     SV_COW_NEXT_SV_SET(sstr, dstr);
4497 # else
4498     CowREFCNT(sstr)++;  
4499 # endif
4500     new_pv = SvPVX_mutable(sstr);
4501
4502   common_exit:
4503     SvPV_set(dstr, new_pv);
4504     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4505     if (SvUTF8(sstr))
4506         SvUTF8_on(dstr);
4507     SvLEN_set(dstr, len);
4508     SvCUR_set(dstr, cur);
4509     if (DEBUG_C_TEST) {
4510         sv_dump(dstr);
4511     }
4512     return dstr;
4513 }
4514 #endif
4515
4516 /*
4517 =for apidoc sv_setpvn
4518
4519 Copies a string into an SV.  The C<len> parameter indicates the number of
4520 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4521 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4522
4523 =cut
4524 */
4525
4526 void
4527 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4528 {
4529     dVAR;
4530     char *dptr;
4531
4532     PERL_ARGS_ASSERT_SV_SETPVN;
4533
4534     SV_CHECK_THINKFIRST_COW_DROP(sv);
4535     if (!ptr) {
4536         (void)SvOK_off(sv);
4537         return;
4538     }
4539     else {
4540         /* len is STRLEN which is unsigned, need to copy to signed */
4541         const IV iv = len;
4542         if (iv < 0)
4543             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4544                        IVdf, iv);
4545     }
4546     SvUPGRADE(sv, SVt_PV);
4547
4548     dptr = SvGROW(sv, len + 1);
4549     Move(ptr,dptr,len,char);
4550     dptr[len] = '\0';
4551     SvCUR_set(sv, len);
4552     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4553     SvTAINT(sv);
4554     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4555 }
4556
4557 /*
4558 =for apidoc sv_setpvn_mg
4559
4560 Like C<sv_setpvn>, but also handles 'set' magic.
4561
4562 =cut
4563 */
4564
4565 void
4566 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4567 {
4568     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4569
4570     sv_setpvn(sv,ptr,len);
4571     SvSETMAGIC(sv);
4572 }
4573
4574 /*
4575 =for apidoc sv_setpv
4576
4577 Copies a string into an SV.  The string must be null-terminated.  Does not
4578 handle 'set' magic.  See C<sv_setpv_mg>.
4579
4580 =cut
4581 */
4582
4583 void
4584 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4585 {
4586     dVAR;
4587     STRLEN len;
4588
4589     PERL_ARGS_ASSERT_SV_SETPV;
4590
4591     SV_CHECK_THINKFIRST_COW_DROP(sv);
4592     if (!ptr) {
4593         (void)SvOK_off(sv);
4594         return;
4595     }
4596     len = strlen(ptr);
4597     SvUPGRADE(sv, SVt_PV);
4598
4599     SvGROW(sv, len + 1);
4600     Move(ptr,SvPVX(sv),len+1,char);
4601     SvCUR_set(sv, len);
4602     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4603     SvTAINT(sv);
4604     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4605 }
4606
4607 /*
4608 =for apidoc sv_setpv_mg
4609
4610 Like C<sv_setpv>, but also handles 'set' magic.
4611
4612 =cut
4613 */
4614
4615 void
4616 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4617 {
4618     PERL_ARGS_ASSERT_SV_SETPV_MG;
4619
4620     sv_setpv(sv,ptr);
4621     SvSETMAGIC(sv);
4622 }
4623
4624 void
4625 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4626 {
4627     dVAR;
4628
4629     PERL_ARGS_ASSERT_SV_SETHEK;
4630
4631     if (!hek) {
4632         return;
4633     }
4634
4635     if (HEK_LEN(hek) == HEf_SVKEY) {
4636         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4637         return;
4638     } else {
4639         const int flags = HEK_FLAGS(hek);
4640         if (flags & HVhek_WASUTF8) {
4641             STRLEN utf8_len = HEK_LEN(hek);
4642             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4643             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4644             SvUTF8_on(sv);
4645             return;
4646         } else if (flags & HVhek_UNSHARED) {
4647             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4648             if (HEK_UTF8(hek))
4649                 SvUTF8_on(sv);
4650             else SvUTF8_off(sv);
4651             return;
4652         }
4653         {
4654             SV_CHECK_THINKFIRST_COW_DROP(sv);
4655             SvUPGRADE(sv, SVt_PV);
4656             Safefree(SvPVX(sv));
4657             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4658             SvCUR_set(sv, HEK_LEN(hek));
4659             SvLEN_set(sv, 0);
4660             SvIsCOW_on(sv);
4661             SvPOK_on(sv);
4662             if (HEK_UTF8(hek))
4663                 SvUTF8_on(sv);
4664             else SvUTF8_off(sv);
4665             return;
4666         }
4667     }
4668 }
4669
4670
4671 /*
4672 =for apidoc sv_usepvn_flags
4673
4674 Tells an SV to use C<ptr> to find its string value.  Normally the
4675 string is stored inside the SV but sv_usepvn allows the SV to use an
4676 outside string.  The C<ptr> should point to memory that was allocated
4677 by C<malloc>.  It must be the start of a mallocked block
4678 of memory, and not a pointer to the middle of it.  The
4679 string length, C<len>, must be supplied.  By default
4680 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4681 so that pointer should not be freed or used by the programmer after
4682 giving it to sv_usepvn, and neither should any pointers from "behind"
4683 that pointer (e.g. ptr + 1) be used.
4684
4685 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4686 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4687 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4688 C<len>, and already meets the requirements for storing in C<SvPVX>).
4689
4690 =cut
4691 */
4692
4693 void
4694 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4695 {
4696     dVAR;
4697     STRLEN allocate;
4698
4699     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4700
4701     SV_CHECK_THINKFIRST_COW_DROP(sv);
4702     SvUPGRADE(sv, SVt_PV);
4703     if (!ptr) {
4704         (void)SvOK_off(sv);
4705         if (flags & SV_SMAGIC)
4706             SvSETMAGIC(sv);
4707         return;
4708     }
4709     if (SvPVX_const(sv))
4710         SvPV_free(sv);
4711
4712 #ifdef DEBUGGING
4713     if (flags & SV_HAS_TRAILING_NUL)
4714         assert(ptr[len] == '\0');
4715 #endif
4716
4717     allocate = (flags & SV_HAS_TRAILING_NUL)
4718         ? len + 1 :
4719 #ifdef Perl_safesysmalloc_size
4720         len + 1;
4721 #else 
4722         PERL_STRLEN_ROUNDUP(len + 1);
4723 #endif
4724     if (flags & SV_HAS_TRAILING_NUL) {
4725         /* It's long enough - do nothing.
4726            Specifically Perl_newCONSTSUB is relying on this.  */
4727     } else {
4728 #ifdef DEBUGGING
4729         /* Force a move to shake out bugs in callers.  */
4730         char *new_ptr = (char*)safemalloc(allocate);
4731         Copy(ptr, new_ptr, len, char);
4732         PoisonFree(ptr,len,char);
4733         Safefree(ptr);
4734         ptr = new_ptr;
4735 #else
4736         ptr = (char*) saferealloc (ptr, allocate);
4737 #endif
4738     }
4739 #ifdef Perl_safesysmalloc_size
4740     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4741 #else
4742     SvLEN_set(sv, allocate);
4743 #endif
4744     SvCUR_set(sv, len);
4745     SvPV_set(sv, ptr);
4746     if (!(flags & SV_HAS_TRAILING_NUL)) {
4747         ptr[len] = '\0';
4748     }
4749     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4750     SvTAINT(sv);
4751     if (flags & SV_SMAGIC)
4752         SvSETMAGIC(sv);
4753 }
4754
4755 #ifdef PERL_OLD_COPY_ON_WRITE
4756 /* Need to do this *after* making the SV normal, as we need the buffer
4757    pointer to remain valid until after we've copied it.  If we let go too early,
4758    another thread could invalidate it by unsharing last of the same hash key
4759    (which it can do by means other than releasing copy-on-write Svs)
4760    or by changing the other copy-on-write SVs in the loop.  */
4761 STATIC void
4762 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
4763 {
4764     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4765
4766     { /* this SV was SvIsCOW_normal(sv) */
4767          /* we need to find the SV pointing to us.  */
4768         SV *current = SV_COW_NEXT_SV(after);
4769
4770         if (current == sv) {
4771             /* The SV we point to points back to us (there were only two of us
4772                in the loop.)
4773                Hence other SV is no longer copy on write either.  */
4774             SvIsCOW_off(after);
4775         } else {
4776             /* We need to follow the pointers around the loop.  */
4777             SV *next;
4778             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4779                 assert (next);
4780                 current = next;
4781                  /* don't loop forever if the structure is bust, and we have
4782                     a pointer into a closed loop.  */
4783                 assert (current != after);
4784                 assert (SvPVX_const(current) == pvx);
4785             }
4786             /* Make the SV before us point to the SV after us.  */
4787             SV_COW_NEXT_SV_SET(current, after);
4788         }
4789     }
4790 }
4791 #endif
4792 /*
4793 =for apidoc sv_force_normal_flags
4794
4795 Undo various types of fakery on an SV, where fakery means
4796 "more than" a string: if the PV is a shared string, make
4797 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4798 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4799 we do the copy, and is also used locally; if this is a
4800 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
4801 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4802 SvPOK_off rather than making a copy.  (Used where this
4803 scalar is about to be set to some other value.)  In addition,
4804 the C<flags> parameter gets passed to C<sv_unref_flags()>
4805 when unreffing.  C<sv_force_normal> calls this function
4806 with flags set to 0.
4807
4808 =cut
4809 */
4810
4811 void
4812 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
4813 {
4814     dVAR;
4815
4816     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4817
4818 #ifdef PERL_ANY_COW
4819     if (SvREADONLY(sv)) {
4820         if (IN_PERL_RUNTIME)
4821             Perl_croak_no_modify();
4822     }
4823     else if (SvIsCOW(sv)) {
4824         const char * const pvx = SvPVX_const(sv);
4825         const STRLEN len = SvLEN(sv);
4826         const STRLEN cur = SvCUR(sv);
4827 # ifdef PERL_OLD_COPY_ON_WRITE
4828         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4829            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4830            we'll fail an assertion.  */
4831         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4832 # endif
4833
4834         if (DEBUG_C_TEST) {
4835                 PerlIO_printf(Perl_debug_log,
4836                               "Copy on write: Force normal %ld\n",
4837                               (long) flags);
4838                 sv_dump(sv);
4839         }
4840         SvIsCOW_off(sv);
4841 # ifdef PERL_NEW_COPY_ON_WRITE
4842         if (len && CowREFCNT(sv) == 0)
4843             /* We own the buffer ourselves. */
4844             NOOP;
4845         else
4846 # endif
4847         {
4848                 
4849             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4850 # ifdef PERL_NEW_COPY_ON_WRITE
4851             /* Must do this first, since the macro uses SvPVX. */
4852             if (len) CowREFCNT(sv)--;
4853 # endif
4854             SvPV_set(sv, NULL);
4855             SvLEN_set(sv, 0);
4856             if (flags & SV_COW_DROP_PV) {
4857                 /* OK, so we don't need to copy our buffer.  */
4858                 SvPOK_off(sv);
4859             } else {
4860                 SvGROW(sv, cur + 1);
4861                 Move(pvx,SvPVX(sv),cur,char);
4862                 SvCUR_set(sv, cur);
4863                 *SvEND(sv) = '\0';
4864             }
4865             if (len) {
4866 # ifdef PERL_OLD_COPY_ON_WRITE
4867                 sv_release_COW(sv, pvx, next);
4868 # endif
4869             } else {
4870                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4871             }
4872             if (DEBUG_C_TEST) {
4873                 sv_dump(sv);
4874             }
4875         }
4876     }
4877 #else
4878     if (SvREADONLY(sv)) {
4879         if (IN_PERL_RUNTIME)
4880             Perl_croak_no_modify();
4881     }
4882     else
4883         if (SvIsCOW(sv)) {
4884             const char * const pvx = SvPVX_const(sv);
4885             const STRLEN len = SvCUR(sv);
4886             SvIsCOW_off(sv);
4887             SvPV_set(sv, NULL);
4888             SvLEN_set(sv, 0);
4889             if (flags & SV_COW_DROP_PV) {
4890                 /* OK, so we don't need to copy our buffer.  */
4891                 SvPOK_off(sv);
4892             } else {
4893                 SvGROW(sv, len + 1);
4894                 Move(pvx,SvPVX(sv),len,char);
4895                 *SvEND(sv) = '\0';
4896             }
4897             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4898         }
4899 #endif
4900     if (SvROK(sv))
4901         sv_unref_flags(sv, flags);
4902     else if (SvFAKE(sv) && isGV_with_GP(sv))
4903         sv_unglob(sv, flags);
4904     else if (SvFAKE(sv) && isREGEXP(sv)) {
4905         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
4906            to sv_unglob. We only need it here, so inline it.  */
4907         const bool islv = SvTYPE(sv) == SVt_PVLV;
4908         const svtype new_type =
4909           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4910         SV *const temp = newSV_type(new_type);
4911         regexp *const temp_p = ReANY((REGEXP *)sv);
4912
4913         if (new_type == SVt_PVMG) {
4914             SvMAGIC_set(temp, SvMAGIC(sv));
4915             SvMAGIC_set(sv, NULL);
4916             SvSTASH_set(temp, SvSTASH(sv));
4917             SvSTASH_set(sv, NULL);
4918         }
4919         if (!islv) SvCUR_set(temp, SvCUR(sv));
4920         /* Remember that SvPVX is in the head, not the body.  But
4921            RX_WRAPPED is in the body. */
4922         assert(ReANY((REGEXP *)sv)->mother_re);
4923         /* Their buffer is already owned by someone else. */
4924         if (flags & SV_COW_DROP_PV) {
4925             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
4926                zeroed body.  For SVt_PVLV, it should have been set to 0
4927                before turning into a regexp. */
4928             assert(!SvLEN(islv ? sv : temp));
4929             sv->sv_u.svu_pv = 0;
4930         }
4931         else {
4932             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
4933             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
4934             SvPOK_on(sv);
4935         }
4936
4937         /* Now swap the rest of the bodies. */
4938
4939         SvFAKE_off(sv);
4940         if (!islv) {
4941             SvFLAGS(sv) &= ~SVTYPEMASK;
4942             SvFLAGS(sv) |= new_type;
4943             SvANY(sv) = SvANY(temp);
4944         }
4945
4946         SvFLAGS(temp) &= ~(SVTYPEMASK);
4947         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4948         SvANY(temp) = temp_p;
4949         temp->sv_u.svu_rx = (regexp *)temp_p;
4950
4951         SvREFCNT_dec_NN(temp);
4952     }
4953     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
4954 }
4955
4956 /*
4957 =for apidoc sv_chop
4958
4959 Efficient removal of characters from the beginning of the string buffer.
4960 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
4961 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
4962 character of the adjusted string.  Uses the "OOK hack".  On return, only
4963 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
4964
4965 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4966 refer to the same chunk of data.
4967
4968 The unfortunate similarity of this function's name to that of Perl's C<chop>
4969 operator is strictly coincidental.  This function works from the left;
4970 C<chop> works from the right.
4971
4972 =cut
4973 */
4974
4975 void
4976 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
4977 {
4978     STRLEN delta;
4979     STRLEN old_delta;
4980     U8 *p;
4981 #ifdef DEBUGGING
4982     const U8 *evacp;
4983     STRLEN evacn;
4984 #endif
4985     STRLEN max_delta;
4986
4987     PERL_ARGS_ASSERT_SV_CHOP;
4988
4989     if (!ptr || !SvPOKp(sv))
4990         return;
4991     delta = ptr - SvPVX_const(sv);
4992     if (!delta) {
4993         /* Nothing to do.  */
4994         return;
4995     }
4996     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4997     if (delta > max_delta)
4998         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4999                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5000     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5001     SV_CHECK_THINKFIRST(sv);
5002     SvPOK_only_UTF8(sv);
5003
5004     if (!SvOOK(sv)) {
5005         if (!SvLEN(sv)) { /* make copy of shared string */
5006             const char *pvx = SvPVX_const(sv);
5007             const STRLEN len = SvCUR(sv);
5008             SvGROW(sv, len + 1);
5009             Move(pvx,SvPVX(sv),len,char);
5010             *SvEND(sv) = '\0';
5011         }
5012         SvOOK_on(sv);
5013         old_delta = 0;
5014     } else {
5015         SvOOK_offset(sv, old_delta);
5016     }
5017     SvLEN_set(sv, SvLEN(sv) - delta);
5018     SvCUR_set(sv, SvCUR(sv) - delta);
5019     SvPV_set(sv, SvPVX(sv) + delta);
5020
5021     p = (U8 *)SvPVX_const(sv);
5022
5023 #ifdef DEBUGGING
5024     /* how many bytes were evacuated?  we will fill them with sentinel
5025        bytes, except for the part holding the new offset of course. */
5026     evacn = delta;
5027     if (old_delta)
5028         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5029     assert(evacn);
5030     assert(evacn <= delta + old_delta);
5031     evacp = p - evacn;
5032 #endif
5033
5034     delta += old_delta;
5035     assert(delta);
5036     if (delta < 0x100) {
5037         *--p = (U8) delta;
5038     } else {
5039         *--p = 0;
5040         p -= sizeof(STRLEN);
5041         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5042     }
5043
5044 #ifdef DEBUGGING
5045     /* Fill the preceding buffer with sentinals to verify that no-one is
5046        using it.  */
5047     while (p > evacp) {
5048         --p;
5049         *p = (U8)PTR2UV(p);
5050     }
5051 #endif
5052 }
5053
5054 /*
5055 =for apidoc sv_catpvn
5056
5057 Concatenates the string onto the end of the string which is in the SV.  The
5058 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5059 status set, then the bytes appended should be valid UTF-8.
5060 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5061
5062 =for apidoc sv_catpvn_flags
5063
5064 Concatenates the string onto the end of the string which is in the SV.  The
5065 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5066 status set, then the bytes appended should be valid UTF-8.
5067 If C<flags> has the C<SV_SMAGIC> bit set, will
5068 C<mg_set> on C<dsv> afterwards if appropriate.
5069 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5070 in terms of this function.
5071
5072 =cut
5073 */
5074
5075 void
5076 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5077 {
5078     dVAR;
5079     STRLEN dlen;
5080     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5081
5082     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5083     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5084
5085     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5086       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5087          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5088          dlen = SvCUR(dsv);
5089       }
5090       else SvGROW(dsv, dlen + slen + 1);
5091       if (sstr == dstr)
5092         sstr = SvPVX_const(dsv);
5093       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5094       SvCUR_set(dsv, SvCUR(dsv) + slen);
5095     }
5096     else {
5097         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5098         const char * const send = sstr + slen;
5099         U8 *d;
5100
5101         /* Something this code does not account for, which I think is
5102            impossible; it would require the same pv to be treated as
5103            bytes *and* utf8, which would indicate a bug elsewhere. */
5104         assert(sstr != dstr);
5105
5106         SvGROW(dsv, dlen + slen * 2 + 1);
5107         d = (U8 *)SvPVX(dsv) + dlen;
5108
5109         while (sstr < send) {
5110             const UV uv = NATIVE_TO_ASCII((U8)*sstr++);
5111             if (UNI_IS_INVARIANT(uv))
5112                 *d++ = (U8)UTF_TO_NATIVE(uv);
5113             else {
5114                 *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
5115                 *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
5116             }
5117         }
5118         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5119     }
5120     *SvEND(dsv) = '\0';
5121     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5122     SvTAINT(dsv);
5123     if (flags & SV_SMAGIC)
5124         SvSETMAGIC(dsv);
5125 }
5126
5127 /*
5128 =for apidoc sv_catsv
5129
5130 Concatenates the string from SV C<ssv> onto the end of the string in SV
5131 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5132 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5133 C<sv_catsv_nomg>.
5134
5135 =for apidoc sv_catsv_flags
5136
5137 Concatenates the string from SV C<ssv> onto the end of the string in SV
5138 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5139 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5140 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5141 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5142 and C<sv_catsv_mg> are implemented in terms of this function.
5143
5144 =cut */
5145
5146 void
5147 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5148 {
5149     dVAR;
5150  
5151     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5152
5153     if (ssv) {
5154         STRLEN slen;
5155         const char *spv = SvPV_flags_const(ssv, slen, flags);
5156         if (spv) {
5157             if (flags & SV_GMAGIC)
5158                 SvGETMAGIC(dsv);
5159             sv_catpvn_flags(dsv, spv, slen,
5160                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5161             if (flags & SV_SMAGIC)
5162                 SvSETMAGIC(dsv);
5163         }
5164     }
5165 }
5166
5167 /*
5168 =for apidoc sv_catpv
5169
5170 Concatenates the string onto the end of the string which is in the SV.
5171 If the SV has the UTF-8 status set, then the bytes appended should be
5172 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5173
5174 =cut */
5175
5176 void
5177 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5178 {
5179     dVAR;
5180     STRLEN len;
5181     STRLEN tlen;
5182     char *junk;
5183
5184     PERL_ARGS_ASSERT_SV_CATPV;
5185
5186     if (!ptr)
5187         return;
5188     junk = SvPV_force(sv, tlen);
5189     len = strlen(ptr);
5190     SvGROW(sv, tlen + len + 1);
5191     if (ptr == junk)
5192         ptr = SvPVX_const(sv);
5193     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5194     SvCUR_set(sv, SvCUR(sv) + len);
5195     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5196     SvTAINT(sv);
5197 }
5198
5199 /*
5200 =for apidoc sv_catpv_flags
5201
5202 Concatenates the string onto the end of the string which is in the SV.
5203 If the SV has the UTF-8 status set, then the bytes appended should
5204 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5205 on the modified SV if appropriate.
5206
5207 =cut
5208 */
5209
5210 void
5211 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5212 {
5213     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5214     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5215 }
5216
5217 /*
5218 =for apidoc sv_catpv_mg
5219
5220 Like C<sv_catpv>, but also handles 'set' magic.
5221
5222 =cut
5223 */
5224
5225 void
5226 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5227 {
5228     PERL_ARGS_ASSERT_SV_CATPV_MG;
5229
5230     sv_catpv(sv,ptr);
5231     SvSETMAGIC(sv);
5232 }
5233
5234 /*
5235 =for apidoc newSV
5236
5237 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5238 bytes of preallocated string space the SV should have.  An extra byte for a
5239 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
5240 space is allocated.)  The reference count for the new SV is set to 1.
5241
5242 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5243 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5244 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5245 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5246 modules supporting older perls.
5247
5248 =cut
5249 */
5250
5251 SV *
5252 Perl_newSV(pTHX_ const STRLEN len)
5253 {
5254     dVAR;
5255     SV *sv;
5256
5257     new_SV(sv);
5258     if (len) {
5259         sv_upgrade(sv, SVt_PV);
5260         SvGROW(sv, len + 1);
5261     }
5262     return sv;
5263 }
5264 /*
5265 =for apidoc sv_magicext
5266
5267 Adds magic to an SV, upgrading it if necessary.  Applies the
5268 supplied vtable and returns a pointer to the magic added.
5269
5270 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5271 In particular, you can add magic to SvREADONLY SVs, and add more than
5272 one instance of the same 'how'.
5273
5274 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5275 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5276 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5277 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5278
5279 (This is now used as a subroutine by C<sv_magic>.)
5280
5281 =cut
5282 */
5283 MAGIC * 
5284 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5285                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5286 {
5287     dVAR;
5288     MAGIC* mg;
5289
5290     PERL_ARGS_ASSERT_SV_MAGICEXT;
5291
5292     SvUPGRADE(sv, SVt_PVMG);
5293     Newxz(mg, 1, MAGIC);
5294     mg->mg_moremagic = SvMAGIC(sv);
5295     SvMAGIC_set(sv, mg);
5296
5297     /* Sometimes a magic contains a reference loop, where the sv and
5298        object refer to each other.  To prevent a reference loop that
5299        would prevent such objects being freed, we look for such loops
5300        and if we find one we avoid incrementing the object refcount.
5301
5302        Note we cannot do this to avoid self-tie loops as intervening RV must
5303        have its REFCNT incremented to keep it in existence.
5304
5305     */
5306     if (!obj || obj == sv ||
5307         how == PERL_MAGIC_arylen ||
5308         how == PERL_MAGIC_symtab ||
5309         (SvTYPE(obj) == SVt_PVGV &&
5310             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5311              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5312              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5313     {
5314         mg->mg_obj = obj;
5315     }
5316     else {
5317         mg->mg_obj = SvREFCNT_inc_simple(obj);
5318         mg->mg_flags |= MGf_REFCOUNTED;
5319     }
5320
5321     /* Normal self-ties simply pass a null object, and instead of
5322        using mg_obj directly, use the SvTIED_obj macro to produce a
5323        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5324        with an RV obj pointing to the glob containing the PVIO.  In
5325        this case, to avoid a reference loop, we need to weaken the
5326        reference.
5327     */
5328
5329     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5330         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5331     {
5332       sv_rvweaken(obj);
5333     }
5334
5335     mg->mg_type = how;
5336     mg->mg_len = namlen;
5337     if (name) {
5338         if (namlen > 0)
5339             mg->mg_ptr = savepvn(name, namlen);
5340         else if (namlen == HEf_SVKEY) {
5341             /* Yes, this is casting away const. This is only for the case of
5342                HEf_SVKEY. I think we need to document this aberation of the
5343                constness of the API, rather than making name non-const, as
5344                that change propagating outwards a long way.  */
5345             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5346         } else
5347             mg->mg_ptr = (char *) name;
5348     }
5349     mg->mg_virtual = (MGVTBL *) vtable;
5350
5351     mg_magical(sv);
5352     return mg;
5353 }
5354
5355 /*
5356 =for apidoc sv_magic
5357
5358 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5359 necessary, then adds a new magic item of type C<how> to the head of the
5360 magic list.
5361
5362 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5363 handling of the C<name> and C<namlen> arguments.
5364
5365 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5366 to add more than one instance of the same 'how'.
5367
5368 =cut
5369 */
5370
5371 void
5372 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5373              const char *const name, const I32 namlen)
5374 {
5375     dVAR;
5376     const MGVTBL *vtable;
5377     MAGIC* mg;
5378     unsigned int flags;
5379     unsigned int vtable_index;
5380
5381     PERL_ARGS_ASSERT_SV_MAGIC;
5382
5383     if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
5384         || ((flags = PL_magic_data[how]),
5385             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5386             > magic_vtable_max))
5387         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5388
5389     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5390        Useful for attaching extension internal data to perl vars.
5391        Note that multiple extensions may clash if magical scalars
5392        etc holding private data from one are passed to another. */
5393
5394     vtable = (vtable_index == magic_vtable_max)
5395         ? NULL : PL_magic_vtables + vtable_index;
5396
5397 #ifdef PERL_ANY_COW
5398     if (SvIsCOW(sv))
5399         sv_force_normal_flags(sv, 0);
5400 #endif
5401     if (SvREADONLY(sv)) {
5402         if (
5403             /* its okay to attach magic to shared strings */
5404             !SvIsCOW(sv)
5405
5406             && IN_PERL_RUNTIME
5407             && !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5408            )
5409         {
5410             Perl_croak_no_modify();
5411         }
5412     }
5413     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5414         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5415             /* sv_magic() refuses to add a magic of the same 'how' as an
5416                existing one
5417              */
5418             if (how == PERL_MAGIC_taint)
5419                 mg->mg_len |= 1;
5420             return;
5421         }
5422     }
5423
5424     /* Rest of work is done else where */
5425     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5426
5427     switch (how) {
5428     case PERL_MAGIC_taint:
5429         mg->mg_len = 1;
5430         break;
5431     case PERL_MAGIC_ext:
5432     case PERL_MAGIC_dbfile:
5433         SvRMAGICAL_on(sv);
5434         break;
5435     }
5436 }
5437
5438 static int
5439 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5440 {
5441     MAGIC* mg;
5442     MAGIC** mgp;
5443
5444     assert(flags <= 1);
5445
5446     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5447         return 0;
5448     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5449     for (mg = *mgp; mg; mg = *mgp) {
5450         const MGVTBL* const virt = mg->mg_virtual;
5451         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5452             *mgp = mg->mg_moremagic;
5453             if (virt && virt->svt_free)
5454                 virt->svt_free(aTHX_ sv, mg);
5455             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5456                 if (mg->mg_len > 0)
5457                     Safefree(mg->mg_ptr);
5458                 else if (mg->mg_len == HEf_SVKEY)
5459                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5460                 else if (mg->mg_type == PERL_MAGIC_utf8)
5461                     Safefree(mg->mg_ptr);
5462             }
5463             if (mg->mg_flags & MGf_REFCOUNTED)
5464                 SvREFCNT_dec(mg->mg_obj);
5465             Safefree(mg);
5466         }
5467         else
5468             mgp = &mg->mg_moremagic;
5469     }
5470     if (SvMAGIC(sv)) {
5471         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5472             mg_magical(sv);     /*    else fix the flags now */
5473     }
5474     else {
5475         SvMAGICAL_off(sv);
5476         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5477     }
5478     return 0;
5479 }
5480
5481 /*
5482 =for apidoc sv_unmagic
5483
5484 Removes all magic of type C<type> from an SV.
5485
5486 =cut
5487 */
5488
5489 int
5490 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5491 {
5492     PERL_ARGS_ASSERT_SV_UNMAGIC;
5493     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5494 }
5495
5496 /*
5497 =for apidoc sv_unmagicext
5498
5499 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5500
5501 =cut
5502 */
5503
5504 int
5505 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5506 {
5507     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5508     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5509 }
5510
5511 /*
5512 =for apidoc sv_rvweaken
5513
5514 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5515 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5516 push a back-reference to this RV onto the array of backreferences
5517 associated with that magic.  If the RV is magical, set magic will be
5518 called after the RV is cleared.
5519
5520 =cut
5521 */
5522
5523 SV *
5524 Perl_sv_rvweaken(pTHX_ SV *const sv)
5525 {
5526     SV *tsv;
5527
5528     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5529
5530     if (!SvOK(sv))  /* let undefs pass */
5531         return sv;
5532     if (!SvROK(sv))
5533         Perl_croak(aTHX_ "Can't weaken a nonreference");
5534     else if (SvWEAKREF(sv)) {
5535         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5536         return sv;
5537     }
5538     else if (SvREADONLY(sv)) croak_no_modify();
5539     tsv = SvRV(sv);
5540     Perl_sv_add_backref(aTHX_ tsv, sv);
5541     SvWEAKREF_on(sv);
5542     SvREFCNT_dec_NN(tsv);
5543     return sv;
5544 }
5545
5546 /* Give tsv backref magic if it hasn't already got it, then push a
5547  * back-reference to sv onto the array associated with the backref magic.
5548  *
5549  * As an optimisation, if there's only one backref and it's not an AV,
5550  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5551  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5552  * active.)
5553  */
5554
5555 /* A discussion about the backreferences array and its refcount:
5556  *
5557  * The AV holding the backreferences is pointed to either as the mg_obj of
5558  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5559  * xhv_backreferences field. The array is created with a refcount
5560  * of 2. This means that if during global destruction the array gets
5561  * picked on before its parent to have its refcount decremented by the
5562  * random zapper, it won't actually be freed, meaning it's still there for
5563  * when its parent gets freed.
5564  *
5565  * When the parent SV is freed, the extra ref is killed by
5566  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5567  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5568  *
5569  * When a single backref SV is stored directly, it is not reference
5570  * counted.
5571  */
5572
5573 void
5574 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5575 {
5576     dVAR;
5577     SV **svp;
5578     AV *av = NULL;
5579     MAGIC *mg = NULL;
5580
5581     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5582
5583     /* find slot to store array or singleton backref */
5584
5585     if (SvTYPE(tsv) == SVt_PVHV) {
5586         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5587     } else {
5588         if (! ((mg =
5589             (SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL))))
5590         {
5591             sv_magic(tsv, NULL, PERL_MAGIC_backref, NULL, 0);
5592             mg = mg_find(tsv, PERL_MAGIC_backref);
5593         }
5594         svp = &(mg->mg_obj);
5595     }
5596
5597     /* create or retrieve the array */
5598
5599     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5600         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5601     ) {
5602         /* create array */
5603         av = newAV();
5604         AvREAL_off(av);
5605         SvREFCNT_inc_simple_void(av);
5606         /* av now has a refcnt of 2; see discussion above */
5607         if (*svp) {
5608             /* move single existing backref to the array */
5609             av_extend(av, 1);
5610             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5611         }
5612         *svp = (SV*)av;
5613         if (mg)
5614             mg->mg_flags |= MGf_REFCOUNTED;
5615     }
5616     else
5617         av = MUTABLE_AV(*svp);
5618
5619     if (!av) {
5620         /* optimisation: store single backref directly in HvAUX or mg_obj */
5621         *svp = sv;
5622         return;
5623     }
5624     /* push new backref */
5625     assert(SvTYPE(av) == SVt_PVAV);
5626     if (AvFILLp(av) >= AvMAX(av)) {
5627         av_extend(av, AvFILLp(av)+1);
5628     }
5629     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5630 }
5631
5632 /* delete a back-reference to ourselves from the backref magic associated
5633  * with the SV we point to.
5634  */
5635
5636 void
5637 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5638 {
5639     dVAR;
5640     SV **svp = NULL;
5641
5642     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5643
5644     if (SvTYPE(tsv) == SVt_PVHV) {
5645         if (SvOOK(tsv))
5646             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5647     }
5648     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5649         /* It's possible for the the last (strong) reference to tsv to have
5650            become freed *before* the last thing holding a weak reference.
5651            If both survive longer than the backreferences array, then when
5652            the referent's reference count drops to 0 and it is freed, it's
5653            not able to chase the backreferences, so they aren't NULLed.
5654
5655            For example, a CV holds a weak reference to its stash. If both the
5656            CV and the stash survive longer than the backreferences array,
5657            and the CV gets picked for the SvBREAK() treatment first,
5658            *and* it turns out that the stash is only being kept alive because
5659            of an our variable in the pad of the CV, then midway during CV
5660            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5661            It ends up pointing to the freed HV. Hence it's chased in here, and
5662            if this block wasn't here, it would hit the !svp panic just below.
5663
5664            I don't believe that "better" destruction ordering is going to help
5665            here - during global destruction there's always going to be the
5666            chance that something goes out of order. We've tried to make it
5667            foolproof before, and it only resulted in evolutionary pressure on
5668            fools. Which made us look foolish for our hubris. :-(
5669         */
5670         return;
5671     }
5672     else {
5673         MAGIC *const mg
5674             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5675         svp =  mg ? &(mg->mg_obj) : NULL;
5676     }
5677
5678     if (!svp)
5679         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5680     if (!*svp) {
5681         /* It's possible that sv is being freed recursively part way through the
5682            freeing of tsv. If this happens, the backreferences array of tsv has
5683            already been freed, and so svp will be NULL. If this is the case,
5684            we should not panic. Instead, nothing needs doing, so return.  */
5685         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
5686             return;
5687         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
5688                    *svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
5689     }
5690
5691     if (SvTYPE(*svp) == SVt_PVAV) {
5692 #ifdef DEBUGGING
5693         int count = 1;
5694 #endif
5695         AV * const av = (AV*)*svp;
5696         SSize_t fill;
5697         assert(!SvIS_FREED(av));
5698         fill = AvFILLp(av);
5699         assert(fill > -1);
5700         svp = AvARRAY(av);
5701         /* for an SV with N weak references to it, if all those
5702          * weak refs are deleted, then sv_del_backref will be called
5703          * N times and O(N^2) compares will be done within the backref
5704          * array. To ameliorate this potential slowness, we:
5705          * 1) make sure this code is as tight as possible;
5706          * 2) when looking for SV, look for it at both the head and tail of the
5707          *    array first before searching the rest, since some create/destroy
5708          *    patterns will cause the backrefs to be freed in order.
5709          */
5710         if (*svp == sv) {
5711             AvARRAY(av)++;
5712             AvMAX(av)--;
5713         }
5714         else {
5715             SV **p = &svp[fill];
5716             SV *const topsv = *p;
5717             if (topsv != sv) {
5718 #ifdef DEBUGGING
5719                 count = 0;
5720 #endif
5721                 while (--p > svp) {
5722                     if (*p == sv) {
5723                         /* We weren't the last entry.
5724                            An unordered list has this property that you
5725                            can take the last element off the end to fill
5726                            the hole, and it's still an unordered list :-)
5727                         */
5728                         *p = topsv;
5729 #ifdef DEBUGGING
5730                         count++;
5731 #else
5732                         break; /* should only be one */
5733 #endif
5734                     }
5735                 }
5736             }
5737         }
5738         assert(count ==1);
5739         AvFILLp(av) = fill-1;
5740     }
5741     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
5742         /* freed AV; skip */
5743     }
5744     else {
5745         /* optimisation: only a single backref, stored directly */
5746         if (*svp != sv)
5747             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p", *svp, sv);
5748         *svp = NULL;
5749     }
5750
5751 }
5752
5753 void
5754 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5755 {
5756     SV **svp;
5757     SV **last;
5758     bool is_array;
5759
5760     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5761
5762     if (!av)
5763         return;
5764
5765     /* after multiple passes through Perl_sv_clean_all() for a thingy
5766      * that has badly leaked, the backref array may have gotten freed,
5767      * since we only protect it against 1 round of cleanup */
5768     if (SvIS_FREED(av)) {
5769         if (PL_in_clean_all) /* All is fair */
5770             return;
5771         Perl_croak(aTHX_
5772                    "panic: magic_killbackrefs (freed backref AV/SV)");
5773     }
5774
5775
5776     is_array = (SvTYPE(av) == SVt_PVAV);
5777     if (is_array) {
5778         assert(!SvIS_FREED(av));
5779         svp = AvARRAY(av);
5780         if (svp)
5781             last = svp + AvFILLp(av);
5782     }
5783     else {
5784         /* optimisation: only a single backref, stored directly */
5785         svp = (SV**)&av;
5786         last = svp;
5787     }
5788
5789     if (svp) {
5790         while (svp <= last) {
5791             if (*svp) {
5792                 SV *const referrer = *svp;
5793                 if (SvWEAKREF(referrer)) {
5794                     /* XXX Should we check that it hasn't changed? */
5795                     assert(SvROK(referrer));
5796                     SvRV_set(referrer, 0);
5797                     SvOK_off(referrer);
5798                     SvWEAKREF_off(referrer);
5799                     SvSETMAGIC(referrer);
5800                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5801                            SvTYPE(referrer) == SVt_PVLV) {
5802                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
5803                     /* You lookin' at me?  */
5804                     assert(GvSTASH(referrer));
5805                     assert(GvSTASH(referrer) == (const HV *)sv);
5806                     GvSTASH(referrer) = 0;
5807                 } else if (SvTYPE(referrer) == SVt_PVCV ||
5808                            SvTYPE(referrer) == SVt_PVFM) {
5809                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
5810                         /* You lookin' at me?  */
5811                         assert(CvSTASH(referrer));
5812                         assert(CvSTASH(referrer) == (const HV *)sv);
5813                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
5814                     }
5815                     else {
5816                         assert(SvTYPE(sv) == SVt_PVGV);
5817                         /* You lookin' at me?  */
5818                         assert(CvGV(referrer));
5819                         assert(CvGV(referrer) == (const GV *)sv);
5820                         anonymise_cv_maybe(MUTABLE_GV(sv),
5821                                                 MUTABLE_CV(referrer));
5822                     }
5823
5824                 } else {
5825                     Perl_croak(aTHX_
5826                                "panic: magic_killbackrefs (flags=%"UVxf")",
5827                                (UV)SvFLAGS(referrer));
5828                 }
5829
5830                 if (is_array)
5831                     *svp = NULL;
5832             }
5833             svp++;
5834         }
5835     }
5836     if (is_array) {
5837         AvFILLp(av) = -1;
5838         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
5839     }
5840     return;
5841 }
5842
5843 /*
5844 =for apidoc sv_insert
5845
5846 Inserts a string at the specified offset/length within the SV.  Similar to
5847 the Perl substr() function.  Handles get magic.
5848
5849 =for apidoc sv_insert_flags
5850
5851 Same as C<sv_insert>, but the extra C<flags> are passed to the
5852 C<SvPV_force_flags> that applies to C<bigstr>.
5853
5854 =cut
5855 */
5856
5857 void
5858 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5859 {
5860     dVAR;
5861     char *big;
5862     char *mid;
5863     char *midend;
5864     char *bigend;
5865     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
5866     STRLEN curlen;
5867
5868     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5869
5870     if (!bigstr)
5871         Perl_croak(aTHX_ "Can't modify nonexistent substring");
5872     SvPV_force_flags(bigstr, curlen, flags);
5873     (void)SvPOK_only_UTF8(bigstr);
5874     if (offset + len > curlen) {
5875         SvGROW(bigstr, offset+len+1);
5876         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5877         SvCUR_set(bigstr, offset+len);
5878     }
5879
5880     SvTAINT(bigstr);
5881     i = littlelen - len;
5882     if (i > 0) {                        /* string might grow */
5883         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5884         mid = big + offset + len;
5885         midend = bigend = big + SvCUR(bigstr);
5886         bigend += i;
5887         *bigend = '\0';
5888         while (midend > mid)            /* shove everything down */
5889             *--bigend = *--midend;
5890         Move(little,big+offset,littlelen,char);
5891         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5892         SvSETMAGIC(bigstr);
5893         return;
5894     }
5895     else if (i == 0) {
5896         Move(little,SvPVX(bigstr)+offset,len,char);
5897         SvSETMAGIC(bigstr);
5898         return;
5899     }
5900
5901     big = SvPVX(bigstr);
5902     mid = big + offset;
5903     midend = mid + len;
5904     bigend = big + SvCUR(bigstr);
5905
5906     if (midend > bigend)
5907         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
5908                    midend, bigend);
5909
5910     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5911         if (littlelen) {
5912             Move(little, mid, littlelen,char);
5913             mid += littlelen;
5914         }
5915         i = bigend - midend;
5916         if (i > 0) {
5917             Move(midend, mid, i,char);
5918             mid += i;
5919         }
5920         *mid = '\0';
5921         SvCUR_set(bigstr, mid - big);
5922     }
5923     else if ((i = mid - big)) { /* faster from front */
5924         midend -= littlelen;
5925         mid = midend;
5926         Move(big, midend - i, i, char);
5927         sv_chop(bigstr,midend-i);
5928         if (littlelen)
5929             Move(little, mid, littlelen,char);
5930     }
5931     else if (littlelen) {
5932         midend -= littlelen;
5933         sv_chop(bigstr,midend);
5934         Move(little,midend,littlelen,char);
5935     }
5936     else {
5937         sv_chop(bigstr,midend);
5938     }
5939     SvSETMAGIC(bigstr);
5940 }
5941
5942 /*
5943 =for apidoc sv_replace
5944
5945 Make the first argument a copy of the second, then delete the original.
5946 The target SV physically takes over ownership of the body of the source SV
5947 and inherits its flags; however, the target keeps any magic it owns,
5948 and any magic in the source is discarded.
5949 Note that this is a rather specialist SV copying operation; most of the
5950 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5951
5952 =cut
5953 */
5954
5955 void
5956 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
5957 {
5958     dVAR;
5959     const U32 refcnt = SvREFCNT(sv);
5960
5961     PERL_ARGS_ASSERT_SV_REPLACE;
5962
5963     SV_CHECK_THINKFIRST_COW_DROP(sv);
5964     if (SvREFCNT(nsv) != 1) {
5965         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5966                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5967     }
5968     if (SvMAGICAL(sv)) {
5969         if (SvMAGICAL(nsv))
5970             mg_free(nsv);
5971         else
5972             sv_upgrade(nsv, SVt_PVMG);
5973         SvMAGIC_set(nsv, SvMAGIC(sv));
5974         SvFLAGS(nsv) |= SvMAGICAL(sv);
5975         SvMAGICAL_off(sv);
5976         SvMAGIC_set(sv, NULL);
5977     }
5978     SvREFCNT(sv) = 0;
5979     sv_clear(sv);
5980     assert(!SvREFCNT(sv));
5981 #ifdef DEBUG_LEAKING_SCALARS
5982     sv->sv_flags  = nsv->sv_flags;
5983     sv->sv_any    = nsv->sv_any;
5984     sv->sv_refcnt = nsv->sv_refcnt;
5985     sv->sv_u      = nsv->sv_u;
5986 #else
5987     StructCopy(nsv,sv,SV);
5988 #endif
5989     if(SvTYPE(sv) == SVt_IV) {
5990         SvANY(sv)
5991             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5992     }
5993         
5994
5995 #ifdef PERL_OLD_COPY_ON_WRITE
5996     if (SvIsCOW_normal(nsv)) {
5997         /* We need to follow the pointers around the loop to make the
5998            previous SV point to sv, rather than nsv.  */
5999         SV *next;
6000         SV *current = nsv;
6001         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6002             assert(next);
6003             current = next;
6004             assert(SvPVX_const(current) == SvPVX_const(nsv));
6005         }
6006         /* Make the SV before us point to the SV after us.  */
6007         if (DEBUG_C_TEST) {
6008             PerlIO_printf(Perl_debug_log, "previous is\n");
6009             sv_dump(current);
6010             PerlIO_printf(Perl_debug_log,
6011                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6012                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6013         }
6014         SV_COW_NEXT_SV_SET(current, sv);
6015     }
6016 #endif
6017     SvREFCNT(sv) = refcnt;
6018     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6019     SvREFCNT(nsv) = 0;
6020     del_SV(nsv);
6021 }
6022
6023 /* We're about to free a GV which has a CV that refers back to us.
6024  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6025  * field) */
6026
6027 STATIC void
6028 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6029 {
6030     SV *gvname;
6031     GV *anongv;
6032
6033     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6034
6035     /* be assertive! */
6036     assert(SvREFCNT(gv) == 0);
6037     assert(isGV(gv) && isGV_with_GP(gv));
6038     assert(GvGP(gv));
6039     assert(!CvANON(cv));
6040     assert(CvGV(cv) == gv);
6041     assert(!CvNAMED(cv));
6042
6043     /* will the CV shortly be freed by gp_free() ? */
6044     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6045         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6046         return;
6047     }
6048
6049     /* if not, anonymise: */
6050     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6051                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6052                     : newSVpvn_flags( "__ANON__", 8, 0 );
6053     sv_catpvs(gvname, "::__ANON__");
6054     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6055     SvREFCNT_dec_NN(gvname);
6056
6057     CvANON_on(cv);
6058     CvCVGV_RC_on(cv);
6059     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6060 }
6061
6062
6063 /*
6064 =for apidoc sv_clear
6065
6066 Clear an SV: call any destructors, free up any memory used by the body,
6067 and free the body itself.  The SV's head is I<not> freed, although
6068 its type is set to all 1's so that it won't inadvertently be assumed
6069 to be live during global destruction etc.
6070 This function should only be called when REFCNT is zero.  Most of the time
6071 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6072 instead.
6073
6074 =cut
6075 */
6076
6077 void
6078 Perl_sv_clear(pTHX_ SV *const orig_sv)
6079 {
6080     dVAR;
6081     HV *stash;
6082     U32 type;
6083     const struct body_details *sv_type_details;
6084     SV* iter_sv = NULL;
6085     SV* next_sv = NULL;
6086     SV *sv = orig_sv;
6087     STRLEN hash_index;
6088
6089     PERL_ARGS_ASSERT_SV_CLEAR;
6090
6091     /* within this loop, sv is the SV currently being freed, and
6092      * iter_sv is the most recent AV or whatever that's being iterated
6093      * over to provide more SVs */
6094
6095     while (sv) {
6096
6097         type = SvTYPE(sv);
6098
6099         assert(SvREFCNT(sv) == 0);
6100         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6101
6102         if (type <= SVt_IV) {
6103             /* See the comment in sv.h about the collusion between this
6104              * early return and the overloading of the NULL slots in the
6105              * size table.  */
6106             if (SvROK(sv))
6107                 goto free_rv;
6108             SvFLAGS(sv) &= SVf_BREAK;
6109             SvFLAGS(sv) |= SVTYPEMASK;
6110             goto free_head;
6111         }
6112
6113         assert(!SvOBJECT(sv) || type >= SVt_PVMG); /* objs are always >= MG */
6114
6115         if (type >= SVt_PVMG) {
6116             if (SvOBJECT(sv)) {
6117                 if (!curse(sv, 1)) goto get_next_sv;
6118                 type = SvTYPE(sv); /* destructor may have changed it */
6119             }
6120             /* Free back-references before magic, in case the magic calls
6121              * Perl code that has weak references to sv. */
6122             if (type == SVt_PVHV) {
6123                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6124                 if (SvMAGIC(sv))
6125                     mg_free(sv);
6126             }
6127             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6128                 SvREFCNT_dec(SvOURSTASH(sv));
6129             } else if (SvMAGIC(sv)) {
6130                 /* Free back-references before other types of magic. */
6131                 sv_unmagic(sv, PERL_MAGIC_backref);
6132                 mg_free(sv);
6133             }
6134             SvMAGICAL_off(sv);
6135             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6136                 SvREFCNT_dec(SvSTASH(sv));
6137         }
6138         switch (type) {
6139             /* case SVt_BIND: */
6140         case SVt_PVIO:
6141             if (IoIFP(sv) &&
6142                 IoIFP(sv) != PerlIO_stdin() &&
6143                 IoIFP(sv) != PerlIO_stdout() &&
6144                 IoIFP(sv) != PerlIO_stderr() &&
6145                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6146             {
6147                 io_close(MUTABLE_IO(sv), FALSE);
6148             }
6149             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6150                 PerlDir_close(IoDIRP(sv));
6151             IoDIRP(sv) = (DIR*)NULL;
6152             Safefree(IoTOP_NAME(sv));
6153             Safefree(IoFMT_NAME(sv));
6154             Safefree(IoBOTTOM_NAME(sv));
6155             if ((const GV *)sv == PL_statgv)
6156                 PL_statgv = NULL;
6157             goto freescalar;
6158         case SVt_REGEXP:
6159             /* FIXME for plugins */
6160           freeregexp:
6161             pregfree2((REGEXP*) sv);
6162             goto freescalar;
6163         case SVt_PVCV:
6164         case SVt_PVFM:
6165             cv_undef(MUTABLE_CV(sv));
6166             /* If we're in a stash, we don't own a reference to it.
6167              * However it does have a back reference to us, which needs to
6168              * be cleared.  */
6169             if ((stash = CvSTASH(sv)))
6170                 sv_del_backref(MUTABLE_SV(stash), sv);
6171             goto freescalar;
6172         case SVt_PVHV:
6173             if (PL_last_swash_hv == (const HV *)sv) {
6174                 PL_last_swash_hv = NULL;
6175             }
6176             if (HvTOTALKEYS((HV*)sv) > 0) {
6177                 const char *name;
6178                 /* this statement should match the one at the beginning of
6179                  * hv_undef_flags() */
6180                 if (   PL_phase != PERL_PHASE_DESTRUCT
6181                     && (name = HvNAME((HV*)sv)))
6182                 {
6183                     if (PL_stashcache) {
6184                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6185                                      sv));
6186                         (void)hv_delete(PL_stashcache, name,
6187                             HvNAMEUTF8((HV*)sv) ? -HvNAMELEN_get((HV*)sv) : HvNAMELEN_get((HV*)sv), G_DISCARD);
6188                     }
6189                     hv_name_set((HV*)sv, NULL, 0, 0);
6190                 }
6191
6192                 /* save old iter_sv in unused SvSTASH field */
6193                 assert(!SvOBJECT(sv));
6194                 SvSTASH(sv) = (HV*)iter_sv;
6195                 iter_sv = sv;
6196
6197                 /* save old hash_index in unused SvMAGIC field */
6198                 assert(!SvMAGICAL(sv));
6199                 assert(!SvMAGIC(sv));
6200                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6201                 hash_index = 0;
6202
6203                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6204                 goto get_next_sv; /* process this new sv */
6205             }
6206             /* free empty hash */
6207             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6208             assert(!HvARRAY((HV*)sv));
6209             break;
6210         case SVt_PVAV:
6211             {
6212                 AV* av = MUTABLE_AV(sv);
6213                 if (PL_comppad == av) {
6214                     PL_comppad = NULL;
6215                     PL_curpad = NULL;
6216                 }
6217                 if (AvREAL(av) && AvFILLp(av) > -1) {
6218                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6219                     /* save old iter_sv in top-most slot of AV,
6220                      * and pray that it doesn't get wiped in the meantime */
6221                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6222                     iter_sv = sv;
6223                     goto get_next_sv; /* process this new sv */
6224                 }
6225                 Safefree(AvALLOC(av));
6226             }
6227
6228             break;
6229         case SVt_PVLV:
6230             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6231                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6232                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6233                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6234             }
6235             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6236                 SvREFCNT_dec(LvTARG(sv));
6237             if (isREGEXP(sv)) goto freeregexp;
6238         case SVt_PVGV:
6239             if (isGV_with_GP(sv)) {
6240                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6241                    && HvENAME_get(stash))
6242                     mro_method_changed_in(stash);
6243                 gp_free(MUTABLE_GV(sv));
6244                 if (GvNAME_HEK(sv))
6245                     unshare_hek(GvNAME_HEK(sv));
6246                 /* If we're in a stash, we don't own a reference to it.
6247                  * However it does have a back reference to us, which
6248                  * needs to be cleared.  */
6249                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6250                         sv_del_backref(MUTABLE_SV(stash), sv);
6251             }
6252             /* FIXME. There are probably more unreferenced pointers to SVs
6253              * in the interpreter struct that we should check and tidy in
6254              * a similar fashion to this:  */
6255             /* See also S_sv_unglob, which does the same thing. */
6256             if ((const GV *)sv == PL_last_in_gv)
6257                 PL_last_in_gv = NULL;
6258             else if ((const GV *)sv == PL_statgv)
6259                 PL_statgv = NULL;
6260             else if ((const GV *)sv == PL_stderrgv)
6261                 PL_stderrgv = NULL;
6262         case SVt_PVMG:
6263         case SVt_PVNV:
6264         case SVt_PVIV:
6265         case SVt_PV:
6266           freescalar:
6267             /* Don't bother with SvOOK_off(sv); as we're only going to
6268              * free it.  */
6269             if (SvOOK(sv)) {
6270                 STRLEN offset;
6271                 SvOOK_offset(sv, offset);
6272                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6273                 /* Don't even bother with turning off the OOK flag.  */
6274             }
6275             if (SvROK(sv)) {
6276             free_rv:
6277                 {
6278                     SV * const target = SvRV(sv);
6279                     if (SvWEAKREF(sv))
6280                         sv_del_backref(target, sv);
6281                     else
6282                         next_sv = target;
6283                 }
6284             }
6285 #ifdef PERL_ANY_COW
6286             else if (SvPVX_const(sv)
6287                      && !(SvTYPE(sv) == SVt_PVIO
6288                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6289             {
6290                 if (SvIsCOW(sv)) {
6291                     if (DEBUG_C_TEST) {
6292                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6293                         sv_dump(sv);
6294                     }
6295                     if (SvLEN(sv)) {
6296 # ifdef PERL_OLD_COPY_ON_WRITE
6297                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6298 # else
6299                         if (CowREFCNT(sv)) {
6300                             CowREFCNT(sv)--;
6301                             SvLEN_set(sv, 0);
6302                         }
6303 # endif
6304                     } else {
6305                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6306                     }
6307
6308                 }
6309 # ifdef PERL_OLD_COPY_ON_WRITE
6310                 else
6311 # endif
6312                 if (SvLEN(sv)) {
6313                     Safefree(SvPVX_mutable(sv));
6314                 }
6315             }
6316 #else
6317             else if (SvPVX_const(sv) && SvLEN(sv)
6318                      && !(SvTYPE(sv) == SVt_PVIO
6319                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6320                 Safefree(SvPVX_mutable(sv));
6321             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6322                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6323             }
6324 #endif
6325             break;
6326         case SVt_NV:
6327             break;
6328         }
6329
6330       free_body:
6331
6332         SvFLAGS(sv) &= SVf_BREAK;
6333         SvFLAGS(sv) |= SVTYPEMASK;
6334
6335         sv_type_details = bodies_by_type + type;
6336         if (sv_type_details->arena) {
6337             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6338                      &PL_body_roots[type]);
6339         }
6340         else if (sv_type_details->body_size) {
6341             safefree(SvANY(sv));
6342         }
6343
6344       free_head:
6345         /* caller is responsible for freeing the head of the original sv */
6346         if (sv != orig_sv && !SvREFCNT(sv))
6347             del_SV(sv);
6348
6349         /* grab and free next sv, if any */
6350       get_next_sv:
6351         while (1) {
6352             sv = NULL;
6353             if (next_sv) {
6354                 sv = next_sv;
6355                 next_sv = NULL;
6356             }
6357             else if (!iter_sv) {
6358                 break;
6359             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6360                 AV *const av = (AV*)iter_sv;
6361                 if (AvFILLp(av) > -1) {
6362                     sv = AvARRAY(av)[AvFILLp(av)--];
6363                 }
6364                 else { /* no more elements of current AV to free */
6365                     sv = iter_sv;
6366                     type = SvTYPE(sv);
6367                     /* restore previous value, squirrelled away */
6368                     iter_sv = AvARRAY(av)[AvMAX(av)];
6369                     Safefree(AvALLOC(av));
6370                     goto free_body;
6371                 }
6372             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6373                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6374                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6375                     /* no more elements of current HV to free */
6376                     sv = iter_sv;
6377                     type = SvTYPE(sv);
6378                     /* Restore previous values of iter_sv and hash_index,
6379                      * squirrelled away */
6380                     assert(!SvOBJECT(sv));
6381                     iter_sv = (SV*)SvSTASH(sv);
6382                     assert(!SvMAGICAL(sv));
6383                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6384 #ifdef DEBUGGING
6385                     /* perl -DA does not like rubbish in SvMAGIC. */
6386                     SvMAGIC_set(sv, 0);
6387 #endif
6388
6389                     /* free any remaining detritus from the hash struct */
6390                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6391                     assert(!HvARRAY((HV*)sv));
6392                     goto free_body;
6393                 }
6394             }
6395
6396             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6397
6398             if (!sv)
6399                 continue;
6400             if (!SvREFCNT(sv)) {
6401                 sv_free(sv);
6402                 continue;
6403             }
6404             if (--(SvREFCNT(sv)))
6405                 continue;
6406 #ifdef DEBUGGING
6407             if (SvTEMP(sv)) {
6408                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6409                          "Attempt to free temp prematurely: SV 0x%"UVxf
6410                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6411                 continue;
6412             }
6413 #endif
6414             if (SvIMMORTAL(sv)) {
6415                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6416                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6417                 continue;
6418             }
6419             break;
6420         } /* while 1 */
6421
6422     } /* while sv */
6423 }
6424
6425 /* This routine curses the sv itself, not the object referenced by sv. So
6426    sv does not have to be ROK. */
6427
6428 static bool
6429 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6430     dVAR;
6431
6432     PERL_ARGS_ASSERT_CURSE;
6433     assert(SvOBJECT(sv));
6434
6435     if (PL_defstash &&  /* Still have a symbol table? */
6436         SvDESTROYABLE(sv))
6437     {
6438         dSP;
6439         HV* stash;
6440         do {
6441           stash = SvSTASH(sv);
6442           assert(SvTYPE(stash) == SVt_PVHV);
6443           if (HvNAME(stash)) {
6444             CV* destructor = NULL;
6445             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6446             if (!destructor) {
6447                 GV * const gv =
6448                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6449                 if (gv) destructor = GvCV(gv);
6450                 if (!SvOBJECT(stash))
6451                     SvSTASH(stash) =
6452                         destructor ? (HV *)destructor : ((HV *)0)+1;
6453             }
6454             assert(!destructor || destructor == ((CV *)0)+1
6455                 || SvTYPE(destructor) == SVt_PVCV);
6456             if (destructor && destructor != ((CV *)0)+1
6457                 /* A constant subroutine can have no side effects, so
6458                    don't bother calling it.  */
6459                 && !CvCONST(destructor)
6460                 /* Don't bother calling an empty destructor or one that
6461                    returns immediately. */
6462                 && (CvISXSUB(destructor)
6463                 || (CvSTART(destructor)
6464                     && (CvSTART(destructor)->op_next->op_type
6465                                         != OP_LEAVESUB)
6466                     && (CvSTART(destructor)->op_next->op_type
6467                                         != OP_PUSHMARK
6468                         || CvSTART(destructor)->op_next->op_next->op_type
6469                                         != OP_RETURN
6470                        )
6471                    ))
6472                )
6473             {
6474                 SV* const tmpref = newRV(sv);
6475                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6476                 ENTER;
6477                 PUSHSTACKi(PERLSI_DESTROY);
6478                 EXTEND(SP, 2);
6479                 PUSHMARK(SP);
6480                 PUSHs(tmpref);
6481                 PUTBACK;
6482                 call_sv(MUTABLE_SV(destructor),
6483                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6484                 POPSTACK;
6485                 SPAGAIN;
6486                 LEAVE;
6487                 if(SvREFCNT(tmpref) < 2) {
6488                     /* tmpref is not kept alive! */
6489                     SvREFCNT(sv)--;
6490                     SvRV_set(tmpref, NULL);
6491                     SvROK_off(tmpref);
6492                 }
6493                 SvREFCNT_dec_NN(tmpref);
6494             }
6495           }
6496         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6497
6498
6499         if (check_refcnt && SvREFCNT(sv)) {
6500             if (PL_in_clean_objs)
6501                 Perl_croak(aTHX_
6502                   "DESTROY created new reference to dead object '%"HEKf"'",
6503                    HEKfARG(HvNAME_HEK(stash)));
6504             /* DESTROY gave object new lease on life */
6505             return FALSE;
6506         }
6507     }
6508
6509     if (SvOBJECT(sv)) {
6510         HV * const stash = SvSTASH(sv);
6511         /* Curse before freeing the stash, as freeing the stash could cause
6512            a recursive call into S_curse. */
6513         SvOBJECT_off(sv);       /* Curse the object. */
6514         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6515         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6516     }
6517     return TRUE;
6518 }
6519
6520 /*
6521 =for apidoc sv_newref
6522
6523 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6524 instead.
6525
6526 =cut
6527 */
6528
6529 SV *
6530 Perl_sv_newref(pTHX_ SV *const sv)
6531 {
6532     PERL_UNUSED_CONTEXT;
6533     if (sv)
6534         (SvREFCNT(sv))++;
6535     return sv;
6536 }
6537
6538 /*
6539 =for apidoc sv_free
6540
6541 Decrement an SV's reference count, and if it drops to zero, call
6542 C<sv_clear> to invoke destructors and free up any memory used by
6543 the body; finally, deallocate the SV's head itself.
6544 Normally called via a wrapper macro C<SvREFCNT_dec>.
6545
6546 =cut
6547 */
6548
6549 void
6550 Perl_sv_free(pTHX_ SV *const sv)
6551 {
6552     SvREFCNT_dec(sv);
6553 }
6554
6555
6556 /* Private helper function for SvREFCNT_dec().
6557  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6558
6559 void
6560 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6561 {
6562     dVAR;
6563
6564     PERL_ARGS_ASSERT_SV_FREE2;
6565
6566     if (rc == 1) {
6567         /* normal case */
6568         SvREFCNT(sv) = 0;
6569
6570 #ifdef DEBUGGING
6571         if (SvTEMP(sv)) {
6572             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6573                              "Attempt to free temp prematurely: SV 0x%"UVxf
6574                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6575             return;
6576         }
6577 #endif
6578         if (SvIMMORTAL(sv)) {
6579             /* make sure SvREFCNT(sv)==0 happens very seldom */
6580             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6581             return;
6582         }
6583         sv_clear(sv);
6584         if (! SvREFCNT(sv)) /* may have have been resurrected */
6585             del_SV(sv);
6586         return;
6587     }
6588
6589     /* handle exceptional cases */
6590
6591     assert(rc == 0);
6592
6593     if (SvFLAGS(sv) & SVf_BREAK)
6594         /* this SV's refcnt has been artificially decremented to
6595          * trigger cleanup */
6596         return;
6597     if (PL_in_clean_all) /* All is fair */
6598         return;
6599     if (SvIMMORTAL(sv)) {
6600         /* make sure SvREFCNT(sv)==0 happens very seldom */
6601         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6602         return;
6603     }
6604     if (ckWARN_d(WARN_INTERNAL)) {
6605 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6606         Perl_dump_sv_child(aTHX_ sv);
6607 #else
6608     #ifdef DEBUG_LEAKING_SCALARS
6609         sv_dump(sv);
6610     #endif
6611 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6612         if (PL_warnhook == PERL_WARNHOOK_FATAL
6613             || ckDEAD(packWARN(WARN_INTERNAL))) {
6614             /* Don't let Perl_warner cause us to escape our fate:  */
6615             abort();
6616         }
6617 #endif
6618         /* This may not return:  */
6619         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6620                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6621                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6622 #endif
6623     }
6624 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6625     abort();
6626 #endif
6627
6628 }
6629
6630
6631 /*
6632 =for apidoc sv_len
6633
6634 Returns the length of the string in the SV.  Handles magic and type
6635 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6636 gives raw access to the xpv_cur slot.
6637
6638 =cut
6639 */
6640
6641 STRLEN
6642 Perl_sv_len(pTHX_ SV *const sv)
6643 {
6644     STRLEN len;
6645
6646     if (!sv)
6647         return 0;
6648
6649     (void)SvPV_const(sv, len);
6650     return len;
6651 }
6652
6653 /*
6654 =for apidoc sv_len_utf8
6655
6656 Returns the number of characters in the string in an SV, counting wide
6657 UTF-8 bytes as a single character.  Handles magic and type coercion.
6658
6659 =cut
6660 */
6661
6662 /*
6663  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6664  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6665  * (Note that the mg_len is not the length of the mg_ptr field.
6666  * This allows the cache to store the character length of the string without
6667  * needing to malloc() extra storage to attach to the mg_ptr.)
6668  *
6669  */
6670
6671 STRLEN
6672 Perl_sv_len_utf8(pTHX_ SV *const sv)
6673 {
6674     if (!sv)
6675         return 0;
6676
6677     SvGETMAGIC(sv);
6678     return sv_len_utf8_nomg(sv);
6679 }
6680
6681 STRLEN
6682 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6683 {
6684     dVAR;
6685     STRLEN len;
6686     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6687
6688     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6689
6690     if (PL_utf8cache && SvUTF8(sv)) {
6691             STRLEN ulen;
6692             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6693
6694             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6695                 if (mg->mg_len != -1)
6696                     ulen = mg->mg_len;
6697                 else {
6698                     /* We can use the offset cache for a headstart.
6699                        The longer value is stored in the first pair.  */
6700                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6701
6702                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6703                                                        s + len);
6704                 }
6705                 
6706                 if (PL_utf8cache < 0) {
6707                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6708                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
6709                 }
6710             }
6711             else {
6712                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6713                 utf8_mg_len_cache_update(sv, &mg, ulen);
6714             }
6715             return ulen;
6716     }
6717     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
6718 }
6719
6720 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6721    offset.  */
6722 static STRLEN
6723 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6724                       STRLEN *const uoffset_p, bool *const at_end)
6725 {
6726     const U8 *s = start;
6727     STRLEN uoffset = *uoffset_p;
6728
6729     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6730
6731     while (s < send && uoffset) {
6732         --uoffset;
6733         s += UTF8SKIP(s);
6734     }
6735     if (s == send) {
6736         *at_end = TRUE;
6737     }
6738     else if (s > send) {
6739         *at_end = TRUE;
6740         /* This is the existing behaviour. Possibly it should be a croak, as
6741            it's actually a bounds error  */
6742         s = send;
6743     }
6744     *uoffset_p -= uoffset;
6745     return s - start;
6746 }
6747
6748 /* Given the length of the string in both bytes and UTF-8 characters, decide
6749    whether to walk forwards or backwards to find the byte corresponding to
6750    the passed in UTF-8 offset.  */
6751 static STRLEN
6752 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6753                     STRLEN uoffset, const STRLEN uend)
6754 {
6755     STRLEN backw = uend - uoffset;
6756
6757     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6758
6759     if (uoffset < 2 * backw) {
6760         /* The assumption is that going forwards is twice the speed of going
6761            forward (that's where the 2 * backw comes from).
6762            (The real figure of course depends on the UTF-8 data.)  */
6763         const U8 *s = start;
6764
6765         while (s < send && uoffset--)
6766             s += UTF8SKIP(s);
6767         assert (s <= send);
6768         if (s > send)
6769             s = send;
6770         return s - start;
6771     }
6772
6773     while (backw--) {
6774         send--;
6775         while (UTF8_IS_CONTINUATION(*send))
6776             send--;
6777     }
6778     return send - start;
6779 }
6780
6781 /* For the string representation of the given scalar, find the byte
6782    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6783    give another position in the string, *before* the sought offset, which
6784    (which is always true, as 0, 0 is a valid pair of positions), which should
6785    help reduce the amount of linear searching.
6786    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6787    will be used to reduce the amount of linear searching. The cache will be
6788    created if necessary, and the found value offered to it for update.  */
6789 static STRLEN
6790 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6791                     const U8 *const send, STRLEN uoffset,
6792                     STRLEN uoffset0, STRLEN boffset0)
6793 {
6794     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6795     bool found = FALSE;
6796     bool at_end = FALSE;
6797
6798     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6799
6800     assert (uoffset >= uoffset0);
6801
6802     if (!uoffset)
6803         return 0;
6804
6805     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
6806         && PL_utf8cache
6807         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6808                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6809         if ((*mgp)->mg_ptr) {
6810             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6811             if (cache[0] == uoffset) {
6812                 /* An exact match. */
6813                 return cache[1];
6814             }
6815             if (cache[2] == uoffset) {
6816                 /* An exact match. */
6817                 return cache[3];
6818             }
6819
6820             if (cache[0] < uoffset) {
6821                 /* The cache already knows part of the way.   */
6822                 if (cache[0] > uoffset0) {
6823                     /* The cache knows more than the passed in pair  */
6824                     uoffset0 = cache[0];
6825                     boffset0 = cache[1];
6826                 }
6827                 if ((*mgp)->mg_len != -1) {
6828                     /* And we know the end too.  */
6829                     boffset = boffset0
6830                         + sv_pos_u2b_midway(start + boffset0, send,
6831                                               uoffset - uoffset0,
6832                                               (*mgp)->mg_len - uoffset0);
6833                 } else {
6834                     uoffset -= uoffset0;
6835                     boffset = boffset0
6836                         + sv_pos_u2b_forwards(start + boffset0,
6837                                               send, &uoffset, &at_end);
6838                     uoffset += uoffset0;
6839                 }
6840             }
6841             else if (cache[2] < uoffset) {
6842                 /* We're between the two cache entries.  */
6843                 if (cache[2] > uoffset0) {
6844                     /* and the cache knows more than the passed in pair  */
6845                     uoffset0 = cache[2];
6846                     boffset0 = cache[3];
6847                 }
6848
6849                 boffset = boffset0
6850                     + sv_pos_u2b_midway(start + boffset0,
6851                                           start + cache[1],
6852                                           uoffset - uoffset0,
6853                                           cache[0] - uoffset0);
6854             } else {
6855                 boffset = boffset0
6856                     + sv_pos_u2b_midway(start + boffset0,
6857                                           start + cache[3],
6858                                           uoffset - uoffset0,
6859                                           cache[2] - uoffset0);
6860             }
6861             found = TRUE;
6862         }
6863         else if ((*mgp)->mg_len != -1) {
6864             /* If we can take advantage of a passed in offset, do so.  */
6865             /* In fact, offset0 is either 0, or less than offset, so don't
6866                need to worry about the other possibility.  */
6867             boffset = boffset0
6868                 + sv_pos_u2b_midway(start + boffset0, send,
6869                                       uoffset - uoffset0,
6870                                       (*mgp)->mg_len - uoffset0);
6871             found = TRUE;
6872         }
6873     }
6874
6875     if (!found || PL_utf8cache < 0) {
6876         STRLEN real_boffset;
6877         uoffset -= uoffset0;
6878         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6879                                                       send, &uoffset, &at_end);
6880         uoffset += uoffset0;
6881
6882         if (found && PL_utf8cache < 0)
6883             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
6884                                        real_boffset, sv);
6885         boffset = real_boffset;
6886     }
6887
6888     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
6889         if (at_end)
6890             utf8_mg_len_cache_update(sv, mgp, uoffset);
6891         else
6892             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6893     }
6894     return boffset;
6895 }
6896
6897
6898 /*
6899 =for apidoc sv_pos_u2b_flags
6900
6901 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6902 the start of the string, to a count of the equivalent number of bytes; if
6903 lenp is non-zero, it does the same to lenp, but this time starting from
6904 the offset, rather than from the start
6905 of the string.  Handles type coercion.
6906 I<flags> is passed to C<SvPV_flags>, and usually should be
6907 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6908
6909 =cut
6910 */
6911
6912 /*
6913  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6914  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6915  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6916  *
6917  */
6918
6919 STRLEN
6920 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6921                       U32 flags)
6922 {
6923     const U8 *start;
6924     STRLEN len;
6925     STRLEN boffset;
6926
6927     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6928
6929     start = (U8*)SvPV_flags(sv, len, flags);
6930     if (len) {
6931         const U8 * const send = start + len;
6932         MAGIC *mg = NULL;
6933         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6934
6935         if (lenp
6936             && *lenp /* don't bother doing work for 0, as its bytes equivalent
6937                         is 0, and *lenp is already set to that.  */) {
6938             /* Convert the relative offset to absolute.  */
6939             const STRLEN uoffset2 = uoffset + *lenp;
6940             const STRLEN boffset2
6941                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6942                                       uoffset, boffset) - boffset;
6943
6944             *lenp = boffset2;
6945         }
6946     } else {
6947         if (lenp)
6948             *lenp = 0;
6949         boffset = 0;
6950     }
6951
6952     return boffset;
6953 }
6954
6955 /*
6956 =for apidoc sv_pos_u2b
6957
6958 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6959 the start of the string, to a count of the equivalent number of bytes; if
6960 lenp is non-zero, it does the same to lenp, but this time starting from
6961 the offset, rather than from the start of the string.  Handles magic and
6962 type coercion.
6963
6964 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6965 than 2Gb.
6966
6967 =cut
6968 */
6969
6970 /*
6971  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6972  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6973  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6974  *
6975  */
6976
6977 /* This function is subject to size and sign problems */
6978
6979 void
6980 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
6981 {
6982     PERL_ARGS_ASSERT_SV_POS_U2B;
6983
6984     if (lenp) {
6985         STRLEN ulen = (STRLEN)*lenp;
6986         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6987                                          SV_GMAGIC|SV_CONST_RETURN);
6988         *lenp = (I32)ulen;
6989     } else {
6990         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6991                                          SV_GMAGIC|SV_CONST_RETURN);
6992     }
6993 }
6994
6995 static void
6996 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
6997                            const STRLEN ulen)
6998 {
6999     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7000     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7001         return;
7002
7003     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7004                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7005         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7006     }
7007     assert(*mgp);
7008
7009     (*mgp)->mg_len = ulen;
7010     /* For now, treat "overflowed" as "still unknown". See RT #72924.  */
7011     if (ulen != (STRLEN) (*mgp)->mg_len)
7012         (*mgp)->mg_len = -1;
7013 }
7014
7015 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7016    byte length pairing. The (byte) length of the total SV is passed in too,
7017    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7018    may not have updated SvCUR, so we can't rely on reading it directly.
7019
7020    The proffered utf8/byte length pairing isn't used if the cache already has
7021    two pairs, and swapping either for the proffered pair would increase the
7022    RMS of the intervals between known byte offsets.
7023
7024    The cache itself consists of 4 STRLEN values
7025    0: larger UTF-8 offset
7026    1: corresponding byte offset
7027    2: smaller UTF-8 offset
7028    3: corresponding byte offset
7029
7030    Unused cache pairs have the value 0, 0.
7031    Keeping the cache "backwards" means that the invariant of
7032    cache[0] >= cache[2] is maintained even with empty slots, which means that
7033    the code that uses it doesn't need to worry if only 1 entry has actually
7034    been set to non-zero.  It also makes the "position beyond the end of the
7035    cache" logic much simpler, as the first slot is always the one to start
7036    from.   
7037 */
7038 static void
7039 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7040                            const STRLEN utf8, const STRLEN blen)
7041 {
7042     STRLEN *cache;
7043
7044     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7045
7046     if (SvREADONLY(sv))
7047         return;
7048
7049     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7050                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7051         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7052                            0);
7053         (*mgp)->mg_len = -1;
7054     }
7055     assert(*mgp);
7056
7057     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7058         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7059         (*mgp)->mg_ptr = (char *) cache;
7060     }
7061     assert(cache);
7062
7063     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7064         /* SvPOKp() because it's possible that sv has string overloading, and
7065            therefore is a reference, hence SvPVX() is actually a pointer.
7066            This cures the (very real) symptoms of RT 69422, but I'm not actually
7067            sure whether we should even be caching the results of UTF-8
7068            operations on overloading, given that nothing stops overloading
7069            returning a different value every time it's called.  */
7070         const U8 *start = (const U8 *) SvPVX_const(sv);
7071         const STRLEN realutf8 = utf8_length(start, start + byte);
7072
7073         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7074                                    sv);
7075     }
7076
7077     /* Cache is held with the later position first, to simplify the code
7078        that deals with unbounded ends.  */
7079        
7080     ASSERT_UTF8_CACHE(cache);
7081     if (cache[1] == 0) {
7082         /* Cache is totally empty  */
7083         cache[0] = utf8;
7084         cache[1] = byte;
7085     } else if (cache[3] == 0) {
7086         if (byte > cache[1]) {
7087             /* New one is larger, so goes first.  */
7088             cache[2] = cache[0];
7089             cache[3] = cache[1];
7090             cache[0] = utf8;
7091             cache[1] = byte;
7092         } else {
7093             cache[2] = utf8;
7094             cache[3] = byte;
7095         }
7096     } else {
7097 #define THREEWAY_SQUARE(a,b,c,d) \
7098             ((float)((d) - (c))) * ((float)((d) - (c))) \
7099             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7100                + ((float)((b) - (a))) * ((float)((b) - (a)))
7101
7102         /* Cache has 2 slots in use, and we know three potential pairs.
7103            Keep the two that give the lowest RMS distance. Do the
7104            calculation in bytes simply because we always know the byte
7105            length.  squareroot has the same ordering as the positive value,
7106            so don't bother with the actual square root.  */
7107         if (byte > cache[1]) {
7108             /* New position is after the existing pair of pairs.  */
7109             const float keep_earlier
7110                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7111             const float keep_later
7112                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7113
7114             if (keep_later < keep_earlier) {
7115                 cache[2] = cache[0];
7116                 cache[3] = cache[1];
7117                 cache[0] = utf8;
7118                 cache[1] = byte;
7119             }
7120             else {
7121                 cache[0] = utf8;
7122                 cache[1] = byte;
7123             }
7124         }
7125         else if (byte > cache[3]) {
7126             /* New position is between the existing pair of pairs.  */
7127             const float keep_earlier
7128                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7129             const float keep_later
7130                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7131
7132             if (keep_later < keep_earlier) {
7133                 cache[2] = utf8;
7134                 cache[3] = byte;
7135             }
7136             else {
7137                 cache[0] = utf8;
7138                 cache[1] = byte;
7139             }
7140         }
7141         else {
7142             /* New position is before the existing pair of pairs.  */
7143             const float keep_earlier
7144                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
7145             const float keep_later
7146                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
7147
7148             if (keep_later < keep_earlier) {
7149                 cache[2] = utf8;
7150                 cache[3] = byte;
7151             }
7152             else {
7153                 cache[0] = cache[2];
7154                 cache[1] = cache[3];
7155                 cache[2] = utf8;
7156                 cache[3] = byte;
7157             }
7158         }
7159     }
7160     ASSERT_UTF8_CACHE(cache);
7161 }
7162
7163 /* We already know all of the way, now we may be able to walk back.  The same
7164    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7165    backward is half the speed of walking forward. */
7166 static STRLEN
7167 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7168                     const U8 *end, STRLEN endu)
7169 {
7170     const STRLEN forw = target - s;
7171     STRLEN backw = end - target;
7172
7173     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7174
7175     if (forw < 2 * backw) {
7176         return utf8_length(s, target);
7177     }
7178
7179     while (end > target) {
7180         end--;
7181         while (UTF8_IS_CONTINUATION(*end)) {
7182             end--;
7183         }
7184         endu--;
7185     }
7186     return endu;
7187 }
7188
7189 /*
7190 =for apidoc sv_pos_b2u
7191
7192 Converts the value pointed to by offsetp from a count of bytes from the
7193 start of the string, to a count of the equivalent number of UTF-8 chars.
7194 Handles magic and type coercion.
7195
7196 =cut
7197 */
7198
7199 /*
7200  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7201  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7202  * byte offsets.
7203  *
7204  */
7205 void
7206 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7207 {
7208     const U8* s;
7209     const STRLEN byte = *offsetp;
7210     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7211     STRLEN blen;
7212     MAGIC* mg = NULL;
7213     const U8* send;
7214     bool found = FALSE;
7215
7216     PERL_ARGS_ASSERT_SV_POS_B2U;
7217
7218     if (!sv)
7219         return;
7220
7221     s = (const U8*)SvPV_const(sv, blen);
7222
7223     if (blen < byte)
7224         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7225                    ", byte=%"UVuf, (UV)blen, (UV)byte);
7226
7227     send = s + byte;
7228
7229     if (!SvREADONLY(sv)
7230         && PL_utf8cache
7231         && SvTYPE(sv) >= SVt_PVMG
7232         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7233     {
7234         if (mg->mg_ptr) {
7235             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7236             if (cache[1] == byte) {
7237                 /* An exact match. */
7238                 *offsetp = cache[0];
7239                 return;
7240             }
7241             if (cache[3] == byte) {
7242                 /* An exact match. */
7243                 *offsetp = cache[2];
7244                 return;
7245             }
7246
7247             if (cache[1] < byte) {
7248                 /* We already know part of the way. */
7249                 if (mg->mg_len != -1) {
7250                     /* Actually, we know the end too.  */
7251                     len = cache[0]
7252                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7253                                               s + blen, mg->mg_len - cache[0]);
7254                 } else {
7255                     len = cache[0] + utf8_length(s + cache[1], send);
7256                 }
7257             }
7258             else if (cache[3] < byte) {
7259                 /* We're between the two cached pairs, so we do the calculation
7260                    offset by the byte/utf-8 positions for the earlier pair,
7261                    then add the utf-8 characters from the string start to
7262                    there.  */
7263                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7264                                           s + cache[1], cache[0] - cache[2])
7265                     + cache[2];
7266
7267             }
7268             else { /* cache[3] > byte */
7269                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7270                                           cache[2]);
7271
7272             }
7273             ASSERT_UTF8_CACHE(cache);
7274             found = TRUE;
7275         } else if (mg->mg_len != -1) {
7276             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7277             found = TRUE;
7278         }
7279     }
7280     if (!found || PL_utf8cache < 0) {
7281         const STRLEN real_len = utf8_length(s, send);
7282
7283         if (found && PL_utf8cache < 0)
7284             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7285         len = real_len;
7286     }
7287     *offsetp = len;
7288
7289     if (PL_utf8cache) {
7290         if (blen == byte)
7291             utf8_mg_len_cache_update(sv, &mg, len);
7292         else
7293             utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
7294     }
7295 }
7296
7297 static void
7298 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7299                              STRLEN real, SV *const sv)
7300 {
7301     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7302
7303     /* As this is debugging only code, save space by keeping this test here,
7304        rather than inlining it in all the callers.  */
7305     if (from_cache == real)
7306         return;
7307
7308     /* Need to turn the assertions off otherwise we may recurse infinitely
7309        while printing error messages.  */
7310     SAVEI8(PL_utf8cache);
7311     PL_utf8cache = 0;
7312     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7313                func, (UV) from_cache, (UV) real, SVfARG(sv));
7314 }
7315
7316 /*
7317 =for apidoc sv_eq
7318
7319 Returns a boolean indicating whether the strings in the two SVs are
7320 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7321 coerce its args to strings if necessary.
7322
7323 =for apidoc sv_eq_flags
7324
7325 Returns a boolean indicating whether the strings in the two SVs are
7326 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7327 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7328
7329 =cut
7330 */
7331
7332 I32
7333 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7334 {
7335     dVAR;
7336     const char *pv1;
7337     STRLEN cur1;
7338     const char *pv2;
7339     STRLEN cur2;
7340     I32  eq     = 0;
7341     SV* svrecode = NULL;
7342
7343     if (!sv1) {
7344         pv1 = "";
7345         cur1 = 0;
7346     }
7347     else {
7348         /* if pv1 and pv2 are the same, second SvPV_const call may
7349          * invalidate pv1 (if we are handling magic), so we may need to
7350          * make a copy */
7351         if (sv1 == sv2 && flags & SV_GMAGIC
7352          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7353             pv1 = SvPV_const(sv1, cur1);
7354             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7355         }
7356         pv1 = SvPV_flags_const(sv1, cur1, flags);
7357     }
7358
7359     if (!sv2){
7360         pv2 = "";
7361         cur2 = 0;
7362     }
7363     else
7364         pv2 = SvPV_flags_const(sv2, cur2, flags);
7365
7366     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7367         /* Differing utf8ness.
7368          * Do not UTF8size the comparands as a side-effect. */
7369          if (PL_encoding) {
7370               if (SvUTF8(sv1)) {
7371                    svrecode = newSVpvn(pv2, cur2);
7372                    sv_recode_to_utf8(svrecode, PL_encoding);
7373                    pv2 = SvPV_const(svrecode, cur2);
7374               }
7375               else {
7376                    svrecode = newSVpvn(pv1, cur1);
7377                    sv_recode_to_utf8(svrecode, PL_encoding);
7378                    pv1 = SvPV_const(svrecode, cur1);
7379               }
7380               /* Now both are in UTF-8. */
7381               if (cur1 != cur2) {
7382                    SvREFCNT_dec_NN(svrecode);
7383                    return FALSE;
7384               }
7385          }
7386          else {
7387               if (SvUTF8(sv1)) {
7388                   /* sv1 is the UTF-8 one  */
7389                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7390                                         (const U8*)pv1, cur1) == 0;
7391               }
7392               else {
7393                   /* sv2 is the UTF-8 one  */
7394                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7395                                         (const U8*)pv2, cur2) == 0;
7396               }
7397          }
7398     }
7399
7400     if (cur1 == cur2)
7401         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7402         
7403     SvREFCNT_dec(svrecode);
7404
7405     return eq;
7406 }
7407
7408 /*
7409 =for apidoc sv_cmp
7410
7411 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7412 string in C<sv1> is less than, equal to, or greater than the string in
7413 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7414 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7415
7416 =for apidoc sv_cmp_flags
7417
7418 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7419 string in C<sv1> is less than, equal to, or greater than the string in
7420 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7421 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7422 also C<sv_cmp_locale_flags>.
7423
7424 =cut
7425 */
7426
7427 I32
7428 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7429 {
7430     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7431 }
7432
7433 I32
7434 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7435                   const U32 flags)
7436 {
7437     dVAR;
7438     STRLEN cur1, cur2;
7439     const char *pv1, *pv2;
7440     I32  cmp;
7441     SV *svrecode = NULL;
7442
7443     if (!sv1) {
7444         pv1 = "";
7445         cur1 = 0;
7446     }
7447     else
7448         pv1 = SvPV_flags_const(sv1, cur1, flags);
7449
7450     if (!sv2) {
7451         pv2 = "";
7452         cur2 = 0;
7453     }
7454     else
7455         pv2 = SvPV_flags_const(sv2, cur2, flags);
7456
7457     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7458         /* Differing utf8ness.
7459          * Do not UTF8size the comparands as a side-effect. */
7460         if (SvUTF8(sv1)) {
7461             if (PL_encoding) {
7462                  svrecode = newSVpvn(pv2, cur2);
7463                  sv_recode_to_utf8(svrecode, PL_encoding);
7464                  pv2 = SvPV_const(svrecode, cur2);
7465             }
7466             else {
7467                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7468                                                    (const U8*)pv1, cur1);
7469                 return retval ? retval < 0 ? -1 : +1 : 0;
7470             }
7471         }
7472         else {
7473             if (PL_encoding) {
7474                  svrecode = newSVpvn(pv1, cur1);
7475                  sv_recode_to_utf8(svrecode, PL_encoding);
7476                  pv1 = SvPV_const(svrecode, cur1);
7477             }
7478             else {
7479                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7480                                                   (const U8*)pv2, cur2);
7481                 return retval ? retval < 0 ? -1 : +1 : 0;
7482             }
7483         }
7484     }
7485
7486     if (!cur1) {
7487         cmp = cur2 ? -1 : 0;
7488     } else if (!cur2) {
7489         cmp = 1;
7490     } else {
7491         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7492
7493         if (retval) {
7494             cmp = retval < 0 ? -1 : 1;
7495         } else if (cur1 == cur2) {
7496             cmp = 0;
7497         } else {
7498             cmp = cur1 < cur2 ? -1 : 1;
7499         }
7500     }
7501
7502     SvREFCNT_dec(svrecode);
7503
7504     return cmp;
7505 }
7506
7507 /*
7508 =for apidoc sv_cmp_locale
7509
7510 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7511 'use bytes' aware, handles get magic, and will coerce its args to strings
7512 if necessary.  See also C<sv_cmp>.
7513
7514 =for apidoc sv_cmp_locale_flags
7515
7516 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7517 'use bytes' aware and will coerce its args to strings if necessary.  If the
7518 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7519
7520 =cut
7521 */
7522
7523 I32
7524 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7525 {
7526     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7527 }
7528
7529 I32
7530 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7531                          const U32 flags)
7532 {
7533     dVAR;
7534 #ifdef USE_LOCALE_COLLATE
7535
7536     char *pv1, *pv2;
7537     STRLEN len1, len2;
7538     I32 retval;
7539
7540     if (PL_collation_standard)
7541         goto raw_compare;
7542
7543     len1 = 0;
7544     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7545     len2 = 0;
7546     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7547
7548     if (!pv1 || !len1) {
7549         if (pv2 && len2)
7550             return -1;
7551         else
7552             goto raw_compare;
7553     }
7554     else {
7555         if (!pv2 || !len2)
7556             return 1;
7557     }
7558
7559     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7560
7561     if (retval)
7562         return retval < 0 ? -1 : 1;
7563
7564     /*
7565      * When the result of collation is equality, that doesn't mean
7566      * that there are no differences -- some locales exclude some
7567      * characters from consideration.  So to avoid false equalities,
7568      * we use the raw string as a tiebreaker.
7569      */
7570
7571   raw_compare:
7572     /*FALLTHROUGH*/
7573
7574 #endif /* USE_LOCALE_COLLATE */
7575
7576     return sv_cmp(sv1, sv2);
7577 }
7578
7579
7580 #ifdef USE_LOCALE_COLLATE
7581
7582 /*
7583 =for apidoc sv_collxfrm
7584
7585 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7586 C<sv_collxfrm_flags>.
7587
7588 =for apidoc sv_collxfrm_flags
7589
7590 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7591 flags contain SV_GMAGIC, it handles get-magic.
7592
7593 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7594 scalar data of the variable, but transformed to such a format that a normal
7595 memory comparison can be used to compare the data according to the locale
7596 settings.
7597
7598 =cut
7599 */
7600
7601 char *
7602 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7603 {
7604     dVAR;
7605     MAGIC *mg;
7606
7607     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7608
7609     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7610     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7611         const char *s;
7612         char *xf;
7613         STRLEN len, xlen;
7614
7615         if (mg)
7616             Safefree(mg->mg_ptr);
7617         s = SvPV_flags_const(sv, len, flags);
7618         if ((xf = mem_collxfrm(s, len, &xlen))) {
7619             if (! mg) {
7620 #ifdef PERL_OLD_COPY_ON_WRITE
7621                 if (SvIsCOW(sv))
7622                     sv_force_normal_flags(sv, 0);
7623 #endif
7624                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7625                                  0, 0);
7626                 assert(mg);
7627             }
7628             mg->mg_ptr = xf;
7629             mg->mg_len = xlen;
7630         }
7631         else {
7632             if (mg) {
7633                 mg->mg_ptr = NULL;
7634                 mg->mg_len = -1;
7635             }
7636         }
7637     }
7638     if (mg && mg->mg_ptr) {
7639         *nxp = mg->mg_len;
7640         return mg->mg_ptr + sizeof(PL_collation_ix);
7641     }
7642     else {
7643         *nxp = 0;
7644         return NULL;
7645     }
7646 }
7647
7648 #endif /* USE_LOCALE_COLLATE */
7649
7650 static char *
7651 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7652 {
7653     SV * const tsv = newSV(0);
7654     ENTER;
7655     SAVEFREESV(tsv);
7656     sv_gets(tsv, fp, 0);
7657     sv_utf8_upgrade_nomg(tsv);
7658     SvCUR_set(sv,append);
7659     sv_catsv(sv,tsv);
7660     LEAVE;
7661     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7662 }
7663
7664 static char *
7665 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7666 {
7667     SSize_t bytesread;
7668     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7669       /* Grab the size of the record we're getting */
7670     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7671     
7672     /* Go yank in */
7673 #ifdef VMS
7674 #include <rms.h>
7675     int fd;
7676     Stat_t st;
7677
7678     /* With a true, record-oriented file on VMS, we need to use read directly
7679      * to ensure that we respect RMS record boundaries.  The user is responsible
7680      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7681      * record size) field.  N.B. This is likely to produce invalid results on
7682      * varying-width character data when a record ends mid-character.
7683      */
7684     fd = PerlIO_fileno(fp);
7685     if (fd != -1
7686         && PerlLIO_fstat(fd, &st) == 0
7687         && (st.st_fab_rfm == FAB$C_VAR
7688             || st.st_fab_rfm == FAB$C_VFC
7689             || st.st_fab_rfm == FAB$C_FIX)) {
7690
7691         bytesread = PerlLIO_read(fd, buffer, recsize);
7692     }
7693     else /* in-memory file from PerlIO::Scalar
7694           * or not a record-oriented file
7695           */
7696 #endif
7697     {
7698         bytesread = PerlIO_read(fp, buffer, recsize);
7699
7700         /* At this point, the logic in sv_get() means that sv will
7701            be treated as utf-8 if the handle is utf8.
7702         */
7703         if (PerlIO_isutf8(fp) && bytesread > 0) {
7704             char *bend = buffer + bytesread;
7705             char *bufp = buffer;
7706             size_t charcount = 0;
7707             bool charstart = TRUE;
7708             STRLEN skip = 0;
7709
7710             while (charcount < recsize) {
7711                 /* count accumulated characters */
7712                 while (bufp < bend) {
7713                     if (charstart) {
7714                         skip = UTF8SKIP(bufp);
7715                     }
7716                     if (bufp + skip > bend) {
7717                         /* partial at the end */
7718                         charstart = FALSE;
7719                         break;
7720                     }
7721                     else {
7722                         ++charcount;
7723                         bufp += skip;
7724                         charstart = TRUE;
7725                     }
7726                 }
7727
7728                 if (charcount < recsize) {
7729                     STRLEN readsize;
7730                     STRLEN bufp_offset = bufp - buffer;
7731                     SSize_t morebytesread;
7732
7733                     /* originally I read enough to fill any incomplete
7734                        character and the first byte of the next
7735                        character if needed, but if there's many
7736                        multi-byte encoded characters we're going to be
7737                        making a read call for every character beyond
7738                        the original read size.
7739
7740                        So instead, read the rest of the character if
7741                        any, and enough bytes to match at least the
7742                        start bytes for each character we're going to
7743                        read.
7744                     */
7745                     if (charstart)
7746                         readsize = recsize - charcount;
7747                     else 
7748                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7749                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7750                     bend = buffer + bytesread;
7751                     morebytesread = PerlIO_read(fp, bend, readsize);
7752                     if (morebytesread <= 0) {
7753                         /* we're done, if we still have incomplete
7754                            characters the check code in sv_gets() will
7755                            warn about them.
7756
7757                            I'd originally considered doing
7758                            PerlIO_ungetc() on all but the lead
7759                            character of the incomplete character, but
7760                            read() doesn't do that, so I don't.
7761                         */
7762                         break;
7763                     }
7764
7765                     /* prepare to scan some more */
7766                     bytesread += morebytesread;
7767                     bend = buffer + bytesread;
7768                     bufp = buffer + bufp_offset;
7769                 }
7770             }
7771         }
7772     }
7773
7774     if (bytesread < 0)
7775         bytesread = 0;
7776     SvCUR_set(sv, bytesread + append);
7777     buffer[bytesread] = '\0';
7778     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7779 }
7780
7781 /*
7782 =for apidoc sv_gets
7783
7784 Get a line from the filehandle and store it into the SV, optionally
7785 appending to the currently-stored string. If C<append> is not 0, the
7786 line is appended to the SV instead of overwriting it. C<append> should
7787 be set to the byte offset that the appended string should start at
7788 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7789
7790 =cut
7791 */
7792
7793 char *
7794 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7795 {
7796     dVAR;
7797     const char *rsptr;
7798     STRLEN rslen;
7799     STDCHAR rslast;
7800     STDCHAR *bp;
7801     I32 cnt;
7802     I32 i = 0;
7803     I32 rspara = 0;
7804
7805     PERL_ARGS_ASSERT_SV_GETS;
7806
7807     if (SvTHINKFIRST(sv))
7808         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7809     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7810        from <>.
7811        However, perlbench says it's slower, because the existing swipe code
7812        is faster than copy on write.
7813        Swings and roundabouts.  */
7814     SvUPGRADE(sv, SVt_PV);
7815
7816     if (append) {
7817         if (PerlIO_isutf8(fp)) {
7818             if (!SvUTF8(sv)) {
7819                 sv_utf8_upgrade_nomg(sv);
7820                 sv_pos_u2b(sv,&append,0);
7821             }
7822         } else if (SvUTF8(sv)) {
7823             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7824         }
7825     }
7826
7827     SvPOK_only(sv);
7828     if (!append) {
7829         SvCUR_set(sv,0);
7830     }
7831     if (PerlIO_isutf8(fp))
7832         SvUTF8_on(sv);
7833
7834     if (IN_PERL_COMPILETIME) {
7835         /* we always read code in line mode */
7836         rsptr = "\n";
7837         rslen = 1;
7838     }
7839     else if (RsSNARF(PL_rs)) {
7840         /* If it is a regular disk file use size from stat() as estimate
7841            of amount we are going to read -- may result in mallocing
7842            more memory than we really need if the layers below reduce
7843            the size we read (e.g. CRLF or a gzip layer).
7844          */
7845         Stat_t st;
7846         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7847             const Off_t offset = PerlIO_tell(fp);
7848             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7849                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7850             }
7851         }
7852         rsptr = NULL;
7853         rslen = 0;
7854     }
7855     else if (RsRECORD(PL_rs)) {
7856         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7857     }
7858     else if (RsPARA(PL_rs)) {
7859         rsptr = "\n\n";
7860         rslen = 2;
7861         rspara = 1;
7862     }
7863     else {
7864         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7865         if (PerlIO_isutf8(fp)) {
7866             rsptr = SvPVutf8(PL_rs, rslen);
7867         }
7868         else {
7869             if (SvUTF8(PL_rs)) {
7870                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7871                     Perl_croak(aTHX_ "Wide character in $/");
7872                 }
7873             }
7874             rsptr = SvPV_const(PL_rs, rslen);
7875         }
7876     }
7877
7878     rslast = rslen ? rsptr[rslen - 1] : '\0';
7879
7880     if (rspara) {               /* have to do this both before and after */
7881         do {                    /* to make sure file boundaries work right */
7882             if (PerlIO_eof(fp))
7883                 return 0;
7884             i = PerlIO_getc(fp);
7885             if (i != '\n') {
7886                 if (i == -1)
7887                     return 0;
7888                 PerlIO_ungetc(fp,i);
7889                 break;
7890             }
7891         } while (i != EOF);
7892     }
7893
7894     /* See if we know enough about I/O mechanism to cheat it ! */
7895
7896     /* This used to be #ifdef test - it is made run-time test for ease
7897        of abstracting out stdio interface. One call should be cheap
7898        enough here - and may even be a macro allowing compile
7899        time optimization.
7900      */
7901
7902     if (PerlIO_fast_gets(fp)) {
7903
7904     /*
7905      * We're going to steal some values from the stdio struct
7906      * and put EVERYTHING in the innermost loop into registers.
7907      */
7908     STDCHAR *ptr;
7909     STRLEN bpx;
7910     I32 shortbuffered;
7911
7912 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7913     /* An ungetc()d char is handled separately from the regular
7914      * buffer, so we getc() it back out and stuff it in the buffer.
7915      */
7916     i = PerlIO_getc(fp);
7917     if (i == EOF) return 0;
7918     *(--((*fp)->_ptr)) = (unsigned char) i;
7919     (*fp)->_cnt++;
7920 #endif
7921
7922     /* Here is some breathtakingly efficient cheating */
7923
7924     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7925     /* make sure we have the room */
7926     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7927         /* Not room for all of it
7928            if we are looking for a separator and room for some
7929          */
7930         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7931             /* just process what we have room for */
7932             shortbuffered = cnt - SvLEN(sv) + append + 1;
7933             cnt -= shortbuffered;
7934         }
7935         else {
7936             shortbuffered = 0;
7937             /* remember that cnt can be negative */
7938             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7939         }
7940     }
7941     else
7942         shortbuffered = 0;
7943     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7944     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7945     DEBUG_P(PerlIO_printf(Perl_debug_log,
7946         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7947     DEBUG_P(PerlIO_printf(Perl_debug_log,
7948         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7949                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7950                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7951     for (;;) {
7952       screamer:
7953         if (cnt > 0) {
7954             if (rslen) {
7955                 while (cnt > 0) {                    /* this     |  eat */
7956                     cnt--;
7957                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7958                         goto thats_all_folks;        /* screams  |  sed :-) */
7959                 }
7960             }
7961             else {
7962                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7963                 bp += cnt;                           /* screams  |  dust */
7964                 ptr += cnt;                          /* louder   |  sed :-) */
7965                 cnt = 0;
7966                 assert (!shortbuffered);
7967                 goto cannot_be_shortbuffered;
7968             }
7969         }
7970         
7971         if (shortbuffered) {            /* oh well, must extend */
7972             cnt = shortbuffered;
7973             shortbuffered = 0;
7974             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7975             SvCUR_set(sv, bpx);
7976             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7977             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7978             continue;
7979         }
7980
7981     cannot_be_shortbuffered:
7982         DEBUG_P(PerlIO_printf(Perl_debug_log,
7983                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7984                               PTR2UV(ptr),(long)cnt));
7985         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7986
7987         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7988             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7989             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7990             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7991
7992         /* This used to call 'filbuf' in stdio form, but as that behaves like
7993            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7994            another abstraction.  */
7995         i   = PerlIO_getc(fp);          /* get more characters */
7996
7997         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7998             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7999             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8000             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8001
8002         cnt = PerlIO_get_cnt(fp);
8003         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8004         DEBUG_P(PerlIO_printf(Perl_debug_log,
8005             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8006
8007         if (i == EOF)                   /* all done for ever? */
8008             goto thats_really_all_folks;
8009
8010         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8011         SvCUR_set(sv, bpx);
8012         SvGROW(sv, bpx + cnt + 2);
8013         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8014
8015         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8016
8017         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8018             goto thats_all_folks;
8019     }
8020
8021 thats_all_folks:
8022     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8023           memNE((char*)bp - rslen, rsptr, rslen))
8024         goto screamer;                          /* go back to the fray */
8025 thats_really_all_folks:
8026     if (shortbuffered)
8027         cnt += shortbuffered;
8028         DEBUG_P(PerlIO_printf(Perl_debug_log,
8029             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8030     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8031     DEBUG_P(PerlIO_printf(Perl_debug_log,
8032         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8033         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8034         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8035     *bp = '\0';
8036     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8037     DEBUG_P(PerlIO_printf(Perl_debug_log,
8038         "Screamer: done, len=%ld, string=|%.*s|\n",
8039         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8040     }
8041    else
8042     {
8043        /*The big, slow, and stupid way. */
8044 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8045         STDCHAR *buf = NULL;
8046         Newx(buf, 8192, STDCHAR);
8047         assert(buf);
8048 #else
8049         STDCHAR buf[8192];
8050 #endif
8051
8052 screamer2:
8053         if (rslen) {
8054             const STDCHAR * const bpe = buf + sizeof(buf);
8055             bp = buf;
8056             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8057                 ; /* keep reading */
8058             cnt = bp - buf;
8059         }
8060         else {
8061             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8062             /* Accommodate broken VAXC compiler, which applies U8 cast to
8063              * both args of ?: operator, causing EOF to change into 255
8064              */
8065             if (cnt > 0)
8066                  i = (U8)buf[cnt - 1];
8067             else
8068                  i = EOF;
8069         }
8070
8071         if (cnt < 0)
8072             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8073         if (append)
8074             sv_catpvn_nomg(sv, (char *) buf, cnt);
8075         else
8076             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8077
8078         if (i != EOF &&                 /* joy */
8079             (!rslen ||
8080              SvCUR(sv) < rslen ||
8081              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8082         {
8083             append = -1;
8084             /*
8085              * If we're reading from a TTY and we get a short read,
8086              * indicating that the user hit his EOF character, we need
8087              * to notice it now, because if we try to read from the TTY
8088              * again, the EOF condition will disappear.
8089              *
8090              * The comparison of cnt to sizeof(buf) is an optimization
8091              * that prevents unnecessary calls to feof().
8092              *
8093              * - jik 9/25/96
8094              */
8095             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8096                 goto screamer2;
8097         }
8098
8099 #ifdef USE_HEAP_INSTEAD_OF_STACK
8100         Safefree(buf);
8101 #endif
8102     }
8103
8104     if (rspara) {               /* have to do this both before and after */
8105         while (i != EOF) {      /* to make sure file boundaries work right */
8106             i = PerlIO_getc(fp);
8107             if (i != '\n') {
8108                 PerlIO_ungetc(fp,i);
8109                 break;
8110             }
8111         }
8112     }
8113
8114     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8115 }
8116
8117 /*
8118 =for apidoc sv_inc
8119
8120 Auto-increment of the value in the SV, doing string to numeric conversion
8121 if necessary.  Handles 'get' magic and operator overloading.
8122
8123 =cut
8124 */
8125
8126 void
8127 Perl_sv_inc(pTHX_ SV *const sv)
8128 {
8129     if (!sv)
8130         return;
8131     SvGETMAGIC(sv);
8132     sv_inc_nomg(sv);
8133 }
8134
8135 /*
8136 =for apidoc sv_inc_nomg
8137
8138 Auto-increment of the value in the SV, doing string to numeric conversion
8139 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8140
8141 =cut
8142 */
8143
8144 void
8145 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8146 {
8147     dVAR;
8148     char *d;
8149     int flags;
8150
8151     if (!sv)
8152         return;
8153     if (SvTHINKFIRST(sv)) {
8154         if (SvIsCOW(sv) || isGV_with_GP(sv))
8155             sv_force_normal_flags(sv, 0);
8156         if (SvREADONLY(sv)) {
8157             if (IN_PERL_RUNTIME)
8158                 Perl_croak_no_modify();
8159         }
8160         if (SvROK(sv)) {
8161             IV i;
8162             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8163                 return;
8164             i = PTR2IV(SvRV(sv));
8165             sv_unref(sv);
8166             sv_setiv(sv, i);
8167         }
8168     }
8169     flags = SvFLAGS(sv);
8170     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8171         /* It's (privately or publicly) a float, but not tested as an
8172            integer, so test it to see. */
8173         (void) SvIV(sv);
8174         flags = SvFLAGS(sv);
8175     }
8176     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8177         /* It's publicly an integer, or privately an integer-not-float */
8178 #ifdef PERL_PRESERVE_IVUV
8179       oops_its_int:
8180 #endif
8181         if (SvIsUV(sv)) {
8182             if (SvUVX(sv) == UV_MAX)
8183                 sv_setnv(sv, UV_MAX_P1);
8184             else
8185                 (void)SvIOK_only_UV(sv);
8186                 SvUV_set(sv, SvUVX(sv) + 1);
8187         } else {
8188             if (SvIVX(sv) == IV_MAX)
8189                 sv_setuv(sv, (UV)IV_MAX + 1);
8190             else {
8191                 (void)SvIOK_only(sv);
8192                 SvIV_set(sv, SvIVX(sv) + 1);
8193             }   
8194         }
8195         return;
8196     }
8197     if (flags & SVp_NOK) {
8198         const NV was = SvNVX(sv);
8199         if (NV_OVERFLOWS_INTEGERS_AT &&
8200             was >= NV_OVERFLOWS_INTEGERS_AT) {
8201             /* diag_listed_as: Lost precision when %s %f by 1 */
8202             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8203                            "Lost precision when incrementing %" NVff " by 1",
8204                            was);
8205         }
8206         (void)SvNOK_only(sv);
8207         SvNV_set(sv, was + 1.0);
8208         return;
8209     }
8210
8211     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8212         if ((flags & SVTYPEMASK) < SVt_PVIV)
8213             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8214         (void)SvIOK_only(sv);
8215         SvIV_set(sv, 1);
8216         return;
8217     }
8218     d = SvPVX(sv);
8219     while (isALPHA(*d)) d++;
8220     while (isDIGIT(*d)) d++;
8221     if (d < SvEND(sv)) {
8222 #ifdef PERL_PRESERVE_IVUV
8223         /* Got to punt this as an integer if needs be, but we don't issue
8224            warnings. Probably ought to make the sv_iv_please() that does
8225            the conversion if possible, and silently.  */
8226         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8227         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8228             /* Need to try really hard to see if it's an integer.
8229                9.22337203685478e+18 is an integer.
8230                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8231                so $a="9.22337203685478e+18"; $a+0; $a++
8232                needs to be the same as $a="9.22337203685478e+18"; $a++
8233                or we go insane. */
8234         
8235             (void) sv_2iv(sv);
8236             if (SvIOK(sv))
8237                 goto oops_its_int;
8238
8239             /* sv_2iv *should* have made this an NV */
8240             if (flags & SVp_NOK) {
8241                 (void)SvNOK_only(sv);
8242                 SvNV_set(sv, SvNVX(sv) + 1.0);
8243                 return;
8244             }
8245             /* I don't think we can get here. Maybe I should assert this
8246                And if we do get here I suspect that sv_setnv will croak. NWC
8247                Fall through. */
8248 #if defined(USE_LONG_DOUBLE)
8249             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",
8250                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8251 #else
8252             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8253                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8254 #endif
8255         }
8256 #endif /* PERL_PRESERVE_IVUV */
8257         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8258         return;
8259     }
8260     d--;
8261     while (d >= SvPVX_const(sv)) {
8262         if (isDIGIT(*d)) {
8263             if (++*d <= '9')
8264                 return;
8265             *(d--) = '0';
8266         }
8267         else {
8268 #ifdef EBCDIC
8269             /* MKS: The original code here died if letters weren't consecutive.
8270              * at least it didn't have to worry about non-C locales.  The
8271              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8272              * arranged in order (although not consecutively) and that only
8273              * [A-Za-z] are accepted by isALPHA in the C locale.
8274              */
8275             if (*d != 'z' && *d != 'Z') {
8276                 do { ++*d; } while (!isALPHA(*d));
8277                 return;
8278             }
8279             *(d--) -= 'z' - 'a';
8280 #else
8281             ++*d;
8282             if (isALPHA(*d))
8283                 return;
8284             *(d--) -= 'z' - 'a' + 1;
8285 #endif
8286         }
8287     }
8288     /* oh,oh, the number grew */
8289     SvGROW(sv, SvCUR(sv) + 2);
8290     SvCUR_set(sv, SvCUR(sv) + 1);
8291     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8292         *d = d[-1];
8293     if (isDIGIT(d[1]))
8294         *d = '1';
8295     else
8296         *d = d[1];
8297 }
8298
8299 /*
8300 =for apidoc sv_dec
8301
8302 Auto-decrement of the value in the SV, doing string to numeric conversion
8303 if necessary.  Handles 'get' magic and operator overloading.
8304
8305 =cut
8306 */
8307
8308 void
8309 Perl_sv_dec(pTHX_ SV *const sv)
8310 {
8311     dVAR;
8312     if (!sv)
8313         return;
8314     SvGETMAGIC(sv);
8315     sv_dec_nomg(sv);
8316 }
8317
8318 /*
8319 =for apidoc sv_dec_nomg
8320
8321 Auto-decrement of the value in the SV, doing string to numeric conversion
8322 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8323
8324 =cut
8325 */
8326
8327 void
8328 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8329 {
8330     dVAR;
8331     int flags;
8332
8333     if (!sv)
8334         return;
8335     if (SvTHINKFIRST(sv)) {
8336         if (SvIsCOW(sv) || isGV_with_GP(sv))
8337             sv_force_normal_flags(sv, 0);
8338         if (SvREADONLY(sv)) {
8339             if (IN_PERL_RUNTIME)
8340                 Perl_croak_no_modify();
8341         }
8342         if (SvROK(sv)) {
8343             IV i;
8344             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8345                 return;
8346             i = PTR2IV(SvRV(sv));
8347             sv_unref(sv);
8348             sv_setiv(sv, i);
8349         }
8350     }
8351     /* Unlike sv_inc we don't have to worry about string-never-numbers
8352        and keeping them magic. But we mustn't warn on punting */
8353     flags = SvFLAGS(sv);
8354     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8355         /* It's publicly an integer, or privately an integer-not-float */
8356 #ifdef PERL_PRESERVE_IVUV
8357       oops_its_int:
8358 #endif
8359         if (SvIsUV(sv)) {
8360             if (SvUVX(sv) == 0) {
8361                 (void)SvIOK_only(sv);
8362                 SvIV_set(sv, -1);
8363             }
8364             else {
8365                 (void)SvIOK_only_UV(sv);
8366                 SvUV_set(sv, SvUVX(sv) - 1);
8367             }   
8368         } else {
8369             if (SvIVX(sv) == IV_MIN) {
8370                 sv_setnv(sv, (NV)IV_MIN);
8371                 goto oops_its_num;
8372             }
8373             else {
8374                 (void)SvIOK_only(sv);
8375                 SvIV_set(sv, SvIVX(sv) - 1);
8376             }   
8377         }
8378         return;
8379     }
8380     if (flags & SVp_NOK) {
8381     oops_its_num:
8382         {
8383             const NV was = SvNVX(sv);
8384             if (NV_OVERFLOWS_INTEGERS_AT &&
8385                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8386                 /* diag_listed_as: Lost precision when %s %f by 1 */
8387                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8388                                "Lost precision when decrementing %" NVff " by 1",
8389                                was);
8390             }
8391             (void)SvNOK_only(sv);
8392             SvNV_set(sv, was - 1.0);
8393             return;
8394         }
8395     }
8396     if (!(flags & SVp_POK)) {
8397         if ((flags & SVTYPEMASK) < SVt_PVIV)
8398             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8399         SvIV_set(sv, -1);
8400         (void)SvIOK_only(sv);
8401         return;
8402     }
8403 #ifdef PERL_PRESERVE_IVUV
8404     {
8405         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8406         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8407             /* Need to try really hard to see if it's an integer.
8408                9.22337203685478e+18 is an integer.
8409                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8410                so $a="9.22337203685478e+18"; $a+0; $a--
8411                needs to be the same as $a="9.22337203685478e+18"; $a--
8412                or we go insane. */
8413         
8414             (void) sv_2iv(sv);
8415             if (SvIOK(sv))
8416                 goto oops_its_int;
8417
8418             /* sv_2iv *should* have made this an NV */
8419             if (flags & SVp_NOK) {
8420                 (void)SvNOK_only(sv);
8421                 SvNV_set(sv, SvNVX(sv) - 1.0);
8422                 return;
8423             }
8424             /* I don't think we can get here. Maybe I should assert this
8425                And if we do get here I suspect that sv_setnv will croak. NWC
8426                Fall through. */
8427 #if defined(USE_LONG_DOUBLE)
8428             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",
8429                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8430 #else
8431             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8432                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8433 #endif
8434         }
8435     }
8436 #endif /* PERL_PRESERVE_IVUV */
8437     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8438 }
8439
8440 /* this define is used to eliminate a chunk of duplicated but shared logic
8441  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8442  * used anywhere but here - yves
8443  */
8444 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8445     STMT_START {      \
8446         EXTEND_MORTAL(1); \
8447         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8448     } STMT_END
8449
8450 /*
8451 =for apidoc sv_mortalcopy
8452
8453 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8454 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8455 explicit call to FREETMPS, or by an implicit call at places such as
8456 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8457
8458 =cut
8459 */
8460
8461 /* Make a string that will exist for the duration of the expression
8462  * evaluation.  Actually, it may have to last longer than that, but
8463  * hopefully we won't free it until it has been assigned to a
8464  * permanent location. */
8465
8466 SV *
8467 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8468 {
8469     dVAR;
8470     SV *sv;
8471
8472     if (flags & SV_GMAGIC)
8473         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8474     new_SV(sv);
8475     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8476     PUSH_EXTEND_MORTAL__SV_C(sv);
8477     SvTEMP_on(sv);
8478     return sv;
8479 }
8480
8481 /*
8482 =for apidoc sv_newmortal
8483
8484 Creates a new null SV which is mortal.  The reference count of the SV is
8485 set to 1.  It will be destroyed "soon", either by an explicit call to
8486 FREETMPS, or by an implicit call at places such as statement boundaries.
8487 See also C<sv_mortalcopy> and C<sv_2mortal>.
8488
8489 =cut
8490 */
8491
8492 SV *
8493 Perl_sv_newmortal(pTHX)
8494 {
8495     dVAR;
8496     SV *sv;
8497
8498     new_SV(sv);
8499     SvFLAGS(sv) = SVs_TEMP;
8500     PUSH_EXTEND_MORTAL__SV_C(sv);
8501     return sv;
8502 }
8503
8504
8505 /*
8506 =for apidoc newSVpvn_flags
8507
8508 Creates a new SV and copies a string into it.  The reference count for the
8509 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8510 string.  You are responsible for ensuring that the source string is at least
8511 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8512 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8513 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8514 returning.  If C<SVf_UTF8> is set, C<s>
8515 is considered to be in UTF-8 and the
8516 C<SVf_UTF8> flag will be set on the new SV.
8517 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8518
8519     #define newSVpvn_utf8(s, len, u)                    \
8520         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8521
8522 =cut
8523 */
8524
8525 SV *
8526 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8527 {
8528     dVAR;
8529     SV *sv;
8530
8531     /* All the flags we don't support must be zero.
8532        And we're new code so I'm going to assert this from the start.  */
8533     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8534     new_SV(sv);
8535     sv_setpvn(sv,s,len);
8536
8537     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8538      * and do what it does ourselves here.
8539      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8540      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8541      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8542      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8543      */
8544
8545     SvFLAGS(sv) |= flags;
8546
8547     if(flags & SVs_TEMP){
8548         PUSH_EXTEND_MORTAL__SV_C(sv);
8549     }
8550
8551     return sv;
8552 }
8553
8554 /*
8555 =for apidoc sv_2mortal
8556
8557 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8558 by an explicit call to FREETMPS, or by an implicit call at places such as
8559 statement boundaries.  SvTEMP() is turned on which means that the SV's
8560 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8561 and C<sv_mortalcopy>.
8562
8563 =cut
8564 */
8565
8566 SV *
8567 Perl_sv_2mortal(pTHX_ SV *const sv)
8568 {
8569     dVAR;
8570     if (!sv)
8571         return NULL;
8572     if (SvIMMORTAL(sv))
8573         return sv;
8574     PUSH_EXTEND_MORTAL__SV_C(sv);
8575     SvTEMP_on(sv);
8576     return sv;
8577 }
8578
8579 /*
8580 =for apidoc newSVpv
8581
8582 Creates a new SV and copies a string into it.  The reference count for the
8583 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8584 strlen().  For efficiency, consider using C<newSVpvn> instead.
8585
8586 =cut
8587 */
8588
8589 SV *
8590 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8591 {
8592     dVAR;
8593     SV *sv;
8594
8595     new_SV(sv);
8596     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8597     return sv;
8598 }
8599
8600 /*
8601 =for apidoc newSVpvn
8602
8603 Creates a new SV and copies a buffer into it, which may contain NUL characters
8604 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8605 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8606 are responsible for ensuring that the source buffer is at least
8607 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8608 undefined.
8609
8610 =cut
8611 */
8612
8613 SV *
8614 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8615 {
8616     dVAR;
8617     SV *sv;
8618
8619     new_SV(sv);
8620     sv_setpvn(sv,buffer,len);
8621     return sv;
8622 }
8623
8624 /*
8625 =for apidoc newSVhek
8626
8627 Creates a new SV from the hash key structure.  It will generate scalars that
8628 point to the shared string table where possible.  Returns a new (undefined)
8629 SV if the hek is NULL.
8630
8631 =cut
8632 */
8633
8634 SV *
8635 Perl_newSVhek(pTHX_ const HEK *const hek)
8636 {
8637     dVAR;
8638     if (!hek) {
8639         SV *sv;
8640
8641         new_SV(sv);
8642         return sv;
8643     }
8644
8645     if (HEK_LEN(hek) == HEf_SVKEY) {
8646         return newSVsv(*(SV**)HEK_KEY(hek));
8647     } else {
8648         const int flags = HEK_FLAGS(hek);
8649         if (flags & HVhek_WASUTF8) {
8650             /* Trouble :-)
8651                Andreas would like keys he put in as utf8 to come back as utf8
8652             */
8653             STRLEN utf8_len = HEK_LEN(hek);
8654             SV * const sv = newSV_type(SVt_PV);
8655             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8656             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8657             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8658             SvUTF8_on (sv);
8659             return sv;
8660         } else if (flags & HVhek_UNSHARED) {
8661             /* A hash that isn't using shared hash keys has to have
8662                the flag in every key so that we know not to try to call
8663                share_hek_hek on it.  */
8664
8665             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8666             if (HEK_UTF8(hek))
8667                 SvUTF8_on (sv);
8668             return sv;
8669         }
8670         /* This will be overwhelminly the most common case.  */
8671         {
8672             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8673                more efficient than sharepvn().  */
8674             SV *sv;
8675
8676             new_SV(sv);
8677             sv_upgrade(sv, SVt_PV);
8678             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8679             SvCUR_set(sv, HEK_LEN(hek));
8680             SvLEN_set(sv, 0);
8681             SvIsCOW_on(sv);
8682             SvPOK_on(sv);
8683             if (HEK_UTF8(hek))
8684                 SvUTF8_on(sv);
8685             return sv;
8686         }
8687     }
8688 }
8689
8690 /*
8691 =for apidoc newSVpvn_share
8692
8693 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8694 table.  If the string does not already exist in the table, it is
8695 created first.  Turns on the SvIsCOW flag (or READONLY
8696 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8697 is non-zero, that value is used; otherwise the hash is computed.
8698 The string's hash can later be retrieved from the SV
8699 with the C<SvSHARED_HASH()> macro.  The idea here is
8700 that as the string table is used for shared hash keys these strings will have
8701 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8702
8703 =cut
8704 */
8705
8706 SV *
8707 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8708 {
8709     dVAR;
8710     SV *sv;
8711     bool is_utf8 = FALSE;
8712     const char *const orig_src = src;
8713
8714     if (len < 0) {
8715         STRLEN tmplen = -len;
8716         is_utf8 = TRUE;
8717         /* See the note in hv.c:hv_fetch() --jhi */
8718         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8719         len = tmplen;
8720     }
8721     if (!hash)
8722         PERL_HASH(hash, src, len);
8723     new_SV(sv);
8724     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8725        changes here, update it there too.  */
8726     sv_upgrade(sv, SVt_PV);
8727     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8728     SvCUR_set(sv, len);
8729     SvLEN_set(sv, 0);
8730     SvIsCOW_on(sv);
8731     SvPOK_on(sv);
8732     if (is_utf8)
8733         SvUTF8_on(sv);
8734     if (src != orig_src)
8735         Safefree(src);
8736     return sv;
8737 }
8738
8739 /*
8740 =for apidoc newSVpv_share
8741
8742 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8743 string/length pair.
8744
8745 =cut
8746 */
8747
8748 SV *
8749 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8750 {
8751     return newSVpvn_share(src, strlen(src), hash);
8752 }
8753
8754 #if defined(PERL_IMPLICIT_CONTEXT)
8755
8756 /* pTHX_ magic can't cope with varargs, so this is a no-context
8757  * version of the main function, (which may itself be aliased to us).
8758  * Don't access this version directly.
8759  */
8760
8761 SV *
8762 Perl_newSVpvf_nocontext(const char *const pat, ...)
8763 {
8764     dTHX;
8765     SV *sv;
8766     va_list args;
8767
8768     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8769
8770     va_start(args, pat);
8771     sv = vnewSVpvf(pat, &args);
8772     va_end(args);
8773     return sv;
8774 }
8775 #endif
8776
8777 /*
8778 =for apidoc newSVpvf
8779
8780 Creates a new SV and initializes it with the string formatted like
8781 C<sprintf>.
8782
8783 =cut
8784 */
8785
8786 SV *
8787 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8788 {
8789     SV *sv;
8790     va_list args;
8791
8792     PERL_ARGS_ASSERT_NEWSVPVF;
8793
8794     va_start(args, pat);
8795     sv = vnewSVpvf(pat, &args);
8796     va_end(args);
8797     return sv;
8798 }
8799
8800 /* backend for newSVpvf() and newSVpvf_nocontext() */
8801
8802 SV *
8803 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8804 {
8805     dVAR;
8806     SV *sv;
8807
8808     PERL_ARGS_ASSERT_VNEWSVPVF;
8809
8810     new_SV(sv);
8811     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8812     return sv;
8813 }
8814
8815 /*
8816 =for apidoc newSVnv
8817
8818 Creates a new SV and copies a floating point value into it.
8819 The reference count for the SV is set to 1.
8820
8821 =cut
8822 */
8823
8824 SV *
8825 Perl_newSVnv(pTHX_ const NV n)
8826 {
8827     dVAR;
8828     SV *sv;
8829
8830     new_SV(sv);
8831     sv_setnv(sv,n);
8832     return sv;
8833 }
8834
8835 /*
8836 =for apidoc newSViv
8837
8838 Creates a new SV and copies an integer into it.  The reference count for the
8839 SV is set to 1.
8840
8841 =cut
8842 */
8843
8844 SV *
8845 Perl_newSViv(pTHX_ const IV i)
8846 {
8847     dVAR;
8848     SV *sv;
8849
8850     new_SV(sv);
8851     sv_setiv(sv,i);
8852     return sv;
8853 }
8854
8855 /*
8856 =for apidoc newSVuv
8857
8858 Creates a new SV and copies an unsigned integer into it.
8859 The reference count for the SV is set to 1.
8860
8861 =cut
8862 */
8863
8864 SV *
8865 Perl_newSVuv(pTHX_ const UV u)
8866 {
8867     dVAR;
8868     SV *sv;
8869
8870     new_SV(sv);
8871     sv_setuv(sv,u);
8872     return sv;
8873 }
8874
8875 /*
8876 =for apidoc newSV_type
8877
8878 Creates a new SV, of the type specified.  The reference count for the new SV
8879 is set to 1.
8880
8881 =cut
8882 */
8883
8884 SV *
8885 Perl_newSV_type(pTHX_ const svtype type)
8886 {
8887     SV *sv;
8888
8889     new_SV(sv);
8890     sv_upgrade(sv, type);
8891     return sv;
8892 }
8893
8894 /*
8895 =for apidoc newRV_noinc
8896
8897 Creates an RV wrapper for an SV.  The reference count for the original
8898 SV is B<not> incremented.
8899
8900 =cut
8901 */
8902
8903 SV *
8904 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8905 {
8906     dVAR;
8907     SV *sv = newSV_type(SVt_IV);
8908
8909     PERL_ARGS_ASSERT_NEWRV_NOINC;
8910
8911     SvTEMP_off(tmpRef);
8912     SvRV_set(sv, tmpRef);
8913     SvROK_on(sv);
8914     return sv;
8915 }
8916
8917 /* newRV_inc is the official function name to use now.
8918  * newRV_inc is in fact #defined to newRV in sv.h
8919  */
8920
8921 SV *
8922 Perl_newRV(pTHX_ SV *const sv)
8923 {
8924     dVAR;
8925
8926     PERL_ARGS_ASSERT_NEWRV;
8927
8928     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8929 }
8930
8931 /*
8932 =for apidoc newSVsv
8933
8934 Creates a new SV which is an exact duplicate of the original SV.
8935 (Uses C<sv_setsv>.)
8936
8937 =cut
8938 */
8939
8940 SV *
8941 Perl_newSVsv(pTHX_ SV *const old)
8942 {
8943     dVAR;
8944     SV *sv;
8945
8946     if (!old)
8947         return NULL;
8948     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8949         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8950         return NULL;
8951     }
8952     /* Do this here, otherwise we leak the new SV if this croaks. */
8953     SvGETMAGIC(old);
8954     new_SV(sv);
8955     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8956        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8957     sv_setsv_flags(sv, old, SV_NOSTEAL);
8958     return sv;
8959 }
8960
8961 /*
8962 =for apidoc sv_reset
8963
8964 Underlying implementation for the C<reset> Perl function.
8965 Note that the perl-level function is vaguely deprecated.
8966
8967 =cut
8968 */
8969
8970 void
8971 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
8972 {
8973     PERL_ARGS_ASSERT_SV_RESET;
8974
8975     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
8976 }
8977
8978 void
8979 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
8980 {
8981     dVAR;
8982     char todo[PERL_UCHAR_MAX+1];
8983     const char *send;
8984
8985     if (!stash)
8986         return;
8987
8988     if (!s) {           /* reset ?? searches */
8989         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8990         if (mg) {
8991             const U32 count = mg->mg_len / sizeof(PMOP**);
8992             PMOP **pmp = (PMOP**) mg->mg_ptr;
8993             PMOP *const *const end = pmp + count;
8994
8995             while (pmp < end) {
8996 #ifdef USE_ITHREADS
8997                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8998 #else
8999                 (*pmp)->op_pmflags &= ~PMf_USED;
9000 #endif
9001                 ++pmp;
9002             }
9003         }
9004         return;
9005     }
9006
9007     /* reset variables */
9008
9009     if (!HvARRAY(stash))
9010         return;
9011
9012     Zero(todo, 256, char);
9013     send = s + len;
9014     while (s < send) {
9015         I32 max;
9016         I32 i = (unsigned char)*s;
9017         if (s[1] == '-') {
9018             s += 2;
9019         }
9020         max = (unsigned char)*s++;
9021         for ( ; i <= max; i++) {
9022             todo[i] = 1;
9023         }
9024         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9025             HE *entry;
9026             for (entry = HvARRAY(stash)[i];
9027                  entry;
9028                  entry = HeNEXT(entry))
9029             {
9030                 GV *gv;
9031                 SV *sv;
9032
9033                 if (!todo[(U8)*HeKEY(entry)])
9034                     continue;
9035                 gv = MUTABLE_GV(HeVAL(entry));
9036                 sv = GvSV(gv);
9037                 if (sv) {
9038                     if (SvTHINKFIRST(sv)) {
9039                         if (!SvREADONLY(sv) && SvROK(sv))
9040                             sv_unref(sv);
9041                         /* XXX Is this continue a bug? Why should THINKFIRST
9042                            exempt us from resetting arrays and hashes?  */
9043                         continue;
9044                     }
9045                     SvOK_off(sv);
9046                     if (SvTYPE(sv) >= SVt_PV) {
9047                         SvCUR_set(sv, 0);
9048                         if (SvPVX_const(sv) != NULL)
9049                             *SvPVX(sv) = '\0';
9050                         SvTAINT(sv);
9051                     }
9052                 }
9053                 if (GvAV(gv)) {
9054                     av_clear(GvAV(gv));
9055                 }
9056                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9057 #if defined(VMS)
9058                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9059 #else /* ! VMS */
9060                     hv_clear(GvHV(gv));
9061 #  if defined(USE_ENVIRON_ARRAY)
9062                     if (gv == PL_envgv)
9063                         my_clearenv();
9064 #  endif /* USE_ENVIRON_ARRAY */
9065 #endif /* VMS */
9066                 }
9067             }
9068         }
9069     }
9070 }
9071
9072 /*
9073 =for apidoc sv_2io
9074
9075 Using various gambits, try to get an IO from an SV: the IO slot if its a
9076 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9077 named after the PV if we're a string.
9078
9079 'Get' magic is ignored on the sv passed in, but will be called on
9080 C<SvRV(sv)> if sv is an RV.
9081
9082 =cut
9083 */
9084
9085 IO*
9086 Perl_sv_2io(pTHX_ SV *const sv)
9087 {
9088     IO* io;
9089     GV* gv;
9090
9091     PERL_ARGS_ASSERT_SV_2IO;
9092
9093     switch (SvTYPE(sv)) {
9094     case SVt_PVIO:
9095         io = MUTABLE_IO(sv);
9096         break;
9097     case SVt_PVGV:
9098     case SVt_PVLV:
9099         if (isGV_with_GP(sv)) {
9100             gv = MUTABLE_GV(sv);
9101             io = GvIO(gv);
9102             if (!io)
9103                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9104                                     HEKfARG(GvNAME_HEK(gv)));
9105             break;
9106         }
9107         /* FALL THROUGH */
9108     default:
9109         if (!SvOK(sv))
9110             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9111         if (SvROK(sv)) {
9112             SvGETMAGIC(SvRV(sv));
9113             return sv_2io(SvRV(sv));
9114         }
9115         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9116         if (gv)
9117             io = GvIO(gv);
9118         else
9119             io = 0;
9120         if (!io) {
9121             SV *newsv = sv;
9122             if (SvGMAGICAL(sv)) {
9123                 newsv = sv_newmortal();
9124                 sv_setsv_nomg(newsv, sv);
9125             }
9126             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9127         }
9128         break;
9129     }
9130     return io;
9131 }
9132
9133 /*
9134 =for apidoc sv_2cv
9135
9136 Using various gambits, try to get a CV from an SV; in addition, try if
9137 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9138 The flags in C<lref> are passed to gv_fetchsv.
9139
9140 =cut
9141 */
9142
9143 CV *
9144 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9145 {
9146     dVAR;
9147     GV *gv = NULL;
9148     CV *cv = NULL;
9149
9150     PERL_ARGS_ASSERT_SV_2CV;
9151
9152     if (!sv) {
9153         *st = NULL;
9154         *gvp = NULL;
9155         return NULL;
9156     }
9157     switch (SvTYPE(sv)) {
9158     case SVt_PVCV:
9159         *st = CvSTASH(sv);
9160         *gvp = NULL;
9161         return MUTABLE_CV(sv);
9162     case SVt_PVHV:
9163     case SVt_PVAV:
9164         *st = NULL;
9165         *gvp = NULL;
9166         return NULL;
9167     default:
9168         SvGETMAGIC(sv);
9169         if (SvROK(sv)) {
9170             if (SvAMAGIC(sv))
9171                 sv = amagic_deref_call(sv, to_cv_amg);
9172
9173             sv = SvRV(sv);
9174             if (SvTYPE(sv) == SVt_PVCV) {
9175                 cv = MUTABLE_CV(sv);
9176                 *gvp = NULL;
9177                 *st = CvSTASH(cv);
9178                 return cv;
9179             }
9180             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9181                 gv = MUTABLE_GV(sv);
9182             else
9183                 Perl_croak(aTHX_ "Not a subroutine reference");
9184         }
9185         else if (isGV_with_GP(sv)) {
9186             gv = MUTABLE_GV(sv);
9187         }
9188         else {
9189             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9190         }
9191         *gvp = gv;
9192         if (!gv) {
9193             *st = NULL;
9194             return NULL;
9195         }
9196         /* Some flags to gv_fetchsv mean don't really create the GV  */
9197         if (!isGV_with_GP(gv)) {
9198             *st = NULL;
9199             return NULL;
9200         }
9201         *st = GvESTASH(gv);
9202         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9203             /* XXX this is probably not what they think they're getting.
9204              * It has the same effect as "sub name;", i.e. just a forward
9205              * declaration! */
9206             newSTUB(gv,0);
9207         }
9208         return GvCVu(gv);
9209     }
9210 }
9211
9212 /*
9213 =for apidoc sv_true
9214
9215 Returns true if the SV has a true value by Perl's rules.
9216 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9217 instead use an in-line version.
9218
9219 =cut
9220 */
9221
9222 I32
9223 Perl_sv_true(pTHX_ SV *const sv)
9224 {
9225     if (!sv)
9226         return 0;
9227     if (SvPOK(sv)) {
9228         const XPV* const tXpv = (XPV*)SvANY(sv);
9229         if (tXpv &&
9230                 (tXpv->xpv_cur > 1 ||
9231                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9232             return 1;
9233         else
9234             return 0;
9235     }
9236     else {
9237         if (SvIOK(sv))
9238             return SvIVX(sv) != 0;
9239         else {
9240             if (SvNOK(sv))
9241                 return SvNVX(sv) != 0.0;
9242             else
9243                 return sv_2bool(sv);
9244         }
9245     }
9246 }
9247
9248 /*
9249 =for apidoc sv_pvn_force
9250
9251 Get a sensible string out of the SV somehow.
9252 A private implementation of the C<SvPV_force> macro for compilers which
9253 can't cope with complex macro expressions.  Always use the macro instead.
9254
9255 =for apidoc sv_pvn_force_flags
9256
9257 Get a sensible string out of the SV somehow.
9258 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9259 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9260 implemented in terms of this function.
9261 You normally want to use the various wrapper macros instead: see
9262 C<SvPV_force> and C<SvPV_force_nomg>
9263
9264 =cut
9265 */
9266
9267 char *
9268 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9269 {
9270     dVAR;
9271
9272     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9273
9274     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9275     if (SvTHINKFIRST(sv) && !SvROK(sv))
9276         sv_force_normal_flags(sv, 0);
9277
9278     if (SvPOK(sv)) {
9279         if (lp)
9280             *lp = SvCUR(sv);
9281     }
9282     else {
9283         char *s;
9284         STRLEN len;
9285  
9286         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9287             const char * const ref = sv_reftype(sv,0);
9288             if (PL_op)
9289                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9290                            ref, OP_DESC(PL_op));
9291             else
9292                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9293         }
9294         if (SvTYPE(sv) > SVt_PVLV
9295             || isGV_with_GP(sv))
9296             /* diag_listed_as: Can't coerce %s to %s in %s */
9297             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9298                 OP_DESC(PL_op));
9299         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9300         if (!s) {
9301           s = (char *)"";
9302         }
9303         if (lp)
9304             *lp = len;
9305
9306         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9307             if (SvROK(sv))
9308                 sv_unref(sv);
9309             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9310             SvGROW(sv, len + 1);
9311             Move(s,SvPVX(sv),len,char);
9312             SvCUR_set(sv, len);
9313             SvPVX(sv)[len] = '\0';
9314         }
9315         if (!SvPOK(sv)) {
9316             SvPOK_on(sv);               /* validate pointer */
9317             SvTAINT(sv);
9318             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9319                                   PTR2UV(sv),SvPVX_const(sv)));
9320         }
9321     }
9322     (void)SvPOK_only_UTF8(sv);
9323     return SvPVX_mutable(sv);
9324 }
9325
9326 /*
9327 =for apidoc sv_pvbyten_force
9328
9329 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9330 instead.
9331
9332 =cut
9333 */
9334
9335 char *
9336 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9337 {
9338     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9339
9340     sv_pvn_force(sv,lp);
9341     sv_utf8_downgrade(sv,0);
9342     *lp = SvCUR(sv);
9343     return SvPVX(sv);
9344 }
9345
9346 /*
9347 =for apidoc sv_pvutf8n_force
9348
9349 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9350 instead.
9351
9352 =cut
9353 */
9354
9355 char *
9356 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9357 {
9358     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9359
9360     sv_pvn_force(sv,0);
9361     sv_utf8_upgrade_nomg(sv);
9362     *lp = SvCUR(sv);
9363     return SvPVX(sv);
9364 }
9365
9366 /*
9367 =for apidoc sv_reftype
9368
9369 Returns a string describing what the SV is a reference to.
9370
9371 =cut
9372 */
9373
9374 const char *
9375 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9376 {
9377     PERL_ARGS_ASSERT_SV_REFTYPE;
9378     if (ob && SvOBJECT(sv)) {
9379         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9380     }
9381     else {
9382         switch (SvTYPE(sv)) {
9383         case SVt_NULL:
9384         case SVt_IV:
9385         case SVt_NV:
9386         case SVt_PV:
9387         case SVt_PVIV:
9388         case SVt_PVNV:
9389         case SVt_PVMG:
9390                                 if (SvVOK(sv))
9391                                     return "VSTRING";
9392                                 if (SvROK(sv))
9393                                     return "REF";
9394                                 else
9395                                     return "SCALAR";
9396
9397         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9398                                 /* tied lvalues should appear to be
9399                                  * scalars for backwards compatibility */
9400                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9401                                     ? "SCALAR" : "LVALUE");
9402         case SVt_PVAV:          return "ARRAY";
9403         case SVt_PVHV:          return "HASH";
9404         case SVt_PVCV:          return "CODE";
9405         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9406                                     ? "GLOB" : "SCALAR");
9407         case SVt_PVFM:          return "FORMAT";
9408         case SVt_PVIO:          return "IO";
9409         case SVt_BIND:          return "BIND";
9410         case SVt_REGEXP:        return "REGEXP";
9411         default:                return "UNKNOWN";
9412         }
9413     }
9414 }
9415
9416 /*
9417 =for apidoc sv_ref
9418
9419 Returns a SV describing what the SV passed in is a reference to.
9420
9421 =cut
9422 */
9423
9424 SV *
9425 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9426 {
9427     PERL_ARGS_ASSERT_SV_REF;
9428
9429     if (!dst)
9430         dst = sv_newmortal();
9431
9432     if (ob && SvOBJECT(sv)) {
9433         HvNAME_get(SvSTASH(sv))
9434                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9435                     : sv_setpvn(dst, "__ANON__", 8);
9436     }
9437     else {
9438         const char * reftype = sv_reftype(sv, 0);
9439         sv_setpv(dst, reftype);
9440     }
9441     return dst;
9442 }
9443
9444 /*
9445 =for apidoc sv_isobject
9446
9447 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9448 object.  If the SV is not an RV, or if the object is not blessed, then this
9449 will return false.
9450
9451 =cut
9452 */
9453
9454 int
9455 Perl_sv_isobject(pTHX_ SV *sv)
9456 {
9457     if (!sv)
9458         return 0;
9459     SvGETMAGIC(sv);
9460     if (!SvROK(sv))
9461         return 0;
9462     sv = SvRV(sv);
9463     if (!SvOBJECT(sv))
9464         return 0;
9465     return 1;
9466 }
9467
9468 /*
9469 =for apidoc sv_isa
9470
9471 Returns a boolean indicating whether the SV is blessed into the specified
9472 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9473 an inheritance relationship.
9474
9475 =cut
9476 */
9477
9478 int
9479 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9480 {
9481     const char *hvname;
9482
9483     PERL_ARGS_ASSERT_SV_ISA;
9484
9485     if (!sv)
9486         return 0;
9487     SvGETMAGIC(sv);
9488     if (!SvROK(sv))
9489         return 0;
9490     sv = SvRV(sv);
9491     if (!SvOBJECT(sv))
9492         return 0;
9493     hvname = HvNAME_get(SvSTASH(sv));
9494     if (!hvname)
9495         return 0;
9496
9497     return strEQ(hvname, name);
9498 }
9499
9500 /*
9501 =for apidoc newSVrv
9502
9503 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9504 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9505 SV will be blessed in the specified package.  The new SV is returned and its
9506 reference count is 1. The reference count 1 is owned by C<rv>.
9507
9508 =cut
9509 */
9510
9511 SV*
9512 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9513 {
9514     dVAR;
9515     SV *sv;
9516
9517     PERL_ARGS_ASSERT_NEWSVRV;
9518
9519     new_SV(sv);
9520
9521     SV_CHECK_THINKFIRST_COW_DROP(rv);
9522
9523     if (SvTYPE(rv) >= SVt_PVMG) {
9524         const U32 refcnt = SvREFCNT(rv);
9525         SvREFCNT(rv) = 0;
9526         sv_clear(rv);
9527         SvFLAGS(rv) = 0;
9528         SvREFCNT(rv) = refcnt;
9529
9530         sv_upgrade(rv, SVt_IV);
9531     } else if (SvROK(rv)) {
9532         SvREFCNT_dec(SvRV(rv));
9533     } else {
9534         prepare_SV_for_RV(rv);
9535     }
9536
9537     SvOK_off(rv);
9538     SvRV_set(rv, sv);
9539     SvROK_on(rv);
9540
9541     if (classname) {
9542         HV* const stash = gv_stashpv(classname, GV_ADD);
9543         (void)sv_bless(rv, stash);
9544     }
9545     return sv;
9546 }
9547
9548 /*
9549 =for apidoc sv_setref_pv
9550
9551 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9552 argument will be upgraded to an RV.  That RV will be modified to point to
9553 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9554 into the SV.  The C<classname> argument indicates the package for the
9555 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9556 will have a reference count of 1, and the RV will be returned.
9557
9558 Do not use with other Perl types such as HV, AV, SV, CV, because those
9559 objects will become corrupted by the pointer copy process.
9560
9561 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9562
9563 =cut
9564 */
9565
9566 SV*
9567 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9568 {
9569     dVAR;
9570
9571     PERL_ARGS_ASSERT_SV_SETREF_PV;
9572
9573     if (!pv) {
9574         sv_setsv(rv, &PL_sv_undef);
9575         SvSETMAGIC(rv);
9576     }
9577     else
9578         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9579     return rv;
9580 }
9581
9582 /*
9583 =for apidoc sv_setref_iv
9584
9585 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9586 argument will be upgraded to an RV.  That RV will be modified to point to
9587 the new SV.  The C<classname> argument indicates the package for the
9588 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9589 will have a reference count of 1, and the RV will be returned.
9590
9591 =cut
9592 */
9593
9594 SV*
9595 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9596 {
9597     PERL_ARGS_ASSERT_SV_SETREF_IV;
9598
9599     sv_setiv(newSVrv(rv,classname), iv);
9600     return rv;
9601 }
9602
9603 /*
9604 =for apidoc sv_setref_uv
9605
9606 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9607 argument will be upgraded to an RV.  That RV will be modified to point to
9608 the new SV.  The C<classname> argument indicates the package for the
9609 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9610 will have a reference count of 1, and the RV will be returned.
9611
9612 =cut
9613 */
9614
9615 SV*
9616 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9617 {
9618     PERL_ARGS_ASSERT_SV_SETREF_UV;
9619
9620     sv_setuv(newSVrv(rv,classname), uv);
9621     return rv;
9622 }
9623
9624 /*
9625 =for apidoc sv_setref_nv
9626
9627 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9628 argument will be upgraded to an RV.  That RV will be modified to point to
9629 the new SV.  The C<classname> argument indicates the package for the
9630 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9631 will have a reference count of 1, and the RV will be returned.
9632
9633 =cut
9634 */
9635
9636 SV*
9637 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9638 {
9639     PERL_ARGS_ASSERT_SV_SETREF_NV;
9640
9641     sv_setnv(newSVrv(rv,classname), nv);
9642     return rv;
9643 }
9644
9645 /*
9646 =for apidoc sv_setref_pvn
9647
9648 Copies a string into a new SV, optionally blessing the SV.  The length of the
9649 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9650 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9651 argument indicates the package for the blessing.  Set C<classname> to
9652 C<NULL> to avoid the blessing.  The new SV will have a reference count
9653 of 1, and the RV will be returned.
9654
9655 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9656
9657 =cut
9658 */
9659
9660 SV*
9661 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9662                    const char *const pv, const STRLEN n)
9663 {
9664     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9665
9666     sv_setpvn(newSVrv(rv,classname), pv, n);
9667     return rv;
9668 }
9669
9670 /*
9671 =for apidoc sv_bless
9672
9673 Blesses an SV into a specified package.  The SV must be an RV.  The package
9674 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9675 of the SV is unaffected.
9676
9677 =cut
9678 */
9679
9680 SV*
9681 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9682 {
9683     dVAR;
9684     SV *tmpRef;
9685
9686     PERL_ARGS_ASSERT_SV_BLESS;
9687
9688     if (!SvROK(sv))
9689         Perl_croak(aTHX_ "Can't bless non-reference value");
9690     tmpRef = SvRV(sv);
9691     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9692         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9693             Perl_croak_no_modify();
9694         if (SvOBJECT(tmpRef)) {
9695             SvREFCNT_dec(SvSTASH(tmpRef));
9696         }
9697     }
9698     SvOBJECT_on(tmpRef);
9699     SvUPGRADE(tmpRef, SVt_PVMG);
9700     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9701
9702     if(SvSMAGICAL(tmpRef))
9703         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9704             mg_set(tmpRef);
9705
9706
9707
9708     return sv;
9709 }
9710
9711 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9712  * as it is after unglobbing it.
9713  */
9714
9715 PERL_STATIC_INLINE void
9716 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9717 {
9718     dVAR;
9719     void *xpvmg;
9720     HV *stash;
9721     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9722
9723     PERL_ARGS_ASSERT_SV_UNGLOB;
9724
9725     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9726     SvFAKE_off(sv);
9727     if (!(flags & SV_COW_DROP_PV))
9728         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9729
9730     if (GvGP(sv)) {
9731         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9732            && HvNAME_get(stash))
9733             mro_method_changed_in(stash);
9734         gp_free(MUTABLE_GV(sv));
9735     }
9736     if (GvSTASH(sv)) {
9737         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9738         GvSTASH(sv) = NULL;
9739     }
9740     GvMULTI_off(sv);
9741     if (GvNAME_HEK(sv)) {
9742         unshare_hek(GvNAME_HEK(sv));
9743     }
9744     isGV_with_GP_off(sv);
9745
9746     if(SvTYPE(sv) == SVt_PVGV) {
9747         /* need to keep SvANY(sv) in the right arena */
9748         xpvmg = new_XPVMG();
9749         StructCopy(SvANY(sv), xpvmg, XPVMG);
9750         del_XPVGV(SvANY(sv));
9751         SvANY(sv) = xpvmg;
9752
9753         SvFLAGS(sv) &= ~SVTYPEMASK;
9754         SvFLAGS(sv) |= SVt_PVMG;
9755     }
9756
9757     /* Intentionally not calling any local SET magic, as this isn't so much a
9758        set operation as merely an internal storage change.  */
9759     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9760     else sv_setsv_flags(sv, temp, 0);
9761
9762     if ((const GV *)sv == PL_last_in_gv)
9763         PL_last_in_gv = NULL;
9764     else if ((const GV *)sv == PL_statgv)
9765         PL_statgv = NULL;
9766 }
9767
9768 /*
9769 =for apidoc sv_unref_flags
9770
9771 Unsets the RV status of the SV, and decrements the reference count of
9772 whatever was being referenced by the RV.  This can almost be thought of
9773 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9774 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9775 (otherwise the decrementing is conditional on the reference count being
9776 different from one or the reference being a readonly SV).
9777 See C<SvROK_off>.
9778
9779 =cut
9780 */
9781
9782 void
9783 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9784 {
9785     SV* const target = SvRV(ref);
9786
9787     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9788
9789     if (SvWEAKREF(ref)) {
9790         sv_del_backref(target, ref);
9791         SvWEAKREF_off(ref);
9792         SvRV_set(ref, NULL);
9793         return;
9794     }
9795     SvRV_set(ref, NULL);
9796     SvROK_off(ref);
9797     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9798        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9799     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9800         SvREFCNT_dec_NN(target);
9801     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9802         sv_2mortal(target);     /* Schedule for freeing later */
9803 }
9804
9805 /*
9806 =for apidoc sv_untaint
9807
9808 Untaint an SV.  Use C<SvTAINTED_off> instead.
9809
9810 =cut
9811 */
9812
9813 void
9814 Perl_sv_untaint(pTHX_ SV *const sv)
9815 {
9816     PERL_ARGS_ASSERT_SV_UNTAINT;
9817
9818     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9819         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9820         if (mg)
9821             mg->mg_len &= ~1;
9822     }
9823 }
9824
9825 /*
9826 =for apidoc sv_tainted
9827
9828 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9829
9830 =cut
9831 */
9832
9833 bool
9834 Perl_sv_tainted(pTHX_ SV *const sv)
9835 {
9836     PERL_ARGS_ASSERT_SV_TAINTED;
9837
9838     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9839         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9840         if (mg && (mg->mg_len & 1) )
9841             return TRUE;
9842     }
9843     return FALSE;
9844 }
9845
9846 /*
9847 =for apidoc sv_setpviv
9848
9849 Copies an integer into the given SV, also updating its string value.
9850 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9851
9852 =cut
9853 */
9854
9855 void
9856 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9857 {
9858     char buf[TYPE_CHARS(UV)];
9859     char *ebuf;
9860     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9861
9862     PERL_ARGS_ASSERT_SV_SETPVIV;
9863
9864     sv_setpvn(sv, ptr, ebuf - ptr);
9865 }
9866
9867 /*
9868 =for apidoc sv_setpviv_mg
9869
9870 Like C<sv_setpviv>, but also handles 'set' magic.
9871
9872 =cut
9873 */
9874
9875 void
9876 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9877 {
9878     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9879
9880     sv_setpviv(sv, iv);
9881     SvSETMAGIC(sv);
9882 }
9883
9884 #if defined(PERL_IMPLICIT_CONTEXT)
9885
9886 /* pTHX_ magic can't cope with varargs, so this is a no-context
9887  * version of the main function, (which may itself be aliased to us).
9888  * Don't access this version directly.
9889  */
9890
9891 void
9892 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9893 {
9894     dTHX;
9895     va_list args;
9896
9897     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9898
9899     va_start(args, pat);
9900     sv_vsetpvf(sv, pat, &args);
9901     va_end(args);
9902 }
9903
9904 /* pTHX_ magic can't cope with varargs, so this is a no-context
9905  * version of the main function, (which may itself be aliased to us).
9906  * Don't access this version directly.
9907  */
9908
9909 void
9910 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9911 {
9912     dTHX;
9913     va_list args;
9914
9915     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9916
9917     va_start(args, pat);
9918     sv_vsetpvf_mg(sv, pat, &args);
9919     va_end(args);
9920 }
9921 #endif
9922
9923 /*
9924 =for apidoc sv_setpvf
9925
9926 Works like C<sv_catpvf> but copies the text into the SV instead of
9927 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9928
9929 =cut
9930 */
9931
9932 void
9933 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9934 {
9935     va_list args;
9936
9937     PERL_ARGS_ASSERT_SV_SETPVF;
9938
9939     va_start(args, pat);
9940     sv_vsetpvf(sv, pat, &args);
9941     va_end(args);
9942 }
9943
9944 /*
9945 =for apidoc sv_vsetpvf
9946
9947 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9948 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9949
9950 Usually used via its frontend C<sv_setpvf>.
9951
9952 =cut
9953 */
9954
9955 void
9956 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9957 {
9958     PERL_ARGS_ASSERT_SV_VSETPVF;
9959
9960     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9961 }
9962
9963 /*
9964 =for apidoc sv_setpvf_mg
9965
9966 Like C<sv_setpvf>, but also handles 'set' magic.
9967
9968 =cut
9969 */
9970
9971 void
9972 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9973 {
9974     va_list args;
9975
9976     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9977
9978     va_start(args, pat);
9979     sv_vsetpvf_mg(sv, pat, &args);
9980     va_end(args);
9981 }
9982
9983 /*
9984 =for apidoc sv_vsetpvf_mg
9985
9986 Like C<sv_vsetpvf>, but also handles 'set' magic.
9987
9988 Usually used via its frontend C<sv_setpvf_mg>.
9989
9990 =cut
9991 */
9992
9993 void
9994 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9995 {
9996     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9997
9998     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9999     SvSETMAGIC(sv);
10000 }
10001
10002 #if defined(PERL_IMPLICIT_CONTEXT)
10003
10004 /* pTHX_ magic can't cope with varargs, so this is a no-context
10005  * version of the main function, (which may itself be aliased to us).
10006  * Don't access this version directly.
10007  */
10008
10009 void
10010 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10011 {
10012     dTHX;
10013     va_list args;
10014
10015     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10016
10017     va_start(args, pat);
10018     sv_vcatpvf(sv, pat, &args);
10019     va_end(args);
10020 }
10021
10022 /* pTHX_ magic can't cope with varargs, so this is a no-context
10023  * version of the main function, (which may itself be aliased to us).
10024  * Don't access this version directly.
10025  */
10026
10027 void
10028 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10029 {
10030     dTHX;
10031     va_list args;
10032
10033     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10034
10035     va_start(args, pat);
10036     sv_vcatpvf_mg(sv, pat, &args);
10037     va_end(args);
10038 }
10039 #endif
10040
10041 /*
10042 =for apidoc sv_catpvf
10043
10044 Processes its arguments like C<sprintf> and appends the formatted
10045 output to an SV.  If the appended data contains "wide" characters
10046 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10047 and characters >255 formatted with %c), the original SV might get
10048 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10049 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10050 valid UTF-8; if the original SV was bytes, the pattern should be too.
10051
10052 =cut */
10053
10054 void
10055 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10056 {
10057     va_list args;
10058
10059     PERL_ARGS_ASSERT_SV_CATPVF;
10060
10061     va_start(args, pat);
10062     sv_vcatpvf(sv, pat, &args);
10063     va_end(args);
10064 }
10065
10066 /*
10067 =for apidoc sv_vcatpvf
10068
10069 Processes its arguments like C<vsprintf> and appends the formatted output
10070 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10071
10072 Usually used via its frontend C<sv_catpvf>.
10073
10074 =cut
10075 */
10076
10077 void
10078 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10079 {
10080     PERL_ARGS_ASSERT_SV_VCATPVF;
10081
10082     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10083 }
10084
10085 /*
10086 =for apidoc sv_catpvf_mg
10087
10088 Like C<sv_catpvf>, but also handles 'set' magic.
10089
10090 =cut
10091 */
10092
10093 void
10094 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10095 {
10096     va_list args;
10097
10098     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10099
10100     va_start(args, pat);
10101     sv_vcatpvf_mg(sv, pat, &args);
10102     va_end(args);
10103 }
10104
10105 /*
10106 =for apidoc sv_vcatpvf_mg
10107
10108 Like C<sv_vcatpvf>, but also handles 'set' magic.
10109
10110 Usually used via its frontend C<sv_catpvf_mg>.
10111
10112 =cut
10113 */
10114
10115 void
10116 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10117 {
10118     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10119
10120     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10121     SvSETMAGIC(sv);
10122 }
10123
10124 /*
10125 =for apidoc sv_vsetpvfn
10126
10127 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10128 appending it.
10129
10130 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10131
10132 =cut
10133 */
10134
10135 void
10136 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10137                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10138 {
10139     PERL_ARGS_ASSERT_SV_VSETPVFN;
10140
10141     sv_setpvs(sv, "");
10142     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10143 }
10144
10145
10146 /*
10147  * Warn of missing argument to sprintf, and then return a defined value
10148  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10149  */
10150 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10151 STATIC SV*
10152 S_vcatpvfn_missing_argument(pTHX) {
10153     if (ckWARN(WARN_MISSING)) {
10154         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10155                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10156     }
10157     return &PL_sv_no;
10158 }
10159
10160
10161 STATIC I32
10162 S_expect_number(pTHX_ char **const pattern)
10163 {
10164     dVAR;
10165     I32 var = 0;
10166
10167     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10168
10169     switch (**pattern) {
10170     case '1': case '2': case '3':
10171     case '4': case '5': case '6':
10172     case '7': case '8': case '9':
10173         var = *(*pattern)++ - '0';
10174         while (isDIGIT(**pattern)) {
10175             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10176             if (tmp < var)
10177                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10178             var = tmp;
10179         }
10180     }
10181     return var;
10182 }
10183
10184 STATIC char *
10185 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10186 {
10187     const int neg = nv < 0;
10188     UV uv;
10189
10190     PERL_ARGS_ASSERT_F0CONVERT;
10191
10192     if (neg)
10193         nv = -nv;
10194     if (nv < UV_MAX) {
10195         char *p = endbuf;
10196         nv += 0.5;
10197         uv = (UV)nv;
10198         if (uv & 1 && uv == nv)
10199             uv--;                       /* Round to even */
10200         do {
10201             const unsigned dig = uv % 10;
10202             *--p = '0' + dig;
10203         } while (uv /= 10);
10204         if (neg)
10205             *--p = '-';
10206         *len = endbuf - p;
10207         return p;
10208     }
10209     return NULL;
10210 }
10211
10212
10213 /*
10214 =for apidoc sv_vcatpvfn
10215
10216 =for apidoc sv_vcatpvfn_flags
10217
10218 Processes its arguments like C<vsprintf> and appends the formatted output
10219 to an SV.  Uses an array of SVs if the C style variable argument list is
10220 missing (NULL).  When running with taint checks enabled, indicates via
10221 C<maybe_tainted> if results are untrustworthy (often due to the use of
10222 locales).
10223
10224 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10225
10226 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10227
10228 =cut
10229 */
10230
10231 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10232                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10233                         vec_utf8 = DO_UTF8(vecsv);
10234
10235 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10236
10237 void
10238 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10239                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10240 {
10241     PERL_ARGS_ASSERT_SV_VCATPVFN;
10242
10243     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10244 }
10245
10246 void
10247 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10248                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10249                        const U32 flags)
10250 {
10251     dVAR;
10252     char *p;
10253     char *q;
10254     const char *patend;
10255     STRLEN origlen;
10256     I32 svix = 0;
10257     static const char nullstr[] = "(null)";
10258     SV *argsv = NULL;
10259     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10260     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10261     SV *nsv = NULL;
10262     /* Times 4: a decimal digit takes more than 3 binary digits.
10263      * NV_DIG: mantissa takes than many decimal digits.
10264      * Plus 32: Playing safe. */
10265     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10266     /* large enough for "%#.#f" --chip */
10267     /* what about long double NVs? --jhi */
10268
10269     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10270     PERL_UNUSED_ARG(maybe_tainted);
10271
10272     if (flags & SV_GMAGIC)
10273         SvGETMAGIC(sv);
10274
10275     /* no matter what, this is a string now */
10276     (void)SvPV_force_nomg(sv, origlen);
10277
10278     /* special-case "", "%s", and "%-p" (SVf - see below) */
10279     if (patlen == 0)
10280         return;
10281     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10282         if (args) {
10283             const char * const s = va_arg(*args, char*);
10284             sv_catpv_nomg(sv, s ? s : nullstr);
10285         }
10286         else if (svix < svmax) {
10287             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10288             SvGETMAGIC(*svargs);
10289             sv_catsv_nomg(sv, *svargs);
10290         }
10291         else
10292             S_vcatpvfn_missing_argument(aTHX);
10293         return;
10294     }
10295     if (args && patlen == 3 && pat[0] == '%' &&
10296                 pat[1] == '-' && pat[2] == 'p') {
10297         argsv = MUTABLE_SV(va_arg(*args, void*));
10298         sv_catsv_nomg(sv, argsv);
10299         return;
10300     }
10301
10302 #ifndef USE_LONG_DOUBLE
10303     /* special-case "%.<number>[gf]" */
10304     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10305          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10306         unsigned digits = 0;
10307         const char *pp;
10308
10309         pp = pat + 2;
10310         while (*pp >= '0' && *pp <= '9')
10311             digits = 10 * digits + (*pp++ - '0');
10312         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10313             const NV nv = SvNV(*svargs);
10314             if (*pp == 'g') {
10315                 /* Add check for digits != 0 because it seems that some
10316                    gconverts are buggy in this case, and we don't yet have
10317                    a Configure test for this.  */
10318                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10319                      /* 0, point, slack */
10320                     Gconvert(nv, (int)digits, 0, ebuf);
10321                     sv_catpv_nomg(sv, ebuf);
10322                     if (*ebuf)  /* May return an empty string for digits==0 */
10323                         return;
10324                 }
10325             } else if (!digits) {
10326                 STRLEN l;
10327
10328                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10329                     sv_catpvn_nomg(sv, p, l);
10330                     return;
10331                 }
10332             }
10333         }
10334     }
10335 #endif /* !USE_LONG_DOUBLE */
10336
10337     if (!args && svix < svmax && DO_UTF8(*svargs))
10338         has_utf8 = TRUE;
10339
10340     patend = (char*)pat + patlen;
10341     for (p = (char*)pat; p < patend; p = q) {
10342         bool alt = FALSE;
10343         bool left = FALSE;
10344         bool vectorize = FALSE;
10345         bool vectorarg = FALSE;
10346         bool vec_utf8 = FALSE;
10347         char fill = ' ';
10348         char plus = 0;
10349         char intsize = 0;
10350         STRLEN width = 0;
10351         STRLEN zeros = 0;
10352         bool has_precis = FALSE;
10353         STRLEN precis = 0;
10354         const I32 osvix = svix;
10355         bool is_utf8 = FALSE;  /* is this item utf8?   */
10356 #ifdef HAS_LDBL_SPRINTF_BUG
10357         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10358            with sfio - Allen <allens@cpan.org> */
10359         bool fix_ldbl_sprintf_bug = FALSE;
10360 #endif
10361
10362         char esignbuf[4];
10363         U8 utf8buf[UTF8_MAXBYTES+1];
10364         STRLEN esignlen = 0;
10365
10366         const char *eptr = NULL;
10367         const char *fmtstart;
10368         STRLEN elen = 0;
10369         SV *vecsv = NULL;
10370         const U8 *vecstr = NULL;
10371         STRLEN veclen = 0;
10372         char c = 0;
10373         int i;
10374         unsigned base = 0;
10375         IV iv = 0;
10376         UV uv = 0;
10377         /* we need a long double target in case HAS_LONG_DOUBLE but
10378            not USE_LONG_DOUBLE
10379         */
10380 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10381         long double nv;
10382 #else
10383         NV nv;
10384 #endif
10385         STRLEN have;
10386         STRLEN need;
10387         STRLEN gap;
10388         const char *dotstr = ".";
10389         STRLEN dotstrlen = 1;
10390         I32 efix = 0; /* explicit format parameter index */
10391         I32 ewix = 0; /* explicit width index */
10392         I32 epix = 0; /* explicit precision index */
10393         I32 evix = 0; /* explicit vector index */
10394         bool asterisk = FALSE;
10395
10396         /* echo everything up to the next format specification */
10397         for (q = p; q < patend && *q != '%'; ++q) ;
10398         if (q > p) {
10399             if (has_utf8 && !pat_utf8)
10400                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10401             else
10402                 sv_catpvn_nomg(sv, p, q - p);
10403             p = q;
10404         }
10405         if (q++ >= patend)
10406             break;
10407
10408         fmtstart = q;
10409
10410 /*
10411     We allow format specification elements in this order:
10412         \d+\$              explicit format parameter index
10413         [-+ 0#]+           flags
10414         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10415         0                  flag (as above): repeated to allow "v02"     
10416         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10417         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10418         [hlqLV]            size
10419     [%bcdefginopsuxDFOUX] format (mandatory)
10420 */
10421
10422         if (args) {
10423 /*  
10424         As of perl5.9.3, printf format checking is on by default.
10425         Internally, perl uses %p formats to provide an escape to
10426         some extended formatting.  This block deals with those
10427         extensions: if it does not match, (char*)q is reset and
10428         the normal format processing code is used.
10429
10430         Currently defined extensions are:
10431                 %p              include pointer address (standard)      
10432                 %-p     (SVf)   include an SV (previously %_)
10433                 %-<num>p        include an SV with precision <num>      
10434                 %2p             include a HEK
10435                 %3p             include a HEK with precision of 256
10436                 %<num>p         (where num != 2 or 3) reserved for future
10437                                 extensions
10438
10439         Robin Barker 2005-07-14 (but modified since)
10440
10441                 %1p     (VDf)   removed.  RMB 2007-10-19
10442 */
10443             char* r = q; 
10444             bool sv = FALSE;    
10445             STRLEN n = 0;
10446             if (*q == '-')
10447                 sv = *q++;
10448             n = expect_number(&q);
10449             if (*q++ == 'p') {
10450                 if (sv) {                       /* SVf */
10451                     if (n) {
10452                         precis = n;
10453                         has_precis = TRUE;
10454                     }
10455                     argsv = MUTABLE_SV(va_arg(*args, void*));
10456                     eptr = SvPV_const(argsv, elen);
10457                     if (DO_UTF8(argsv))
10458                         is_utf8 = TRUE;
10459                     goto string;
10460                 }
10461                 else if (n==2 || n==3) {        /* HEKf */
10462                     HEK * const hek = va_arg(*args, HEK *);
10463                     eptr = HEK_KEY(hek);
10464                     elen = HEK_LEN(hek);
10465                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10466                     if (n==3) precis = 256, has_precis = TRUE;
10467                     goto string;
10468                 }
10469                 else if (n) {
10470                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10471                                      "internal %%<num>p might conflict with future printf extensions");
10472                 }
10473             }
10474             q = r; 
10475         }
10476
10477         if ( (width = expect_number(&q)) ) {
10478             if (*q == '$') {
10479                 ++q;
10480                 efix = width;
10481             } else {
10482                 goto gotwidth;
10483             }
10484         }
10485
10486         /* FLAGS */
10487
10488         while (*q) {
10489             switch (*q) {
10490             case ' ':
10491             case '+':
10492                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10493                     q++;
10494                 else
10495                     plus = *q++;
10496                 continue;
10497
10498             case '-':
10499                 left = TRUE;
10500                 q++;
10501                 continue;
10502
10503             case '0':
10504                 fill = *q++;
10505                 continue;
10506
10507             case '#':
10508                 alt = TRUE;
10509                 q++;
10510                 continue;
10511
10512             default:
10513                 break;
10514             }
10515             break;
10516         }
10517
10518       tryasterisk:
10519         if (*q == '*') {
10520             q++;
10521             if ( (ewix = expect_number(&q)) )
10522                 if (*q++ != '$')
10523                     goto unknown;
10524             asterisk = TRUE;
10525         }
10526         if (*q == 'v') {
10527             q++;
10528             if (vectorize)
10529                 goto unknown;
10530             if ((vectorarg = asterisk)) {
10531                 evix = ewix;
10532                 ewix = 0;
10533                 asterisk = FALSE;
10534             }
10535             vectorize = TRUE;
10536             goto tryasterisk;
10537         }
10538
10539         if (!asterisk)
10540         {
10541             if( *q == '0' )
10542                 fill = *q++;
10543             width = expect_number(&q);
10544         }
10545
10546         if (vectorize && vectorarg) {
10547             /* vectorizing, but not with the default "." */
10548             if (args)
10549                 vecsv = va_arg(*args, SV*);
10550             else if (evix) {
10551                 vecsv = (evix > 0 && evix <= svmax)
10552                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10553             } else {
10554                 vecsv = svix < svmax
10555                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10556             }
10557             dotstr = SvPV_const(vecsv, dotstrlen);
10558             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10559                bad with tied or overloaded values that return UTF8.  */
10560             if (DO_UTF8(vecsv))
10561                 is_utf8 = TRUE;
10562             else if (has_utf8) {
10563                 vecsv = sv_mortalcopy(vecsv);
10564                 sv_utf8_upgrade(vecsv);
10565                 dotstr = SvPV_const(vecsv, dotstrlen);
10566                 is_utf8 = TRUE;
10567             }               
10568         }
10569
10570         if (asterisk) {
10571             if (args)
10572                 i = va_arg(*args, int);
10573             else
10574                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10575                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10576             left |= (i < 0);
10577             width = (i < 0) ? -i : i;
10578         }
10579       gotwidth:
10580
10581         /* PRECISION */
10582
10583         if (*q == '.') {
10584             q++;
10585             if (*q == '*') {
10586                 q++;
10587                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10588                     goto unknown;
10589                 /* XXX: todo, support specified precision parameter */
10590                 if (epix)
10591                     goto unknown;
10592                 if (args)
10593                     i = va_arg(*args, int);
10594                 else
10595                     i = (ewix ? ewix <= svmax : svix < svmax)
10596                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10597                 precis = i;
10598                 has_precis = !(i < 0);
10599             }
10600             else {
10601                 precis = 0;
10602                 while (isDIGIT(*q))
10603                     precis = precis * 10 + (*q++ - '0');
10604                 has_precis = TRUE;
10605             }
10606         }
10607
10608         if (vectorize) {
10609             if (args) {
10610                 VECTORIZE_ARGS
10611             }
10612             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10613                 vecsv = svargs[efix ? efix-1 : svix++];
10614                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10615                 vec_utf8 = DO_UTF8(vecsv);
10616
10617                 /* if this is a version object, we need to convert
10618                  * back into v-string notation and then let the
10619                  * vectorize happen normally
10620                  */
10621                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10622                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10623                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10624                         "vector argument not supported with alpha versions");
10625                         goto vdblank;
10626                     }
10627                     vecsv = sv_newmortal();
10628                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10629                                  vecsv);
10630                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10631                     vec_utf8 = DO_UTF8(vecsv);
10632                 }
10633             }
10634             else {
10635               vdblank:
10636                 vecstr = (U8*)"";
10637                 veclen = 0;
10638             }
10639         }
10640
10641         /* SIZE */
10642
10643         switch (*q) {
10644 #ifdef WIN32
10645         case 'I':                       /* Ix, I32x, and I64x */
10646 #  ifdef USE_64_BIT_INT
10647             if (q[1] == '6' && q[2] == '4') {
10648                 q += 3;
10649                 intsize = 'q';
10650                 break;
10651             }
10652 #  endif
10653             if (q[1] == '3' && q[2] == '2') {
10654                 q += 3;
10655                 break;
10656             }
10657 #  ifdef USE_64_BIT_INT
10658             intsize = 'q';
10659 #  endif
10660             q++;
10661             break;
10662 #endif
10663 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10664         case 'L':                       /* Ld */
10665             /*FALLTHROUGH*/
10666 #ifdef HAS_QUAD
10667         case 'q':                       /* qd */
10668 #endif
10669             intsize = 'q';
10670             q++;
10671             break;
10672 #endif
10673         case 'l':
10674             ++q;
10675 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10676             if (*q == 'l') {    /* lld, llf */
10677                 intsize = 'q';
10678                 ++q;
10679             }
10680             else
10681 #endif
10682                 intsize = 'l';
10683             break;
10684         case 'h':
10685             if (*++q == 'h') {  /* hhd, hhu */
10686                 intsize = 'c';
10687                 ++q;
10688             }
10689             else
10690                 intsize = 'h';
10691             break;
10692         case 'V':
10693         case 'z':
10694         case 't':
10695 #if HAS_C99
10696         case 'j':
10697 #endif
10698             intsize = *q++;
10699             break;
10700         }
10701
10702         /* CONVERSION */
10703
10704         if (*q == '%') {
10705             eptr = q++;
10706             elen = 1;
10707             if (vectorize) {
10708                 c = '%';
10709                 goto unknown;
10710             }
10711             goto string;
10712         }
10713
10714         if (!vectorize && !args) {
10715             if (efix) {
10716                 const I32 i = efix-1;
10717                 argsv = (i >= 0 && i < svmax)
10718                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10719             } else {
10720                 argsv = (svix >= 0 && svix < svmax)
10721                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10722             }
10723         }
10724
10725         switch (c = *q++) {
10726
10727             /* STRINGS */
10728
10729         case 'c':
10730             if (vectorize)
10731                 goto unknown;
10732             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10733             if ((uv > 255 ||
10734                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10735                 && !IN_BYTES) {
10736                 eptr = (char*)utf8buf;
10737                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10738                 is_utf8 = TRUE;
10739             }
10740             else {
10741                 c = (char)uv;
10742                 eptr = &c;
10743                 elen = 1;
10744             }
10745             goto string;
10746
10747         case 's':
10748             if (vectorize)
10749                 goto unknown;
10750             if (args) {
10751                 eptr = va_arg(*args, char*);
10752                 if (eptr)
10753                     elen = strlen(eptr);
10754                 else {
10755                     eptr = (char *)nullstr;
10756                     elen = sizeof nullstr - 1;
10757                 }
10758             }
10759             else {
10760                 eptr = SvPV_const(argsv, elen);
10761                 if (DO_UTF8(argsv)) {
10762                     STRLEN old_precis = precis;
10763                     if (has_precis && precis < elen) {
10764                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10765                         STRLEN p = precis > ulen ? ulen : precis;
10766                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10767                                                         /* sticks at end */
10768                     }
10769                     if (width) { /* fudge width (can't fudge elen) */
10770                         if (has_precis && precis < elen)
10771                             width += precis - old_precis;
10772                         else
10773                             width +=
10774                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10775                     }
10776                     is_utf8 = TRUE;
10777                 }
10778             }
10779
10780         string:
10781             if (has_precis && precis < elen)
10782                 elen = precis;
10783             break;
10784
10785             /* INTEGERS */
10786
10787         case 'p':
10788             if (alt || vectorize)
10789                 goto unknown;
10790             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10791             base = 16;
10792             goto integer;
10793
10794         case 'D':
10795 #ifdef IV_IS_QUAD
10796             intsize = 'q';
10797 #else
10798             intsize = 'l';
10799 #endif
10800             /*FALLTHROUGH*/
10801         case 'd':
10802         case 'i':
10803 #if vdNUMBER
10804         format_vd:
10805 #endif
10806             if (vectorize) {
10807                 STRLEN ulen;
10808                 if (!veclen)
10809                     continue;
10810                 if (vec_utf8)
10811                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10812                                         UTF8_ALLOW_ANYUV);
10813                 else {
10814                     uv = *vecstr;
10815                     ulen = 1;
10816                 }
10817                 vecstr += ulen;
10818                 veclen -= ulen;
10819                 if (plus)
10820                      esignbuf[esignlen++] = plus;
10821             }
10822             else if (args) {
10823                 switch (intsize) {
10824                 case 'c':       iv = (char)va_arg(*args, int); break;
10825                 case 'h':       iv = (short)va_arg(*args, int); break;
10826                 case 'l':       iv = va_arg(*args, long); break;
10827                 case 'V':       iv = va_arg(*args, IV); break;
10828                 case 'z':       iv = va_arg(*args, SSize_t); break;
10829                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10830                 default:        iv = va_arg(*args, int); break;
10831 #if HAS_C99
10832                 case 'j':       iv = va_arg(*args, intmax_t); break;
10833 #endif
10834                 case 'q':
10835 #ifdef HAS_QUAD
10836                                 iv = va_arg(*args, Quad_t); break;
10837 #else
10838                                 goto unknown;
10839 #endif
10840                 }
10841             }
10842             else {
10843                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10844                 switch (intsize) {
10845                 case 'c':       iv = (char)tiv; break;
10846                 case 'h':       iv = (short)tiv; break;
10847                 case 'l':       iv = (long)tiv; break;
10848                 case 'V':
10849                 default:        iv = tiv; break;
10850                 case 'q':
10851 #ifdef HAS_QUAD
10852                                 iv = (Quad_t)tiv; break;
10853 #else
10854                                 goto unknown;
10855 #endif
10856                 }
10857             }
10858             if ( !vectorize )   /* we already set uv above */
10859             {
10860                 if (iv >= 0) {
10861                     uv = iv;
10862                     if (plus)
10863                         esignbuf[esignlen++] = plus;
10864                 }
10865                 else {
10866                     uv = -iv;
10867                     esignbuf[esignlen++] = '-';
10868                 }
10869             }
10870             base = 10;
10871             goto integer;
10872
10873         case 'U':
10874 #ifdef IV_IS_QUAD
10875             intsize = 'q';
10876 #else
10877             intsize = 'l';
10878 #endif
10879             /*FALLTHROUGH*/
10880         case 'u':
10881             base = 10;
10882             goto uns_integer;
10883
10884         case 'B':
10885         case 'b':
10886             base = 2;
10887             goto uns_integer;
10888
10889         case 'O':
10890 #ifdef IV_IS_QUAD
10891             intsize = 'q';
10892 #else
10893             intsize = 'l';
10894 #endif
10895             /*FALLTHROUGH*/
10896         case 'o':
10897             base = 8;
10898             goto uns_integer;
10899
10900         case 'X':
10901         case 'x':
10902             base = 16;
10903
10904         uns_integer:
10905             if (vectorize) {
10906                 STRLEN ulen;
10907         vector:
10908                 if (!veclen)
10909                     continue;
10910                 if (vec_utf8)
10911                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10912                                         UTF8_ALLOW_ANYUV);
10913                 else {
10914                     uv = *vecstr;
10915                     ulen = 1;
10916                 }
10917                 vecstr += ulen;
10918                 veclen -= ulen;
10919             }
10920             else if (args) {
10921                 switch (intsize) {
10922                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10923                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10924                 case 'l':  uv = va_arg(*args, unsigned long); break;
10925                 case 'V':  uv = va_arg(*args, UV); break;
10926                 case 'z':  uv = va_arg(*args, Size_t); break;
10927                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10928 #if HAS_C99
10929                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10930 #endif
10931                 default:   uv = va_arg(*args, unsigned); break;
10932                 case 'q':
10933 #ifdef HAS_QUAD
10934                            uv = va_arg(*args, Uquad_t); break;
10935 #else
10936                            goto unknown;
10937 #endif
10938                 }
10939             }
10940             else {
10941                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10942                 switch (intsize) {
10943                 case 'c':       uv = (unsigned char)tuv; break;
10944                 case 'h':       uv = (unsigned short)tuv; break;
10945                 case 'l':       uv = (unsigned long)tuv; break;
10946                 case 'V':
10947                 default:        uv = tuv; break;
10948                 case 'q':
10949 #ifdef HAS_QUAD
10950                                 uv = (Uquad_t)tuv; break;
10951 #else
10952                                 goto unknown;
10953 #endif
10954                 }
10955             }
10956
10957         integer:
10958             {
10959                 char *ptr = ebuf + sizeof ebuf;
10960                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10961                 zeros = 0;
10962
10963                 switch (base) {
10964                     unsigned dig;
10965                 case 16:
10966                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10967                     do {
10968                         dig = uv & 15;
10969                         *--ptr = p[dig];
10970                     } while (uv >>= 4);
10971                     if (tempalt) {
10972                         esignbuf[esignlen++] = '0';
10973                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10974                     }
10975                     break;
10976                 case 8:
10977                     do {
10978                         dig = uv & 7;
10979                         *--ptr = '0' + dig;
10980                     } while (uv >>= 3);
10981                     if (alt && *ptr != '0')
10982                         *--ptr = '0';
10983                     break;
10984                 case 2:
10985                     do {
10986                         dig = uv & 1;
10987                         *--ptr = '0' + dig;
10988                     } while (uv >>= 1);
10989                     if (tempalt) {
10990                         esignbuf[esignlen++] = '0';
10991                         esignbuf[esignlen++] = c;
10992                     }
10993                     break;
10994                 default:                /* it had better be ten or less */
10995                     do {
10996                         dig = uv % base;
10997                         *--ptr = '0' + dig;
10998                     } while (uv /= base);
10999                     break;
11000                 }
11001                 elen = (ebuf + sizeof ebuf) - ptr;
11002                 eptr = ptr;
11003                 if (has_precis) {
11004                     if (precis > elen)
11005                         zeros = precis - elen;
11006                     else if (precis == 0 && elen == 1 && *eptr == '0'
11007                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11008                         elen = 0;
11009
11010                 /* a precision nullifies the 0 flag. */
11011                     if (fill == '0')
11012                         fill = ' ';
11013                 }
11014             }
11015             break;
11016
11017             /* FLOATING POINT */
11018
11019         case 'F':
11020             c = 'f';            /* maybe %F isn't supported here */
11021             /*FALLTHROUGH*/
11022         case 'e': case 'E':
11023         case 'f':
11024         case 'g': case 'G':
11025             if (vectorize)
11026                 goto unknown;
11027
11028             /* This is evil, but floating point is even more evil */
11029
11030             /* for SV-style calling, we can only get NV
11031                for C-style calling, we assume %f is double;
11032                for simplicity we allow any of %Lf, %llf, %qf for long double
11033             */
11034             switch (intsize) {
11035             case 'V':
11036 #if defined(USE_LONG_DOUBLE)
11037                 intsize = 'q';
11038 #endif
11039                 break;
11040 /* [perl #20339] - we should accept and ignore %lf rather than die */
11041             case 'l':
11042                 /*FALLTHROUGH*/
11043             default:
11044 #if defined(USE_LONG_DOUBLE)
11045                 intsize = args ? 0 : 'q';
11046 #endif
11047                 break;
11048             case 'q':
11049 #if defined(HAS_LONG_DOUBLE)
11050                 break;
11051 #else
11052                 /*FALLTHROUGH*/
11053 #endif
11054             case 'c':
11055             case 'h':
11056             case 'z':
11057             case 't':
11058             case 'j':
11059                 goto unknown;
11060             }
11061
11062             /* now we need (long double) if intsize == 'q', else (double) */
11063             nv = (args) ?
11064 #if LONG_DOUBLESIZE > DOUBLESIZE
11065                 intsize == 'q' ?
11066                     va_arg(*args, long double) :
11067                     va_arg(*args, double)
11068 #else
11069                     va_arg(*args, double)
11070 #endif
11071                 : SvNV(argsv);
11072
11073             need = 0;
11074             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11075                else. frexp() has some unspecified behaviour for those three */
11076             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11077                 i = PERL_INT_MIN;
11078                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11079                    will cast our (long double) to (double) */
11080                 (void)Perl_frexp(nv, &i);
11081                 if (i == PERL_INT_MIN)
11082                     Perl_die(aTHX_ "panic: frexp");
11083                 if (i > 0)
11084                     need = BIT_DIGITS(i);
11085             }
11086             need += has_precis ? precis : 6; /* known default */
11087
11088             if (need < width)
11089                 need = width;
11090
11091 #ifdef HAS_LDBL_SPRINTF_BUG
11092             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11093                with sfio - Allen <allens@cpan.org> */
11094
11095 #  ifdef DBL_MAX
11096 #    define MY_DBL_MAX DBL_MAX
11097 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11098 #    if DOUBLESIZE >= 8
11099 #      define MY_DBL_MAX 1.7976931348623157E+308L
11100 #    else
11101 #      define MY_DBL_MAX 3.40282347E+38L
11102 #    endif
11103 #  endif
11104
11105 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11106 #    define MY_DBL_MAX_BUG 1L
11107 #  else
11108 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11109 #  endif
11110
11111 #  ifdef DBL_MIN
11112 #    define MY_DBL_MIN DBL_MIN
11113 #  else  /* XXX guessing! -Allen */
11114 #    if DOUBLESIZE >= 8
11115 #      define MY_DBL_MIN 2.2250738585072014E-308L
11116 #    else
11117 #      define MY_DBL_MIN 1.17549435E-38L
11118 #    endif
11119 #  endif
11120
11121             if ((intsize == 'q') && (c == 'f') &&
11122                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11123                 (need < DBL_DIG)) {
11124                 /* it's going to be short enough that
11125                  * long double precision is not needed */
11126
11127                 if ((nv <= 0L) && (nv >= -0L))
11128                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11129                 else {
11130                     /* would use Perl_fp_class as a double-check but not
11131                      * functional on IRIX - see perl.h comments */
11132
11133                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11134                         /* It's within the range that a double can represent */
11135 #if defined(DBL_MAX) && !defined(DBL_MIN)
11136                         if ((nv >= ((long double)1/DBL_MAX)) ||
11137                             (nv <= (-(long double)1/DBL_MAX)))
11138 #endif
11139                         fix_ldbl_sprintf_bug = TRUE;
11140                     }
11141                 }
11142                 if (fix_ldbl_sprintf_bug == TRUE) {
11143                     double temp;
11144
11145                     intsize = 0;
11146                     temp = (double)nv;
11147                     nv = (NV)temp;
11148                 }
11149             }
11150
11151 #  undef MY_DBL_MAX
11152 #  undef MY_DBL_MAX_BUG
11153 #  undef MY_DBL_MIN
11154
11155 #endif /* HAS_LDBL_SPRINTF_BUG */
11156
11157             need += 20; /* fudge factor */
11158             if (PL_efloatsize < need) {
11159                 Safefree(PL_efloatbuf);
11160                 PL_efloatsize = need + 20; /* more fudge */
11161                 Newx(PL_efloatbuf, PL_efloatsize, char);
11162                 PL_efloatbuf[0] = '\0';
11163             }
11164
11165             if ( !(width || left || plus || alt) && fill != '0'
11166                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11167                 /* See earlier comment about buggy Gconvert when digits,
11168                    aka precis is 0  */
11169                 if ( c == 'g' && precis) {
11170                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11171                     /* May return an empty string for digits==0 */
11172                     if (*PL_efloatbuf) {
11173                         elen = strlen(PL_efloatbuf);
11174                         goto float_converted;
11175                     }
11176                 } else if ( c == 'f' && !precis) {
11177                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11178                         break;
11179                 }
11180             }
11181             {
11182                 char *ptr = ebuf + sizeof ebuf;
11183                 *--ptr = '\0';
11184                 *--ptr = c;
11185                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11186 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11187                 if (intsize == 'q') {
11188                     /* Copy the one or more characters in a long double
11189                      * format before the 'base' ([efgEFG]) character to
11190                      * the format string. */
11191                     static char const prifldbl[] = PERL_PRIfldbl;
11192                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11193                     while (p >= prifldbl) { *--ptr = *p--; }
11194                 }
11195 #endif
11196                 if (has_precis) {
11197                     base = precis;
11198                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11199                     *--ptr = '.';
11200                 }
11201                 if (width) {
11202                     base = width;
11203                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11204                 }
11205                 if (fill == '0')
11206                     *--ptr = fill;
11207                 if (left)
11208                     *--ptr = '-';
11209                 if (plus)
11210                     *--ptr = plus;
11211                 if (alt)
11212                     *--ptr = '#';
11213                 *--ptr = '%';
11214
11215                 /* No taint.  Otherwise we are in the strange situation
11216                  * where printf() taints but print($float) doesn't.
11217                  * --jhi */
11218 #if defined(HAS_LONG_DOUBLE)
11219                 elen = ((intsize == 'q')
11220                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11221                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11222 #else
11223                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11224 #endif
11225             }
11226         float_converted:
11227             eptr = PL_efloatbuf;
11228             break;
11229
11230             /* SPECIAL */
11231
11232         case 'n':
11233             if (vectorize)
11234                 goto unknown;
11235             i = SvCUR(sv) - origlen;
11236             if (args) {
11237                 switch (intsize) {
11238                 case 'c':       *(va_arg(*args, char*)) = i; break;
11239                 case 'h':       *(va_arg(*args, short*)) = i; break;
11240                 default:        *(va_arg(*args, int*)) = i; break;
11241                 case 'l':       *(va_arg(*args, long*)) = i; break;
11242                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11243                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11244                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11245 #if HAS_C99
11246                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11247 #endif
11248                 case 'q':
11249 #ifdef HAS_QUAD
11250                                 *(va_arg(*args, Quad_t*)) = i; break;
11251 #else
11252                                 goto unknown;
11253 #endif
11254                 }
11255             }
11256             else
11257                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11258             continue;   /* not "break" */
11259
11260             /* UNKNOWN */
11261
11262         default:
11263       unknown:
11264             if (!args
11265                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11266                 && ckWARN(WARN_PRINTF))
11267             {
11268                 SV * const msg = sv_newmortal();
11269                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11270                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11271                 if (fmtstart < patend) {
11272                     const char * const fmtend = q < patend ? q : patend;
11273                     const char * f;
11274                     sv_catpvs(msg, "\"%");
11275                     for (f = fmtstart; f < fmtend; f++) {
11276                         if (isPRINT(*f)) {
11277                             sv_catpvn_nomg(msg, f, 1);
11278                         } else {
11279                             Perl_sv_catpvf(aTHX_ msg,
11280                                            "\\%03"UVof, (UV)*f & 0xFF);
11281                         }
11282                     }
11283                     sv_catpvs(msg, "\"");
11284                 } else {
11285                     sv_catpvs(msg, "end of string");
11286                 }
11287                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11288             }
11289
11290             /* output mangled stuff ... */
11291             if (c == '\0')
11292                 --q;
11293             eptr = p;
11294             elen = q - p;
11295
11296             /* ... right here, because formatting flags should not apply */
11297             SvGROW(sv, SvCUR(sv) + elen + 1);
11298             p = SvEND(sv);
11299             Copy(eptr, p, elen, char);
11300             p += elen;
11301             *p = '\0';
11302             SvCUR_set(sv, p - SvPVX_const(sv));
11303             svix = osvix;
11304             continue;   /* not "break" */
11305         }
11306
11307         if (is_utf8 != has_utf8) {
11308             if (is_utf8) {
11309                 if (SvCUR(sv))
11310                     sv_utf8_upgrade(sv);
11311             }
11312             else {
11313                 const STRLEN old_elen = elen;
11314                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11315                 sv_utf8_upgrade(nsv);
11316                 eptr = SvPVX_const(nsv);
11317                 elen = SvCUR(nsv);
11318
11319                 if (width) { /* fudge width (can't fudge elen) */
11320                     width += elen - old_elen;
11321                 }
11322                 is_utf8 = TRUE;
11323             }
11324         }
11325
11326         have = esignlen + zeros + elen;
11327         if (have < zeros)
11328             Perl_croak_memory_wrap();
11329
11330         need = (have > width ? have : width);
11331         gap = need - have;
11332
11333         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11334             Perl_croak_memory_wrap();
11335         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11336         p = SvEND(sv);
11337         if (esignlen && fill == '0') {
11338             int i;
11339             for (i = 0; i < (int)esignlen; i++)
11340                 *p++ = esignbuf[i];
11341         }
11342         if (gap && !left) {
11343             memset(p, fill, gap);
11344             p += gap;
11345         }
11346         if (esignlen && fill != '0') {
11347             int i;
11348             for (i = 0; i < (int)esignlen; i++)
11349                 *p++ = esignbuf[i];
11350         }
11351         if (zeros) {
11352             int i;
11353             for (i = zeros; i; i--)
11354                 *p++ = '0';
11355         }
11356         if (elen) {
11357             Copy(eptr, p, elen, char);
11358             p += elen;
11359         }
11360         if (gap && left) {
11361             memset(p, ' ', gap);
11362             p += gap;
11363         }
11364         if (vectorize) {
11365             if (veclen) {
11366                 Copy(dotstr, p, dotstrlen, char);
11367                 p += dotstrlen;
11368             }
11369             else
11370                 vectorize = FALSE;              /* done iterating over vecstr */
11371         }
11372         if (is_utf8)
11373             has_utf8 = TRUE;
11374         if (has_utf8)
11375             SvUTF8_on(sv);
11376         *p = '\0';
11377         SvCUR_set(sv, p - SvPVX_const(sv));
11378         if (vectorize) {
11379             esignlen = 0;
11380             goto vector;
11381         }
11382     }
11383     SvTAINT(sv);
11384 }
11385
11386 /* =========================================================================
11387
11388 =head1 Cloning an interpreter
11389
11390 All the macros and functions in this section are for the private use of
11391 the main function, perl_clone().
11392
11393 The foo_dup() functions make an exact copy of an existing foo thingy.
11394 During the course of a cloning, a hash table is used to map old addresses
11395 to new addresses.  The table is created and manipulated with the
11396 ptr_table_* functions.
11397
11398 =cut
11399
11400  * =========================================================================*/
11401
11402
11403 #if defined(USE_ITHREADS)
11404
11405 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11406 #ifndef GpREFCNT_inc
11407 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11408 #endif
11409
11410
11411 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11412    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11413    If this changes, please unmerge ss_dup.
11414    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11415 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11416 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11417 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11418 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11419 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11420 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11421 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11422 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11423 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11424 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11425 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11426 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11427 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11428
11429 /* clone a parser */
11430
11431 yy_parser *
11432 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11433 {
11434     yy_parser *parser;
11435
11436     PERL_ARGS_ASSERT_PARSER_DUP;
11437
11438     if (!proto)
11439         return NULL;
11440
11441     /* look for it in the table first */
11442     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11443     if (parser)
11444         return parser;
11445
11446     /* create anew and remember what it is */
11447     Newxz(parser, 1, yy_parser);
11448     ptr_table_store(PL_ptr_table, proto, parser);
11449
11450     /* XXX these not yet duped */
11451     parser->old_parser = NULL;
11452     parser->stack = NULL;
11453     parser->ps = NULL;
11454     parser->stack_size = 0;
11455     /* XXX parser->stack->state = 0; */
11456
11457     /* XXX eventually, just Copy() most of the parser struct ? */
11458
11459     parser->lex_brackets = proto->lex_brackets;
11460     parser->lex_casemods = proto->lex_casemods;
11461     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11462                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11463     parser->lex_casestack = savepvn(proto->lex_casestack,
11464                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11465     parser->lex_defer   = proto->lex_defer;
11466     parser->lex_dojoin  = proto->lex_dojoin;
11467     parser->lex_expect  = proto->lex_expect;
11468     parser->lex_formbrack = proto->lex_formbrack;
11469     parser->lex_inpat   = proto->lex_inpat;
11470     parser->lex_inwhat  = proto->lex_inwhat;
11471     parser->lex_op      = proto->lex_op;
11472     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11473     parser->lex_starts  = proto->lex_starts;
11474     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11475     parser->multi_close = proto->multi_close;
11476     parser->multi_open  = proto->multi_open;
11477     parser->multi_start = proto->multi_start;
11478     parser->multi_end   = proto->multi_end;
11479     parser->preambled   = proto->preambled;
11480     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11481     parser->linestr     = sv_dup_inc(proto->linestr, param);
11482     parser->expect      = proto->expect;
11483     parser->copline     = proto->copline;
11484     parser->last_lop_op = proto->last_lop_op;
11485     parser->lex_state   = proto->lex_state;
11486     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11487     /* rsfp_filters entries have fake IoDIRP() */
11488     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11489     parser->in_my       = proto->in_my;
11490     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11491     parser->error_count = proto->error_count;
11492
11493
11494     parser->linestr     = sv_dup_inc(proto->linestr, param);
11495
11496     {
11497         char * const ols = SvPVX(proto->linestr);
11498         char * const ls  = SvPVX(parser->linestr);
11499
11500         parser->bufptr      = ls + (proto->bufptr >= ols ?
11501                                     proto->bufptr -  ols : 0);
11502         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11503                                     proto->oldbufptr -  ols : 0);
11504         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11505                                     proto->oldoldbufptr -  ols : 0);
11506         parser->linestart   = ls + (proto->linestart >= ols ?
11507                                     proto->linestart -  ols : 0);
11508         parser->last_uni    = ls + (proto->last_uni >= ols ?
11509                                     proto->last_uni -  ols : 0);
11510         parser->last_lop    = ls + (proto->last_lop >= ols ?
11511                                     proto->last_lop -  ols : 0);
11512
11513         parser->bufend      = ls + SvCUR(parser->linestr);
11514     }
11515
11516     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11517
11518
11519 #ifdef PERL_MAD
11520     parser->endwhite    = proto->endwhite;
11521     parser->faketokens  = proto->faketokens;
11522     parser->lasttoke    = proto->lasttoke;
11523     parser->nextwhite   = proto->nextwhite;
11524     parser->realtokenstart = proto->realtokenstart;
11525     parser->skipwhite   = proto->skipwhite;
11526     parser->thisclose   = proto->thisclose;
11527     parser->thismad     = proto->thismad;
11528     parser->thisopen    = proto->thisopen;
11529     parser->thisstuff   = proto->thisstuff;
11530     parser->thistoken   = proto->thistoken;
11531     parser->thiswhite   = proto->thiswhite;
11532
11533     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11534     parser->curforce    = proto->curforce;
11535 #else
11536     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11537     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11538     parser->nexttoke    = proto->nexttoke;
11539 #endif
11540
11541     /* XXX should clone saved_curcop here, but we aren't passed
11542      * proto_perl; so do it in perl_clone_using instead */
11543
11544     return parser;
11545 }
11546
11547
11548 /* duplicate a file handle */
11549
11550 PerlIO *
11551 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11552 {
11553     PerlIO *ret;
11554
11555     PERL_ARGS_ASSERT_FP_DUP;
11556     PERL_UNUSED_ARG(type);
11557
11558     if (!fp)
11559         return (PerlIO*)NULL;
11560
11561     /* look for it in the table first */
11562     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11563     if (ret)
11564         return ret;
11565
11566     /* create anew and remember what it is */
11567     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11568     ptr_table_store(PL_ptr_table, fp, ret);
11569     return ret;
11570 }
11571
11572 /* duplicate a directory handle */
11573
11574 DIR *
11575 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11576 {
11577     DIR *ret;
11578
11579 #ifdef HAS_FCHDIR
11580     DIR *pwd;
11581     const Direntry_t *dirent;
11582     char smallbuf[256];
11583     char *name = NULL;
11584     STRLEN len = 0;
11585     long pos;
11586 #endif
11587
11588     PERL_UNUSED_CONTEXT;
11589     PERL_ARGS_ASSERT_DIRP_DUP;
11590
11591     if (!dp)
11592         return (DIR*)NULL;
11593
11594     /* look for it in the table first */
11595     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11596     if (ret)
11597         return ret;
11598
11599 #ifdef HAS_FCHDIR
11600
11601     PERL_UNUSED_ARG(param);
11602
11603     /* create anew */
11604
11605     /* open the current directory (so we can switch back) */
11606     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11607
11608     /* chdir to our dir handle and open the present working directory */
11609     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11610         PerlDir_close(pwd);
11611         return (DIR *)NULL;
11612     }
11613     /* Now we should have two dir handles pointing to the same dir. */
11614
11615     /* Be nice to the calling code and chdir back to where we were. */
11616     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11617
11618     /* We have no need of the pwd handle any more. */
11619     PerlDir_close(pwd);
11620
11621 #ifdef DIRNAMLEN
11622 # define d_namlen(d) (d)->d_namlen
11623 #else
11624 # define d_namlen(d) strlen((d)->d_name)
11625 #endif
11626     /* Iterate once through dp, to get the file name at the current posi-
11627        tion. Then step back. */
11628     pos = PerlDir_tell(dp);
11629     if ((dirent = PerlDir_read(dp))) {
11630         len = d_namlen(dirent);
11631         if (len <= sizeof smallbuf) name = smallbuf;
11632         else Newx(name, len, char);
11633         Move(dirent->d_name, name, len, char);
11634     }
11635     PerlDir_seek(dp, pos);
11636
11637     /* Iterate through the new dir handle, till we find a file with the
11638        right name. */
11639     if (!dirent) /* just before the end */
11640         for(;;) {
11641             pos = PerlDir_tell(ret);
11642             if (PerlDir_read(ret)) continue; /* not there yet */
11643             PerlDir_seek(ret, pos); /* step back */
11644             break;
11645         }
11646     else {
11647         const long pos0 = PerlDir_tell(ret);
11648         for(;;) {
11649             pos = PerlDir_tell(ret);
11650             if ((dirent = PerlDir_read(ret))) {
11651                 if (len == d_namlen(dirent)
11652                  && memEQ(name, dirent->d_name, len)) {
11653                     /* found it */
11654                     PerlDir_seek(ret, pos); /* step back */
11655                     break;
11656                 }
11657                 /* else we are not there yet; keep iterating */
11658             }
11659             else { /* This is not meant to happen. The best we can do is
11660                       reset the iterator to the beginning. */
11661                 PerlDir_seek(ret, pos0);
11662                 break;
11663             }
11664         }
11665     }
11666 #undef d_namlen
11667
11668     if (name && name != smallbuf)
11669         Safefree(name);
11670 #endif
11671
11672 #ifdef WIN32
11673     ret = win32_dirp_dup(dp, param);
11674 #endif
11675
11676     /* pop it in the pointer table */
11677     if (ret)
11678         ptr_table_store(PL_ptr_table, dp, ret);
11679
11680     return ret;
11681 }
11682
11683 /* duplicate a typeglob */
11684
11685 GP *
11686 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11687 {
11688     GP *ret;
11689
11690     PERL_ARGS_ASSERT_GP_DUP;
11691
11692     if (!gp)
11693         return (GP*)NULL;
11694     /* look for it in the table first */
11695     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11696     if (ret)
11697         return ret;
11698
11699     /* create anew and remember what it is */
11700     Newxz(ret, 1, GP);
11701     ptr_table_store(PL_ptr_table, gp, ret);
11702
11703     /* clone */
11704     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11705        on Newxz() to do this for us.  */
11706     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11707     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11708     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11709     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11710     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11711     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11712     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11713     ret->gp_cvgen       = gp->gp_cvgen;
11714     ret->gp_line        = gp->gp_line;
11715     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11716     return ret;
11717 }
11718
11719 /* duplicate a chain of magic */
11720
11721 MAGIC *
11722 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11723 {
11724     MAGIC *mgret = NULL;
11725     MAGIC **mgprev_p = &mgret;
11726
11727     PERL_ARGS_ASSERT_MG_DUP;
11728
11729     for (; mg; mg = mg->mg_moremagic) {
11730         MAGIC *nmg;
11731
11732         if ((param->flags & CLONEf_JOIN_IN)
11733                 && mg->mg_type == PERL_MAGIC_backref)
11734             /* when joining, we let the individual SVs add themselves to
11735              * backref as needed. */
11736             continue;
11737
11738         Newx(nmg, 1, MAGIC);
11739         *mgprev_p = nmg;
11740         mgprev_p = &(nmg->mg_moremagic);
11741
11742         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11743            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11744            from the original commit adding Perl_mg_dup() - revision 4538.
11745            Similarly there is the annotation "XXX random ptr?" next to the
11746            assignment to nmg->mg_ptr.  */
11747         *nmg = *mg;
11748
11749         /* FIXME for plugins
11750         if (nmg->mg_type == PERL_MAGIC_qr) {
11751             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11752         }
11753         else
11754         */
11755         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11756                           ? nmg->mg_type == PERL_MAGIC_backref
11757                                 /* The backref AV has its reference
11758                                  * count deliberately bumped by 1 */
11759                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11760                                                     nmg->mg_obj, param))
11761                                 : sv_dup_inc(nmg->mg_obj, param)
11762                           : sv_dup(nmg->mg_obj, param);
11763
11764         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11765             if (nmg->mg_len > 0) {
11766                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11767                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11768                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11769                 {
11770                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11771                     sv_dup_inc_multiple((SV**)(namtp->table),
11772                                         (SV**)(namtp->table), NofAMmeth, param);
11773                 }
11774             }
11775             else if (nmg->mg_len == HEf_SVKEY)
11776                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11777         }
11778         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11779             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11780         }
11781     }
11782     return mgret;
11783 }
11784
11785 #endif /* USE_ITHREADS */
11786
11787 struct ptr_tbl_arena {
11788     struct ptr_tbl_arena *next;
11789     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11790 };
11791
11792 /* create a new pointer-mapping table */
11793
11794 PTR_TBL_t *
11795 Perl_ptr_table_new(pTHX)
11796 {
11797     PTR_TBL_t *tbl;
11798     PERL_UNUSED_CONTEXT;
11799
11800     Newx(tbl, 1, PTR_TBL_t);
11801     tbl->tbl_max        = 511;
11802     tbl->tbl_items      = 0;
11803     tbl->tbl_arena      = NULL;
11804     tbl->tbl_arena_next = NULL;
11805     tbl->tbl_arena_end  = NULL;
11806     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11807     return tbl;
11808 }
11809
11810 #define PTR_TABLE_HASH(ptr) \
11811   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11812
11813 /* map an existing pointer using a table */
11814
11815 STATIC PTR_TBL_ENT_t *
11816 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11817 {
11818     PTR_TBL_ENT_t *tblent;
11819     const UV hash = PTR_TABLE_HASH(sv);
11820
11821     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11822
11823     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11824     for (; tblent; tblent = tblent->next) {
11825         if (tblent->oldval == sv)
11826             return tblent;
11827     }
11828     return NULL;
11829 }
11830
11831 void *
11832 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11833 {
11834     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11835
11836     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11837     PERL_UNUSED_CONTEXT;
11838
11839     return tblent ? tblent->newval : NULL;
11840 }
11841
11842 /* add a new entry to a pointer-mapping table */
11843
11844 void
11845 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11846 {
11847     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11848
11849     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11850     PERL_UNUSED_CONTEXT;
11851
11852     if (tblent) {
11853         tblent->newval = newsv;
11854     } else {
11855         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11856
11857         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11858             struct ptr_tbl_arena *new_arena;
11859
11860             Newx(new_arena, 1, struct ptr_tbl_arena);
11861             new_arena->next = tbl->tbl_arena;
11862             tbl->tbl_arena = new_arena;
11863             tbl->tbl_arena_next = new_arena->array;
11864             tbl->tbl_arena_end = new_arena->array
11865                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11866         }
11867
11868         tblent = tbl->tbl_arena_next++;
11869
11870         tblent->oldval = oldsv;
11871         tblent->newval = newsv;
11872         tblent->next = tbl->tbl_ary[entry];
11873         tbl->tbl_ary[entry] = tblent;
11874         tbl->tbl_items++;
11875         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11876             ptr_table_split(tbl);
11877     }
11878 }
11879
11880 /* double the hash bucket size of an existing ptr table */
11881
11882 void
11883 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11884 {
11885     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11886     const UV oldsize = tbl->tbl_max + 1;
11887     UV newsize = oldsize * 2;
11888     UV i;
11889
11890     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11891     PERL_UNUSED_CONTEXT;
11892
11893     Renew(ary, newsize, PTR_TBL_ENT_t*);
11894     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11895     tbl->tbl_max = --newsize;
11896     tbl->tbl_ary = ary;
11897     for (i=0; i < oldsize; i++, ary++) {
11898         PTR_TBL_ENT_t **entp = ary;
11899         PTR_TBL_ENT_t *ent = *ary;
11900         PTR_TBL_ENT_t **curentp;
11901         if (!ent)
11902             continue;
11903         curentp = ary + oldsize;
11904         do {
11905             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11906                 *entp = ent->next;
11907                 ent->next = *curentp;
11908                 *curentp = ent;
11909             }
11910             else
11911                 entp = &ent->next;
11912             ent = *entp;
11913         } while (ent);
11914     }
11915 }
11916
11917 /* remove all the entries from a ptr table */
11918 /* Deprecated - will be removed post 5.14 */
11919
11920 void
11921 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11922 {
11923     if (tbl && tbl->tbl_items) {
11924         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11925
11926         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11927
11928         while (arena) {
11929             struct ptr_tbl_arena *next = arena->next;
11930
11931             Safefree(arena);
11932             arena = next;
11933         };
11934
11935         tbl->tbl_items = 0;
11936         tbl->tbl_arena = NULL;
11937         tbl->tbl_arena_next = NULL;
11938         tbl->tbl_arena_end = NULL;
11939     }
11940 }
11941
11942 /* clear and free a ptr table */
11943
11944 void
11945 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11946 {
11947     struct ptr_tbl_arena *arena;
11948
11949     if (!tbl) {
11950         return;
11951     }
11952
11953     arena = tbl->tbl_arena;
11954
11955     while (arena) {
11956         struct ptr_tbl_arena *next = arena->next;
11957
11958         Safefree(arena);
11959         arena = next;
11960     }
11961
11962     Safefree(tbl->tbl_ary);
11963     Safefree(tbl);
11964 }
11965
11966 #if defined(USE_ITHREADS)
11967
11968 void
11969 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11970 {
11971     PERL_ARGS_ASSERT_RVPV_DUP;
11972
11973     assert(!isREGEXP(sstr));
11974     if (SvROK(sstr)) {
11975         if (SvWEAKREF(sstr)) {
11976             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11977             if (param->flags & CLONEf_JOIN_IN) {
11978                 /* if joining, we add any back references individually rather
11979                  * than copying the whole backref array */
11980                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11981             }
11982         }
11983         else
11984             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11985     }
11986     else if (SvPVX_const(sstr)) {
11987         /* Has something there */
11988         if (SvLEN(sstr)) {
11989             /* Normal PV - clone whole allocated space */
11990             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11991             /* sstr may not be that normal, but actually copy on write.
11992                But we are a true, independent SV, so:  */
11993             SvIsCOW_off(dstr);
11994         }
11995         else {
11996             /* Special case - not normally malloced for some reason */
11997             if (isGV_with_GP(sstr)) {
11998                 /* Don't need to do anything here.  */
11999             }
12000             else if ((SvIsCOW(sstr))) {
12001                 /* A "shared" PV - clone it as "shared" PV */
12002                 SvPV_set(dstr,
12003                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12004                                          param)));
12005             }
12006             else {
12007                 /* Some other special case - random pointer */
12008                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12009             }
12010         }
12011     }
12012     else {
12013         /* Copy the NULL */
12014         SvPV_set(dstr, NULL);
12015     }
12016 }
12017
12018 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12019 static SV **
12020 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12021                       SSize_t items, CLONE_PARAMS *const param)
12022 {
12023     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12024
12025     while (items-- > 0) {
12026         *dest++ = sv_dup_inc(*source++, param);
12027     }
12028
12029     return dest;
12030 }
12031
12032 /* duplicate an SV of any type (including AV, HV etc) */
12033
12034 static SV *
12035 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12036 {
12037     dVAR;
12038     SV *dstr;
12039
12040     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12041
12042     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12043 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12044         abort();
12045 #endif
12046         return NULL;
12047     }
12048     /* look for it in the table first */
12049     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12050     if (dstr)
12051         return dstr;
12052
12053     if(param->flags & CLONEf_JOIN_IN) {
12054         /** We are joining here so we don't want do clone
12055             something that is bad **/
12056         if (SvTYPE(sstr) == SVt_PVHV) {
12057             const HEK * const hvname = HvNAME_HEK(sstr);
12058             if (hvname) {
12059                 /** don't clone stashes if they already exist **/
12060                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12061                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12062                 ptr_table_store(PL_ptr_table, sstr, dstr);
12063                 return dstr;
12064             }
12065         }
12066         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12067             HV *stash = GvSTASH(sstr);
12068             const HEK * hvname;
12069             if (stash && (hvname = HvNAME_HEK(stash))) {
12070                 /** don't clone GVs if they already exist **/
12071                 SV **svp;
12072                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12073                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12074                 svp = hv_fetch(
12075                         stash, GvNAME(sstr),
12076                         GvNAMEUTF8(sstr)
12077                             ? -GvNAMELEN(sstr)
12078                             :  GvNAMELEN(sstr),
12079                         0
12080                       );
12081                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12082                     ptr_table_store(PL_ptr_table, sstr, *svp);
12083                     return *svp;
12084                 }
12085             }
12086         }
12087     }
12088
12089     /* create anew and remember what it is */
12090     new_SV(dstr);
12091
12092 #ifdef DEBUG_LEAKING_SCALARS
12093     dstr->sv_debug_optype = sstr->sv_debug_optype;
12094     dstr->sv_debug_line = sstr->sv_debug_line;
12095     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12096     dstr->sv_debug_parent = (SV*)sstr;
12097     FREE_SV_DEBUG_FILE(dstr);
12098     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12099 #endif
12100
12101     ptr_table_store(PL_ptr_table, sstr, dstr);
12102
12103     /* clone */
12104     SvFLAGS(dstr)       = SvFLAGS(sstr);
12105     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12106     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12107
12108 #ifdef DEBUGGING
12109     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12110         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12111                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12112 #endif
12113
12114     /* don't clone objects whose class has asked us not to */
12115     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12116         SvFLAGS(dstr) = 0;
12117         return dstr;
12118     }
12119
12120     switch (SvTYPE(sstr)) {
12121     case SVt_NULL:
12122         SvANY(dstr)     = NULL;
12123         break;
12124     case SVt_IV:
12125         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12126         if(SvROK(sstr)) {
12127             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12128         } else {
12129             SvIV_set(dstr, SvIVX(sstr));
12130         }
12131         break;
12132     case SVt_NV:
12133         SvANY(dstr)     = new_XNV();
12134         SvNV_set(dstr, SvNVX(sstr));
12135         break;
12136         /* case SVt_BIND: */
12137     default:
12138         {
12139             /* These are all the types that need complex bodies allocating.  */
12140             void *new_body;
12141             const svtype sv_type = SvTYPE(sstr);
12142             const struct body_details *const sv_type_details
12143                 = bodies_by_type + sv_type;
12144
12145             switch (sv_type) {
12146             default:
12147                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12148                 break;
12149
12150             case SVt_PVGV:
12151             case SVt_PVIO:
12152             case SVt_PVFM:
12153             case SVt_PVHV:
12154             case SVt_PVAV:
12155             case SVt_PVCV:
12156             case SVt_PVLV:
12157             case SVt_REGEXP:
12158             case SVt_PVMG:
12159             case SVt_PVNV:
12160             case SVt_PVIV:
12161             case SVt_PV:
12162                 assert(sv_type_details->body_size);
12163                 if (sv_type_details->arena) {
12164                     new_body_inline(new_body, sv_type);
12165                     new_body
12166                         = (void*)((char*)new_body - sv_type_details->offset);
12167                 } else {
12168                     new_body = new_NOARENA(sv_type_details);
12169                 }
12170             }
12171             assert(new_body);
12172             SvANY(dstr) = new_body;
12173
12174 #ifndef PURIFY
12175             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12176                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12177                  sv_type_details->copy, char);
12178 #else
12179             Copy(((char*)SvANY(sstr)),
12180                  ((char*)SvANY(dstr)),
12181                  sv_type_details->body_size + sv_type_details->offset, char);
12182 #endif
12183
12184             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12185                 && !isGV_with_GP(dstr)
12186                 && !isREGEXP(dstr)
12187                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12188                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12189
12190             /* The Copy above means that all the source (unduplicated) pointers
12191                are now in the destination.  We can check the flags and the
12192                pointers in either, but it's possible that there's less cache
12193                missing by always going for the destination.
12194                FIXME - instrument and check that assumption  */
12195             if (sv_type >= SVt_PVMG) {
12196                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12197                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12198                 } else if (SvMAGIC(dstr))
12199                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12200                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12201                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12202                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12203             }
12204
12205             /* The cast silences a GCC warning about unhandled types.  */
12206             switch ((int)sv_type) {
12207             case SVt_PV:
12208                 break;
12209             case SVt_PVIV:
12210                 break;
12211             case SVt_PVNV:
12212                 break;
12213             case SVt_PVMG:
12214                 break;
12215             case SVt_REGEXP:
12216               duprex:
12217                 /* FIXME for plugins */
12218                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12219                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12220                 break;
12221             case SVt_PVLV:
12222                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12223                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12224                     LvTARG(dstr) = dstr;
12225                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12226                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12227                 else
12228                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12229                 if (isREGEXP(sstr)) goto duprex;
12230             case SVt_PVGV:
12231                 /* non-GP case already handled above */
12232                 if(isGV_with_GP(sstr)) {
12233                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12234                     /* Don't call sv_add_backref here as it's going to be
12235                        created as part of the magic cloning of the symbol
12236                        table--unless this is during a join and the stash
12237                        is not actually being cloned.  */
12238                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12239                        at the point of this comment.  */
12240                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12241                     if (param->flags & CLONEf_JOIN_IN)
12242                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12243                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12244                     (void)GpREFCNT_inc(GvGP(dstr));
12245                 }
12246                 break;
12247             case SVt_PVIO:
12248                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12249                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12250                     /* I have no idea why fake dirp (rsfps)
12251                        should be treated differently but otherwise
12252                        we end up with leaks -- sky*/
12253                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12254                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12255                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12256                 } else {
12257                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12258                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12259                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12260                     if (IoDIRP(dstr)) {
12261                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12262                     } else {
12263                         NOOP;
12264                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12265                     }
12266                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12267                 }
12268                 if (IoOFP(dstr) == IoIFP(sstr))
12269                     IoOFP(dstr) = IoIFP(dstr);
12270                 else
12271                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12272                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12273                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12274                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12275                 break;
12276             case SVt_PVAV:
12277                 /* avoid cloning an empty array */
12278                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12279                     SV **dst_ary, **src_ary;
12280                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12281
12282                     src_ary = AvARRAY((const AV *)sstr);
12283                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12284                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12285                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12286                     AvALLOC((const AV *)dstr) = dst_ary;
12287                     if (AvREAL((const AV *)sstr)) {
12288                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12289                                                       param);
12290                     }
12291                     else {
12292                         while (items-- > 0)
12293                             *dst_ary++ = sv_dup(*src_ary++, param);
12294                     }
12295                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12296                     while (items-- > 0) {
12297                         *dst_ary++ = &PL_sv_undef;
12298                     }
12299                 }
12300                 else {
12301                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12302                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12303                     AvMAX(  (const AV *)dstr)   = -1;
12304                     AvFILLp((const AV *)dstr)   = -1;
12305                 }
12306                 break;
12307             case SVt_PVHV:
12308                 if (HvARRAY((const HV *)sstr)) {
12309                     STRLEN i = 0;
12310                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12311                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12312                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12313                     char *darray;
12314                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12315                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12316                         char);
12317                     HvARRAY(dstr) = (HE**)darray;
12318                     while (i <= sxhv->xhv_max) {
12319                         const HE * const source = HvARRAY(sstr)[i];
12320                         HvARRAY(dstr)[i] = source
12321                             ? he_dup(source, sharekeys, param) : 0;
12322                         ++i;
12323                     }
12324                     if (SvOOK(sstr)) {
12325                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12326                         struct xpvhv_aux * const daux = HvAUX(dstr);
12327                         /* This flag isn't copied.  */
12328                         SvOOK_on(dstr);
12329
12330                         if (saux->xhv_name_count) {
12331                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12332                             const I32 count
12333                              = saux->xhv_name_count < 0
12334                                 ? -saux->xhv_name_count
12335                                 :  saux->xhv_name_count;
12336                             HEK **shekp = sname + count;
12337                             HEK **dhekp;
12338                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12339                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12340                             while (shekp-- > sname) {
12341                                 dhekp--;
12342                                 *dhekp = hek_dup(*shekp, param);
12343                             }
12344                         }
12345                         else {
12346                             daux->xhv_name_u.xhvnameu_name
12347                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12348                                           param);
12349                         }
12350                         daux->xhv_name_count = saux->xhv_name_count;
12351
12352                         daux->xhv_riter = saux->xhv_riter;
12353                         daux->xhv_eiter = saux->xhv_eiter
12354                             ? he_dup(saux->xhv_eiter,
12355                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12356                         /* backref array needs refcnt=2; see sv_add_backref */
12357                         daux->xhv_backreferences =
12358                             (param->flags & CLONEf_JOIN_IN)
12359                                 /* when joining, we let the individual GVs and
12360                                  * CVs add themselves to backref as
12361                                  * needed. This avoids pulling in stuff
12362                                  * that isn't required, and simplifies the
12363                                  * case where stashes aren't cloned back
12364                                  * if they already exist in the parent
12365                                  * thread */
12366                             ? NULL
12367                             : saux->xhv_backreferences
12368                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12369                                     ? MUTABLE_AV(SvREFCNT_inc(
12370                                           sv_dup_inc((const SV *)
12371                                             saux->xhv_backreferences, param)))
12372                                     : MUTABLE_AV(sv_dup((const SV *)
12373                                             saux->xhv_backreferences, param))
12374                                 : 0;
12375
12376                         daux->xhv_mro_meta = saux->xhv_mro_meta
12377                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12378                             : 0;
12379                         daux->xhv_super = NULL;
12380
12381                         /* Record stashes for possible cloning in Perl_clone(). */
12382                         if (HvNAME(sstr))
12383                             av_push(param->stashes, dstr);
12384                     }
12385                 }
12386                 else
12387                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12388                 break;
12389             case SVt_PVCV:
12390                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12391                     CvDEPTH(dstr) = 0;
12392                 }
12393                 /*FALLTHROUGH*/
12394             case SVt_PVFM:
12395                 /* NOTE: not refcounted */
12396                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12397                     hv_dup(CvSTASH(dstr), param);
12398                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12399                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12400                 if (!CvISXSUB(dstr)) {
12401                     OP_REFCNT_LOCK;
12402                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12403                     OP_REFCNT_UNLOCK;
12404                     CvSLABBED_off(dstr);
12405                 } else if (CvCONST(dstr)) {
12406                     CvXSUBANY(dstr).any_ptr =
12407                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12408                 }
12409                 assert(!CvSLABBED(dstr));
12410                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12411                 if (CvNAMED(dstr))
12412                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12413                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12414                 /* don't dup if copying back - CvGV isn't refcounted, so the
12415                  * duped GV may never be freed. A bit of a hack! DAPM */
12416                 else
12417                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12418                     CvCVGV_RC(dstr)
12419                     ? gv_dup_inc(CvGV(sstr), param)
12420                     : (param->flags & CLONEf_JOIN_IN)
12421                         ? NULL
12422                         : gv_dup(CvGV(sstr), param);
12423
12424                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12425                 CvOUTSIDE(dstr) =
12426                     CvWEAKOUTSIDE(sstr)
12427                     ? cv_dup(    CvOUTSIDE(dstr), param)
12428                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12429                 break;
12430             }
12431         }
12432     }
12433
12434     return dstr;
12435  }
12436
12437 SV *
12438 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12439 {
12440     PERL_ARGS_ASSERT_SV_DUP_INC;
12441     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12442 }
12443
12444 SV *
12445 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12446 {
12447     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12448     PERL_ARGS_ASSERT_SV_DUP;
12449
12450     /* Track every SV that (at least initially) had a reference count of 0.
12451        We need to do this by holding an actual reference to it in this array.
12452        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12453        (akin to the stashes hash, and the perl stack), we come unstuck if
12454        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12455        thread) is manipulated in a CLONE method, because CLONE runs before the
12456        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12457        (and fix things up by giving each a reference via the temps stack).
12458        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12459        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12460        before the walk of unreferenced happens and a reference to that is SV
12461        added to the temps stack. At which point we have the same SV considered
12462        to be in use, and free to be re-used. Not good.
12463     */
12464     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12465         assert(param->unreferenced);
12466         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12467     }
12468
12469     return dstr;
12470 }
12471
12472 /* duplicate a context */
12473
12474 PERL_CONTEXT *
12475 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12476 {
12477     PERL_CONTEXT *ncxs;
12478
12479     PERL_ARGS_ASSERT_CX_DUP;
12480
12481     if (!cxs)
12482         return (PERL_CONTEXT*)NULL;
12483
12484     /* look for it in the table first */
12485     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12486     if (ncxs)
12487         return ncxs;
12488
12489     /* create anew and remember what it is */
12490     Newx(ncxs, max + 1, PERL_CONTEXT);
12491     ptr_table_store(PL_ptr_table, cxs, ncxs);
12492     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12493
12494     while (ix >= 0) {
12495         PERL_CONTEXT * const ncx = &ncxs[ix];
12496         if (CxTYPE(ncx) == CXt_SUBST) {
12497             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12498         }
12499         else {
12500             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12501             switch (CxTYPE(ncx)) {
12502             case CXt_SUB:
12503                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12504                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12505                                            : cv_dup(ncx->blk_sub.cv,param));
12506                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12507                                            ? av_dup_inc(ncx->blk_sub.argarray,
12508                                                         param)
12509                                            : NULL);
12510                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12511                                                      param);
12512                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12513                                            ncx->blk_sub.oldcomppad);
12514                 break;
12515             case CXt_EVAL:
12516                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12517                                                       param);
12518                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12519                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12520                 break;
12521             case CXt_LOOP_LAZYSV:
12522                 ncx->blk_loop.state_u.lazysv.end
12523                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12524                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12525                    actually being the same function, and order equivalence of
12526                    the two unions.
12527                    We can assert the later [but only at run time :-(]  */
12528                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12529                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12530             case CXt_LOOP_FOR:
12531                 ncx->blk_loop.state_u.ary.ary
12532                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12533             case CXt_LOOP_LAZYIV:
12534             case CXt_LOOP_PLAIN:
12535                 if (CxPADLOOP(ncx)) {
12536                     ncx->blk_loop.itervar_u.oldcomppad
12537                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12538                                         ncx->blk_loop.itervar_u.oldcomppad);
12539                 } else {
12540                     ncx->blk_loop.itervar_u.gv
12541                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12542                                     param);
12543                 }
12544                 break;
12545             case CXt_FORMAT:
12546                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12547                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12548                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12549                                                      param);
12550                 break;
12551             case CXt_BLOCK:
12552             case CXt_NULL:
12553             case CXt_WHEN:
12554             case CXt_GIVEN:
12555                 break;
12556             }
12557         }
12558         --ix;
12559     }
12560     return ncxs;
12561 }
12562
12563 /* duplicate a stack info structure */
12564
12565 PERL_SI *
12566 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12567 {
12568     PERL_SI *nsi;
12569
12570     PERL_ARGS_ASSERT_SI_DUP;
12571
12572     if (!si)
12573         return (PERL_SI*)NULL;
12574
12575     /* look for it in the table first */
12576     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12577     if (nsi)
12578         return nsi;
12579
12580     /* create anew and remember what it is */
12581     Newxz(nsi, 1, PERL_SI);
12582     ptr_table_store(PL_ptr_table, si, nsi);
12583
12584     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12585     nsi->si_cxix        = si->si_cxix;
12586     nsi->si_cxmax       = si->si_cxmax;
12587     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12588     nsi->si_type        = si->si_type;
12589     nsi->si_prev        = si_dup(si->si_prev, param);
12590     nsi->si_next        = si_dup(si->si_next, param);
12591     nsi->si_markoff     = si->si_markoff;
12592
12593     return nsi;
12594 }
12595
12596 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12597 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12598 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12599 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12600 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12601 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12602 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12603 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12604 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12605 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12606 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12607 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12608 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12609 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12610 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12611 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12612
12613 /* XXXXX todo */
12614 #define pv_dup_inc(p)   SAVEPV(p)
12615 #define pv_dup(p)       SAVEPV(p)
12616 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12617
12618 /* map any object to the new equivent - either something in the
12619  * ptr table, or something in the interpreter structure
12620  */
12621
12622 void *
12623 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12624 {
12625     void *ret;
12626
12627     PERL_ARGS_ASSERT_ANY_DUP;
12628
12629     if (!v)
12630         return (void*)NULL;
12631
12632     /* look for it in the table first */
12633     ret = ptr_table_fetch(PL_ptr_table, v);
12634     if (ret)
12635         return ret;
12636
12637     /* see if it is part of the interpreter structure */
12638     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12639         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12640     else {
12641         ret = v;
12642     }
12643
12644     return ret;
12645 }
12646
12647 /* duplicate the save stack */
12648
12649 ANY *
12650 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12651 {
12652     dVAR;
12653     ANY * const ss      = proto_perl->Isavestack;
12654     const I32 max       = proto_perl->Isavestack_max;
12655     I32 ix              = proto_perl->Isavestack_ix;
12656     ANY *nss;
12657     const SV *sv;
12658     const GV *gv;
12659     const AV *av;
12660     const HV *hv;
12661     void* ptr;
12662     int intval;
12663     long longval;
12664     GP *gp;
12665     IV iv;
12666     I32 i;
12667     char *c = NULL;
12668     void (*dptr) (void*);
12669     void (*dxptr) (pTHX_ void*);
12670
12671     PERL_ARGS_ASSERT_SS_DUP;
12672
12673     Newxz(nss, max, ANY);
12674
12675     while (ix > 0) {
12676         const UV uv = POPUV(ss,ix);
12677         const U8 type = (U8)uv & SAVE_MASK;
12678
12679         TOPUV(nss,ix) = uv;
12680         switch (type) {
12681         case SAVEt_CLEARSV:
12682         case SAVEt_CLEARPADRANGE:
12683             break;
12684         case SAVEt_HELEM:               /* hash element */
12685             sv = (const SV *)POPPTR(ss,ix);
12686             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12687             /* fall through */
12688         case SAVEt_ITEM:                        /* normal string */
12689         case SAVEt_GVSV:                        /* scalar slot in GV */
12690         case SAVEt_SV:                          /* scalar reference */
12691             sv = (const SV *)POPPTR(ss,ix);
12692             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12693             /* fall through */
12694         case SAVEt_FREESV:
12695         case SAVEt_MORTALIZESV:
12696             sv = (const SV *)POPPTR(ss,ix);
12697             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12698             break;
12699         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12700             c = (char*)POPPTR(ss,ix);
12701             TOPPTR(nss,ix) = savesharedpv(c);
12702             ptr = POPPTR(ss,ix);
12703             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12704             break;
12705         case SAVEt_GENERIC_SVREF:               /* generic sv */
12706         case SAVEt_SVREF:                       /* scalar reference */
12707             sv = (const SV *)POPPTR(ss,ix);
12708             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12709             ptr = POPPTR(ss,ix);
12710             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12711             break;
12712         case SAVEt_GVSLOT:              /* any slot in GV */
12713             sv = (const SV *)POPPTR(ss,ix);
12714             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12715             ptr = POPPTR(ss,ix);
12716             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12717             sv = (const SV *)POPPTR(ss,ix);
12718             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12719             break;
12720         case SAVEt_HV:                          /* hash reference */
12721         case SAVEt_AV:                          /* array reference */
12722             sv = (const SV *) POPPTR(ss,ix);
12723             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12724             /* fall through */
12725         case SAVEt_COMPPAD:
12726         case SAVEt_NSTAB:
12727             sv = (const SV *) POPPTR(ss,ix);
12728             TOPPTR(nss,ix) = sv_dup(sv, param);
12729             break;
12730         case SAVEt_INT:                         /* int reference */
12731             ptr = POPPTR(ss,ix);
12732             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12733             intval = (int)POPINT(ss,ix);
12734             TOPINT(nss,ix) = intval;
12735             break;
12736         case SAVEt_LONG:                        /* long reference */
12737             ptr = POPPTR(ss,ix);
12738             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12739             longval = (long)POPLONG(ss,ix);
12740             TOPLONG(nss,ix) = longval;
12741             break;
12742         case SAVEt_I32:                         /* I32 reference */
12743             ptr = POPPTR(ss,ix);
12744             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12745             i = POPINT(ss,ix);
12746             TOPINT(nss,ix) = i;
12747             break;
12748         case SAVEt_IV:                          /* IV reference */
12749             ptr = POPPTR(ss,ix);
12750             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12751             iv = POPIV(ss,ix);
12752             TOPIV(nss,ix) = iv;
12753             break;
12754         case SAVEt_HPTR:                        /* HV* reference */
12755         case SAVEt_APTR:                        /* AV* reference */
12756         case SAVEt_SPTR:                        /* SV* reference */
12757             ptr = POPPTR(ss,ix);
12758             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12759             sv = (const SV *)POPPTR(ss,ix);
12760             TOPPTR(nss,ix) = sv_dup(sv, param);
12761             break;
12762         case SAVEt_VPTR:                        /* random* reference */
12763             ptr = POPPTR(ss,ix);
12764             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12765             /* Fall through */
12766         case SAVEt_INT_SMALL:
12767         case SAVEt_I32_SMALL:
12768         case SAVEt_I16:                         /* I16 reference */
12769         case SAVEt_I8:                          /* I8 reference */
12770         case SAVEt_BOOL:
12771             ptr = POPPTR(ss,ix);
12772             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12773             break;
12774         case SAVEt_GENERIC_PVREF:               /* generic char* */
12775         case SAVEt_PPTR:                        /* char* reference */
12776             ptr = POPPTR(ss,ix);
12777             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12778             c = (char*)POPPTR(ss,ix);
12779             TOPPTR(nss,ix) = pv_dup(c);
12780             break;
12781         case SAVEt_GP:                          /* scalar reference */
12782             gp = (GP*)POPPTR(ss,ix);
12783             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12784             (void)GpREFCNT_inc(gp);
12785             gv = (const GV *)POPPTR(ss,ix);
12786             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12787             break;
12788         case SAVEt_FREEOP:
12789             ptr = POPPTR(ss,ix);
12790             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12791                 /* these are assumed to be refcounted properly */
12792                 OP *o;
12793                 switch (((OP*)ptr)->op_type) {
12794                 case OP_LEAVESUB:
12795                 case OP_LEAVESUBLV:
12796                 case OP_LEAVEEVAL:
12797                 case OP_LEAVE:
12798                 case OP_SCOPE:
12799                 case OP_LEAVEWRITE:
12800                     TOPPTR(nss,ix) = ptr;
12801                     o = (OP*)ptr;
12802                     OP_REFCNT_LOCK;
12803                     (void) OpREFCNT_inc(o);
12804                     OP_REFCNT_UNLOCK;
12805                     break;
12806                 default:
12807                     TOPPTR(nss,ix) = NULL;
12808                     break;
12809                 }
12810             }
12811             else
12812                 TOPPTR(nss,ix) = NULL;
12813             break;
12814         case SAVEt_FREECOPHH:
12815             ptr = POPPTR(ss,ix);
12816             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12817             break;
12818         case SAVEt_DELETE:
12819             hv = (const HV *)POPPTR(ss,ix);
12820             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12821             i = POPINT(ss,ix);
12822             TOPINT(nss,ix) = i;
12823             /* Fall through */
12824         case SAVEt_FREEPV:
12825             c = (char*)POPPTR(ss,ix);
12826             TOPPTR(nss,ix) = pv_dup_inc(c);
12827             break;
12828         case SAVEt_STACK_POS:           /* Position on Perl stack */
12829             i = POPINT(ss,ix);
12830             TOPINT(nss,ix) = i;
12831             break;
12832         case SAVEt_DESTRUCTOR:
12833             ptr = POPPTR(ss,ix);
12834             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12835             dptr = POPDPTR(ss,ix);
12836             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12837                                         any_dup(FPTR2DPTR(void *, dptr),
12838                                                 proto_perl));
12839             break;
12840         case SAVEt_DESTRUCTOR_X:
12841             ptr = POPPTR(ss,ix);
12842             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12843             dxptr = POPDXPTR(ss,ix);
12844             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12845                                          any_dup(FPTR2DPTR(void *, dxptr),
12846                                                  proto_perl));
12847             break;
12848         case SAVEt_REGCONTEXT:
12849         case SAVEt_ALLOC:
12850             ix -= uv >> SAVE_TIGHT_SHIFT;
12851             break;
12852         case SAVEt_AELEM:               /* array element */
12853             sv = (const SV *)POPPTR(ss,ix);
12854             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12855             i = POPINT(ss,ix);
12856             TOPINT(nss,ix) = i;
12857             av = (const AV *)POPPTR(ss,ix);
12858             TOPPTR(nss,ix) = av_dup_inc(av, param);
12859             break;
12860         case SAVEt_OP:
12861             ptr = POPPTR(ss,ix);
12862             TOPPTR(nss,ix) = ptr;
12863             break;
12864         case SAVEt_HINTS:
12865             ptr = POPPTR(ss,ix);
12866             ptr = cophh_copy((COPHH*)ptr);
12867             TOPPTR(nss,ix) = ptr;
12868             i = POPINT(ss,ix);
12869             TOPINT(nss,ix) = i;
12870             if (i & HINT_LOCALIZE_HH) {
12871                 hv = (const HV *)POPPTR(ss,ix);
12872                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12873             }
12874             break;
12875         case SAVEt_PADSV_AND_MORTALIZE:
12876             longval = (long)POPLONG(ss,ix);
12877             TOPLONG(nss,ix) = longval;
12878             ptr = POPPTR(ss,ix);
12879             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12880             sv = (const SV *)POPPTR(ss,ix);
12881             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12882             break;
12883         case SAVEt_SET_SVFLAGS:
12884             i = POPINT(ss,ix);
12885             TOPINT(nss,ix) = i;
12886             i = POPINT(ss,ix);
12887             TOPINT(nss,ix) = i;
12888             sv = (const SV *)POPPTR(ss,ix);
12889             TOPPTR(nss,ix) = sv_dup(sv, param);
12890             break;
12891         case SAVEt_RE_STATE:
12892             {
12893                 const struct re_save_state *const old_state
12894                     = (struct re_save_state *)
12895                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12896                 struct re_save_state *const new_state
12897                     = (struct re_save_state *)
12898                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12899
12900                 Copy(old_state, new_state, 1, struct re_save_state);
12901                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12902
12903                 new_state->re_state_bostr
12904                     = pv_dup(old_state->re_state_bostr);
12905                 new_state->re_state_regeol
12906                     = pv_dup(old_state->re_state_regeol);
12907 #ifdef PERL_ANY_COW
12908                 new_state->re_state_nrs
12909                     = sv_dup(old_state->re_state_nrs, param);
12910 #endif
12911                 new_state->re_state_reg_magic
12912                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12913                                proto_perl);
12914                 new_state->re_state_reg_oldcurpm
12915                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12916                               proto_perl);
12917                 new_state->re_state_reg_curpm
12918                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12919                                proto_perl);
12920                 new_state->re_state_reg_oldsaved
12921                     = pv_dup(old_state->re_state_reg_oldsaved);
12922                 new_state->re_state_reg_poscache
12923                     = pv_dup(old_state->re_state_reg_poscache);
12924                 new_state->re_state_reg_starttry
12925                     = pv_dup(old_state->re_state_reg_starttry);
12926                 break;
12927             }
12928         case SAVEt_COMPILE_WARNINGS:
12929             ptr = POPPTR(ss,ix);
12930             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12931             break;
12932         case SAVEt_PARSER:
12933             ptr = POPPTR(ss,ix);
12934             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12935             break;
12936         default:
12937             Perl_croak(aTHX_
12938                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12939         }
12940     }
12941
12942     return nss;
12943 }
12944
12945
12946 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12947  * flag to the result. This is done for each stash before cloning starts,
12948  * so we know which stashes want their objects cloned */
12949
12950 static void
12951 do_mark_cloneable_stash(pTHX_ SV *const sv)
12952 {
12953     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12954     if (hvname) {
12955         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12956         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12957         if (cloner && GvCV(cloner)) {
12958             dSP;
12959             UV status;
12960
12961             ENTER;
12962             SAVETMPS;
12963             PUSHMARK(SP);
12964             mXPUSHs(newSVhek(hvname));
12965             PUTBACK;
12966             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12967             SPAGAIN;
12968             status = POPu;
12969             PUTBACK;
12970             FREETMPS;
12971             LEAVE;
12972             if (status)
12973                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12974         }
12975     }
12976 }
12977
12978
12979
12980 /*
12981 =for apidoc perl_clone
12982
12983 Create and return a new interpreter by cloning the current one.
12984
12985 perl_clone takes these flags as parameters:
12986
12987 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12988 without it we only clone the data and zero the stacks,
12989 with it we copy the stacks and the new perl interpreter is
12990 ready to run at the exact same point as the previous one.
12991 The pseudo-fork code uses COPY_STACKS while the
12992 threads->create doesn't.
12993
12994 CLONEf_KEEP_PTR_TABLE -
12995 perl_clone keeps a ptr_table with the pointer of the old
12996 variable as a key and the new variable as a value,
12997 this allows it to check if something has been cloned and not
12998 clone it again but rather just use the value and increase the
12999 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13000 the ptr_table using the function
13001 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13002 reason to keep it around is if you want to dup some of your own
13003 variable who are outside the graph perl scans, example of this
13004 code is in threads.xs create.
13005
13006 CLONEf_CLONE_HOST -
13007 This is a win32 thing, it is ignored on unix, it tells perls
13008 win32host code (which is c++) to clone itself, this is needed on
13009 win32 if you want to run two threads at the same time,
13010 if you just want to do some stuff in a separate perl interpreter
13011 and then throw it away and return to the original one,
13012 you don't need to do anything.
13013
13014 =cut
13015 */
13016
13017 /* XXX the above needs expanding by someone who actually understands it ! */
13018 EXTERN_C PerlInterpreter *
13019 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13020
13021 PerlInterpreter *
13022 perl_clone(PerlInterpreter *proto_perl, UV flags)
13023 {
13024    dVAR;
13025 #ifdef PERL_IMPLICIT_SYS
13026
13027     PERL_ARGS_ASSERT_PERL_CLONE;
13028
13029    /* perlhost.h so we need to call into it
13030    to clone the host, CPerlHost should have a c interface, sky */
13031
13032    if (flags & CLONEf_CLONE_HOST) {
13033        return perl_clone_host(proto_perl,flags);
13034    }
13035    return perl_clone_using(proto_perl, flags,
13036                             proto_perl->IMem,
13037                             proto_perl->IMemShared,
13038                             proto_perl->IMemParse,
13039                             proto_perl->IEnv,
13040                             proto_perl->IStdIO,
13041                             proto_perl->ILIO,
13042                             proto_perl->IDir,
13043                             proto_perl->ISock,
13044                             proto_perl->IProc);
13045 }
13046
13047 PerlInterpreter *
13048 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13049                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13050                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13051                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13052                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13053                  struct IPerlProc* ipP)
13054 {
13055     /* XXX many of the string copies here can be optimized if they're
13056      * constants; they need to be allocated as common memory and just
13057      * their pointers copied. */
13058
13059     IV i;
13060     CLONE_PARAMS clone_params;
13061     CLONE_PARAMS* const param = &clone_params;
13062
13063     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13064
13065     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13066 #else           /* !PERL_IMPLICIT_SYS */
13067     IV i;
13068     CLONE_PARAMS clone_params;
13069     CLONE_PARAMS* param = &clone_params;
13070     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13071
13072     PERL_ARGS_ASSERT_PERL_CLONE;
13073 #endif          /* PERL_IMPLICIT_SYS */
13074
13075     /* for each stash, determine whether its objects should be cloned */
13076     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13077     PERL_SET_THX(my_perl);
13078
13079 #ifdef DEBUGGING
13080     PoisonNew(my_perl, 1, PerlInterpreter);
13081     PL_op = NULL;
13082     PL_curcop = NULL;
13083     PL_defstash = NULL; /* may be used by perl malloc() */
13084     PL_markstack = 0;
13085     PL_scopestack = 0;
13086     PL_scopestack_name = 0;
13087     PL_savestack = 0;
13088     PL_savestack_ix = 0;
13089     PL_savestack_max = -1;
13090     PL_sig_pending = 0;
13091     PL_parser = NULL;
13092     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13093 #  ifdef DEBUG_LEAKING_SCALARS
13094     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13095 #  endif
13096 #else   /* !DEBUGGING */
13097     Zero(my_perl, 1, PerlInterpreter);
13098 #endif  /* DEBUGGING */
13099
13100 #ifdef PERL_IMPLICIT_SYS
13101     /* host pointers */
13102     PL_Mem              = ipM;
13103     PL_MemShared        = ipMS;
13104     PL_MemParse         = ipMP;
13105     PL_Env              = ipE;
13106     PL_StdIO            = ipStd;
13107     PL_LIO              = ipLIO;
13108     PL_Dir              = ipD;
13109     PL_Sock             = ipS;
13110     PL_Proc             = ipP;
13111 #endif          /* PERL_IMPLICIT_SYS */
13112
13113
13114     param->flags = flags;
13115     /* Nothing in the core code uses this, but we make it available to
13116        extensions (using mg_dup).  */
13117     param->proto_perl = proto_perl;
13118     /* Likely nothing will use this, but it is initialised to be consistent
13119        with Perl_clone_params_new().  */
13120     param->new_perl = my_perl;
13121     param->unreferenced = NULL;
13122
13123
13124     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13125
13126     PL_body_arenas = NULL;
13127     Zero(&PL_body_roots, 1, PL_body_roots);
13128     
13129     PL_sv_count         = 0;
13130     PL_sv_root          = NULL;
13131     PL_sv_arenaroot     = NULL;
13132
13133     PL_debug            = proto_perl->Idebug;
13134
13135     /* dbargs array probably holds garbage */
13136     PL_dbargs           = NULL;
13137
13138     PL_compiling = proto_perl->Icompiling;
13139
13140     /* pseudo environmental stuff */
13141     PL_origargc         = proto_perl->Iorigargc;
13142     PL_origargv         = proto_perl->Iorigargv;
13143
13144 #if !NO_TAINT_SUPPORT
13145     /* Set tainting stuff before PerlIO_debug can possibly get called */
13146     PL_tainting         = proto_perl->Itainting;
13147     PL_taint_warn       = proto_perl->Itaint_warn;
13148 #else
13149     PL_tainting         = FALSE;
13150     PL_taint_warn       = FALSE;
13151 #endif
13152
13153     PL_minus_c          = proto_perl->Iminus_c;
13154
13155     PL_localpatches     = proto_perl->Ilocalpatches;
13156     PL_splitstr         = proto_perl->Isplitstr;
13157     PL_minus_n          = proto_perl->Iminus_n;
13158     PL_minus_p          = proto_perl->Iminus_p;
13159     PL_minus_l          = proto_perl->Iminus_l;
13160     PL_minus_a          = proto_perl->Iminus_a;
13161     PL_minus_E          = proto_perl->Iminus_E;
13162     PL_minus_F          = proto_perl->Iminus_F;
13163     PL_doswitches       = proto_perl->Idoswitches;
13164     PL_dowarn           = proto_perl->Idowarn;
13165 #ifdef PERL_SAWAMPERSAND
13166     PL_sawampersand     = proto_perl->Isawampersand;
13167 #endif
13168     PL_unsafe           = proto_perl->Iunsafe;
13169     PL_perldb           = proto_perl->Iperldb;
13170     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13171     PL_exit_flags       = proto_perl->Iexit_flags;
13172
13173     /* XXX time(&PL_basetime) when asked for? */
13174     PL_basetime         = proto_perl->Ibasetime;
13175
13176     PL_maxsysfd         = proto_perl->Imaxsysfd;
13177     PL_statusvalue      = proto_perl->Istatusvalue;
13178 #ifdef VMS
13179     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13180 #else
13181     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13182 #endif
13183
13184     /* RE engine related */
13185     Zero(&PL_reg_state, 1, struct re_save_state);
13186     PL_regmatch_slab    = NULL;
13187
13188     PL_sub_generation   = proto_perl->Isub_generation;
13189
13190     /* funky return mechanisms */
13191     PL_forkprocess      = proto_perl->Iforkprocess;
13192
13193     /* internal state */
13194     PL_maxo             = proto_perl->Imaxo;
13195
13196     PL_main_start       = proto_perl->Imain_start;
13197     PL_eval_root        = proto_perl->Ieval_root;
13198     PL_eval_start       = proto_perl->Ieval_start;
13199
13200     PL_filemode         = proto_perl->Ifilemode;
13201     PL_lastfd           = proto_perl->Ilastfd;
13202     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13203     PL_Argv             = NULL;
13204     PL_Cmd              = NULL;
13205     PL_gensym           = proto_perl->Igensym;
13206
13207     PL_laststatval      = proto_perl->Ilaststatval;
13208     PL_laststype        = proto_perl->Ilaststype;
13209     PL_mess_sv          = NULL;
13210
13211     PL_profiledata      = NULL;
13212
13213     PL_generation       = proto_perl->Igeneration;
13214
13215     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13216     PL_in_clean_all     = proto_perl->Iin_clean_all;
13217
13218     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13219     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13220     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13221     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13222     PL_nomemok          = proto_perl->Inomemok;
13223     PL_an               = proto_perl->Ian;
13224     PL_evalseq          = proto_perl->Ievalseq;
13225     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13226     PL_origalen         = proto_perl->Iorigalen;
13227
13228     PL_sighandlerp      = proto_perl->Isighandlerp;
13229
13230     PL_runops           = proto_perl->Irunops;
13231
13232     PL_subline          = proto_perl->Isubline;
13233
13234 #ifdef FCRYPT
13235     PL_cryptseen        = proto_perl->Icryptseen;
13236 #endif
13237
13238     PL_hints            = proto_perl->Ihints;
13239
13240 #ifdef USE_LOCALE_COLLATE
13241     PL_collation_ix     = proto_perl->Icollation_ix;
13242     PL_collation_standard       = proto_perl->Icollation_standard;
13243     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13244     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13245 #endif /* USE_LOCALE_COLLATE */
13246
13247 #ifdef USE_LOCALE_NUMERIC
13248     PL_numeric_standard = proto_perl->Inumeric_standard;
13249     PL_numeric_local    = proto_perl->Inumeric_local;
13250 #endif /* !USE_LOCALE_NUMERIC */
13251
13252     /* Did the locale setup indicate UTF-8? */
13253     PL_utf8locale       = proto_perl->Iutf8locale;
13254     /* Unicode features (see perlrun/-C) */
13255     PL_unicode          = proto_perl->Iunicode;
13256
13257     /* Pre-5.8 signals control */
13258     PL_signals          = proto_perl->Isignals;
13259
13260     /* times() ticks per second */
13261     PL_clocktick        = proto_perl->Iclocktick;
13262
13263     /* Recursion stopper for PerlIO_find_layer */
13264     PL_in_load_module   = proto_perl->Iin_load_module;
13265
13266     /* sort() routine */
13267     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13268
13269     /* Not really needed/useful since the reenrant_retint is "volatile",
13270      * but do it for consistency's sake. */
13271     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13272
13273     /* Hooks to shared SVs and locks. */
13274     PL_sharehook        = proto_perl->Isharehook;
13275     PL_lockhook         = proto_perl->Ilockhook;
13276     PL_unlockhook       = proto_perl->Iunlockhook;
13277     PL_threadhook       = proto_perl->Ithreadhook;
13278     PL_destroyhook      = proto_perl->Idestroyhook;
13279     PL_signalhook       = proto_perl->Isignalhook;
13280
13281     PL_globhook         = proto_perl->Iglobhook;
13282
13283     /* swatch cache */
13284     PL_last_swash_hv    = NULL; /* reinits on demand */
13285     PL_last_swash_klen  = 0;
13286     PL_last_swash_key[0]= '\0';
13287     PL_last_swash_tmps  = (U8*)NULL;
13288     PL_last_swash_slen  = 0;
13289
13290     PL_srand_called     = proto_perl->Isrand_called;
13291
13292     if (flags & CLONEf_COPY_STACKS) {
13293         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13294         PL_tmps_ix              = proto_perl->Itmps_ix;
13295         PL_tmps_max             = proto_perl->Itmps_max;
13296         PL_tmps_floor           = proto_perl->Itmps_floor;
13297
13298         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13299          * NOTE: unlike the others! */
13300         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13301         PL_scopestack_max       = proto_perl->Iscopestack_max;
13302
13303         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13304          * NOTE: unlike the others! */
13305         PL_savestack_ix         = proto_perl->Isavestack_ix;
13306         PL_savestack_max        = proto_perl->Isavestack_max;
13307     }
13308
13309     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13310     PL_top_env          = &PL_start_env;
13311
13312     PL_op               = proto_perl->Iop;
13313
13314     PL_Sv               = NULL;
13315     PL_Xpv              = (XPV*)NULL;
13316     my_perl->Ina        = proto_perl->Ina;
13317
13318     PL_statbuf          = proto_perl->Istatbuf;
13319     PL_statcache        = proto_perl->Istatcache;
13320
13321 #ifdef HAS_TIMES
13322     PL_timesbuf         = proto_perl->Itimesbuf;
13323 #endif
13324
13325 #if !NO_TAINT_SUPPORT
13326     PL_tainted          = proto_perl->Itainted;
13327 #else
13328     PL_tainted          = FALSE;
13329 #endif
13330     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13331
13332     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13333
13334     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13335     PL_restartop        = proto_perl->Irestartop;
13336     PL_in_eval          = proto_perl->Iin_eval;
13337     PL_delaymagic       = proto_perl->Idelaymagic;
13338     PL_phase            = proto_perl->Iphase;
13339     PL_localizing       = proto_perl->Ilocalizing;
13340
13341     PL_hv_fetch_ent_mh  = NULL;
13342     PL_modcount         = proto_perl->Imodcount;
13343     PL_lastgotoprobe    = NULL;
13344     PL_dumpindent       = proto_perl->Idumpindent;
13345
13346     PL_efloatbuf        = NULL;         /* reinits on demand */
13347     PL_efloatsize       = 0;                    /* reinits on demand */
13348
13349     /* regex stuff */
13350
13351     PL_regdummy         = proto_perl->Iregdummy;
13352     PL_colorset         = 0;            /* reinits PL_colors[] */
13353     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13354
13355     /* Pluggable optimizer */
13356     PL_peepp            = proto_perl->Ipeepp;
13357     PL_rpeepp           = proto_perl->Irpeepp;
13358     /* op_free() hook */
13359     PL_opfreehook       = proto_perl->Iopfreehook;
13360
13361 #ifdef USE_REENTRANT_API
13362     /* XXX: things like -Dm will segfault here in perlio, but doing
13363      *  PERL_SET_CONTEXT(proto_perl);
13364      * breaks too many other things
13365      */
13366     Perl_reentrant_init(aTHX);
13367 #endif
13368
13369     /* create SV map for pointer relocation */
13370     PL_ptr_table = ptr_table_new();
13371
13372     /* initialize these special pointers as early as possible */
13373     init_constants();
13374     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13375     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13376     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13377
13378     /* create (a non-shared!) shared string table */
13379     PL_strtab           = newHV();
13380     HvSHAREKEYS_off(PL_strtab);
13381     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13382     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13383
13384     /* This PV will be free'd special way so must set it same way op.c does */
13385     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13386     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13387
13388     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13389     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13390     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13391     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13392
13393     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13394     /* This makes no difference to the implementation, as it always pushes
13395        and shifts pointers to other SVs without changing their reference
13396        count, with the array becoming empty before it is freed. However, it
13397        makes it conceptually clear what is going on, and will avoid some
13398        work inside av.c, filling slots between AvFILL() and AvMAX() with
13399        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13400     AvREAL_off(param->stashes);
13401
13402     if (!(flags & CLONEf_COPY_STACKS)) {
13403         param->unreferenced = newAV();
13404     }
13405
13406 #ifdef PERLIO_LAYERS
13407     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13408     PerlIO_clone(aTHX_ proto_perl, param);
13409 #endif
13410
13411     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13412     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13413     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13414     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13415     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13416     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13417
13418     /* switches */
13419     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13420     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13421     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13422     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13423
13424     /* magical thingies */
13425
13426     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13427
13428     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13429     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13430     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13431
13432    
13433     /* Clone the regex array */
13434     /* ORANGE FIXME for plugins, probably in the SV dup code.
13435        newSViv(PTR2IV(CALLREGDUPE(
13436        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13437     */
13438     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13439     PL_regex_pad = AvARRAY(PL_regex_padav);
13440
13441     PL_stashpadmax      = proto_perl->Istashpadmax;
13442     PL_stashpadix       = proto_perl->Istashpadix ;
13443     Newx(PL_stashpad, PL_stashpadmax, HV *);
13444     {
13445         PADOFFSET o = 0;
13446         for (; o < PL_stashpadmax; ++o)
13447             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13448     }
13449
13450     /* shortcuts to various I/O objects */
13451     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13452     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13453     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13454     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13455     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13456     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13457     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13458
13459     /* shortcuts to regexp stuff */
13460     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13461
13462     /* shortcuts to misc objects */
13463     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13464
13465     /* shortcuts to debugging objects */
13466     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13467     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13468     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13469     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13470     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13471     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13472
13473     /* symbol tables */
13474     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13475     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13476     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13477     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13478     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13479
13480     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13481     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13482     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13483     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13484     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13485     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13486     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13487     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13488
13489     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13490
13491     /* subprocess state */
13492     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13493
13494     if (proto_perl->Iop_mask)
13495         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13496     else
13497         PL_op_mask      = NULL;
13498     /* PL_asserting        = proto_perl->Iasserting; */
13499
13500     /* current interpreter roots */
13501     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13502     OP_REFCNT_LOCK;
13503     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13504     OP_REFCNT_UNLOCK;
13505
13506     /* runtime control stuff */
13507     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13508
13509     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13510
13511     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13512
13513     /* interpreter atexit processing */
13514     PL_exitlistlen      = proto_perl->Iexitlistlen;
13515     if (PL_exitlistlen) {
13516         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13517         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13518     }
13519     else
13520         PL_exitlist     = (PerlExitListEntry*)NULL;
13521
13522     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13523     if (PL_my_cxt_size) {
13524         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13525         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13526 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13527         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13528         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13529 #endif
13530     }
13531     else {
13532         PL_my_cxt_list  = (void**)NULL;
13533 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13534         PL_my_cxt_keys  = (const char**)NULL;
13535 #endif
13536     }
13537     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13538     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13539     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13540     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13541
13542     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13543
13544     PAD_CLONE_VARS(proto_perl, param);
13545
13546 #ifdef HAVE_INTERP_INTERN
13547     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13548 #endif
13549
13550     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13551
13552 #ifdef PERL_USES_PL_PIDSTATUS
13553     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13554 #endif
13555     PL_osname           = SAVEPV(proto_perl->Iosname);
13556     PL_parser           = parser_dup(proto_perl->Iparser, param);
13557
13558     /* XXX this only works if the saved cop has already been cloned */
13559     if (proto_perl->Iparser) {
13560         PL_parser->saved_curcop = (COP*)any_dup(
13561                                     proto_perl->Iparser->saved_curcop,
13562                                     proto_perl);
13563     }
13564
13565     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13566
13567 #ifdef USE_LOCALE_COLLATE
13568     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13569 #endif /* USE_LOCALE_COLLATE */
13570
13571 #ifdef USE_LOCALE_NUMERIC
13572     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13573     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13574 #endif /* !USE_LOCALE_NUMERIC */
13575
13576     /* Unicode inversion lists */
13577     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13578     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13579
13580     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13581     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13582
13583     /* utf8 character class swashes */
13584     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13585         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13586     }
13587     for (i = 0; i < POSIX_CC_COUNT; i++) {
13588         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13589         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13590         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13591     }
13592     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13593     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13594     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13595     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13596     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13597     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13598     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13599     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13600     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13601     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13602     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13603     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13604     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13605     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13606     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13607     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13608     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13609     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13610     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13611
13612     if (proto_perl->Ipsig_pend) {
13613         Newxz(PL_psig_pend, SIG_SIZE, int);
13614     }
13615     else {
13616         PL_psig_pend    = (int*)NULL;
13617     }
13618
13619     if (proto_perl->Ipsig_name) {
13620         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13621         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13622                             param);
13623         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13624     }
13625     else {
13626         PL_psig_ptr     = (SV**)NULL;
13627         PL_psig_name    = (SV**)NULL;
13628     }
13629
13630     if (flags & CLONEf_COPY_STACKS) {
13631         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13632         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13633                             PL_tmps_ix+1, param);
13634
13635         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13636         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13637         Newxz(PL_markstack, i, I32);
13638         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13639                                                   - proto_perl->Imarkstack);
13640         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13641                                                   - proto_perl->Imarkstack);
13642         Copy(proto_perl->Imarkstack, PL_markstack,
13643              PL_markstack_ptr - PL_markstack + 1, I32);
13644
13645         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13646          * NOTE: unlike the others! */
13647         Newxz(PL_scopestack, PL_scopestack_max, I32);
13648         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13649
13650 #ifdef DEBUGGING
13651         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13652         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13653 #endif
13654         /* reset stack AV to correct length before its duped via
13655          * PL_curstackinfo */
13656         AvFILLp(proto_perl->Icurstack) =
13657                             proto_perl->Istack_sp - proto_perl->Istack_base;
13658
13659         /* NOTE: si_dup() looks at PL_markstack */
13660         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13661
13662         /* PL_curstack          = PL_curstackinfo->si_stack; */
13663         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13664         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13665
13666         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13667         PL_stack_base           = AvARRAY(PL_curstack);
13668         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13669                                                    - proto_perl->Istack_base);
13670         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13671
13672         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13673         PL_savestack            = ss_dup(proto_perl, param);
13674     }
13675     else {
13676         init_stacks();
13677         ENTER;                  /* perl_destruct() wants to LEAVE; */
13678     }
13679
13680     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13681     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13682
13683     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13684     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13685     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13686     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13687     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13688     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13689
13690     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13691
13692     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13693     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13694     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13695     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13696
13697     PL_stashcache       = newHV();
13698
13699     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13700                                             proto_perl->Iwatchaddr);
13701     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13702     if (PL_debug && PL_watchaddr) {
13703         PerlIO_printf(Perl_debug_log,
13704           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13705           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13706           PTR2UV(PL_watchok));
13707     }
13708
13709     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13710     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13711     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13712
13713     /* Call the ->CLONE method, if it exists, for each of the stashes
13714        identified by sv_dup() above.
13715     */
13716     while(av_len(param->stashes) != -1) {
13717         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13718         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13719         if (cloner && GvCV(cloner)) {
13720             dSP;
13721             ENTER;
13722             SAVETMPS;
13723             PUSHMARK(SP);
13724             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13725             PUTBACK;
13726             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13727             FREETMPS;
13728             LEAVE;
13729         }
13730     }
13731
13732     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13733         ptr_table_free(PL_ptr_table);
13734         PL_ptr_table = NULL;
13735     }
13736
13737     if (!(flags & CLONEf_COPY_STACKS)) {
13738         unreferenced_to_tmp_stack(param->unreferenced);
13739     }
13740
13741     SvREFCNT_dec(param->stashes);
13742
13743     /* orphaned? eg threads->new inside BEGIN or use */
13744     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13745         SvREFCNT_inc_simple_void(PL_compcv);
13746         SAVEFREESV(PL_compcv);
13747     }
13748
13749     return my_perl;
13750 }
13751
13752 static void
13753 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13754 {
13755     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13756     
13757     if (AvFILLp(unreferenced) > -1) {
13758         SV **svp = AvARRAY(unreferenced);
13759         SV **const last = svp + AvFILLp(unreferenced);
13760         SSize_t count = 0;
13761
13762         do {
13763             if (SvREFCNT(*svp) == 1)
13764                 ++count;
13765         } while (++svp <= last);
13766
13767         EXTEND_MORTAL(count);
13768         svp = AvARRAY(unreferenced);
13769
13770         do {
13771             if (SvREFCNT(*svp) == 1) {
13772                 /* Our reference is the only one to this SV. This means that
13773                    in this thread, the scalar effectively has a 0 reference.
13774                    That doesn't work (cleanup never happens), so donate our
13775                    reference to it onto the save stack. */
13776                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13777             } else {
13778                 /* As an optimisation, because we are already walking the
13779                    entire array, instead of above doing either
13780                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13781                    release our reference to the scalar, so that at the end of
13782                    the array owns zero references to the scalars it happens to
13783                    point to. We are effectively converting the array from
13784                    AvREAL() on to AvREAL() off. This saves the av_clear()
13785                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13786                    walking the array a second time.  */
13787                 SvREFCNT_dec(*svp);
13788             }
13789
13790         } while (++svp <= last);
13791         AvREAL_off(unreferenced);
13792     }
13793     SvREFCNT_dec_NN(unreferenced);
13794 }
13795
13796 void
13797 Perl_clone_params_del(CLONE_PARAMS *param)
13798 {
13799     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13800        happy: */
13801     PerlInterpreter *const to = param->new_perl;
13802     dTHXa(to);
13803     PerlInterpreter *const was = PERL_GET_THX;
13804
13805     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13806
13807     if (was != to) {
13808         PERL_SET_THX(to);
13809     }
13810
13811     SvREFCNT_dec(param->stashes);
13812     if (param->unreferenced)
13813         unreferenced_to_tmp_stack(param->unreferenced);
13814
13815     Safefree(param);
13816
13817     if (was != to) {
13818         PERL_SET_THX(was);
13819     }
13820 }
13821
13822 CLONE_PARAMS *
13823 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13824 {
13825     dVAR;
13826     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13827        does a dTHX; to get the context from thread local storage.
13828        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13829        a version that passes in my_perl.  */
13830     PerlInterpreter *const was = PERL_GET_THX;
13831     CLONE_PARAMS *param;
13832
13833     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13834
13835     if (was != to) {
13836         PERL_SET_THX(to);
13837     }
13838
13839     /* Given that we've set the context, we can do this unshared.  */
13840     Newx(param, 1, CLONE_PARAMS);
13841
13842     param->flags = 0;
13843     param->proto_perl = from;
13844     param->new_perl = to;
13845     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13846     AvREAL_off(param->stashes);
13847     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13848
13849     if (was != to) {
13850         PERL_SET_THX(was);
13851     }
13852     return param;
13853 }
13854
13855 #endif /* USE_ITHREADS */
13856
13857 void
13858 Perl_init_constants(pTHX)
13859 {
13860     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13861     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13862     SvANY(&PL_sv_undef)         = NULL;
13863
13864     SvANY(&PL_sv_no)            = new_XPVNV();
13865     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13866     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13867                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13868                                   |SVp_POK|SVf_POK;
13869
13870     SvANY(&PL_sv_yes)           = new_XPVNV();
13871     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13872     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13873                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13874                                   |SVp_POK|SVf_POK;
13875
13876     SvPV_set(&PL_sv_no, (char*)PL_No);
13877     SvCUR_set(&PL_sv_no, 0);
13878     SvLEN_set(&PL_sv_no, 0);
13879     SvIV_set(&PL_sv_no, 0);
13880     SvNV_set(&PL_sv_no, 0);
13881
13882     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13883     SvCUR_set(&PL_sv_yes, 1);
13884     SvLEN_set(&PL_sv_yes, 0);
13885     SvIV_set(&PL_sv_yes, 1);
13886     SvNV_set(&PL_sv_yes, 1);
13887 }
13888
13889 /*
13890 =head1 Unicode Support
13891
13892 =for apidoc sv_recode_to_utf8
13893
13894 The encoding is assumed to be an Encode object, on entry the PV
13895 of the sv is assumed to be octets in that encoding, and the sv
13896 will be converted into Unicode (and UTF-8).
13897
13898 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13899 is not a reference, nothing is done to the sv.  If the encoding is not
13900 an C<Encode::XS> Encoding object, bad things will happen.
13901 (See F<lib/encoding.pm> and L<Encode>.)
13902
13903 The PV of the sv is returned.
13904
13905 =cut */
13906
13907 char *
13908 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13909 {
13910     dVAR;
13911
13912     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13913
13914     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13915         SV *uni;
13916         STRLEN len;
13917         const char *s;
13918         dSP;
13919         ENTER;
13920         SAVETMPS;
13921         save_re_context();
13922         PUSHMARK(sp);
13923         EXTEND(SP, 3);
13924         PUSHs(encoding);
13925         PUSHs(sv);
13926 /*
13927   NI-S 2002/07/09
13928   Passing sv_yes is wrong - it needs to be or'ed set of constants
13929   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13930   remove converted chars from source.
13931
13932   Both will default the value - let them.
13933
13934         XPUSHs(&PL_sv_yes);
13935 */
13936         PUTBACK;
13937         call_method("decode", G_SCALAR);
13938         SPAGAIN;
13939         uni = POPs;
13940         PUTBACK;
13941         s = SvPV_const(uni, len);
13942         if (s != SvPVX_const(sv)) {
13943             SvGROW(sv, len + 1);
13944             Move(s, SvPVX(sv), len + 1, char);
13945             SvCUR_set(sv, len);
13946         }
13947         FREETMPS;
13948         LEAVE;
13949         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13950             /* clear pos and any utf8 cache */
13951             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13952             if (mg)
13953                 mg->mg_len = -1;
13954             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13955                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13956         }
13957         SvUTF8_on(sv);
13958         return SvPVX(sv);
13959     }
13960     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13961 }
13962
13963 /*
13964 =for apidoc sv_cat_decode
13965
13966 The encoding is assumed to be an Encode object, the PV of the ssv is
13967 assumed to be octets in that encoding and decoding the input starts
13968 from the position which (PV + *offset) pointed to.  The dsv will be
13969 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13970 when the string tstr appears in decoding output or the input ends on
13971 the PV of the ssv.  The value which the offset points will be modified
13972 to the last input position on the ssv.
13973
13974 Returns TRUE if the terminator was found, else returns FALSE.
13975
13976 =cut */
13977
13978 bool
13979 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13980                    SV *ssv, int *offset, char *tstr, int tlen)
13981 {
13982     dVAR;
13983     bool ret = FALSE;
13984
13985     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13986
13987     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13988         SV *offsv;
13989         dSP;
13990         ENTER;
13991         SAVETMPS;
13992         save_re_context();
13993         PUSHMARK(sp);
13994         EXTEND(SP, 6);
13995         PUSHs(encoding);
13996         PUSHs(dsv);
13997         PUSHs(ssv);
13998         offsv = newSViv(*offset);
13999         mPUSHs(offsv);
14000         mPUSHp(tstr, tlen);
14001         PUTBACK;
14002         call_method("cat_decode", G_SCALAR);
14003         SPAGAIN;
14004         ret = SvTRUE(TOPs);
14005         *offset = SvIV(offsv);
14006         PUTBACK;
14007         FREETMPS;
14008         LEAVE;
14009     }
14010     else
14011         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14012     return ret;
14013
14014 }
14015
14016 /* ---------------------------------------------------------------------
14017  *
14018  * support functions for report_uninit()
14019  */
14020
14021 /* the maxiumum size of array or hash where we will scan looking
14022  * for the undefined element that triggered the warning */
14023
14024 #define FUV_MAX_SEARCH_SIZE 1000
14025
14026 /* Look for an entry in the hash whose value has the same SV as val;
14027  * If so, return a mortal copy of the key. */
14028
14029 STATIC SV*
14030 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14031 {
14032     dVAR;
14033     HE **array;
14034     I32 i;
14035
14036     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14037
14038     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14039                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14040         return NULL;
14041
14042     array = HvARRAY(hv);
14043
14044     for (i=HvMAX(hv); i>=0; i--) {
14045         HE *entry;
14046         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14047             if (HeVAL(entry) != val)
14048                 continue;
14049             if (    HeVAL(entry) == &PL_sv_undef ||
14050                     HeVAL(entry) == &PL_sv_placeholder)
14051                 continue;
14052             if (!HeKEY(entry))
14053                 return NULL;
14054             if (HeKLEN(entry) == HEf_SVKEY)
14055                 return sv_mortalcopy(HeKEY_sv(entry));
14056             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14057         }
14058     }
14059     return NULL;
14060 }
14061
14062 /* Look for an entry in the array whose value has the same SV as val;
14063  * If so, return the index, otherwise return -1. */
14064
14065 STATIC I32
14066 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14067 {
14068     dVAR;
14069
14070     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14071
14072     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14073                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14074         return -1;
14075
14076     if (val != &PL_sv_undef) {
14077         SV ** const svp = AvARRAY(av);
14078         I32 i;
14079
14080         for (i=AvFILLp(av); i>=0; i--)
14081             if (svp[i] == val)
14082                 return i;
14083     }
14084     return -1;
14085 }
14086
14087 /* varname(): return the name of a variable, optionally with a subscript.
14088  * If gv is non-zero, use the name of that global, along with gvtype (one
14089  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14090  * targ.  Depending on the value of the subscript_type flag, return:
14091  */
14092
14093 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14094 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14095 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14096 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14097
14098 SV*
14099 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14100         const SV *const keyname, I32 aindex, int subscript_type)
14101 {
14102
14103     SV * const name = sv_newmortal();
14104     if (gv && isGV(gv)) {
14105         char buffer[2];
14106         buffer[0] = gvtype;
14107         buffer[1] = 0;
14108
14109         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14110
14111         gv_fullname4(name, gv, buffer, 0);
14112
14113         if ((unsigned int)SvPVX(name)[1] <= 26) {
14114             buffer[0] = '^';
14115             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14116
14117             /* Swap the 1 unprintable control character for the 2 byte pretty
14118                version - ie substr($name, 1, 1) = $buffer; */
14119             sv_insert(name, 1, 1, buffer, 2);
14120         }
14121     }
14122     else {
14123         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14124         SV *sv;
14125         AV *av;
14126
14127         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14128
14129         if (!cv || !CvPADLIST(cv))
14130             return NULL;
14131         av = *PadlistARRAY(CvPADLIST(cv));
14132         sv = *av_fetch(av, targ, FALSE);
14133         sv_setsv_flags(name, sv, 0);
14134     }
14135
14136     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14137         SV * const sv = newSV(0);
14138         *SvPVX(name) = '$';
14139         Perl_sv_catpvf(aTHX_ name, "{%s}",
14140             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14141                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14142         SvREFCNT_dec_NN(sv);
14143     }
14144     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14145         *SvPVX(name) = '$';
14146         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14147     }
14148     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14149         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14150         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14151     }
14152
14153     return name;
14154 }
14155
14156
14157 /*
14158 =for apidoc find_uninit_var
14159
14160 Find the name of the undefined variable (if any) that caused the operator
14161 to issue a "Use of uninitialized value" warning.
14162 If match is true, only return a name if its value matches uninit_sv.
14163 So roughly speaking, if a unary operator (such as OP_COS) generates a
14164 warning, then following the direct child of the op may yield an
14165 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14166 other hand, with OP_ADD there are two branches to follow, so we only print
14167 the variable name if we get an exact match.
14168
14169 The name is returned as a mortal SV.
14170
14171 Assumes that PL_op is the op that originally triggered the error, and that
14172 PL_comppad/PL_curpad points to the currently executing pad.
14173
14174 =cut
14175 */
14176
14177 STATIC SV *
14178 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14179                   bool match)
14180 {
14181     dVAR;
14182     SV *sv;
14183     const GV *gv;
14184     const OP *o, *o2, *kid;
14185
14186     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14187                             uninit_sv == &PL_sv_placeholder)))
14188         return NULL;
14189
14190     switch (obase->op_type) {
14191
14192     case OP_RV2AV:
14193     case OP_RV2HV:
14194     case OP_PADAV:
14195     case OP_PADHV:
14196       {
14197         const bool pad  = (    obase->op_type == OP_PADAV
14198                             || obase->op_type == OP_PADHV
14199                             || obase->op_type == OP_PADRANGE
14200                           );
14201
14202         const bool hash = (    obase->op_type == OP_PADHV
14203                             || obase->op_type == OP_RV2HV
14204                             || (obase->op_type == OP_PADRANGE
14205                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14206                           );
14207         I32 index = 0;
14208         SV *keysv = NULL;
14209         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14210
14211         if (pad) { /* @lex, %lex */
14212             sv = PAD_SVl(obase->op_targ);
14213             gv = NULL;
14214         }
14215         else {
14216             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14217             /* @global, %global */
14218                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14219                 if (!gv)
14220                     break;
14221                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14222             }
14223             else if (obase == PL_op) /* @{expr}, %{expr} */
14224                 return find_uninit_var(cUNOPx(obase)->op_first,
14225                                                     uninit_sv, match);
14226             else /* @{expr}, %{expr} as a sub-expression */
14227                 return NULL;
14228         }
14229
14230         /* attempt to find a match within the aggregate */
14231         if (hash) {
14232             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14233             if (keysv)
14234                 subscript_type = FUV_SUBSCRIPT_HASH;
14235         }
14236         else {
14237             index = find_array_subscript((const AV *)sv, uninit_sv);
14238             if (index >= 0)
14239                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14240         }
14241
14242         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14243             break;
14244
14245         return varname(gv, hash ? '%' : '@', obase->op_targ,
14246                                     keysv, index, subscript_type);
14247       }
14248
14249     case OP_RV2SV:
14250         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14251             /* $global */
14252             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14253             if (!gv || !GvSTASH(gv))
14254                 break;
14255             if (match && (GvSV(gv) != uninit_sv))
14256                 break;
14257             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14258         }
14259         /* ${expr} */
14260         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14261
14262     case OP_PADSV:
14263         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14264             break;
14265         return varname(NULL, '$', obase->op_targ,
14266                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14267
14268     case OP_GVSV:
14269         gv = cGVOPx_gv(obase);
14270         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14271             break;
14272         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14273
14274     case OP_AELEMFAST_LEX:
14275         if (match) {
14276             SV **svp;
14277             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14278             if (!av || SvRMAGICAL(av))
14279                 break;
14280             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14281             if (!svp || *svp != uninit_sv)
14282                 break;
14283         }
14284         return varname(NULL, '$', obase->op_targ,
14285                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14286     case OP_AELEMFAST:
14287         {
14288             gv = cGVOPx_gv(obase);
14289             if (!gv)
14290                 break;
14291             if (match) {
14292                 SV **svp;
14293                 AV *const av = GvAV(gv);
14294                 if (!av || SvRMAGICAL(av))
14295                     break;
14296                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14297                 if (!svp || *svp != uninit_sv)
14298                     break;
14299             }
14300             return varname(gv, '$', 0,
14301                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14302         }
14303         break;
14304
14305     case OP_EXISTS:
14306         o = cUNOPx(obase)->op_first;
14307         if (!o || o->op_type != OP_NULL ||
14308                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14309             break;
14310         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14311
14312     case OP_AELEM:
14313     case OP_HELEM:
14314     {
14315         bool negate = FALSE;
14316
14317         if (PL_op == obase)
14318             /* $a[uninit_expr] or $h{uninit_expr} */
14319             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14320
14321         gv = NULL;
14322         o = cBINOPx(obase)->op_first;
14323         kid = cBINOPx(obase)->op_last;
14324
14325         /* get the av or hv, and optionally the gv */
14326         sv = NULL;
14327         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14328             sv = PAD_SV(o->op_targ);
14329         }
14330         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14331                 && cUNOPo->op_first->op_type == OP_GV)
14332         {
14333             gv = cGVOPx_gv(cUNOPo->op_first);
14334             if (!gv)
14335                 break;
14336             sv = o->op_type
14337                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14338         }
14339         if (!sv)
14340             break;
14341
14342         if (kid && kid->op_type == OP_NEGATE) {
14343             negate = TRUE;
14344             kid = cUNOPx(kid)->op_first;
14345         }
14346
14347         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14348             /* index is constant */
14349             SV* kidsv;
14350             if (negate) {
14351                 kidsv = sv_2mortal(newSVpvs("-"));
14352                 sv_catsv(kidsv, cSVOPx_sv(kid));
14353             }
14354             else
14355                 kidsv = cSVOPx_sv(kid);
14356             if (match) {
14357                 if (SvMAGICAL(sv))
14358                     break;
14359                 if (obase->op_type == OP_HELEM) {
14360                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14361                     if (!he || HeVAL(he) != uninit_sv)
14362                         break;
14363                 }
14364                 else {
14365                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14366                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14367                         FALSE);
14368                     if (!svp || *svp != uninit_sv)
14369                         break;
14370                 }
14371             }
14372             if (obase->op_type == OP_HELEM)
14373                 return varname(gv, '%', o->op_targ,
14374                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14375             else
14376                 return varname(gv, '@', o->op_targ, NULL,
14377                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14378                     FUV_SUBSCRIPT_ARRAY);
14379         }
14380         else  {
14381             /* index is an expression;
14382              * attempt to find a match within the aggregate */
14383             if (obase->op_type == OP_HELEM) {
14384                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14385                 if (keysv)
14386                     return varname(gv, '%', o->op_targ,
14387                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14388             }
14389             else {
14390                 const I32 index
14391                     = find_array_subscript((const AV *)sv, uninit_sv);
14392                 if (index >= 0)
14393                     return varname(gv, '@', o->op_targ,
14394                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14395             }
14396             if (match)
14397                 break;
14398             return varname(gv,
14399                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14400                 ? '@' : '%',
14401                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14402         }
14403         break;
14404     }
14405
14406     case OP_AASSIGN:
14407         /* only examine RHS */
14408         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14409
14410     case OP_OPEN:
14411         o = cUNOPx(obase)->op_first;
14412         if (   o->op_type == OP_PUSHMARK
14413            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14414         )
14415             o = o->op_sibling;
14416
14417         if (!o->op_sibling) {
14418             /* one-arg version of open is highly magical */
14419
14420             if (o->op_type == OP_GV) { /* open FOO; */
14421                 gv = cGVOPx_gv(o);
14422                 if (match && GvSV(gv) != uninit_sv)
14423                     break;
14424                 return varname(gv, '$', 0,
14425                             NULL, 0, FUV_SUBSCRIPT_NONE);
14426             }
14427             /* other possibilities not handled are:
14428              * open $x; or open my $x;  should return '${*$x}'
14429              * open expr;               should return '$'.expr ideally
14430              */
14431              break;
14432         }
14433         goto do_op;
14434
14435     /* ops where $_ may be an implicit arg */
14436     case OP_TRANS:
14437     case OP_TRANSR:
14438     case OP_SUBST:
14439     case OP_MATCH:
14440         if ( !(obase->op_flags & OPf_STACKED)) {
14441             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14442                                  ? PAD_SVl(obase->op_targ)
14443                                  : DEFSV))
14444             {
14445                 sv = sv_newmortal();
14446                 sv_setpvs(sv, "$_");
14447                 return sv;
14448             }
14449         }
14450         goto do_op;
14451
14452     case OP_PRTF:
14453     case OP_PRINT:
14454     case OP_SAY:
14455         match = 1; /* print etc can return undef on defined args */
14456         /* skip filehandle as it can't produce 'undef' warning  */
14457         o = cUNOPx(obase)->op_first;
14458         if ((obase->op_flags & OPf_STACKED)
14459             &&
14460                (   o->op_type == OP_PUSHMARK
14461                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14462             o = o->op_sibling->op_sibling;
14463         goto do_op2;
14464
14465
14466     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14467     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14468
14469         /* the following ops are capable of returning PL_sv_undef even for
14470          * defined arg(s) */
14471
14472     case OP_BACKTICK:
14473     case OP_PIPE_OP:
14474     case OP_FILENO:
14475     case OP_BINMODE:
14476     case OP_TIED:
14477     case OP_GETC:
14478     case OP_SYSREAD:
14479     case OP_SEND:
14480     case OP_IOCTL:
14481     case OP_SOCKET:
14482     case OP_SOCKPAIR:
14483     case OP_BIND:
14484     case OP_CONNECT:
14485     case OP_LISTEN:
14486     case OP_ACCEPT:
14487     case OP_SHUTDOWN:
14488     case OP_SSOCKOPT:
14489     case OP_GETPEERNAME:
14490     case OP_FTRREAD:
14491     case OP_FTRWRITE:
14492     case OP_FTREXEC:
14493     case OP_FTROWNED:
14494     case OP_FTEREAD:
14495     case OP_FTEWRITE:
14496     case OP_FTEEXEC:
14497     case OP_FTEOWNED:
14498     case OP_FTIS:
14499     case OP_FTZERO:
14500     case OP_FTSIZE:
14501     case OP_FTFILE:
14502     case OP_FTDIR:
14503     case OP_FTLINK:
14504     case OP_FTPIPE:
14505     case OP_FTSOCK:
14506     case OP_FTBLK:
14507     case OP_FTCHR:
14508     case OP_FTTTY:
14509     case OP_FTSUID:
14510     case OP_FTSGID:
14511     case OP_FTSVTX:
14512     case OP_FTTEXT:
14513     case OP_FTBINARY:
14514     case OP_FTMTIME:
14515     case OP_FTATIME:
14516     case OP_FTCTIME:
14517     case OP_READLINK:
14518     case OP_OPEN_DIR:
14519     case OP_READDIR:
14520     case OP_TELLDIR:
14521     case OP_SEEKDIR:
14522     case OP_REWINDDIR:
14523     case OP_CLOSEDIR:
14524     case OP_GMTIME:
14525     case OP_ALARM:
14526     case OP_SEMGET:
14527     case OP_GETLOGIN:
14528     case OP_UNDEF:
14529     case OP_SUBSTR:
14530     case OP_AEACH:
14531     case OP_EACH:
14532     case OP_SORT:
14533     case OP_CALLER:
14534     case OP_DOFILE:
14535     case OP_PROTOTYPE:
14536     case OP_NCMP:
14537     case OP_SMARTMATCH:
14538     case OP_UNPACK:
14539     case OP_SYSOPEN:
14540     case OP_SYSSEEK:
14541         match = 1;
14542         goto do_op;
14543
14544     case OP_ENTERSUB:
14545     case OP_GOTO:
14546         /* XXX tmp hack: these two may call an XS sub, and currently
14547           XS subs don't have a SUB entry on the context stack, so CV and
14548           pad determination goes wrong, and BAD things happen. So, just
14549           don't try to determine the value under those circumstances.
14550           Need a better fix at dome point. DAPM 11/2007 */
14551         break;
14552
14553     case OP_FLIP:
14554     case OP_FLOP:
14555     {
14556         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14557         if (gv && GvSV(gv) == uninit_sv)
14558             return newSVpvs_flags("$.", SVs_TEMP);
14559         goto do_op;
14560     }
14561
14562     case OP_POS:
14563         /* def-ness of rval pos() is independent of the def-ness of its arg */
14564         if ( !(obase->op_flags & OPf_MOD))
14565             break;
14566
14567     case OP_SCHOMP:
14568     case OP_CHOMP:
14569         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14570             return newSVpvs_flags("${$/}", SVs_TEMP);
14571         /*FALLTHROUGH*/
14572
14573     default:
14574     do_op:
14575         if (!(obase->op_flags & OPf_KIDS))
14576             break;
14577         o = cUNOPx(obase)->op_first;
14578         
14579     do_op2:
14580         if (!o)
14581             break;
14582
14583         /* This loop checks all the kid ops, skipping any that cannot pos-
14584          * sibly be responsible for the uninitialized value; i.e., defined
14585          * constants and ops that return nothing.  If there is only one op
14586          * left that is not skipped, then we *know* it is responsible for
14587          * the uninitialized value.  If there is more than one op left, we
14588          * have to look for an exact match in the while() loop below.
14589          * Note that we skip padrange, because the individual pad ops that
14590          * it replaced are still in the tree, so we work on them instead.
14591          */
14592         o2 = NULL;
14593         for (kid=o; kid; kid = kid->op_sibling) {
14594             if (kid) {
14595                 const OPCODE type = kid->op_type;
14596                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14597                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14598                   || (type == OP_PUSHMARK)
14599                   || (type == OP_PADRANGE)
14600                 )
14601                 continue;
14602             }
14603             if (o2) { /* more than one found */
14604                 o2 = NULL;
14605                 break;
14606             }
14607             o2 = kid;
14608         }
14609         if (o2)
14610             return find_uninit_var(o2, uninit_sv, match);
14611
14612         /* scan all args */
14613         while (o) {
14614             sv = find_uninit_var(o, uninit_sv, 1);
14615             if (sv)
14616                 return sv;
14617             o = o->op_sibling;
14618         }
14619         break;
14620     }
14621     return NULL;
14622 }
14623
14624
14625 /*
14626 =for apidoc report_uninit
14627
14628 Print appropriate "Use of uninitialized variable" warning.
14629
14630 =cut
14631 */
14632
14633 void
14634 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14635 {
14636     dVAR;
14637     if (PL_op) {
14638         SV* varname = NULL;
14639         if (uninit_sv && PL_curpad) {
14640             varname = find_uninit_var(PL_op, uninit_sv,0);
14641             if (varname)
14642                 sv_insert(varname, 0, 0, " ", 1);
14643         }
14644         /* diag_listed_as: Use of uninitialized value%s */
14645         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14646                 SVfARG(varname ? varname : &PL_sv_no),
14647                 " in ", OP_DESC(PL_op));
14648     }
14649     else
14650         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14651                     "", "", "");
14652 }
14653
14654 /*
14655  * Local variables:
14656  * c-indentation-style: bsd
14657  * c-basic-offset: 4
14658  * indent-tabs-mode: nil
14659  * End:
14660  *
14661  * ex: set ts=8 sts=4 sw=4 et:
14662  */