This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add alternate email address for contributor.
[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 (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 (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 (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 (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         case SVt_PVMG:
6261         case SVt_PVNV:
6262         case SVt_PVIV:
6263         case SVt_PV:
6264           freescalar:
6265             /* Don't bother with SvOOK_off(sv); as we're only going to
6266              * free it.  */
6267             if (SvOOK(sv)) {
6268                 STRLEN offset;
6269                 SvOOK_offset(sv, offset);
6270                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6271                 /* Don't even bother with turning off the OOK flag.  */
6272             }
6273             if (SvROK(sv)) {
6274             free_rv:
6275                 {
6276                     SV * const target = SvRV(sv);
6277                     if (SvWEAKREF(sv))
6278                         sv_del_backref(target, sv);
6279                     else
6280                         next_sv = target;
6281                 }
6282             }
6283 #ifdef PERL_ANY_COW
6284             else if (SvPVX_const(sv)
6285                      && !(SvTYPE(sv) == SVt_PVIO
6286                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6287             {
6288                 if (SvIsCOW(sv)) {
6289                     if (DEBUG_C_TEST) {
6290                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6291                         sv_dump(sv);
6292                     }
6293                     if (SvLEN(sv)) {
6294 # ifdef PERL_OLD_COPY_ON_WRITE
6295                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6296 # else
6297                         if (CowREFCNT(sv)) {
6298                             CowREFCNT(sv)--;
6299                             SvLEN_set(sv, 0);
6300                         }
6301 # endif
6302                     } else {
6303                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6304                     }
6305
6306                 }
6307 # ifdef PERL_OLD_COPY_ON_WRITE
6308                 else
6309 # endif
6310                 if (SvLEN(sv)) {
6311                     Safefree(SvPVX_mutable(sv));
6312                 }
6313             }
6314 #else
6315             else if (SvPVX_const(sv) && SvLEN(sv)
6316                      && !(SvTYPE(sv) == SVt_PVIO
6317                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6318                 Safefree(SvPVX_mutable(sv));
6319             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6320                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6321             }
6322 #endif
6323             break;
6324         case SVt_NV:
6325             break;
6326         }
6327
6328       free_body:
6329
6330         SvFLAGS(sv) &= SVf_BREAK;
6331         SvFLAGS(sv) |= SVTYPEMASK;
6332
6333         sv_type_details = bodies_by_type + type;
6334         if (sv_type_details->arena) {
6335             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6336                      &PL_body_roots[type]);
6337         }
6338         else if (sv_type_details->body_size) {
6339             safefree(SvANY(sv));
6340         }
6341
6342       free_head:
6343         /* caller is responsible for freeing the head of the original sv */
6344         if (sv != orig_sv && !SvREFCNT(sv))
6345             del_SV(sv);
6346
6347         /* grab and free next sv, if any */
6348       get_next_sv:
6349         while (1) {
6350             sv = NULL;
6351             if (next_sv) {
6352                 sv = next_sv;
6353                 next_sv = NULL;
6354             }
6355             else if (!iter_sv) {
6356                 break;
6357             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6358                 AV *const av = (AV*)iter_sv;
6359                 if (AvFILLp(av) > -1) {
6360                     sv = AvARRAY(av)[AvFILLp(av)--];
6361                 }
6362                 else { /* no more elements of current AV to free */
6363                     sv = iter_sv;
6364                     type = SvTYPE(sv);
6365                     /* restore previous value, squirrelled away */
6366                     iter_sv = AvARRAY(av)[AvMAX(av)];
6367                     Safefree(AvALLOC(av));
6368                     goto free_body;
6369                 }
6370             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6371                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6372                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6373                     /* no more elements of current HV to free */
6374                     sv = iter_sv;
6375                     type = SvTYPE(sv);
6376                     /* Restore previous values of iter_sv and hash_index,
6377                      * squirrelled away */
6378                     assert(!SvOBJECT(sv));
6379                     iter_sv = (SV*)SvSTASH(sv);
6380                     assert(!SvMAGICAL(sv));
6381                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6382 #ifdef DEBUGGING
6383                     /* perl -DA does not like rubbish in SvMAGIC. */
6384                     SvMAGIC_set(sv, 0);
6385 #endif
6386
6387                     /* free any remaining detritus from the hash struct */
6388                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6389                     assert(!HvARRAY((HV*)sv));
6390                     goto free_body;
6391                 }
6392             }
6393
6394             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6395
6396             if (!sv)
6397                 continue;
6398             if (!SvREFCNT(sv)) {
6399                 sv_free(sv);
6400                 continue;
6401             }
6402             if (--(SvREFCNT(sv)))
6403                 continue;
6404 #ifdef DEBUGGING
6405             if (SvTEMP(sv)) {
6406                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6407                          "Attempt to free temp prematurely: SV 0x%"UVxf
6408                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6409                 continue;
6410             }
6411 #endif
6412             if (SvIMMORTAL(sv)) {
6413                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6414                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6415                 continue;
6416             }
6417             break;
6418         } /* while 1 */
6419
6420     } /* while sv */
6421 }
6422
6423 /* This routine curses the sv itself, not the object referenced by sv. So
6424    sv does not have to be ROK. */
6425
6426 static bool
6427 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6428     dVAR;
6429
6430     PERL_ARGS_ASSERT_CURSE;
6431     assert(SvOBJECT(sv));
6432
6433     if (PL_defstash &&  /* Still have a symbol table? */
6434         SvDESTROYABLE(sv))
6435     {
6436         dSP;
6437         HV* stash;
6438         do {
6439           stash = SvSTASH(sv);
6440           assert(SvTYPE(stash) == SVt_PVHV);
6441           if (HvNAME(stash)) {
6442             CV* destructor = NULL;
6443             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6444             if (!destructor) {
6445                 GV * const gv =
6446                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6447                 if (gv) destructor = GvCV(gv);
6448                 if (!SvOBJECT(stash))
6449                     SvSTASH(stash) =
6450                         destructor ? (HV *)destructor : ((HV *)0)+1;
6451             }
6452             assert(!destructor || destructor == ((CV *)0)+1
6453                 || SvTYPE(destructor) == SVt_PVCV);
6454             if (destructor && destructor != ((CV *)0)+1
6455                 /* A constant subroutine can have no side effects, so
6456                    don't bother calling it.  */
6457                 && !CvCONST(destructor)
6458                 /* Don't bother calling an empty destructor or one that
6459                    returns immediately. */
6460                 && (CvISXSUB(destructor)
6461                 || (CvSTART(destructor)
6462                     && (CvSTART(destructor)->op_next->op_type
6463                                         != OP_LEAVESUB)
6464                     && (CvSTART(destructor)->op_next->op_type
6465                                         != OP_PUSHMARK
6466                         || CvSTART(destructor)->op_next->op_next->op_type
6467                                         != OP_RETURN
6468                        )
6469                    ))
6470                )
6471             {
6472                 SV* const tmpref = newRV(sv);
6473                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6474                 ENTER;
6475                 PUSHSTACKi(PERLSI_DESTROY);
6476                 EXTEND(SP, 2);
6477                 PUSHMARK(SP);
6478                 PUSHs(tmpref);
6479                 PUTBACK;
6480                 call_sv(MUTABLE_SV(destructor),
6481                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6482                 POPSTACK;
6483                 SPAGAIN;
6484                 LEAVE;
6485                 if(SvREFCNT(tmpref) < 2) {
6486                     /* tmpref is not kept alive! */
6487                     SvREFCNT(sv)--;
6488                     SvRV_set(tmpref, NULL);
6489                     SvROK_off(tmpref);
6490                 }
6491                 SvREFCNT_dec_NN(tmpref);
6492             }
6493           }
6494         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6495
6496
6497         if (check_refcnt && SvREFCNT(sv)) {
6498             if (PL_in_clean_objs)
6499                 Perl_croak(aTHX_
6500                   "DESTROY created new reference to dead object '%"HEKf"'",
6501                    HEKfARG(HvNAME_HEK(stash)));
6502             /* DESTROY gave object new lease on life */
6503             return FALSE;
6504         }
6505     }
6506
6507     if (SvOBJECT(sv)) {
6508         HV * const stash = SvSTASH(sv);
6509         /* Curse before freeing the stash, as freeing the stash could cause
6510            a recursive call into S_curse. */
6511         SvOBJECT_off(sv);       /* Curse the object. */
6512         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6513         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6514         if (SvTYPE(sv) != SVt_PVIO)
6515             --PL_sv_objcount;/* XXX Might want something more general */
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             if (SvTYPE(tmpRef) != SVt_PVIO)
9696                 --PL_sv_objcount;
9697             SvREFCNT_dec(SvSTASH(tmpRef));
9698         }
9699     }
9700     SvOBJECT_on(tmpRef);
9701     if (SvTYPE(tmpRef) != SVt_PVIO)
9702         ++PL_sv_objcount;
9703     SvUPGRADE(tmpRef, SVt_PVMG);
9704     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9705
9706     if(SvSMAGICAL(tmpRef))
9707         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9708             mg_set(tmpRef);
9709
9710
9711
9712     return sv;
9713 }
9714
9715 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9716  * as it is after unglobbing it.
9717  */
9718
9719 PERL_STATIC_INLINE void
9720 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9721 {
9722     dVAR;
9723     void *xpvmg;
9724     HV *stash;
9725     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9726
9727     PERL_ARGS_ASSERT_SV_UNGLOB;
9728
9729     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9730     SvFAKE_off(sv);
9731     if (!(flags & SV_COW_DROP_PV))
9732         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9733
9734     if (GvGP(sv)) {
9735         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9736            && HvNAME_get(stash))
9737             mro_method_changed_in(stash);
9738         gp_free(MUTABLE_GV(sv));
9739     }
9740     if (GvSTASH(sv)) {
9741         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9742         GvSTASH(sv) = NULL;
9743     }
9744     GvMULTI_off(sv);
9745     if (GvNAME_HEK(sv)) {
9746         unshare_hek(GvNAME_HEK(sv));
9747     }
9748     isGV_with_GP_off(sv);
9749
9750     if(SvTYPE(sv) == SVt_PVGV) {
9751         /* need to keep SvANY(sv) in the right arena */
9752         xpvmg = new_XPVMG();
9753         StructCopy(SvANY(sv), xpvmg, XPVMG);
9754         del_XPVGV(SvANY(sv));
9755         SvANY(sv) = xpvmg;
9756
9757         SvFLAGS(sv) &= ~SVTYPEMASK;
9758         SvFLAGS(sv) |= SVt_PVMG;
9759     }
9760
9761     /* Intentionally not calling any local SET magic, as this isn't so much a
9762        set operation as merely an internal storage change.  */
9763     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9764     else sv_setsv_flags(sv, temp, 0);
9765
9766     if ((const GV *)sv == PL_last_in_gv)
9767         PL_last_in_gv = NULL;
9768     else if ((const GV *)sv == PL_statgv)
9769         PL_statgv = NULL;
9770 }
9771
9772 /*
9773 =for apidoc sv_unref_flags
9774
9775 Unsets the RV status of the SV, and decrements the reference count of
9776 whatever was being referenced by the RV.  This can almost be thought of
9777 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9778 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9779 (otherwise the decrementing is conditional on the reference count being
9780 different from one or the reference being a readonly SV).
9781 See C<SvROK_off>.
9782
9783 =cut
9784 */
9785
9786 void
9787 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9788 {
9789     SV* const target = SvRV(ref);
9790
9791     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9792
9793     if (SvWEAKREF(ref)) {
9794         sv_del_backref(target, ref);
9795         SvWEAKREF_off(ref);
9796         SvRV_set(ref, NULL);
9797         return;
9798     }
9799     SvRV_set(ref, NULL);
9800     SvROK_off(ref);
9801     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9802        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9803     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9804         SvREFCNT_dec_NN(target);
9805     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9806         sv_2mortal(target);     /* Schedule for freeing later */
9807 }
9808
9809 /*
9810 =for apidoc sv_untaint
9811
9812 Untaint an SV.  Use C<SvTAINTED_off> instead.
9813
9814 =cut
9815 */
9816
9817 void
9818 Perl_sv_untaint(pTHX_ SV *const sv)
9819 {
9820     PERL_ARGS_ASSERT_SV_UNTAINT;
9821
9822     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9823         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9824         if (mg)
9825             mg->mg_len &= ~1;
9826     }
9827 }
9828
9829 /*
9830 =for apidoc sv_tainted
9831
9832 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9833
9834 =cut
9835 */
9836
9837 bool
9838 Perl_sv_tainted(pTHX_ SV *const sv)
9839 {
9840     PERL_ARGS_ASSERT_SV_TAINTED;
9841
9842     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9843         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9844         if (mg && (mg->mg_len & 1) )
9845             return TRUE;
9846     }
9847     return FALSE;
9848 }
9849
9850 /*
9851 =for apidoc sv_setpviv
9852
9853 Copies an integer into the given SV, also updating its string value.
9854 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9855
9856 =cut
9857 */
9858
9859 void
9860 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9861 {
9862     char buf[TYPE_CHARS(UV)];
9863     char *ebuf;
9864     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9865
9866     PERL_ARGS_ASSERT_SV_SETPVIV;
9867
9868     sv_setpvn(sv, ptr, ebuf - ptr);
9869 }
9870
9871 /*
9872 =for apidoc sv_setpviv_mg
9873
9874 Like C<sv_setpviv>, but also handles 'set' magic.
9875
9876 =cut
9877 */
9878
9879 void
9880 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9881 {
9882     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9883
9884     sv_setpviv(sv, iv);
9885     SvSETMAGIC(sv);
9886 }
9887
9888 #if defined(PERL_IMPLICIT_CONTEXT)
9889
9890 /* pTHX_ magic can't cope with varargs, so this is a no-context
9891  * version of the main function, (which may itself be aliased to us).
9892  * Don't access this version directly.
9893  */
9894
9895 void
9896 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9897 {
9898     dTHX;
9899     va_list args;
9900
9901     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9902
9903     va_start(args, pat);
9904     sv_vsetpvf(sv, pat, &args);
9905     va_end(args);
9906 }
9907
9908 /* pTHX_ magic can't cope with varargs, so this is a no-context
9909  * version of the main function, (which may itself be aliased to us).
9910  * Don't access this version directly.
9911  */
9912
9913 void
9914 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9915 {
9916     dTHX;
9917     va_list args;
9918
9919     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9920
9921     va_start(args, pat);
9922     sv_vsetpvf_mg(sv, pat, &args);
9923     va_end(args);
9924 }
9925 #endif
9926
9927 /*
9928 =for apidoc sv_setpvf
9929
9930 Works like C<sv_catpvf> but copies the text into the SV instead of
9931 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9932
9933 =cut
9934 */
9935
9936 void
9937 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9938 {
9939     va_list args;
9940
9941     PERL_ARGS_ASSERT_SV_SETPVF;
9942
9943     va_start(args, pat);
9944     sv_vsetpvf(sv, pat, &args);
9945     va_end(args);
9946 }
9947
9948 /*
9949 =for apidoc sv_vsetpvf
9950
9951 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9952 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9953
9954 Usually used via its frontend C<sv_setpvf>.
9955
9956 =cut
9957 */
9958
9959 void
9960 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9961 {
9962     PERL_ARGS_ASSERT_SV_VSETPVF;
9963
9964     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9965 }
9966
9967 /*
9968 =for apidoc sv_setpvf_mg
9969
9970 Like C<sv_setpvf>, but also handles 'set' magic.
9971
9972 =cut
9973 */
9974
9975 void
9976 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9977 {
9978     va_list args;
9979
9980     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9981
9982     va_start(args, pat);
9983     sv_vsetpvf_mg(sv, pat, &args);
9984     va_end(args);
9985 }
9986
9987 /*
9988 =for apidoc sv_vsetpvf_mg
9989
9990 Like C<sv_vsetpvf>, but also handles 'set' magic.
9991
9992 Usually used via its frontend C<sv_setpvf_mg>.
9993
9994 =cut
9995 */
9996
9997 void
9998 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9999 {
10000     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10001
10002     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10003     SvSETMAGIC(sv);
10004 }
10005
10006 #if defined(PERL_IMPLICIT_CONTEXT)
10007
10008 /* pTHX_ magic can't cope with varargs, so this is a no-context
10009  * version of the main function, (which may itself be aliased to us).
10010  * Don't access this version directly.
10011  */
10012
10013 void
10014 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10015 {
10016     dTHX;
10017     va_list args;
10018
10019     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10020
10021     va_start(args, pat);
10022     sv_vcatpvf(sv, pat, &args);
10023     va_end(args);
10024 }
10025
10026 /* pTHX_ magic can't cope with varargs, so this is a no-context
10027  * version of the main function, (which may itself be aliased to us).
10028  * Don't access this version directly.
10029  */
10030
10031 void
10032 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10033 {
10034     dTHX;
10035     va_list args;
10036
10037     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10038
10039     va_start(args, pat);
10040     sv_vcatpvf_mg(sv, pat, &args);
10041     va_end(args);
10042 }
10043 #endif
10044
10045 /*
10046 =for apidoc sv_catpvf
10047
10048 Processes its arguments like C<sprintf> and appends the formatted
10049 output to an SV.  If the appended data contains "wide" characters
10050 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10051 and characters >255 formatted with %c), the original SV might get
10052 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10053 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10054 valid UTF-8; if the original SV was bytes, the pattern should be too.
10055
10056 =cut */
10057
10058 void
10059 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10060 {
10061     va_list args;
10062
10063     PERL_ARGS_ASSERT_SV_CATPVF;
10064
10065     va_start(args, pat);
10066     sv_vcatpvf(sv, pat, &args);
10067     va_end(args);
10068 }
10069
10070 /*
10071 =for apidoc sv_vcatpvf
10072
10073 Processes its arguments like C<vsprintf> and appends the formatted output
10074 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10075
10076 Usually used via its frontend C<sv_catpvf>.
10077
10078 =cut
10079 */
10080
10081 void
10082 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10083 {
10084     PERL_ARGS_ASSERT_SV_VCATPVF;
10085
10086     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10087 }
10088
10089 /*
10090 =for apidoc sv_catpvf_mg
10091
10092 Like C<sv_catpvf>, but also handles 'set' magic.
10093
10094 =cut
10095 */
10096
10097 void
10098 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10099 {
10100     va_list args;
10101
10102     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10103
10104     va_start(args, pat);
10105     sv_vcatpvf_mg(sv, pat, &args);
10106     va_end(args);
10107 }
10108
10109 /*
10110 =for apidoc sv_vcatpvf_mg
10111
10112 Like C<sv_vcatpvf>, but also handles 'set' magic.
10113
10114 Usually used via its frontend C<sv_catpvf_mg>.
10115
10116 =cut
10117 */
10118
10119 void
10120 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10121 {
10122     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10123
10124     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10125     SvSETMAGIC(sv);
10126 }
10127
10128 /*
10129 =for apidoc sv_vsetpvfn
10130
10131 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10132 appending it.
10133
10134 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10135
10136 =cut
10137 */
10138
10139 void
10140 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10141                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10142 {
10143     PERL_ARGS_ASSERT_SV_VSETPVFN;
10144
10145     sv_setpvs(sv, "");
10146     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10147 }
10148
10149
10150 /*
10151  * Warn of missing argument to sprintf, and then return a defined value
10152  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10153  */
10154 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10155 STATIC SV*
10156 S_vcatpvfn_missing_argument(pTHX) {
10157     if (ckWARN(WARN_MISSING)) {
10158         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10159                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10160     }
10161     return &PL_sv_no;
10162 }
10163
10164
10165 STATIC I32
10166 S_expect_number(pTHX_ char **const pattern)
10167 {
10168     dVAR;
10169     I32 var = 0;
10170
10171     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10172
10173     switch (**pattern) {
10174     case '1': case '2': case '3':
10175     case '4': case '5': case '6':
10176     case '7': case '8': case '9':
10177         var = *(*pattern)++ - '0';
10178         while (isDIGIT(**pattern)) {
10179             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10180             if (tmp < var)
10181                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10182             var = tmp;
10183         }
10184     }
10185     return var;
10186 }
10187
10188 STATIC char *
10189 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10190 {
10191     const int neg = nv < 0;
10192     UV uv;
10193
10194     PERL_ARGS_ASSERT_F0CONVERT;
10195
10196     if (neg)
10197         nv = -nv;
10198     if (nv < UV_MAX) {
10199         char *p = endbuf;
10200         nv += 0.5;
10201         uv = (UV)nv;
10202         if (uv & 1 && uv == nv)
10203             uv--;                       /* Round to even */
10204         do {
10205             const unsigned dig = uv % 10;
10206             *--p = '0' + dig;
10207         } while (uv /= 10);
10208         if (neg)
10209             *--p = '-';
10210         *len = endbuf - p;
10211         return p;
10212     }
10213     return NULL;
10214 }
10215
10216
10217 /*
10218 =for apidoc sv_vcatpvfn
10219
10220 =for apidoc sv_vcatpvfn_flags
10221
10222 Processes its arguments like C<vsprintf> and appends the formatted output
10223 to an SV.  Uses an array of SVs if the C style variable argument list is
10224 missing (NULL).  When running with taint checks enabled, indicates via
10225 C<maybe_tainted> if results are untrustworthy (often due to the use of
10226 locales).
10227
10228 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10229
10230 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10231
10232 =cut
10233 */
10234
10235 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10236                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10237                         vec_utf8 = DO_UTF8(vecsv);
10238
10239 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10240
10241 void
10242 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10243                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10244 {
10245     PERL_ARGS_ASSERT_SV_VCATPVFN;
10246
10247     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10248 }
10249
10250 void
10251 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10252                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10253                        const U32 flags)
10254 {
10255     dVAR;
10256     char *p;
10257     char *q;
10258     const char *patend;
10259     STRLEN origlen;
10260     I32 svix = 0;
10261     static const char nullstr[] = "(null)";
10262     SV *argsv = NULL;
10263     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10264     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10265     SV *nsv = NULL;
10266     /* Times 4: a decimal digit takes more than 3 binary digits.
10267      * NV_DIG: mantissa takes than many decimal digits.
10268      * Plus 32: Playing safe. */
10269     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10270     /* large enough for "%#.#f" --chip */
10271     /* what about long double NVs? --jhi */
10272
10273     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10274     PERL_UNUSED_ARG(maybe_tainted);
10275
10276     if (flags & SV_GMAGIC)
10277         SvGETMAGIC(sv);
10278
10279     /* no matter what, this is a string now */
10280     (void)SvPV_force_nomg(sv, origlen);
10281
10282     /* special-case "", "%s", and "%-p" (SVf - see below) */
10283     if (patlen == 0)
10284         return;
10285     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10286         if (args) {
10287             const char * const s = va_arg(*args, char*);
10288             sv_catpv_nomg(sv, s ? s : nullstr);
10289         }
10290         else if (svix < svmax) {
10291             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10292             SvGETMAGIC(*svargs);
10293             sv_catsv_nomg(sv, *svargs);
10294         }
10295         else
10296             S_vcatpvfn_missing_argument(aTHX);
10297         return;
10298     }
10299     if (args && patlen == 3 && pat[0] == '%' &&
10300                 pat[1] == '-' && pat[2] == 'p') {
10301         argsv = MUTABLE_SV(va_arg(*args, void*));
10302         sv_catsv_nomg(sv, argsv);
10303         return;
10304     }
10305
10306 #ifndef USE_LONG_DOUBLE
10307     /* special-case "%.<number>[gf]" */
10308     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10309          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10310         unsigned digits = 0;
10311         const char *pp;
10312
10313         pp = pat + 2;
10314         while (*pp >= '0' && *pp <= '9')
10315             digits = 10 * digits + (*pp++ - '0');
10316         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10317             const NV nv = SvNV(*svargs);
10318             if (*pp == 'g') {
10319                 /* Add check for digits != 0 because it seems that some
10320                    gconverts are buggy in this case, and we don't yet have
10321                    a Configure test for this.  */
10322                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10323                      /* 0, point, slack */
10324                     Gconvert(nv, (int)digits, 0, ebuf);
10325                     sv_catpv_nomg(sv, ebuf);
10326                     if (*ebuf)  /* May return an empty string for digits==0 */
10327                         return;
10328                 }
10329             } else if (!digits) {
10330                 STRLEN l;
10331
10332                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10333                     sv_catpvn_nomg(sv, p, l);
10334                     return;
10335                 }
10336             }
10337         }
10338     }
10339 #endif /* !USE_LONG_DOUBLE */
10340
10341     if (!args && svix < svmax && DO_UTF8(*svargs))
10342         has_utf8 = TRUE;
10343
10344     patend = (char*)pat + patlen;
10345     for (p = (char*)pat; p < patend; p = q) {
10346         bool alt = FALSE;
10347         bool left = FALSE;
10348         bool vectorize = FALSE;
10349         bool vectorarg = FALSE;
10350         bool vec_utf8 = FALSE;
10351         char fill = ' ';
10352         char plus = 0;
10353         char intsize = 0;
10354         STRLEN width = 0;
10355         STRLEN zeros = 0;
10356         bool has_precis = FALSE;
10357         STRLEN precis = 0;
10358         const I32 osvix = svix;
10359         bool is_utf8 = FALSE;  /* is this item utf8?   */
10360 #ifdef HAS_LDBL_SPRINTF_BUG
10361         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10362            with sfio - Allen <allens@cpan.org> */
10363         bool fix_ldbl_sprintf_bug = FALSE;
10364 #endif
10365
10366         char esignbuf[4];
10367         U8 utf8buf[UTF8_MAXBYTES+1];
10368         STRLEN esignlen = 0;
10369
10370         const char *eptr = NULL;
10371         const char *fmtstart;
10372         STRLEN elen = 0;
10373         SV *vecsv = NULL;
10374         const U8 *vecstr = NULL;
10375         STRLEN veclen = 0;
10376         char c = 0;
10377         int i;
10378         unsigned base = 0;
10379         IV iv = 0;
10380         UV uv = 0;
10381         /* we need a long double target in case HAS_LONG_DOUBLE but
10382            not USE_LONG_DOUBLE
10383         */
10384 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10385         long double nv;
10386 #else
10387         NV nv;
10388 #endif
10389         STRLEN have;
10390         STRLEN need;
10391         STRLEN gap;
10392         const char *dotstr = ".";
10393         STRLEN dotstrlen = 1;
10394         I32 efix = 0; /* explicit format parameter index */
10395         I32 ewix = 0; /* explicit width index */
10396         I32 epix = 0; /* explicit precision index */
10397         I32 evix = 0; /* explicit vector index */
10398         bool asterisk = FALSE;
10399
10400         /* echo everything up to the next format specification */
10401         for (q = p; q < patend && *q != '%'; ++q) ;
10402         if (q > p) {
10403             if (has_utf8 && !pat_utf8)
10404                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10405             else
10406                 sv_catpvn_nomg(sv, p, q - p);
10407             p = q;
10408         }
10409         if (q++ >= patend)
10410             break;
10411
10412         fmtstart = q;
10413
10414 /*
10415     We allow format specification elements in this order:
10416         \d+\$              explicit format parameter index
10417         [-+ 0#]+           flags
10418         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10419         0                  flag (as above): repeated to allow "v02"     
10420         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10421         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10422         [hlqLV]            size
10423     [%bcdefginopsuxDFOUX] format (mandatory)
10424 */
10425
10426         if (args) {
10427 /*  
10428         As of perl5.9.3, printf format checking is on by default.
10429         Internally, perl uses %p formats to provide an escape to
10430         some extended formatting.  This block deals with those
10431         extensions: if it does not match, (char*)q is reset and
10432         the normal format processing code is used.
10433
10434         Currently defined extensions are:
10435                 %p              include pointer address (standard)      
10436                 %-p     (SVf)   include an SV (previously %_)
10437                 %-<num>p        include an SV with precision <num>      
10438                 %2p             include a HEK
10439                 %3p             include a HEK with precision of 256
10440                 %<num>p         (where num != 2 or 3) reserved for future
10441                                 extensions
10442
10443         Robin Barker 2005-07-14 (but modified since)
10444
10445                 %1p     (VDf)   removed.  RMB 2007-10-19
10446 */
10447             char* r = q; 
10448             bool sv = FALSE;    
10449             STRLEN n = 0;
10450             if (*q == '-')
10451                 sv = *q++;
10452             n = expect_number(&q);
10453             if (*q++ == 'p') {
10454                 if (sv) {                       /* SVf */
10455                     if (n) {
10456                         precis = n;
10457                         has_precis = TRUE;
10458                     }
10459                     argsv = MUTABLE_SV(va_arg(*args, void*));
10460                     eptr = SvPV_const(argsv, elen);
10461                     if (DO_UTF8(argsv))
10462                         is_utf8 = TRUE;
10463                     goto string;
10464                 }
10465                 else if (n==2 || n==3) {        /* HEKf */
10466                     HEK * const hek = va_arg(*args, HEK *);
10467                     eptr = HEK_KEY(hek);
10468                     elen = HEK_LEN(hek);
10469                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10470                     if (n==3) precis = 256, has_precis = TRUE;
10471                     goto string;
10472                 }
10473                 else if (n) {
10474                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10475                                      "internal %%<num>p might conflict with future printf extensions");
10476                 }
10477             }
10478             q = r; 
10479         }
10480
10481         if ( (width = expect_number(&q)) ) {
10482             if (*q == '$') {
10483                 ++q;
10484                 efix = width;
10485             } else {
10486                 goto gotwidth;
10487             }
10488         }
10489
10490         /* FLAGS */
10491
10492         while (*q) {
10493             switch (*q) {
10494             case ' ':
10495             case '+':
10496                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10497                     q++;
10498                 else
10499                     plus = *q++;
10500                 continue;
10501
10502             case '-':
10503                 left = TRUE;
10504                 q++;
10505                 continue;
10506
10507             case '0':
10508                 fill = *q++;
10509                 continue;
10510
10511             case '#':
10512                 alt = TRUE;
10513                 q++;
10514                 continue;
10515
10516             default:
10517                 break;
10518             }
10519             break;
10520         }
10521
10522       tryasterisk:
10523         if (*q == '*') {
10524             q++;
10525             if ( (ewix = expect_number(&q)) )
10526                 if (*q++ != '$')
10527                     goto unknown;
10528             asterisk = TRUE;
10529         }
10530         if (*q == 'v') {
10531             q++;
10532             if (vectorize)
10533                 goto unknown;
10534             if ((vectorarg = asterisk)) {
10535                 evix = ewix;
10536                 ewix = 0;
10537                 asterisk = FALSE;
10538             }
10539             vectorize = TRUE;
10540             goto tryasterisk;
10541         }
10542
10543         if (!asterisk)
10544         {
10545             if( *q == '0' )
10546                 fill = *q++;
10547             width = expect_number(&q);
10548         }
10549
10550         if (vectorize && vectorarg) {
10551             /* vectorizing, but not with the default "." */
10552             if (args)
10553                 vecsv = va_arg(*args, SV*);
10554             else if (evix) {
10555                 vecsv = (evix > 0 && evix <= svmax)
10556                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10557             } else {
10558                 vecsv = svix < svmax
10559                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10560             }
10561             dotstr = SvPV_const(vecsv, dotstrlen);
10562             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10563                bad with tied or overloaded values that return UTF8.  */
10564             if (DO_UTF8(vecsv))
10565                 is_utf8 = TRUE;
10566             else if (has_utf8) {
10567                 vecsv = sv_mortalcopy(vecsv);
10568                 sv_utf8_upgrade(vecsv);
10569                 dotstr = SvPV_const(vecsv, dotstrlen);
10570                 is_utf8 = TRUE;
10571             }               
10572         }
10573
10574         if (asterisk) {
10575             if (args)
10576                 i = va_arg(*args, int);
10577             else
10578                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10579                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10580             left |= (i < 0);
10581             width = (i < 0) ? -i : i;
10582         }
10583       gotwidth:
10584
10585         /* PRECISION */
10586
10587         if (*q == '.') {
10588             q++;
10589             if (*q == '*') {
10590                 q++;
10591                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10592                     goto unknown;
10593                 /* XXX: todo, support specified precision parameter */
10594                 if (epix)
10595                     goto unknown;
10596                 if (args)
10597                     i = va_arg(*args, int);
10598                 else
10599                     i = (ewix ? ewix <= svmax : svix < svmax)
10600                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10601                 precis = i;
10602                 has_precis = !(i < 0);
10603             }
10604             else {
10605                 precis = 0;
10606                 while (isDIGIT(*q))
10607                     precis = precis * 10 + (*q++ - '0');
10608                 has_precis = TRUE;
10609             }
10610         }
10611
10612         if (vectorize) {
10613             if (args) {
10614                 VECTORIZE_ARGS
10615             }
10616             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10617                 vecsv = svargs[efix ? efix-1 : svix++];
10618                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10619                 vec_utf8 = DO_UTF8(vecsv);
10620
10621                 /* if this is a version object, we need to convert
10622                  * back into v-string notation and then let the
10623                  * vectorize happen normally
10624                  */
10625                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10626                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10627                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10628                         "vector argument not supported with alpha versions");
10629                         goto vdblank;
10630                     }
10631                     vecsv = sv_newmortal();
10632                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10633                                  vecsv);
10634                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10635                     vec_utf8 = DO_UTF8(vecsv);
10636                 }
10637             }
10638             else {
10639               vdblank:
10640                 vecstr = (U8*)"";
10641                 veclen = 0;
10642             }
10643         }
10644
10645         /* SIZE */
10646
10647         switch (*q) {
10648 #ifdef WIN32
10649         case 'I':                       /* Ix, I32x, and I64x */
10650 #  ifdef USE_64_BIT_INT
10651             if (q[1] == '6' && q[2] == '4') {
10652                 q += 3;
10653                 intsize = 'q';
10654                 break;
10655             }
10656 #  endif
10657             if (q[1] == '3' && q[2] == '2') {
10658                 q += 3;
10659                 break;
10660             }
10661 #  ifdef USE_64_BIT_INT
10662             intsize = 'q';
10663 #  endif
10664             q++;
10665             break;
10666 #endif
10667 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10668         case 'L':                       /* Ld */
10669             /*FALLTHROUGH*/
10670 #ifdef HAS_QUAD
10671         case 'q':                       /* qd */
10672 #endif
10673             intsize = 'q';
10674             q++;
10675             break;
10676 #endif
10677         case 'l':
10678             ++q;
10679 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10680             if (*q == 'l') {    /* lld, llf */
10681                 intsize = 'q';
10682                 ++q;
10683             }
10684             else
10685 #endif
10686                 intsize = 'l';
10687             break;
10688         case 'h':
10689             if (*++q == 'h') {  /* hhd, hhu */
10690                 intsize = 'c';
10691                 ++q;
10692             }
10693             else
10694                 intsize = 'h';
10695             break;
10696         case 'V':
10697         case 'z':
10698         case 't':
10699 #if HAS_C99
10700         case 'j':
10701 #endif
10702             intsize = *q++;
10703             break;
10704         }
10705
10706         /* CONVERSION */
10707
10708         if (*q == '%') {
10709             eptr = q++;
10710             elen = 1;
10711             if (vectorize) {
10712                 c = '%';
10713                 goto unknown;
10714             }
10715             goto string;
10716         }
10717
10718         if (!vectorize && !args) {
10719             if (efix) {
10720                 const I32 i = efix-1;
10721                 argsv = (i >= 0 && i < svmax)
10722                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10723             } else {
10724                 argsv = (svix >= 0 && svix < svmax)
10725                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10726             }
10727         }
10728
10729         switch (c = *q++) {
10730
10731             /* STRINGS */
10732
10733         case 'c':
10734             if (vectorize)
10735                 goto unknown;
10736             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10737             if ((uv > 255 ||
10738                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10739                 && !IN_BYTES) {
10740                 eptr = (char*)utf8buf;
10741                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10742                 is_utf8 = TRUE;
10743             }
10744             else {
10745                 c = (char)uv;
10746                 eptr = &c;
10747                 elen = 1;
10748             }
10749             goto string;
10750
10751         case 's':
10752             if (vectorize)
10753                 goto unknown;
10754             if (args) {
10755                 eptr = va_arg(*args, char*);
10756                 if (eptr)
10757                     elen = strlen(eptr);
10758                 else {
10759                     eptr = (char *)nullstr;
10760                     elen = sizeof nullstr - 1;
10761                 }
10762             }
10763             else {
10764                 eptr = SvPV_const(argsv, elen);
10765                 if (DO_UTF8(argsv)) {
10766                     STRLEN old_precis = precis;
10767                     if (has_precis && precis < elen) {
10768                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10769                         STRLEN p = precis > ulen ? ulen : precis;
10770                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10771                                                         /* sticks at end */
10772                     }
10773                     if (width) { /* fudge width (can't fudge elen) */
10774                         if (has_precis && precis < elen)
10775                             width += precis - old_precis;
10776                         else
10777                             width +=
10778                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10779                     }
10780                     is_utf8 = TRUE;
10781                 }
10782             }
10783
10784         string:
10785             if (has_precis && precis < elen)
10786                 elen = precis;
10787             break;
10788
10789             /* INTEGERS */
10790
10791         case 'p':
10792             if (alt || vectorize)
10793                 goto unknown;
10794             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10795             base = 16;
10796             goto integer;
10797
10798         case 'D':
10799 #ifdef IV_IS_QUAD
10800             intsize = 'q';
10801 #else
10802             intsize = 'l';
10803 #endif
10804             /*FALLTHROUGH*/
10805         case 'd':
10806         case 'i':
10807 #if vdNUMBER
10808         format_vd:
10809 #endif
10810             if (vectorize) {
10811                 STRLEN ulen;
10812                 if (!veclen)
10813                     continue;
10814                 if (vec_utf8)
10815                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10816                                         UTF8_ALLOW_ANYUV);
10817                 else {
10818                     uv = *vecstr;
10819                     ulen = 1;
10820                 }
10821                 vecstr += ulen;
10822                 veclen -= ulen;
10823                 if (plus)
10824                      esignbuf[esignlen++] = plus;
10825             }
10826             else if (args) {
10827                 switch (intsize) {
10828                 case 'c':       iv = (char)va_arg(*args, int); break;
10829                 case 'h':       iv = (short)va_arg(*args, int); break;
10830                 case 'l':       iv = va_arg(*args, long); break;
10831                 case 'V':       iv = va_arg(*args, IV); break;
10832                 case 'z':       iv = va_arg(*args, SSize_t); break;
10833                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10834                 default:        iv = va_arg(*args, int); break;
10835 #if HAS_C99
10836                 case 'j':       iv = va_arg(*args, intmax_t); break;
10837 #endif
10838                 case 'q':
10839 #ifdef HAS_QUAD
10840                                 iv = va_arg(*args, Quad_t); break;
10841 #else
10842                                 goto unknown;
10843 #endif
10844                 }
10845             }
10846             else {
10847                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10848                 switch (intsize) {
10849                 case 'c':       iv = (char)tiv; break;
10850                 case 'h':       iv = (short)tiv; break;
10851                 case 'l':       iv = (long)tiv; break;
10852                 case 'V':
10853                 default:        iv = tiv; break;
10854                 case 'q':
10855 #ifdef HAS_QUAD
10856                                 iv = (Quad_t)tiv; break;
10857 #else
10858                                 goto unknown;
10859 #endif
10860                 }
10861             }
10862             if ( !vectorize )   /* we already set uv above */
10863             {
10864                 if (iv >= 0) {
10865                     uv = iv;
10866                     if (plus)
10867                         esignbuf[esignlen++] = plus;
10868                 }
10869                 else {
10870                     uv = -iv;
10871                     esignbuf[esignlen++] = '-';
10872                 }
10873             }
10874             base = 10;
10875             goto integer;
10876
10877         case 'U':
10878 #ifdef IV_IS_QUAD
10879             intsize = 'q';
10880 #else
10881             intsize = 'l';
10882 #endif
10883             /*FALLTHROUGH*/
10884         case 'u':
10885             base = 10;
10886             goto uns_integer;
10887
10888         case 'B':
10889         case 'b':
10890             base = 2;
10891             goto uns_integer;
10892
10893         case 'O':
10894 #ifdef IV_IS_QUAD
10895             intsize = 'q';
10896 #else
10897             intsize = 'l';
10898 #endif
10899             /*FALLTHROUGH*/
10900         case 'o':
10901             base = 8;
10902             goto uns_integer;
10903
10904         case 'X':
10905         case 'x':
10906             base = 16;
10907
10908         uns_integer:
10909             if (vectorize) {
10910                 STRLEN ulen;
10911         vector:
10912                 if (!veclen)
10913                     continue;
10914                 if (vec_utf8)
10915                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10916                                         UTF8_ALLOW_ANYUV);
10917                 else {
10918                     uv = *vecstr;
10919                     ulen = 1;
10920                 }
10921                 vecstr += ulen;
10922                 veclen -= ulen;
10923             }
10924             else if (args) {
10925                 switch (intsize) {
10926                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10927                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10928                 case 'l':  uv = va_arg(*args, unsigned long); break;
10929                 case 'V':  uv = va_arg(*args, UV); break;
10930                 case 'z':  uv = va_arg(*args, Size_t); break;
10931                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10932 #if HAS_C99
10933                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10934 #endif
10935                 default:   uv = va_arg(*args, unsigned); break;
10936                 case 'q':
10937 #ifdef HAS_QUAD
10938                            uv = va_arg(*args, Uquad_t); break;
10939 #else
10940                            goto unknown;
10941 #endif
10942                 }
10943             }
10944             else {
10945                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10946                 switch (intsize) {
10947                 case 'c':       uv = (unsigned char)tuv; break;
10948                 case 'h':       uv = (unsigned short)tuv; break;
10949                 case 'l':       uv = (unsigned long)tuv; break;
10950                 case 'V':
10951                 default:        uv = tuv; break;
10952                 case 'q':
10953 #ifdef HAS_QUAD
10954                                 uv = (Uquad_t)tuv; break;
10955 #else
10956                                 goto unknown;
10957 #endif
10958                 }
10959             }
10960
10961         integer:
10962             {
10963                 char *ptr = ebuf + sizeof ebuf;
10964                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10965                 zeros = 0;
10966
10967                 switch (base) {
10968                     unsigned dig;
10969                 case 16:
10970                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10971                     do {
10972                         dig = uv & 15;
10973                         *--ptr = p[dig];
10974                     } while (uv >>= 4);
10975                     if (tempalt) {
10976                         esignbuf[esignlen++] = '0';
10977                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10978                     }
10979                     break;
10980                 case 8:
10981                     do {
10982                         dig = uv & 7;
10983                         *--ptr = '0' + dig;
10984                     } while (uv >>= 3);
10985                     if (alt && *ptr != '0')
10986                         *--ptr = '0';
10987                     break;
10988                 case 2:
10989                     do {
10990                         dig = uv & 1;
10991                         *--ptr = '0' + dig;
10992                     } while (uv >>= 1);
10993                     if (tempalt) {
10994                         esignbuf[esignlen++] = '0';
10995                         esignbuf[esignlen++] = c;
10996                     }
10997                     break;
10998                 default:                /* it had better be ten or less */
10999                     do {
11000                         dig = uv % base;
11001                         *--ptr = '0' + dig;
11002                     } while (uv /= base);
11003                     break;
11004                 }
11005                 elen = (ebuf + sizeof ebuf) - ptr;
11006                 eptr = ptr;
11007                 if (has_precis) {
11008                     if (precis > elen)
11009                         zeros = precis - elen;
11010                     else if (precis == 0 && elen == 1 && *eptr == '0'
11011                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11012                         elen = 0;
11013
11014                 /* a precision nullifies the 0 flag. */
11015                     if (fill == '0')
11016                         fill = ' ';
11017                 }
11018             }
11019             break;
11020
11021             /* FLOATING POINT */
11022
11023         case 'F':
11024             c = 'f';            /* maybe %F isn't supported here */
11025             /*FALLTHROUGH*/
11026         case 'e': case 'E':
11027         case 'f':
11028         case 'g': case 'G':
11029             if (vectorize)
11030                 goto unknown;
11031
11032             /* This is evil, but floating point is even more evil */
11033
11034             /* for SV-style calling, we can only get NV
11035                for C-style calling, we assume %f is double;
11036                for simplicity we allow any of %Lf, %llf, %qf for long double
11037             */
11038             switch (intsize) {
11039             case 'V':
11040 #if defined(USE_LONG_DOUBLE)
11041                 intsize = 'q';
11042 #endif
11043                 break;
11044 /* [perl #20339] - we should accept and ignore %lf rather than die */
11045             case 'l':
11046                 /*FALLTHROUGH*/
11047             default:
11048 #if defined(USE_LONG_DOUBLE)
11049                 intsize = args ? 0 : 'q';
11050 #endif
11051                 break;
11052             case 'q':
11053 #if defined(HAS_LONG_DOUBLE)
11054                 break;
11055 #else
11056                 /*FALLTHROUGH*/
11057 #endif
11058             case 'c':
11059             case 'h':
11060             case 'z':
11061             case 't':
11062             case 'j':
11063                 goto unknown;
11064             }
11065
11066             /* now we need (long double) if intsize == 'q', else (double) */
11067             nv = (args) ?
11068 #if LONG_DOUBLESIZE > DOUBLESIZE
11069                 intsize == 'q' ?
11070                     va_arg(*args, long double) :
11071                     va_arg(*args, double)
11072 #else
11073                     va_arg(*args, double)
11074 #endif
11075                 : SvNV(argsv);
11076
11077             need = 0;
11078             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11079                else. frexp() has some unspecified behaviour for those three */
11080             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11081                 i = PERL_INT_MIN;
11082                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11083                    will cast our (long double) to (double) */
11084                 (void)Perl_frexp(nv, &i);
11085                 if (i == PERL_INT_MIN)
11086                     Perl_die(aTHX_ "panic: frexp");
11087                 if (i > 0)
11088                     need = BIT_DIGITS(i);
11089             }
11090             need += has_precis ? precis : 6; /* known default */
11091
11092             if (need < width)
11093                 need = width;
11094
11095 #ifdef HAS_LDBL_SPRINTF_BUG
11096             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11097                with sfio - Allen <allens@cpan.org> */
11098
11099 #  ifdef DBL_MAX
11100 #    define MY_DBL_MAX DBL_MAX
11101 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11102 #    if DOUBLESIZE >= 8
11103 #      define MY_DBL_MAX 1.7976931348623157E+308L
11104 #    else
11105 #      define MY_DBL_MAX 3.40282347E+38L
11106 #    endif
11107 #  endif
11108
11109 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11110 #    define MY_DBL_MAX_BUG 1L
11111 #  else
11112 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11113 #  endif
11114
11115 #  ifdef DBL_MIN
11116 #    define MY_DBL_MIN DBL_MIN
11117 #  else  /* XXX guessing! -Allen */
11118 #    if DOUBLESIZE >= 8
11119 #      define MY_DBL_MIN 2.2250738585072014E-308L
11120 #    else
11121 #      define MY_DBL_MIN 1.17549435E-38L
11122 #    endif
11123 #  endif
11124
11125             if ((intsize == 'q') && (c == 'f') &&
11126                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11127                 (need < DBL_DIG)) {
11128                 /* it's going to be short enough that
11129                  * long double precision is not needed */
11130
11131                 if ((nv <= 0L) && (nv >= -0L))
11132                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11133                 else {
11134                     /* would use Perl_fp_class as a double-check but not
11135                      * functional on IRIX - see perl.h comments */
11136
11137                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11138                         /* It's within the range that a double can represent */
11139 #if defined(DBL_MAX) && !defined(DBL_MIN)
11140                         if ((nv >= ((long double)1/DBL_MAX)) ||
11141                             (nv <= (-(long double)1/DBL_MAX)))
11142 #endif
11143                         fix_ldbl_sprintf_bug = TRUE;
11144                     }
11145                 }
11146                 if (fix_ldbl_sprintf_bug == TRUE) {
11147                     double temp;
11148
11149                     intsize = 0;
11150                     temp = (double)nv;
11151                     nv = (NV)temp;
11152                 }
11153             }
11154
11155 #  undef MY_DBL_MAX
11156 #  undef MY_DBL_MAX_BUG
11157 #  undef MY_DBL_MIN
11158
11159 #endif /* HAS_LDBL_SPRINTF_BUG */
11160
11161             need += 20; /* fudge factor */
11162             if (PL_efloatsize < need) {
11163                 Safefree(PL_efloatbuf);
11164                 PL_efloatsize = need + 20; /* more fudge */
11165                 Newx(PL_efloatbuf, PL_efloatsize, char);
11166                 PL_efloatbuf[0] = '\0';
11167             }
11168
11169             if ( !(width || left || plus || alt) && fill != '0'
11170                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11171                 /* See earlier comment about buggy Gconvert when digits,
11172                    aka precis is 0  */
11173                 if ( c == 'g' && precis) {
11174                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11175                     /* May return an empty string for digits==0 */
11176                     if (*PL_efloatbuf) {
11177                         elen = strlen(PL_efloatbuf);
11178                         goto float_converted;
11179                     }
11180                 } else if ( c == 'f' && !precis) {
11181                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11182                         break;
11183                 }
11184             }
11185             {
11186                 char *ptr = ebuf + sizeof ebuf;
11187                 *--ptr = '\0';
11188                 *--ptr = c;
11189                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11190 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11191                 if (intsize == 'q') {
11192                     /* Copy the one or more characters in a long double
11193                      * format before the 'base' ([efgEFG]) character to
11194                      * the format string. */
11195                     static char const prifldbl[] = PERL_PRIfldbl;
11196                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11197                     while (p >= prifldbl) { *--ptr = *p--; }
11198                 }
11199 #endif
11200                 if (has_precis) {
11201                     base = precis;
11202                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11203                     *--ptr = '.';
11204                 }
11205                 if (width) {
11206                     base = width;
11207                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11208                 }
11209                 if (fill == '0')
11210                     *--ptr = fill;
11211                 if (left)
11212                     *--ptr = '-';
11213                 if (plus)
11214                     *--ptr = plus;
11215                 if (alt)
11216                     *--ptr = '#';
11217                 *--ptr = '%';
11218
11219                 /* No taint.  Otherwise we are in the strange situation
11220                  * where printf() taints but print($float) doesn't.
11221                  * --jhi */
11222 #if defined(HAS_LONG_DOUBLE)
11223                 elen = ((intsize == 'q')
11224                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11225                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11226 #else
11227                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11228 #endif
11229             }
11230         float_converted:
11231             eptr = PL_efloatbuf;
11232             break;
11233
11234             /* SPECIAL */
11235
11236         case 'n':
11237             if (vectorize)
11238                 goto unknown;
11239             i = SvCUR(sv) - origlen;
11240             if (args) {
11241                 switch (intsize) {
11242                 case 'c':       *(va_arg(*args, char*)) = i; break;
11243                 case 'h':       *(va_arg(*args, short*)) = i; break;
11244                 default:        *(va_arg(*args, int*)) = i; break;
11245                 case 'l':       *(va_arg(*args, long*)) = i; break;
11246                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11247                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11248                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11249 #if HAS_C99
11250                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11251 #endif
11252                 case 'q':
11253 #ifdef HAS_QUAD
11254                                 *(va_arg(*args, Quad_t*)) = i; break;
11255 #else
11256                                 goto unknown;
11257 #endif
11258                 }
11259             }
11260             else
11261                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11262             continue;   /* not "break" */
11263
11264             /* UNKNOWN */
11265
11266         default:
11267       unknown:
11268             if (!args
11269                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11270                 && ckWARN(WARN_PRINTF))
11271             {
11272                 SV * const msg = sv_newmortal();
11273                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11274                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11275                 if (fmtstart < patend) {
11276                     const char * const fmtend = q < patend ? q : patend;
11277                     const char * f;
11278                     sv_catpvs(msg, "\"%");
11279                     for (f = fmtstart; f < fmtend; f++) {
11280                         if (isPRINT(*f)) {
11281                             sv_catpvn_nomg(msg, f, 1);
11282                         } else {
11283                             Perl_sv_catpvf(aTHX_ msg,
11284                                            "\\%03"UVof, (UV)*f & 0xFF);
11285                         }
11286                     }
11287                     sv_catpvs(msg, "\"");
11288                 } else {
11289                     sv_catpvs(msg, "end of string");
11290                 }
11291                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11292             }
11293
11294             /* output mangled stuff ... */
11295             if (c == '\0')
11296                 --q;
11297             eptr = p;
11298             elen = q - p;
11299
11300             /* ... right here, because formatting flags should not apply */
11301             SvGROW(sv, SvCUR(sv) + elen + 1);
11302             p = SvEND(sv);
11303             Copy(eptr, p, elen, char);
11304             p += elen;
11305             *p = '\0';
11306             SvCUR_set(sv, p - SvPVX_const(sv));
11307             svix = osvix;
11308             continue;   /* not "break" */
11309         }
11310
11311         if (is_utf8 != has_utf8) {
11312             if (is_utf8) {
11313                 if (SvCUR(sv))
11314                     sv_utf8_upgrade(sv);
11315             }
11316             else {
11317                 const STRLEN old_elen = elen;
11318                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11319                 sv_utf8_upgrade(nsv);
11320                 eptr = SvPVX_const(nsv);
11321                 elen = SvCUR(nsv);
11322
11323                 if (width) { /* fudge width (can't fudge elen) */
11324                     width += elen - old_elen;
11325                 }
11326                 is_utf8 = TRUE;
11327             }
11328         }
11329
11330         have = esignlen + zeros + elen;
11331         if (have < zeros)
11332             croak_memory_wrap();
11333
11334         need = (have > width ? have : width);
11335         gap = need - have;
11336
11337         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11338             croak_memory_wrap();
11339         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11340         p = SvEND(sv);
11341         if (esignlen && fill == '0') {
11342             int i;
11343             for (i = 0; i < (int)esignlen; i++)
11344                 *p++ = esignbuf[i];
11345         }
11346         if (gap && !left) {
11347             memset(p, fill, gap);
11348             p += gap;
11349         }
11350         if (esignlen && fill != '0') {
11351             int i;
11352             for (i = 0; i < (int)esignlen; i++)
11353                 *p++ = esignbuf[i];
11354         }
11355         if (zeros) {
11356             int i;
11357             for (i = zeros; i; i--)
11358                 *p++ = '0';
11359         }
11360         if (elen) {
11361             Copy(eptr, p, elen, char);
11362             p += elen;
11363         }
11364         if (gap && left) {
11365             memset(p, ' ', gap);
11366             p += gap;
11367         }
11368         if (vectorize) {
11369             if (veclen) {
11370                 Copy(dotstr, p, dotstrlen, char);
11371                 p += dotstrlen;
11372             }
11373             else
11374                 vectorize = FALSE;              /* done iterating over vecstr */
11375         }
11376         if (is_utf8)
11377             has_utf8 = TRUE;
11378         if (has_utf8)
11379             SvUTF8_on(sv);
11380         *p = '\0';
11381         SvCUR_set(sv, p - SvPVX_const(sv));
11382         if (vectorize) {
11383             esignlen = 0;
11384             goto vector;
11385         }
11386     }
11387     SvTAINT(sv);
11388 }
11389
11390 /* =========================================================================
11391
11392 =head1 Cloning an interpreter
11393
11394 All the macros and functions in this section are for the private use of
11395 the main function, perl_clone().
11396
11397 The foo_dup() functions make an exact copy of an existing foo thingy.
11398 During the course of a cloning, a hash table is used to map old addresses
11399 to new addresses.  The table is created and manipulated with the
11400 ptr_table_* functions.
11401
11402 =cut
11403
11404  * =========================================================================*/
11405
11406
11407 #if defined(USE_ITHREADS)
11408
11409 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11410 #ifndef GpREFCNT_inc
11411 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11412 #endif
11413
11414
11415 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11416    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11417    If this changes, please unmerge ss_dup.
11418    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11419 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11420 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11421 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11422 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11423 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11424 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11425 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11426 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11427 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11428 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11429 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11430 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11431 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11432
11433 /* clone a parser */
11434
11435 yy_parser *
11436 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11437 {
11438     yy_parser *parser;
11439
11440     PERL_ARGS_ASSERT_PARSER_DUP;
11441
11442     if (!proto)
11443         return NULL;
11444
11445     /* look for it in the table first */
11446     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11447     if (parser)
11448         return parser;
11449
11450     /* create anew and remember what it is */
11451     Newxz(parser, 1, yy_parser);
11452     ptr_table_store(PL_ptr_table, proto, parser);
11453
11454     /* XXX these not yet duped */
11455     parser->old_parser = NULL;
11456     parser->stack = NULL;
11457     parser->ps = NULL;
11458     parser->stack_size = 0;
11459     /* XXX parser->stack->state = 0; */
11460
11461     /* XXX eventually, just Copy() most of the parser struct ? */
11462
11463     parser->lex_brackets = proto->lex_brackets;
11464     parser->lex_casemods = proto->lex_casemods;
11465     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11466                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11467     parser->lex_casestack = savepvn(proto->lex_casestack,
11468                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11469     parser->lex_defer   = proto->lex_defer;
11470     parser->lex_dojoin  = proto->lex_dojoin;
11471     parser->lex_expect  = proto->lex_expect;
11472     parser->lex_formbrack = proto->lex_formbrack;
11473     parser->lex_inpat   = proto->lex_inpat;
11474     parser->lex_inwhat  = proto->lex_inwhat;
11475     parser->lex_op      = proto->lex_op;
11476     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11477     parser->lex_starts  = proto->lex_starts;
11478     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11479     parser->multi_close = proto->multi_close;
11480     parser->multi_open  = proto->multi_open;
11481     parser->multi_start = proto->multi_start;
11482     parser->multi_end   = proto->multi_end;
11483     parser->preambled   = proto->preambled;
11484     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11485     parser->linestr     = sv_dup_inc(proto->linestr, param);
11486     parser->expect      = proto->expect;
11487     parser->copline     = proto->copline;
11488     parser->last_lop_op = proto->last_lop_op;
11489     parser->lex_state   = proto->lex_state;
11490     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11491     /* rsfp_filters entries have fake IoDIRP() */
11492     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11493     parser->in_my       = proto->in_my;
11494     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11495     parser->error_count = proto->error_count;
11496
11497
11498     parser->linestr     = sv_dup_inc(proto->linestr, param);
11499
11500     {
11501         char * const ols = SvPVX(proto->linestr);
11502         char * const ls  = SvPVX(parser->linestr);
11503
11504         parser->bufptr      = ls + (proto->bufptr >= ols ?
11505                                     proto->bufptr -  ols : 0);
11506         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11507                                     proto->oldbufptr -  ols : 0);
11508         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11509                                     proto->oldoldbufptr -  ols : 0);
11510         parser->linestart   = ls + (proto->linestart >= ols ?
11511                                     proto->linestart -  ols : 0);
11512         parser->last_uni    = ls + (proto->last_uni >= ols ?
11513                                     proto->last_uni -  ols : 0);
11514         parser->last_lop    = ls + (proto->last_lop >= ols ?
11515                                     proto->last_lop -  ols : 0);
11516
11517         parser->bufend      = ls + SvCUR(parser->linestr);
11518     }
11519
11520     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11521
11522
11523 #ifdef PERL_MAD
11524     parser->endwhite    = proto->endwhite;
11525     parser->faketokens  = proto->faketokens;
11526     parser->lasttoke    = proto->lasttoke;
11527     parser->nextwhite   = proto->nextwhite;
11528     parser->realtokenstart = proto->realtokenstart;
11529     parser->skipwhite   = proto->skipwhite;
11530     parser->thisclose   = proto->thisclose;
11531     parser->thismad     = proto->thismad;
11532     parser->thisopen    = proto->thisopen;
11533     parser->thisstuff   = proto->thisstuff;
11534     parser->thistoken   = proto->thistoken;
11535     parser->thiswhite   = proto->thiswhite;
11536
11537     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11538     parser->curforce    = proto->curforce;
11539 #else
11540     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11541     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11542     parser->nexttoke    = proto->nexttoke;
11543 #endif
11544
11545     /* XXX should clone saved_curcop here, but we aren't passed
11546      * proto_perl; so do it in perl_clone_using instead */
11547
11548     return parser;
11549 }
11550
11551
11552 /* duplicate a file handle */
11553
11554 PerlIO *
11555 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11556 {
11557     PerlIO *ret;
11558
11559     PERL_ARGS_ASSERT_FP_DUP;
11560     PERL_UNUSED_ARG(type);
11561
11562     if (!fp)
11563         return (PerlIO*)NULL;
11564
11565     /* look for it in the table first */
11566     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11567     if (ret)
11568         return ret;
11569
11570     /* create anew and remember what it is */
11571     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11572     ptr_table_store(PL_ptr_table, fp, ret);
11573     return ret;
11574 }
11575
11576 /* duplicate a directory handle */
11577
11578 DIR *
11579 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11580 {
11581     DIR *ret;
11582
11583 #ifdef HAS_FCHDIR
11584     DIR *pwd;
11585     const Direntry_t *dirent;
11586     char smallbuf[256];
11587     char *name = NULL;
11588     STRLEN len = 0;
11589     long pos;
11590 #endif
11591
11592     PERL_UNUSED_CONTEXT;
11593     PERL_ARGS_ASSERT_DIRP_DUP;
11594
11595     if (!dp)
11596         return (DIR*)NULL;
11597
11598     /* look for it in the table first */
11599     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11600     if (ret)
11601         return ret;
11602
11603 #ifdef HAS_FCHDIR
11604
11605     PERL_UNUSED_ARG(param);
11606
11607     /* create anew */
11608
11609     /* open the current directory (so we can switch back) */
11610     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11611
11612     /* chdir to our dir handle and open the present working directory */
11613     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11614         PerlDir_close(pwd);
11615         return (DIR *)NULL;
11616     }
11617     /* Now we should have two dir handles pointing to the same dir. */
11618
11619     /* Be nice to the calling code and chdir back to where we were. */
11620     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11621
11622     /* We have no need of the pwd handle any more. */
11623     PerlDir_close(pwd);
11624
11625 #ifdef DIRNAMLEN
11626 # define d_namlen(d) (d)->d_namlen
11627 #else
11628 # define d_namlen(d) strlen((d)->d_name)
11629 #endif
11630     /* Iterate once through dp, to get the file name at the current posi-
11631        tion. Then step back. */
11632     pos = PerlDir_tell(dp);
11633     if ((dirent = PerlDir_read(dp))) {
11634         len = d_namlen(dirent);
11635         if (len <= sizeof smallbuf) name = smallbuf;
11636         else Newx(name, len, char);
11637         Move(dirent->d_name, name, len, char);
11638     }
11639     PerlDir_seek(dp, pos);
11640
11641     /* Iterate through the new dir handle, till we find a file with the
11642        right name. */
11643     if (!dirent) /* just before the end */
11644         for(;;) {
11645             pos = PerlDir_tell(ret);
11646             if (PerlDir_read(ret)) continue; /* not there yet */
11647             PerlDir_seek(ret, pos); /* step back */
11648             break;
11649         }
11650     else {
11651         const long pos0 = PerlDir_tell(ret);
11652         for(;;) {
11653             pos = PerlDir_tell(ret);
11654             if ((dirent = PerlDir_read(ret))) {
11655                 if (len == d_namlen(dirent)
11656                  && memEQ(name, dirent->d_name, len)) {
11657                     /* found it */
11658                     PerlDir_seek(ret, pos); /* step back */
11659                     break;
11660                 }
11661                 /* else we are not there yet; keep iterating */
11662             }
11663             else { /* This is not meant to happen. The best we can do is
11664                       reset the iterator to the beginning. */
11665                 PerlDir_seek(ret, pos0);
11666                 break;
11667             }
11668         }
11669     }
11670 #undef d_namlen
11671
11672     if (name && name != smallbuf)
11673         Safefree(name);
11674 #endif
11675
11676 #ifdef WIN32
11677     ret = win32_dirp_dup(dp, param);
11678 #endif
11679
11680     /* pop it in the pointer table */
11681     if (ret)
11682         ptr_table_store(PL_ptr_table, dp, ret);
11683
11684     return ret;
11685 }
11686
11687 /* duplicate a typeglob */
11688
11689 GP *
11690 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11691 {
11692     GP *ret;
11693
11694     PERL_ARGS_ASSERT_GP_DUP;
11695
11696     if (!gp)
11697         return (GP*)NULL;
11698     /* look for it in the table first */
11699     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11700     if (ret)
11701         return ret;
11702
11703     /* create anew and remember what it is */
11704     Newxz(ret, 1, GP);
11705     ptr_table_store(PL_ptr_table, gp, ret);
11706
11707     /* clone */
11708     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11709        on Newxz() to do this for us.  */
11710     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11711     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11712     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11713     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11714     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11715     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11716     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11717     ret->gp_cvgen       = gp->gp_cvgen;
11718     ret->gp_line        = gp->gp_line;
11719     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11720     return ret;
11721 }
11722
11723 /* duplicate a chain of magic */
11724
11725 MAGIC *
11726 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11727 {
11728     MAGIC *mgret = NULL;
11729     MAGIC **mgprev_p = &mgret;
11730
11731     PERL_ARGS_ASSERT_MG_DUP;
11732
11733     for (; mg; mg = mg->mg_moremagic) {
11734         MAGIC *nmg;
11735
11736         if ((param->flags & CLONEf_JOIN_IN)
11737                 && mg->mg_type == PERL_MAGIC_backref)
11738             /* when joining, we let the individual SVs add themselves to
11739              * backref as needed. */
11740             continue;
11741
11742         Newx(nmg, 1, MAGIC);
11743         *mgprev_p = nmg;
11744         mgprev_p = &(nmg->mg_moremagic);
11745
11746         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11747            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11748            from the original commit adding Perl_mg_dup() - revision 4538.
11749            Similarly there is the annotation "XXX random ptr?" next to the
11750            assignment to nmg->mg_ptr.  */
11751         *nmg = *mg;
11752
11753         /* FIXME for plugins
11754         if (nmg->mg_type == PERL_MAGIC_qr) {
11755             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11756         }
11757         else
11758         */
11759         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11760                           ? nmg->mg_type == PERL_MAGIC_backref
11761                                 /* The backref AV has its reference
11762                                  * count deliberately bumped by 1 */
11763                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11764                                                     nmg->mg_obj, param))
11765                                 : sv_dup_inc(nmg->mg_obj, param)
11766                           : sv_dup(nmg->mg_obj, param);
11767
11768         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11769             if (nmg->mg_len > 0) {
11770                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11771                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11772                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11773                 {
11774                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11775                     sv_dup_inc_multiple((SV**)(namtp->table),
11776                                         (SV**)(namtp->table), NofAMmeth, param);
11777                 }
11778             }
11779             else if (nmg->mg_len == HEf_SVKEY)
11780                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11781         }
11782         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11783             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11784         }
11785     }
11786     return mgret;
11787 }
11788
11789 #endif /* USE_ITHREADS */
11790
11791 struct ptr_tbl_arena {
11792     struct ptr_tbl_arena *next;
11793     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11794 };
11795
11796 /* create a new pointer-mapping table */
11797
11798 PTR_TBL_t *
11799 Perl_ptr_table_new(pTHX)
11800 {
11801     PTR_TBL_t *tbl;
11802     PERL_UNUSED_CONTEXT;
11803
11804     Newx(tbl, 1, PTR_TBL_t);
11805     tbl->tbl_max        = 511;
11806     tbl->tbl_items      = 0;
11807     tbl->tbl_arena      = NULL;
11808     tbl->tbl_arena_next = NULL;
11809     tbl->tbl_arena_end  = NULL;
11810     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11811     return tbl;
11812 }
11813
11814 #define PTR_TABLE_HASH(ptr) \
11815   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11816
11817 /* map an existing pointer using a table */
11818
11819 STATIC PTR_TBL_ENT_t *
11820 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11821 {
11822     PTR_TBL_ENT_t *tblent;
11823     const UV hash = PTR_TABLE_HASH(sv);
11824
11825     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11826
11827     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11828     for (; tblent; tblent = tblent->next) {
11829         if (tblent->oldval == sv)
11830             return tblent;
11831     }
11832     return NULL;
11833 }
11834
11835 void *
11836 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11837 {
11838     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11839
11840     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11841     PERL_UNUSED_CONTEXT;
11842
11843     return tblent ? tblent->newval : NULL;
11844 }
11845
11846 /* add a new entry to a pointer-mapping table */
11847
11848 void
11849 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11850 {
11851     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11852
11853     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11854     PERL_UNUSED_CONTEXT;
11855
11856     if (tblent) {
11857         tblent->newval = newsv;
11858     } else {
11859         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11860
11861         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11862             struct ptr_tbl_arena *new_arena;
11863
11864             Newx(new_arena, 1, struct ptr_tbl_arena);
11865             new_arena->next = tbl->tbl_arena;
11866             tbl->tbl_arena = new_arena;
11867             tbl->tbl_arena_next = new_arena->array;
11868             tbl->tbl_arena_end = new_arena->array
11869                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11870         }
11871
11872         tblent = tbl->tbl_arena_next++;
11873
11874         tblent->oldval = oldsv;
11875         tblent->newval = newsv;
11876         tblent->next = tbl->tbl_ary[entry];
11877         tbl->tbl_ary[entry] = tblent;
11878         tbl->tbl_items++;
11879         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11880             ptr_table_split(tbl);
11881     }
11882 }
11883
11884 /* double the hash bucket size of an existing ptr table */
11885
11886 void
11887 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11888 {
11889     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11890     const UV oldsize = tbl->tbl_max + 1;
11891     UV newsize = oldsize * 2;
11892     UV i;
11893
11894     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11895     PERL_UNUSED_CONTEXT;
11896
11897     Renew(ary, newsize, PTR_TBL_ENT_t*);
11898     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11899     tbl->tbl_max = --newsize;
11900     tbl->tbl_ary = ary;
11901     for (i=0; i < oldsize; i++, ary++) {
11902         PTR_TBL_ENT_t **entp = ary;
11903         PTR_TBL_ENT_t *ent = *ary;
11904         PTR_TBL_ENT_t **curentp;
11905         if (!ent)
11906             continue;
11907         curentp = ary + oldsize;
11908         do {
11909             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11910                 *entp = ent->next;
11911                 ent->next = *curentp;
11912                 *curentp = ent;
11913             }
11914             else
11915                 entp = &ent->next;
11916             ent = *entp;
11917         } while (ent);
11918     }
11919 }
11920
11921 /* remove all the entries from a ptr table */
11922 /* Deprecated - will be removed post 5.14 */
11923
11924 void
11925 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11926 {
11927     if (tbl && tbl->tbl_items) {
11928         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11929
11930         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11931
11932         while (arena) {
11933             struct ptr_tbl_arena *next = arena->next;
11934
11935             Safefree(arena);
11936             arena = next;
11937         };
11938
11939         tbl->tbl_items = 0;
11940         tbl->tbl_arena = NULL;
11941         tbl->tbl_arena_next = NULL;
11942         tbl->tbl_arena_end = NULL;
11943     }
11944 }
11945
11946 /* clear and free a ptr table */
11947
11948 void
11949 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11950 {
11951     struct ptr_tbl_arena *arena;
11952
11953     if (!tbl) {
11954         return;
11955     }
11956
11957     arena = tbl->tbl_arena;
11958
11959     while (arena) {
11960         struct ptr_tbl_arena *next = arena->next;
11961
11962         Safefree(arena);
11963         arena = next;
11964     }
11965
11966     Safefree(tbl->tbl_ary);
11967     Safefree(tbl);
11968 }
11969
11970 #if defined(USE_ITHREADS)
11971
11972 void
11973 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11974 {
11975     PERL_ARGS_ASSERT_RVPV_DUP;
11976
11977     assert(!isREGEXP(sstr));
11978     if (SvROK(sstr)) {
11979         if (SvWEAKREF(sstr)) {
11980             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11981             if (param->flags & CLONEf_JOIN_IN) {
11982                 /* if joining, we add any back references individually rather
11983                  * than copying the whole backref array */
11984                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11985             }
11986         }
11987         else
11988             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11989     }
11990     else if (SvPVX_const(sstr)) {
11991         /* Has something there */
11992         if (SvLEN(sstr)) {
11993             /* Normal PV - clone whole allocated space */
11994             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11995             /* sstr may not be that normal, but actually copy on write.
11996                But we are a true, independent SV, so:  */
11997             SvIsCOW_off(dstr);
11998         }
11999         else {
12000             /* Special case - not normally malloced for some reason */
12001             if (isGV_with_GP(sstr)) {
12002                 /* Don't need to do anything here.  */
12003             }
12004             else if ((SvIsCOW(sstr))) {
12005                 /* A "shared" PV - clone it as "shared" PV */
12006                 SvPV_set(dstr,
12007                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12008                                          param)));
12009             }
12010             else {
12011                 /* Some other special case - random pointer */
12012                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12013             }
12014         }
12015     }
12016     else {
12017         /* Copy the NULL */
12018         SvPV_set(dstr, NULL);
12019     }
12020 }
12021
12022 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12023 static SV **
12024 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12025                       SSize_t items, CLONE_PARAMS *const param)
12026 {
12027     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12028
12029     while (items-- > 0) {
12030         *dest++ = sv_dup_inc(*source++, param);
12031     }
12032
12033     return dest;
12034 }
12035
12036 /* duplicate an SV of any type (including AV, HV etc) */
12037
12038 static SV *
12039 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12040 {
12041     dVAR;
12042     SV *dstr;
12043
12044     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12045
12046     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12047 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12048         abort();
12049 #endif
12050         return NULL;
12051     }
12052     /* look for it in the table first */
12053     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12054     if (dstr)
12055         return dstr;
12056
12057     if(param->flags & CLONEf_JOIN_IN) {
12058         /** We are joining here so we don't want do clone
12059             something that is bad **/
12060         if (SvTYPE(sstr) == SVt_PVHV) {
12061             const HEK * const hvname = HvNAME_HEK(sstr);
12062             if (hvname) {
12063                 /** don't clone stashes if they already exist **/
12064                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12065                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12066                 ptr_table_store(PL_ptr_table, sstr, dstr);
12067                 return dstr;
12068             }
12069         }
12070         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12071             HV *stash = GvSTASH(sstr);
12072             const HEK * hvname;
12073             if (stash && (hvname = HvNAME_HEK(stash))) {
12074                 /** don't clone GVs if they already exist **/
12075                 SV **svp;
12076                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12077                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12078                 svp = hv_fetch(
12079                         stash, GvNAME(sstr),
12080                         GvNAMEUTF8(sstr)
12081                             ? -GvNAMELEN(sstr)
12082                             :  GvNAMELEN(sstr),
12083                         0
12084                       );
12085                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12086                     ptr_table_store(PL_ptr_table, sstr, *svp);
12087                     return *svp;
12088                 }
12089             }
12090         }
12091     }
12092
12093     /* create anew and remember what it is */
12094     new_SV(dstr);
12095
12096 #ifdef DEBUG_LEAKING_SCALARS
12097     dstr->sv_debug_optype = sstr->sv_debug_optype;
12098     dstr->sv_debug_line = sstr->sv_debug_line;
12099     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12100     dstr->sv_debug_parent = (SV*)sstr;
12101     FREE_SV_DEBUG_FILE(dstr);
12102     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12103 #endif
12104
12105     ptr_table_store(PL_ptr_table, sstr, dstr);
12106
12107     /* clone */
12108     SvFLAGS(dstr)       = SvFLAGS(sstr);
12109     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12110     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12111
12112 #ifdef DEBUGGING
12113     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12114         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12115                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12116 #endif
12117
12118     /* don't clone objects whose class has asked us not to */
12119     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12120         SvFLAGS(dstr) = 0;
12121         return dstr;
12122     }
12123
12124     switch (SvTYPE(sstr)) {
12125     case SVt_NULL:
12126         SvANY(dstr)     = NULL;
12127         break;
12128     case SVt_IV:
12129         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12130         if(SvROK(sstr)) {
12131             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12132         } else {
12133             SvIV_set(dstr, SvIVX(sstr));
12134         }
12135         break;
12136     case SVt_NV:
12137         SvANY(dstr)     = new_XNV();
12138         SvNV_set(dstr, SvNVX(sstr));
12139         break;
12140         /* case SVt_BIND: */
12141     default:
12142         {
12143             /* These are all the types that need complex bodies allocating.  */
12144             void *new_body;
12145             const svtype sv_type = SvTYPE(sstr);
12146             const struct body_details *const sv_type_details
12147                 = bodies_by_type + sv_type;
12148
12149             switch (sv_type) {
12150             default:
12151                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12152                 break;
12153
12154             case SVt_PVGV:
12155             case SVt_PVIO:
12156             case SVt_PVFM:
12157             case SVt_PVHV:
12158             case SVt_PVAV:
12159             case SVt_PVCV:
12160             case SVt_PVLV:
12161             case SVt_REGEXP:
12162             case SVt_PVMG:
12163             case SVt_PVNV:
12164             case SVt_PVIV:
12165             case SVt_PV:
12166                 assert(sv_type_details->body_size);
12167                 if (sv_type_details->arena) {
12168                     new_body_inline(new_body, sv_type);
12169                     new_body
12170                         = (void*)((char*)new_body - sv_type_details->offset);
12171                 } else {
12172                     new_body = new_NOARENA(sv_type_details);
12173                 }
12174             }
12175             assert(new_body);
12176             SvANY(dstr) = new_body;
12177
12178 #ifndef PURIFY
12179             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12180                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12181                  sv_type_details->copy, char);
12182 #else
12183             Copy(((char*)SvANY(sstr)),
12184                  ((char*)SvANY(dstr)),
12185                  sv_type_details->body_size + sv_type_details->offset, char);
12186 #endif
12187
12188             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12189                 && !isGV_with_GP(dstr)
12190                 && !isREGEXP(dstr)
12191                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12192                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12193
12194             /* The Copy above means that all the source (unduplicated) pointers
12195                are now in the destination.  We can check the flags and the
12196                pointers in either, but it's possible that there's less cache
12197                missing by always going for the destination.
12198                FIXME - instrument and check that assumption  */
12199             if (sv_type >= SVt_PVMG) {
12200                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12201                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12202                 } else if (SvMAGIC(dstr))
12203                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12204                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12205                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12206                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12207             }
12208
12209             /* The cast silences a GCC warning about unhandled types.  */
12210             switch ((int)sv_type) {
12211             case SVt_PV:
12212                 break;
12213             case SVt_PVIV:
12214                 break;
12215             case SVt_PVNV:
12216                 break;
12217             case SVt_PVMG:
12218                 break;
12219             case SVt_REGEXP:
12220               duprex:
12221                 /* FIXME for plugins */
12222                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12223                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12224                 break;
12225             case SVt_PVLV:
12226                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12227                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12228                     LvTARG(dstr) = dstr;
12229                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12230                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12231                 else
12232                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12233                 if (isREGEXP(sstr)) goto duprex;
12234             case SVt_PVGV:
12235                 /* non-GP case already handled above */
12236                 if(isGV_with_GP(sstr)) {
12237                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12238                     /* Don't call sv_add_backref here as it's going to be
12239                        created as part of the magic cloning of the symbol
12240                        table--unless this is during a join and the stash
12241                        is not actually being cloned.  */
12242                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12243                        at the point of this comment.  */
12244                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12245                     if (param->flags & CLONEf_JOIN_IN)
12246                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12247                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12248                     (void)GpREFCNT_inc(GvGP(dstr));
12249                 }
12250                 break;
12251             case SVt_PVIO:
12252                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12253                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12254                     /* I have no idea why fake dirp (rsfps)
12255                        should be treated differently but otherwise
12256                        we end up with leaks -- sky*/
12257                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12258                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12259                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12260                 } else {
12261                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12262                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12263                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12264                     if (IoDIRP(dstr)) {
12265                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12266                     } else {
12267                         NOOP;
12268                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12269                     }
12270                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12271                 }
12272                 if (IoOFP(dstr) == IoIFP(sstr))
12273                     IoOFP(dstr) = IoIFP(dstr);
12274                 else
12275                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12276                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12277                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12278                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12279                 break;
12280             case SVt_PVAV:
12281                 /* avoid cloning an empty array */
12282                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12283                     SV **dst_ary, **src_ary;
12284                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12285
12286                     src_ary = AvARRAY((const AV *)sstr);
12287                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12288                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12289                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12290                     AvALLOC((const AV *)dstr) = dst_ary;
12291                     if (AvREAL((const AV *)sstr)) {
12292                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12293                                                       param);
12294                     }
12295                     else {
12296                         while (items-- > 0)
12297                             *dst_ary++ = sv_dup(*src_ary++, param);
12298                     }
12299                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12300                     while (items-- > 0) {
12301                         *dst_ary++ = &PL_sv_undef;
12302                     }
12303                 }
12304                 else {
12305                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12306                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12307                     AvMAX(  (const AV *)dstr)   = -1;
12308                     AvFILLp((const AV *)dstr)   = -1;
12309                 }
12310                 break;
12311             case SVt_PVHV:
12312                 if (HvARRAY((const HV *)sstr)) {
12313                     STRLEN i = 0;
12314                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12315                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12316                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12317                     char *darray;
12318                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12319                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12320                         char);
12321                     HvARRAY(dstr) = (HE**)darray;
12322                     while (i <= sxhv->xhv_max) {
12323                         const HE * const source = HvARRAY(sstr)[i];
12324                         HvARRAY(dstr)[i] = source
12325                             ? he_dup(source, sharekeys, param) : 0;
12326                         ++i;
12327                     }
12328                     if (SvOOK(sstr)) {
12329                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12330                         struct xpvhv_aux * const daux = HvAUX(dstr);
12331                         /* This flag isn't copied.  */
12332                         SvOOK_on(dstr);
12333
12334                         if (saux->xhv_name_count) {
12335                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12336                             const I32 count
12337                              = saux->xhv_name_count < 0
12338                                 ? -saux->xhv_name_count
12339                                 :  saux->xhv_name_count;
12340                             HEK **shekp = sname + count;
12341                             HEK **dhekp;
12342                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12343                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12344                             while (shekp-- > sname) {
12345                                 dhekp--;
12346                                 *dhekp = hek_dup(*shekp, param);
12347                             }
12348                         }
12349                         else {
12350                             daux->xhv_name_u.xhvnameu_name
12351                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12352                                           param);
12353                         }
12354                         daux->xhv_name_count = saux->xhv_name_count;
12355
12356                         daux->xhv_riter = saux->xhv_riter;
12357                         daux->xhv_eiter = saux->xhv_eiter
12358                             ? he_dup(saux->xhv_eiter,
12359                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12360                         /* backref array needs refcnt=2; see sv_add_backref */
12361                         daux->xhv_backreferences =
12362                             (param->flags & CLONEf_JOIN_IN)
12363                                 /* when joining, we let the individual GVs and
12364                                  * CVs add themselves to backref as
12365                                  * needed. This avoids pulling in stuff
12366                                  * that isn't required, and simplifies the
12367                                  * case where stashes aren't cloned back
12368                                  * if they already exist in the parent
12369                                  * thread */
12370                             ? NULL
12371                             : saux->xhv_backreferences
12372                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12373                                     ? MUTABLE_AV(SvREFCNT_inc(
12374                                           sv_dup_inc((const SV *)
12375                                             saux->xhv_backreferences, param)))
12376                                     : MUTABLE_AV(sv_dup((const SV *)
12377                                             saux->xhv_backreferences, param))
12378                                 : 0;
12379
12380                         daux->xhv_mro_meta = saux->xhv_mro_meta
12381                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12382                             : 0;
12383                         daux->xhv_super = NULL;
12384
12385                         /* Record stashes for possible cloning in Perl_clone(). */
12386                         if (HvNAME(sstr))
12387                             av_push(param->stashes, dstr);
12388                     }
12389                 }
12390                 else
12391                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12392                 break;
12393             case SVt_PVCV:
12394                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12395                     CvDEPTH(dstr) = 0;
12396                 }
12397                 /*FALLTHROUGH*/
12398             case SVt_PVFM:
12399                 /* NOTE: not refcounted */
12400                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12401                     hv_dup(CvSTASH(dstr), param);
12402                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12403                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12404                 if (!CvISXSUB(dstr)) {
12405                     OP_REFCNT_LOCK;
12406                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12407                     OP_REFCNT_UNLOCK;
12408                     CvSLABBED_off(dstr);
12409                 } else if (CvCONST(dstr)) {
12410                     CvXSUBANY(dstr).any_ptr =
12411                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12412                 }
12413                 assert(!CvSLABBED(dstr));
12414                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12415                 if (CvNAMED(dstr))
12416                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12417                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12418                 /* don't dup if copying back - CvGV isn't refcounted, so the
12419                  * duped GV may never be freed. A bit of a hack! DAPM */
12420                 else
12421                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12422                     CvCVGV_RC(dstr)
12423                     ? gv_dup_inc(CvGV(sstr), param)
12424                     : (param->flags & CLONEf_JOIN_IN)
12425                         ? NULL
12426                         : gv_dup(CvGV(sstr), param);
12427
12428                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12429                 CvOUTSIDE(dstr) =
12430                     CvWEAKOUTSIDE(sstr)
12431                     ? cv_dup(    CvOUTSIDE(dstr), param)
12432                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12433                 break;
12434             }
12435         }
12436     }
12437
12438     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12439         ++PL_sv_objcount;
12440
12441     return dstr;
12442  }
12443
12444 SV *
12445 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12446 {
12447     PERL_ARGS_ASSERT_SV_DUP_INC;
12448     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12449 }
12450
12451 SV *
12452 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12453 {
12454     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12455     PERL_ARGS_ASSERT_SV_DUP;
12456
12457     /* Track every SV that (at least initially) had a reference count of 0.
12458        We need to do this by holding an actual reference to it in this array.
12459        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12460        (akin to the stashes hash, and the perl stack), we come unstuck if
12461        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12462        thread) is manipulated in a CLONE method, because CLONE runs before the
12463        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12464        (and fix things up by giving each a reference via the temps stack).
12465        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12466        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12467        before the walk of unreferenced happens and a reference to that is SV
12468        added to the temps stack. At which point we have the same SV considered
12469        to be in use, and free to be re-used. Not good.
12470     */
12471     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12472         assert(param->unreferenced);
12473         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12474     }
12475
12476     return dstr;
12477 }
12478
12479 /* duplicate a context */
12480
12481 PERL_CONTEXT *
12482 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12483 {
12484     PERL_CONTEXT *ncxs;
12485
12486     PERL_ARGS_ASSERT_CX_DUP;
12487
12488     if (!cxs)
12489         return (PERL_CONTEXT*)NULL;
12490
12491     /* look for it in the table first */
12492     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12493     if (ncxs)
12494         return ncxs;
12495
12496     /* create anew and remember what it is */
12497     Newx(ncxs, max + 1, PERL_CONTEXT);
12498     ptr_table_store(PL_ptr_table, cxs, ncxs);
12499     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12500
12501     while (ix >= 0) {
12502         PERL_CONTEXT * const ncx = &ncxs[ix];
12503         if (CxTYPE(ncx) == CXt_SUBST) {
12504             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12505         }
12506         else {
12507             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12508             switch (CxTYPE(ncx)) {
12509             case CXt_SUB:
12510                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12511                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12512                                            : cv_dup(ncx->blk_sub.cv,param));
12513                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12514                                            ? av_dup_inc(ncx->blk_sub.argarray,
12515                                                         param)
12516                                            : NULL);
12517                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12518                                                      param);
12519                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12520                                            ncx->blk_sub.oldcomppad);
12521                 break;
12522             case CXt_EVAL:
12523                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12524                                                       param);
12525                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12526                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12527                 break;
12528             case CXt_LOOP_LAZYSV:
12529                 ncx->blk_loop.state_u.lazysv.end
12530                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12531                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12532                    actually being the same function, and order equivalence of
12533                    the two unions.
12534                    We can assert the later [but only at run time :-(]  */
12535                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12536                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12537             case CXt_LOOP_FOR:
12538                 ncx->blk_loop.state_u.ary.ary
12539                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12540             case CXt_LOOP_LAZYIV:
12541             case CXt_LOOP_PLAIN:
12542                 if (CxPADLOOP(ncx)) {
12543                     ncx->blk_loop.itervar_u.oldcomppad
12544                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12545                                         ncx->blk_loop.itervar_u.oldcomppad);
12546                 } else {
12547                     ncx->blk_loop.itervar_u.gv
12548                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12549                                     param);
12550                 }
12551                 break;
12552             case CXt_FORMAT:
12553                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12554                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12555                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12556                                                      param);
12557                 break;
12558             case CXt_BLOCK:
12559             case CXt_NULL:
12560             case CXt_WHEN:
12561             case CXt_GIVEN:
12562                 break;
12563             }
12564         }
12565         --ix;
12566     }
12567     return ncxs;
12568 }
12569
12570 /* duplicate a stack info structure */
12571
12572 PERL_SI *
12573 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12574 {
12575     PERL_SI *nsi;
12576
12577     PERL_ARGS_ASSERT_SI_DUP;
12578
12579     if (!si)
12580         return (PERL_SI*)NULL;
12581
12582     /* look for it in the table first */
12583     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12584     if (nsi)
12585         return nsi;
12586
12587     /* create anew and remember what it is */
12588     Newxz(nsi, 1, PERL_SI);
12589     ptr_table_store(PL_ptr_table, si, nsi);
12590
12591     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12592     nsi->si_cxix        = si->si_cxix;
12593     nsi->si_cxmax       = si->si_cxmax;
12594     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12595     nsi->si_type        = si->si_type;
12596     nsi->si_prev        = si_dup(si->si_prev, param);
12597     nsi->si_next        = si_dup(si->si_next, param);
12598     nsi->si_markoff     = si->si_markoff;
12599
12600     return nsi;
12601 }
12602
12603 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12604 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12605 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12606 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12607 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12608 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12609 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12610 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12611 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12612 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12613 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12614 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12615 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12616 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12617 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12618 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12619
12620 /* XXXXX todo */
12621 #define pv_dup_inc(p)   SAVEPV(p)
12622 #define pv_dup(p)       SAVEPV(p)
12623 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12624
12625 /* map any object to the new equivent - either something in the
12626  * ptr table, or something in the interpreter structure
12627  */
12628
12629 void *
12630 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12631 {
12632     void *ret;
12633
12634     PERL_ARGS_ASSERT_ANY_DUP;
12635
12636     if (!v)
12637         return (void*)NULL;
12638
12639     /* look for it in the table first */
12640     ret = ptr_table_fetch(PL_ptr_table, v);
12641     if (ret)
12642         return ret;
12643
12644     /* see if it is part of the interpreter structure */
12645     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12646         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12647     else {
12648         ret = v;
12649     }
12650
12651     return ret;
12652 }
12653
12654 /* duplicate the save stack */
12655
12656 ANY *
12657 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12658 {
12659     dVAR;
12660     ANY * const ss      = proto_perl->Isavestack;
12661     const I32 max       = proto_perl->Isavestack_max;
12662     I32 ix              = proto_perl->Isavestack_ix;
12663     ANY *nss;
12664     const SV *sv;
12665     const GV *gv;
12666     const AV *av;
12667     const HV *hv;
12668     void* ptr;
12669     int intval;
12670     long longval;
12671     GP *gp;
12672     IV iv;
12673     I32 i;
12674     char *c = NULL;
12675     void (*dptr) (void*);
12676     void (*dxptr) (pTHX_ void*);
12677
12678     PERL_ARGS_ASSERT_SS_DUP;
12679
12680     Newxz(nss, max, ANY);
12681
12682     while (ix > 0) {
12683         const UV uv = POPUV(ss,ix);
12684         const U8 type = (U8)uv & SAVE_MASK;
12685
12686         TOPUV(nss,ix) = uv;
12687         switch (type) {
12688         case SAVEt_CLEARSV:
12689         case SAVEt_CLEARPADRANGE:
12690             break;
12691         case SAVEt_HELEM:               /* hash element */
12692             sv = (const SV *)POPPTR(ss,ix);
12693             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12694             /* fall through */
12695         case SAVEt_ITEM:                        /* normal string */
12696         case SAVEt_GVSV:                        /* scalar slot in GV */
12697         case SAVEt_SV:                          /* scalar reference */
12698             sv = (const SV *)POPPTR(ss,ix);
12699             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12700             /* fall through */
12701         case SAVEt_FREESV:
12702         case SAVEt_MORTALIZESV:
12703             sv = (const SV *)POPPTR(ss,ix);
12704             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12705             break;
12706         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12707             c = (char*)POPPTR(ss,ix);
12708             TOPPTR(nss,ix) = savesharedpv(c);
12709             ptr = POPPTR(ss,ix);
12710             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12711             break;
12712         case SAVEt_GENERIC_SVREF:               /* generic sv */
12713         case SAVEt_SVREF:                       /* scalar reference */
12714             sv = (const SV *)POPPTR(ss,ix);
12715             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12716             ptr = POPPTR(ss,ix);
12717             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12718             break;
12719         case SAVEt_GVSLOT:              /* any slot in GV */
12720             sv = (const SV *)POPPTR(ss,ix);
12721             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12722             ptr = POPPTR(ss,ix);
12723             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12724             sv = (const SV *)POPPTR(ss,ix);
12725             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12726             break;
12727         case SAVEt_HV:                          /* hash reference */
12728         case SAVEt_AV:                          /* array reference */
12729             sv = (const SV *) POPPTR(ss,ix);
12730             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12731             /* fall through */
12732         case SAVEt_COMPPAD:
12733         case SAVEt_NSTAB:
12734             sv = (const SV *) POPPTR(ss,ix);
12735             TOPPTR(nss,ix) = sv_dup(sv, param);
12736             break;
12737         case SAVEt_INT:                         /* int reference */
12738             ptr = POPPTR(ss,ix);
12739             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12740             intval = (int)POPINT(ss,ix);
12741             TOPINT(nss,ix) = intval;
12742             break;
12743         case SAVEt_LONG:                        /* long reference */
12744             ptr = POPPTR(ss,ix);
12745             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12746             longval = (long)POPLONG(ss,ix);
12747             TOPLONG(nss,ix) = longval;
12748             break;
12749         case SAVEt_I32:                         /* I32 reference */
12750             ptr = POPPTR(ss,ix);
12751             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12752             i = POPINT(ss,ix);
12753             TOPINT(nss,ix) = i;
12754             break;
12755         case SAVEt_IV:                          /* IV reference */
12756             ptr = POPPTR(ss,ix);
12757             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12758             iv = POPIV(ss,ix);
12759             TOPIV(nss,ix) = iv;
12760             break;
12761         case SAVEt_HPTR:                        /* HV* reference */
12762         case SAVEt_APTR:                        /* AV* reference */
12763         case SAVEt_SPTR:                        /* SV* reference */
12764             ptr = POPPTR(ss,ix);
12765             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12766             sv = (const SV *)POPPTR(ss,ix);
12767             TOPPTR(nss,ix) = sv_dup(sv, param);
12768             break;
12769         case SAVEt_VPTR:                        /* random* reference */
12770             ptr = POPPTR(ss,ix);
12771             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12772             /* Fall through */
12773         case SAVEt_INT_SMALL:
12774         case SAVEt_I32_SMALL:
12775         case SAVEt_I16:                         /* I16 reference */
12776         case SAVEt_I8:                          /* I8 reference */
12777         case SAVEt_BOOL:
12778             ptr = POPPTR(ss,ix);
12779             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12780             break;
12781         case SAVEt_GENERIC_PVREF:               /* generic char* */
12782         case SAVEt_PPTR:                        /* char* reference */
12783             ptr = POPPTR(ss,ix);
12784             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12785             c = (char*)POPPTR(ss,ix);
12786             TOPPTR(nss,ix) = pv_dup(c);
12787             break;
12788         case SAVEt_GP:                          /* scalar reference */
12789             gp = (GP*)POPPTR(ss,ix);
12790             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12791             (void)GpREFCNT_inc(gp);
12792             gv = (const GV *)POPPTR(ss,ix);
12793             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12794             break;
12795         case SAVEt_FREEOP:
12796             ptr = POPPTR(ss,ix);
12797             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12798                 /* these are assumed to be refcounted properly */
12799                 OP *o;
12800                 switch (((OP*)ptr)->op_type) {
12801                 case OP_LEAVESUB:
12802                 case OP_LEAVESUBLV:
12803                 case OP_LEAVEEVAL:
12804                 case OP_LEAVE:
12805                 case OP_SCOPE:
12806                 case OP_LEAVEWRITE:
12807                     TOPPTR(nss,ix) = ptr;
12808                     o = (OP*)ptr;
12809                     OP_REFCNT_LOCK;
12810                     (void) OpREFCNT_inc(o);
12811                     OP_REFCNT_UNLOCK;
12812                     break;
12813                 default:
12814                     TOPPTR(nss,ix) = NULL;
12815                     break;
12816                 }
12817             }
12818             else
12819                 TOPPTR(nss,ix) = NULL;
12820             break;
12821         case SAVEt_FREECOPHH:
12822             ptr = POPPTR(ss,ix);
12823             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12824             break;
12825         case SAVEt_DELETE:
12826             hv = (const HV *)POPPTR(ss,ix);
12827             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12828             i = POPINT(ss,ix);
12829             TOPINT(nss,ix) = i;
12830             /* Fall through */
12831         case SAVEt_FREEPV:
12832             c = (char*)POPPTR(ss,ix);
12833             TOPPTR(nss,ix) = pv_dup_inc(c);
12834             break;
12835         case SAVEt_STACK_POS:           /* Position on Perl stack */
12836             i = POPINT(ss,ix);
12837             TOPINT(nss,ix) = i;
12838             break;
12839         case SAVEt_DESTRUCTOR:
12840             ptr = POPPTR(ss,ix);
12841             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12842             dptr = POPDPTR(ss,ix);
12843             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12844                                         any_dup(FPTR2DPTR(void *, dptr),
12845                                                 proto_perl));
12846             break;
12847         case SAVEt_DESTRUCTOR_X:
12848             ptr = POPPTR(ss,ix);
12849             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12850             dxptr = POPDXPTR(ss,ix);
12851             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12852                                          any_dup(FPTR2DPTR(void *, dxptr),
12853                                                  proto_perl));
12854             break;
12855         case SAVEt_REGCONTEXT:
12856         case SAVEt_ALLOC:
12857             ix -= uv >> SAVE_TIGHT_SHIFT;
12858             break;
12859         case SAVEt_AELEM:               /* array element */
12860             sv = (const SV *)POPPTR(ss,ix);
12861             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12862             i = POPINT(ss,ix);
12863             TOPINT(nss,ix) = i;
12864             av = (const AV *)POPPTR(ss,ix);
12865             TOPPTR(nss,ix) = av_dup_inc(av, param);
12866             break;
12867         case SAVEt_OP:
12868             ptr = POPPTR(ss,ix);
12869             TOPPTR(nss,ix) = ptr;
12870             break;
12871         case SAVEt_HINTS:
12872             ptr = POPPTR(ss,ix);
12873             ptr = cophh_copy((COPHH*)ptr);
12874             TOPPTR(nss,ix) = ptr;
12875             i = POPINT(ss,ix);
12876             TOPINT(nss,ix) = i;
12877             if (i & HINT_LOCALIZE_HH) {
12878                 hv = (const HV *)POPPTR(ss,ix);
12879                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12880             }
12881             break;
12882         case SAVEt_PADSV_AND_MORTALIZE:
12883             longval = (long)POPLONG(ss,ix);
12884             TOPLONG(nss,ix) = longval;
12885             ptr = POPPTR(ss,ix);
12886             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12887             sv = (const SV *)POPPTR(ss,ix);
12888             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12889             break;
12890         case SAVEt_SET_SVFLAGS:
12891             i = POPINT(ss,ix);
12892             TOPINT(nss,ix) = i;
12893             i = POPINT(ss,ix);
12894             TOPINT(nss,ix) = i;
12895             sv = (const SV *)POPPTR(ss,ix);
12896             TOPPTR(nss,ix) = sv_dup(sv, param);
12897             break;
12898         case SAVEt_RE_STATE:
12899             {
12900                 const struct re_save_state *const old_state
12901                     = (struct re_save_state *)
12902                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12903                 struct re_save_state *const new_state
12904                     = (struct re_save_state *)
12905                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12906
12907                 Copy(old_state, new_state, 1, struct re_save_state);
12908                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12909
12910                 new_state->re_state_bostr
12911                     = pv_dup(old_state->re_state_bostr);
12912                 new_state->re_state_regeol
12913                     = pv_dup(old_state->re_state_regeol);
12914 #ifdef PERL_ANY_COW
12915                 new_state->re_state_nrs
12916                     = sv_dup(old_state->re_state_nrs, param);
12917 #endif
12918                 new_state->re_state_reg_magic
12919                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12920                                proto_perl);
12921                 new_state->re_state_reg_oldcurpm
12922                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12923                               proto_perl);
12924                 new_state->re_state_reg_curpm
12925                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12926                                proto_perl);
12927                 new_state->re_state_reg_oldsaved
12928                     = pv_dup(old_state->re_state_reg_oldsaved);
12929                 new_state->re_state_reg_poscache
12930                     = pv_dup(old_state->re_state_reg_poscache);
12931                 new_state->re_state_reg_starttry
12932                     = pv_dup(old_state->re_state_reg_starttry);
12933                 break;
12934             }
12935         case SAVEt_COMPILE_WARNINGS:
12936             ptr = POPPTR(ss,ix);
12937             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12938             break;
12939         case SAVEt_PARSER:
12940             ptr = POPPTR(ss,ix);
12941             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12942             break;
12943         default:
12944             Perl_croak(aTHX_
12945                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12946         }
12947     }
12948
12949     return nss;
12950 }
12951
12952
12953 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12954  * flag to the result. This is done for each stash before cloning starts,
12955  * so we know which stashes want their objects cloned */
12956
12957 static void
12958 do_mark_cloneable_stash(pTHX_ SV *const sv)
12959 {
12960     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12961     if (hvname) {
12962         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12963         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12964         if (cloner && GvCV(cloner)) {
12965             dSP;
12966             UV status;
12967
12968             ENTER;
12969             SAVETMPS;
12970             PUSHMARK(SP);
12971             mXPUSHs(newSVhek(hvname));
12972             PUTBACK;
12973             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12974             SPAGAIN;
12975             status = POPu;
12976             PUTBACK;
12977             FREETMPS;
12978             LEAVE;
12979             if (status)
12980                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12981         }
12982     }
12983 }
12984
12985
12986
12987 /*
12988 =for apidoc perl_clone
12989
12990 Create and return a new interpreter by cloning the current one.
12991
12992 perl_clone takes these flags as parameters:
12993
12994 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12995 without it we only clone the data and zero the stacks,
12996 with it we copy the stacks and the new perl interpreter is
12997 ready to run at the exact same point as the previous one.
12998 The pseudo-fork code uses COPY_STACKS while the
12999 threads->create doesn't.
13000
13001 CLONEf_KEEP_PTR_TABLE -
13002 perl_clone keeps a ptr_table with the pointer of the old
13003 variable as a key and the new variable as a value,
13004 this allows it to check if something has been cloned and not
13005 clone it again but rather just use the value and increase the
13006 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13007 the ptr_table using the function
13008 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13009 reason to keep it around is if you want to dup some of your own
13010 variable who are outside the graph perl scans, example of this
13011 code is in threads.xs create.
13012
13013 CLONEf_CLONE_HOST -
13014 This is a win32 thing, it is ignored on unix, it tells perls
13015 win32host code (which is c++) to clone itself, this is needed on
13016 win32 if you want to run two threads at the same time,
13017 if you just want to do some stuff in a separate perl interpreter
13018 and then throw it away and return to the original one,
13019 you don't need to do anything.
13020
13021 =cut
13022 */
13023
13024 /* XXX the above needs expanding by someone who actually understands it ! */
13025 EXTERN_C PerlInterpreter *
13026 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13027
13028 PerlInterpreter *
13029 perl_clone(PerlInterpreter *proto_perl, UV flags)
13030 {
13031    dVAR;
13032 #ifdef PERL_IMPLICIT_SYS
13033
13034     PERL_ARGS_ASSERT_PERL_CLONE;
13035
13036    /* perlhost.h so we need to call into it
13037    to clone the host, CPerlHost should have a c interface, sky */
13038
13039    if (flags & CLONEf_CLONE_HOST) {
13040        return perl_clone_host(proto_perl,flags);
13041    }
13042    return perl_clone_using(proto_perl, flags,
13043                             proto_perl->IMem,
13044                             proto_perl->IMemShared,
13045                             proto_perl->IMemParse,
13046                             proto_perl->IEnv,
13047                             proto_perl->IStdIO,
13048                             proto_perl->ILIO,
13049                             proto_perl->IDir,
13050                             proto_perl->ISock,
13051                             proto_perl->IProc);
13052 }
13053
13054 PerlInterpreter *
13055 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13056                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13057                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13058                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13059                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13060                  struct IPerlProc* ipP)
13061 {
13062     /* XXX many of the string copies here can be optimized if they're
13063      * constants; they need to be allocated as common memory and just
13064      * their pointers copied. */
13065
13066     IV i;
13067     CLONE_PARAMS clone_params;
13068     CLONE_PARAMS* const param = &clone_params;
13069
13070     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13071
13072     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13073 #else           /* !PERL_IMPLICIT_SYS */
13074     IV i;
13075     CLONE_PARAMS clone_params;
13076     CLONE_PARAMS* param = &clone_params;
13077     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13078
13079     PERL_ARGS_ASSERT_PERL_CLONE;
13080 #endif          /* PERL_IMPLICIT_SYS */
13081
13082     /* for each stash, determine whether its objects should be cloned */
13083     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13084     PERL_SET_THX(my_perl);
13085
13086 #ifdef DEBUGGING
13087     PoisonNew(my_perl, 1, PerlInterpreter);
13088     PL_op = NULL;
13089     PL_curcop = NULL;
13090     PL_defstash = NULL; /* may be used by perl malloc() */
13091     PL_markstack = 0;
13092     PL_scopestack = 0;
13093     PL_scopestack_name = 0;
13094     PL_savestack = 0;
13095     PL_savestack_ix = 0;
13096     PL_savestack_max = -1;
13097     PL_sig_pending = 0;
13098     PL_parser = NULL;
13099     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13100 #  ifdef DEBUG_LEAKING_SCALARS
13101     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13102 #  endif
13103 #else   /* !DEBUGGING */
13104     Zero(my_perl, 1, PerlInterpreter);
13105 #endif  /* DEBUGGING */
13106
13107 #ifdef PERL_IMPLICIT_SYS
13108     /* host pointers */
13109     PL_Mem              = ipM;
13110     PL_MemShared        = ipMS;
13111     PL_MemParse         = ipMP;
13112     PL_Env              = ipE;
13113     PL_StdIO            = ipStd;
13114     PL_LIO              = ipLIO;
13115     PL_Dir              = ipD;
13116     PL_Sock             = ipS;
13117     PL_Proc             = ipP;
13118 #endif          /* PERL_IMPLICIT_SYS */
13119
13120
13121     param->flags = flags;
13122     /* Nothing in the core code uses this, but we make it available to
13123        extensions (using mg_dup).  */
13124     param->proto_perl = proto_perl;
13125     /* Likely nothing will use this, but it is initialised to be consistent
13126        with Perl_clone_params_new().  */
13127     param->new_perl = my_perl;
13128     param->unreferenced = NULL;
13129
13130
13131     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13132
13133     PL_body_arenas = NULL;
13134     Zero(&PL_body_roots, 1, PL_body_roots);
13135     
13136     PL_sv_count         = 0;
13137     PL_sv_objcount      = 0;
13138     PL_sv_root          = NULL;
13139     PL_sv_arenaroot     = NULL;
13140
13141     PL_debug            = proto_perl->Idebug;
13142
13143     /* dbargs array probably holds garbage */
13144     PL_dbargs           = NULL;
13145
13146     PL_compiling = proto_perl->Icompiling;
13147
13148     /* pseudo environmental stuff */
13149     PL_origargc         = proto_perl->Iorigargc;
13150     PL_origargv         = proto_perl->Iorigargv;
13151
13152 #if !NO_TAINT_SUPPORT
13153     /* Set tainting stuff before PerlIO_debug can possibly get called */
13154     PL_tainting         = proto_perl->Itainting;
13155     PL_taint_warn       = proto_perl->Itaint_warn;
13156 #else
13157     PL_tainting         = FALSE;
13158     PL_taint_warn       = FALSE;
13159 #endif
13160
13161     PL_minus_c          = proto_perl->Iminus_c;
13162
13163     PL_localpatches     = proto_perl->Ilocalpatches;
13164     PL_splitstr         = proto_perl->Isplitstr;
13165     PL_minus_n          = proto_perl->Iminus_n;
13166     PL_minus_p          = proto_perl->Iminus_p;
13167     PL_minus_l          = proto_perl->Iminus_l;
13168     PL_minus_a          = proto_perl->Iminus_a;
13169     PL_minus_E          = proto_perl->Iminus_E;
13170     PL_minus_F          = proto_perl->Iminus_F;
13171     PL_doswitches       = proto_perl->Idoswitches;
13172     PL_dowarn           = proto_perl->Idowarn;
13173 #ifdef PERL_SAWAMPERSAND
13174     PL_sawampersand     = proto_perl->Isawampersand;
13175 #endif
13176     PL_unsafe           = proto_perl->Iunsafe;
13177     PL_perldb           = proto_perl->Iperldb;
13178     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13179     PL_exit_flags       = proto_perl->Iexit_flags;
13180
13181     /* XXX time(&PL_basetime) when asked for? */
13182     PL_basetime         = proto_perl->Ibasetime;
13183
13184     PL_maxsysfd         = proto_perl->Imaxsysfd;
13185     PL_statusvalue      = proto_perl->Istatusvalue;
13186 #ifdef VMS
13187     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13188 #else
13189     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13190 #endif
13191
13192     /* RE engine related */
13193     Zero(&PL_reg_state, 1, struct re_save_state);
13194     PL_regmatch_slab    = NULL;
13195
13196     PL_sub_generation   = proto_perl->Isub_generation;
13197
13198     /* funky return mechanisms */
13199     PL_forkprocess      = proto_perl->Iforkprocess;
13200
13201     /* internal state */
13202     PL_maxo             = proto_perl->Imaxo;
13203
13204     PL_main_start       = proto_perl->Imain_start;
13205     PL_eval_root        = proto_perl->Ieval_root;
13206     PL_eval_start       = proto_perl->Ieval_start;
13207
13208     PL_filemode         = proto_perl->Ifilemode;
13209     PL_lastfd           = proto_perl->Ilastfd;
13210     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13211     PL_Argv             = NULL;
13212     PL_Cmd              = NULL;
13213     PL_gensym           = proto_perl->Igensym;
13214
13215     PL_laststatval      = proto_perl->Ilaststatval;
13216     PL_laststype        = proto_perl->Ilaststype;
13217     PL_mess_sv          = NULL;
13218
13219     PL_profiledata      = NULL;
13220
13221     PL_generation       = proto_perl->Igeneration;
13222
13223     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13224     PL_in_clean_all     = proto_perl->Iin_clean_all;
13225
13226     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13227     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13228     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13229     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13230     PL_nomemok          = proto_perl->Inomemok;
13231     PL_an               = proto_perl->Ian;
13232     PL_evalseq          = proto_perl->Ievalseq;
13233     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13234     PL_origalen         = proto_perl->Iorigalen;
13235
13236     PL_sighandlerp      = proto_perl->Isighandlerp;
13237
13238     PL_runops           = proto_perl->Irunops;
13239
13240     PL_subline          = proto_perl->Isubline;
13241
13242 #ifdef FCRYPT
13243     PL_cryptseen        = proto_perl->Icryptseen;
13244 #endif
13245
13246     PL_hints            = proto_perl->Ihints;
13247
13248 #ifdef USE_LOCALE_COLLATE
13249     PL_collation_ix     = proto_perl->Icollation_ix;
13250     PL_collation_standard       = proto_perl->Icollation_standard;
13251     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13252     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13253 #endif /* USE_LOCALE_COLLATE */
13254
13255 #ifdef USE_LOCALE_NUMERIC
13256     PL_numeric_standard = proto_perl->Inumeric_standard;
13257     PL_numeric_local    = proto_perl->Inumeric_local;
13258 #endif /* !USE_LOCALE_NUMERIC */
13259
13260     /* Did the locale setup indicate UTF-8? */
13261     PL_utf8locale       = proto_perl->Iutf8locale;
13262     /* Unicode features (see perlrun/-C) */
13263     PL_unicode          = proto_perl->Iunicode;
13264
13265     /* Pre-5.8 signals control */
13266     PL_signals          = proto_perl->Isignals;
13267
13268     /* times() ticks per second */
13269     PL_clocktick        = proto_perl->Iclocktick;
13270
13271     /* Recursion stopper for PerlIO_find_layer */
13272     PL_in_load_module   = proto_perl->Iin_load_module;
13273
13274     /* sort() routine */
13275     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13276
13277     /* Not really needed/useful since the reenrant_retint is "volatile",
13278      * but do it for consistency's sake. */
13279     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13280
13281     /* Hooks to shared SVs and locks. */
13282     PL_sharehook        = proto_perl->Isharehook;
13283     PL_lockhook         = proto_perl->Ilockhook;
13284     PL_unlockhook       = proto_perl->Iunlockhook;
13285     PL_threadhook       = proto_perl->Ithreadhook;
13286     PL_destroyhook      = proto_perl->Idestroyhook;
13287     PL_signalhook       = proto_perl->Isignalhook;
13288
13289     PL_globhook         = proto_perl->Iglobhook;
13290
13291     /* swatch cache */
13292     PL_last_swash_hv    = NULL; /* reinits on demand */
13293     PL_last_swash_klen  = 0;
13294     PL_last_swash_key[0]= '\0';
13295     PL_last_swash_tmps  = (U8*)NULL;
13296     PL_last_swash_slen  = 0;
13297
13298     PL_srand_called     = proto_perl->Isrand_called;
13299
13300     if (flags & CLONEf_COPY_STACKS) {
13301         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13302         PL_tmps_ix              = proto_perl->Itmps_ix;
13303         PL_tmps_max             = proto_perl->Itmps_max;
13304         PL_tmps_floor           = proto_perl->Itmps_floor;
13305
13306         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13307          * NOTE: unlike the others! */
13308         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13309         PL_scopestack_max       = proto_perl->Iscopestack_max;
13310
13311         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13312          * NOTE: unlike the others! */
13313         PL_savestack_ix         = proto_perl->Isavestack_ix;
13314         PL_savestack_max        = proto_perl->Isavestack_max;
13315     }
13316
13317     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13318     PL_top_env          = &PL_start_env;
13319
13320     PL_op               = proto_perl->Iop;
13321
13322     PL_Sv               = NULL;
13323     PL_Xpv              = (XPV*)NULL;
13324     my_perl->Ina        = proto_perl->Ina;
13325
13326     PL_statbuf          = proto_perl->Istatbuf;
13327     PL_statcache        = proto_perl->Istatcache;
13328
13329 #ifdef HAS_TIMES
13330     PL_timesbuf         = proto_perl->Itimesbuf;
13331 #endif
13332
13333 #if !NO_TAINT_SUPPORT
13334     PL_tainted          = proto_perl->Itainted;
13335 #else
13336     PL_tainted          = FALSE;
13337 #endif
13338     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13339
13340     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13341
13342     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13343     PL_restartop        = proto_perl->Irestartop;
13344     PL_in_eval          = proto_perl->Iin_eval;
13345     PL_delaymagic       = proto_perl->Idelaymagic;
13346     PL_phase            = proto_perl->Iphase;
13347     PL_localizing       = proto_perl->Ilocalizing;
13348
13349     PL_hv_fetch_ent_mh  = NULL;
13350     PL_modcount         = proto_perl->Imodcount;
13351     PL_lastgotoprobe    = NULL;
13352     PL_dumpindent       = proto_perl->Idumpindent;
13353
13354     PL_efloatbuf        = NULL;         /* reinits on demand */
13355     PL_efloatsize       = 0;                    /* reinits on demand */
13356
13357     /* regex stuff */
13358
13359     PL_regdummy         = proto_perl->Iregdummy;
13360     PL_colorset         = 0;            /* reinits PL_colors[] */
13361     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13362
13363     /* Pluggable optimizer */
13364     PL_peepp            = proto_perl->Ipeepp;
13365     PL_rpeepp           = proto_perl->Irpeepp;
13366     /* op_free() hook */
13367     PL_opfreehook       = proto_perl->Iopfreehook;
13368
13369 #ifdef USE_REENTRANT_API
13370     /* XXX: things like -Dm will segfault here in perlio, but doing
13371      *  PERL_SET_CONTEXT(proto_perl);
13372      * breaks too many other things
13373      */
13374     Perl_reentrant_init(aTHX);
13375 #endif
13376
13377     /* create SV map for pointer relocation */
13378     PL_ptr_table = ptr_table_new();
13379
13380     /* initialize these special pointers as early as possible */
13381     init_constants();
13382     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13383     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13384     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13385
13386     /* create (a non-shared!) shared string table */
13387     PL_strtab           = newHV();
13388     HvSHAREKEYS_off(PL_strtab);
13389     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13390     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13391
13392     /* This PV will be free'd special way so must set it same way op.c does */
13393     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13394     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13395
13396     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13397     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13398     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13399     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13400
13401     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13402     /* This makes no difference to the implementation, as it always pushes
13403        and shifts pointers to other SVs without changing their reference
13404        count, with the array becoming empty before it is freed. However, it
13405        makes it conceptually clear what is going on, and will avoid some
13406        work inside av.c, filling slots between AvFILL() and AvMAX() with
13407        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13408     AvREAL_off(param->stashes);
13409
13410     if (!(flags & CLONEf_COPY_STACKS)) {
13411         param->unreferenced = newAV();
13412     }
13413
13414 #ifdef PERLIO_LAYERS
13415     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13416     PerlIO_clone(aTHX_ proto_perl, param);
13417 #endif
13418
13419     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13420     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13421     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13422     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13423     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13424     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13425
13426     /* switches */
13427     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13428     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13429     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13430     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13431
13432     /* magical thingies */
13433
13434     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13435
13436     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13437     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13438     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13439
13440    
13441     /* Clone the regex array */
13442     /* ORANGE FIXME for plugins, probably in the SV dup code.
13443        newSViv(PTR2IV(CALLREGDUPE(
13444        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13445     */
13446     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13447     PL_regex_pad = AvARRAY(PL_regex_padav);
13448
13449     PL_stashpadmax      = proto_perl->Istashpadmax;
13450     PL_stashpadix       = proto_perl->Istashpadix ;
13451     Newx(PL_stashpad, PL_stashpadmax, HV *);
13452     {
13453         PADOFFSET o = 0;
13454         for (; o < PL_stashpadmax; ++o)
13455             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13456     }
13457
13458     /* shortcuts to various I/O objects */
13459     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13460     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13461     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13462     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13463     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13464     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13465     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13466
13467     /* shortcuts to regexp stuff */
13468     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13469
13470     /* shortcuts to misc objects */
13471     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13472
13473     /* shortcuts to debugging objects */
13474     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13475     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13476     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13477     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13478     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13479     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13480
13481     /* symbol tables */
13482     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13483     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13484     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13485     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13486     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13487
13488     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13489     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13490     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13491     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13492     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13493     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13494     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13495     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13496
13497     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13498
13499     /* subprocess state */
13500     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13501
13502     if (proto_perl->Iop_mask)
13503         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13504     else
13505         PL_op_mask      = NULL;
13506     /* PL_asserting        = proto_perl->Iasserting; */
13507
13508     /* current interpreter roots */
13509     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13510     OP_REFCNT_LOCK;
13511     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13512     OP_REFCNT_UNLOCK;
13513
13514     /* runtime control stuff */
13515     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13516
13517     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13518
13519     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13520
13521     /* interpreter atexit processing */
13522     PL_exitlistlen      = proto_perl->Iexitlistlen;
13523     if (PL_exitlistlen) {
13524         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13525         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13526     }
13527     else
13528         PL_exitlist     = (PerlExitListEntry*)NULL;
13529
13530     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13531     if (PL_my_cxt_size) {
13532         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13533         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13534 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13535         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13536         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13537 #endif
13538     }
13539     else {
13540         PL_my_cxt_list  = (void**)NULL;
13541 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13542         PL_my_cxt_keys  = (const char**)NULL;
13543 #endif
13544     }
13545     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13546     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13547     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13548     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13549
13550     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13551
13552     PAD_CLONE_VARS(proto_perl, param);
13553
13554 #ifdef HAVE_INTERP_INTERN
13555     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13556 #endif
13557
13558     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13559
13560 #ifdef PERL_USES_PL_PIDSTATUS
13561     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13562 #endif
13563     PL_osname           = SAVEPV(proto_perl->Iosname);
13564     PL_parser           = parser_dup(proto_perl->Iparser, param);
13565
13566     /* XXX this only works if the saved cop has already been cloned */
13567     if (proto_perl->Iparser) {
13568         PL_parser->saved_curcop = (COP*)any_dup(
13569                                     proto_perl->Iparser->saved_curcop,
13570                                     proto_perl);
13571     }
13572
13573     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13574
13575 #ifdef USE_LOCALE_COLLATE
13576     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13577 #endif /* USE_LOCALE_COLLATE */
13578
13579 #ifdef USE_LOCALE_NUMERIC
13580     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13581     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13582 #endif /* !USE_LOCALE_NUMERIC */
13583
13584     /* Unicode inversion lists */
13585     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13586     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13587
13588     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13589     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13590
13591     /* utf8 character class swashes */
13592     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13593         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13594     }
13595     for (i = 0; i < POSIX_CC_COUNT; i++) {
13596         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13597         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13598         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13599     }
13600     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13601     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13602     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13603     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13604     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13605     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13606     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13607     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13608     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13609     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13610     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13611     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13612     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13613     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13614     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13615     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13616     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13617     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13618     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13619
13620     if (proto_perl->Ipsig_pend) {
13621         Newxz(PL_psig_pend, SIG_SIZE, int);
13622     }
13623     else {
13624         PL_psig_pend    = (int*)NULL;
13625     }
13626
13627     if (proto_perl->Ipsig_name) {
13628         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13629         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13630                             param);
13631         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13632     }
13633     else {
13634         PL_psig_ptr     = (SV**)NULL;
13635         PL_psig_name    = (SV**)NULL;
13636     }
13637
13638     if (flags & CLONEf_COPY_STACKS) {
13639         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13640         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13641                             PL_tmps_ix+1, param);
13642
13643         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13644         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13645         Newxz(PL_markstack, i, I32);
13646         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13647                                                   - proto_perl->Imarkstack);
13648         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13649                                                   - proto_perl->Imarkstack);
13650         Copy(proto_perl->Imarkstack, PL_markstack,
13651              PL_markstack_ptr - PL_markstack + 1, I32);
13652
13653         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13654          * NOTE: unlike the others! */
13655         Newxz(PL_scopestack, PL_scopestack_max, I32);
13656         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13657
13658 #ifdef DEBUGGING
13659         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13660         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13661 #endif
13662         /* reset stack AV to correct length before its duped via
13663          * PL_curstackinfo */
13664         AvFILLp(proto_perl->Icurstack) =
13665                             proto_perl->Istack_sp - proto_perl->Istack_base;
13666
13667         /* NOTE: si_dup() looks at PL_markstack */
13668         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13669
13670         /* PL_curstack          = PL_curstackinfo->si_stack; */
13671         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13672         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13673
13674         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13675         PL_stack_base           = AvARRAY(PL_curstack);
13676         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13677                                                    - proto_perl->Istack_base);
13678         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13679
13680         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13681         PL_savestack            = ss_dup(proto_perl, param);
13682     }
13683     else {
13684         init_stacks();
13685         ENTER;                  /* perl_destruct() wants to LEAVE; */
13686     }
13687
13688     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13689     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13690
13691     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13692     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13693     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13694     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13695     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13696     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13697
13698     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13699
13700     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13701     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13702     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13703     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13704
13705     PL_stashcache       = newHV();
13706
13707     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13708                                             proto_perl->Iwatchaddr);
13709     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13710     if (PL_debug && PL_watchaddr) {
13711         PerlIO_printf(Perl_debug_log,
13712           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13713           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13714           PTR2UV(PL_watchok));
13715     }
13716
13717     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13718     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13719     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13720
13721     /* Call the ->CLONE method, if it exists, for each of the stashes
13722        identified by sv_dup() above.
13723     */
13724     while(av_len(param->stashes) != -1) {
13725         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13726         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13727         if (cloner && GvCV(cloner)) {
13728             dSP;
13729             ENTER;
13730             SAVETMPS;
13731             PUSHMARK(SP);
13732             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13733             PUTBACK;
13734             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13735             FREETMPS;
13736             LEAVE;
13737         }
13738     }
13739
13740     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13741         ptr_table_free(PL_ptr_table);
13742         PL_ptr_table = NULL;
13743     }
13744
13745     if (!(flags & CLONEf_COPY_STACKS)) {
13746         unreferenced_to_tmp_stack(param->unreferenced);
13747     }
13748
13749     SvREFCNT_dec(param->stashes);
13750
13751     /* orphaned? eg threads->new inside BEGIN or use */
13752     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13753         SvREFCNT_inc_simple_void(PL_compcv);
13754         SAVEFREESV(PL_compcv);
13755     }
13756
13757     return my_perl;
13758 }
13759
13760 static void
13761 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13762 {
13763     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13764     
13765     if (AvFILLp(unreferenced) > -1) {
13766         SV **svp = AvARRAY(unreferenced);
13767         SV **const last = svp + AvFILLp(unreferenced);
13768         SSize_t count = 0;
13769
13770         do {
13771             if (SvREFCNT(*svp) == 1)
13772                 ++count;
13773         } while (++svp <= last);
13774
13775         EXTEND_MORTAL(count);
13776         svp = AvARRAY(unreferenced);
13777
13778         do {
13779             if (SvREFCNT(*svp) == 1) {
13780                 /* Our reference is the only one to this SV. This means that
13781                    in this thread, the scalar effectively has a 0 reference.
13782                    That doesn't work (cleanup never happens), so donate our
13783                    reference to it onto the save stack. */
13784                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13785             } else {
13786                 /* As an optimisation, because we are already walking the
13787                    entire array, instead of above doing either
13788                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13789                    release our reference to the scalar, so that at the end of
13790                    the array owns zero references to the scalars it happens to
13791                    point to. We are effectively converting the array from
13792                    AvREAL() on to AvREAL() off. This saves the av_clear()
13793                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13794                    walking the array a second time.  */
13795                 SvREFCNT_dec(*svp);
13796             }
13797
13798         } while (++svp <= last);
13799         AvREAL_off(unreferenced);
13800     }
13801     SvREFCNT_dec_NN(unreferenced);
13802 }
13803
13804 void
13805 Perl_clone_params_del(CLONE_PARAMS *param)
13806 {
13807     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13808        happy: */
13809     PerlInterpreter *const to = param->new_perl;
13810     dTHXa(to);
13811     PerlInterpreter *const was = PERL_GET_THX;
13812
13813     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13814
13815     if (was != to) {
13816         PERL_SET_THX(to);
13817     }
13818
13819     SvREFCNT_dec(param->stashes);
13820     if (param->unreferenced)
13821         unreferenced_to_tmp_stack(param->unreferenced);
13822
13823     Safefree(param);
13824
13825     if (was != to) {
13826         PERL_SET_THX(was);
13827     }
13828 }
13829
13830 CLONE_PARAMS *
13831 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13832 {
13833     dVAR;
13834     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13835        does a dTHX; to get the context from thread local storage.
13836        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13837        a version that passes in my_perl.  */
13838     PerlInterpreter *const was = PERL_GET_THX;
13839     CLONE_PARAMS *param;
13840
13841     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13842
13843     if (was != to) {
13844         PERL_SET_THX(to);
13845     }
13846
13847     /* Given that we've set the context, we can do this unshared.  */
13848     Newx(param, 1, CLONE_PARAMS);
13849
13850     param->flags = 0;
13851     param->proto_perl = from;
13852     param->new_perl = to;
13853     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13854     AvREAL_off(param->stashes);
13855     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13856
13857     if (was != to) {
13858         PERL_SET_THX(was);
13859     }
13860     return param;
13861 }
13862
13863 #endif /* USE_ITHREADS */
13864
13865 void
13866 Perl_init_constants(pTHX)
13867 {
13868     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13869     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13870     SvANY(&PL_sv_undef)         = NULL;
13871
13872     SvANY(&PL_sv_no)            = new_XPVNV();
13873     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13874     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13875                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13876                                   |SVp_POK|SVf_POK;
13877
13878     SvANY(&PL_sv_yes)           = new_XPVNV();
13879     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13880     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13881                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13882                                   |SVp_POK|SVf_POK;
13883
13884     SvPV_set(&PL_sv_no, (char*)PL_No);
13885     SvCUR_set(&PL_sv_no, 0);
13886     SvLEN_set(&PL_sv_no, 0);
13887     SvIV_set(&PL_sv_no, 0);
13888     SvNV_set(&PL_sv_no, 0);
13889
13890     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13891     SvCUR_set(&PL_sv_yes, 1);
13892     SvLEN_set(&PL_sv_yes, 0);
13893     SvIV_set(&PL_sv_yes, 1);
13894     SvNV_set(&PL_sv_yes, 1);
13895 }
13896
13897 /*
13898 =head1 Unicode Support
13899
13900 =for apidoc sv_recode_to_utf8
13901
13902 The encoding is assumed to be an Encode object, on entry the PV
13903 of the sv is assumed to be octets in that encoding, and the sv
13904 will be converted into Unicode (and UTF-8).
13905
13906 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13907 is not a reference, nothing is done to the sv.  If the encoding is not
13908 an C<Encode::XS> Encoding object, bad things will happen.
13909 (See F<lib/encoding.pm> and L<Encode>.)
13910
13911 The PV of the sv is returned.
13912
13913 =cut */
13914
13915 char *
13916 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13917 {
13918     dVAR;
13919
13920     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13921
13922     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13923         SV *uni;
13924         STRLEN len;
13925         const char *s;
13926         dSP;
13927         ENTER;
13928         SAVETMPS;
13929         save_re_context();
13930         PUSHMARK(sp);
13931         EXTEND(SP, 3);
13932         PUSHs(encoding);
13933         PUSHs(sv);
13934 /*
13935   NI-S 2002/07/09
13936   Passing sv_yes is wrong - it needs to be or'ed set of constants
13937   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13938   remove converted chars from source.
13939
13940   Both will default the value - let them.
13941
13942         XPUSHs(&PL_sv_yes);
13943 */
13944         PUTBACK;
13945         call_method("decode", G_SCALAR);
13946         SPAGAIN;
13947         uni = POPs;
13948         PUTBACK;
13949         s = SvPV_const(uni, len);
13950         if (s != SvPVX_const(sv)) {
13951             SvGROW(sv, len + 1);
13952             Move(s, SvPVX(sv), len + 1, char);
13953             SvCUR_set(sv, len);
13954         }
13955         FREETMPS;
13956         LEAVE;
13957         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13958             /* clear pos and any utf8 cache */
13959             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13960             if (mg)
13961                 mg->mg_len = -1;
13962             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13963                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13964         }
13965         SvUTF8_on(sv);
13966         return SvPVX(sv);
13967     }
13968     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13969 }
13970
13971 /*
13972 =for apidoc sv_cat_decode
13973
13974 The encoding is assumed to be an Encode object, the PV of the ssv is
13975 assumed to be octets in that encoding and decoding the input starts
13976 from the position which (PV + *offset) pointed to.  The dsv will be
13977 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13978 when the string tstr appears in decoding output or the input ends on
13979 the PV of the ssv.  The value which the offset points will be modified
13980 to the last input position on the ssv.
13981
13982 Returns TRUE if the terminator was found, else returns FALSE.
13983
13984 =cut */
13985
13986 bool
13987 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13988                    SV *ssv, int *offset, char *tstr, int tlen)
13989 {
13990     dVAR;
13991     bool ret = FALSE;
13992
13993     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13994
13995     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13996         SV *offsv;
13997         dSP;
13998         ENTER;
13999         SAVETMPS;
14000         save_re_context();
14001         PUSHMARK(sp);
14002         EXTEND(SP, 6);
14003         PUSHs(encoding);
14004         PUSHs(dsv);
14005         PUSHs(ssv);
14006         offsv = newSViv(*offset);
14007         mPUSHs(offsv);
14008         mPUSHp(tstr, tlen);
14009         PUTBACK;
14010         call_method("cat_decode", G_SCALAR);
14011         SPAGAIN;
14012         ret = SvTRUE(TOPs);
14013         *offset = SvIV(offsv);
14014         PUTBACK;
14015         FREETMPS;
14016         LEAVE;
14017     }
14018     else
14019         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14020     return ret;
14021
14022 }
14023
14024 /* ---------------------------------------------------------------------
14025  *
14026  * support functions for report_uninit()
14027  */
14028
14029 /* the maxiumum size of array or hash where we will scan looking
14030  * for the undefined element that triggered the warning */
14031
14032 #define FUV_MAX_SEARCH_SIZE 1000
14033
14034 /* Look for an entry in the hash whose value has the same SV as val;
14035  * If so, return a mortal copy of the key. */
14036
14037 STATIC SV*
14038 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14039 {
14040     dVAR;
14041     HE **array;
14042     I32 i;
14043
14044     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14045
14046     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14047                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14048         return NULL;
14049
14050     array = HvARRAY(hv);
14051
14052     for (i=HvMAX(hv); i>=0; i--) {
14053         HE *entry;
14054         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14055             if (HeVAL(entry) != val)
14056                 continue;
14057             if (    HeVAL(entry) == &PL_sv_undef ||
14058                     HeVAL(entry) == &PL_sv_placeholder)
14059                 continue;
14060             if (!HeKEY(entry))
14061                 return NULL;
14062             if (HeKLEN(entry) == HEf_SVKEY)
14063                 return sv_mortalcopy(HeKEY_sv(entry));
14064             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14065         }
14066     }
14067     return NULL;
14068 }
14069
14070 /* Look for an entry in the array whose value has the same SV as val;
14071  * If so, return the index, otherwise return -1. */
14072
14073 STATIC I32
14074 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14075 {
14076     dVAR;
14077
14078     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14079
14080     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14081                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14082         return -1;
14083
14084     if (val != &PL_sv_undef) {
14085         SV ** const svp = AvARRAY(av);
14086         I32 i;
14087
14088         for (i=AvFILLp(av); i>=0; i--)
14089             if (svp[i] == val)
14090                 return i;
14091     }
14092     return -1;
14093 }
14094
14095 /* varname(): return the name of a variable, optionally with a subscript.
14096  * If gv is non-zero, use the name of that global, along with gvtype (one
14097  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14098  * targ.  Depending on the value of the subscript_type flag, return:
14099  */
14100
14101 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14102 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14103 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14104 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14105
14106 SV*
14107 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14108         const SV *const keyname, I32 aindex, int subscript_type)
14109 {
14110
14111     SV * const name = sv_newmortal();
14112     if (gv && isGV(gv)) {
14113         char buffer[2];
14114         buffer[0] = gvtype;
14115         buffer[1] = 0;
14116
14117         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14118
14119         gv_fullname4(name, gv, buffer, 0);
14120
14121         if ((unsigned int)SvPVX(name)[1] <= 26) {
14122             buffer[0] = '^';
14123             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14124
14125             /* Swap the 1 unprintable control character for the 2 byte pretty
14126                version - ie substr($name, 1, 1) = $buffer; */
14127             sv_insert(name, 1, 1, buffer, 2);
14128         }
14129     }
14130     else {
14131         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14132         SV *sv;
14133         AV *av;
14134
14135         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14136
14137         if (!cv || !CvPADLIST(cv))
14138             return NULL;
14139         av = *PadlistARRAY(CvPADLIST(cv));
14140         sv = *av_fetch(av, targ, FALSE);
14141         sv_setsv_flags(name, sv, 0);
14142     }
14143
14144     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14145         SV * const sv = newSV(0);
14146         *SvPVX(name) = '$';
14147         Perl_sv_catpvf(aTHX_ name, "{%s}",
14148             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14149                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14150         SvREFCNT_dec_NN(sv);
14151     }
14152     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14153         *SvPVX(name) = '$';
14154         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14155     }
14156     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14157         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14158         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14159     }
14160
14161     return name;
14162 }
14163
14164
14165 /*
14166 =for apidoc find_uninit_var
14167
14168 Find the name of the undefined variable (if any) that caused the operator
14169 to issue a "Use of uninitialized value" warning.
14170 If match is true, only return a name if its value matches uninit_sv.
14171 So roughly speaking, if a unary operator (such as OP_COS) generates a
14172 warning, then following the direct child of the op may yield an
14173 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14174 other hand, with OP_ADD there are two branches to follow, so we only print
14175 the variable name if we get an exact match.
14176
14177 The name is returned as a mortal SV.
14178
14179 Assumes that PL_op is the op that originally triggered the error, and that
14180 PL_comppad/PL_curpad points to the currently executing pad.
14181
14182 =cut
14183 */
14184
14185 STATIC SV *
14186 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14187                   bool match)
14188 {
14189     dVAR;
14190     SV *sv;
14191     const GV *gv;
14192     const OP *o, *o2, *kid;
14193
14194     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14195                             uninit_sv == &PL_sv_placeholder)))
14196         return NULL;
14197
14198     switch (obase->op_type) {
14199
14200     case OP_RV2AV:
14201     case OP_RV2HV:
14202     case OP_PADAV:
14203     case OP_PADHV:
14204       {
14205         const bool pad  = (    obase->op_type == OP_PADAV
14206                             || obase->op_type == OP_PADHV
14207                             || obase->op_type == OP_PADRANGE
14208                           );
14209
14210         const bool hash = (    obase->op_type == OP_PADHV
14211                             || obase->op_type == OP_RV2HV
14212                             || (obase->op_type == OP_PADRANGE
14213                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14214                           );
14215         I32 index = 0;
14216         SV *keysv = NULL;
14217         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14218
14219         if (pad) { /* @lex, %lex */
14220             sv = PAD_SVl(obase->op_targ);
14221             gv = NULL;
14222         }
14223         else {
14224             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14225             /* @global, %global */
14226                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14227                 if (!gv)
14228                     break;
14229                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14230             }
14231             else if (obase == PL_op) /* @{expr}, %{expr} */
14232                 return find_uninit_var(cUNOPx(obase)->op_first,
14233                                                     uninit_sv, match);
14234             else /* @{expr}, %{expr} as a sub-expression */
14235                 return NULL;
14236         }
14237
14238         /* attempt to find a match within the aggregate */
14239         if (hash) {
14240             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14241             if (keysv)
14242                 subscript_type = FUV_SUBSCRIPT_HASH;
14243         }
14244         else {
14245             index = find_array_subscript((const AV *)sv, uninit_sv);
14246             if (index >= 0)
14247                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14248         }
14249
14250         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14251             break;
14252
14253         return varname(gv, hash ? '%' : '@', obase->op_targ,
14254                                     keysv, index, subscript_type);
14255       }
14256
14257     case OP_RV2SV:
14258         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14259             /* $global */
14260             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14261             if (!gv || !GvSTASH(gv))
14262                 break;
14263             if (match && (GvSV(gv) != uninit_sv))
14264                 break;
14265             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14266         }
14267         /* ${expr} */
14268         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14269
14270     case OP_PADSV:
14271         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14272             break;
14273         return varname(NULL, '$', obase->op_targ,
14274                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14275
14276     case OP_GVSV:
14277         gv = cGVOPx_gv(obase);
14278         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14279             break;
14280         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14281
14282     case OP_AELEMFAST_LEX:
14283         if (match) {
14284             SV **svp;
14285             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14286             if (!av || SvRMAGICAL(av))
14287                 break;
14288             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14289             if (!svp || *svp != uninit_sv)
14290                 break;
14291         }
14292         return varname(NULL, '$', obase->op_targ,
14293                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14294     case OP_AELEMFAST:
14295         {
14296             gv = cGVOPx_gv(obase);
14297             if (!gv)
14298                 break;
14299             if (match) {
14300                 SV **svp;
14301                 AV *const av = GvAV(gv);
14302                 if (!av || SvRMAGICAL(av))
14303                     break;
14304                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14305                 if (!svp || *svp != uninit_sv)
14306                     break;
14307             }
14308             return varname(gv, '$', 0,
14309                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14310         }
14311         break;
14312
14313     case OP_EXISTS:
14314         o = cUNOPx(obase)->op_first;
14315         if (!o || o->op_type != OP_NULL ||
14316                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14317             break;
14318         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14319
14320     case OP_AELEM:
14321     case OP_HELEM:
14322     {
14323         bool negate = FALSE;
14324
14325         if (PL_op == obase)
14326             /* $a[uninit_expr] or $h{uninit_expr} */
14327             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14328
14329         gv = NULL;
14330         o = cBINOPx(obase)->op_first;
14331         kid = cBINOPx(obase)->op_last;
14332
14333         /* get the av or hv, and optionally the gv */
14334         sv = NULL;
14335         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14336             sv = PAD_SV(o->op_targ);
14337         }
14338         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14339                 && cUNOPo->op_first->op_type == OP_GV)
14340         {
14341             gv = cGVOPx_gv(cUNOPo->op_first);
14342             if (!gv)
14343                 break;
14344             sv = o->op_type
14345                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14346         }
14347         if (!sv)
14348             break;
14349
14350         if (kid && kid->op_type == OP_NEGATE) {
14351             negate = TRUE;
14352             kid = cUNOPx(kid)->op_first;
14353         }
14354
14355         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14356             /* index is constant */
14357             SV* kidsv;
14358             if (negate) {
14359                 kidsv = sv_2mortal(newSVpvs("-"));
14360                 sv_catsv(kidsv, cSVOPx_sv(kid));
14361             }
14362             else
14363                 kidsv = cSVOPx_sv(kid);
14364             if (match) {
14365                 if (SvMAGICAL(sv))
14366                     break;
14367                 if (obase->op_type == OP_HELEM) {
14368                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14369                     if (!he || HeVAL(he) != uninit_sv)
14370                         break;
14371                 }
14372                 else {
14373                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14374                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14375                         FALSE);
14376                     if (!svp || *svp != uninit_sv)
14377                         break;
14378                 }
14379             }
14380             if (obase->op_type == OP_HELEM)
14381                 return varname(gv, '%', o->op_targ,
14382                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14383             else
14384                 return varname(gv, '@', o->op_targ, NULL,
14385                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14386                     FUV_SUBSCRIPT_ARRAY);
14387         }
14388         else  {
14389             /* index is an expression;
14390              * attempt to find a match within the aggregate */
14391             if (obase->op_type == OP_HELEM) {
14392                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14393                 if (keysv)
14394                     return varname(gv, '%', o->op_targ,
14395                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14396             }
14397             else {
14398                 const I32 index
14399                     = find_array_subscript((const AV *)sv, uninit_sv);
14400                 if (index >= 0)
14401                     return varname(gv, '@', o->op_targ,
14402                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14403             }
14404             if (match)
14405                 break;
14406             return varname(gv,
14407                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14408                 ? '@' : '%',
14409                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14410         }
14411         break;
14412     }
14413
14414     case OP_AASSIGN:
14415         /* only examine RHS */
14416         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14417
14418     case OP_OPEN:
14419         o = cUNOPx(obase)->op_first;
14420         if (   o->op_type == OP_PUSHMARK
14421            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14422         )
14423             o = o->op_sibling;
14424
14425         if (!o->op_sibling) {
14426             /* one-arg version of open is highly magical */
14427
14428             if (o->op_type == OP_GV) { /* open FOO; */
14429                 gv = cGVOPx_gv(o);
14430                 if (match && GvSV(gv) != uninit_sv)
14431                     break;
14432                 return varname(gv, '$', 0,
14433                             NULL, 0, FUV_SUBSCRIPT_NONE);
14434             }
14435             /* other possibilities not handled are:
14436              * open $x; or open my $x;  should return '${*$x}'
14437              * open expr;               should return '$'.expr ideally
14438              */
14439              break;
14440         }
14441         goto do_op;
14442
14443     /* ops where $_ may be an implicit arg */
14444     case OP_TRANS:
14445     case OP_TRANSR:
14446     case OP_SUBST:
14447     case OP_MATCH:
14448         if ( !(obase->op_flags & OPf_STACKED)) {
14449             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14450                                  ? PAD_SVl(obase->op_targ)
14451                                  : DEFSV))
14452             {
14453                 sv = sv_newmortal();
14454                 sv_setpvs(sv, "$_");
14455                 return sv;
14456             }
14457         }
14458         goto do_op;
14459
14460     case OP_PRTF:
14461     case OP_PRINT:
14462     case OP_SAY:
14463         match = 1; /* print etc can return undef on defined args */
14464         /* skip filehandle as it can't produce 'undef' warning  */
14465         o = cUNOPx(obase)->op_first;
14466         if ((obase->op_flags & OPf_STACKED)
14467             &&
14468                (   o->op_type == OP_PUSHMARK
14469                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14470             o = o->op_sibling->op_sibling;
14471         goto do_op2;
14472
14473
14474     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14475     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14476
14477         /* the following ops are capable of returning PL_sv_undef even for
14478          * defined arg(s) */
14479
14480     case OP_BACKTICK:
14481     case OP_PIPE_OP:
14482     case OP_FILENO:
14483     case OP_BINMODE:
14484     case OP_TIED:
14485     case OP_GETC:
14486     case OP_SYSREAD:
14487     case OP_SEND:
14488     case OP_IOCTL:
14489     case OP_SOCKET:
14490     case OP_SOCKPAIR:
14491     case OP_BIND:
14492     case OP_CONNECT:
14493     case OP_LISTEN:
14494     case OP_ACCEPT:
14495     case OP_SHUTDOWN:
14496     case OP_SSOCKOPT:
14497     case OP_GETPEERNAME:
14498     case OP_FTRREAD:
14499     case OP_FTRWRITE:
14500     case OP_FTREXEC:
14501     case OP_FTROWNED:
14502     case OP_FTEREAD:
14503     case OP_FTEWRITE:
14504     case OP_FTEEXEC:
14505     case OP_FTEOWNED:
14506     case OP_FTIS:
14507     case OP_FTZERO:
14508     case OP_FTSIZE:
14509     case OP_FTFILE:
14510     case OP_FTDIR:
14511     case OP_FTLINK:
14512     case OP_FTPIPE:
14513     case OP_FTSOCK:
14514     case OP_FTBLK:
14515     case OP_FTCHR:
14516     case OP_FTTTY:
14517     case OP_FTSUID:
14518     case OP_FTSGID:
14519     case OP_FTSVTX:
14520     case OP_FTTEXT:
14521     case OP_FTBINARY:
14522     case OP_FTMTIME:
14523     case OP_FTATIME:
14524     case OP_FTCTIME:
14525     case OP_READLINK:
14526     case OP_OPEN_DIR:
14527     case OP_READDIR:
14528     case OP_TELLDIR:
14529     case OP_SEEKDIR:
14530     case OP_REWINDDIR:
14531     case OP_CLOSEDIR:
14532     case OP_GMTIME:
14533     case OP_ALARM:
14534     case OP_SEMGET:
14535     case OP_GETLOGIN:
14536     case OP_UNDEF:
14537     case OP_SUBSTR:
14538     case OP_AEACH:
14539     case OP_EACH:
14540     case OP_SORT:
14541     case OP_CALLER:
14542     case OP_DOFILE:
14543     case OP_PROTOTYPE:
14544     case OP_NCMP:
14545     case OP_SMARTMATCH:
14546     case OP_UNPACK:
14547     case OP_SYSOPEN:
14548     case OP_SYSSEEK:
14549         match = 1;
14550         goto do_op;
14551
14552     case OP_ENTERSUB:
14553     case OP_GOTO:
14554         /* XXX tmp hack: these two may call an XS sub, and currently
14555           XS subs don't have a SUB entry on the context stack, so CV and
14556           pad determination goes wrong, and BAD things happen. So, just
14557           don't try to determine the value under those circumstances.
14558           Need a better fix at dome point. DAPM 11/2007 */
14559         break;
14560
14561     case OP_FLIP:
14562     case OP_FLOP:
14563     {
14564         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14565         if (gv && GvSV(gv) == uninit_sv)
14566             return newSVpvs_flags("$.", SVs_TEMP);
14567         goto do_op;
14568     }
14569
14570     case OP_POS:
14571         /* def-ness of rval pos() is independent of the def-ness of its arg */
14572         if ( !(obase->op_flags & OPf_MOD))
14573             break;
14574
14575     case OP_SCHOMP:
14576     case OP_CHOMP:
14577         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14578             return newSVpvs_flags("${$/}", SVs_TEMP);
14579         /*FALLTHROUGH*/
14580
14581     default:
14582     do_op:
14583         if (!(obase->op_flags & OPf_KIDS))
14584             break;
14585         o = cUNOPx(obase)->op_first;
14586         
14587     do_op2:
14588         if (!o)
14589             break;
14590
14591         /* This loop checks all the kid ops, skipping any that cannot pos-
14592          * sibly be responsible for the uninitialized value; i.e., defined
14593          * constants and ops that return nothing.  If there is only one op
14594          * left that is not skipped, then we *know* it is responsible for
14595          * the uninitialized value.  If there is more than one op left, we
14596          * have to look for an exact match in the while() loop below.
14597          * Note that we skip padrange, because the individual pad ops that
14598          * it replaced are still in the tree, so we work on them instead.
14599          */
14600         o2 = NULL;
14601         for (kid=o; kid; kid = kid->op_sibling) {
14602             if (kid) {
14603                 const OPCODE type = kid->op_type;
14604                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14605                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14606                   || (type == OP_PUSHMARK)
14607                   || (type == OP_PADRANGE)
14608                 )
14609                 continue;
14610             }
14611             if (o2) { /* more than one found */
14612                 o2 = NULL;
14613                 break;
14614             }
14615             o2 = kid;
14616         }
14617         if (o2)
14618             return find_uninit_var(o2, uninit_sv, match);
14619
14620         /* scan all args */
14621         while (o) {
14622             sv = find_uninit_var(o, uninit_sv, 1);
14623             if (sv)
14624                 return sv;
14625             o = o->op_sibling;
14626         }
14627         break;
14628     }
14629     return NULL;
14630 }
14631
14632
14633 /*
14634 =for apidoc report_uninit
14635
14636 Print appropriate "Use of uninitialized variable" warning.
14637
14638 =cut
14639 */
14640
14641 void
14642 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14643 {
14644     dVAR;
14645     if (PL_op) {
14646         SV* varname = NULL;
14647         if (uninit_sv && PL_curpad) {
14648             varname = find_uninit_var(PL_op, uninit_sv,0);
14649             if (varname)
14650                 sv_insert(varname, 0, 0, " ", 1);
14651         }
14652         /* diag_listed_as: Use of uninitialized value%s */
14653         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14654                 SVfARG(varname ? varname : &PL_sv_no),
14655                 " in ", OP_DESC(PL_op));
14656     }
14657     else
14658         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14659                     "", "", "");
14660 }
14661
14662 /*
14663  * Local variables:
14664  * c-indentation-style: bsd
14665  * c-basic-offset: 4
14666  * indent-tabs-mode: nil
14667  * End:
14668  *
14669  * ex: set ts=8 sts=4 sw=4 et:
14670  */