This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
utf8.c: Reword a warning message
[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     char *tpv = NULL;
7441     I32  cmp;
7442     SV *svrecode = NULL;
7443
7444     if (!sv1) {
7445         pv1 = "";
7446         cur1 = 0;
7447     }
7448     else
7449         pv1 = SvPV_flags_const(sv1, cur1, flags);
7450
7451     if (!sv2) {
7452         pv2 = "";
7453         cur2 = 0;
7454     }
7455     else
7456         pv2 = SvPV_flags_const(sv2, cur2, flags);
7457
7458     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7459         /* Differing utf8ness.
7460          * Do not UTF8size the comparands as a side-effect. */
7461         if (SvUTF8(sv1)) {
7462             if (PL_encoding) {
7463                  svrecode = newSVpvn(pv2, cur2);
7464                  sv_recode_to_utf8(svrecode, PL_encoding);
7465                  pv2 = SvPV_const(svrecode, cur2);
7466             }
7467             else {
7468                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7469                                                    (const U8*)pv1, cur1);
7470                 return retval ? retval < 0 ? -1 : +1 : 0;
7471             }
7472         }
7473         else {
7474             if (PL_encoding) {
7475                  svrecode = newSVpvn(pv1, cur1);
7476                  sv_recode_to_utf8(svrecode, PL_encoding);
7477                  pv1 = SvPV_const(svrecode, cur1);
7478             }
7479             else {
7480                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7481                                                   (const U8*)pv2, cur2);
7482                 return retval ? retval < 0 ? -1 : +1 : 0;
7483             }
7484         }
7485     }
7486
7487     if (!cur1) {
7488         cmp = cur2 ? -1 : 0;
7489     } else if (!cur2) {
7490         cmp = 1;
7491     } else {
7492         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7493
7494         if (retval) {
7495             cmp = retval < 0 ? -1 : 1;
7496         } else if (cur1 == cur2) {
7497             cmp = 0;
7498         } else {
7499             cmp = cur1 < cur2 ? -1 : 1;
7500         }
7501     }
7502
7503     SvREFCNT_dec(svrecode);
7504     if (tpv)
7505         Safefree(tpv);
7506
7507     return cmp;
7508 }
7509
7510 /*
7511 =for apidoc sv_cmp_locale
7512
7513 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7514 'use bytes' aware, handles get magic, and will coerce its args to strings
7515 if necessary.  See also C<sv_cmp>.
7516
7517 =for apidoc sv_cmp_locale_flags
7518
7519 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7520 'use bytes' aware and will coerce its args to strings if necessary.  If the
7521 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7522
7523 =cut
7524 */
7525
7526 I32
7527 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7528 {
7529     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7530 }
7531
7532 I32
7533 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7534                          const U32 flags)
7535 {
7536     dVAR;
7537 #ifdef USE_LOCALE_COLLATE
7538
7539     char *pv1, *pv2;
7540     STRLEN len1, len2;
7541     I32 retval;
7542
7543     if (PL_collation_standard)
7544         goto raw_compare;
7545
7546     len1 = 0;
7547     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7548     len2 = 0;
7549     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7550
7551     if (!pv1 || !len1) {
7552         if (pv2 && len2)
7553             return -1;
7554         else
7555             goto raw_compare;
7556     }
7557     else {
7558         if (!pv2 || !len2)
7559             return 1;
7560     }
7561
7562     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7563
7564     if (retval)
7565         return retval < 0 ? -1 : 1;
7566
7567     /*
7568      * When the result of collation is equality, that doesn't mean
7569      * that there are no differences -- some locales exclude some
7570      * characters from consideration.  So to avoid false equalities,
7571      * we use the raw string as a tiebreaker.
7572      */
7573
7574   raw_compare:
7575     /*FALLTHROUGH*/
7576
7577 #endif /* USE_LOCALE_COLLATE */
7578
7579     return sv_cmp(sv1, sv2);
7580 }
7581
7582
7583 #ifdef USE_LOCALE_COLLATE
7584
7585 /*
7586 =for apidoc sv_collxfrm
7587
7588 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7589 C<sv_collxfrm_flags>.
7590
7591 =for apidoc sv_collxfrm_flags
7592
7593 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7594 flags contain SV_GMAGIC, it handles get-magic.
7595
7596 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7597 scalar data of the variable, but transformed to such a format that a normal
7598 memory comparison can be used to compare the data according to the locale
7599 settings.
7600
7601 =cut
7602 */
7603
7604 char *
7605 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7606 {
7607     dVAR;
7608     MAGIC *mg;
7609
7610     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7611
7612     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7613     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7614         const char *s;
7615         char *xf;
7616         STRLEN len, xlen;
7617
7618         if (mg)
7619             Safefree(mg->mg_ptr);
7620         s = SvPV_flags_const(sv, len, flags);
7621         if ((xf = mem_collxfrm(s, len, &xlen))) {
7622             if (! mg) {
7623 #ifdef PERL_OLD_COPY_ON_WRITE
7624                 if (SvIsCOW(sv))
7625                     sv_force_normal_flags(sv, 0);
7626 #endif
7627                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7628                                  0, 0);
7629                 assert(mg);
7630             }
7631             mg->mg_ptr = xf;
7632             mg->mg_len = xlen;
7633         }
7634         else {
7635             if (mg) {
7636                 mg->mg_ptr = NULL;
7637                 mg->mg_len = -1;
7638             }
7639         }
7640     }
7641     if (mg && mg->mg_ptr) {
7642         *nxp = mg->mg_len;
7643         return mg->mg_ptr + sizeof(PL_collation_ix);
7644     }
7645     else {
7646         *nxp = 0;
7647         return NULL;
7648     }
7649 }
7650
7651 #endif /* USE_LOCALE_COLLATE */
7652
7653 static char *
7654 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7655 {
7656     SV * const tsv = newSV(0);
7657     ENTER;
7658     SAVEFREESV(tsv);
7659     sv_gets(tsv, fp, 0);
7660     sv_utf8_upgrade_nomg(tsv);
7661     SvCUR_set(sv,append);
7662     sv_catsv(sv,tsv);
7663     LEAVE;
7664     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7665 }
7666
7667 static char *
7668 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7669 {
7670     SSize_t bytesread;
7671     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7672       /* Grab the size of the record we're getting */
7673     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7674     
7675     /* Go yank in */
7676 #ifdef VMS
7677 #include <rms.h>
7678     int fd;
7679     Stat_t st;
7680
7681     /* With a true, record-oriented file on VMS, we need to use read directly
7682      * to ensure that we respect RMS record boundaries.  The user is responsible
7683      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7684      * record size) field.  N.B. This is likely to produce invalid results on
7685      * varying-width character data when a record ends mid-character.
7686      */
7687     fd = PerlIO_fileno(fp);
7688     if (fd != -1
7689         && PerlLIO_fstat(fd, &st) == 0
7690         && (st.st_fab_rfm == FAB$C_VAR
7691             || st.st_fab_rfm == FAB$C_VFC
7692             || st.st_fab_rfm == FAB$C_FIX)) {
7693
7694         bytesread = PerlLIO_read(fd, buffer, recsize);
7695     }
7696     else /* in-memory file from PerlIO::Scalar
7697           * or not a record-oriented file
7698           */
7699 #endif
7700     {
7701         bytesread = PerlIO_read(fp, buffer, recsize);
7702
7703         /* At this point, the logic in sv_get() means that sv will
7704            be treated as utf-8 if the handle is utf8.
7705         */
7706         if (PerlIO_isutf8(fp) && bytesread > 0) {
7707             char *bend = buffer + bytesread;
7708             char *bufp = buffer;
7709             size_t charcount = 0;
7710             bool charstart = TRUE;
7711             STRLEN skip = 0;
7712
7713             while (charcount < recsize) {
7714                 /* count accumulated characters */
7715                 while (bufp < bend) {
7716                     if (charstart) {
7717                         skip = UTF8SKIP(bufp);
7718                     }
7719                     if (bufp + skip > bend) {
7720                         /* partial at the end */
7721                         charstart = FALSE;
7722                         break;
7723                     }
7724                     else {
7725                         ++charcount;
7726                         bufp += skip;
7727                         charstart = TRUE;
7728                     }
7729                 }
7730
7731                 if (charcount < recsize) {
7732                     STRLEN readsize;
7733                     STRLEN bufp_offset = bufp - buffer;
7734                     SSize_t morebytesread;
7735
7736                     /* originally I read enough to fill any incomplete
7737                        character and the first byte of the next
7738                        character if needed, but if there's many
7739                        multi-byte encoded characters we're going to be
7740                        making a read call for every character beyond
7741                        the original read size.
7742
7743                        So instead, read the rest of the character if
7744                        any, and enough bytes to match at least the
7745                        start bytes for each character we're going to
7746                        read.
7747                     */
7748                     if (charstart)
7749                         readsize = recsize - charcount;
7750                     else 
7751                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
7752                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
7753                     bend = buffer + bytesread;
7754                     morebytesread = PerlIO_read(fp, bend, readsize);
7755                     if (morebytesread <= 0) {
7756                         /* we're done, if we still have incomplete
7757                            characters the check code in sv_gets() will
7758                            warn about them.
7759
7760                            I'd originally considered doing
7761                            PerlIO_ungetc() on all but the lead
7762                            character of the incomplete character, but
7763                            read() doesn't do that, so I don't.
7764                         */
7765                         break;
7766                     }
7767
7768                     /* prepare to scan some more */
7769                     bytesread += morebytesread;
7770                     bend = buffer + bytesread;
7771                     bufp = buffer + bufp_offset;
7772                 }
7773             }
7774         }
7775     }
7776
7777     if (bytesread < 0)
7778         bytesread = 0;
7779     SvCUR_set(sv, bytesread + append);
7780     buffer[bytesread] = '\0';
7781     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7782 }
7783
7784 /*
7785 =for apidoc sv_gets
7786
7787 Get a line from the filehandle and store it into the SV, optionally
7788 appending to the currently-stored string. If C<append> is not 0, the
7789 line is appended to the SV instead of overwriting it. C<append> should
7790 be set to the byte offset that the appended string should start at
7791 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
7792
7793 =cut
7794 */
7795
7796 char *
7797 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7798 {
7799     dVAR;
7800     const char *rsptr;
7801     STRLEN rslen;
7802     STDCHAR rslast;
7803     STDCHAR *bp;
7804     I32 cnt;
7805     I32 i = 0;
7806     I32 rspara = 0;
7807
7808     PERL_ARGS_ASSERT_SV_GETS;
7809
7810     if (SvTHINKFIRST(sv))
7811         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
7812     /* XXX. If you make this PVIV, then copy on write can copy scalars read
7813        from <>.
7814        However, perlbench says it's slower, because the existing swipe code
7815        is faster than copy on write.
7816        Swings and roundabouts.  */
7817     SvUPGRADE(sv, SVt_PV);
7818
7819     if (append) {
7820         if (PerlIO_isutf8(fp)) {
7821             if (!SvUTF8(sv)) {
7822                 sv_utf8_upgrade_nomg(sv);
7823                 sv_pos_u2b(sv,&append,0);
7824             }
7825         } else if (SvUTF8(sv)) {
7826             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
7827         }
7828     }
7829
7830     SvPOK_only(sv);
7831     if (!append) {
7832         SvCUR_set(sv,0);
7833     }
7834     if (PerlIO_isutf8(fp))
7835         SvUTF8_on(sv);
7836
7837     if (IN_PERL_COMPILETIME) {
7838         /* we always read code in line mode */
7839         rsptr = "\n";
7840         rslen = 1;
7841     }
7842     else if (RsSNARF(PL_rs)) {
7843         /* If it is a regular disk file use size from stat() as estimate
7844            of amount we are going to read -- may result in mallocing
7845            more memory than we really need if the layers below reduce
7846            the size we read (e.g. CRLF or a gzip layer).
7847          */
7848         Stat_t st;
7849         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
7850             const Off_t offset = PerlIO_tell(fp);
7851             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7852                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7853             }
7854         }
7855         rsptr = NULL;
7856         rslen = 0;
7857     }
7858     else if (RsRECORD(PL_rs)) {
7859         return S_sv_gets_read_record(aTHX_ sv, fp, append);
7860     }
7861     else if (RsPARA(PL_rs)) {
7862         rsptr = "\n\n";
7863         rslen = 2;
7864         rspara = 1;
7865     }
7866     else {
7867         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7868         if (PerlIO_isutf8(fp)) {
7869             rsptr = SvPVutf8(PL_rs, rslen);
7870         }
7871         else {
7872             if (SvUTF8(PL_rs)) {
7873                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7874                     Perl_croak(aTHX_ "Wide character in $/");
7875                 }
7876             }
7877             rsptr = SvPV_const(PL_rs, rslen);
7878         }
7879     }
7880
7881     rslast = rslen ? rsptr[rslen - 1] : '\0';
7882
7883     if (rspara) {               /* have to do this both before and after */
7884         do {                    /* to make sure file boundaries work right */
7885             if (PerlIO_eof(fp))
7886                 return 0;
7887             i = PerlIO_getc(fp);
7888             if (i != '\n') {
7889                 if (i == -1)
7890                     return 0;
7891                 PerlIO_ungetc(fp,i);
7892                 break;
7893             }
7894         } while (i != EOF);
7895     }
7896
7897     /* See if we know enough about I/O mechanism to cheat it ! */
7898
7899     /* This used to be #ifdef test - it is made run-time test for ease
7900        of abstracting out stdio interface. One call should be cheap
7901        enough here - and may even be a macro allowing compile
7902        time optimization.
7903      */
7904
7905     if (PerlIO_fast_gets(fp)) {
7906
7907     /*
7908      * We're going to steal some values from the stdio struct
7909      * and put EVERYTHING in the innermost loop into registers.
7910      */
7911     STDCHAR *ptr;
7912     STRLEN bpx;
7913     I32 shortbuffered;
7914
7915 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7916     /* An ungetc()d char is handled separately from the regular
7917      * buffer, so we getc() it back out and stuff it in the buffer.
7918      */
7919     i = PerlIO_getc(fp);
7920     if (i == EOF) return 0;
7921     *(--((*fp)->_ptr)) = (unsigned char) i;
7922     (*fp)->_cnt++;
7923 #endif
7924
7925     /* Here is some breathtakingly efficient cheating */
7926
7927     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7928     /* make sure we have the room */
7929     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7930         /* Not room for all of it
7931            if we are looking for a separator and room for some
7932          */
7933         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7934             /* just process what we have room for */
7935             shortbuffered = cnt - SvLEN(sv) + append + 1;
7936             cnt -= shortbuffered;
7937         }
7938         else {
7939             shortbuffered = 0;
7940             /* remember that cnt can be negative */
7941             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7942         }
7943     }
7944     else
7945         shortbuffered = 0;
7946     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7947     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7948     DEBUG_P(PerlIO_printf(Perl_debug_log,
7949         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7950     DEBUG_P(PerlIO_printf(Perl_debug_log,
7951         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7952                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7953                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7954     for (;;) {
7955       screamer:
7956         if (cnt > 0) {
7957             if (rslen) {
7958                 while (cnt > 0) {                    /* this     |  eat */
7959                     cnt--;
7960                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7961                         goto thats_all_folks;        /* screams  |  sed :-) */
7962                 }
7963             }
7964             else {
7965                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7966                 bp += cnt;                           /* screams  |  dust */
7967                 ptr += cnt;                          /* louder   |  sed :-) */
7968                 cnt = 0;
7969                 assert (!shortbuffered);
7970                 goto cannot_be_shortbuffered;
7971             }
7972         }
7973         
7974         if (shortbuffered) {            /* oh well, must extend */
7975             cnt = shortbuffered;
7976             shortbuffered = 0;
7977             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7978             SvCUR_set(sv, bpx);
7979             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7980             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7981             continue;
7982         }
7983
7984     cannot_be_shortbuffered:
7985         DEBUG_P(PerlIO_printf(Perl_debug_log,
7986                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7987                               PTR2UV(ptr),(long)cnt));
7988         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7989
7990         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
7991             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7992             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7993             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7994
7995         /* This used to call 'filbuf' in stdio form, but as that behaves like
7996            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7997            another abstraction.  */
7998         i   = PerlIO_getc(fp);          /* get more characters */
7999
8000         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8001             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8002             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8003             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8004
8005         cnt = PerlIO_get_cnt(fp);
8006         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8007         DEBUG_P(PerlIO_printf(Perl_debug_log,
8008             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8009
8010         if (i == EOF)                   /* all done for ever? */
8011             goto thats_really_all_folks;
8012
8013         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8014         SvCUR_set(sv, bpx);
8015         SvGROW(sv, bpx + cnt + 2);
8016         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8017
8018         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8019
8020         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8021             goto thats_all_folks;
8022     }
8023
8024 thats_all_folks:
8025     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8026           memNE((char*)bp - rslen, rsptr, rslen))
8027         goto screamer;                          /* go back to the fray */
8028 thats_really_all_folks:
8029     if (shortbuffered)
8030         cnt += shortbuffered;
8031         DEBUG_P(PerlIO_printf(Perl_debug_log,
8032             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8033     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8034     DEBUG_P(PerlIO_printf(Perl_debug_log,
8035         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
8036         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
8037         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8038     *bp = '\0';
8039     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8040     DEBUG_P(PerlIO_printf(Perl_debug_log,
8041         "Screamer: done, len=%ld, string=|%.*s|\n",
8042         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8043     }
8044    else
8045     {
8046        /*The big, slow, and stupid way. */
8047 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8048         STDCHAR *buf = NULL;
8049         Newx(buf, 8192, STDCHAR);
8050         assert(buf);
8051 #else
8052         STDCHAR buf[8192];
8053 #endif
8054
8055 screamer2:
8056         if (rslen) {
8057             const STDCHAR * const bpe = buf + sizeof(buf);
8058             bp = buf;
8059             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8060                 ; /* keep reading */
8061             cnt = bp - buf;
8062         }
8063         else {
8064             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8065             /* Accommodate broken VAXC compiler, which applies U8 cast to
8066              * both args of ?: operator, causing EOF to change into 255
8067              */
8068             if (cnt > 0)
8069                  i = (U8)buf[cnt - 1];
8070             else
8071                  i = EOF;
8072         }
8073
8074         if (cnt < 0)
8075             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8076         if (append)
8077             sv_catpvn_nomg(sv, (char *) buf, cnt);
8078         else
8079             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8080
8081         if (i != EOF &&                 /* joy */
8082             (!rslen ||
8083              SvCUR(sv) < rslen ||
8084              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8085         {
8086             append = -1;
8087             /*
8088              * If we're reading from a TTY and we get a short read,
8089              * indicating that the user hit his EOF character, we need
8090              * to notice it now, because if we try to read from the TTY
8091              * again, the EOF condition will disappear.
8092              *
8093              * The comparison of cnt to sizeof(buf) is an optimization
8094              * that prevents unnecessary calls to feof().
8095              *
8096              * - jik 9/25/96
8097              */
8098             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8099                 goto screamer2;
8100         }
8101
8102 #ifdef USE_HEAP_INSTEAD_OF_STACK
8103         Safefree(buf);
8104 #endif
8105     }
8106
8107     if (rspara) {               /* have to do this both before and after */
8108         while (i != EOF) {      /* to make sure file boundaries work right */
8109             i = PerlIO_getc(fp);
8110             if (i != '\n') {
8111                 PerlIO_ungetc(fp,i);
8112                 break;
8113             }
8114         }
8115     }
8116
8117     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8118 }
8119
8120 /*
8121 =for apidoc sv_inc
8122
8123 Auto-increment of the value in the SV, doing string to numeric conversion
8124 if necessary.  Handles 'get' magic and operator overloading.
8125
8126 =cut
8127 */
8128
8129 void
8130 Perl_sv_inc(pTHX_ SV *const sv)
8131 {
8132     if (!sv)
8133         return;
8134     SvGETMAGIC(sv);
8135     sv_inc_nomg(sv);
8136 }
8137
8138 /*
8139 =for apidoc sv_inc_nomg
8140
8141 Auto-increment of the value in the SV, doing string to numeric conversion
8142 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8143
8144 =cut
8145 */
8146
8147 void
8148 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8149 {
8150     dVAR;
8151     char *d;
8152     int flags;
8153
8154     if (!sv)
8155         return;
8156     if (SvTHINKFIRST(sv)) {
8157         if (SvIsCOW(sv) || isGV_with_GP(sv))
8158             sv_force_normal_flags(sv, 0);
8159         if (SvREADONLY(sv)) {
8160             if (IN_PERL_RUNTIME)
8161                 Perl_croak_no_modify();
8162         }
8163         if (SvROK(sv)) {
8164             IV i;
8165             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8166                 return;
8167             i = PTR2IV(SvRV(sv));
8168             sv_unref(sv);
8169             sv_setiv(sv, i);
8170         }
8171     }
8172     flags = SvFLAGS(sv);
8173     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8174         /* It's (privately or publicly) a float, but not tested as an
8175            integer, so test it to see. */
8176         (void) SvIV(sv);
8177         flags = SvFLAGS(sv);
8178     }
8179     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8180         /* It's publicly an integer, or privately an integer-not-float */
8181 #ifdef PERL_PRESERVE_IVUV
8182       oops_its_int:
8183 #endif
8184         if (SvIsUV(sv)) {
8185             if (SvUVX(sv) == UV_MAX)
8186                 sv_setnv(sv, UV_MAX_P1);
8187             else
8188                 (void)SvIOK_only_UV(sv);
8189                 SvUV_set(sv, SvUVX(sv) + 1);
8190         } else {
8191             if (SvIVX(sv) == IV_MAX)
8192                 sv_setuv(sv, (UV)IV_MAX + 1);
8193             else {
8194                 (void)SvIOK_only(sv);
8195                 SvIV_set(sv, SvIVX(sv) + 1);
8196             }   
8197         }
8198         return;
8199     }
8200     if (flags & SVp_NOK) {
8201         const NV was = SvNVX(sv);
8202         if (NV_OVERFLOWS_INTEGERS_AT &&
8203             was >= NV_OVERFLOWS_INTEGERS_AT) {
8204             /* diag_listed_as: Lost precision when %s %f by 1 */
8205             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8206                            "Lost precision when incrementing %" NVff " by 1",
8207                            was);
8208         }
8209         (void)SvNOK_only(sv);
8210         SvNV_set(sv, was + 1.0);
8211         return;
8212     }
8213
8214     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8215         if ((flags & SVTYPEMASK) < SVt_PVIV)
8216             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8217         (void)SvIOK_only(sv);
8218         SvIV_set(sv, 1);
8219         return;
8220     }
8221     d = SvPVX(sv);
8222     while (isALPHA(*d)) d++;
8223     while (isDIGIT(*d)) d++;
8224     if (d < SvEND(sv)) {
8225 #ifdef PERL_PRESERVE_IVUV
8226         /* Got to punt this as an integer if needs be, but we don't issue
8227            warnings. Probably ought to make the sv_iv_please() that does
8228            the conversion if possible, and silently.  */
8229         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8230         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8231             /* Need to try really hard to see if it's an integer.
8232                9.22337203685478e+18 is an integer.
8233                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8234                so $a="9.22337203685478e+18"; $a+0; $a++
8235                needs to be the same as $a="9.22337203685478e+18"; $a++
8236                or we go insane. */
8237         
8238             (void) sv_2iv(sv);
8239             if (SvIOK(sv))
8240                 goto oops_its_int;
8241
8242             /* sv_2iv *should* have made this an NV */
8243             if (flags & SVp_NOK) {
8244                 (void)SvNOK_only(sv);
8245                 SvNV_set(sv, SvNVX(sv) + 1.0);
8246                 return;
8247             }
8248             /* I don't think we can get here. Maybe I should assert this
8249                And if we do get here I suspect that sv_setnv will croak. NWC
8250                Fall through. */
8251 #if defined(USE_LONG_DOUBLE)
8252             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",
8253                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8254 #else
8255             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8256                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8257 #endif
8258         }
8259 #endif /* PERL_PRESERVE_IVUV */
8260         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8261         return;
8262     }
8263     d--;
8264     while (d >= SvPVX_const(sv)) {
8265         if (isDIGIT(*d)) {
8266             if (++*d <= '9')
8267                 return;
8268             *(d--) = '0';
8269         }
8270         else {
8271 #ifdef EBCDIC
8272             /* MKS: The original code here died if letters weren't consecutive.
8273              * at least it didn't have to worry about non-C locales.  The
8274              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8275              * arranged in order (although not consecutively) and that only
8276              * [A-Za-z] are accepted by isALPHA in the C locale.
8277              */
8278             if (*d != 'z' && *d != 'Z') {
8279                 do { ++*d; } while (!isALPHA(*d));
8280                 return;
8281             }
8282             *(d--) -= 'z' - 'a';
8283 #else
8284             ++*d;
8285             if (isALPHA(*d))
8286                 return;
8287             *(d--) -= 'z' - 'a' + 1;
8288 #endif
8289         }
8290     }
8291     /* oh,oh, the number grew */
8292     SvGROW(sv, SvCUR(sv) + 2);
8293     SvCUR_set(sv, SvCUR(sv) + 1);
8294     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8295         *d = d[-1];
8296     if (isDIGIT(d[1]))
8297         *d = '1';
8298     else
8299         *d = d[1];
8300 }
8301
8302 /*
8303 =for apidoc sv_dec
8304
8305 Auto-decrement of the value in the SV, doing string to numeric conversion
8306 if necessary.  Handles 'get' magic and operator overloading.
8307
8308 =cut
8309 */
8310
8311 void
8312 Perl_sv_dec(pTHX_ SV *const sv)
8313 {
8314     dVAR;
8315     if (!sv)
8316         return;
8317     SvGETMAGIC(sv);
8318     sv_dec_nomg(sv);
8319 }
8320
8321 /*
8322 =for apidoc sv_dec_nomg
8323
8324 Auto-decrement of the value in the SV, doing string to numeric conversion
8325 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8326
8327 =cut
8328 */
8329
8330 void
8331 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8332 {
8333     dVAR;
8334     int flags;
8335
8336     if (!sv)
8337         return;
8338     if (SvTHINKFIRST(sv)) {
8339         if (SvIsCOW(sv) || isGV_with_GP(sv))
8340             sv_force_normal_flags(sv, 0);
8341         if (SvREADONLY(sv)) {
8342             if (IN_PERL_RUNTIME)
8343                 Perl_croak_no_modify();
8344         }
8345         if (SvROK(sv)) {
8346             IV i;
8347             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8348                 return;
8349             i = PTR2IV(SvRV(sv));
8350             sv_unref(sv);
8351             sv_setiv(sv, i);
8352         }
8353     }
8354     /* Unlike sv_inc we don't have to worry about string-never-numbers
8355        and keeping them magic. But we mustn't warn on punting */
8356     flags = SvFLAGS(sv);
8357     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8358         /* It's publicly an integer, or privately an integer-not-float */
8359 #ifdef PERL_PRESERVE_IVUV
8360       oops_its_int:
8361 #endif
8362         if (SvIsUV(sv)) {
8363             if (SvUVX(sv) == 0) {
8364                 (void)SvIOK_only(sv);
8365                 SvIV_set(sv, -1);
8366             }
8367             else {
8368                 (void)SvIOK_only_UV(sv);
8369                 SvUV_set(sv, SvUVX(sv) - 1);
8370             }   
8371         } else {
8372             if (SvIVX(sv) == IV_MIN) {
8373                 sv_setnv(sv, (NV)IV_MIN);
8374                 goto oops_its_num;
8375             }
8376             else {
8377                 (void)SvIOK_only(sv);
8378                 SvIV_set(sv, SvIVX(sv) - 1);
8379             }   
8380         }
8381         return;
8382     }
8383     if (flags & SVp_NOK) {
8384     oops_its_num:
8385         {
8386             const NV was = SvNVX(sv);
8387             if (NV_OVERFLOWS_INTEGERS_AT &&
8388                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8389                 /* diag_listed_as: Lost precision when %s %f by 1 */
8390                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8391                                "Lost precision when decrementing %" NVff " by 1",
8392                                was);
8393             }
8394             (void)SvNOK_only(sv);
8395             SvNV_set(sv, was - 1.0);
8396             return;
8397         }
8398     }
8399     if (!(flags & SVp_POK)) {
8400         if ((flags & SVTYPEMASK) < SVt_PVIV)
8401             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8402         SvIV_set(sv, -1);
8403         (void)SvIOK_only(sv);
8404         return;
8405     }
8406 #ifdef PERL_PRESERVE_IVUV
8407     {
8408         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8409         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8410             /* Need to try really hard to see if it's an integer.
8411                9.22337203685478e+18 is an integer.
8412                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8413                so $a="9.22337203685478e+18"; $a+0; $a--
8414                needs to be the same as $a="9.22337203685478e+18"; $a--
8415                or we go insane. */
8416         
8417             (void) sv_2iv(sv);
8418             if (SvIOK(sv))
8419                 goto oops_its_int;
8420
8421             /* sv_2iv *should* have made this an NV */
8422             if (flags & SVp_NOK) {
8423                 (void)SvNOK_only(sv);
8424                 SvNV_set(sv, SvNVX(sv) - 1.0);
8425                 return;
8426             }
8427             /* I don't think we can get here. Maybe I should assert this
8428                And if we do get here I suspect that sv_setnv will croak. NWC
8429                Fall through. */
8430 #if defined(USE_LONG_DOUBLE)
8431             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",
8432                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8433 #else
8434             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8435                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8436 #endif
8437         }
8438     }
8439 #endif /* PERL_PRESERVE_IVUV */
8440     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8441 }
8442
8443 /* this define is used to eliminate a chunk of duplicated but shared logic
8444  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8445  * used anywhere but here - yves
8446  */
8447 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8448     STMT_START {      \
8449         EXTEND_MORTAL(1); \
8450         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
8451     } STMT_END
8452
8453 /*
8454 =for apidoc sv_mortalcopy
8455
8456 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8457 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8458 explicit call to FREETMPS, or by an implicit call at places such as
8459 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8460
8461 =cut
8462 */
8463
8464 /* Make a string that will exist for the duration of the expression
8465  * evaluation.  Actually, it may have to last longer than that, but
8466  * hopefully we won't free it until it has been assigned to a
8467  * permanent location. */
8468
8469 SV *
8470 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8471 {
8472     dVAR;
8473     SV *sv;
8474
8475     if (flags & SV_GMAGIC)
8476         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8477     new_SV(sv);
8478     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8479     PUSH_EXTEND_MORTAL__SV_C(sv);
8480     SvTEMP_on(sv);
8481     return sv;
8482 }
8483
8484 /*
8485 =for apidoc sv_newmortal
8486
8487 Creates a new null SV which is mortal.  The reference count of the SV is
8488 set to 1.  It will be destroyed "soon", either by an explicit call to
8489 FREETMPS, or by an implicit call at places such as statement boundaries.
8490 See also C<sv_mortalcopy> and C<sv_2mortal>.
8491
8492 =cut
8493 */
8494
8495 SV *
8496 Perl_sv_newmortal(pTHX)
8497 {
8498     dVAR;
8499     SV *sv;
8500
8501     new_SV(sv);
8502     SvFLAGS(sv) = SVs_TEMP;
8503     PUSH_EXTEND_MORTAL__SV_C(sv);
8504     return sv;
8505 }
8506
8507
8508 /*
8509 =for apidoc newSVpvn_flags
8510
8511 Creates a new SV and copies a string into it.  The reference count for the
8512 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8513 string.  You are responsible for ensuring that the source string is at least
8514 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8515 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8516 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8517 returning.  If C<SVf_UTF8> is set, C<s>
8518 is considered to be in UTF-8 and the
8519 C<SVf_UTF8> flag will be set on the new SV.
8520 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8521
8522     #define newSVpvn_utf8(s, len, u)                    \
8523         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8524
8525 =cut
8526 */
8527
8528 SV *
8529 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8530 {
8531     dVAR;
8532     SV *sv;
8533
8534     /* All the flags we don't support must be zero.
8535        And we're new code so I'm going to assert this from the start.  */
8536     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8537     new_SV(sv);
8538     sv_setpvn(sv,s,len);
8539
8540     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
8541      * and do what it does ourselves here.
8542      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
8543      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8544      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
8545      * eliminate quite a few steps than it looks - Yves (explaining patch by gfx)
8546      */
8547
8548     SvFLAGS(sv) |= flags;
8549
8550     if(flags & SVs_TEMP){
8551         PUSH_EXTEND_MORTAL__SV_C(sv);
8552     }
8553
8554     return sv;
8555 }
8556
8557 /*
8558 =for apidoc sv_2mortal
8559
8560 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8561 by an explicit call to FREETMPS, or by an implicit call at places such as
8562 statement boundaries.  SvTEMP() is turned on which means that the SV's
8563 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8564 and C<sv_mortalcopy>.
8565
8566 =cut
8567 */
8568
8569 SV *
8570 Perl_sv_2mortal(pTHX_ SV *const sv)
8571 {
8572     dVAR;
8573     if (!sv)
8574         return NULL;
8575     if (SvIMMORTAL(sv))
8576         return sv;
8577     PUSH_EXTEND_MORTAL__SV_C(sv);
8578     SvTEMP_on(sv);
8579     return sv;
8580 }
8581
8582 /*
8583 =for apidoc newSVpv
8584
8585 Creates a new SV and copies a string into it.  The reference count for the
8586 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8587 strlen().  For efficiency, consider using C<newSVpvn> instead.
8588
8589 =cut
8590 */
8591
8592 SV *
8593 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8594 {
8595     dVAR;
8596     SV *sv;
8597
8598     new_SV(sv);
8599     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
8600     return sv;
8601 }
8602
8603 /*
8604 =for apidoc newSVpvn
8605
8606 Creates a new SV and copies a buffer into it, which may contain NUL characters
8607 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
8608 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
8609 are responsible for ensuring that the source buffer is at least
8610 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
8611 undefined.
8612
8613 =cut
8614 */
8615
8616 SV *
8617 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
8618 {
8619     dVAR;
8620     SV *sv;
8621
8622     new_SV(sv);
8623     sv_setpvn(sv,buffer,len);
8624     return sv;
8625 }
8626
8627 /*
8628 =for apidoc newSVhek
8629
8630 Creates a new SV from the hash key structure.  It will generate scalars that
8631 point to the shared string table where possible.  Returns a new (undefined)
8632 SV if the hek is NULL.
8633
8634 =cut
8635 */
8636
8637 SV *
8638 Perl_newSVhek(pTHX_ const HEK *const hek)
8639 {
8640     dVAR;
8641     if (!hek) {
8642         SV *sv;
8643
8644         new_SV(sv);
8645         return sv;
8646     }
8647
8648     if (HEK_LEN(hek) == HEf_SVKEY) {
8649         return newSVsv(*(SV**)HEK_KEY(hek));
8650     } else {
8651         const int flags = HEK_FLAGS(hek);
8652         if (flags & HVhek_WASUTF8) {
8653             /* Trouble :-)
8654                Andreas would like keys he put in as utf8 to come back as utf8
8655             */
8656             STRLEN utf8_len = HEK_LEN(hek);
8657             SV * const sv = newSV_type(SVt_PV);
8658             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
8659             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
8660             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
8661             SvUTF8_on (sv);
8662             return sv;
8663         } else if (flags & HVhek_UNSHARED) {
8664             /* A hash that isn't using shared hash keys has to have
8665                the flag in every key so that we know not to try to call
8666                share_hek_hek on it.  */
8667
8668             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
8669             if (HEK_UTF8(hek))
8670                 SvUTF8_on (sv);
8671             return sv;
8672         }
8673         /* This will be overwhelminly the most common case.  */
8674         {
8675             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
8676                more efficient than sharepvn().  */
8677             SV *sv;
8678
8679             new_SV(sv);
8680             sv_upgrade(sv, SVt_PV);
8681             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
8682             SvCUR_set(sv, HEK_LEN(hek));
8683             SvLEN_set(sv, 0);
8684             SvIsCOW_on(sv);
8685             SvPOK_on(sv);
8686             if (HEK_UTF8(hek))
8687                 SvUTF8_on(sv);
8688             return sv;
8689         }
8690     }
8691 }
8692
8693 /*
8694 =for apidoc newSVpvn_share
8695
8696 Creates a new SV with its SvPVX_const pointing to a shared string in the string
8697 table.  If the string does not already exist in the table, it is
8698 created first.  Turns on the SvIsCOW flag (or READONLY
8699 and FAKE in 5.16 and earlier).  If the C<hash> parameter
8700 is non-zero, that value is used; otherwise the hash is computed.
8701 The string's hash can later be retrieved from the SV
8702 with the C<SvSHARED_HASH()> macro.  The idea here is
8703 that as the string table is used for shared hash keys these strings will have
8704 SvPVX_const == HeKEY and hash lookup will avoid string compare.
8705
8706 =cut
8707 */
8708
8709 SV *
8710 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
8711 {
8712     dVAR;
8713     SV *sv;
8714     bool is_utf8 = FALSE;
8715     const char *const orig_src = src;
8716
8717     if (len < 0) {
8718         STRLEN tmplen = -len;
8719         is_utf8 = TRUE;
8720         /* See the note in hv.c:hv_fetch() --jhi */
8721         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
8722         len = tmplen;
8723     }
8724     if (!hash)
8725         PERL_HASH(hash, src, len);
8726     new_SV(sv);
8727     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
8728        changes here, update it there too.  */
8729     sv_upgrade(sv, SVt_PV);
8730     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
8731     SvCUR_set(sv, len);
8732     SvLEN_set(sv, 0);
8733     SvIsCOW_on(sv);
8734     SvPOK_on(sv);
8735     if (is_utf8)
8736         SvUTF8_on(sv);
8737     if (src != orig_src)
8738         Safefree(src);
8739     return sv;
8740 }
8741
8742 /*
8743 =for apidoc newSVpv_share
8744
8745 Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
8746 string/length pair.
8747
8748 =cut
8749 */
8750
8751 SV *
8752 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
8753 {
8754     return newSVpvn_share(src, strlen(src), hash);
8755 }
8756
8757 #if defined(PERL_IMPLICIT_CONTEXT)
8758
8759 /* pTHX_ magic can't cope with varargs, so this is a no-context
8760  * version of the main function, (which may itself be aliased to us).
8761  * Don't access this version directly.
8762  */
8763
8764 SV *
8765 Perl_newSVpvf_nocontext(const char *const pat, ...)
8766 {
8767     dTHX;
8768     SV *sv;
8769     va_list args;
8770
8771     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
8772
8773     va_start(args, pat);
8774     sv = vnewSVpvf(pat, &args);
8775     va_end(args);
8776     return sv;
8777 }
8778 #endif
8779
8780 /*
8781 =for apidoc newSVpvf
8782
8783 Creates a new SV and initializes it with the string formatted like
8784 C<sprintf>.
8785
8786 =cut
8787 */
8788
8789 SV *
8790 Perl_newSVpvf(pTHX_ const char *const pat, ...)
8791 {
8792     SV *sv;
8793     va_list args;
8794
8795     PERL_ARGS_ASSERT_NEWSVPVF;
8796
8797     va_start(args, pat);
8798     sv = vnewSVpvf(pat, &args);
8799     va_end(args);
8800     return sv;
8801 }
8802
8803 /* backend for newSVpvf() and newSVpvf_nocontext() */
8804
8805 SV *
8806 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
8807 {
8808     dVAR;
8809     SV *sv;
8810
8811     PERL_ARGS_ASSERT_VNEWSVPVF;
8812
8813     new_SV(sv);
8814     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8815     return sv;
8816 }
8817
8818 /*
8819 =for apidoc newSVnv
8820
8821 Creates a new SV and copies a floating point value into it.
8822 The reference count for the SV is set to 1.
8823
8824 =cut
8825 */
8826
8827 SV *
8828 Perl_newSVnv(pTHX_ const NV n)
8829 {
8830     dVAR;
8831     SV *sv;
8832
8833     new_SV(sv);
8834     sv_setnv(sv,n);
8835     return sv;
8836 }
8837
8838 /*
8839 =for apidoc newSViv
8840
8841 Creates a new SV and copies an integer into it.  The reference count for the
8842 SV is set to 1.
8843
8844 =cut
8845 */
8846
8847 SV *
8848 Perl_newSViv(pTHX_ const IV i)
8849 {
8850     dVAR;
8851     SV *sv;
8852
8853     new_SV(sv);
8854     sv_setiv(sv,i);
8855     return sv;
8856 }
8857
8858 /*
8859 =for apidoc newSVuv
8860
8861 Creates a new SV and copies an unsigned integer into it.
8862 The reference count for the SV is set to 1.
8863
8864 =cut
8865 */
8866
8867 SV *
8868 Perl_newSVuv(pTHX_ const UV u)
8869 {
8870     dVAR;
8871     SV *sv;
8872
8873     new_SV(sv);
8874     sv_setuv(sv,u);
8875     return sv;
8876 }
8877
8878 /*
8879 =for apidoc newSV_type
8880
8881 Creates a new SV, of the type specified.  The reference count for the new SV
8882 is set to 1.
8883
8884 =cut
8885 */
8886
8887 SV *
8888 Perl_newSV_type(pTHX_ const svtype type)
8889 {
8890     SV *sv;
8891
8892     new_SV(sv);
8893     sv_upgrade(sv, type);
8894     return sv;
8895 }
8896
8897 /*
8898 =for apidoc newRV_noinc
8899
8900 Creates an RV wrapper for an SV.  The reference count for the original
8901 SV is B<not> incremented.
8902
8903 =cut
8904 */
8905
8906 SV *
8907 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8908 {
8909     dVAR;
8910     SV *sv = newSV_type(SVt_IV);
8911
8912     PERL_ARGS_ASSERT_NEWRV_NOINC;
8913
8914     SvTEMP_off(tmpRef);
8915     SvRV_set(sv, tmpRef);
8916     SvROK_on(sv);
8917     return sv;
8918 }
8919
8920 /* newRV_inc is the official function name to use now.
8921  * newRV_inc is in fact #defined to newRV in sv.h
8922  */
8923
8924 SV *
8925 Perl_newRV(pTHX_ SV *const sv)
8926 {
8927     dVAR;
8928
8929     PERL_ARGS_ASSERT_NEWRV;
8930
8931     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8932 }
8933
8934 /*
8935 =for apidoc newSVsv
8936
8937 Creates a new SV which is an exact duplicate of the original SV.
8938 (Uses C<sv_setsv>.)
8939
8940 =cut
8941 */
8942
8943 SV *
8944 Perl_newSVsv(pTHX_ SV *const old)
8945 {
8946     dVAR;
8947     SV *sv;
8948
8949     if (!old)
8950         return NULL;
8951     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
8952         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8953         return NULL;
8954     }
8955     /* Do this here, otherwise we leak the new SV if this croaks. */
8956     SvGETMAGIC(old);
8957     new_SV(sv);
8958     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8959        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8960     sv_setsv_flags(sv, old, SV_NOSTEAL);
8961     return sv;
8962 }
8963
8964 /*
8965 =for apidoc sv_reset
8966
8967 Underlying implementation for the C<reset> Perl function.
8968 Note that the perl-level function is vaguely deprecated.
8969
8970 =cut
8971 */
8972
8973 void
8974 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
8975 {
8976     PERL_ARGS_ASSERT_SV_RESET;
8977
8978     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
8979 }
8980
8981 void
8982 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
8983 {
8984     dVAR;
8985     char todo[PERL_UCHAR_MAX+1];
8986     const char *send;
8987
8988     if (!stash)
8989         return;
8990
8991     if (!s) {           /* reset ?? searches */
8992         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8993         if (mg) {
8994             const U32 count = mg->mg_len / sizeof(PMOP**);
8995             PMOP **pmp = (PMOP**) mg->mg_ptr;
8996             PMOP *const *const end = pmp + count;
8997
8998             while (pmp < end) {
8999 #ifdef USE_ITHREADS
9000                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9001 #else
9002                 (*pmp)->op_pmflags &= ~PMf_USED;
9003 #endif
9004                 ++pmp;
9005             }
9006         }
9007         return;
9008     }
9009
9010     /* reset variables */
9011
9012     if (!HvARRAY(stash))
9013         return;
9014
9015     Zero(todo, 256, char);
9016     send = s + len;
9017     while (s < send) {
9018         I32 max;
9019         I32 i = (unsigned char)*s;
9020         if (s[1] == '-') {
9021             s += 2;
9022         }
9023         max = (unsigned char)*s++;
9024         for ( ; i <= max; i++) {
9025             todo[i] = 1;
9026         }
9027         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9028             HE *entry;
9029             for (entry = HvARRAY(stash)[i];
9030                  entry;
9031                  entry = HeNEXT(entry))
9032             {
9033                 GV *gv;
9034                 SV *sv;
9035
9036                 if (!todo[(U8)*HeKEY(entry)])
9037                     continue;
9038                 gv = MUTABLE_GV(HeVAL(entry));
9039                 sv = GvSV(gv);
9040                 if (sv) {
9041                     if (SvTHINKFIRST(sv)) {
9042                         if (!SvREADONLY(sv) && SvROK(sv))
9043                             sv_unref(sv);
9044                         /* XXX Is this continue a bug? Why should THINKFIRST
9045                            exempt us from resetting arrays and hashes?  */
9046                         continue;
9047                     }
9048                     SvOK_off(sv);
9049                     if (SvTYPE(sv) >= SVt_PV) {
9050                         SvCUR_set(sv, 0);
9051                         if (SvPVX_const(sv) != NULL)
9052                             *SvPVX(sv) = '\0';
9053                         SvTAINT(sv);
9054                     }
9055                 }
9056                 if (GvAV(gv)) {
9057                     av_clear(GvAV(gv));
9058                 }
9059                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9060 #if defined(VMS)
9061                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
9062 #else /* ! VMS */
9063                     hv_clear(GvHV(gv));
9064 #  if defined(USE_ENVIRON_ARRAY)
9065                     if (gv == PL_envgv)
9066                         my_clearenv();
9067 #  endif /* USE_ENVIRON_ARRAY */
9068 #endif /* VMS */
9069                 }
9070             }
9071         }
9072     }
9073 }
9074
9075 /*
9076 =for apidoc sv_2io
9077
9078 Using various gambits, try to get an IO from an SV: the IO slot if its a
9079 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9080 named after the PV if we're a string.
9081
9082 'Get' magic is ignored on the sv passed in, but will be called on
9083 C<SvRV(sv)> if sv is an RV.
9084
9085 =cut
9086 */
9087
9088 IO*
9089 Perl_sv_2io(pTHX_ SV *const sv)
9090 {
9091     IO* io;
9092     GV* gv;
9093
9094     PERL_ARGS_ASSERT_SV_2IO;
9095
9096     switch (SvTYPE(sv)) {
9097     case SVt_PVIO:
9098         io = MUTABLE_IO(sv);
9099         break;
9100     case SVt_PVGV:
9101     case SVt_PVLV:
9102         if (isGV_with_GP(sv)) {
9103             gv = MUTABLE_GV(sv);
9104             io = GvIO(gv);
9105             if (!io)
9106                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9107                                     HEKfARG(GvNAME_HEK(gv)));
9108             break;
9109         }
9110         /* FALL THROUGH */
9111     default:
9112         if (!SvOK(sv))
9113             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9114         if (SvROK(sv)) {
9115             SvGETMAGIC(SvRV(sv));
9116             return sv_2io(SvRV(sv));
9117         }
9118         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9119         if (gv)
9120             io = GvIO(gv);
9121         else
9122             io = 0;
9123         if (!io) {
9124             SV *newsv = sv;
9125             if (SvGMAGICAL(sv)) {
9126                 newsv = sv_newmortal();
9127                 sv_setsv_nomg(newsv, sv);
9128             }
9129             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9130         }
9131         break;
9132     }
9133     return io;
9134 }
9135
9136 /*
9137 =for apidoc sv_2cv
9138
9139 Using various gambits, try to get a CV from an SV; in addition, try if
9140 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9141 The flags in C<lref> are passed to gv_fetchsv.
9142
9143 =cut
9144 */
9145
9146 CV *
9147 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9148 {
9149     dVAR;
9150     GV *gv = NULL;
9151     CV *cv = NULL;
9152
9153     PERL_ARGS_ASSERT_SV_2CV;
9154
9155     if (!sv) {
9156         *st = NULL;
9157         *gvp = NULL;
9158         return NULL;
9159     }
9160     switch (SvTYPE(sv)) {
9161     case SVt_PVCV:
9162         *st = CvSTASH(sv);
9163         *gvp = NULL;
9164         return MUTABLE_CV(sv);
9165     case SVt_PVHV:
9166     case SVt_PVAV:
9167         *st = NULL;
9168         *gvp = NULL;
9169         return NULL;
9170     default:
9171         SvGETMAGIC(sv);
9172         if (SvROK(sv)) {
9173             if (SvAMAGIC(sv))
9174                 sv = amagic_deref_call(sv, to_cv_amg);
9175
9176             sv = SvRV(sv);
9177             if (SvTYPE(sv) == SVt_PVCV) {
9178                 cv = MUTABLE_CV(sv);
9179                 *gvp = NULL;
9180                 *st = CvSTASH(cv);
9181                 return cv;
9182             }
9183             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9184                 gv = MUTABLE_GV(sv);
9185             else
9186                 Perl_croak(aTHX_ "Not a subroutine reference");
9187         }
9188         else if (isGV_with_GP(sv)) {
9189             gv = MUTABLE_GV(sv);
9190         }
9191         else {
9192             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9193         }
9194         *gvp = gv;
9195         if (!gv) {
9196             *st = NULL;
9197             return NULL;
9198         }
9199         /* Some flags to gv_fetchsv mean don't really create the GV  */
9200         if (!isGV_with_GP(gv)) {
9201             *st = NULL;
9202             return NULL;
9203         }
9204         *st = GvESTASH(gv);
9205         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9206             /* XXX this is probably not what they think they're getting.
9207              * It has the same effect as "sub name;", i.e. just a forward
9208              * declaration! */
9209             newSTUB(gv,0);
9210         }
9211         return GvCVu(gv);
9212     }
9213 }
9214
9215 /*
9216 =for apidoc sv_true
9217
9218 Returns true if the SV has a true value by Perl's rules.
9219 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9220 instead use an in-line version.
9221
9222 =cut
9223 */
9224
9225 I32
9226 Perl_sv_true(pTHX_ SV *const sv)
9227 {
9228     if (!sv)
9229         return 0;
9230     if (SvPOK(sv)) {
9231         const XPV* const tXpv = (XPV*)SvANY(sv);
9232         if (tXpv &&
9233                 (tXpv->xpv_cur > 1 ||
9234                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9235             return 1;
9236         else
9237             return 0;
9238     }
9239     else {
9240         if (SvIOK(sv))
9241             return SvIVX(sv) != 0;
9242         else {
9243             if (SvNOK(sv))
9244                 return SvNVX(sv) != 0.0;
9245             else
9246                 return sv_2bool(sv);
9247         }
9248     }
9249 }
9250
9251 /*
9252 =for apidoc sv_pvn_force
9253
9254 Get a sensible string out of the SV somehow.
9255 A private implementation of the C<SvPV_force> macro for compilers which
9256 can't cope with complex macro expressions.  Always use the macro instead.
9257
9258 =for apidoc sv_pvn_force_flags
9259
9260 Get a sensible string out of the SV somehow.
9261 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9262 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9263 implemented in terms of this function.
9264 You normally want to use the various wrapper macros instead: see
9265 C<SvPV_force> and C<SvPV_force_nomg>
9266
9267 =cut
9268 */
9269
9270 char *
9271 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9272 {
9273     dVAR;
9274
9275     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9276
9277     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9278     if (SvTHINKFIRST(sv) && !SvROK(sv))
9279         sv_force_normal_flags(sv, 0);
9280
9281     if (SvPOK(sv)) {
9282         if (lp)
9283             *lp = SvCUR(sv);
9284     }
9285     else {
9286         char *s;
9287         STRLEN len;
9288  
9289         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
9290             const char * const ref = sv_reftype(sv,0);
9291             if (PL_op)
9292                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
9293                            ref, OP_DESC(PL_op));
9294             else
9295                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
9296         }
9297         if (SvTYPE(sv) > SVt_PVLV
9298             || isGV_with_GP(sv))
9299             /* diag_listed_as: Can't coerce %s to %s in %s */
9300             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9301                 OP_DESC(PL_op));
9302         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9303         if (!s) {
9304           s = (char *)"";
9305         }
9306         if (lp)
9307             *lp = len;
9308
9309         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9310             if (SvROK(sv))
9311                 sv_unref(sv);
9312             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9313             SvGROW(sv, len + 1);
9314             Move(s,SvPVX(sv),len,char);
9315             SvCUR_set(sv, len);
9316             SvPVX(sv)[len] = '\0';
9317         }
9318         if (!SvPOK(sv)) {
9319             SvPOK_on(sv);               /* validate pointer */
9320             SvTAINT(sv);
9321             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9322                                   PTR2UV(sv),SvPVX_const(sv)));
9323         }
9324     }
9325     (void)SvPOK_only_UTF8(sv);
9326     return SvPVX_mutable(sv);
9327 }
9328
9329 /*
9330 =for apidoc sv_pvbyten_force
9331
9332 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9333 instead.
9334
9335 =cut
9336 */
9337
9338 char *
9339 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9340 {
9341     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9342
9343     sv_pvn_force(sv,lp);
9344     sv_utf8_downgrade(sv,0);
9345     *lp = SvCUR(sv);
9346     return SvPVX(sv);
9347 }
9348
9349 /*
9350 =for apidoc sv_pvutf8n_force
9351
9352 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9353 instead.
9354
9355 =cut
9356 */
9357
9358 char *
9359 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9360 {
9361     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9362
9363     sv_pvn_force(sv,0);
9364     sv_utf8_upgrade_nomg(sv);
9365     *lp = SvCUR(sv);
9366     return SvPVX(sv);
9367 }
9368
9369 /*
9370 =for apidoc sv_reftype
9371
9372 Returns a string describing what the SV is a reference to.
9373
9374 =cut
9375 */
9376
9377 const char *
9378 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9379 {
9380     PERL_ARGS_ASSERT_SV_REFTYPE;
9381     if (ob && SvOBJECT(sv)) {
9382         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9383     }
9384     else {
9385         switch (SvTYPE(sv)) {
9386         case SVt_NULL:
9387         case SVt_IV:
9388         case SVt_NV:
9389         case SVt_PV:
9390         case SVt_PVIV:
9391         case SVt_PVNV:
9392         case SVt_PVMG:
9393                                 if (SvVOK(sv))
9394                                     return "VSTRING";
9395                                 if (SvROK(sv))
9396                                     return "REF";
9397                                 else
9398                                     return "SCALAR";
9399
9400         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9401                                 /* tied lvalues should appear to be
9402                                  * scalars for backwards compatibility */
9403                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
9404                                     ? "SCALAR" : "LVALUE");
9405         case SVt_PVAV:          return "ARRAY";
9406         case SVt_PVHV:          return "HASH";
9407         case SVt_PVCV:          return "CODE";
9408         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9409                                     ? "GLOB" : "SCALAR");
9410         case SVt_PVFM:          return "FORMAT";
9411         case SVt_PVIO:          return "IO";
9412         case SVt_BIND:          return "BIND";
9413         case SVt_REGEXP:        return "REGEXP";
9414         default:                return "UNKNOWN";
9415         }
9416     }
9417 }
9418
9419 /*
9420 =for apidoc sv_ref
9421
9422 Returns a SV describing what the SV passed in is a reference to.
9423
9424 =cut
9425 */
9426
9427 SV *
9428 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9429 {
9430     PERL_ARGS_ASSERT_SV_REF;
9431
9432     if (!dst)
9433         dst = sv_newmortal();
9434
9435     if (ob && SvOBJECT(sv)) {
9436         HvNAME_get(SvSTASH(sv))
9437                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9438                     : sv_setpvn(dst, "__ANON__", 8);
9439     }
9440     else {
9441         const char * reftype = sv_reftype(sv, 0);
9442         sv_setpv(dst, reftype);
9443     }
9444     return dst;
9445 }
9446
9447 /*
9448 =for apidoc sv_isobject
9449
9450 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9451 object.  If the SV is not an RV, or if the object is not blessed, then this
9452 will return false.
9453
9454 =cut
9455 */
9456
9457 int
9458 Perl_sv_isobject(pTHX_ SV *sv)
9459 {
9460     if (!sv)
9461         return 0;
9462     SvGETMAGIC(sv);
9463     if (!SvROK(sv))
9464         return 0;
9465     sv = SvRV(sv);
9466     if (!SvOBJECT(sv))
9467         return 0;
9468     return 1;
9469 }
9470
9471 /*
9472 =for apidoc sv_isa
9473
9474 Returns a boolean indicating whether the SV is blessed into the specified
9475 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9476 an inheritance relationship.
9477
9478 =cut
9479 */
9480
9481 int
9482 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9483 {
9484     const char *hvname;
9485
9486     PERL_ARGS_ASSERT_SV_ISA;
9487
9488     if (!sv)
9489         return 0;
9490     SvGETMAGIC(sv);
9491     if (!SvROK(sv))
9492         return 0;
9493     sv = SvRV(sv);
9494     if (!SvOBJECT(sv))
9495         return 0;
9496     hvname = HvNAME_get(SvSTASH(sv));
9497     if (!hvname)
9498         return 0;
9499
9500     return strEQ(hvname, name);
9501 }
9502
9503 /*
9504 =for apidoc newSVrv
9505
9506 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9507 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9508 SV will be blessed in the specified package.  The new SV is returned and its
9509 reference count is 1. The reference count 1 is owned by C<rv>.
9510
9511 =cut
9512 */
9513
9514 SV*
9515 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9516 {
9517     dVAR;
9518     SV *sv;
9519
9520     PERL_ARGS_ASSERT_NEWSVRV;
9521
9522     new_SV(sv);
9523
9524     SV_CHECK_THINKFIRST_COW_DROP(rv);
9525
9526     if (SvTYPE(rv) >= SVt_PVMG) {
9527         const U32 refcnt = SvREFCNT(rv);
9528         SvREFCNT(rv) = 0;
9529         sv_clear(rv);
9530         SvFLAGS(rv) = 0;
9531         SvREFCNT(rv) = refcnt;
9532
9533         sv_upgrade(rv, SVt_IV);
9534     } else if (SvROK(rv)) {
9535         SvREFCNT_dec(SvRV(rv));
9536     } else {
9537         prepare_SV_for_RV(rv);
9538     }
9539
9540     SvOK_off(rv);
9541     SvRV_set(rv, sv);
9542     SvROK_on(rv);
9543
9544     if (classname) {
9545         HV* const stash = gv_stashpv(classname, GV_ADD);
9546         (void)sv_bless(rv, stash);
9547     }
9548     return sv;
9549 }
9550
9551 /*
9552 =for apidoc sv_setref_pv
9553
9554 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9555 argument will be upgraded to an RV.  That RV will be modified to point to
9556 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9557 into the SV.  The C<classname> argument indicates the package for the
9558 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9559 will have a reference count of 1, and the RV will be returned.
9560
9561 Do not use with other Perl types such as HV, AV, SV, CV, because those
9562 objects will become corrupted by the pointer copy process.
9563
9564 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9565
9566 =cut
9567 */
9568
9569 SV*
9570 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9571 {
9572     dVAR;
9573
9574     PERL_ARGS_ASSERT_SV_SETREF_PV;
9575
9576     if (!pv) {
9577         sv_setsv(rv, &PL_sv_undef);
9578         SvSETMAGIC(rv);
9579     }
9580     else
9581         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
9582     return rv;
9583 }
9584
9585 /*
9586 =for apidoc sv_setref_iv
9587
9588 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
9589 argument will be upgraded to an RV.  That RV will be modified to point to
9590 the new SV.  The C<classname> argument indicates the package for the
9591 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9592 will have a reference count of 1, and the RV will be returned.
9593
9594 =cut
9595 */
9596
9597 SV*
9598 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
9599 {
9600     PERL_ARGS_ASSERT_SV_SETREF_IV;
9601
9602     sv_setiv(newSVrv(rv,classname), iv);
9603     return rv;
9604 }
9605
9606 /*
9607 =for apidoc sv_setref_uv
9608
9609 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
9610 argument will be upgraded to an RV.  That RV will be modified to point to
9611 the new SV.  The C<classname> argument indicates the package for the
9612 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9613 will have a reference count of 1, and the RV will be returned.
9614
9615 =cut
9616 */
9617
9618 SV*
9619 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
9620 {
9621     PERL_ARGS_ASSERT_SV_SETREF_UV;
9622
9623     sv_setuv(newSVrv(rv,classname), uv);
9624     return rv;
9625 }
9626
9627 /*
9628 =for apidoc sv_setref_nv
9629
9630 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
9631 argument will be upgraded to an RV.  That RV will be modified to point to
9632 the new SV.  The C<classname> argument indicates the package for the
9633 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9634 will have a reference count of 1, and the RV will be returned.
9635
9636 =cut
9637 */
9638
9639 SV*
9640 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
9641 {
9642     PERL_ARGS_ASSERT_SV_SETREF_NV;
9643
9644     sv_setnv(newSVrv(rv,classname), nv);
9645     return rv;
9646 }
9647
9648 /*
9649 =for apidoc sv_setref_pvn
9650
9651 Copies a string into a new SV, optionally blessing the SV.  The length of the
9652 string must be specified with C<n>.  The C<rv> argument will be upgraded to
9653 an RV.  That RV will be modified to point to the new SV.  The C<classname>
9654 argument indicates the package for the blessing.  Set C<classname> to
9655 C<NULL> to avoid the blessing.  The new SV will have a reference count
9656 of 1, and the RV will be returned.
9657
9658 Note that C<sv_setref_pv> copies the pointer while this copies the string.
9659
9660 =cut
9661 */
9662
9663 SV*
9664 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
9665                    const char *const pv, const STRLEN n)
9666 {
9667     PERL_ARGS_ASSERT_SV_SETREF_PVN;
9668
9669     sv_setpvn(newSVrv(rv,classname), pv, n);
9670     return rv;
9671 }
9672
9673 /*
9674 =for apidoc sv_bless
9675
9676 Blesses an SV into a specified package.  The SV must be an RV.  The package
9677 must be designated by its stash (see C<gv_stashpv()>).  The reference count
9678 of the SV is unaffected.
9679
9680 =cut
9681 */
9682
9683 SV*
9684 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
9685 {
9686     dVAR;
9687     SV *tmpRef;
9688
9689     PERL_ARGS_ASSERT_SV_BLESS;
9690
9691     if (!SvROK(sv))
9692         Perl_croak(aTHX_ "Can't bless non-reference value");
9693     tmpRef = SvRV(sv);
9694     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
9695         if (SvREADONLY(tmpRef) && !SvIsCOW(tmpRef))
9696             Perl_croak_no_modify();
9697         if (SvOBJECT(tmpRef)) {
9698             if (SvTYPE(tmpRef) != SVt_PVIO)
9699                 --PL_sv_objcount;
9700             SvREFCNT_dec(SvSTASH(tmpRef));
9701         }
9702     }
9703     SvOBJECT_on(tmpRef);
9704     if (SvTYPE(tmpRef) != SVt_PVIO)
9705         ++PL_sv_objcount;
9706     SvUPGRADE(tmpRef, SVt_PVMG);
9707     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
9708
9709     if(SvSMAGICAL(tmpRef))
9710         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
9711             mg_set(tmpRef);
9712
9713
9714
9715     return sv;
9716 }
9717
9718 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
9719  * as it is after unglobbing it.
9720  */
9721
9722 PERL_STATIC_INLINE void
9723 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
9724 {
9725     dVAR;
9726     void *xpvmg;
9727     HV *stash;
9728     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
9729
9730     PERL_ARGS_ASSERT_SV_UNGLOB;
9731
9732     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
9733     SvFAKE_off(sv);
9734     if (!(flags & SV_COW_DROP_PV))
9735         gv_efullname3(temp, MUTABLE_GV(sv), "*");
9736
9737     if (GvGP(sv)) {
9738         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
9739            && HvNAME_get(stash))
9740             mro_method_changed_in(stash);
9741         gp_free(MUTABLE_GV(sv));
9742     }
9743     if (GvSTASH(sv)) {
9744         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
9745         GvSTASH(sv) = NULL;
9746     }
9747     GvMULTI_off(sv);
9748     if (GvNAME_HEK(sv)) {
9749         unshare_hek(GvNAME_HEK(sv));
9750     }
9751     isGV_with_GP_off(sv);
9752
9753     if(SvTYPE(sv) == SVt_PVGV) {
9754         /* need to keep SvANY(sv) in the right arena */
9755         xpvmg = new_XPVMG();
9756         StructCopy(SvANY(sv), xpvmg, XPVMG);
9757         del_XPVGV(SvANY(sv));
9758         SvANY(sv) = xpvmg;
9759
9760         SvFLAGS(sv) &= ~SVTYPEMASK;
9761         SvFLAGS(sv) |= SVt_PVMG;
9762     }
9763
9764     /* Intentionally not calling any local SET magic, as this isn't so much a
9765        set operation as merely an internal storage change.  */
9766     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
9767     else sv_setsv_flags(sv, temp, 0);
9768
9769     if ((const GV *)sv == PL_last_in_gv)
9770         PL_last_in_gv = NULL;
9771     else if ((const GV *)sv == PL_statgv)
9772         PL_statgv = NULL;
9773 }
9774
9775 /*
9776 =for apidoc sv_unref_flags
9777
9778 Unsets the RV status of the SV, and decrements the reference count of
9779 whatever was being referenced by the RV.  This can almost be thought of
9780 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
9781 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
9782 (otherwise the decrementing is conditional on the reference count being
9783 different from one or the reference being a readonly SV).
9784 See C<SvROK_off>.
9785
9786 =cut
9787 */
9788
9789 void
9790 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
9791 {
9792     SV* const target = SvRV(ref);
9793
9794     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
9795
9796     if (SvWEAKREF(ref)) {
9797         sv_del_backref(target, ref);
9798         SvWEAKREF_off(ref);
9799         SvRV_set(ref, NULL);
9800         return;
9801     }
9802     SvRV_set(ref, NULL);
9803     SvROK_off(ref);
9804     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
9805        assigned to as BEGIN {$a = \"Foo"} will fail.  */
9806     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
9807         SvREFCNT_dec_NN(target);
9808     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
9809         sv_2mortal(target);     /* Schedule for freeing later */
9810 }
9811
9812 /*
9813 =for apidoc sv_untaint
9814
9815 Untaint an SV.  Use C<SvTAINTED_off> instead.
9816
9817 =cut
9818 */
9819
9820 void
9821 Perl_sv_untaint(pTHX_ SV *const sv)
9822 {
9823     PERL_ARGS_ASSERT_SV_UNTAINT;
9824
9825     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9826         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9827         if (mg)
9828             mg->mg_len &= ~1;
9829     }
9830 }
9831
9832 /*
9833 =for apidoc sv_tainted
9834
9835 Test an SV for taintedness.  Use C<SvTAINTED> instead.
9836
9837 =cut
9838 */
9839
9840 bool
9841 Perl_sv_tainted(pTHX_ SV *const sv)
9842 {
9843     PERL_ARGS_ASSERT_SV_TAINTED;
9844
9845     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
9846         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
9847         if (mg && (mg->mg_len & 1) )
9848             return TRUE;
9849     }
9850     return FALSE;
9851 }
9852
9853 /*
9854 =for apidoc sv_setpviv
9855
9856 Copies an integer into the given SV, also updating its string value.
9857 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
9858
9859 =cut
9860 */
9861
9862 void
9863 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
9864 {
9865     char buf[TYPE_CHARS(UV)];
9866     char *ebuf;
9867     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
9868
9869     PERL_ARGS_ASSERT_SV_SETPVIV;
9870
9871     sv_setpvn(sv, ptr, ebuf - ptr);
9872 }
9873
9874 /*
9875 =for apidoc sv_setpviv_mg
9876
9877 Like C<sv_setpviv>, but also handles 'set' magic.
9878
9879 =cut
9880 */
9881
9882 void
9883 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
9884 {
9885     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
9886
9887     sv_setpviv(sv, iv);
9888     SvSETMAGIC(sv);
9889 }
9890
9891 #if defined(PERL_IMPLICIT_CONTEXT)
9892
9893 /* pTHX_ magic can't cope with varargs, so this is a no-context
9894  * version of the main function, (which may itself be aliased to us).
9895  * Don't access this version directly.
9896  */
9897
9898 void
9899 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
9900 {
9901     dTHX;
9902     va_list args;
9903
9904     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
9905
9906     va_start(args, pat);
9907     sv_vsetpvf(sv, pat, &args);
9908     va_end(args);
9909 }
9910
9911 /* pTHX_ magic can't cope with varargs, so this is a no-context
9912  * version of the main function, (which may itself be aliased to us).
9913  * Don't access this version directly.
9914  */
9915
9916 void
9917 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9918 {
9919     dTHX;
9920     va_list args;
9921
9922     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9923
9924     va_start(args, pat);
9925     sv_vsetpvf_mg(sv, pat, &args);
9926     va_end(args);
9927 }
9928 #endif
9929
9930 /*
9931 =for apidoc sv_setpvf
9932
9933 Works like C<sv_catpvf> but copies the text into the SV instead of
9934 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9935
9936 =cut
9937 */
9938
9939 void
9940 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9941 {
9942     va_list args;
9943
9944     PERL_ARGS_ASSERT_SV_SETPVF;
9945
9946     va_start(args, pat);
9947     sv_vsetpvf(sv, pat, &args);
9948     va_end(args);
9949 }
9950
9951 /*
9952 =for apidoc sv_vsetpvf
9953
9954 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9955 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9956
9957 Usually used via its frontend C<sv_setpvf>.
9958
9959 =cut
9960 */
9961
9962 void
9963 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9964 {
9965     PERL_ARGS_ASSERT_SV_VSETPVF;
9966
9967     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9968 }
9969
9970 /*
9971 =for apidoc sv_setpvf_mg
9972
9973 Like C<sv_setpvf>, but also handles 'set' magic.
9974
9975 =cut
9976 */
9977
9978 void
9979 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9980 {
9981     va_list args;
9982
9983     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9984
9985     va_start(args, pat);
9986     sv_vsetpvf_mg(sv, pat, &args);
9987     va_end(args);
9988 }
9989
9990 /*
9991 =for apidoc sv_vsetpvf_mg
9992
9993 Like C<sv_vsetpvf>, but also handles 'set' magic.
9994
9995 Usually used via its frontend C<sv_setpvf_mg>.
9996
9997 =cut
9998 */
9999
10000 void
10001 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10002 {
10003     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10004
10005     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10006     SvSETMAGIC(sv);
10007 }
10008
10009 #if defined(PERL_IMPLICIT_CONTEXT)
10010
10011 /* pTHX_ magic can't cope with varargs, so this is a no-context
10012  * version of the main function, (which may itself be aliased to us).
10013  * Don't access this version directly.
10014  */
10015
10016 void
10017 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10018 {
10019     dTHX;
10020     va_list args;
10021
10022     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10023
10024     va_start(args, pat);
10025     sv_vcatpvf(sv, pat, &args);
10026     va_end(args);
10027 }
10028
10029 /* pTHX_ magic can't cope with varargs, so this is a no-context
10030  * version of the main function, (which may itself be aliased to us).
10031  * Don't access this version directly.
10032  */
10033
10034 void
10035 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10036 {
10037     dTHX;
10038     va_list args;
10039
10040     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10041
10042     va_start(args, pat);
10043     sv_vcatpvf_mg(sv, pat, &args);
10044     va_end(args);
10045 }
10046 #endif
10047
10048 /*
10049 =for apidoc sv_catpvf
10050
10051 Processes its arguments like C<sprintf> and appends the formatted
10052 output to an SV.  If the appended data contains "wide" characters
10053 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10054 and characters >255 formatted with %c), the original SV might get
10055 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10056 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10057 valid UTF-8; if the original SV was bytes, the pattern should be too.
10058
10059 =cut */
10060
10061 void
10062 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10063 {
10064     va_list args;
10065
10066     PERL_ARGS_ASSERT_SV_CATPVF;
10067
10068     va_start(args, pat);
10069     sv_vcatpvf(sv, pat, &args);
10070     va_end(args);
10071 }
10072
10073 /*
10074 =for apidoc sv_vcatpvf
10075
10076 Processes its arguments like C<vsprintf> and appends the formatted output
10077 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10078
10079 Usually used via its frontend C<sv_catpvf>.
10080
10081 =cut
10082 */
10083
10084 void
10085 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10086 {
10087     PERL_ARGS_ASSERT_SV_VCATPVF;
10088
10089     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10090 }
10091
10092 /*
10093 =for apidoc sv_catpvf_mg
10094
10095 Like C<sv_catpvf>, but also handles 'set' magic.
10096
10097 =cut
10098 */
10099
10100 void
10101 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10102 {
10103     va_list args;
10104
10105     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10106
10107     va_start(args, pat);
10108     sv_vcatpvf_mg(sv, pat, &args);
10109     va_end(args);
10110 }
10111
10112 /*
10113 =for apidoc sv_vcatpvf_mg
10114
10115 Like C<sv_vcatpvf>, but also handles 'set' magic.
10116
10117 Usually used via its frontend C<sv_catpvf_mg>.
10118
10119 =cut
10120 */
10121
10122 void
10123 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10124 {
10125     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10126
10127     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10128     SvSETMAGIC(sv);
10129 }
10130
10131 /*
10132 =for apidoc sv_vsetpvfn
10133
10134 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10135 appending it.
10136
10137 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10138
10139 =cut
10140 */
10141
10142 void
10143 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10144                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10145 {
10146     PERL_ARGS_ASSERT_SV_VSETPVFN;
10147
10148     sv_setpvs(sv, "");
10149     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10150 }
10151
10152
10153 /*
10154  * Warn of missing argument to sprintf, and then return a defined value
10155  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10156  */
10157 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
10158 STATIC SV*
10159 S_vcatpvfn_missing_argument(pTHX) {
10160     if (ckWARN(WARN_MISSING)) {
10161         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10162                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10163     }
10164     return &PL_sv_no;
10165 }
10166
10167
10168 STATIC I32
10169 S_expect_number(pTHX_ char **const pattern)
10170 {
10171     dVAR;
10172     I32 var = 0;
10173
10174     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10175
10176     switch (**pattern) {
10177     case '1': case '2': case '3':
10178     case '4': case '5': case '6':
10179     case '7': case '8': case '9':
10180         var = *(*pattern)++ - '0';
10181         while (isDIGIT(**pattern)) {
10182             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10183             if (tmp < var)
10184                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10185             var = tmp;
10186         }
10187     }
10188     return var;
10189 }
10190
10191 STATIC char *
10192 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10193 {
10194     const int neg = nv < 0;
10195     UV uv;
10196
10197     PERL_ARGS_ASSERT_F0CONVERT;
10198
10199     if (neg)
10200         nv = -nv;
10201     if (nv < UV_MAX) {
10202         char *p = endbuf;
10203         nv += 0.5;
10204         uv = (UV)nv;
10205         if (uv & 1 && uv == nv)
10206             uv--;                       /* Round to even */
10207         do {
10208             const unsigned dig = uv % 10;
10209             *--p = '0' + dig;
10210         } while (uv /= 10);
10211         if (neg)
10212             *--p = '-';
10213         *len = endbuf - p;
10214         return p;
10215     }
10216     return NULL;
10217 }
10218
10219
10220 /*
10221 =for apidoc sv_vcatpvfn
10222
10223 =for apidoc sv_vcatpvfn_flags
10224
10225 Processes its arguments like C<vsprintf> and appends the formatted output
10226 to an SV.  Uses an array of SVs if the C style variable argument list is
10227 missing (NULL).  When running with taint checks enabled, indicates via
10228 C<maybe_tainted> if results are untrustworthy (often due to the use of
10229 locales).
10230
10231 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10232
10233 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10234
10235 =cut
10236 */
10237
10238 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10239                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10240                         vec_utf8 = DO_UTF8(vecsv);
10241
10242 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10243
10244 void
10245 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10246                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10247 {
10248     PERL_ARGS_ASSERT_SV_VCATPVFN;
10249
10250     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10251 }
10252
10253 void
10254 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10255                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
10256                        const U32 flags)
10257 {
10258     dVAR;
10259     char *p;
10260     char *q;
10261     const char *patend;
10262     STRLEN origlen;
10263     I32 svix = 0;
10264     static const char nullstr[] = "(null)";
10265     SV *argsv = NULL;
10266     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
10267     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
10268     SV *nsv = NULL;
10269     /* Times 4: a decimal digit takes more than 3 binary digits.
10270      * NV_DIG: mantissa takes than many decimal digits.
10271      * Plus 32: Playing safe. */
10272     char ebuf[IV_DIG * 4 + NV_DIG + 32];
10273     /* large enough for "%#.#f" --chip */
10274     /* what about long double NVs? --jhi */
10275
10276     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
10277     PERL_UNUSED_ARG(maybe_tainted);
10278
10279     if (flags & SV_GMAGIC)
10280         SvGETMAGIC(sv);
10281
10282     /* no matter what, this is a string now */
10283     (void)SvPV_force_nomg(sv, origlen);
10284
10285     /* special-case "", "%s", and "%-p" (SVf - see below) */
10286     if (patlen == 0)
10287         return;
10288     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
10289         if (args) {
10290             const char * const s = va_arg(*args, char*);
10291             sv_catpv_nomg(sv, s ? s : nullstr);
10292         }
10293         else if (svix < svmax) {
10294             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
10295             SvGETMAGIC(*svargs);
10296             sv_catsv_nomg(sv, *svargs);
10297         }
10298         else
10299             S_vcatpvfn_missing_argument(aTHX);
10300         return;
10301     }
10302     if (args && patlen == 3 && pat[0] == '%' &&
10303                 pat[1] == '-' && pat[2] == 'p') {
10304         argsv = MUTABLE_SV(va_arg(*args, void*));
10305         sv_catsv_nomg(sv, argsv);
10306         return;
10307     }
10308
10309 #ifndef USE_LONG_DOUBLE
10310     /* special-case "%.<number>[gf]" */
10311     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
10312          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
10313         unsigned digits = 0;
10314         const char *pp;
10315
10316         pp = pat + 2;
10317         while (*pp >= '0' && *pp <= '9')
10318             digits = 10 * digits + (*pp++ - '0');
10319         if (pp - pat == (int)patlen - 1 && svix < svmax) {
10320             const NV nv = SvNV(*svargs);
10321             if (*pp == 'g') {
10322                 /* Add check for digits != 0 because it seems that some
10323                    gconverts are buggy in this case, and we don't yet have
10324                    a Configure test for this.  */
10325                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
10326                      /* 0, point, slack */
10327                     Gconvert(nv, (int)digits, 0, ebuf);
10328                     sv_catpv_nomg(sv, ebuf);
10329                     if (*ebuf)  /* May return an empty string for digits==0 */
10330                         return;
10331                 }
10332             } else if (!digits) {
10333                 STRLEN l;
10334
10335                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
10336                     sv_catpvn_nomg(sv, p, l);
10337                     return;
10338                 }
10339             }
10340         }
10341     }
10342 #endif /* !USE_LONG_DOUBLE */
10343
10344     if (!args && svix < svmax && DO_UTF8(*svargs))
10345         has_utf8 = TRUE;
10346
10347     patend = (char*)pat + patlen;
10348     for (p = (char*)pat; p < patend; p = q) {
10349         bool alt = FALSE;
10350         bool left = FALSE;
10351         bool vectorize = FALSE;
10352         bool vectorarg = FALSE;
10353         bool vec_utf8 = FALSE;
10354         char fill = ' ';
10355         char plus = 0;
10356         char intsize = 0;
10357         STRLEN width = 0;
10358         STRLEN zeros = 0;
10359         bool has_precis = FALSE;
10360         STRLEN precis = 0;
10361         const I32 osvix = svix;
10362         bool is_utf8 = FALSE;  /* is this item utf8?   */
10363 #ifdef HAS_LDBL_SPRINTF_BUG
10364         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10365            with sfio - Allen <allens@cpan.org> */
10366         bool fix_ldbl_sprintf_bug = FALSE;
10367 #endif
10368
10369         char esignbuf[4];
10370         U8 utf8buf[UTF8_MAXBYTES+1];
10371         STRLEN esignlen = 0;
10372
10373         const char *eptr = NULL;
10374         const char *fmtstart;
10375         STRLEN elen = 0;
10376         SV *vecsv = NULL;
10377         const U8 *vecstr = NULL;
10378         STRLEN veclen = 0;
10379         char c = 0;
10380         int i;
10381         unsigned base = 0;
10382         IV iv = 0;
10383         UV uv = 0;
10384         /* we need a long double target in case HAS_LONG_DOUBLE but
10385            not USE_LONG_DOUBLE
10386         */
10387 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
10388         long double nv;
10389 #else
10390         NV nv;
10391 #endif
10392         STRLEN have;
10393         STRLEN need;
10394         STRLEN gap;
10395         const char *dotstr = ".";
10396         STRLEN dotstrlen = 1;
10397         I32 efix = 0; /* explicit format parameter index */
10398         I32 ewix = 0; /* explicit width index */
10399         I32 epix = 0; /* explicit precision index */
10400         I32 evix = 0; /* explicit vector index */
10401         bool asterisk = FALSE;
10402
10403         /* echo everything up to the next format specification */
10404         for (q = p; q < patend && *q != '%'; ++q) ;
10405         if (q > p) {
10406             if (has_utf8 && !pat_utf8)
10407                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
10408             else
10409                 sv_catpvn_nomg(sv, p, q - p);
10410             p = q;
10411         }
10412         if (q++ >= patend)
10413             break;
10414
10415         fmtstart = q;
10416
10417 /*
10418     We allow format specification elements in this order:
10419         \d+\$              explicit format parameter index
10420         [-+ 0#]+           flags
10421         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
10422         0                  flag (as above): repeated to allow "v02"     
10423         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
10424         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
10425         [hlqLV]            size
10426     [%bcdefginopsuxDFOUX] format (mandatory)
10427 */
10428
10429         if (args) {
10430 /*  
10431         As of perl5.9.3, printf format checking is on by default.
10432         Internally, perl uses %p formats to provide an escape to
10433         some extended formatting.  This block deals with those
10434         extensions: if it does not match, (char*)q is reset and
10435         the normal format processing code is used.
10436
10437         Currently defined extensions are:
10438                 %p              include pointer address (standard)      
10439                 %-p     (SVf)   include an SV (previously %_)
10440                 %-<num>p        include an SV with precision <num>      
10441                 %2p             include a HEK
10442                 %3p             include a HEK with precision of 256
10443                 %<num>p         (where num != 2 or 3) reserved for future
10444                                 extensions
10445
10446         Robin Barker 2005-07-14 (but modified since)
10447
10448                 %1p     (VDf)   removed.  RMB 2007-10-19
10449 */
10450             char* r = q; 
10451             bool sv = FALSE;    
10452             STRLEN n = 0;
10453             if (*q == '-')
10454                 sv = *q++;
10455             n = expect_number(&q);
10456             if (*q++ == 'p') {
10457                 if (sv) {                       /* SVf */
10458                     if (n) {
10459                         precis = n;
10460                         has_precis = TRUE;
10461                     }
10462                     argsv = MUTABLE_SV(va_arg(*args, void*));
10463                     eptr = SvPV_const(argsv, elen);
10464                     if (DO_UTF8(argsv))
10465                         is_utf8 = TRUE;
10466                     goto string;
10467                 }
10468                 else if (n==2 || n==3) {        /* HEKf */
10469                     HEK * const hek = va_arg(*args, HEK *);
10470                     eptr = HEK_KEY(hek);
10471                     elen = HEK_LEN(hek);
10472                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
10473                     if (n==3) precis = 256, has_precis = TRUE;
10474                     goto string;
10475                 }
10476                 else if (n) {
10477                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
10478                                      "internal %%<num>p might conflict with future printf extensions");
10479                 }
10480             }
10481             q = r; 
10482         }
10483
10484         if ( (width = expect_number(&q)) ) {
10485             if (*q == '$') {
10486                 ++q;
10487                 efix = width;
10488             } else {
10489                 goto gotwidth;
10490             }
10491         }
10492
10493         /* FLAGS */
10494
10495         while (*q) {
10496             switch (*q) {
10497             case ' ':
10498             case '+':
10499                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
10500                     q++;
10501                 else
10502                     plus = *q++;
10503                 continue;
10504
10505             case '-':
10506                 left = TRUE;
10507                 q++;
10508                 continue;
10509
10510             case '0':
10511                 fill = *q++;
10512                 continue;
10513
10514             case '#':
10515                 alt = TRUE;
10516                 q++;
10517                 continue;
10518
10519             default:
10520                 break;
10521             }
10522             break;
10523         }
10524
10525       tryasterisk:
10526         if (*q == '*') {
10527             q++;
10528             if ( (ewix = expect_number(&q)) )
10529                 if (*q++ != '$')
10530                     goto unknown;
10531             asterisk = TRUE;
10532         }
10533         if (*q == 'v') {
10534             q++;
10535             if (vectorize)
10536                 goto unknown;
10537             if ((vectorarg = asterisk)) {
10538                 evix = ewix;
10539                 ewix = 0;
10540                 asterisk = FALSE;
10541             }
10542             vectorize = TRUE;
10543             goto tryasterisk;
10544         }
10545
10546         if (!asterisk)
10547         {
10548             if( *q == '0' )
10549                 fill = *q++;
10550             width = expect_number(&q);
10551         }
10552
10553         if (vectorize && vectorarg) {
10554             /* vectorizing, but not with the default "." */
10555             if (args)
10556                 vecsv = va_arg(*args, SV*);
10557             else if (evix) {
10558                 vecsv = (evix > 0 && evix <= svmax)
10559                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
10560             } else {
10561                 vecsv = svix < svmax
10562                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10563             }
10564             dotstr = SvPV_const(vecsv, dotstrlen);
10565             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
10566                bad with tied or overloaded values that return UTF8.  */
10567             if (DO_UTF8(vecsv))
10568                 is_utf8 = TRUE;
10569             else if (has_utf8) {
10570                 vecsv = sv_mortalcopy(vecsv);
10571                 sv_utf8_upgrade(vecsv);
10572                 dotstr = SvPV_const(vecsv, dotstrlen);
10573                 is_utf8 = TRUE;
10574             }               
10575         }
10576
10577         if (asterisk) {
10578             if (args)
10579                 i = va_arg(*args, int);
10580             else
10581                 i = (ewix ? ewix <= svmax : svix < svmax) ?
10582                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10583             left |= (i < 0);
10584             width = (i < 0) ? -i : i;
10585         }
10586       gotwidth:
10587
10588         /* PRECISION */
10589
10590         if (*q == '.') {
10591             q++;
10592             if (*q == '*') {
10593                 q++;
10594                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
10595                     goto unknown;
10596                 /* XXX: todo, support specified precision parameter */
10597                 if (epix)
10598                     goto unknown;
10599                 if (args)
10600                     i = va_arg(*args, int);
10601                 else
10602                     i = (ewix ? ewix <= svmax : svix < svmax)
10603                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
10604                 precis = i;
10605                 has_precis = !(i < 0);
10606             }
10607             else {
10608                 precis = 0;
10609                 while (isDIGIT(*q))
10610                     precis = precis * 10 + (*q++ - '0');
10611                 has_precis = TRUE;
10612             }
10613         }
10614
10615         if (vectorize) {
10616             if (args) {
10617                 VECTORIZE_ARGS
10618             }
10619             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
10620                 vecsv = svargs[efix ? efix-1 : svix++];
10621                 vecstr = (U8*)SvPV_const(vecsv,veclen);
10622                 vec_utf8 = DO_UTF8(vecsv);
10623
10624                 /* if this is a version object, we need to convert
10625                  * back into v-string notation and then let the
10626                  * vectorize happen normally
10627                  */
10628                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
10629                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
10630                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
10631                         "vector argument not supported with alpha versions");
10632                         goto vdblank;
10633                     }
10634                     vecsv = sv_newmortal();
10635                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
10636                                  vecsv);
10637                     vecstr = (U8*)SvPV_const(vecsv, veclen);
10638                     vec_utf8 = DO_UTF8(vecsv);
10639                 }
10640             }
10641             else {
10642               vdblank:
10643                 vecstr = (U8*)"";
10644                 veclen = 0;
10645             }
10646         }
10647
10648         /* SIZE */
10649
10650         switch (*q) {
10651 #ifdef WIN32
10652         case 'I':                       /* Ix, I32x, and I64x */
10653 #  ifdef USE_64_BIT_INT
10654             if (q[1] == '6' && q[2] == '4') {
10655                 q += 3;
10656                 intsize = 'q';
10657                 break;
10658             }
10659 #  endif
10660             if (q[1] == '3' && q[2] == '2') {
10661                 q += 3;
10662                 break;
10663             }
10664 #  ifdef USE_64_BIT_INT
10665             intsize = 'q';
10666 #  endif
10667             q++;
10668             break;
10669 #endif
10670 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10671         case 'L':                       /* Ld */
10672             /*FALLTHROUGH*/
10673 #ifdef HAS_QUAD
10674         case 'q':                       /* qd */
10675 #endif
10676             intsize = 'q';
10677             q++;
10678             break;
10679 #endif
10680         case 'l':
10681             ++q;
10682 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
10683             if (*q == 'l') {    /* lld, llf */
10684                 intsize = 'q';
10685                 ++q;
10686             }
10687             else
10688 #endif
10689                 intsize = 'l';
10690             break;
10691         case 'h':
10692             if (*++q == 'h') {  /* hhd, hhu */
10693                 intsize = 'c';
10694                 ++q;
10695             }
10696             else
10697                 intsize = 'h';
10698             break;
10699         case 'V':
10700         case 'z':
10701         case 't':
10702 #if HAS_C99
10703         case 'j':
10704 #endif
10705             intsize = *q++;
10706             break;
10707         }
10708
10709         /* CONVERSION */
10710
10711         if (*q == '%') {
10712             eptr = q++;
10713             elen = 1;
10714             if (vectorize) {
10715                 c = '%';
10716                 goto unknown;
10717             }
10718             goto string;
10719         }
10720
10721         if (!vectorize && !args) {
10722             if (efix) {
10723                 const I32 i = efix-1;
10724                 argsv = (i >= 0 && i < svmax)
10725                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
10726             } else {
10727                 argsv = (svix >= 0 && svix < svmax)
10728                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
10729             }
10730         }
10731
10732         switch (c = *q++) {
10733
10734             /* STRINGS */
10735
10736         case 'c':
10737             if (vectorize)
10738                 goto unknown;
10739             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
10740             if ((uv > 255 ||
10741                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
10742                 && !IN_BYTES) {
10743                 eptr = (char*)utf8buf;
10744                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
10745                 is_utf8 = TRUE;
10746             }
10747             else {
10748                 c = (char)uv;
10749                 eptr = &c;
10750                 elen = 1;
10751             }
10752             goto string;
10753
10754         case 's':
10755             if (vectorize)
10756                 goto unknown;
10757             if (args) {
10758                 eptr = va_arg(*args, char*);
10759                 if (eptr)
10760                     elen = strlen(eptr);
10761                 else {
10762                     eptr = (char *)nullstr;
10763                     elen = sizeof nullstr - 1;
10764                 }
10765             }
10766             else {
10767                 eptr = SvPV_const(argsv, elen);
10768                 if (DO_UTF8(argsv)) {
10769                     STRLEN old_precis = precis;
10770                     if (has_precis && precis < elen) {
10771                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
10772                         STRLEN p = precis > ulen ? ulen : precis;
10773                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
10774                                                         /* sticks at end */
10775                     }
10776                     if (width) { /* fudge width (can't fudge elen) */
10777                         if (has_precis && precis < elen)
10778                             width += precis - old_precis;
10779                         else
10780                             width +=
10781                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
10782                     }
10783                     is_utf8 = TRUE;
10784                 }
10785             }
10786
10787         string:
10788             if (has_precis && precis < elen)
10789                 elen = precis;
10790             break;
10791
10792             /* INTEGERS */
10793
10794         case 'p':
10795             if (alt || vectorize)
10796                 goto unknown;
10797             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
10798             base = 16;
10799             goto integer;
10800
10801         case 'D':
10802 #ifdef IV_IS_QUAD
10803             intsize = 'q';
10804 #else
10805             intsize = 'l';
10806 #endif
10807             /*FALLTHROUGH*/
10808         case 'd':
10809         case 'i':
10810 #if vdNUMBER
10811         format_vd:
10812 #endif
10813             if (vectorize) {
10814                 STRLEN ulen;
10815                 if (!veclen)
10816                     continue;
10817                 if (vec_utf8)
10818                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10819                                         UTF8_ALLOW_ANYUV);
10820                 else {
10821                     uv = *vecstr;
10822                     ulen = 1;
10823                 }
10824                 vecstr += ulen;
10825                 veclen -= ulen;
10826                 if (plus)
10827                      esignbuf[esignlen++] = plus;
10828             }
10829             else if (args) {
10830                 switch (intsize) {
10831                 case 'c':       iv = (char)va_arg(*args, int); break;
10832                 case 'h':       iv = (short)va_arg(*args, int); break;
10833                 case 'l':       iv = va_arg(*args, long); break;
10834                 case 'V':       iv = va_arg(*args, IV); break;
10835                 case 'z':       iv = va_arg(*args, SSize_t); break;
10836                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
10837                 default:        iv = va_arg(*args, int); break;
10838 #if HAS_C99
10839                 case 'j':       iv = va_arg(*args, intmax_t); break;
10840 #endif
10841                 case 'q':
10842 #ifdef HAS_QUAD
10843                                 iv = va_arg(*args, Quad_t); break;
10844 #else
10845                                 goto unknown;
10846 #endif
10847                 }
10848             }
10849             else {
10850                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
10851                 switch (intsize) {
10852                 case 'c':       iv = (char)tiv; break;
10853                 case 'h':       iv = (short)tiv; break;
10854                 case 'l':       iv = (long)tiv; break;
10855                 case 'V':
10856                 default:        iv = tiv; break;
10857                 case 'q':
10858 #ifdef HAS_QUAD
10859                                 iv = (Quad_t)tiv; break;
10860 #else
10861                                 goto unknown;
10862 #endif
10863                 }
10864             }
10865             if ( !vectorize )   /* we already set uv above */
10866             {
10867                 if (iv >= 0) {
10868                     uv = iv;
10869                     if (plus)
10870                         esignbuf[esignlen++] = plus;
10871                 }
10872                 else {
10873                     uv = -iv;
10874                     esignbuf[esignlen++] = '-';
10875                 }
10876             }
10877             base = 10;
10878             goto integer;
10879
10880         case 'U':
10881 #ifdef IV_IS_QUAD
10882             intsize = 'q';
10883 #else
10884             intsize = 'l';
10885 #endif
10886             /*FALLTHROUGH*/
10887         case 'u':
10888             base = 10;
10889             goto uns_integer;
10890
10891         case 'B':
10892         case 'b':
10893             base = 2;
10894             goto uns_integer;
10895
10896         case 'O':
10897 #ifdef IV_IS_QUAD
10898             intsize = 'q';
10899 #else
10900             intsize = 'l';
10901 #endif
10902             /*FALLTHROUGH*/
10903         case 'o':
10904             base = 8;
10905             goto uns_integer;
10906
10907         case 'X':
10908         case 'x':
10909             base = 16;
10910
10911         uns_integer:
10912             if (vectorize) {
10913                 STRLEN ulen;
10914         vector:
10915                 if (!veclen)
10916                     continue;
10917                 if (vec_utf8)
10918                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
10919                                         UTF8_ALLOW_ANYUV);
10920                 else {
10921                     uv = *vecstr;
10922                     ulen = 1;
10923                 }
10924                 vecstr += ulen;
10925                 veclen -= ulen;
10926             }
10927             else if (args) {
10928                 switch (intsize) {
10929                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
10930                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
10931                 case 'l':  uv = va_arg(*args, unsigned long); break;
10932                 case 'V':  uv = va_arg(*args, UV); break;
10933                 case 'z':  uv = va_arg(*args, Size_t); break;
10934                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
10935 #if HAS_C99
10936                 case 'j':  uv = va_arg(*args, uintmax_t); break;
10937 #endif
10938                 default:   uv = va_arg(*args, unsigned); break;
10939                 case 'q':
10940 #ifdef HAS_QUAD
10941                            uv = va_arg(*args, Uquad_t); break;
10942 #else
10943                            goto unknown;
10944 #endif
10945                 }
10946             }
10947             else {
10948                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
10949                 switch (intsize) {
10950                 case 'c':       uv = (unsigned char)tuv; break;
10951                 case 'h':       uv = (unsigned short)tuv; break;
10952                 case 'l':       uv = (unsigned long)tuv; break;
10953                 case 'V':
10954                 default:        uv = tuv; break;
10955                 case 'q':
10956 #ifdef HAS_QUAD
10957                                 uv = (Uquad_t)tuv; break;
10958 #else
10959                                 goto unknown;
10960 #endif
10961                 }
10962             }
10963
10964         integer:
10965             {
10966                 char *ptr = ebuf + sizeof ebuf;
10967                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10968                 zeros = 0;
10969
10970                 switch (base) {
10971                     unsigned dig;
10972                 case 16:
10973                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10974                     do {
10975                         dig = uv & 15;
10976                         *--ptr = p[dig];
10977                     } while (uv >>= 4);
10978                     if (tempalt) {
10979                         esignbuf[esignlen++] = '0';
10980                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10981                     }
10982                     break;
10983                 case 8:
10984                     do {
10985                         dig = uv & 7;
10986                         *--ptr = '0' + dig;
10987                     } while (uv >>= 3);
10988                     if (alt && *ptr != '0')
10989                         *--ptr = '0';
10990                     break;
10991                 case 2:
10992                     do {
10993                         dig = uv & 1;
10994                         *--ptr = '0' + dig;
10995                     } while (uv >>= 1);
10996                     if (tempalt) {
10997                         esignbuf[esignlen++] = '0';
10998                         esignbuf[esignlen++] = c;
10999                     }
11000                     break;
11001                 default:                /* it had better be ten or less */
11002                     do {
11003                         dig = uv % base;
11004                         *--ptr = '0' + dig;
11005                     } while (uv /= base);
11006                     break;
11007                 }
11008                 elen = (ebuf + sizeof ebuf) - ptr;
11009                 eptr = ptr;
11010                 if (has_precis) {
11011                     if (precis > elen)
11012                         zeros = precis - elen;
11013                     else if (precis == 0 && elen == 1 && *eptr == '0'
11014                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11015                         elen = 0;
11016
11017                 /* a precision nullifies the 0 flag. */
11018                     if (fill == '0')
11019                         fill = ' ';
11020                 }
11021             }
11022             break;
11023
11024             /* FLOATING POINT */
11025
11026         case 'F':
11027             c = 'f';            /* maybe %F isn't supported here */
11028             /*FALLTHROUGH*/
11029         case 'e': case 'E':
11030         case 'f':
11031         case 'g': case 'G':
11032             if (vectorize)
11033                 goto unknown;
11034
11035             /* This is evil, but floating point is even more evil */
11036
11037             /* for SV-style calling, we can only get NV
11038                for C-style calling, we assume %f is double;
11039                for simplicity we allow any of %Lf, %llf, %qf for long double
11040             */
11041             switch (intsize) {
11042             case 'V':
11043 #if defined(USE_LONG_DOUBLE)
11044                 intsize = 'q';
11045 #endif
11046                 break;
11047 /* [perl #20339] - we should accept and ignore %lf rather than die */
11048             case 'l':
11049                 /*FALLTHROUGH*/
11050             default:
11051 #if defined(USE_LONG_DOUBLE)
11052                 intsize = args ? 0 : 'q';
11053 #endif
11054                 break;
11055             case 'q':
11056 #if defined(HAS_LONG_DOUBLE)
11057                 break;
11058 #else
11059                 /*FALLTHROUGH*/
11060 #endif
11061             case 'c':
11062             case 'h':
11063             case 'z':
11064             case 't':
11065             case 'j':
11066                 goto unknown;
11067             }
11068
11069             /* now we need (long double) if intsize == 'q', else (double) */
11070             nv = (args) ?
11071 #if LONG_DOUBLESIZE > DOUBLESIZE
11072                 intsize == 'q' ?
11073                     va_arg(*args, long double) :
11074                     va_arg(*args, double)
11075 #else
11076                     va_arg(*args, double)
11077 #endif
11078                 : SvNV(argsv);
11079
11080             need = 0;
11081             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
11082                else. frexp() has some unspecified behaviour for those three */
11083             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
11084                 i = PERL_INT_MIN;
11085                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
11086                    will cast our (long double) to (double) */
11087                 (void)Perl_frexp(nv, &i);
11088                 if (i == PERL_INT_MIN)
11089                     Perl_die(aTHX_ "panic: frexp");
11090                 if (i > 0)
11091                     need = BIT_DIGITS(i);
11092             }
11093             need += has_precis ? precis : 6; /* known default */
11094
11095             if (need < width)
11096                 need = width;
11097
11098 #ifdef HAS_LDBL_SPRINTF_BUG
11099             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11100                with sfio - Allen <allens@cpan.org> */
11101
11102 #  ifdef DBL_MAX
11103 #    define MY_DBL_MAX DBL_MAX
11104 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
11105 #    if DOUBLESIZE >= 8
11106 #      define MY_DBL_MAX 1.7976931348623157E+308L
11107 #    else
11108 #      define MY_DBL_MAX 3.40282347E+38L
11109 #    endif
11110 #  endif
11111
11112 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
11113 #    define MY_DBL_MAX_BUG 1L
11114 #  else
11115 #    define MY_DBL_MAX_BUG MY_DBL_MAX
11116 #  endif
11117
11118 #  ifdef DBL_MIN
11119 #    define MY_DBL_MIN DBL_MIN
11120 #  else  /* XXX guessing! -Allen */
11121 #    if DOUBLESIZE >= 8
11122 #      define MY_DBL_MIN 2.2250738585072014E-308L
11123 #    else
11124 #      define MY_DBL_MIN 1.17549435E-38L
11125 #    endif
11126 #  endif
11127
11128             if ((intsize == 'q') && (c == 'f') &&
11129                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
11130                 (need < DBL_DIG)) {
11131                 /* it's going to be short enough that
11132                  * long double precision is not needed */
11133
11134                 if ((nv <= 0L) && (nv >= -0L))
11135                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
11136                 else {
11137                     /* would use Perl_fp_class as a double-check but not
11138                      * functional on IRIX - see perl.h comments */
11139
11140                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
11141                         /* It's within the range that a double can represent */
11142 #if defined(DBL_MAX) && !defined(DBL_MIN)
11143                         if ((nv >= ((long double)1/DBL_MAX)) ||
11144                             (nv <= (-(long double)1/DBL_MAX)))
11145 #endif
11146                         fix_ldbl_sprintf_bug = TRUE;
11147                     }
11148                 }
11149                 if (fix_ldbl_sprintf_bug == TRUE) {
11150                     double temp;
11151
11152                     intsize = 0;
11153                     temp = (double)nv;
11154                     nv = (NV)temp;
11155                 }
11156             }
11157
11158 #  undef MY_DBL_MAX
11159 #  undef MY_DBL_MAX_BUG
11160 #  undef MY_DBL_MIN
11161
11162 #endif /* HAS_LDBL_SPRINTF_BUG */
11163
11164             need += 20; /* fudge factor */
11165             if (PL_efloatsize < need) {
11166                 Safefree(PL_efloatbuf);
11167                 PL_efloatsize = need + 20; /* more fudge */
11168                 Newx(PL_efloatbuf, PL_efloatsize, char);
11169                 PL_efloatbuf[0] = '\0';
11170             }
11171
11172             if ( !(width || left || plus || alt) && fill != '0'
11173                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
11174                 /* See earlier comment about buggy Gconvert when digits,
11175                    aka precis is 0  */
11176                 if ( c == 'g' && precis) {
11177                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
11178                     /* May return an empty string for digits==0 */
11179                     if (*PL_efloatbuf) {
11180                         elen = strlen(PL_efloatbuf);
11181                         goto float_converted;
11182                     }
11183                 } else if ( c == 'f' && !precis) {
11184                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
11185                         break;
11186                 }
11187             }
11188             {
11189                 char *ptr = ebuf + sizeof ebuf;
11190                 *--ptr = '\0';
11191                 *--ptr = c;
11192                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
11193 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
11194                 if (intsize == 'q') {
11195                     /* Copy the one or more characters in a long double
11196                      * format before the 'base' ([efgEFG]) character to
11197                      * the format string. */
11198                     static char const prifldbl[] = PERL_PRIfldbl;
11199                     char const *p = prifldbl + sizeof(prifldbl) - 3;
11200                     while (p >= prifldbl) { *--ptr = *p--; }
11201                 }
11202 #endif
11203                 if (has_precis) {
11204                     base = precis;
11205                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11206                     *--ptr = '.';
11207                 }
11208                 if (width) {
11209                     base = width;
11210                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
11211                 }
11212                 if (fill == '0')
11213                     *--ptr = fill;
11214                 if (left)
11215                     *--ptr = '-';
11216                 if (plus)
11217                     *--ptr = plus;
11218                 if (alt)
11219                     *--ptr = '#';
11220                 *--ptr = '%';
11221
11222                 /* No taint.  Otherwise we are in the strange situation
11223                  * where printf() taints but print($float) doesn't.
11224                  * --jhi */
11225 #if defined(HAS_LONG_DOUBLE)
11226                 elen = ((intsize == 'q')
11227                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
11228                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
11229 #else
11230                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
11231 #endif
11232             }
11233         float_converted:
11234             eptr = PL_efloatbuf;
11235             break;
11236
11237             /* SPECIAL */
11238
11239         case 'n':
11240             if (vectorize)
11241                 goto unknown;
11242             i = SvCUR(sv) - origlen;
11243             if (args) {
11244                 switch (intsize) {
11245                 case 'c':       *(va_arg(*args, char*)) = i; break;
11246                 case 'h':       *(va_arg(*args, short*)) = i; break;
11247                 default:        *(va_arg(*args, int*)) = i; break;
11248                 case 'l':       *(va_arg(*args, long*)) = i; break;
11249                 case 'V':       *(va_arg(*args, IV*)) = i; break;
11250                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
11251                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
11252 #if HAS_C99
11253                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
11254 #endif
11255                 case 'q':
11256 #ifdef HAS_QUAD
11257                                 *(va_arg(*args, Quad_t*)) = i; break;
11258 #else
11259                                 goto unknown;
11260 #endif
11261                 }
11262             }
11263             else
11264                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
11265             continue;   /* not "break" */
11266
11267             /* UNKNOWN */
11268
11269         default:
11270       unknown:
11271             if (!args
11272                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
11273                 && ckWARN(WARN_PRINTF))
11274             {
11275                 SV * const msg = sv_newmortal();
11276                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
11277                           (PL_op->op_type == OP_PRTF) ? "" : "s");
11278                 if (fmtstart < patend) {
11279                     const char * const fmtend = q < patend ? q : patend;
11280                     const char * f;
11281                     sv_catpvs(msg, "\"%");
11282                     for (f = fmtstart; f < fmtend; f++) {
11283                         if (isPRINT(*f)) {
11284                             sv_catpvn_nomg(msg, f, 1);
11285                         } else {
11286                             Perl_sv_catpvf(aTHX_ msg,
11287                                            "\\%03"UVof, (UV)*f & 0xFF);
11288                         }
11289                     }
11290                     sv_catpvs(msg, "\"");
11291                 } else {
11292                     sv_catpvs(msg, "end of string");
11293                 }
11294                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
11295             }
11296
11297             /* output mangled stuff ... */
11298             if (c == '\0')
11299                 --q;
11300             eptr = p;
11301             elen = q - p;
11302
11303             /* ... right here, because formatting flags should not apply */
11304             SvGROW(sv, SvCUR(sv) + elen + 1);
11305             p = SvEND(sv);
11306             Copy(eptr, p, elen, char);
11307             p += elen;
11308             *p = '\0';
11309             SvCUR_set(sv, p - SvPVX_const(sv));
11310             svix = osvix;
11311             continue;   /* not "break" */
11312         }
11313
11314         if (is_utf8 != has_utf8) {
11315             if (is_utf8) {
11316                 if (SvCUR(sv))
11317                     sv_utf8_upgrade(sv);
11318             }
11319             else {
11320                 const STRLEN old_elen = elen;
11321                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
11322                 sv_utf8_upgrade(nsv);
11323                 eptr = SvPVX_const(nsv);
11324                 elen = SvCUR(nsv);
11325
11326                 if (width) { /* fudge width (can't fudge elen) */
11327                     width += elen - old_elen;
11328                 }
11329                 is_utf8 = TRUE;
11330             }
11331         }
11332
11333         have = esignlen + zeros + elen;
11334         if (have < zeros)
11335             croak_memory_wrap();
11336
11337         need = (have > width ? have : width);
11338         gap = need - have;
11339
11340         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
11341             croak_memory_wrap();
11342         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
11343         p = SvEND(sv);
11344         if (esignlen && fill == '0') {
11345             int i;
11346             for (i = 0; i < (int)esignlen; i++)
11347                 *p++ = esignbuf[i];
11348         }
11349         if (gap && !left) {
11350             memset(p, fill, gap);
11351             p += gap;
11352         }
11353         if (esignlen && fill != '0') {
11354             int i;
11355             for (i = 0; i < (int)esignlen; i++)
11356                 *p++ = esignbuf[i];
11357         }
11358         if (zeros) {
11359             int i;
11360             for (i = zeros; i; i--)
11361                 *p++ = '0';
11362         }
11363         if (elen) {
11364             Copy(eptr, p, elen, char);
11365             p += elen;
11366         }
11367         if (gap && left) {
11368             memset(p, ' ', gap);
11369             p += gap;
11370         }
11371         if (vectorize) {
11372             if (veclen) {
11373                 Copy(dotstr, p, dotstrlen, char);
11374                 p += dotstrlen;
11375             }
11376             else
11377                 vectorize = FALSE;              /* done iterating over vecstr */
11378         }
11379         if (is_utf8)
11380             has_utf8 = TRUE;
11381         if (has_utf8)
11382             SvUTF8_on(sv);
11383         *p = '\0';
11384         SvCUR_set(sv, p - SvPVX_const(sv));
11385         if (vectorize) {
11386             esignlen = 0;
11387             goto vector;
11388         }
11389     }
11390     SvTAINT(sv);
11391 }
11392
11393 /* =========================================================================
11394
11395 =head1 Cloning an interpreter
11396
11397 All the macros and functions in this section are for the private use of
11398 the main function, perl_clone().
11399
11400 The foo_dup() functions make an exact copy of an existing foo thingy.
11401 During the course of a cloning, a hash table is used to map old addresses
11402 to new addresses.  The table is created and manipulated with the
11403 ptr_table_* functions.
11404
11405 =cut
11406
11407  * =========================================================================*/
11408
11409
11410 #if defined(USE_ITHREADS)
11411
11412 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
11413 #ifndef GpREFCNT_inc
11414 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
11415 #endif
11416
11417
11418 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
11419    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
11420    If this changes, please unmerge ss_dup.
11421    Likewise, sv_dup_inc_multiple() relies on this fact.  */
11422 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
11423 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
11424 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
11425 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
11426 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
11427 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
11428 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
11429 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
11430 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
11431 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
11432 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
11433 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
11434 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
11435
11436 /* clone a parser */
11437
11438 yy_parser *
11439 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
11440 {
11441     yy_parser *parser;
11442
11443     PERL_ARGS_ASSERT_PARSER_DUP;
11444
11445     if (!proto)
11446         return NULL;
11447
11448     /* look for it in the table first */
11449     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
11450     if (parser)
11451         return parser;
11452
11453     /* create anew and remember what it is */
11454     Newxz(parser, 1, yy_parser);
11455     ptr_table_store(PL_ptr_table, proto, parser);
11456
11457     /* XXX these not yet duped */
11458     parser->old_parser = NULL;
11459     parser->stack = NULL;
11460     parser->ps = NULL;
11461     parser->stack_size = 0;
11462     /* XXX parser->stack->state = 0; */
11463
11464     /* XXX eventually, just Copy() most of the parser struct ? */
11465
11466     parser->lex_brackets = proto->lex_brackets;
11467     parser->lex_casemods = proto->lex_casemods;
11468     parser->lex_brackstack = savepvn(proto->lex_brackstack,
11469                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
11470     parser->lex_casestack = savepvn(proto->lex_casestack,
11471                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
11472     parser->lex_defer   = proto->lex_defer;
11473     parser->lex_dojoin  = proto->lex_dojoin;
11474     parser->lex_expect  = proto->lex_expect;
11475     parser->lex_formbrack = proto->lex_formbrack;
11476     parser->lex_inpat   = proto->lex_inpat;
11477     parser->lex_inwhat  = proto->lex_inwhat;
11478     parser->lex_op      = proto->lex_op;
11479     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
11480     parser->lex_starts  = proto->lex_starts;
11481     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
11482     parser->multi_close = proto->multi_close;
11483     parser->multi_open  = proto->multi_open;
11484     parser->multi_start = proto->multi_start;
11485     parser->multi_end   = proto->multi_end;
11486     parser->preambled   = proto->preambled;
11487     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
11488     parser->linestr     = sv_dup_inc(proto->linestr, param);
11489     parser->expect      = proto->expect;
11490     parser->copline     = proto->copline;
11491     parser->last_lop_op = proto->last_lop_op;
11492     parser->lex_state   = proto->lex_state;
11493     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
11494     /* rsfp_filters entries have fake IoDIRP() */
11495     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
11496     parser->in_my       = proto->in_my;
11497     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
11498     parser->error_count = proto->error_count;
11499
11500
11501     parser->linestr     = sv_dup_inc(proto->linestr, param);
11502
11503     {
11504         char * const ols = SvPVX(proto->linestr);
11505         char * const ls  = SvPVX(parser->linestr);
11506
11507         parser->bufptr      = ls + (proto->bufptr >= ols ?
11508                                     proto->bufptr -  ols : 0);
11509         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
11510                                     proto->oldbufptr -  ols : 0);
11511         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
11512                                     proto->oldoldbufptr -  ols : 0);
11513         parser->linestart   = ls + (proto->linestart >= ols ?
11514                                     proto->linestart -  ols : 0);
11515         parser->last_uni    = ls + (proto->last_uni >= ols ?
11516                                     proto->last_uni -  ols : 0);
11517         parser->last_lop    = ls + (proto->last_lop >= ols ?
11518                                     proto->last_lop -  ols : 0);
11519
11520         parser->bufend      = ls + SvCUR(parser->linestr);
11521     }
11522
11523     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
11524
11525
11526 #ifdef PERL_MAD
11527     parser->endwhite    = proto->endwhite;
11528     parser->faketokens  = proto->faketokens;
11529     parser->lasttoke    = proto->lasttoke;
11530     parser->nextwhite   = proto->nextwhite;
11531     parser->realtokenstart = proto->realtokenstart;
11532     parser->skipwhite   = proto->skipwhite;
11533     parser->thisclose   = proto->thisclose;
11534     parser->thismad     = proto->thismad;
11535     parser->thisopen    = proto->thisopen;
11536     parser->thisstuff   = proto->thisstuff;
11537     parser->thistoken   = proto->thistoken;
11538     parser->thiswhite   = proto->thiswhite;
11539
11540     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
11541     parser->curforce    = proto->curforce;
11542 #else
11543     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
11544     Copy(proto->nexttype, parser->nexttype, 5,  I32);
11545     parser->nexttoke    = proto->nexttoke;
11546 #endif
11547
11548     /* XXX should clone saved_curcop here, but we aren't passed
11549      * proto_perl; so do it in perl_clone_using instead */
11550
11551     return parser;
11552 }
11553
11554
11555 /* duplicate a file handle */
11556
11557 PerlIO *
11558 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
11559 {
11560     PerlIO *ret;
11561
11562     PERL_ARGS_ASSERT_FP_DUP;
11563     PERL_UNUSED_ARG(type);
11564
11565     if (!fp)
11566         return (PerlIO*)NULL;
11567
11568     /* look for it in the table first */
11569     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
11570     if (ret)
11571         return ret;
11572
11573     /* create anew and remember what it is */
11574     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
11575     ptr_table_store(PL_ptr_table, fp, ret);
11576     return ret;
11577 }
11578
11579 /* duplicate a directory handle */
11580
11581 DIR *
11582 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
11583 {
11584     DIR *ret;
11585
11586 #ifdef HAS_FCHDIR
11587     DIR *pwd;
11588     const Direntry_t *dirent;
11589     char smallbuf[256];
11590     char *name = NULL;
11591     STRLEN len = 0;
11592     long pos;
11593 #endif
11594
11595     PERL_UNUSED_CONTEXT;
11596     PERL_ARGS_ASSERT_DIRP_DUP;
11597
11598     if (!dp)
11599         return (DIR*)NULL;
11600
11601     /* look for it in the table first */
11602     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
11603     if (ret)
11604         return ret;
11605
11606 #ifdef HAS_FCHDIR
11607
11608     PERL_UNUSED_ARG(param);
11609
11610     /* create anew */
11611
11612     /* open the current directory (so we can switch back) */
11613     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
11614
11615     /* chdir to our dir handle and open the present working directory */
11616     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
11617         PerlDir_close(pwd);
11618         return (DIR *)NULL;
11619     }
11620     /* Now we should have two dir handles pointing to the same dir. */
11621
11622     /* Be nice to the calling code and chdir back to where we were. */
11623     fchdir(my_dirfd(pwd)); /* If this fails, then what? */
11624
11625     /* We have no need of the pwd handle any more. */
11626     PerlDir_close(pwd);
11627
11628 #ifdef DIRNAMLEN
11629 # define d_namlen(d) (d)->d_namlen
11630 #else
11631 # define d_namlen(d) strlen((d)->d_name)
11632 #endif
11633     /* Iterate once through dp, to get the file name at the current posi-
11634        tion. Then step back. */
11635     pos = PerlDir_tell(dp);
11636     if ((dirent = PerlDir_read(dp))) {
11637         len = d_namlen(dirent);
11638         if (len <= sizeof smallbuf) name = smallbuf;
11639         else Newx(name, len, char);
11640         Move(dirent->d_name, name, len, char);
11641     }
11642     PerlDir_seek(dp, pos);
11643
11644     /* Iterate through the new dir handle, till we find a file with the
11645        right name. */
11646     if (!dirent) /* just before the end */
11647         for(;;) {
11648             pos = PerlDir_tell(ret);
11649             if (PerlDir_read(ret)) continue; /* not there yet */
11650             PerlDir_seek(ret, pos); /* step back */
11651             break;
11652         }
11653     else {
11654         const long pos0 = PerlDir_tell(ret);
11655         for(;;) {
11656             pos = PerlDir_tell(ret);
11657             if ((dirent = PerlDir_read(ret))) {
11658                 if (len == d_namlen(dirent)
11659                  && memEQ(name, dirent->d_name, len)) {
11660                     /* found it */
11661                     PerlDir_seek(ret, pos); /* step back */
11662                     break;
11663                 }
11664                 /* else we are not there yet; keep iterating */
11665             }
11666             else { /* This is not meant to happen. The best we can do is
11667                       reset the iterator to the beginning. */
11668                 PerlDir_seek(ret, pos0);
11669                 break;
11670             }
11671         }
11672     }
11673 #undef d_namlen
11674
11675     if (name && name != smallbuf)
11676         Safefree(name);
11677 #endif
11678
11679 #ifdef WIN32
11680     ret = win32_dirp_dup(dp, param);
11681 #endif
11682
11683     /* pop it in the pointer table */
11684     if (ret)
11685         ptr_table_store(PL_ptr_table, dp, ret);
11686
11687     return ret;
11688 }
11689
11690 /* duplicate a typeglob */
11691
11692 GP *
11693 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
11694 {
11695     GP *ret;
11696
11697     PERL_ARGS_ASSERT_GP_DUP;
11698
11699     if (!gp)
11700         return (GP*)NULL;
11701     /* look for it in the table first */
11702     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
11703     if (ret)
11704         return ret;
11705
11706     /* create anew and remember what it is */
11707     Newxz(ret, 1, GP);
11708     ptr_table_store(PL_ptr_table, gp, ret);
11709
11710     /* clone */
11711     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
11712        on Newxz() to do this for us.  */
11713     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
11714     ret->gp_io          = io_dup_inc(gp->gp_io, param);
11715     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
11716     ret->gp_av          = av_dup_inc(gp->gp_av, param);
11717     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
11718     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
11719     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
11720     ret->gp_cvgen       = gp->gp_cvgen;
11721     ret->gp_line        = gp->gp_line;
11722     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
11723     return ret;
11724 }
11725
11726 /* duplicate a chain of magic */
11727
11728 MAGIC *
11729 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
11730 {
11731     MAGIC *mgret = NULL;
11732     MAGIC **mgprev_p = &mgret;
11733
11734     PERL_ARGS_ASSERT_MG_DUP;
11735
11736     for (; mg; mg = mg->mg_moremagic) {
11737         MAGIC *nmg;
11738
11739         if ((param->flags & CLONEf_JOIN_IN)
11740                 && mg->mg_type == PERL_MAGIC_backref)
11741             /* when joining, we let the individual SVs add themselves to
11742              * backref as needed. */
11743             continue;
11744
11745         Newx(nmg, 1, MAGIC);
11746         *mgprev_p = nmg;
11747         mgprev_p = &(nmg->mg_moremagic);
11748
11749         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
11750            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
11751            from the original commit adding Perl_mg_dup() - revision 4538.
11752            Similarly there is the annotation "XXX random ptr?" next to the
11753            assignment to nmg->mg_ptr.  */
11754         *nmg = *mg;
11755
11756         /* FIXME for plugins
11757         if (nmg->mg_type == PERL_MAGIC_qr) {
11758             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
11759         }
11760         else
11761         */
11762         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
11763                           ? nmg->mg_type == PERL_MAGIC_backref
11764                                 /* The backref AV has its reference
11765                                  * count deliberately bumped by 1 */
11766                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
11767                                                     nmg->mg_obj, param))
11768                                 : sv_dup_inc(nmg->mg_obj, param)
11769                           : sv_dup(nmg->mg_obj, param);
11770
11771         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
11772             if (nmg->mg_len > 0) {
11773                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
11774                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
11775                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
11776                 {
11777                     AMT * const namtp = (AMT*)nmg->mg_ptr;
11778                     sv_dup_inc_multiple((SV**)(namtp->table),
11779                                         (SV**)(namtp->table), NofAMmeth, param);
11780                 }
11781             }
11782             else if (nmg->mg_len == HEf_SVKEY)
11783                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
11784         }
11785         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
11786             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
11787         }
11788     }
11789     return mgret;
11790 }
11791
11792 #endif /* USE_ITHREADS */
11793
11794 struct ptr_tbl_arena {
11795     struct ptr_tbl_arena *next;
11796     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
11797 };
11798
11799 /* create a new pointer-mapping table */
11800
11801 PTR_TBL_t *
11802 Perl_ptr_table_new(pTHX)
11803 {
11804     PTR_TBL_t *tbl;
11805     PERL_UNUSED_CONTEXT;
11806
11807     Newx(tbl, 1, PTR_TBL_t);
11808     tbl->tbl_max        = 511;
11809     tbl->tbl_items      = 0;
11810     tbl->tbl_arena      = NULL;
11811     tbl->tbl_arena_next = NULL;
11812     tbl->tbl_arena_end  = NULL;
11813     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
11814     return tbl;
11815 }
11816
11817 #define PTR_TABLE_HASH(ptr) \
11818   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
11819
11820 /* map an existing pointer using a table */
11821
11822 STATIC PTR_TBL_ENT_t *
11823 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
11824 {
11825     PTR_TBL_ENT_t *tblent;
11826     const UV hash = PTR_TABLE_HASH(sv);
11827
11828     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
11829
11830     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
11831     for (; tblent; tblent = tblent->next) {
11832         if (tblent->oldval == sv)
11833             return tblent;
11834     }
11835     return NULL;
11836 }
11837
11838 void *
11839 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
11840 {
11841     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
11842
11843     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
11844     PERL_UNUSED_CONTEXT;
11845
11846     return tblent ? tblent->newval : NULL;
11847 }
11848
11849 /* add a new entry to a pointer-mapping table */
11850
11851 void
11852 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
11853 {
11854     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
11855
11856     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
11857     PERL_UNUSED_CONTEXT;
11858
11859     if (tblent) {
11860         tblent->newval = newsv;
11861     } else {
11862         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
11863
11864         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
11865             struct ptr_tbl_arena *new_arena;
11866
11867             Newx(new_arena, 1, struct ptr_tbl_arena);
11868             new_arena->next = tbl->tbl_arena;
11869             tbl->tbl_arena = new_arena;
11870             tbl->tbl_arena_next = new_arena->array;
11871             tbl->tbl_arena_end = new_arena->array
11872                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
11873         }
11874
11875         tblent = tbl->tbl_arena_next++;
11876
11877         tblent->oldval = oldsv;
11878         tblent->newval = newsv;
11879         tblent->next = tbl->tbl_ary[entry];
11880         tbl->tbl_ary[entry] = tblent;
11881         tbl->tbl_items++;
11882         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
11883             ptr_table_split(tbl);
11884     }
11885 }
11886
11887 /* double the hash bucket size of an existing ptr table */
11888
11889 void
11890 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
11891 {
11892     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
11893     const UV oldsize = tbl->tbl_max + 1;
11894     UV newsize = oldsize * 2;
11895     UV i;
11896
11897     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
11898     PERL_UNUSED_CONTEXT;
11899
11900     Renew(ary, newsize, PTR_TBL_ENT_t*);
11901     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
11902     tbl->tbl_max = --newsize;
11903     tbl->tbl_ary = ary;
11904     for (i=0; i < oldsize; i++, ary++) {
11905         PTR_TBL_ENT_t **entp = ary;
11906         PTR_TBL_ENT_t *ent = *ary;
11907         PTR_TBL_ENT_t **curentp;
11908         if (!ent)
11909             continue;
11910         curentp = ary + oldsize;
11911         do {
11912             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
11913                 *entp = ent->next;
11914                 ent->next = *curentp;
11915                 *curentp = ent;
11916             }
11917             else
11918                 entp = &ent->next;
11919             ent = *entp;
11920         } while (ent);
11921     }
11922 }
11923
11924 /* remove all the entries from a ptr table */
11925 /* Deprecated - will be removed post 5.14 */
11926
11927 void
11928 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
11929 {
11930     if (tbl && tbl->tbl_items) {
11931         struct ptr_tbl_arena *arena = tbl->tbl_arena;
11932
11933         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
11934
11935         while (arena) {
11936             struct ptr_tbl_arena *next = arena->next;
11937
11938             Safefree(arena);
11939             arena = next;
11940         };
11941
11942         tbl->tbl_items = 0;
11943         tbl->tbl_arena = NULL;
11944         tbl->tbl_arena_next = NULL;
11945         tbl->tbl_arena_end = NULL;
11946     }
11947 }
11948
11949 /* clear and free a ptr table */
11950
11951 void
11952 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
11953 {
11954     struct ptr_tbl_arena *arena;
11955
11956     if (!tbl) {
11957         return;
11958     }
11959
11960     arena = tbl->tbl_arena;
11961
11962     while (arena) {
11963         struct ptr_tbl_arena *next = arena->next;
11964
11965         Safefree(arena);
11966         arena = next;
11967     }
11968
11969     Safefree(tbl->tbl_ary);
11970     Safefree(tbl);
11971 }
11972
11973 #if defined(USE_ITHREADS)
11974
11975 void
11976 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
11977 {
11978     PERL_ARGS_ASSERT_RVPV_DUP;
11979
11980     assert(!isREGEXP(sstr));
11981     if (SvROK(sstr)) {
11982         if (SvWEAKREF(sstr)) {
11983             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
11984             if (param->flags & CLONEf_JOIN_IN) {
11985                 /* if joining, we add any back references individually rather
11986                  * than copying the whole backref array */
11987                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
11988             }
11989         }
11990         else
11991             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
11992     }
11993     else if (SvPVX_const(sstr)) {
11994         /* Has something there */
11995         if (SvLEN(sstr)) {
11996             /* Normal PV - clone whole allocated space */
11997             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
11998             /* sstr may not be that normal, but actually copy on write.
11999                But we are a true, independent SV, so:  */
12000             SvIsCOW_off(dstr);
12001         }
12002         else {
12003             /* Special case - not normally malloced for some reason */
12004             if (isGV_with_GP(sstr)) {
12005                 /* Don't need to do anything here.  */
12006             }
12007             else if ((SvIsCOW(sstr))) {
12008                 /* A "shared" PV - clone it as "shared" PV */
12009                 SvPV_set(dstr,
12010                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
12011                                          param)));
12012             }
12013             else {
12014                 /* Some other special case - random pointer */
12015                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
12016             }
12017         }
12018     }
12019     else {
12020         /* Copy the NULL */
12021         SvPV_set(dstr, NULL);
12022     }
12023 }
12024
12025 /* duplicate a list of SVs. source and dest may point to the same memory.  */
12026 static SV **
12027 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
12028                       SSize_t items, CLONE_PARAMS *const param)
12029 {
12030     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
12031
12032     while (items-- > 0) {
12033         *dest++ = sv_dup_inc(*source++, param);
12034     }
12035
12036     return dest;
12037 }
12038
12039 /* duplicate an SV of any type (including AV, HV etc) */
12040
12041 static SV *
12042 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12043 {
12044     dVAR;
12045     SV *dstr;
12046
12047     PERL_ARGS_ASSERT_SV_DUP_COMMON;
12048
12049     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
12050 #ifdef DEBUG_LEAKING_SCALARS_ABORT
12051         abort();
12052 #endif
12053         return NULL;
12054     }
12055     /* look for it in the table first */
12056     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
12057     if (dstr)
12058         return dstr;
12059
12060     if(param->flags & CLONEf_JOIN_IN) {
12061         /** We are joining here so we don't want do clone
12062             something that is bad **/
12063         if (SvTYPE(sstr) == SVt_PVHV) {
12064             const HEK * const hvname = HvNAME_HEK(sstr);
12065             if (hvname) {
12066                 /** don't clone stashes if they already exist **/
12067                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12068                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
12069                 ptr_table_store(PL_ptr_table, sstr, dstr);
12070                 return dstr;
12071             }
12072         }
12073         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
12074             HV *stash = GvSTASH(sstr);
12075             const HEK * hvname;
12076             if (stash && (hvname = HvNAME_HEK(stash))) {
12077                 /** don't clone GVs if they already exist **/
12078                 SV **svp;
12079                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
12080                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
12081                 svp = hv_fetch(
12082                         stash, GvNAME(sstr),
12083                         GvNAMEUTF8(sstr)
12084                             ? -GvNAMELEN(sstr)
12085                             :  GvNAMELEN(sstr),
12086                         0
12087                       );
12088                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
12089                     ptr_table_store(PL_ptr_table, sstr, *svp);
12090                     return *svp;
12091                 }
12092             }
12093         }
12094     }
12095
12096     /* create anew and remember what it is */
12097     new_SV(dstr);
12098
12099 #ifdef DEBUG_LEAKING_SCALARS
12100     dstr->sv_debug_optype = sstr->sv_debug_optype;
12101     dstr->sv_debug_line = sstr->sv_debug_line;
12102     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
12103     dstr->sv_debug_parent = (SV*)sstr;
12104     FREE_SV_DEBUG_FILE(dstr);
12105     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
12106 #endif
12107
12108     ptr_table_store(PL_ptr_table, sstr, dstr);
12109
12110     /* clone */
12111     SvFLAGS(dstr)       = SvFLAGS(sstr);
12112     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
12113     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
12114
12115 #ifdef DEBUGGING
12116     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
12117         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
12118                       (void*)PL_watch_pvx, SvPVX_const(sstr));
12119 #endif
12120
12121     /* don't clone objects whose class has asked us not to */
12122     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
12123         SvFLAGS(dstr) = 0;
12124         return dstr;
12125     }
12126
12127     switch (SvTYPE(sstr)) {
12128     case SVt_NULL:
12129         SvANY(dstr)     = NULL;
12130         break;
12131     case SVt_IV:
12132         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
12133         if(SvROK(sstr)) {
12134             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12135         } else {
12136             SvIV_set(dstr, SvIVX(sstr));
12137         }
12138         break;
12139     case SVt_NV:
12140         SvANY(dstr)     = new_XNV();
12141         SvNV_set(dstr, SvNVX(sstr));
12142         break;
12143         /* case SVt_BIND: */
12144     default:
12145         {
12146             /* These are all the types that need complex bodies allocating.  */
12147             void *new_body;
12148             const svtype sv_type = SvTYPE(sstr);
12149             const struct body_details *const sv_type_details
12150                 = bodies_by_type + sv_type;
12151
12152             switch (sv_type) {
12153             default:
12154                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
12155                 break;
12156
12157             case SVt_PVGV:
12158             case SVt_PVIO:
12159             case SVt_PVFM:
12160             case SVt_PVHV:
12161             case SVt_PVAV:
12162             case SVt_PVCV:
12163             case SVt_PVLV:
12164             case SVt_REGEXP:
12165             case SVt_PVMG:
12166             case SVt_PVNV:
12167             case SVt_PVIV:
12168             case SVt_PV:
12169                 assert(sv_type_details->body_size);
12170                 if (sv_type_details->arena) {
12171                     new_body_inline(new_body, sv_type);
12172                     new_body
12173                         = (void*)((char*)new_body - sv_type_details->offset);
12174                 } else {
12175                     new_body = new_NOARENA(sv_type_details);
12176                 }
12177             }
12178             assert(new_body);
12179             SvANY(dstr) = new_body;
12180
12181 #ifndef PURIFY
12182             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
12183                  ((char*)SvANY(dstr)) + sv_type_details->offset,
12184                  sv_type_details->copy, char);
12185 #else
12186             Copy(((char*)SvANY(sstr)),
12187                  ((char*)SvANY(dstr)),
12188                  sv_type_details->body_size + sv_type_details->offset, char);
12189 #endif
12190
12191             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
12192                 && !isGV_with_GP(dstr)
12193                 && !isREGEXP(dstr)
12194                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
12195                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
12196
12197             /* The Copy above means that all the source (unduplicated) pointers
12198                are now in the destination.  We can check the flags and the
12199                pointers in either, but it's possible that there's less cache
12200                missing by always going for the destination.
12201                FIXME - instrument and check that assumption  */
12202             if (sv_type >= SVt_PVMG) {
12203                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
12204                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
12205                 } else if (SvMAGIC(dstr))
12206                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
12207                 if (SvOBJECT(dstr) && SvSTASH(dstr))
12208                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
12209                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
12210             }
12211
12212             /* The cast silences a GCC warning about unhandled types.  */
12213             switch ((int)sv_type) {
12214             case SVt_PV:
12215                 break;
12216             case SVt_PVIV:
12217                 break;
12218             case SVt_PVNV:
12219                 break;
12220             case SVt_PVMG:
12221                 break;
12222             case SVt_REGEXP:
12223               duprex:
12224                 /* FIXME for plugins */
12225                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
12226                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
12227                 break;
12228             case SVt_PVLV:
12229                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
12230                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
12231                     LvTARG(dstr) = dstr;
12232                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
12233                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
12234                 else
12235                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
12236                 if (isREGEXP(sstr)) goto duprex;
12237             case SVt_PVGV:
12238                 /* non-GP case already handled above */
12239                 if(isGV_with_GP(sstr)) {
12240                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
12241                     /* Don't call sv_add_backref here as it's going to be
12242                        created as part of the magic cloning of the symbol
12243                        table--unless this is during a join and the stash
12244                        is not actually being cloned.  */
12245                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
12246                        at the point of this comment.  */
12247                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
12248                     if (param->flags & CLONEf_JOIN_IN)
12249                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
12250                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
12251                     (void)GpREFCNT_inc(GvGP(dstr));
12252                 }
12253                 break;
12254             case SVt_PVIO:
12255                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
12256                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
12257                     /* I have no idea why fake dirp (rsfps)
12258                        should be treated differently but otherwise
12259                        we end up with leaks -- sky*/
12260                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
12261                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
12262                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
12263                 } else {
12264                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
12265                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
12266                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
12267                     if (IoDIRP(dstr)) {
12268                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
12269                     } else {
12270                         NOOP;
12271                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
12272                     }
12273                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
12274                 }
12275                 if (IoOFP(dstr) == IoIFP(sstr))
12276                     IoOFP(dstr) = IoIFP(dstr);
12277                 else
12278                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
12279                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
12280                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
12281                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
12282                 break;
12283             case SVt_PVAV:
12284                 /* avoid cloning an empty array */
12285                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
12286                     SV **dst_ary, **src_ary;
12287                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
12288
12289                     src_ary = AvARRAY((const AV *)sstr);
12290                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
12291                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
12292                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
12293                     AvALLOC((const AV *)dstr) = dst_ary;
12294                     if (AvREAL((const AV *)sstr)) {
12295                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
12296                                                       param);
12297                     }
12298                     else {
12299                         while (items-- > 0)
12300                             *dst_ary++ = sv_dup(*src_ary++, param);
12301                     }
12302                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
12303                     while (items-- > 0) {
12304                         *dst_ary++ = &PL_sv_undef;
12305                     }
12306                 }
12307                 else {
12308                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
12309                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
12310                     AvMAX(  (const AV *)dstr)   = -1;
12311                     AvFILLp((const AV *)dstr)   = -1;
12312                 }
12313                 break;
12314             case SVt_PVHV:
12315                 if (HvARRAY((const HV *)sstr)) {
12316                     STRLEN i = 0;
12317                     const bool sharekeys = !!HvSHAREKEYS(sstr);
12318                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
12319                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
12320                     char *darray;
12321                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
12322                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
12323                         char);
12324                     HvARRAY(dstr) = (HE**)darray;
12325                     while (i <= sxhv->xhv_max) {
12326                         const HE * const source = HvARRAY(sstr)[i];
12327                         HvARRAY(dstr)[i] = source
12328                             ? he_dup(source, sharekeys, param) : 0;
12329                         ++i;
12330                     }
12331                     if (SvOOK(sstr)) {
12332                         const struct xpvhv_aux * const saux = HvAUX(sstr);
12333                         struct xpvhv_aux * const daux = HvAUX(dstr);
12334                         /* This flag isn't copied.  */
12335                         SvOOK_on(dstr);
12336
12337                         if (saux->xhv_name_count) {
12338                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
12339                             const I32 count
12340                              = saux->xhv_name_count < 0
12341                                 ? -saux->xhv_name_count
12342                                 :  saux->xhv_name_count;
12343                             HEK **shekp = sname + count;
12344                             HEK **dhekp;
12345                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
12346                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
12347                             while (shekp-- > sname) {
12348                                 dhekp--;
12349                                 *dhekp = hek_dup(*shekp, param);
12350                             }
12351                         }
12352                         else {
12353                             daux->xhv_name_u.xhvnameu_name
12354                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
12355                                           param);
12356                         }
12357                         daux->xhv_name_count = saux->xhv_name_count;
12358
12359                         daux->xhv_riter = saux->xhv_riter;
12360                         daux->xhv_eiter = saux->xhv_eiter
12361                             ? he_dup(saux->xhv_eiter,
12362                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
12363                         /* backref array needs refcnt=2; see sv_add_backref */
12364                         daux->xhv_backreferences =
12365                             (param->flags & CLONEf_JOIN_IN)
12366                                 /* when joining, we let the individual GVs and
12367                                  * CVs add themselves to backref as
12368                                  * needed. This avoids pulling in stuff
12369                                  * that isn't required, and simplifies the
12370                                  * case where stashes aren't cloned back
12371                                  * if they already exist in the parent
12372                                  * thread */
12373                             ? NULL
12374                             : saux->xhv_backreferences
12375                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
12376                                     ? MUTABLE_AV(SvREFCNT_inc(
12377                                           sv_dup_inc((const SV *)
12378                                             saux->xhv_backreferences, param)))
12379                                     : MUTABLE_AV(sv_dup((const SV *)
12380                                             saux->xhv_backreferences, param))
12381                                 : 0;
12382
12383                         daux->xhv_mro_meta = saux->xhv_mro_meta
12384                             ? mro_meta_dup(saux->xhv_mro_meta, param)
12385                             : 0;
12386                         daux->xhv_super = NULL;
12387
12388                         /* Record stashes for possible cloning in Perl_clone(). */
12389                         if (HvNAME(sstr))
12390                             av_push(param->stashes, dstr);
12391                     }
12392                 }
12393                 else
12394                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
12395                 break;
12396             case SVt_PVCV:
12397                 if (!(param->flags & CLONEf_COPY_STACKS)) {
12398                     CvDEPTH(dstr) = 0;
12399                 }
12400                 /*FALLTHROUGH*/
12401             case SVt_PVFM:
12402                 /* NOTE: not refcounted */
12403                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
12404                     hv_dup(CvSTASH(dstr), param);
12405                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
12406                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
12407                 if (!CvISXSUB(dstr)) {
12408                     OP_REFCNT_LOCK;
12409                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
12410                     OP_REFCNT_UNLOCK;
12411                     CvSLABBED_off(dstr);
12412                 } else if (CvCONST(dstr)) {
12413                     CvXSUBANY(dstr).any_ptr =
12414                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
12415                 }
12416                 assert(!CvSLABBED(dstr));
12417                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
12418                 if (CvNAMED(dstr))
12419                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
12420                         share_hek_hek(CvNAME_HEK((CV *)sstr));
12421                 /* don't dup if copying back - CvGV isn't refcounted, so the
12422                  * duped GV may never be freed. A bit of a hack! DAPM */
12423                 else
12424                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
12425                     CvCVGV_RC(dstr)
12426                     ? gv_dup_inc(CvGV(sstr), param)
12427                     : (param->flags & CLONEf_JOIN_IN)
12428                         ? NULL
12429                         : gv_dup(CvGV(sstr), param);
12430
12431                 CvPADLIST(dstr) = padlist_dup(CvPADLIST(sstr), param);
12432                 CvOUTSIDE(dstr) =
12433                     CvWEAKOUTSIDE(sstr)
12434                     ? cv_dup(    CvOUTSIDE(dstr), param)
12435                     : cv_dup_inc(CvOUTSIDE(dstr), param);
12436                 break;
12437             }
12438         }
12439     }
12440
12441     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
12442         ++PL_sv_objcount;
12443
12444     return dstr;
12445  }
12446
12447 SV *
12448 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12449 {
12450     PERL_ARGS_ASSERT_SV_DUP_INC;
12451     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
12452 }
12453
12454 SV *
12455 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
12456 {
12457     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
12458     PERL_ARGS_ASSERT_SV_DUP;
12459
12460     /* Track every SV that (at least initially) had a reference count of 0.
12461        We need to do this by holding an actual reference to it in this array.
12462        If we attempt to cheat, turn AvREAL_off(), and store only pointers
12463        (akin to the stashes hash, and the perl stack), we come unstuck if
12464        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
12465        thread) is manipulated in a CLONE method, because CLONE runs before the
12466        unreferenced array is walked to find SVs still with SvREFCNT() == 0
12467        (and fix things up by giving each a reference via the temps stack).
12468        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
12469        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
12470        before the walk of unreferenced happens and a reference to that is SV
12471        added to the temps stack. At which point we have the same SV considered
12472        to be in use, and free to be re-used. Not good.
12473     */
12474     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
12475         assert(param->unreferenced);
12476         av_push(param->unreferenced, SvREFCNT_inc(dstr));
12477     }
12478
12479     return dstr;
12480 }
12481
12482 /* duplicate a context */
12483
12484 PERL_CONTEXT *
12485 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
12486 {
12487     PERL_CONTEXT *ncxs;
12488
12489     PERL_ARGS_ASSERT_CX_DUP;
12490
12491     if (!cxs)
12492         return (PERL_CONTEXT*)NULL;
12493
12494     /* look for it in the table first */
12495     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
12496     if (ncxs)
12497         return ncxs;
12498
12499     /* create anew and remember what it is */
12500     Newx(ncxs, max + 1, PERL_CONTEXT);
12501     ptr_table_store(PL_ptr_table, cxs, ncxs);
12502     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
12503
12504     while (ix >= 0) {
12505         PERL_CONTEXT * const ncx = &ncxs[ix];
12506         if (CxTYPE(ncx) == CXt_SUBST) {
12507             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
12508         }
12509         else {
12510             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
12511             switch (CxTYPE(ncx)) {
12512             case CXt_SUB:
12513                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
12514                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
12515                                            : cv_dup(ncx->blk_sub.cv,param));
12516                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
12517                                            ? av_dup_inc(ncx->blk_sub.argarray,
12518                                                         param)
12519                                            : NULL);
12520                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
12521                                                      param);
12522                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
12523                                            ncx->blk_sub.oldcomppad);
12524                 break;
12525             case CXt_EVAL:
12526                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
12527                                                       param);
12528                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
12529                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
12530                 break;
12531             case CXt_LOOP_LAZYSV:
12532                 ncx->blk_loop.state_u.lazysv.end
12533                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
12534                 /* We are taking advantage of av_dup_inc and sv_dup_inc
12535                    actually being the same function, and order equivalence of
12536                    the two unions.
12537                    We can assert the later [but only at run time :-(]  */
12538                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
12539                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
12540             case CXt_LOOP_FOR:
12541                 ncx->blk_loop.state_u.ary.ary
12542                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
12543             case CXt_LOOP_LAZYIV:
12544             case CXt_LOOP_PLAIN:
12545                 if (CxPADLOOP(ncx)) {
12546                     ncx->blk_loop.itervar_u.oldcomppad
12547                         = (PAD*)ptr_table_fetch(PL_ptr_table,
12548                                         ncx->blk_loop.itervar_u.oldcomppad);
12549                 } else {
12550                     ncx->blk_loop.itervar_u.gv
12551                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
12552                                     param);
12553                 }
12554                 break;
12555             case CXt_FORMAT:
12556                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
12557                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
12558                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
12559                                                      param);
12560                 break;
12561             case CXt_BLOCK:
12562             case CXt_NULL:
12563             case CXt_WHEN:
12564             case CXt_GIVEN:
12565                 break;
12566             }
12567         }
12568         --ix;
12569     }
12570     return ncxs;
12571 }
12572
12573 /* duplicate a stack info structure */
12574
12575 PERL_SI *
12576 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
12577 {
12578     PERL_SI *nsi;
12579
12580     PERL_ARGS_ASSERT_SI_DUP;
12581
12582     if (!si)
12583         return (PERL_SI*)NULL;
12584
12585     /* look for it in the table first */
12586     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
12587     if (nsi)
12588         return nsi;
12589
12590     /* create anew and remember what it is */
12591     Newxz(nsi, 1, PERL_SI);
12592     ptr_table_store(PL_ptr_table, si, nsi);
12593
12594     nsi->si_stack       = av_dup_inc(si->si_stack, param);
12595     nsi->si_cxix        = si->si_cxix;
12596     nsi->si_cxmax       = si->si_cxmax;
12597     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
12598     nsi->si_type        = si->si_type;
12599     nsi->si_prev        = si_dup(si->si_prev, param);
12600     nsi->si_next        = si_dup(si->si_next, param);
12601     nsi->si_markoff     = si->si_markoff;
12602
12603     return nsi;
12604 }
12605
12606 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
12607 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
12608 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
12609 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
12610 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
12611 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
12612 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
12613 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
12614 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
12615 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
12616 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
12617 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
12618 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
12619 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
12620 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
12621 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
12622
12623 /* XXXXX todo */
12624 #define pv_dup_inc(p)   SAVEPV(p)
12625 #define pv_dup(p)       SAVEPV(p)
12626 #define svp_dup_inc(p,pp)       any_dup(p,pp)
12627
12628 /* map any object to the new equivent - either something in the
12629  * ptr table, or something in the interpreter structure
12630  */
12631
12632 void *
12633 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
12634 {
12635     void *ret;
12636
12637     PERL_ARGS_ASSERT_ANY_DUP;
12638
12639     if (!v)
12640         return (void*)NULL;
12641
12642     /* look for it in the table first */
12643     ret = ptr_table_fetch(PL_ptr_table, v);
12644     if (ret)
12645         return ret;
12646
12647     /* see if it is part of the interpreter structure */
12648     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
12649         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
12650     else {
12651         ret = v;
12652     }
12653
12654     return ret;
12655 }
12656
12657 /* duplicate the save stack */
12658
12659 ANY *
12660 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
12661 {
12662     dVAR;
12663     ANY * const ss      = proto_perl->Isavestack;
12664     const I32 max       = proto_perl->Isavestack_max;
12665     I32 ix              = proto_perl->Isavestack_ix;
12666     ANY *nss;
12667     const SV *sv;
12668     const GV *gv;
12669     const AV *av;
12670     const HV *hv;
12671     void* ptr;
12672     int intval;
12673     long longval;
12674     GP *gp;
12675     IV iv;
12676     I32 i;
12677     char *c = NULL;
12678     void (*dptr) (void*);
12679     void (*dxptr) (pTHX_ void*);
12680
12681     PERL_ARGS_ASSERT_SS_DUP;
12682
12683     Newxz(nss, max, ANY);
12684
12685     while (ix > 0) {
12686         const UV uv = POPUV(ss,ix);
12687         const U8 type = (U8)uv & SAVE_MASK;
12688
12689         TOPUV(nss,ix) = uv;
12690         switch (type) {
12691         case SAVEt_CLEARSV:
12692         case SAVEt_CLEARPADRANGE:
12693             break;
12694         case SAVEt_HELEM:               /* hash element */
12695             sv = (const SV *)POPPTR(ss,ix);
12696             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12697             /* fall through */
12698         case SAVEt_ITEM:                        /* normal string */
12699         case SAVEt_GVSV:                        /* scalar slot in GV */
12700         case SAVEt_SV:                          /* scalar reference */
12701             sv = (const SV *)POPPTR(ss,ix);
12702             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12703             /* fall through */
12704         case SAVEt_FREESV:
12705         case SAVEt_MORTALIZESV:
12706             sv = (const SV *)POPPTR(ss,ix);
12707             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12708             break;
12709         case SAVEt_SHARED_PVREF:                /* char* in shared space */
12710             c = (char*)POPPTR(ss,ix);
12711             TOPPTR(nss,ix) = savesharedpv(c);
12712             ptr = POPPTR(ss,ix);
12713             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12714             break;
12715         case SAVEt_GENERIC_SVREF:               /* generic sv */
12716         case SAVEt_SVREF:                       /* scalar reference */
12717             sv = (const SV *)POPPTR(ss,ix);
12718             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12719             ptr = POPPTR(ss,ix);
12720             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12721             break;
12722         case SAVEt_GVSLOT:              /* any slot in GV */
12723             sv = (const SV *)POPPTR(ss,ix);
12724             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12725             ptr = POPPTR(ss,ix);
12726             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
12727             sv = (const SV *)POPPTR(ss,ix);
12728             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12729             break;
12730         case SAVEt_HV:                          /* hash reference */
12731         case SAVEt_AV:                          /* array reference */
12732             sv = (const SV *) POPPTR(ss,ix);
12733             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12734             /* fall through */
12735         case SAVEt_COMPPAD:
12736         case SAVEt_NSTAB:
12737             sv = (const SV *) POPPTR(ss,ix);
12738             TOPPTR(nss,ix) = sv_dup(sv, param);
12739             break;
12740         case SAVEt_INT:                         /* int reference */
12741             ptr = POPPTR(ss,ix);
12742             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12743             intval = (int)POPINT(ss,ix);
12744             TOPINT(nss,ix) = intval;
12745             break;
12746         case SAVEt_LONG:                        /* long reference */
12747             ptr = POPPTR(ss,ix);
12748             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12749             longval = (long)POPLONG(ss,ix);
12750             TOPLONG(nss,ix) = longval;
12751             break;
12752         case SAVEt_I32:                         /* I32 reference */
12753             ptr = POPPTR(ss,ix);
12754             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12755             i = POPINT(ss,ix);
12756             TOPINT(nss,ix) = i;
12757             break;
12758         case SAVEt_IV:                          /* IV reference */
12759             ptr = POPPTR(ss,ix);
12760             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12761             iv = POPIV(ss,ix);
12762             TOPIV(nss,ix) = iv;
12763             break;
12764         case SAVEt_HPTR:                        /* HV* reference */
12765         case SAVEt_APTR:                        /* AV* reference */
12766         case SAVEt_SPTR:                        /* SV* reference */
12767             ptr = POPPTR(ss,ix);
12768             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12769             sv = (const SV *)POPPTR(ss,ix);
12770             TOPPTR(nss,ix) = sv_dup(sv, param);
12771             break;
12772         case SAVEt_VPTR:                        /* random* reference */
12773             ptr = POPPTR(ss,ix);
12774             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12775             /* Fall through */
12776         case SAVEt_INT_SMALL:
12777         case SAVEt_I32_SMALL:
12778         case SAVEt_I16:                         /* I16 reference */
12779         case SAVEt_I8:                          /* I8 reference */
12780         case SAVEt_BOOL:
12781             ptr = POPPTR(ss,ix);
12782             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12783             break;
12784         case SAVEt_GENERIC_PVREF:               /* generic char* */
12785         case SAVEt_PPTR:                        /* char* reference */
12786             ptr = POPPTR(ss,ix);
12787             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12788             c = (char*)POPPTR(ss,ix);
12789             TOPPTR(nss,ix) = pv_dup(c);
12790             break;
12791         case SAVEt_GP:                          /* scalar reference */
12792             gp = (GP*)POPPTR(ss,ix);
12793             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
12794             (void)GpREFCNT_inc(gp);
12795             gv = (const GV *)POPPTR(ss,ix);
12796             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
12797             break;
12798         case SAVEt_FREEOP:
12799             ptr = POPPTR(ss,ix);
12800             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
12801                 /* these are assumed to be refcounted properly */
12802                 OP *o;
12803                 switch (((OP*)ptr)->op_type) {
12804                 case OP_LEAVESUB:
12805                 case OP_LEAVESUBLV:
12806                 case OP_LEAVEEVAL:
12807                 case OP_LEAVE:
12808                 case OP_SCOPE:
12809                 case OP_LEAVEWRITE:
12810                     TOPPTR(nss,ix) = ptr;
12811                     o = (OP*)ptr;
12812                     OP_REFCNT_LOCK;
12813                     (void) OpREFCNT_inc(o);
12814                     OP_REFCNT_UNLOCK;
12815                     break;
12816                 default:
12817                     TOPPTR(nss,ix) = NULL;
12818                     break;
12819                 }
12820             }
12821             else
12822                 TOPPTR(nss,ix) = NULL;
12823             break;
12824         case SAVEt_FREECOPHH:
12825             ptr = POPPTR(ss,ix);
12826             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
12827             break;
12828         case SAVEt_DELETE:
12829             hv = (const HV *)POPPTR(ss,ix);
12830             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12831             i = POPINT(ss,ix);
12832             TOPINT(nss,ix) = i;
12833             /* Fall through */
12834         case SAVEt_FREEPV:
12835             c = (char*)POPPTR(ss,ix);
12836             TOPPTR(nss,ix) = pv_dup_inc(c);
12837             break;
12838         case SAVEt_STACK_POS:           /* Position on Perl stack */
12839             i = POPINT(ss,ix);
12840             TOPINT(nss,ix) = i;
12841             break;
12842         case SAVEt_DESTRUCTOR:
12843             ptr = POPPTR(ss,ix);
12844             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12845             dptr = POPDPTR(ss,ix);
12846             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
12847                                         any_dup(FPTR2DPTR(void *, dptr),
12848                                                 proto_perl));
12849             break;
12850         case SAVEt_DESTRUCTOR_X:
12851             ptr = POPPTR(ss,ix);
12852             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
12853             dxptr = POPDXPTR(ss,ix);
12854             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
12855                                          any_dup(FPTR2DPTR(void *, dxptr),
12856                                                  proto_perl));
12857             break;
12858         case SAVEt_REGCONTEXT:
12859         case SAVEt_ALLOC:
12860             ix -= uv >> SAVE_TIGHT_SHIFT;
12861             break;
12862         case SAVEt_AELEM:               /* array element */
12863             sv = (const SV *)POPPTR(ss,ix);
12864             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12865             i = POPINT(ss,ix);
12866             TOPINT(nss,ix) = i;
12867             av = (const AV *)POPPTR(ss,ix);
12868             TOPPTR(nss,ix) = av_dup_inc(av, param);
12869             break;
12870         case SAVEt_OP:
12871             ptr = POPPTR(ss,ix);
12872             TOPPTR(nss,ix) = ptr;
12873             break;
12874         case SAVEt_HINTS:
12875             ptr = POPPTR(ss,ix);
12876             ptr = cophh_copy((COPHH*)ptr);
12877             TOPPTR(nss,ix) = ptr;
12878             i = POPINT(ss,ix);
12879             TOPINT(nss,ix) = i;
12880             if (i & HINT_LOCALIZE_HH) {
12881                 hv = (const HV *)POPPTR(ss,ix);
12882                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
12883             }
12884             break;
12885         case SAVEt_PADSV_AND_MORTALIZE:
12886             longval = (long)POPLONG(ss,ix);
12887             TOPLONG(nss,ix) = longval;
12888             ptr = POPPTR(ss,ix);
12889             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
12890             sv = (const SV *)POPPTR(ss,ix);
12891             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
12892             break;
12893         case SAVEt_SET_SVFLAGS:
12894             i = POPINT(ss,ix);
12895             TOPINT(nss,ix) = i;
12896             i = POPINT(ss,ix);
12897             TOPINT(nss,ix) = i;
12898             sv = (const SV *)POPPTR(ss,ix);
12899             TOPPTR(nss,ix) = sv_dup(sv, param);
12900             break;
12901         case SAVEt_RE_STATE:
12902             {
12903                 const struct re_save_state *const old_state
12904                     = (struct re_save_state *)
12905                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12906                 struct re_save_state *const new_state
12907                     = (struct re_save_state *)
12908                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
12909
12910                 Copy(old_state, new_state, 1, struct re_save_state);
12911                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
12912
12913                 new_state->re_state_bostr
12914                     = pv_dup(old_state->re_state_bostr);
12915                 new_state->re_state_regeol
12916                     = pv_dup(old_state->re_state_regeol);
12917 #ifdef PERL_ANY_COW
12918                 new_state->re_state_nrs
12919                     = sv_dup(old_state->re_state_nrs, param);
12920 #endif
12921                 new_state->re_state_reg_magic
12922                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
12923                                proto_perl);
12924                 new_state->re_state_reg_oldcurpm
12925                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
12926                               proto_perl);
12927                 new_state->re_state_reg_curpm
12928                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
12929                                proto_perl);
12930                 new_state->re_state_reg_oldsaved
12931                     = pv_dup(old_state->re_state_reg_oldsaved);
12932                 new_state->re_state_reg_poscache
12933                     = pv_dup(old_state->re_state_reg_poscache);
12934                 new_state->re_state_reg_starttry
12935                     = pv_dup(old_state->re_state_reg_starttry);
12936                 break;
12937             }
12938         case SAVEt_COMPILE_WARNINGS:
12939             ptr = POPPTR(ss,ix);
12940             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
12941             break;
12942         case SAVEt_PARSER:
12943             ptr = POPPTR(ss,ix);
12944             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
12945             break;
12946         default:
12947             Perl_croak(aTHX_
12948                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
12949         }
12950     }
12951
12952     return nss;
12953 }
12954
12955
12956 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
12957  * flag to the result. This is done for each stash before cloning starts,
12958  * so we know which stashes want their objects cloned */
12959
12960 static void
12961 do_mark_cloneable_stash(pTHX_ SV *const sv)
12962 {
12963     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
12964     if (hvname) {
12965         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
12966         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
12967         if (cloner && GvCV(cloner)) {
12968             dSP;
12969             UV status;
12970
12971             ENTER;
12972             SAVETMPS;
12973             PUSHMARK(SP);
12974             mXPUSHs(newSVhek(hvname));
12975             PUTBACK;
12976             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
12977             SPAGAIN;
12978             status = POPu;
12979             PUTBACK;
12980             FREETMPS;
12981             LEAVE;
12982             if (status)
12983                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
12984         }
12985     }
12986 }
12987
12988
12989
12990 /*
12991 =for apidoc perl_clone
12992
12993 Create and return a new interpreter by cloning the current one.
12994
12995 perl_clone takes these flags as parameters:
12996
12997 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
12998 without it we only clone the data and zero the stacks,
12999 with it we copy the stacks and the new perl interpreter is
13000 ready to run at the exact same point as the previous one.
13001 The pseudo-fork code uses COPY_STACKS while the
13002 threads->create doesn't.
13003
13004 CLONEf_KEEP_PTR_TABLE -
13005 perl_clone keeps a ptr_table with the pointer of the old
13006 variable as a key and the new variable as a value,
13007 this allows it to check if something has been cloned and not
13008 clone it again but rather just use the value and increase the
13009 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
13010 the ptr_table using the function
13011 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
13012 reason to keep it around is if you want to dup some of your own
13013 variable who are outside the graph perl scans, example of this
13014 code is in threads.xs create.
13015
13016 CLONEf_CLONE_HOST -
13017 This is a win32 thing, it is ignored on unix, it tells perls
13018 win32host code (which is c++) to clone itself, this is needed on
13019 win32 if you want to run two threads at the same time,
13020 if you just want to do some stuff in a separate perl interpreter
13021 and then throw it away and return to the original one,
13022 you don't need to do anything.
13023
13024 =cut
13025 */
13026
13027 /* XXX the above needs expanding by someone who actually understands it ! */
13028 EXTERN_C PerlInterpreter *
13029 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
13030
13031 PerlInterpreter *
13032 perl_clone(PerlInterpreter *proto_perl, UV flags)
13033 {
13034    dVAR;
13035 #ifdef PERL_IMPLICIT_SYS
13036
13037     PERL_ARGS_ASSERT_PERL_CLONE;
13038
13039    /* perlhost.h so we need to call into it
13040    to clone the host, CPerlHost should have a c interface, sky */
13041
13042    if (flags & CLONEf_CLONE_HOST) {
13043        return perl_clone_host(proto_perl,flags);
13044    }
13045    return perl_clone_using(proto_perl, flags,
13046                             proto_perl->IMem,
13047                             proto_perl->IMemShared,
13048                             proto_perl->IMemParse,
13049                             proto_perl->IEnv,
13050                             proto_perl->IStdIO,
13051                             proto_perl->ILIO,
13052                             proto_perl->IDir,
13053                             proto_perl->ISock,
13054                             proto_perl->IProc);
13055 }
13056
13057 PerlInterpreter *
13058 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
13059                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
13060                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
13061                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
13062                  struct IPerlDir* ipD, struct IPerlSock* ipS,
13063                  struct IPerlProc* ipP)
13064 {
13065     /* XXX many of the string copies here can be optimized if they're
13066      * constants; they need to be allocated as common memory and just
13067      * their pointers copied. */
13068
13069     IV i;
13070     CLONE_PARAMS clone_params;
13071     CLONE_PARAMS* const param = &clone_params;
13072
13073     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
13074
13075     PERL_ARGS_ASSERT_PERL_CLONE_USING;
13076 #else           /* !PERL_IMPLICIT_SYS */
13077     IV i;
13078     CLONE_PARAMS clone_params;
13079     CLONE_PARAMS* param = &clone_params;
13080     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
13081
13082     PERL_ARGS_ASSERT_PERL_CLONE;
13083 #endif          /* PERL_IMPLICIT_SYS */
13084
13085     /* for each stash, determine whether its objects should be cloned */
13086     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
13087     PERL_SET_THX(my_perl);
13088
13089 #ifdef DEBUGGING
13090     PoisonNew(my_perl, 1, PerlInterpreter);
13091     PL_op = NULL;
13092     PL_curcop = NULL;
13093     PL_defstash = NULL; /* may be used by perl malloc() */
13094     PL_markstack = 0;
13095     PL_scopestack = 0;
13096     PL_scopestack_name = 0;
13097     PL_savestack = 0;
13098     PL_savestack_ix = 0;
13099     PL_savestack_max = -1;
13100     PL_sig_pending = 0;
13101     PL_parser = NULL;
13102     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
13103 #  ifdef DEBUG_LEAKING_SCALARS
13104     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
13105 #  endif
13106 #else   /* !DEBUGGING */
13107     Zero(my_perl, 1, PerlInterpreter);
13108 #endif  /* DEBUGGING */
13109
13110 #ifdef PERL_IMPLICIT_SYS
13111     /* host pointers */
13112     PL_Mem              = ipM;
13113     PL_MemShared        = ipMS;
13114     PL_MemParse         = ipMP;
13115     PL_Env              = ipE;
13116     PL_StdIO            = ipStd;
13117     PL_LIO              = ipLIO;
13118     PL_Dir              = ipD;
13119     PL_Sock             = ipS;
13120     PL_Proc             = ipP;
13121 #endif          /* PERL_IMPLICIT_SYS */
13122
13123
13124     param->flags = flags;
13125     /* Nothing in the core code uses this, but we make it available to
13126        extensions (using mg_dup).  */
13127     param->proto_perl = proto_perl;
13128     /* Likely nothing will use this, but it is initialised to be consistent
13129        with Perl_clone_params_new().  */
13130     param->new_perl = my_perl;
13131     param->unreferenced = NULL;
13132
13133
13134     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
13135
13136     PL_body_arenas = NULL;
13137     Zero(&PL_body_roots, 1, PL_body_roots);
13138     
13139     PL_sv_count         = 0;
13140     PL_sv_objcount      = 0;
13141     PL_sv_root          = NULL;
13142     PL_sv_arenaroot     = NULL;
13143
13144     PL_debug            = proto_perl->Idebug;
13145
13146     /* dbargs array probably holds garbage */
13147     PL_dbargs           = NULL;
13148
13149     PL_compiling = proto_perl->Icompiling;
13150
13151     /* pseudo environmental stuff */
13152     PL_origargc         = proto_perl->Iorigargc;
13153     PL_origargv         = proto_perl->Iorigargv;
13154
13155 #if !NO_TAINT_SUPPORT
13156     /* Set tainting stuff before PerlIO_debug can possibly get called */
13157     PL_tainting         = proto_perl->Itainting;
13158     PL_taint_warn       = proto_perl->Itaint_warn;
13159 #else
13160     PL_tainting         = FALSE;
13161     PL_taint_warn       = FALSE;
13162 #endif
13163
13164     PL_minus_c          = proto_perl->Iminus_c;
13165
13166     PL_localpatches     = proto_perl->Ilocalpatches;
13167     PL_splitstr         = proto_perl->Isplitstr;
13168     PL_minus_n          = proto_perl->Iminus_n;
13169     PL_minus_p          = proto_perl->Iminus_p;
13170     PL_minus_l          = proto_perl->Iminus_l;
13171     PL_minus_a          = proto_perl->Iminus_a;
13172     PL_minus_E          = proto_perl->Iminus_E;
13173     PL_minus_F          = proto_perl->Iminus_F;
13174     PL_doswitches       = proto_perl->Idoswitches;
13175     PL_dowarn           = proto_perl->Idowarn;
13176 #ifdef PERL_SAWAMPERSAND
13177     PL_sawampersand     = proto_perl->Isawampersand;
13178 #endif
13179     PL_unsafe           = proto_perl->Iunsafe;
13180     PL_perldb           = proto_perl->Iperldb;
13181     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
13182     PL_exit_flags       = proto_perl->Iexit_flags;
13183
13184     /* XXX time(&PL_basetime) when asked for? */
13185     PL_basetime         = proto_perl->Ibasetime;
13186
13187     PL_maxsysfd         = proto_perl->Imaxsysfd;
13188     PL_statusvalue      = proto_perl->Istatusvalue;
13189 #ifdef VMS
13190     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
13191 #else
13192     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
13193 #endif
13194
13195     /* RE engine related */
13196     Zero(&PL_reg_state, 1, struct re_save_state);
13197     PL_regmatch_slab    = NULL;
13198
13199     PL_sub_generation   = proto_perl->Isub_generation;
13200
13201     /* funky return mechanisms */
13202     PL_forkprocess      = proto_perl->Iforkprocess;
13203
13204     /* internal state */
13205     PL_maxo             = proto_perl->Imaxo;
13206
13207     PL_main_start       = proto_perl->Imain_start;
13208     PL_eval_root        = proto_perl->Ieval_root;
13209     PL_eval_start       = proto_perl->Ieval_start;
13210
13211     PL_filemode         = proto_perl->Ifilemode;
13212     PL_lastfd           = proto_perl->Ilastfd;
13213     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
13214     PL_Argv             = NULL;
13215     PL_Cmd              = NULL;
13216     PL_gensym           = proto_perl->Igensym;
13217
13218     PL_laststatval      = proto_perl->Ilaststatval;
13219     PL_laststype        = proto_perl->Ilaststype;
13220     PL_mess_sv          = NULL;
13221
13222     PL_profiledata      = NULL;
13223
13224     PL_generation       = proto_perl->Igeneration;
13225
13226     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
13227     PL_in_clean_all     = proto_perl->Iin_clean_all;
13228
13229     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
13230     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
13231     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
13232     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
13233     PL_nomemok          = proto_perl->Inomemok;
13234     PL_an               = proto_perl->Ian;
13235     PL_evalseq          = proto_perl->Ievalseq;
13236     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
13237     PL_origalen         = proto_perl->Iorigalen;
13238
13239     PL_sighandlerp      = proto_perl->Isighandlerp;
13240
13241     PL_runops           = proto_perl->Irunops;
13242
13243     PL_subline          = proto_perl->Isubline;
13244
13245 #ifdef FCRYPT
13246     PL_cryptseen        = proto_perl->Icryptseen;
13247 #endif
13248
13249     PL_hints            = proto_perl->Ihints;
13250
13251 #ifdef USE_LOCALE_COLLATE
13252     PL_collation_ix     = proto_perl->Icollation_ix;
13253     PL_collation_standard       = proto_perl->Icollation_standard;
13254     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
13255     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
13256 #endif /* USE_LOCALE_COLLATE */
13257
13258 #ifdef USE_LOCALE_NUMERIC
13259     PL_numeric_standard = proto_perl->Inumeric_standard;
13260     PL_numeric_local    = proto_perl->Inumeric_local;
13261 #endif /* !USE_LOCALE_NUMERIC */
13262
13263     /* Did the locale setup indicate UTF-8? */
13264     PL_utf8locale       = proto_perl->Iutf8locale;
13265     /* Unicode features (see perlrun/-C) */
13266     PL_unicode          = proto_perl->Iunicode;
13267
13268     /* Pre-5.8 signals control */
13269     PL_signals          = proto_perl->Isignals;
13270
13271     /* times() ticks per second */
13272     PL_clocktick        = proto_perl->Iclocktick;
13273
13274     /* Recursion stopper for PerlIO_find_layer */
13275     PL_in_load_module   = proto_perl->Iin_load_module;
13276
13277     /* sort() routine */
13278     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
13279
13280     /* Not really needed/useful since the reenrant_retint is "volatile",
13281      * but do it for consistency's sake. */
13282     PL_reentrant_retint = proto_perl->Ireentrant_retint;
13283
13284     /* Hooks to shared SVs and locks. */
13285     PL_sharehook        = proto_perl->Isharehook;
13286     PL_lockhook         = proto_perl->Ilockhook;
13287     PL_unlockhook       = proto_perl->Iunlockhook;
13288     PL_threadhook       = proto_perl->Ithreadhook;
13289     PL_destroyhook      = proto_perl->Idestroyhook;
13290     PL_signalhook       = proto_perl->Isignalhook;
13291
13292     PL_globhook         = proto_perl->Iglobhook;
13293
13294     /* swatch cache */
13295     PL_last_swash_hv    = NULL; /* reinits on demand */
13296     PL_last_swash_klen  = 0;
13297     PL_last_swash_key[0]= '\0';
13298     PL_last_swash_tmps  = (U8*)NULL;
13299     PL_last_swash_slen  = 0;
13300
13301     PL_srand_called     = proto_perl->Isrand_called;
13302
13303     if (flags & CLONEf_COPY_STACKS) {
13304         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
13305         PL_tmps_ix              = proto_perl->Itmps_ix;
13306         PL_tmps_max             = proto_perl->Itmps_max;
13307         PL_tmps_floor           = proto_perl->Itmps_floor;
13308
13309         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13310          * NOTE: unlike the others! */
13311         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
13312         PL_scopestack_max       = proto_perl->Iscopestack_max;
13313
13314         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
13315          * NOTE: unlike the others! */
13316         PL_savestack_ix         = proto_perl->Isavestack_ix;
13317         PL_savestack_max        = proto_perl->Isavestack_max;
13318     }
13319
13320     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
13321     PL_top_env          = &PL_start_env;
13322
13323     PL_op               = proto_perl->Iop;
13324
13325     PL_Sv               = NULL;
13326     PL_Xpv              = (XPV*)NULL;
13327     my_perl->Ina        = proto_perl->Ina;
13328
13329     PL_statbuf          = proto_perl->Istatbuf;
13330     PL_statcache        = proto_perl->Istatcache;
13331
13332 #ifdef HAS_TIMES
13333     PL_timesbuf         = proto_perl->Itimesbuf;
13334 #endif
13335
13336 #if !NO_TAINT_SUPPORT
13337     PL_tainted          = proto_perl->Itainted;
13338 #else
13339     PL_tainted          = FALSE;
13340 #endif
13341     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
13342
13343     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
13344
13345     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
13346     PL_restartop        = proto_perl->Irestartop;
13347     PL_in_eval          = proto_perl->Iin_eval;
13348     PL_delaymagic       = proto_perl->Idelaymagic;
13349     PL_phase            = proto_perl->Iphase;
13350     PL_localizing       = proto_perl->Ilocalizing;
13351
13352     PL_hv_fetch_ent_mh  = NULL;
13353     PL_modcount         = proto_perl->Imodcount;
13354     PL_lastgotoprobe    = NULL;
13355     PL_dumpindent       = proto_perl->Idumpindent;
13356
13357     PL_efloatbuf        = NULL;         /* reinits on demand */
13358     PL_efloatsize       = 0;                    /* reinits on demand */
13359
13360     /* regex stuff */
13361
13362     PL_regdummy         = proto_perl->Iregdummy;
13363     PL_colorset         = 0;            /* reinits PL_colors[] */
13364     /*PL_colors[6]      = {0,0,0,0,0,0};*/
13365
13366     /* Pluggable optimizer */
13367     PL_peepp            = proto_perl->Ipeepp;
13368     PL_rpeepp           = proto_perl->Irpeepp;
13369     /* op_free() hook */
13370     PL_opfreehook       = proto_perl->Iopfreehook;
13371
13372 #ifdef USE_REENTRANT_API
13373     /* XXX: things like -Dm will segfault here in perlio, but doing
13374      *  PERL_SET_CONTEXT(proto_perl);
13375      * breaks too many other things
13376      */
13377     Perl_reentrant_init(aTHX);
13378 #endif
13379
13380     /* create SV map for pointer relocation */
13381     PL_ptr_table = ptr_table_new();
13382
13383     /* initialize these special pointers as early as possible */
13384     init_constants();
13385     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
13386     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
13387     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
13388
13389     /* create (a non-shared!) shared string table */
13390     PL_strtab           = newHV();
13391     HvSHAREKEYS_off(PL_strtab);
13392     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
13393     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
13394
13395     /* This PV will be free'd special way so must set it same way op.c does */
13396     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
13397     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
13398
13399     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
13400     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
13401     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
13402     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
13403
13404     param->stashes      = newAV();  /* Setup array of objects to call clone on */
13405     /* This makes no difference to the implementation, as it always pushes
13406        and shifts pointers to other SVs without changing their reference
13407        count, with the array becoming empty before it is freed. However, it
13408        makes it conceptually clear what is going on, and will avoid some
13409        work inside av.c, filling slots between AvFILL() and AvMAX() with
13410        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
13411     AvREAL_off(param->stashes);
13412
13413     if (!(flags & CLONEf_COPY_STACKS)) {
13414         param->unreferenced = newAV();
13415     }
13416
13417 #ifdef PERLIO_LAYERS
13418     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
13419     PerlIO_clone(aTHX_ proto_perl, param);
13420 #endif
13421
13422     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
13423     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
13424     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
13425     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
13426     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
13427     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
13428
13429     /* switches */
13430     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
13431     PL_apiversion       = sv_dup_inc(proto_perl->Iapiversion, param);
13432     PL_inplace          = SAVEPV(proto_perl->Iinplace);
13433     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
13434
13435     /* magical thingies */
13436
13437     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
13438
13439     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
13440     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
13441     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
13442
13443    
13444     /* Clone the regex array */
13445     /* ORANGE FIXME for plugins, probably in the SV dup code.
13446        newSViv(PTR2IV(CALLREGDUPE(
13447        INT2PTR(REGEXP *, SvIVX(regex)), param))))
13448     */
13449     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
13450     PL_regex_pad = AvARRAY(PL_regex_padav);
13451
13452     PL_stashpadmax      = proto_perl->Istashpadmax;
13453     PL_stashpadix       = proto_perl->Istashpadix ;
13454     Newx(PL_stashpad, PL_stashpadmax, HV *);
13455     {
13456         PADOFFSET o = 0;
13457         for (; o < PL_stashpadmax; ++o)
13458             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
13459     }
13460
13461     /* shortcuts to various I/O objects */
13462     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
13463     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
13464     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
13465     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
13466     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
13467     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
13468     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
13469
13470     /* shortcuts to regexp stuff */
13471     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
13472
13473     /* shortcuts to misc objects */
13474     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
13475
13476     /* shortcuts to debugging objects */
13477     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
13478     PL_DBline           = gv_dup(proto_perl->IDBline, param);
13479     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
13480     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
13481     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
13482     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
13483
13484     /* symbol tables */
13485     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
13486     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
13487     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
13488     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
13489     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
13490
13491     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
13492     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
13493     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
13494     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
13495     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
13496     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
13497     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
13498     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
13499
13500     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
13501
13502     /* subprocess state */
13503     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
13504
13505     if (proto_perl->Iop_mask)
13506         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
13507     else
13508         PL_op_mask      = NULL;
13509     /* PL_asserting        = proto_perl->Iasserting; */
13510
13511     /* current interpreter roots */
13512     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
13513     OP_REFCNT_LOCK;
13514     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
13515     OP_REFCNT_UNLOCK;
13516
13517     /* runtime control stuff */
13518     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
13519
13520     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
13521
13522     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
13523
13524     /* interpreter atexit processing */
13525     PL_exitlistlen      = proto_perl->Iexitlistlen;
13526     if (PL_exitlistlen) {
13527         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13528         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
13529     }
13530     else
13531         PL_exitlist     = (PerlExitListEntry*)NULL;
13532
13533     PL_my_cxt_size = proto_perl->Imy_cxt_size;
13534     if (PL_my_cxt_size) {
13535         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
13536         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
13537 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13538         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
13539         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
13540 #endif
13541     }
13542     else {
13543         PL_my_cxt_list  = (void**)NULL;
13544 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
13545         PL_my_cxt_keys  = (const char**)NULL;
13546 #endif
13547     }
13548     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
13549     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
13550     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
13551     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
13552
13553     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
13554
13555     PAD_CLONE_VARS(proto_perl, param);
13556
13557 #ifdef HAVE_INTERP_INTERN
13558     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
13559 #endif
13560
13561     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
13562
13563 #ifdef PERL_USES_PL_PIDSTATUS
13564     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
13565 #endif
13566     PL_osname           = SAVEPV(proto_perl->Iosname);
13567     PL_parser           = parser_dup(proto_perl->Iparser, param);
13568
13569     /* XXX this only works if the saved cop has already been cloned */
13570     if (proto_perl->Iparser) {
13571         PL_parser->saved_curcop = (COP*)any_dup(
13572                                     proto_perl->Iparser->saved_curcop,
13573                                     proto_perl);
13574     }
13575
13576     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
13577
13578 #ifdef USE_LOCALE_COLLATE
13579     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
13580 #endif /* USE_LOCALE_COLLATE */
13581
13582 #ifdef USE_LOCALE_NUMERIC
13583     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
13584     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
13585 #endif /* !USE_LOCALE_NUMERIC */
13586
13587     /* Unicode inversion lists */
13588     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13589     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13590
13591     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
13592     PL_HasMultiCharFold= sv_dup_inc(proto_perl->IHasMultiCharFold, param);
13593
13594     /* utf8 character class swashes */
13595     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
13596         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
13597     }
13598     for (i = 0; i < POSIX_CC_COUNT; i++) {
13599         PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
13600         PL_L1Posix_ptrs[i] = sv_dup_inc(proto_perl->IL1Posix_ptrs[i], param);
13601         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
13602     }
13603     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
13604     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
13605     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
13606     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
13607     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
13608     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
13609     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
13610     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
13611     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
13612     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
13613     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
13614     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
13615     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
13616     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
13617     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
13618     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
13619     PL_ASCII            = sv_dup_inc(proto_perl->IASCII, param);
13620     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
13621     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
13622
13623     if (proto_perl->Ipsig_pend) {
13624         Newxz(PL_psig_pend, SIG_SIZE, int);
13625     }
13626     else {
13627         PL_psig_pend    = (int*)NULL;
13628     }
13629
13630     if (proto_perl->Ipsig_name) {
13631         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
13632         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
13633                             param);
13634         PL_psig_ptr = PL_psig_name + SIG_SIZE;
13635     }
13636     else {
13637         PL_psig_ptr     = (SV**)NULL;
13638         PL_psig_name    = (SV**)NULL;
13639     }
13640
13641     if (flags & CLONEf_COPY_STACKS) {
13642         Newx(PL_tmps_stack, PL_tmps_max, SV*);
13643         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
13644                             PL_tmps_ix+1, param);
13645
13646         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
13647         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
13648         Newxz(PL_markstack, i, I32);
13649         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
13650                                                   - proto_perl->Imarkstack);
13651         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
13652                                                   - proto_perl->Imarkstack);
13653         Copy(proto_perl->Imarkstack, PL_markstack,
13654              PL_markstack_ptr - PL_markstack + 1, I32);
13655
13656         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
13657          * NOTE: unlike the others! */
13658         Newxz(PL_scopestack, PL_scopestack_max, I32);
13659         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
13660
13661 #ifdef DEBUGGING
13662         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
13663         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
13664 #endif
13665         /* reset stack AV to correct length before its duped via
13666          * PL_curstackinfo */
13667         AvFILLp(proto_perl->Icurstack) =
13668                             proto_perl->Istack_sp - proto_perl->Istack_base;
13669
13670         /* NOTE: si_dup() looks at PL_markstack */
13671         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
13672
13673         /* PL_curstack          = PL_curstackinfo->si_stack; */
13674         PL_curstack             = av_dup(proto_perl->Icurstack, param);
13675         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
13676
13677         /* next PUSHs() etc. set *(PL_stack_sp+1) */
13678         PL_stack_base           = AvARRAY(PL_curstack);
13679         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
13680                                                    - proto_perl->Istack_base);
13681         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
13682
13683         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
13684         PL_savestack            = ss_dup(proto_perl, param);
13685     }
13686     else {
13687         init_stacks();
13688         ENTER;                  /* perl_destruct() wants to LEAVE; */
13689     }
13690
13691     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
13692     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
13693
13694     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
13695     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
13696     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
13697     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
13698     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
13699     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
13700
13701     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
13702
13703     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
13704     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
13705     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
13706     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
13707
13708     PL_stashcache       = newHV();
13709
13710     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
13711                                             proto_perl->Iwatchaddr);
13712     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
13713     if (PL_debug && PL_watchaddr) {
13714         PerlIO_printf(Perl_debug_log,
13715           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
13716           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
13717           PTR2UV(PL_watchok));
13718     }
13719
13720     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
13721     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
13722     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
13723
13724     /* Call the ->CLONE method, if it exists, for each of the stashes
13725        identified by sv_dup() above.
13726     */
13727     while(av_len(param->stashes) != -1) {
13728         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
13729         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
13730         if (cloner && GvCV(cloner)) {
13731             dSP;
13732             ENTER;
13733             SAVETMPS;
13734             PUSHMARK(SP);
13735             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
13736             PUTBACK;
13737             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
13738             FREETMPS;
13739             LEAVE;
13740         }
13741     }
13742
13743     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
13744         ptr_table_free(PL_ptr_table);
13745         PL_ptr_table = NULL;
13746     }
13747
13748     if (!(flags & CLONEf_COPY_STACKS)) {
13749         unreferenced_to_tmp_stack(param->unreferenced);
13750     }
13751
13752     SvREFCNT_dec(param->stashes);
13753
13754     /* orphaned? eg threads->new inside BEGIN or use */
13755     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
13756         SvREFCNT_inc_simple_void(PL_compcv);
13757         SAVEFREESV(PL_compcv);
13758     }
13759
13760     return my_perl;
13761 }
13762
13763 static void
13764 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
13765 {
13766     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
13767     
13768     if (AvFILLp(unreferenced) > -1) {
13769         SV **svp = AvARRAY(unreferenced);
13770         SV **const last = svp + AvFILLp(unreferenced);
13771         SSize_t count = 0;
13772
13773         do {
13774             if (SvREFCNT(*svp) == 1)
13775                 ++count;
13776         } while (++svp <= last);
13777
13778         EXTEND_MORTAL(count);
13779         svp = AvARRAY(unreferenced);
13780
13781         do {
13782             if (SvREFCNT(*svp) == 1) {
13783                 /* Our reference is the only one to this SV. This means that
13784                    in this thread, the scalar effectively has a 0 reference.
13785                    That doesn't work (cleanup never happens), so donate our
13786                    reference to it onto the save stack. */
13787                 PL_tmps_stack[++PL_tmps_ix] = *svp;
13788             } else {
13789                 /* As an optimisation, because we are already walking the
13790                    entire array, instead of above doing either
13791                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
13792                    release our reference to the scalar, so that at the end of
13793                    the array owns zero references to the scalars it happens to
13794                    point to. We are effectively converting the array from
13795                    AvREAL() on to AvREAL() off. This saves the av_clear()
13796                    (triggered by the SvREFCNT_dec(unreferenced) below) from
13797                    walking the array a second time.  */
13798                 SvREFCNT_dec(*svp);
13799             }
13800
13801         } while (++svp <= last);
13802         AvREAL_off(unreferenced);
13803     }
13804     SvREFCNT_dec_NN(unreferenced);
13805 }
13806
13807 void
13808 Perl_clone_params_del(CLONE_PARAMS *param)
13809 {
13810     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
13811        happy: */
13812     PerlInterpreter *const to = param->new_perl;
13813     dTHXa(to);
13814     PerlInterpreter *const was = PERL_GET_THX;
13815
13816     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
13817
13818     if (was != to) {
13819         PERL_SET_THX(to);
13820     }
13821
13822     SvREFCNT_dec(param->stashes);
13823     if (param->unreferenced)
13824         unreferenced_to_tmp_stack(param->unreferenced);
13825
13826     Safefree(param);
13827
13828     if (was != to) {
13829         PERL_SET_THX(was);
13830     }
13831 }
13832
13833 CLONE_PARAMS *
13834 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
13835 {
13836     dVAR;
13837     /* Need to play this game, as newAV() can call safesysmalloc(), and that
13838        does a dTHX; to get the context from thread local storage.
13839        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
13840        a version that passes in my_perl.  */
13841     PerlInterpreter *const was = PERL_GET_THX;
13842     CLONE_PARAMS *param;
13843
13844     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
13845
13846     if (was != to) {
13847         PERL_SET_THX(to);
13848     }
13849
13850     /* Given that we've set the context, we can do this unshared.  */
13851     Newx(param, 1, CLONE_PARAMS);
13852
13853     param->flags = 0;
13854     param->proto_perl = from;
13855     param->new_perl = to;
13856     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
13857     AvREAL_off(param->stashes);
13858     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
13859
13860     if (was != to) {
13861         PERL_SET_THX(was);
13862     }
13863     return param;
13864 }
13865
13866 #endif /* USE_ITHREADS */
13867
13868 void
13869 Perl_init_constants(pTHX)
13870 {
13871     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
13872     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
13873     SvANY(&PL_sv_undef)         = NULL;
13874
13875     SvANY(&PL_sv_no)            = new_XPVNV();
13876     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
13877     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY
13878                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13879                                   |SVp_POK|SVf_POK;
13880
13881     SvANY(&PL_sv_yes)           = new_XPVNV();
13882     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
13883     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY
13884                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
13885                                   |SVp_POK|SVf_POK;
13886
13887     SvPV_set(&PL_sv_no, (char*)PL_No);
13888     SvCUR_set(&PL_sv_no, 0);
13889     SvLEN_set(&PL_sv_no, 0);
13890     SvIV_set(&PL_sv_no, 0);
13891     SvNV_set(&PL_sv_no, 0);
13892
13893     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
13894     SvCUR_set(&PL_sv_yes, 1);
13895     SvLEN_set(&PL_sv_yes, 0);
13896     SvIV_set(&PL_sv_yes, 1);
13897     SvNV_set(&PL_sv_yes, 1);
13898 }
13899
13900 /*
13901 =head1 Unicode Support
13902
13903 =for apidoc sv_recode_to_utf8
13904
13905 The encoding is assumed to be an Encode object, on entry the PV
13906 of the sv is assumed to be octets in that encoding, and the sv
13907 will be converted into Unicode (and UTF-8).
13908
13909 If the sv already is UTF-8 (or if it is not POK), or if the encoding
13910 is not a reference, nothing is done to the sv.  If the encoding is not
13911 an C<Encode::XS> Encoding object, bad things will happen.
13912 (See F<lib/encoding.pm> and L<Encode>.)
13913
13914 The PV of the sv is returned.
13915
13916 =cut */
13917
13918 char *
13919 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
13920 {
13921     dVAR;
13922
13923     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
13924
13925     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
13926         SV *uni;
13927         STRLEN len;
13928         const char *s;
13929         dSP;
13930         ENTER;
13931         SAVETMPS;
13932         save_re_context();
13933         PUSHMARK(sp);
13934         EXTEND(SP, 3);
13935         PUSHs(encoding);
13936         PUSHs(sv);
13937 /*
13938   NI-S 2002/07/09
13939   Passing sv_yes is wrong - it needs to be or'ed set of constants
13940   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
13941   remove converted chars from source.
13942
13943   Both will default the value - let them.
13944
13945         XPUSHs(&PL_sv_yes);
13946 */
13947         PUTBACK;
13948         call_method("decode", G_SCALAR);
13949         SPAGAIN;
13950         uni = POPs;
13951         PUTBACK;
13952         s = SvPV_const(uni, len);
13953         if (s != SvPVX_const(sv)) {
13954             SvGROW(sv, len + 1);
13955             Move(s, SvPVX(sv), len + 1, char);
13956             SvCUR_set(sv, len);
13957         }
13958         FREETMPS;
13959         LEAVE;
13960         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13961             /* clear pos and any utf8 cache */
13962             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
13963             if (mg)
13964                 mg->mg_len = -1;
13965             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
13966                 magic_setutf8(sv,mg); /* clear UTF8 cache */
13967         }
13968         SvUTF8_on(sv);
13969         return SvPVX(sv);
13970     }
13971     return SvPOKp(sv) ? SvPVX(sv) : NULL;
13972 }
13973
13974 /*
13975 =for apidoc sv_cat_decode
13976
13977 The encoding is assumed to be an Encode object, the PV of the ssv is
13978 assumed to be octets in that encoding and decoding the input starts
13979 from the position which (PV + *offset) pointed to.  The dsv will be
13980 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
13981 when the string tstr appears in decoding output or the input ends on
13982 the PV of the ssv.  The value which the offset points will be modified
13983 to the last input position on the ssv.
13984
13985 Returns TRUE if the terminator was found, else returns FALSE.
13986
13987 =cut */
13988
13989 bool
13990 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
13991                    SV *ssv, int *offset, char *tstr, int tlen)
13992 {
13993     dVAR;
13994     bool ret = FALSE;
13995
13996     PERL_ARGS_ASSERT_SV_CAT_DECODE;
13997
13998     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
13999         SV *offsv;
14000         dSP;
14001         ENTER;
14002         SAVETMPS;
14003         save_re_context();
14004         PUSHMARK(sp);
14005         EXTEND(SP, 6);
14006         PUSHs(encoding);
14007         PUSHs(dsv);
14008         PUSHs(ssv);
14009         offsv = newSViv(*offset);
14010         mPUSHs(offsv);
14011         mPUSHp(tstr, tlen);
14012         PUTBACK;
14013         call_method("cat_decode", G_SCALAR);
14014         SPAGAIN;
14015         ret = SvTRUE(TOPs);
14016         *offset = SvIV(offsv);
14017         PUTBACK;
14018         FREETMPS;
14019         LEAVE;
14020     }
14021     else
14022         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
14023     return ret;
14024
14025 }
14026
14027 /* ---------------------------------------------------------------------
14028  *
14029  * support functions for report_uninit()
14030  */
14031
14032 /* the maxiumum size of array or hash where we will scan looking
14033  * for the undefined element that triggered the warning */
14034
14035 #define FUV_MAX_SEARCH_SIZE 1000
14036
14037 /* Look for an entry in the hash whose value has the same SV as val;
14038  * If so, return a mortal copy of the key. */
14039
14040 STATIC SV*
14041 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
14042 {
14043     dVAR;
14044     HE **array;
14045     I32 i;
14046
14047     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
14048
14049     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
14050                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
14051         return NULL;
14052
14053     array = HvARRAY(hv);
14054
14055     for (i=HvMAX(hv); i>=0; i--) {
14056         HE *entry;
14057         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
14058             if (HeVAL(entry) != val)
14059                 continue;
14060             if (    HeVAL(entry) == &PL_sv_undef ||
14061                     HeVAL(entry) == &PL_sv_placeholder)
14062                 continue;
14063             if (!HeKEY(entry))
14064                 return NULL;
14065             if (HeKLEN(entry) == HEf_SVKEY)
14066                 return sv_mortalcopy(HeKEY_sv(entry));
14067             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
14068         }
14069     }
14070     return NULL;
14071 }
14072
14073 /* Look for an entry in the array whose value has the same SV as val;
14074  * If so, return the index, otherwise return -1. */
14075
14076 STATIC I32
14077 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
14078 {
14079     dVAR;
14080
14081     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
14082
14083     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
14084                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
14085         return -1;
14086
14087     if (val != &PL_sv_undef) {
14088         SV ** const svp = AvARRAY(av);
14089         I32 i;
14090
14091         for (i=AvFILLp(av); i>=0; i--)
14092             if (svp[i] == val)
14093                 return i;
14094     }
14095     return -1;
14096 }
14097
14098 /* varname(): return the name of a variable, optionally with a subscript.
14099  * If gv is non-zero, use the name of that global, along with gvtype (one
14100  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
14101  * targ.  Depending on the value of the subscript_type flag, return:
14102  */
14103
14104 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
14105 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
14106 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
14107 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
14108
14109 SV*
14110 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
14111         const SV *const keyname, I32 aindex, int subscript_type)
14112 {
14113
14114     SV * const name = sv_newmortal();
14115     if (gv && isGV(gv)) {
14116         char buffer[2];
14117         buffer[0] = gvtype;
14118         buffer[1] = 0;
14119
14120         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
14121
14122         gv_fullname4(name, gv, buffer, 0);
14123
14124         if ((unsigned int)SvPVX(name)[1] <= 26) {
14125             buffer[0] = '^';
14126             buffer[1] = SvPVX(name)[1] + 'A' - 1;
14127
14128             /* Swap the 1 unprintable control character for the 2 byte pretty
14129                version - ie substr($name, 1, 1) = $buffer; */
14130             sv_insert(name, 1, 1, buffer, 2);
14131         }
14132     }
14133     else {
14134         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
14135         SV *sv;
14136         AV *av;
14137
14138         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
14139
14140         if (!cv || !CvPADLIST(cv))
14141             return NULL;
14142         av = *PadlistARRAY(CvPADLIST(cv));
14143         sv = *av_fetch(av, targ, FALSE);
14144         sv_setsv_flags(name, sv, 0);
14145     }
14146
14147     if (subscript_type == FUV_SUBSCRIPT_HASH) {
14148         SV * const sv = newSV(0);
14149         *SvPVX(name) = '$';
14150         Perl_sv_catpvf(aTHX_ name, "{%s}",
14151             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
14152                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
14153         SvREFCNT_dec_NN(sv);
14154     }
14155     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
14156         *SvPVX(name) = '$';
14157         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
14158     }
14159     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
14160         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
14161         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
14162     }
14163
14164     return name;
14165 }
14166
14167
14168 /*
14169 =for apidoc find_uninit_var
14170
14171 Find the name of the undefined variable (if any) that caused the operator
14172 to issue a "Use of uninitialized value" warning.
14173 If match is true, only return a name if its value matches uninit_sv.
14174 So roughly speaking, if a unary operator (such as OP_COS) generates a
14175 warning, then following the direct child of the op may yield an
14176 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
14177 other hand, with OP_ADD there are two branches to follow, so we only print
14178 the variable name if we get an exact match.
14179
14180 The name is returned as a mortal SV.
14181
14182 Assumes that PL_op is the op that originally triggered the error, and that
14183 PL_comppad/PL_curpad points to the currently executing pad.
14184
14185 =cut
14186 */
14187
14188 STATIC SV *
14189 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
14190                   bool match)
14191 {
14192     dVAR;
14193     SV *sv;
14194     const GV *gv;
14195     const OP *o, *o2, *kid;
14196
14197     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
14198                             uninit_sv == &PL_sv_placeholder)))
14199         return NULL;
14200
14201     switch (obase->op_type) {
14202
14203     case OP_RV2AV:
14204     case OP_RV2HV:
14205     case OP_PADAV:
14206     case OP_PADHV:
14207       {
14208         const bool pad  = (    obase->op_type == OP_PADAV
14209                             || obase->op_type == OP_PADHV
14210                             || obase->op_type == OP_PADRANGE
14211                           );
14212
14213         const bool hash = (    obase->op_type == OP_PADHV
14214                             || obase->op_type == OP_RV2HV
14215                             || (obase->op_type == OP_PADRANGE
14216                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
14217                           );
14218         I32 index = 0;
14219         SV *keysv = NULL;
14220         int subscript_type = FUV_SUBSCRIPT_WITHIN;
14221
14222         if (pad) { /* @lex, %lex */
14223             sv = PAD_SVl(obase->op_targ);
14224             gv = NULL;
14225         }
14226         else {
14227             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14228             /* @global, %global */
14229                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14230                 if (!gv)
14231                     break;
14232                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
14233             }
14234             else if (obase == PL_op) /* @{expr}, %{expr} */
14235                 return find_uninit_var(cUNOPx(obase)->op_first,
14236                                                     uninit_sv, match);
14237             else /* @{expr}, %{expr} as a sub-expression */
14238                 return NULL;
14239         }
14240
14241         /* attempt to find a match within the aggregate */
14242         if (hash) {
14243             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14244             if (keysv)
14245                 subscript_type = FUV_SUBSCRIPT_HASH;
14246         }
14247         else {
14248             index = find_array_subscript((const AV *)sv, uninit_sv);
14249             if (index >= 0)
14250                 subscript_type = FUV_SUBSCRIPT_ARRAY;
14251         }
14252
14253         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
14254             break;
14255
14256         return varname(gv, hash ? '%' : '@', obase->op_targ,
14257                                     keysv, index, subscript_type);
14258       }
14259
14260     case OP_RV2SV:
14261         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
14262             /* $global */
14263             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
14264             if (!gv || !GvSTASH(gv))
14265                 break;
14266             if (match && (GvSV(gv) != uninit_sv))
14267                 break;
14268             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14269         }
14270         /* ${expr} */
14271         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
14272
14273     case OP_PADSV:
14274         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
14275             break;
14276         return varname(NULL, '$', obase->op_targ,
14277                                     NULL, 0, FUV_SUBSCRIPT_NONE);
14278
14279     case OP_GVSV:
14280         gv = cGVOPx_gv(obase);
14281         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
14282             break;
14283         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
14284
14285     case OP_AELEMFAST_LEX:
14286         if (match) {
14287             SV **svp;
14288             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
14289             if (!av || SvRMAGICAL(av))
14290                 break;
14291             svp = av_fetch(av, (I32)obase->op_private, FALSE);
14292             if (!svp || *svp != uninit_sv)
14293                 break;
14294         }
14295         return varname(NULL, '$', obase->op_targ,
14296                        NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14297     case OP_AELEMFAST:
14298         {
14299             gv = cGVOPx_gv(obase);
14300             if (!gv)
14301                 break;
14302             if (match) {
14303                 SV **svp;
14304                 AV *const av = GvAV(gv);
14305                 if (!av || SvRMAGICAL(av))
14306                     break;
14307                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
14308                 if (!svp || *svp != uninit_sv)
14309                     break;
14310             }
14311             return varname(gv, '$', 0,
14312                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
14313         }
14314         break;
14315
14316     case OP_EXISTS:
14317         o = cUNOPx(obase)->op_first;
14318         if (!o || o->op_type != OP_NULL ||
14319                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
14320             break;
14321         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
14322
14323     case OP_AELEM:
14324     case OP_HELEM:
14325     {
14326         bool negate = FALSE;
14327
14328         if (PL_op == obase)
14329             /* $a[uninit_expr] or $h{uninit_expr} */
14330             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
14331
14332         gv = NULL;
14333         o = cBINOPx(obase)->op_first;
14334         kid = cBINOPx(obase)->op_last;
14335
14336         /* get the av or hv, and optionally the gv */
14337         sv = NULL;
14338         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
14339             sv = PAD_SV(o->op_targ);
14340         }
14341         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
14342                 && cUNOPo->op_first->op_type == OP_GV)
14343         {
14344             gv = cGVOPx_gv(cUNOPo->op_first);
14345             if (!gv)
14346                 break;
14347             sv = o->op_type
14348                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
14349         }
14350         if (!sv)
14351             break;
14352
14353         if (kid && kid->op_type == OP_NEGATE) {
14354             negate = TRUE;
14355             kid = cUNOPx(kid)->op_first;
14356         }
14357
14358         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
14359             /* index is constant */
14360             SV* kidsv;
14361             if (negate) {
14362                 kidsv = sv_2mortal(newSVpvs("-"));
14363                 sv_catsv(kidsv, cSVOPx_sv(kid));
14364             }
14365             else
14366                 kidsv = cSVOPx_sv(kid);
14367             if (match) {
14368                 if (SvMAGICAL(sv))
14369                     break;
14370                 if (obase->op_type == OP_HELEM) {
14371                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
14372                     if (!he || HeVAL(he) != uninit_sv)
14373                         break;
14374                 }
14375                 else {
14376                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
14377                         negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14378                         FALSE);
14379                     if (!svp || *svp != uninit_sv)
14380                         break;
14381                 }
14382             }
14383             if (obase->op_type == OP_HELEM)
14384                 return varname(gv, '%', o->op_targ,
14385                             kidsv, 0, FUV_SUBSCRIPT_HASH);
14386             else
14387                 return varname(gv, '@', o->op_targ, NULL,
14388                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
14389                     FUV_SUBSCRIPT_ARRAY);
14390         }
14391         else  {
14392             /* index is an expression;
14393              * attempt to find a match within the aggregate */
14394             if (obase->op_type == OP_HELEM) {
14395                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
14396                 if (keysv)
14397                     return varname(gv, '%', o->op_targ,
14398                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
14399             }
14400             else {
14401                 const I32 index
14402                     = find_array_subscript((const AV *)sv, uninit_sv);
14403                 if (index >= 0)
14404                     return varname(gv, '@', o->op_targ,
14405                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
14406             }
14407             if (match)
14408                 break;
14409             return varname(gv,
14410                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
14411                 ? '@' : '%',
14412                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
14413         }
14414         break;
14415     }
14416
14417     case OP_AASSIGN:
14418         /* only examine RHS */
14419         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
14420
14421     case OP_OPEN:
14422         o = cUNOPx(obase)->op_first;
14423         if (   o->op_type == OP_PUSHMARK
14424            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
14425         )
14426             o = o->op_sibling;
14427
14428         if (!o->op_sibling) {
14429             /* one-arg version of open is highly magical */
14430
14431             if (o->op_type == OP_GV) { /* open FOO; */
14432                 gv = cGVOPx_gv(o);
14433                 if (match && GvSV(gv) != uninit_sv)
14434                     break;
14435                 return varname(gv, '$', 0,
14436                             NULL, 0, FUV_SUBSCRIPT_NONE);
14437             }
14438             /* other possibilities not handled are:
14439              * open $x; or open my $x;  should return '${*$x}'
14440              * open expr;               should return '$'.expr ideally
14441              */
14442              break;
14443         }
14444         goto do_op;
14445
14446     /* ops where $_ may be an implicit arg */
14447     case OP_TRANS:
14448     case OP_TRANSR:
14449     case OP_SUBST:
14450     case OP_MATCH:
14451         if ( !(obase->op_flags & OPf_STACKED)) {
14452             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
14453                                  ? PAD_SVl(obase->op_targ)
14454                                  : DEFSV))
14455             {
14456                 sv = sv_newmortal();
14457                 sv_setpvs(sv, "$_");
14458                 return sv;
14459             }
14460         }
14461         goto do_op;
14462
14463     case OP_PRTF:
14464     case OP_PRINT:
14465     case OP_SAY:
14466         match = 1; /* print etc can return undef on defined args */
14467         /* skip filehandle as it can't produce 'undef' warning  */
14468         o = cUNOPx(obase)->op_first;
14469         if ((obase->op_flags & OPf_STACKED)
14470             &&
14471                (   o->op_type == OP_PUSHMARK
14472                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
14473             o = o->op_sibling->op_sibling;
14474         goto do_op2;
14475
14476
14477     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
14478     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
14479
14480         /* the following ops are capable of returning PL_sv_undef even for
14481          * defined arg(s) */
14482
14483     case OP_BACKTICK:
14484     case OP_PIPE_OP:
14485     case OP_FILENO:
14486     case OP_BINMODE:
14487     case OP_TIED:
14488     case OP_GETC:
14489     case OP_SYSREAD:
14490     case OP_SEND:
14491     case OP_IOCTL:
14492     case OP_SOCKET:
14493     case OP_SOCKPAIR:
14494     case OP_BIND:
14495     case OP_CONNECT:
14496     case OP_LISTEN:
14497     case OP_ACCEPT:
14498     case OP_SHUTDOWN:
14499     case OP_SSOCKOPT:
14500     case OP_GETPEERNAME:
14501     case OP_FTRREAD:
14502     case OP_FTRWRITE:
14503     case OP_FTREXEC:
14504     case OP_FTROWNED:
14505     case OP_FTEREAD:
14506     case OP_FTEWRITE:
14507     case OP_FTEEXEC:
14508     case OP_FTEOWNED:
14509     case OP_FTIS:
14510     case OP_FTZERO:
14511     case OP_FTSIZE:
14512     case OP_FTFILE:
14513     case OP_FTDIR:
14514     case OP_FTLINK:
14515     case OP_FTPIPE:
14516     case OP_FTSOCK:
14517     case OP_FTBLK:
14518     case OP_FTCHR:
14519     case OP_FTTTY:
14520     case OP_FTSUID:
14521     case OP_FTSGID:
14522     case OP_FTSVTX:
14523     case OP_FTTEXT:
14524     case OP_FTBINARY:
14525     case OP_FTMTIME:
14526     case OP_FTATIME:
14527     case OP_FTCTIME:
14528     case OP_READLINK:
14529     case OP_OPEN_DIR:
14530     case OP_READDIR:
14531     case OP_TELLDIR:
14532     case OP_SEEKDIR:
14533     case OP_REWINDDIR:
14534     case OP_CLOSEDIR:
14535     case OP_GMTIME:
14536     case OP_ALARM:
14537     case OP_SEMGET:
14538     case OP_GETLOGIN:
14539     case OP_UNDEF:
14540     case OP_SUBSTR:
14541     case OP_AEACH:
14542     case OP_EACH:
14543     case OP_SORT:
14544     case OP_CALLER:
14545     case OP_DOFILE:
14546     case OP_PROTOTYPE:
14547     case OP_NCMP:
14548     case OP_SMARTMATCH:
14549     case OP_UNPACK:
14550     case OP_SYSOPEN:
14551     case OP_SYSSEEK:
14552         match = 1;
14553         goto do_op;
14554
14555     case OP_ENTERSUB:
14556     case OP_GOTO:
14557         /* XXX tmp hack: these two may call an XS sub, and currently
14558           XS subs don't have a SUB entry on the context stack, so CV and
14559           pad determination goes wrong, and BAD things happen. So, just
14560           don't try to determine the value under those circumstances.
14561           Need a better fix at dome point. DAPM 11/2007 */
14562         break;
14563
14564     case OP_FLIP:
14565     case OP_FLOP:
14566     {
14567         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
14568         if (gv && GvSV(gv) == uninit_sv)
14569             return newSVpvs_flags("$.", SVs_TEMP);
14570         goto do_op;
14571     }
14572
14573     case OP_POS:
14574         /* def-ness of rval pos() is independent of the def-ness of its arg */
14575         if ( !(obase->op_flags & OPf_MOD))
14576             break;
14577
14578     case OP_SCHOMP:
14579     case OP_CHOMP:
14580         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
14581             return newSVpvs_flags("${$/}", SVs_TEMP);
14582         /*FALLTHROUGH*/
14583
14584     default:
14585     do_op:
14586         if (!(obase->op_flags & OPf_KIDS))
14587             break;
14588         o = cUNOPx(obase)->op_first;
14589         
14590     do_op2:
14591         if (!o)
14592             break;
14593
14594         /* This loop checks all the kid ops, skipping any that cannot pos-
14595          * sibly be responsible for the uninitialized value; i.e., defined
14596          * constants and ops that return nothing.  If there is only one op
14597          * left that is not skipped, then we *know* it is responsible for
14598          * the uninitialized value.  If there is more than one op left, we
14599          * have to look for an exact match in the while() loop below.
14600          * Note that we skip padrange, because the individual pad ops that
14601          * it replaced are still in the tree, so we work on them instead.
14602          */
14603         o2 = NULL;
14604         for (kid=o; kid; kid = kid->op_sibling) {
14605             if (kid) {
14606                 const OPCODE type = kid->op_type;
14607                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
14608                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
14609                   || (type == OP_PUSHMARK)
14610                   || (type == OP_PADRANGE)
14611                 )
14612                 continue;
14613             }
14614             if (o2) { /* more than one found */
14615                 o2 = NULL;
14616                 break;
14617             }
14618             o2 = kid;
14619         }
14620         if (o2)
14621             return find_uninit_var(o2, uninit_sv, match);
14622
14623         /* scan all args */
14624         while (o) {
14625             sv = find_uninit_var(o, uninit_sv, 1);
14626             if (sv)
14627                 return sv;
14628             o = o->op_sibling;
14629         }
14630         break;
14631     }
14632     return NULL;
14633 }
14634
14635
14636 /*
14637 =for apidoc report_uninit
14638
14639 Print appropriate "Use of uninitialized variable" warning.
14640
14641 =cut
14642 */
14643
14644 void
14645 Perl_report_uninit(pTHX_ const SV *uninit_sv)
14646 {
14647     dVAR;
14648     if (PL_op) {
14649         SV* varname = NULL;
14650         if (uninit_sv && PL_curpad) {
14651             varname = find_uninit_var(PL_op, uninit_sv,0);
14652             if (varname)
14653                 sv_insert(varname, 0, 0, " ", 1);
14654         }
14655         /* diag_listed_as: Use of uninitialized value%s */
14656         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
14657                 SVfARG(varname ? varname : &PL_sv_no),
14658                 " in ", OP_DESC(PL_op));
14659     }
14660     else
14661         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
14662                     "", "", "");
14663 }
14664
14665 /*
14666  * Local variables:
14667  * c-indentation-style: bsd
14668  * c-basic-offset: 4
14669  * indent-tabs-mode: nil
14670  * End:
14671  *
14672  * ex: set ts=8 sts=4 sw=4 et:
14673  */