1db4b9275939626befdbbd07a8e6563400d909d3
[p5sagit/p5-mst-13.2.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  * "I wonder what the Entish is for 'yes' and 'no'," he thought.
10  *
11  *
12  * This file contains the code that creates, manipulates and destroys
13  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14  * structure of an SV, so their creation and destruction is handled
15  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16  * level functions (eg. substr, split, join) for each of the types are
17  * in the pp*.c files.
18  */
19
20 #include "EXTERN.h"
21 #define PERL_IN_SV_C
22 #include "perl.h"
23 #include "regcomp.h"
24
25 #define FCALL *f
26
27 #ifdef __Lynx__
28 /* Missing proto on LynxOS */
29   char *gconvert(double, int, int,  char *);
30 #endif
31
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* if adding more checks watch out for the following tests:
34  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
35  *   lib/utf8.t lib/Unicode/Collate/t/index.t
36  * --jhi
37  */
38 #   define ASSERT_UTF8_CACHE(cache) \
39     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
40                               assert((cache)[2] <= (cache)[3]); \
41                               assert((cache)[3] <= (cache)[1]);} \
42                               } STMT_END
43 #else
44 #   define ASSERT_UTF8_CACHE(cache) NOOP
45 #endif
46
47 #ifdef PERL_OLD_COPY_ON_WRITE
48 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
49 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
50 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
51    on-write.  */
52 #endif
53
54 /* ============================================================================
55
56 =head1 Allocation and deallocation of SVs.
57
58 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
59 sv, av, hv...) contains type and reference count information, and for
60 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
61 contains fields specific to each type.  Some types store all they need
62 in the head, so don't have a body.
63
64 In all but the most memory-paranoid configuations (ex: PURIFY), heads
65 and bodies are allocated out of arenas, which by default are
66 approximately 4K chunks of memory parcelled up into N heads or bodies.
67 Sv-bodies are allocated by their sv-type, guaranteeing size
68 consistency needed to allocate safely from arrays.
69
70 For SV-heads, the first slot in each arena is reserved, and holds a
71 link to the next arena, some flags, and a note of the number of slots.
72 Snaked through each arena chain is a linked list of free items; when
73 this becomes empty, an extra arena is allocated and divided up into N
74 items which are threaded into the free list.
75
76 SV-bodies are similar, but they use arena-sets by default, which
77 separate the link and info from the arena itself, and reclaim the 1st
78 slot in the arena.  SV-bodies are further described later.
79
80 The following global variables are associated with arenas:
81
82     PL_sv_arenaroot     pointer to list of SV arenas
83     PL_sv_root          pointer to list of free SV structures
84
85     PL_body_arenas      head of linked-list of body arenas
86     PL_body_roots[]     array of pointers to list of free bodies of svtype
87                         arrays are indexed by the svtype needed
88
89 A few special SV heads are not allocated from an arena, but are
90 instead directly created in the interpreter structure, eg PL_sv_undef.
91 The size of arenas can be changed from the default by setting
92 PERL_ARENA_SIZE appropriately at compile time.
93
94 The SV arena serves the secondary purpose of allowing still-live SVs
95 to be located and destroyed during final cleanup.
96
97 At the lowest level, the macros new_SV() and del_SV() grab and free
98 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
99 to return the SV to the free list with error checking.) new_SV() calls
100 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
101 SVs in the free list have their SvTYPE field set to all ones.
102
103 At the time of very final cleanup, sv_free_arenas() is called from
104 perl_destruct() to physically free all the arenas allocated since the
105 start of the interpreter.
106
107 The function visit() scans the SV arenas list, and calls a specified
108 function for each SV it finds which is still live - ie which has an SvTYPE
109 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
110 following functions (specified as [function that calls visit()] / [function
111 called by visit() for each SV]):
112
113     sv_report_used() / do_report_used()
114                         dump all remaining SVs (debugging aid)
115
116     sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
117                         Attempt to free all objects pointed to by RVs,
118                         and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
119                         try to do the same for all objects indirectly
120                         referenced by typeglobs too.  Called once from
121                         perl_destruct(), prior to calling sv_clean_all()
122                         below.
123
124     sv_clean_all() / do_clean_all()
125                         SvREFCNT_dec(sv) each remaining SV, possibly
126                         triggering an sv_free(). It also sets the
127                         SVf_BREAK flag on the SV to indicate that the
128                         refcnt has been artificially lowered, and thus
129                         stopping sv_free() from giving spurious warnings
130                         about SVs which unexpectedly have a refcnt
131                         of zero.  called repeatedly from perl_destruct()
132                         until there are no SVs left.
133
134 =head2 Arena allocator API Summary
135
136 Private API to rest of sv.c
137
138     new_SV(),  del_SV(),
139
140     new_XIV(), del_XIV(),
141     new_XNV(), del_XNV(),
142     etc
143
144 Public API:
145
146     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
147
148 =cut
149
150 ============================================================================ */
151
152 /*
153  * "A time to plant, and a time to uproot what was planted..."
154  */
155
156 void
157 Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
158 {
159     dVAR;
160     void *new_chunk;
161     U32 new_chunk_size;
162
163     PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
164
165     new_chunk = (void *)(chunk);
166     new_chunk_size = (chunk_size);
167     if (new_chunk_size > PL_nice_chunk_size) {
168         Safefree(PL_nice_chunk);
169         PL_nice_chunk = (char *) new_chunk;
170         PL_nice_chunk_size = new_chunk_size;
171     } else {
172         Safefree(chunk);
173     }
174 }
175
176 #ifdef DEBUG_LEAKING_SCALARS
177 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
178 #else
179 #  define FREE_SV_DEBUG_FILE(sv)
180 #endif
181
182 #ifdef PERL_POISON
183 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
184 /* Whilst I'd love to do this, it seems that things like to check on
185    unreferenced scalars
186 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
187 */
188 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
189                                 PoisonNew(&SvREFCNT(sv), 1, U32)
190 #else
191 #  define SvARENA_CHAIN(sv)     SvANY(sv)
192 #  define POSION_SV_HEAD(sv)
193 #endif
194
195 #define plant_SV(p) \
196     STMT_START {                                        \
197         FREE_SV_DEBUG_FILE(p);                          \
198         POSION_SV_HEAD(p);                              \
199         SvARENA_CHAIN(p) = (void *)PL_sv_root;          \
200         SvFLAGS(p) = SVTYPEMASK;                        \
201         PL_sv_root = (p);                               \
202         --PL_sv_count;                                  \
203     } STMT_END
204
205 #define uproot_SV(p) \
206     STMT_START {                                        \
207         (p) = PL_sv_root;                               \
208         PL_sv_root = (SV*)SvARENA_CHAIN(p);             \
209         ++PL_sv_count;                                  \
210     } STMT_END
211
212
213 /* make some more SVs by adding another arena */
214
215 STATIC SV*
216 S_more_sv(pTHX)
217 {
218     dVAR;
219     SV* sv;
220
221     if (PL_nice_chunk) {
222         sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
223         PL_nice_chunk = NULL;
224         PL_nice_chunk_size = 0;
225     }
226     else {
227         char *chunk;                /* must use New here to match call to */
228         Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
229         sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
230     }
231     uproot_SV(sv);
232     return sv;
233 }
234
235 /* new_SV(): return a new, empty SV head */
236
237 #ifdef DEBUG_LEAKING_SCALARS
238 /* provide a real function for a debugger to play with */
239 STATIC SV*
240 S_new_SV(pTHX)
241 {
242     SV* sv;
243
244     if (PL_sv_root)
245         uproot_SV(sv);
246     else
247         sv = S_more_sv(aTHX);
248     SvANY(sv) = 0;
249     SvREFCNT(sv) = 1;
250     SvFLAGS(sv) = 0;
251     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
252     sv->sv_debug_line = (U16) (PL_parser
253             ?  PL_parser->copline == NOLINE
254                 ?  PL_curcop
255                     ? CopLINE(PL_curcop)
256                     : 0
257                 : PL_parser->copline
258             : 0);
259     sv->sv_debug_inpad = 0;
260     sv->sv_debug_cloned = 0;
261     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
262     
263     return sv;
264 }
265 #  define new_SV(p) (p)=S_new_SV(aTHX)
266
267 #else
268 #  define new_SV(p) \
269     STMT_START {                                        \
270         if (PL_sv_root)                                 \
271             uproot_SV(p);                               \
272         else                                            \
273             (p) = S_more_sv(aTHX);                      \
274         SvANY(p) = 0;                                   \
275         SvREFCNT(p) = 1;                                \
276         SvFLAGS(p) = 0;                                 \
277     } STMT_END
278 #endif
279
280
281 /* del_SV(): return an empty SV head to the free list */
282
283 #ifdef DEBUGGING
284
285 #define del_SV(p) \
286     STMT_START {                                        \
287         if (DEBUG_D_TEST)                               \
288             del_sv(p);                                  \
289         else                                            \
290             plant_SV(p);                                \
291     } STMT_END
292
293 STATIC void
294 S_del_sv(pTHX_ SV *p)
295 {
296     dVAR;
297
298     PERL_ARGS_ASSERT_DEL_SV;
299
300     if (DEBUG_D_TEST) {
301         SV* sva;
302         bool ok = 0;
303         for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
304             const SV * const sv = sva + 1;
305             const SV * const svend = &sva[SvREFCNT(sva)];
306             if (p >= sv && p < svend) {
307                 ok = 1;
308                 break;
309             }
310         }
311         if (!ok) {
312             if (ckWARN_d(WARN_INTERNAL))        
313                 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
314                             "Attempt to free non-arena SV: 0x%"UVxf
315                             pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
316             return;
317         }
318     }
319     plant_SV(p);
320 }
321
322 #else /* ! DEBUGGING */
323
324 #define del_SV(p)   plant_SV(p)
325
326 #endif /* DEBUGGING */
327
328
329 /*
330 =head1 SV Manipulation Functions
331
332 =for apidoc sv_add_arena
333
334 Given a chunk of memory, link it to the head of the list of arenas,
335 and split it into a list of free SVs.
336
337 =cut
338 */
339
340 void
341 Perl_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
342 {
343     dVAR;
344     SV* const sva = (SV*)ptr;
345     register SV* sv;
346     register SV* svend;
347
348     PERL_ARGS_ASSERT_SV_ADD_ARENA;
349
350     /* The first SV in an arena isn't an SV. */
351     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
352     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
353     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
354
355     PL_sv_arenaroot = sva;
356     PL_sv_root = sva + 1;
357
358     svend = &sva[SvREFCNT(sva) - 1];
359     sv = sva + 1;
360     while (sv < svend) {
361         SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
362 #ifdef DEBUGGING
363         SvREFCNT(sv) = 0;
364 #endif
365         /* Must always set typemask because it's always checked in on cleanup
366            when the arenas are walked looking for objects.  */
367         SvFLAGS(sv) = SVTYPEMASK;
368         sv++;
369     }
370     SvARENA_CHAIN(sv) = 0;
371 #ifdef DEBUGGING
372     SvREFCNT(sv) = 0;
373 #endif
374     SvFLAGS(sv) = SVTYPEMASK;
375 }
376
377 /* visit(): call the named function for each non-free SV in the arenas
378  * whose flags field matches the flags/mask args. */
379
380 STATIC I32
381 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
382 {
383     dVAR;
384     SV* sva;
385     I32 visited = 0;
386
387     PERL_ARGS_ASSERT_VISIT;
388
389     for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
390         register const SV * const svend = &sva[SvREFCNT(sva)];
391         register SV* sv;
392         for (sv = sva + 1; sv < svend; ++sv) {
393             if (SvTYPE(sv) != SVTYPEMASK
394                     && (sv->sv_flags & mask) == flags
395                     && SvREFCNT(sv))
396             {
397                 (FCALL)(aTHX_ sv);
398                 ++visited;
399             }
400         }
401     }
402     return visited;
403 }
404
405 #ifdef DEBUGGING
406
407 /* called by sv_report_used() for each live SV */
408
409 static void
410 do_report_used(pTHX_ SV *const sv)
411 {
412     if (SvTYPE(sv) != SVTYPEMASK) {
413         PerlIO_printf(Perl_debug_log, "****\n");
414         sv_dump(sv);
415     }
416 }
417 #endif
418
419 /*
420 =for apidoc sv_report_used
421
422 Dump the contents of all SVs not yet freed. (Debugging aid).
423
424 =cut
425 */
426
427 void
428 Perl_sv_report_used(pTHX)
429 {
430 #ifdef DEBUGGING
431     visit(do_report_used, 0, 0);
432 #else
433     PERL_UNUSED_CONTEXT;
434 #endif
435 }
436
437 /* called by sv_clean_objs() for each live SV */
438
439 static void
440 do_clean_objs(pTHX_ SV *const ref)
441 {
442     dVAR;
443     assert (SvROK(ref));
444     {
445         SV * const target = SvRV(ref);
446         if (SvOBJECT(target)) {
447             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
448             if (SvWEAKREF(ref)) {
449                 sv_del_backref(target, ref);
450                 SvWEAKREF_off(ref);
451                 SvRV_set(ref, NULL);
452             } else {
453                 SvROK_off(ref);
454                 SvRV_set(ref, NULL);
455                 SvREFCNT_dec(target);
456             }
457         }
458     }
459
460     /* XXX Might want to check arrays, etc. */
461 }
462
463 /* called by sv_clean_objs() for each live SV */
464
465 #ifndef DISABLE_DESTRUCTOR_KLUDGE
466 static void
467 do_clean_named_objs(pTHX_ SV *const sv)
468 {
469     dVAR;
470     assert(SvTYPE(sv) == SVt_PVGV);
471     assert(isGV_with_GP(sv));
472     if (GvGP(sv)) {
473         if ((
474 #ifdef PERL_DONT_CREATE_GVSV
475              GvSV(sv) &&
476 #endif
477              SvOBJECT(GvSV(sv))) ||
478              (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
479              (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
480              /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
481              (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
482              (GvCV(sv) && SvOBJECT(GvCV(sv))) )
483         {
484             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
485             SvFLAGS(sv) |= SVf_BREAK;
486             SvREFCNT_dec(sv);
487         }
488     }
489 }
490 #endif
491
492 /*
493 =for apidoc sv_clean_objs
494
495 Attempt to destroy all objects not yet freed
496
497 =cut
498 */
499
500 void
501 Perl_sv_clean_objs(pTHX)
502 {
503     dVAR;
504     PL_in_clean_objs = TRUE;
505     visit(do_clean_objs, SVf_ROK, SVf_ROK);
506 #ifndef DISABLE_DESTRUCTOR_KLUDGE
507     /* some barnacles may yet remain, clinging to typeglobs */
508     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
509 #endif
510     PL_in_clean_objs = FALSE;
511 }
512
513 /* called by sv_clean_all() for each live SV */
514
515 static void
516 do_clean_all(pTHX_ SV *const sv)
517 {
518     dVAR;
519     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
520     SvFLAGS(sv) |= SVf_BREAK;
521     SvREFCNT_dec(sv);
522 }
523
524 /*
525 =for apidoc sv_clean_all
526
527 Decrement the refcnt of each remaining SV, possibly triggering a
528 cleanup. This function may have to be called multiple times to free
529 SVs which are in complex self-referential hierarchies.
530
531 =cut
532 */
533
534 I32
535 Perl_sv_clean_all(pTHX)
536 {
537     dVAR;
538     I32 cleaned;
539     PL_in_clean_all = TRUE;
540     cleaned = visit(do_clean_all, 0,0);
541     PL_in_clean_all = FALSE;
542     return cleaned;
543 }
544
545 /*
546   ARENASETS: a meta-arena implementation which separates arena-info
547   into struct arena_set, which contains an array of struct
548   arena_descs, each holding info for a single arena.  By separating
549   the meta-info from the arena, we recover the 1st slot, formerly
550   borrowed for list management.  The arena_set is about the size of an
551   arena, avoiding the needless malloc overhead of a naive linked-list.
552
553   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
554   memory in the last arena-set (1/2 on average).  In trade, we get
555   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
556   smaller types).  The recovery of the wasted space allows use of
557   small arenas for large, rare body types, by changing array* fields
558   in body_details_by_type[] below.
559 */
560 struct arena_desc {
561     char       *arena;          /* the raw storage, allocated aligned */
562     size_t      size;           /* its size ~4k typ */
563     U32         misc;           /* type, and in future other things. */
564 };
565
566 struct arena_set;
567
568 /* Get the maximum number of elements in set[] such that struct arena_set
569    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
570    therefore likely to be 1 aligned memory page.  */
571
572 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
573                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
574
575 struct arena_set {
576     struct arena_set* next;
577     unsigned int   set_size;    /* ie ARENAS_PER_SET */
578     unsigned int   curr;        /* index of next available arena-desc */
579     struct arena_desc set[ARENAS_PER_SET];
580 };
581
582 /*
583 =for apidoc sv_free_arenas
584
585 Deallocate the memory used by all arenas. Note that all the individual SV
586 heads and bodies within the arenas must already have been freed.
587
588 =cut
589 */
590 void
591 Perl_sv_free_arenas(pTHX)
592 {
593     dVAR;
594     SV* sva;
595     SV* svanext;
596     unsigned int i;
597
598     /* Free arenas here, but be careful about fake ones.  (We assume
599        contiguity of the fake ones with the corresponding real ones.) */
600
601     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
602         svanext = (SV*) SvANY(sva);
603         while (svanext && SvFAKE(svanext))
604             svanext = (SV*) SvANY(svanext);
605
606         if (!SvFAKE(sva))
607             Safefree(sva);
608     }
609
610     {
611         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
612
613         while (aroot) {
614             struct arena_set *current = aroot;
615             i = aroot->curr;
616             while (i--) {
617                 assert(aroot->set[i].arena);
618                 Safefree(aroot->set[i].arena);
619             }
620             aroot = aroot->next;
621             Safefree(current);
622         }
623     }
624     PL_body_arenas = 0;
625
626     i = PERL_ARENA_ROOTS_SIZE;
627     while (i--)
628         PL_body_roots[i] = 0;
629
630     Safefree(PL_nice_chunk);
631     PL_nice_chunk = NULL;
632     PL_nice_chunk_size = 0;
633     PL_sv_arenaroot = 0;
634     PL_sv_root = 0;
635 }
636
637 /*
638   Here are mid-level routines that manage the allocation of bodies out
639   of the various arenas.  There are 5 kinds of arenas:
640
641   1. SV-head arenas, which are discussed and handled above
642   2. regular body arenas
643   3. arenas for reduced-size bodies
644   4. Hash-Entry arenas
645   5. pte arenas (thread related)
646
647   Arena types 2 & 3 are chained by body-type off an array of
648   arena-root pointers, which is indexed by svtype.  Some of the
649   larger/less used body types are malloced singly, since a large
650   unused block of them is wasteful.  Also, several svtypes dont have
651   bodies; the data fits into the sv-head itself.  The arena-root
652   pointer thus has a few unused root-pointers (which may be hijacked
653   later for arena types 4,5)
654
655   3 differs from 2 as an optimization; some body types have several
656   unused fields in the front of the structure (which are kept in-place
657   for consistency).  These bodies can be allocated in smaller chunks,
658   because the leading fields arent accessed.  Pointers to such bodies
659   are decremented to point at the unused 'ghost' memory, knowing that
660   the pointers are used with offsets to the real memory.
661
662   HE, HEK arenas are managed separately, with separate code, but may
663   be merge-able later..
664
665   PTE arenas are not sv-bodies, but they share these mid-level
666   mechanics, so are considered here.  The new mid-level mechanics rely
667   on the sv_type of the body being allocated, so we just reserve one
668   of the unused body-slots for PTEs, then use it in those (2) PTE
669   contexts below (line ~10k)
670 */
671
672 /* get_arena(size): this creates custom-sized arenas
673    TBD: export properly for hv.c: S_more_he().
674 */
675 void*
676 Perl_get_arena(pTHX_ const size_t arena_size, const U32 misc)
677 {
678     dVAR;
679     struct arena_desc* adesc;
680     struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
681     unsigned int curr;
682
683     /* shouldnt need this
684     if (!arena_size)    arena_size = PERL_ARENA_SIZE;
685     */
686
687     /* may need new arena-set to hold new arena */
688     if (!aroot || aroot->curr >= aroot->set_size) {
689         struct arena_set *newroot;
690         Newxz(newroot, 1, struct arena_set);
691         newroot->set_size = ARENAS_PER_SET;
692         newroot->next = aroot;
693         aroot = newroot;
694         PL_body_arenas = (void *) newroot;
695         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
696     }
697
698     /* ok, now have arena-set with at least 1 empty/available arena-desc */
699     curr = aroot->curr++;
700     adesc = &(aroot->set[curr]);
701     assert(!adesc->arena);
702     
703     Newx(adesc->arena, arena_size, char);
704     adesc->size = arena_size;
705     adesc->misc = misc;
706     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
707                           curr, (void*)adesc->arena, (UV)arena_size));
708
709     return adesc->arena;
710 }
711
712
713 /* return a thing to the free list */
714
715 #define del_body(thing, root)                   \
716     STMT_START {                                \
717         void ** const thing_copy = (void **)thing;\
718         *thing_copy = *root;                    \
719         *root = (void*)thing_copy;              \
720     } STMT_END
721
722 /* 
723
724 =head1 SV-Body Allocation
725
726 Allocation of SV-bodies is similar to SV-heads, differing as follows;
727 the allocation mechanism is used for many body types, so is somewhat
728 more complicated, it uses arena-sets, and has no need for still-live
729 SV detection.
730
731 At the outermost level, (new|del)_X*V macros return bodies of the
732 appropriate type.  These macros call either (new|del)_body_type or
733 (new|del)_body_allocated macro pairs, depending on specifics of the
734 type.  Most body types use the former pair, the latter pair is used to
735 allocate body types with "ghost fields".
736
737 "ghost fields" are fields that are unused in certain types, and
738 consequently dont need to actually exist.  They are declared because
739 they're part of a "base type", which allows use of functions as
740 methods.  The simplest examples are AVs and HVs, 2 aggregate types
741 which don't use the fields which support SCALAR semantics.
742
743 For these types, the arenas are carved up into *_allocated size
744 chunks, we thus avoid wasted memory for those unaccessed members.
745 When bodies are allocated, we adjust the pointer back in memory by the
746 size of the bit not allocated, so it's as if we allocated the full
747 structure.  (But things will all go boom if you write to the part that
748 is "not there", because you'll be overwriting the last members of the
749 preceding structure in memory.)
750
751 We calculate the correction using the STRUCT_OFFSET macro. For
752 example, if xpv_allocated is the same structure as XPV then the two
753 OFFSETs sum to zero, and the pointer is unchanged. If the allocated
754 structure is smaller (no initial NV actually allocated) then the net
755 effect is to subtract the size of the NV from the pointer, to return a
756 new pointer as if an initial NV were actually allocated.
757
758 This is the same trick as was used for NV and IV bodies. Ironically it
759 doesn't need to be used for NV bodies any more, because NV is now at
760 the start of the structure. IV bodies don't need it either, because
761 they are no longer allocated.
762
763 In turn, the new_body_* allocators call S_new_body(), which invokes
764 new_body_inline macro, which takes a lock, and takes a body off the
765 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
766 necessary to refresh an empty list.  Then the lock is released, and
767 the body is returned.
768
769 S_more_bodies calls get_arena(), and carves it up into an array of N
770 bodies, which it strings into a linked list.  It looks up arena-size
771 and body-size from the body_details table described below, thus
772 supporting the multiple body-types.
773
774 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
775 the (new|del)_X*V macros are mapped directly to malloc/free.
776
777 */
778
779 /* 
780
781 For each sv-type, struct body_details bodies_by_type[] carries
782 parameters which control these aspects of SV handling:
783
784 Arena_size determines whether arenas are used for this body type, and if
785 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
786 zero, forcing individual mallocs and frees.
787
788 Body_size determines how big a body is, and therefore how many fit into
789 each arena.  Offset carries the body-pointer adjustment needed for
790 *_allocated body types, and is used in *_allocated macros.
791
792 But its main purpose is to parameterize info needed in
793 Perl_sv_upgrade().  The info here dramatically simplifies the function
794 vs the implementation in 5.8.7, making it table-driven.  All fields
795 are used for this, except for arena_size.
796
797 For the sv-types that have no bodies, arenas are not used, so those
798 PL_body_roots[sv_type] are unused, and can be overloaded.  In
799 something of a special case, SVt_NULL is borrowed for HE arenas;
800 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
801 bodies_by_type[SVt_NULL] slot is not used, as the table is not
802 available in hv.c.
803
804 PTEs also use arenas, but are never seen in Perl_sv_upgrade. Nonetheless,
805 they get their own slot in bodies_by_type[PTE_SVSLOT =SVt_IV], so they can
806 just use the same allocation semantics.  At first, PTEs were also
807 overloaded to a non-body sv-type, but this yielded hard-to-find malloc
808 bugs, so was simplified by claiming a new slot.  This choice has no
809 consequence at this time.
810
811 */
812
813 struct body_details {
814     U8 body_size;       /* Size to allocate  */
815     U8 copy;            /* Size of structure to copy (may be shorter)  */
816     U8 offset;
817     unsigned int type : 4;          /* We have space for a sanity check.  */
818     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
819     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
820     unsigned int arena : 1;         /* Allocated from an arena */
821     size_t arena_size;              /* Size of arena to allocate */
822 };
823
824 #define HADNV FALSE
825 #define NONV TRUE
826
827
828 #ifdef PURIFY
829 /* With -DPURFIY we allocate everything directly, and don't use arenas.
830    This seems a rather elegant way to simplify some of the code below.  */
831 #define HASARENA FALSE
832 #else
833 #define HASARENA TRUE
834 #endif
835 #define NOARENA FALSE
836
837 /* Size the arenas to exactly fit a given number of bodies.  A count
838    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
839    simplifying the default.  If count > 0, the arena is sized to fit
840    only that many bodies, allowing arenas to be used for large, rare
841    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
842    limited by PERL_ARENA_SIZE, so we can safely oversize the
843    declarations.
844  */
845 #define FIT_ARENA0(body_size)                           \
846     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
847 #define FIT_ARENAn(count,body_size)                     \
848     ( count * body_size <= PERL_ARENA_SIZE)             \
849     ? count * body_size                                 \
850     : FIT_ARENA0 (body_size)
851 #define FIT_ARENA(count,body_size)                      \
852     count                                               \
853     ? FIT_ARENAn (count, body_size)                     \
854     : FIT_ARENA0 (body_size)
855
856 /* A macro to work out the offset needed to subtract from a pointer to (say)
857
858 typedef struct {
859     STRLEN      xpv_cur;
860     STRLEN      xpv_len;
861 } xpv_allocated;
862
863 to make its members accessible via a pointer to (say)
864
865 struct xpv {
866     NV          xnv_nv;
867     STRLEN      xpv_cur;
868     STRLEN      xpv_len;
869 };
870
871 */
872
873 #define relative_STRUCT_OFFSET(longer, shorter, member) \
874     (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
875
876 /* Calculate the length to copy. Specifically work out the length less any
877    final padding the compiler needed to add.  See the comment in sv_upgrade
878    for why copying the padding proved to be a bug.  */
879
880 #define copy_length(type, last_member) \
881         STRUCT_OFFSET(type, last_member) \
882         + sizeof (((type*)SvANY((SV*)0))->last_member)
883
884 static const struct body_details bodies_by_type[] = {
885     { sizeof(HE), 0, 0, SVt_NULL,
886       FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
887
888     /* The bind placeholder pretends to be an RV for now.
889        Also it's marked as "can't upgrade" to stop anyone using it before it's
890        implemented.  */
891     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
892
893     /* IVs are in the head, so the allocation size is 0.
894        However, the slot is overloaded for PTEs.  */
895     { sizeof(struct ptr_tbl_ent), /* This is used for PTEs.  */
896       sizeof(IV), /* This is used to copy out the IV body.  */
897       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
898       NOARENA /* IVS don't need an arena  */,
899       /* But PTEs need to know the size of their arena  */
900       FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
901     },
902
903     /* 8 bytes on most ILP32 with IEEE doubles */
904     { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
905       FIT_ARENA(0, sizeof(NV)) },
906
907     /* 8 bytes on most ILP32 with IEEE doubles */
908     { sizeof(xpv_allocated),
909       copy_length(XPV, xpv_len)
910       - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
911       + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
912       SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
913
914     /* 12 */
915     { sizeof(xpviv_allocated),
916       copy_length(XPVIV, xiv_u)
917       - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
918       + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
919       SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
920
921     /* 20 */
922     { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
923       HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
924
925     /* 28 */
926     { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
927       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
928
929     /* something big */
930     { sizeof(struct regexp_allocated), sizeof(struct regexp_allocated),
931       + relative_STRUCT_OFFSET(struct regexp_allocated, regexp, xpv_cur),
932       SVt_REGEXP, FALSE, NONV, HASARENA,
933       FIT_ARENA(0, sizeof(struct regexp_allocated))
934     },
935
936     /* 48 */
937     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
938       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
939     
940     /* 64 */
941     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
942       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
943
944     { sizeof(xpvav_allocated),
945       copy_length(XPVAV, xmg_stash)
946       - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
947       + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
948       SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
949
950     { sizeof(xpvhv_allocated),
951       copy_length(XPVHV, xmg_stash)
952       - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
953       + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
954       SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
955
956     /* 56 */
957     { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
958       + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
959       SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
960
961     { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
962       + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
963       SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
964
965     /* XPVIO is 84 bytes, fits 48x */
966     { sizeof(xpvio_allocated), sizeof(xpvio_allocated),
967       + relative_STRUCT_OFFSET(xpvio_allocated, XPVIO, xpv_cur),
968       SVt_PVIO, TRUE, NONV, HASARENA, FIT_ARENA(24, sizeof(xpvio_allocated)) },
969 };
970
971 #define new_body_type(sv_type)          \
972     (void *)((char *)S_new_body(aTHX_ sv_type))
973
974 #define del_body_type(p, sv_type)       \
975     del_body(p, &PL_body_roots[sv_type])
976
977
978 #define new_body_allocated(sv_type)             \
979     (void *)((char *)S_new_body(aTHX_ sv_type)  \
980              - bodies_by_type[sv_type].offset)
981
982 #define del_body_allocated(p, sv_type)          \
983     del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
984
985
986 #define my_safemalloc(s)        (void*)safemalloc(s)
987 #define my_safecalloc(s)        (void*)safecalloc(s, 1)
988 #define my_safefree(p)  safefree((char*)p)
989
990 #ifdef PURIFY
991
992 #define new_XNV()       my_safemalloc(sizeof(XPVNV))
993 #define del_XNV(p)      my_safefree(p)
994
995 #define new_XPVNV()     my_safemalloc(sizeof(XPVNV))
996 #define del_XPVNV(p)    my_safefree(p)
997
998 #define new_XPVAV()     my_safemalloc(sizeof(XPVAV))
999 #define del_XPVAV(p)    my_safefree(p)
1000
1001 #define new_XPVHV()     my_safemalloc(sizeof(XPVHV))
1002 #define del_XPVHV(p)    my_safefree(p)
1003
1004 #define new_XPVMG()     my_safemalloc(sizeof(XPVMG))
1005 #define del_XPVMG(p)    my_safefree(p)
1006
1007 #define new_XPVGV()     my_safemalloc(sizeof(XPVGV))
1008 #define del_XPVGV(p)    my_safefree(p)
1009
1010 #else /* !PURIFY */
1011
1012 #define new_XNV()       new_body_type(SVt_NV)
1013 #define del_XNV(p)      del_body_type(p, SVt_NV)
1014
1015 #define new_XPVNV()     new_body_type(SVt_PVNV)
1016 #define del_XPVNV(p)    del_body_type(p, SVt_PVNV)
1017
1018 #define new_XPVAV()     new_body_allocated(SVt_PVAV)
1019 #define del_XPVAV(p)    del_body_allocated(p, SVt_PVAV)
1020
1021 #define new_XPVHV()     new_body_allocated(SVt_PVHV)
1022 #define del_XPVHV(p)    del_body_allocated(p, SVt_PVHV)
1023
1024 #define new_XPVMG()     new_body_type(SVt_PVMG)
1025 #define del_XPVMG(p)    del_body_type(p, SVt_PVMG)
1026
1027 #define new_XPVGV()     new_body_type(SVt_PVGV)
1028 #define del_XPVGV(p)    del_body_type(p, SVt_PVGV)
1029
1030 #endif /* PURIFY */
1031
1032 /* no arena for you! */
1033
1034 #define new_NOARENA(details) \
1035         my_safemalloc((details)->body_size + (details)->offset)
1036 #define new_NOARENAZ(details) \
1037         my_safecalloc((details)->body_size + (details)->offset)
1038
1039 STATIC void *
1040 S_more_bodies (pTHX_ const svtype sv_type)
1041 {
1042     dVAR;
1043     void ** const root = &PL_body_roots[sv_type];
1044     const struct body_details * const bdp = &bodies_by_type[sv_type];
1045     const size_t body_size = bdp->body_size;
1046     char *start;
1047     const char *end;
1048     const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
1049 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1050     static bool done_sanity_check;
1051
1052     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1053      * variables like done_sanity_check. */
1054     if (!done_sanity_check) {
1055         unsigned int i = SVt_LAST;
1056
1057         done_sanity_check = TRUE;
1058
1059         while (i--)
1060             assert (bodies_by_type[i].type == i);
1061     }
1062 #endif
1063
1064     assert(bdp->arena_size);
1065
1066     start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
1067
1068     end = start + arena_size - 2 * body_size;
1069
1070     /* computed count doesnt reflect the 1st slot reservation */
1071 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1072     DEBUG_m(PerlIO_printf(Perl_debug_log,
1073                           "arena %p end %p arena-size %d (from %d) type %d "
1074                           "size %d ct %d\n",
1075                           (void*)start, (void*)end, (int)arena_size,
1076                           (int)bdp->arena_size, sv_type, (int)body_size,
1077                           (int)arena_size / (int)body_size));
1078 #else
1079     DEBUG_m(PerlIO_printf(Perl_debug_log,
1080                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1081                           (void*)start, (void*)end,
1082                           (int)bdp->arena_size, sv_type, (int)body_size,
1083                           (int)bdp->arena_size / (int)body_size));
1084 #endif
1085     *root = (void *)start;
1086
1087     while (start <= end) {
1088         char * const next = start + body_size;
1089         *(void**) start = (void *)next;
1090         start = next;
1091     }
1092     *(void **)start = 0;
1093
1094     return *root;
1095 }
1096
1097 /* grab a new thing from the free list, allocating more if necessary.
1098    The inline version is used for speed in hot routines, and the
1099    function using it serves the rest (unless PURIFY).
1100 */
1101 #define new_body_inline(xpv, sv_type) \
1102     STMT_START { \
1103         void ** const r3wt = &PL_body_roots[sv_type]; \
1104         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1105           ? *((void **)(r3wt)) : more_bodies(sv_type)); \
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 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1131
1132 =cut
1133 */
1134
1135 void
1136 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1137 {
1138     dVAR;
1139     void*       old_body;
1140     void*       new_body;
1141     const svtype old_type = SvTYPE(sv);
1142     const struct body_details *new_type_details;
1143     const struct body_details *old_type_details
1144         = bodies_by_type + old_type;
1145     SV *referant = NULL;
1146
1147     PERL_ARGS_ASSERT_SV_UPGRADE;
1148
1149     if (new_type != SVt_PV && SvIsCOW(sv)) {
1150         sv_force_normal_flags(sv, 0);
1151     }
1152
1153     if (old_type == new_type)
1154         return;
1155
1156     old_body = SvANY(sv);
1157
1158     /* Copying structures onto other structures that have been neatly zeroed
1159        has a subtle gotcha. Consider XPVMG
1160
1161        +------+------+------+------+------+-------+-------+
1162        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1163        +------+------+------+------+------+-------+-------+
1164        0      4      8     12     16     20      24      28
1165
1166        where NVs are aligned to 8 bytes, so that sizeof that structure is
1167        actually 32 bytes long, with 4 bytes of padding at the end:
1168
1169        +------+------+------+------+------+-------+-------+------+
1170        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1171        +------+------+------+------+------+-------+-------+------+
1172        0      4      8     12     16     20      24      28     32
1173
1174        so what happens if you allocate memory for this structure:
1175
1176        +------+------+------+------+------+-------+-------+------+------+...
1177        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1178        +------+------+------+------+------+-------+-------+------+------+...
1179        0      4      8     12     16     20      24      28     32     36
1180
1181        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1182        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1183        started out as zero once, but it's quite possible that it isn't. So now,
1184        rather than a nicely zeroed GP, you have it pointing somewhere random.
1185        Bugs ensue.
1186
1187        (In fact, GP ends up pointing at a previous GP structure, because the
1188        principle cause of the padding in XPVMG getting garbage is a copy of
1189        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1190        this happens to be moot because XPVGV has been re-ordered, with GP
1191        no longer after STASH)
1192
1193        So we are careful and work out the size of used parts of all the
1194        structures.  */
1195
1196     switch (old_type) {
1197     case SVt_NULL:
1198         break;
1199     case SVt_IV:
1200         if (SvROK(sv)) {
1201             referant = SvRV(sv);
1202             old_type_details = &fake_rv;
1203             if (new_type == SVt_NV)
1204                 new_type = SVt_PVNV;
1205         } else {
1206             if (new_type < SVt_PVIV) {
1207                 new_type = (new_type == SVt_NV)
1208                     ? SVt_PVNV : SVt_PVIV;
1209             }
1210         }
1211         break;
1212     case SVt_NV:
1213         if (new_type < SVt_PVNV) {
1214             new_type = SVt_PVNV;
1215         }
1216         break;
1217     case SVt_PV:
1218         assert(new_type > SVt_PV);
1219         assert(SVt_IV < SVt_PV);
1220         assert(SVt_NV < SVt_PV);
1221         break;
1222     case SVt_PVIV:
1223         break;
1224     case SVt_PVNV:
1225         break;
1226     case SVt_PVMG:
1227         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1228            there's no way that it can be safely upgraded, because perl.c
1229            expects to Safefree(SvANY(PL_mess_sv))  */
1230         assert(sv != PL_mess_sv);
1231         /* This flag bit is used to mean other things in other scalar types.
1232            Given that it only has meaning inside the pad, it shouldn't be set
1233            on anything that can get upgraded.  */
1234         assert(!SvPAD_TYPED(sv));
1235         break;
1236     default:
1237         if (old_type_details->cant_upgrade)
1238             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1239                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1240     }
1241
1242     if (old_type > new_type)
1243         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1244                 (int)old_type, (int)new_type);
1245
1246     new_type_details = bodies_by_type + new_type;
1247
1248     SvFLAGS(sv) &= ~SVTYPEMASK;
1249     SvFLAGS(sv) |= new_type;
1250
1251     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1252        the return statements above will have triggered.  */
1253     assert (new_type != SVt_NULL);
1254     switch (new_type) {
1255     case SVt_IV:
1256         assert(old_type == SVt_NULL);
1257         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1258         SvIV_set(sv, 0);
1259         return;
1260     case SVt_NV:
1261         assert(old_type == SVt_NULL);
1262         SvANY(sv) = new_XNV();
1263         SvNV_set(sv, 0);
1264         return;
1265     case SVt_PVHV:
1266     case SVt_PVAV:
1267         assert(new_type_details->body_size);
1268
1269 #ifndef PURIFY  
1270         assert(new_type_details->arena);
1271         assert(new_type_details->arena_size);
1272         /* This points to the start of the allocated area.  */
1273         new_body_inline(new_body, new_type);
1274         Zero(new_body, new_type_details->body_size, char);
1275         new_body = ((char *)new_body) - new_type_details->offset;
1276 #else
1277         /* We always allocated the full length item with PURIFY. To do this
1278            we fake things so that arena is false for all 16 types..  */
1279         new_body = new_NOARENAZ(new_type_details);
1280 #endif
1281         SvANY(sv) = new_body;
1282         if (new_type == SVt_PVAV) {
1283             AvMAX(sv)   = -1;
1284             AvFILLp(sv) = -1;
1285             AvREAL_only(sv);
1286             if (old_type_details->body_size) {
1287                 AvALLOC(sv) = 0;
1288             } else {
1289                 /* It will have been zeroed when the new body was allocated.
1290                    Lets not write to it, in case it confuses a write-back
1291                    cache.  */
1292             }
1293         } else {
1294             assert(!SvOK(sv));
1295             SvOK_off(sv);
1296 #ifndef NODEFAULT_SHAREKEYS
1297             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1298 #endif
1299             HvMAX(sv) = 7; /* (start with 8 buckets) */
1300             if (old_type_details->body_size) {
1301                 HvFILL(sv) = 0;
1302             } else {
1303                 /* It will have been zeroed when the new body was allocated.
1304                    Lets not write to it, in case it confuses a write-back
1305                    cache.  */
1306             }
1307         }
1308
1309         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1310            The target created by newSVrv also is, and it can have magic.
1311            However, it never has SvPVX set.
1312         */
1313         if (old_type == SVt_IV) {
1314             assert(!SvROK(sv));
1315         } else if (old_type >= SVt_PV) {
1316             assert(SvPVX_const(sv) == 0);
1317         }
1318
1319         if (old_type >= SVt_PVMG) {
1320             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1321             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1322         } else {
1323             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1324         }
1325         break;
1326
1327
1328     case SVt_PVIV:
1329         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1330            no route from NV to PVIV, NOK can never be true  */
1331         assert(!SvNOKp(sv));
1332         assert(!SvNOK(sv));
1333     case SVt_PVIO:
1334     case SVt_PVFM:
1335     case SVt_PVGV:
1336     case SVt_PVCV:
1337     case SVt_PVLV:
1338     case SVt_REGEXP:
1339     case SVt_PVMG:
1340     case SVt_PVNV:
1341     case SVt_PV:
1342
1343         assert(new_type_details->body_size);
1344         /* We always allocated the full length item with PURIFY. To do this
1345            we fake things so that arena is false for all 16 types..  */
1346         if(new_type_details->arena) {
1347             /* This points to the start of the allocated area.  */
1348             new_body_inline(new_body, new_type);
1349             Zero(new_body, new_type_details->body_size, char);
1350             new_body = ((char *)new_body) - new_type_details->offset;
1351         } else {
1352             new_body = new_NOARENAZ(new_type_details);
1353         }
1354         SvANY(sv) = new_body;
1355
1356         if (old_type_details->copy) {
1357             /* There is now the potential for an upgrade from something without
1358                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1359             int offset = old_type_details->offset;
1360             int length = old_type_details->copy;
1361
1362             if (new_type_details->offset > old_type_details->offset) {
1363                 const int difference
1364                     = new_type_details->offset - old_type_details->offset;
1365                 offset += difference;
1366                 length -= difference;
1367             }
1368             assert (length >= 0);
1369                 
1370             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1371                  char);
1372         }
1373
1374 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1375         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1376          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1377          * NV slot, but the new one does, then we need to initialise the
1378          * freshly created NV slot with whatever the correct bit pattern is
1379          * for 0.0  */
1380         if (old_type_details->zero_nv && !new_type_details->zero_nv
1381             && !isGV_with_GP(sv))
1382             SvNV_set(sv, 0);
1383 #endif
1384
1385         if (new_type == SVt_PVIO)
1386             IoPAGE_LEN(sv) = 60;
1387         if (old_type < SVt_PV) {
1388             /* referant will be NULL unless the old type was SVt_IV emulating
1389                SVt_RV */
1390             sv->sv_u.svu_rv = referant;
1391         }
1392         break;
1393     default:
1394         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1395                    (unsigned long)new_type);
1396     }
1397
1398     if (old_type_details->arena) {
1399         /* If there was an old body, then we need to free it.
1400            Note that there is an assumption that all bodies of types that
1401            can be upgraded came from arenas. Only the more complex non-
1402            upgradable types are allowed to be directly malloc()ed.  */
1403 #ifdef PURIFY
1404         my_safefree(old_body);
1405 #else
1406         del_body((void*)((char*)old_body + old_type_details->offset),
1407                  &PL_body_roots[old_type]);
1408 #endif
1409     }
1410 }
1411
1412 /*
1413 =for apidoc sv_backoff
1414
1415 Remove any string offset. You should normally use the C<SvOOK_off> macro
1416 wrapper instead.
1417
1418 =cut
1419 */
1420
1421 int
1422 Perl_sv_backoff(pTHX_ register SV *const sv)
1423 {
1424     STRLEN delta;
1425     const char * const s = SvPVX_const(sv);
1426
1427     PERL_ARGS_ASSERT_SV_BACKOFF;
1428     PERL_UNUSED_CONTEXT;
1429
1430     assert(SvOOK(sv));
1431     assert(SvTYPE(sv) != SVt_PVHV);
1432     assert(SvTYPE(sv) != SVt_PVAV);
1433
1434     SvOOK_offset(sv, delta);
1435     
1436     SvLEN_set(sv, SvLEN(sv) + delta);
1437     SvPV_set(sv, SvPVX(sv) - delta);
1438     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1439     SvFLAGS(sv) &= ~SVf_OOK;
1440     return 0;
1441 }
1442
1443 /*
1444 =for apidoc sv_grow
1445
1446 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1447 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1448 Use the C<SvGROW> wrapper instead.
1449
1450 =cut
1451 */
1452
1453 char *
1454 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1455 {
1456     register char *s;
1457
1458     PERL_ARGS_ASSERT_SV_GROW;
1459
1460     if (PL_madskills && newlen >= 0x100000) {
1461         PerlIO_printf(Perl_debug_log,
1462                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1463     }
1464 #ifdef HAS_64K_LIMIT
1465     if (newlen >= 0x10000) {
1466         PerlIO_printf(Perl_debug_log,
1467                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1468         my_exit(1);
1469     }
1470 #endif /* HAS_64K_LIMIT */
1471     if (SvROK(sv))
1472         sv_unref(sv);
1473     if (SvTYPE(sv) < SVt_PV) {
1474         sv_upgrade(sv, SVt_PV);
1475         s = SvPVX_mutable(sv);
1476     }
1477     else if (SvOOK(sv)) {       /* pv is offset? */
1478         sv_backoff(sv);
1479         s = SvPVX_mutable(sv);
1480         if (newlen > SvLEN(sv))
1481             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1482 #ifdef HAS_64K_LIMIT
1483         if (newlen >= 0x10000)
1484             newlen = 0xFFFF;
1485 #endif
1486     }
1487     else
1488         s = SvPVX_mutable(sv);
1489
1490     if (newlen > SvLEN(sv)) {           /* need more room? */
1491 #ifndef MYMALLOC
1492         newlen = PERL_STRLEN_ROUNDUP(newlen);
1493 #endif
1494         if (SvLEN(sv) && s) {
1495             s = (char*)saferealloc(s, newlen);
1496         }
1497         else {
1498             s = (char*)safemalloc(newlen);
1499             if (SvPVX_const(sv) && SvCUR(sv)) {
1500                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1501             }
1502         }
1503         SvPV_set(sv, s);
1504 #ifdef Perl_safesysmalloc_size
1505         /* Do this here, do it once, do it right, and then we will never get
1506            called back into sv_grow() unless there really is some growing
1507            needed.  */
1508         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1509 #else
1510         SvLEN_set(sv, newlen);
1511 #endif
1512     }
1513     return s;
1514 }
1515
1516 /*
1517 =for apidoc sv_setiv
1518
1519 Copies an integer into the given SV, upgrading first if necessary.
1520 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1521
1522 =cut
1523 */
1524
1525 void
1526 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1527 {
1528     dVAR;
1529
1530     PERL_ARGS_ASSERT_SV_SETIV;
1531
1532     SV_CHECK_THINKFIRST_COW_DROP(sv);
1533     switch (SvTYPE(sv)) {
1534     case SVt_NULL:
1535     case SVt_NV:
1536         sv_upgrade(sv, SVt_IV);
1537         break;
1538     case SVt_PV:
1539         sv_upgrade(sv, SVt_PVIV);
1540         break;
1541
1542     case SVt_PVGV:
1543     case SVt_PVAV:
1544     case SVt_PVHV:
1545     case SVt_PVCV:
1546     case SVt_PVFM:
1547     case SVt_PVIO:
1548         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1549                    OP_DESC(PL_op));
1550     default: NOOP;
1551     }
1552     (void)SvIOK_only(sv);                       /* validate number */
1553     SvIV_set(sv, i);
1554     SvTAINT(sv);
1555 }
1556
1557 /*
1558 =for apidoc sv_setiv_mg
1559
1560 Like C<sv_setiv>, but also handles 'set' magic.
1561
1562 =cut
1563 */
1564
1565 void
1566 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1567 {
1568     PERL_ARGS_ASSERT_SV_SETIV_MG;
1569
1570     sv_setiv(sv,i);
1571     SvSETMAGIC(sv);
1572 }
1573
1574 /*
1575 =for apidoc sv_setuv
1576
1577 Copies an unsigned integer into the given SV, upgrading first if necessary.
1578 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1579
1580 =cut
1581 */
1582
1583 void
1584 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1585 {
1586     PERL_ARGS_ASSERT_SV_SETUV;
1587
1588     /* With these two if statements:
1589        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1590
1591        without
1592        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1593
1594        If you wish to remove them, please benchmark to see what the effect is
1595     */
1596     if (u <= (UV)IV_MAX) {
1597        sv_setiv(sv, (IV)u);
1598        return;
1599     }
1600     sv_setiv(sv, 0);
1601     SvIsUV_on(sv);
1602     SvUV_set(sv, u);
1603 }
1604
1605 /*
1606 =for apidoc sv_setuv_mg
1607
1608 Like C<sv_setuv>, but also handles 'set' magic.
1609
1610 =cut
1611 */
1612
1613 void
1614 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1615 {
1616     PERL_ARGS_ASSERT_SV_SETUV_MG;
1617
1618     sv_setuv(sv,u);
1619     SvSETMAGIC(sv);
1620 }
1621
1622 /*
1623 =for apidoc sv_setnv
1624
1625 Copies a double into the given SV, upgrading first if necessary.
1626 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1627
1628 =cut
1629 */
1630
1631 void
1632 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1633 {
1634     dVAR;
1635
1636     PERL_ARGS_ASSERT_SV_SETNV;
1637
1638     SV_CHECK_THINKFIRST_COW_DROP(sv);
1639     switch (SvTYPE(sv)) {
1640     case SVt_NULL:
1641     case SVt_IV:
1642         sv_upgrade(sv, SVt_NV);
1643         break;
1644     case SVt_PV:
1645     case SVt_PVIV:
1646         sv_upgrade(sv, SVt_PVNV);
1647         break;
1648
1649     case SVt_PVGV:
1650     case SVt_PVAV:
1651     case SVt_PVHV:
1652     case SVt_PVCV:
1653     case SVt_PVFM:
1654     case SVt_PVIO:
1655         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1656                    OP_NAME(PL_op));
1657     default: NOOP;
1658     }
1659     SvNV_set(sv, num);
1660     (void)SvNOK_only(sv);                       /* validate number */
1661     SvTAINT(sv);
1662 }
1663
1664 /*
1665 =for apidoc sv_setnv_mg
1666
1667 Like C<sv_setnv>, but also handles 'set' magic.
1668
1669 =cut
1670 */
1671
1672 void
1673 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1674 {
1675     PERL_ARGS_ASSERT_SV_SETNV_MG;
1676
1677     sv_setnv(sv,num);
1678     SvSETMAGIC(sv);
1679 }
1680
1681 /* Print an "isn't numeric" warning, using a cleaned-up,
1682  * printable version of the offending string
1683  */
1684
1685 STATIC void
1686 S_not_a_number(pTHX_ SV *const sv)
1687 {
1688      dVAR;
1689      SV *dsv;
1690      char tmpbuf[64];
1691      const char *pv;
1692
1693      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1694
1695      if (DO_UTF8(sv)) {
1696           dsv = newSVpvs_flags("", SVs_TEMP);
1697           pv = sv_uni_display(dsv, sv, 10, 0);
1698      } else {
1699           char *d = tmpbuf;
1700           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1701           /* each *s can expand to 4 chars + "...\0",
1702              i.e. need room for 8 chars */
1703         
1704           const char *s = SvPVX_const(sv);
1705           const char * const end = s + SvCUR(sv);
1706           for ( ; s < end && d < limit; s++ ) {
1707                int ch = *s & 0xFF;
1708                if (ch & 128 && !isPRINT_LC(ch)) {
1709                     *d++ = 'M';
1710                     *d++ = '-';
1711                     ch &= 127;
1712                }
1713                if (ch == '\n') {
1714                     *d++ = '\\';
1715                     *d++ = 'n';
1716                }
1717                else if (ch == '\r') {
1718                     *d++ = '\\';
1719                     *d++ = 'r';
1720                }
1721                else if (ch == '\f') {
1722                     *d++ = '\\';
1723                     *d++ = 'f';
1724                }
1725                else if (ch == '\\') {
1726                     *d++ = '\\';
1727                     *d++ = '\\';
1728                }
1729                else if (ch == '\0') {
1730                     *d++ = '\\';
1731                     *d++ = '0';
1732                }
1733                else if (isPRINT_LC(ch))
1734                     *d++ = ch;
1735                else {
1736                     *d++ = '^';
1737                     *d++ = toCTRL(ch);
1738                }
1739           }
1740           if (s < end) {
1741                *d++ = '.';
1742                *d++ = '.';
1743                *d++ = '.';
1744           }
1745           *d = '\0';
1746           pv = tmpbuf;
1747     }
1748
1749     if (PL_op)
1750         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1751                     "Argument \"%s\" isn't numeric in %s", pv,
1752                     OP_DESC(PL_op));
1753     else
1754         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1755                     "Argument \"%s\" isn't numeric", pv);
1756 }
1757
1758 /*
1759 =for apidoc looks_like_number
1760
1761 Test if the content of an SV looks like a number (or is a number).
1762 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1763 non-numeric warning), even if your atof() doesn't grok them.
1764
1765 =cut
1766 */
1767
1768 I32
1769 Perl_looks_like_number(pTHX_ SV *const sv)
1770 {
1771     register const char *sbegin;
1772     STRLEN len;
1773
1774     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1775
1776     if (SvPOK(sv)) {
1777         sbegin = SvPVX_const(sv);
1778         len = SvCUR(sv);
1779     }
1780     else if (SvPOKp(sv))
1781         sbegin = SvPV_const(sv, len);
1782     else
1783         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1784     return grok_number(sbegin, len, NULL);
1785 }
1786
1787 STATIC bool
1788 S_glob_2number(pTHX_ GV * const gv)
1789 {
1790     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1791     SV *const buffer = sv_newmortal();
1792
1793     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1794
1795     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1796        is on.  */
1797     SvFAKE_off(gv);
1798     gv_efullname3(buffer, gv, "*");
1799     SvFLAGS(gv) |= wasfake;
1800
1801     /* We know that all GVs stringify to something that is not-a-number,
1802         so no need to test that.  */
1803     if (ckWARN(WARN_NUMERIC))
1804         not_a_number(buffer);
1805     /* We just want something true to return, so that S_sv_2iuv_common
1806         can tail call us and return true.  */
1807     return TRUE;
1808 }
1809
1810 STATIC char *
1811 S_glob_2pv(pTHX_ GV * const gv, STRLEN * const len)
1812 {
1813     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1814     SV *const buffer = sv_newmortal();
1815
1816     PERL_ARGS_ASSERT_GLOB_2PV;
1817
1818     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1819        is on.  */
1820     SvFAKE_off(gv);
1821     gv_efullname3(buffer, gv, "*");
1822     SvFLAGS(gv) |= wasfake;
1823
1824     assert(SvPOK(buffer));
1825     if (len) {
1826         *len = SvCUR(buffer);
1827     }
1828     return SvPVX(buffer);
1829 }
1830
1831 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1832    until proven guilty, assume that things are not that bad... */
1833
1834 /*
1835    NV_PRESERVES_UV:
1836
1837    As 64 bit platforms often have an NV that doesn't preserve all bits of
1838    an IV (an assumption perl has been based on to date) it becomes necessary
1839    to remove the assumption that the NV always carries enough precision to
1840    recreate the IV whenever needed, and that the NV is the canonical form.
1841    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1842    precision as a side effect of conversion (which would lead to insanity
1843    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1844    1) to distinguish between IV/UV/NV slots that have cached a valid
1845       conversion where precision was lost and IV/UV/NV slots that have a
1846       valid conversion which has lost no precision
1847    2) to ensure that if a numeric conversion to one form is requested that
1848       would lose precision, the precise conversion (or differently
1849       imprecise conversion) is also performed and cached, to prevent
1850       requests for different numeric formats on the same SV causing
1851       lossy conversion chains. (lossless conversion chains are perfectly
1852       acceptable (still))
1853
1854
1855    flags are used:
1856    SvIOKp is true if the IV slot contains a valid value
1857    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1858    SvNOKp is true if the NV slot contains a valid value
1859    SvNOK  is true only if the NV value is accurate
1860
1861    so
1862    while converting from PV to NV, check to see if converting that NV to an
1863    IV(or UV) would lose accuracy over a direct conversion from PV to
1864    IV(or UV). If it would, cache both conversions, return NV, but mark
1865    SV as IOK NOKp (ie not NOK).
1866
1867    While converting from PV to IV, check to see if converting that IV to an
1868    NV would lose accuracy over a direct conversion from PV to NV. If it
1869    would, cache both conversions, flag similarly.
1870
1871    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1872    correctly because if IV & NV were set NV *always* overruled.
1873    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1874    changes - now IV and NV together means that the two are interchangeable:
1875    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1876
1877    The benefit of this is that operations such as pp_add know that if
1878    SvIOK is true for both left and right operands, then integer addition
1879    can be used instead of floating point (for cases where the result won't
1880    overflow). Before, floating point was always used, which could lead to
1881    loss of precision compared with integer addition.
1882
1883    * making IV and NV equal status should make maths accurate on 64 bit
1884      platforms
1885    * may speed up maths somewhat if pp_add and friends start to use
1886      integers when possible instead of fp. (Hopefully the overhead in
1887      looking for SvIOK and checking for overflow will not outweigh the
1888      fp to integer speedup)
1889    * will slow down integer operations (callers of SvIV) on "inaccurate"
1890      values, as the change from SvIOK to SvIOKp will cause a call into
1891      sv_2iv each time rather than a macro access direct to the IV slot
1892    * should speed up number->string conversion on integers as IV is
1893      favoured when IV and NV are equally accurate
1894
1895    ####################################################################
1896    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1897    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1898    On the other hand, SvUOK is true iff UV.
1899    ####################################################################
1900
1901    Your mileage will vary depending your CPU's relative fp to integer
1902    performance ratio.
1903 */
1904
1905 #ifndef NV_PRESERVES_UV
1906 #  define IS_NUMBER_UNDERFLOW_IV 1
1907 #  define IS_NUMBER_UNDERFLOW_UV 2
1908 #  define IS_NUMBER_IV_AND_UV    2
1909 #  define IS_NUMBER_OVERFLOW_IV  4
1910 #  define IS_NUMBER_OVERFLOW_UV  5
1911
1912 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1913
1914 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1915 STATIC int
1916 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1917 #  ifdef DEBUGGING
1918                        , I32 numtype
1919 #  endif
1920                        )
1921 {
1922     dVAR;
1923
1924     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1925
1926     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));
1927     if (SvNVX(sv) < (NV)IV_MIN) {
1928         (void)SvIOKp_on(sv);
1929         (void)SvNOK_on(sv);
1930         SvIV_set(sv, IV_MIN);
1931         return IS_NUMBER_UNDERFLOW_IV;
1932     }
1933     if (SvNVX(sv) > (NV)UV_MAX) {
1934         (void)SvIOKp_on(sv);
1935         (void)SvNOK_on(sv);
1936         SvIsUV_on(sv);
1937         SvUV_set(sv, UV_MAX);
1938         return IS_NUMBER_OVERFLOW_UV;
1939     }
1940     (void)SvIOKp_on(sv);
1941     (void)SvNOK_on(sv);
1942     /* Can't use strtol etc to convert this string.  (See truth table in
1943        sv_2iv  */
1944     if (SvNVX(sv) <= (UV)IV_MAX) {
1945         SvIV_set(sv, I_V(SvNVX(sv)));
1946         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1947             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1948         } else {
1949             /* Integer is imprecise. NOK, IOKp */
1950         }
1951         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1952     }
1953     SvIsUV_on(sv);
1954     SvUV_set(sv, U_V(SvNVX(sv)));
1955     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1956         if (SvUVX(sv) == UV_MAX) {
1957             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1958                possibly be preserved by NV. Hence, it must be overflow.
1959                NOK, IOKp */
1960             return IS_NUMBER_OVERFLOW_UV;
1961         }
1962         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1963     } else {
1964         /* Integer is imprecise. NOK, IOKp */
1965     }
1966     return IS_NUMBER_OVERFLOW_IV;
1967 }
1968 #endif /* !NV_PRESERVES_UV*/
1969
1970 STATIC bool
1971 S_sv_2iuv_common(pTHX_ SV *const sv)
1972 {
1973     dVAR;
1974
1975     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
1976
1977     if (SvNOKp(sv)) {
1978         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1979          * without also getting a cached IV/UV from it at the same time
1980          * (ie PV->NV conversion should detect loss of accuracy and cache
1981          * IV or UV at same time to avoid this. */
1982         /* IV-over-UV optimisation - choose to cache IV if possible */
1983
1984         if (SvTYPE(sv) == SVt_NV)
1985             sv_upgrade(sv, SVt_PVNV);
1986
1987         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1988         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1989            certainly cast into the IV range at IV_MAX, whereas the correct
1990            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1991            cases go to UV */
1992 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
1993         if (Perl_isnan(SvNVX(sv))) {
1994             SvUV_set(sv, 0);
1995             SvIsUV_on(sv);
1996             return FALSE;
1997         }
1998 #endif
1999         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2000             SvIV_set(sv, I_V(SvNVX(sv)));
2001             if (SvNVX(sv) == (NV) SvIVX(sv)
2002 #ifndef NV_PRESERVES_UV
2003                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2004                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2005                 /* Don't flag it as "accurately an integer" if the number
2006                    came from a (by definition imprecise) NV operation, and
2007                    we're outside the range of NV integer precision */
2008 #endif
2009                 ) {
2010                 if (SvNOK(sv))
2011                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2012                 else {
2013                     /* scalar has trailing garbage, eg "42a" */
2014                 }
2015                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2016                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2017                                       PTR2UV(sv),
2018                                       SvNVX(sv),
2019                                       SvIVX(sv)));
2020
2021             } else {
2022                 /* IV not precise.  No need to convert from PV, as NV
2023                    conversion would already have cached IV if it detected
2024                    that PV->IV would be better than PV->NV->IV
2025                    flags already correct - don't set public IOK.  */
2026                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2027                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2028                                       PTR2UV(sv),
2029                                       SvNVX(sv),
2030                                       SvIVX(sv)));
2031             }
2032             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2033                but the cast (NV)IV_MIN rounds to a the value less (more
2034                negative) than IV_MIN which happens to be equal to SvNVX ??
2035                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2036                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2037                (NV)UVX == NVX are both true, but the values differ. :-(
2038                Hopefully for 2s complement IV_MIN is something like
2039                0x8000000000000000 which will be exact. NWC */
2040         }
2041         else {
2042             SvUV_set(sv, U_V(SvNVX(sv)));
2043             if (
2044                 (SvNVX(sv) == (NV) SvUVX(sv))
2045 #ifndef  NV_PRESERVES_UV
2046                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2047                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2048                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2049                 /* Don't flag it as "accurately an integer" if the number
2050                    came from a (by definition imprecise) NV operation, and
2051                    we're outside the range of NV integer precision */
2052 #endif
2053                 && SvNOK(sv)
2054                 )
2055                 SvIOK_on(sv);
2056             SvIsUV_on(sv);
2057             DEBUG_c(PerlIO_printf(Perl_debug_log,
2058                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2059                                   PTR2UV(sv),
2060                                   SvUVX(sv),
2061                                   SvUVX(sv)));
2062         }
2063     }
2064     else if (SvPOKp(sv) && SvLEN(sv)) {
2065         UV value;
2066         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2067         /* We want to avoid a possible problem when we cache an IV/ a UV which
2068            may be later translated to an NV, and the resulting NV is not
2069            the same as the direct translation of the initial string
2070            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2071            be careful to ensure that the value with the .456 is around if the
2072            NV value is requested in the future).
2073         
2074            This means that if we cache such an IV/a UV, we need to cache the
2075            NV as well.  Moreover, we trade speed for space, and do not
2076            cache the NV if we are sure it's not needed.
2077          */
2078
2079         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2080         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2081              == IS_NUMBER_IN_UV) {
2082             /* It's definitely an integer, only upgrade to PVIV */
2083             if (SvTYPE(sv) < SVt_PVIV)
2084                 sv_upgrade(sv, SVt_PVIV);
2085             (void)SvIOK_on(sv);
2086         } else if (SvTYPE(sv) < SVt_PVNV)
2087             sv_upgrade(sv, SVt_PVNV);
2088
2089         /* If NVs preserve UVs then we only use the UV value if we know that
2090            we aren't going to call atof() below. If NVs don't preserve UVs
2091            then the value returned may have more precision than atof() will
2092            return, even though value isn't perfectly accurate.  */
2093         if ((numtype & (IS_NUMBER_IN_UV
2094 #ifdef NV_PRESERVES_UV
2095                         | IS_NUMBER_NOT_INT
2096 #endif
2097             )) == IS_NUMBER_IN_UV) {
2098             /* This won't turn off the public IOK flag if it was set above  */
2099             (void)SvIOKp_on(sv);
2100
2101             if (!(numtype & IS_NUMBER_NEG)) {
2102                 /* positive */;
2103                 if (value <= (UV)IV_MAX) {
2104                     SvIV_set(sv, (IV)value);
2105                 } else {
2106                     /* it didn't overflow, and it was positive. */
2107                     SvUV_set(sv, value);
2108                     SvIsUV_on(sv);
2109                 }
2110             } else {
2111                 /* 2s complement assumption  */
2112                 if (value <= (UV)IV_MIN) {
2113                     SvIV_set(sv, -(IV)value);
2114                 } else {
2115                     /* Too negative for an IV.  This is a double upgrade, but
2116                        I'm assuming it will be rare.  */
2117                     if (SvTYPE(sv) < SVt_PVNV)
2118                         sv_upgrade(sv, SVt_PVNV);
2119                     SvNOK_on(sv);
2120                     SvIOK_off(sv);
2121                     SvIOKp_on(sv);
2122                     SvNV_set(sv, -(NV)value);
2123                     SvIV_set(sv, IV_MIN);
2124                 }
2125             }
2126         }
2127         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2128            will be in the previous block to set the IV slot, and the next
2129            block to set the NV slot.  So no else here.  */
2130         
2131         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2132             != IS_NUMBER_IN_UV) {
2133             /* It wasn't an (integer that doesn't overflow the UV). */
2134             SvNV_set(sv, Atof(SvPVX_const(sv)));
2135
2136             if (! numtype && ckWARN(WARN_NUMERIC))
2137                 not_a_number(sv);
2138
2139 #if defined(USE_LONG_DOUBLE)
2140             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2141                                   PTR2UV(sv), SvNVX(sv)));
2142 #else
2143             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2144                                   PTR2UV(sv), SvNVX(sv)));
2145 #endif
2146
2147 #ifdef NV_PRESERVES_UV
2148             (void)SvIOKp_on(sv);
2149             (void)SvNOK_on(sv);
2150             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151                 SvIV_set(sv, I_V(SvNVX(sv)));
2152                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2153                     SvIOK_on(sv);
2154                 } else {
2155                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2156                 }
2157                 /* UV will not work better than IV */
2158             } else {
2159                 if (SvNVX(sv) > (NV)UV_MAX) {
2160                     SvIsUV_on(sv);
2161                     /* Integer is inaccurate. NOK, IOKp, is UV */
2162                     SvUV_set(sv, UV_MAX);
2163                 } else {
2164                     SvUV_set(sv, U_V(SvNVX(sv)));
2165                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2166                        NV preservse UV so can do correct comparison.  */
2167                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2168                         SvIOK_on(sv);
2169                     } else {
2170                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2171                     }
2172                 }
2173                 SvIsUV_on(sv);
2174             }
2175 #else /* NV_PRESERVES_UV */
2176             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2177                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2178                 /* The IV/UV slot will have been set from value returned by
2179                    grok_number above.  The NV slot has just been set using
2180                    Atof.  */
2181                 SvNOK_on(sv);
2182                 assert (SvIOKp(sv));
2183             } else {
2184                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2185                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2186                     /* Small enough to preserve all bits. */
2187                     (void)SvIOKp_on(sv);
2188                     SvNOK_on(sv);
2189                     SvIV_set(sv, I_V(SvNVX(sv)));
2190                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2191                         SvIOK_on(sv);
2192                     /* Assumption: first non-preserved integer is < IV_MAX,
2193                        this NV is in the preserved range, therefore: */
2194                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2195                           < (UV)IV_MAX)) {
2196                         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);
2197                     }
2198                 } else {
2199                     /* IN_UV NOT_INT
2200                          0      0       already failed to read UV.
2201                          0      1       already failed to read UV.
2202                          1      0       you won't get here in this case. IV/UV
2203                                         slot set, public IOK, Atof() unneeded.
2204                          1      1       already read UV.
2205                        so there's no point in sv_2iuv_non_preserve() attempting
2206                        to use atol, strtol, strtoul etc.  */
2207 #  ifdef DEBUGGING
2208                     sv_2iuv_non_preserve (sv, numtype);
2209 #  else
2210                     sv_2iuv_non_preserve (sv);
2211 #  endif
2212                 }
2213             }
2214 #endif /* NV_PRESERVES_UV */
2215         /* It might be more code efficient to go through the entire logic above
2216            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2217            gets complex and potentially buggy, so more programmer efficient
2218            to do it this way, by turning off the public flags:  */
2219         if (!numtype)
2220             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2221         }
2222     }
2223     else  {
2224         if (isGV_with_GP(sv))
2225             return glob_2number((GV *)sv);
2226
2227         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2228             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2229                 report_uninit(sv);
2230         }
2231         if (SvTYPE(sv) < SVt_IV)
2232             /* Typically the caller expects that sv_any is not NULL now.  */
2233             sv_upgrade(sv, SVt_IV);
2234         /* Return 0 from the caller.  */
2235         return TRUE;
2236     }
2237     return FALSE;
2238 }
2239
2240 /*
2241 =for apidoc sv_2iv_flags
2242
2243 Return the integer value of an SV, doing any necessary string
2244 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2245 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2246
2247 =cut
2248 */
2249
2250 IV
2251 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2252 {
2253     dVAR;
2254     if (!sv)
2255         return 0;
2256     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2257         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2258            cache IVs just in case. In practice it seems that they never
2259            actually anywhere accessible by user Perl code, let alone get used
2260            in anything other than a string context.  */
2261         if (flags & SV_GMAGIC)
2262             mg_get(sv);
2263         if (SvIOKp(sv))
2264             return SvIVX(sv);
2265         if (SvNOKp(sv)) {
2266             return I_V(SvNVX(sv));
2267         }
2268         if (SvPOKp(sv) && SvLEN(sv)) {
2269             UV value;
2270             const int numtype
2271                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2272
2273             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2274                 == IS_NUMBER_IN_UV) {
2275                 /* It's definitely an integer */
2276                 if (numtype & IS_NUMBER_NEG) {
2277                     if (value < (UV)IV_MIN)
2278                         return -(IV)value;
2279                 } else {
2280                     if (value < (UV)IV_MAX)
2281                         return (IV)value;
2282                 }
2283             }
2284             if (!numtype) {
2285                 if (ckWARN(WARN_NUMERIC))
2286                     not_a_number(sv);
2287             }
2288             return I_V(Atof(SvPVX_const(sv)));
2289         }
2290         if (SvROK(sv)) {
2291             goto return_rok;
2292         }
2293         assert(SvTYPE(sv) >= SVt_PVMG);
2294         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2295     } else if (SvTHINKFIRST(sv)) {
2296         if (SvROK(sv)) {
2297         return_rok:
2298             if (SvAMAGIC(sv)) {
2299                 SV * const tmpstr=AMG_CALLun(sv,numer);
2300                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2301                     return SvIV(tmpstr);
2302                 }
2303             }
2304             return PTR2IV(SvRV(sv));
2305         }
2306         if (SvIsCOW(sv)) {
2307             sv_force_normal_flags(sv, 0);
2308         }
2309         if (SvREADONLY(sv) && !SvOK(sv)) {
2310             if (ckWARN(WARN_UNINITIALIZED))
2311                 report_uninit(sv);
2312             return 0;
2313         }
2314     }
2315     if (!SvIOKp(sv)) {
2316         if (S_sv_2iuv_common(aTHX_ sv))
2317             return 0;
2318     }
2319     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2320         PTR2UV(sv),SvIVX(sv)));
2321     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2322 }
2323
2324 /*
2325 =for apidoc sv_2uv_flags
2326
2327 Return the unsigned integer value of an SV, doing any necessary string
2328 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2329 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2330
2331 =cut
2332 */
2333
2334 UV
2335 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2336 {
2337     dVAR;
2338     if (!sv)
2339         return 0;
2340     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2341         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2342            cache IVs just in case.  */
2343         if (flags & SV_GMAGIC)
2344             mg_get(sv);
2345         if (SvIOKp(sv))
2346             return SvUVX(sv);
2347         if (SvNOKp(sv))
2348             return U_V(SvNVX(sv));
2349         if (SvPOKp(sv) && SvLEN(sv)) {
2350             UV value;
2351             const int numtype
2352                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2353
2354             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2355                 == IS_NUMBER_IN_UV) {
2356                 /* It's definitely an integer */
2357                 if (!(numtype & IS_NUMBER_NEG))
2358                     return value;
2359             }
2360             if (!numtype) {
2361                 if (ckWARN(WARN_NUMERIC))
2362                     not_a_number(sv);
2363             }
2364             return U_V(Atof(SvPVX_const(sv)));
2365         }
2366         if (SvROK(sv)) {
2367             goto return_rok;
2368         }
2369         assert(SvTYPE(sv) >= SVt_PVMG);
2370         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2371     } else if (SvTHINKFIRST(sv)) {
2372         if (SvROK(sv)) {
2373         return_rok:
2374             if (SvAMAGIC(sv)) {
2375                 SV *const tmpstr = AMG_CALLun(sv,numer);
2376                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2377                     return SvUV(tmpstr);
2378                 }
2379             }
2380             return PTR2UV(SvRV(sv));
2381         }
2382         if (SvIsCOW(sv)) {
2383             sv_force_normal_flags(sv, 0);
2384         }
2385         if (SvREADONLY(sv) && !SvOK(sv)) {
2386             if (ckWARN(WARN_UNINITIALIZED))
2387                 report_uninit(sv);
2388             return 0;
2389         }
2390     }
2391     if (!SvIOKp(sv)) {
2392         if (S_sv_2iuv_common(aTHX_ sv))
2393             return 0;
2394     }
2395
2396     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2397                           PTR2UV(sv),SvUVX(sv)));
2398     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2399 }
2400
2401 /*
2402 =for apidoc sv_2nv
2403
2404 Return the num value of an SV, doing any necessary string or integer
2405 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2406 macros.
2407
2408 =cut
2409 */
2410
2411 NV
2412 Perl_sv_2nv(pTHX_ register SV *const sv)
2413 {
2414     dVAR;
2415     if (!sv)
2416         return 0.0;
2417     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2418         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2419            cache IVs just in case.  */
2420         mg_get(sv);
2421         if (SvNOKp(sv))
2422             return SvNVX(sv);
2423         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2424             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2425                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2426                 not_a_number(sv);
2427             return Atof(SvPVX_const(sv));
2428         }
2429         if (SvIOKp(sv)) {
2430             if (SvIsUV(sv))
2431                 return (NV)SvUVX(sv);
2432             else
2433                 return (NV)SvIVX(sv);
2434         }
2435         if (SvROK(sv)) {
2436             goto return_rok;
2437         }
2438         assert(SvTYPE(sv) >= SVt_PVMG);
2439         /* This falls through to the report_uninit near the end of the
2440            function. */
2441     } else if (SvTHINKFIRST(sv)) {
2442         if (SvROK(sv)) {
2443         return_rok:
2444             if (SvAMAGIC(sv)) {
2445                 SV *const tmpstr = AMG_CALLun(sv,numer);
2446                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2447                     return SvNV(tmpstr);
2448                 }
2449             }
2450             return PTR2NV(SvRV(sv));
2451         }
2452         if (SvIsCOW(sv)) {
2453             sv_force_normal_flags(sv, 0);
2454         }
2455         if (SvREADONLY(sv) && !SvOK(sv)) {
2456             if (ckWARN(WARN_UNINITIALIZED))
2457                 report_uninit(sv);
2458             return 0.0;
2459         }
2460     }
2461     if (SvTYPE(sv) < SVt_NV) {
2462         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2463         sv_upgrade(sv, SVt_NV);
2464 #ifdef USE_LONG_DOUBLE
2465         DEBUG_c({
2466             STORE_NUMERIC_LOCAL_SET_STANDARD();
2467             PerlIO_printf(Perl_debug_log,
2468                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2469                           PTR2UV(sv), SvNVX(sv));
2470             RESTORE_NUMERIC_LOCAL();
2471         });
2472 #else
2473         DEBUG_c({
2474             STORE_NUMERIC_LOCAL_SET_STANDARD();
2475             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2476                           PTR2UV(sv), SvNVX(sv));
2477             RESTORE_NUMERIC_LOCAL();
2478         });
2479 #endif
2480     }
2481     else if (SvTYPE(sv) < SVt_PVNV)
2482         sv_upgrade(sv, SVt_PVNV);
2483     if (SvNOKp(sv)) {
2484         return SvNVX(sv);
2485     }
2486     if (SvIOKp(sv)) {
2487         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2488 #ifdef NV_PRESERVES_UV
2489         if (SvIOK(sv))
2490             SvNOK_on(sv);
2491         else
2492             SvNOKp_on(sv);
2493 #else
2494         /* Only set the public NV OK flag if this NV preserves the IV  */
2495         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2496         if (SvIOK(sv) &&
2497             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2498                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2499             SvNOK_on(sv);
2500         else
2501             SvNOKp_on(sv);
2502 #endif
2503     }
2504     else if (SvPOKp(sv) && SvLEN(sv)) {
2505         UV value;
2506         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2507         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2508             not_a_number(sv);
2509 #ifdef NV_PRESERVES_UV
2510         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2511             == IS_NUMBER_IN_UV) {
2512             /* It's definitely an integer */
2513             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2514         } else
2515             SvNV_set(sv, Atof(SvPVX_const(sv)));
2516         if (numtype)
2517             SvNOK_on(sv);
2518         else
2519             SvNOKp_on(sv);
2520 #else
2521         SvNV_set(sv, Atof(SvPVX_const(sv)));
2522         /* Only set the public NV OK flag if this NV preserves the value in
2523            the PV at least as well as an IV/UV would.
2524            Not sure how to do this 100% reliably. */
2525         /* if that shift count is out of range then Configure's test is
2526            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2527            UV_BITS */
2528         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2529             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2530             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2531         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2532             /* Can't use strtol etc to convert this string, so don't try.
2533                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2534             SvNOK_on(sv);
2535         } else {
2536             /* value has been set.  It may not be precise.  */
2537             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2538                 /* 2s complement assumption for (UV)IV_MIN  */
2539                 SvNOK_on(sv); /* Integer is too negative.  */
2540             } else {
2541                 SvNOKp_on(sv);
2542                 SvIOKp_on(sv);
2543
2544                 if (numtype & IS_NUMBER_NEG) {
2545                     SvIV_set(sv, -(IV)value);
2546                 } else if (value <= (UV)IV_MAX) {
2547                     SvIV_set(sv, (IV)value);
2548                 } else {
2549                     SvUV_set(sv, value);
2550                     SvIsUV_on(sv);
2551                 }
2552
2553                 if (numtype & IS_NUMBER_NOT_INT) {
2554                     /* I believe that even if the original PV had decimals,
2555                        they are lost beyond the limit of the FP precision.
2556                        However, neither is canonical, so both only get p
2557                        flags.  NWC, 2000/11/25 */
2558                     /* Both already have p flags, so do nothing */
2559                 } else {
2560                     const NV nv = SvNVX(sv);
2561                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2562                         if (SvIVX(sv) == I_V(nv)) {
2563                             SvNOK_on(sv);
2564                         } else {
2565                             /* It had no "." so it must be integer.  */
2566                         }
2567                         SvIOK_on(sv);
2568                     } else {
2569                         /* between IV_MAX and NV(UV_MAX).
2570                            Could be slightly > UV_MAX */
2571
2572                         if (numtype & IS_NUMBER_NOT_INT) {
2573                             /* UV and NV both imprecise.  */
2574                         } else {
2575                             const UV nv_as_uv = U_V(nv);
2576
2577                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2578                                 SvNOK_on(sv);
2579                             }
2580                             SvIOK_on(sv);
2581                         }
2582                     }
2583                 }
2584             }
2585         }
2586         /* It might be more code efficient to go through the entire logic above
2587            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2588            gets complex and potentially buggy, so more programmer efficient
2589            to do it this way, by turning off the public flags:  */
2590         if (!numtype)
2591             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2592 #endif /* NV_PRESERVES_UV */
2593     }
2594     else  {
2595         if (isGV_with_GP(sv)) {
2596             glob_2number((GV *)sv);
2597             return 0.0;
2598         }
2599
2600         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2601             report_uninit(sv);
2602         assert (SvTYPE(sv) >= SVt_NV);
2603         /* Typically the caller expects that sv_any is not NULL now.  */
2604         /* XXX Ilya implies that this is a bug in callers that assume this
2605            and ideally should be fixed.  */
2606         return 0.0;
2607     }
2608 #if defined(USE_LONG_DOUBLE)
2609     DEBUG_c({
2610         STORE_NUMERIC_LOCAL_SET_STANDARD();
2611         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2612                       PTR2UV(sv), SvNVX(sv));
2613         RESTORE_NUMERIC_LOCAL();
2614     });
2615 #else
2616     DEBUG_c({
2617         STORE_NUMERIC_LOCAL_SET_STANDARD();
2618         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2619                       PTR2UV(sv), SvNVX(sv));
2620         RESTORE_NUMERIC_LOCAL();
2621     });
2622 #endif
2623     return SvNVX(sv);
2624 }
2625
2626 /*
2627 =for apidoc sv_2num
2628
2629 Return an SV with the numeric value of the source SV, doing any necessary
2630 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2631 access this function.
2632
2633 =cut
2634 */
2635
2636 SV *
2637 Perl_sv_2num(pTHX_ register SV *const sv)
2638 {
2639     PERL_ARGS_ASSERT_SV_2NUM;
2640
2641     if (!SvROK(sv))
2642         return sv;
2643     if (SvAMAGIC(sv)) {
2644         SV * const tmpsv = AMG_CALLun(sv,numer);
2645         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2646             return sv_2num(tmpsv);
2647     }
2648     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2649 }
2650
2651 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2652  * UV as a string towards the end of buf, and return pointers to start and
2653  * end of it.
2654  *
2655  * We assume that buf is at least TYPE_CHARS(UV) long.
2656  */
2657
2658 static char *
2659 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2660 {
2661     char *ptr = buf + TYPE_CHARS(UV);
2662     char * const ebuf = ptr;
2663     int sign;
2664
2665     PERL_ARGS_ASSERT_UIV_2BUF;
2666
2667     if (is_uv)
2668         sign = 0;
2669     else if (iv >= 0) {
2670         uv = iv;
2671         sign = 0;
2672     } else {
2673         uv = -iv;
2674         sign = 1;
2675     }
2676     do {
2677         *--ptr = '0' + (char)(uv % 10);
2678     } while (uv /= 10);
2679     if (sign)
2680         *--ptr = '-';
2681     *peob = ebuf;
2682     return ptr;
2683 }
2684
2685 /*
2686 =for apidoc sv_2pv_flags
2687
2688 Returns a pointer to the string value of an SV, and sets *lp to its length.
2689 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2690 if necessary.
2691 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2692 usually end up here too.
2693
2694 =cut
2695 */
2696
2697 char *
2698 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2699 {
2700     dVAR;
2701     register char *s;
2702
2703     if (!sv) {
2704         if (lp)
2705             *lp = 0;
2706         return (char *)"";
2707     }
2708     if (SvGMAGICAL(sv)) {
2709         if (flags & SV_GMAGIC)
2710             mg_get(sv);
2711         if (SvPOKp(sv)) {
2712             if (lp)
2713                 *lp = SvCUR(sv);
2714             if (flags & SV_MUTABLE_RETURN)
2715                 return SvPVX_mutable(sv);
2716             if (flags & SV_CONST_RETURN)
2717                 return (char *)SvPVX_const(sv);
2718             return SvPVX(sv);
2719         }
2720         if (SvIOKp(sv) || SvNOKp(sv)) {
2721             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2722             STRLEN len;
2723
2724             if (SvIOKp(sv)) {
2725                 len = SvIsUV(sv)
2726                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2727                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2728             } else {
2729                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2730                 len = strlen(tbuf);
2731             }
2732             assert(!SvROK(sv));
2733             {
2734                 dVAR;
2735
2736 #ifdef FIXNEGATIVEZERO
2737                 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2738                     tbuf[0] = '0';
2739                     tbuf[1] = 0;
2740                     len = 1;
2741                 }
2742 #endif
2743                 SvUPGRADE(sv, SVt_PV);
2744                 if (lp)
2745                     *lp = len;
2746                 s = SvGROW_mutable(sv, len + 1);
2747                 SvCUR_set(sv, len);
2748                 SvPOKp_on(sv);
2749                 return (char*)memcpy(s, tbuf, len + 1);
2750             }
2751         }
2752         if (SvROK(sv)) {
2753             goto return_rok;
2754         }
2755         assert(SvTYPE(sv) >= SVt_PVMG);
2756         /* This falls through to the report_uninit near the end of the
2757            function. */
2758     } else if (SvTHINKFIRST(sv)) {
2759         if (SvROK(sv)) {
2760         return_rok:
2761             if (SvAMAGIC(sv)) {
2762                 SV *const tmpstr = AMG_CALLun(sv,string);
2763                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2764                     /* Unwrap this:  */
2765                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2766                      */
2767
2768                     char *pv;
2769                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2770                         if (flags & SV_CONST_RETURN) {
2771                             pv = (char *) SvPVX_const(tmpstr);
2772                         } else {
2773                             pv = (flags & SV_MUTABLE_RETURN)
2774                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2775                         }
2776                         if (lp)
2777                             *lp = SvCUR(tmpstr);
2778                     } else {
2779                         pv = sv_2pv_flags(tmpstr, lp, flags);
2780                     }
2781                     if (SvUTF8(tmpstr))
2782                         SvUTF8_on(sv);
2783                     else
2784                         SvUTF8_off(sv);
2785                     return pv;
2786                 }
2787             }
2788             {
2789                 STRLEN len;
2790                 char *retval;
2791                 char *buffer;
2792                 const SV *const referent = (SV*)SvRV(sv);
2793
2794                 if (!referent) {
2795                     len = 7;
2796                     retval = buffer = savepvn("NULLREF", len);
2797                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2798                     const REGEXP * const re = (REGEXP *)referent;
2799                     I32 seen_evals = 0;
2800
2801                     assert(re);
2802                         
2803                     /* If the regex is UTF-8 we want the containing scalar to
2804                        have an UTF-8 flag too */
2805                     if (RX_UTF8(re))
2806                         SvUTF8_on(sv);
2807                     else
2808                         SvUTF8_off(sv); 
2809
2810                     if ((seen_evals = RX_SEEN_EVALS(re)))
2811                         PL_reginterp_cnt += seen_evals;
2812
2813                     if (lp)
2814                         *lp = RX_WRAPLEN(re);
2815  
2816                     return RX_WRAPPED(re);
2817                 } else {
2818                     const char *const typestr = sv_reftype(referent, 0);
2819                     const STRLEN typelen = strlen(typestr);
2820                     UV addr = PTR2UV(referent);
2821                     const char *stashname = NULL;
2822                     STRLEN stashnamelen = 0; /* hush, gcc */
2823                     const char *buffer_end;
2824
2825                     if (SvOBJECT(referent)) {
2826                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2827
2828                         if (name) {
2829                             stashname = HEK_KEY(name);
2830                             stashnamelen = HEK_LEN(name);
2831
2832                             if (HEK_UTF8(name)) {
2833                                 SvUTF8_on(sv);
2834                             } else {
2835                                 SvUTF8_off(sv);
2836                             }
2837                         } else {
2838                             stashname = "__ANON__";
2839                             stashnamelen = 8;
2840                         }
2841                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2842                             + 2 * sizeof(UV) + 2 /* )\0 */;
2843                     } else {
2844                         len = typelen + 3 /* (0x */
2845                             + 2 * sizeof(UV) + 2 /* )\0 */;
2846                     }
2847
2848                     Newx(buffer, len, char);
2849                     buffer_end = retval = buffer + len;
2850
2851                     /* Working backwards  */
2852                     *--retval = '\0';
2853                     *--retval = ')';
2854                     do {
2855                         *--retval = PL_hexdigit[addr & 15];
2856                     } while (addr >>= 4);
2857                     *--retval = 'x';
2858                     *--retval = '0';
2859                     *--retval = '(';
2860
2861                     retval -= typelen;
2862                     memcpy(retval, typestr, typelen);
2863
2864                     if (stashname) {
2865                         *--retval = '=';
2866                         retval -= stashnamelen;
2867                         memcpy(retval, stashname, stashnamelen);
2868                     }
2869                     /* retval may not neccesarily have reached the start of the
2870                        buffer here.  */
2871                     assert (retval >= buffer);
2872
2873                     len = buffer_end - retval - 1; /* -1 for that \0  */
2874                 }
2875                 if (lp)
2876                     *lp = len;
2877                 SAVEFREEPV(buffer);
2878                 return retval;
2879             }
2880         }
2881         if (SvREADONLY(sv) && !SvOK(sv)) {
2882             if (lp)
2883                 *lp = 0;
2884             if (flags & SV_UNDEF_RETURNS_NULL)
2885                 return NULL;
2886             if (ckWARN(WARN_UNINITIALIZED))
2887                 report_uninit(sv);
2888             return (char *)"";
2889         }
2890     }
2891     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2892         /* I'm assuming that if both IV and NV are equally valid then
2893            converting the IV is going to be more efficient */
2894         const U32 isUIOK = SvIsUV(sv);
2895         char buf[TYPE_CHARS(UV)];
2896         char *ebuf, *ptr;
2897         STRLEN len;
2898
2899         if (SvTYPE(sv) < SVt_PVIV)
2900             sv_upgrade(sv, SVt_PVIV);
2901         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2902         len = ebuf - ptr;
2903         /* inlined from sv_setpvn */
2904         s = SvGROW_mutable(sv, len + 1);
2905         Move(ptr, s, len, char);
2906         s += len;
2907         *s = '\0';
2908     }
2909     else if (SvNOKp(sv)) {
2910         const int olderrno = errno;
2911         if (SvTYPE(sv) < SVt_PVNV)
2912             sv_upgrade(sv, SVt_PVNV);
2913         /* The +20 is pure guesswork.  Configure test needed. --jhi */
2914         s = SvGROW_mutable(sv, NV_DIG + 20);
2915         /* some Xenix systems wipe out errno here */
2916 #ifdef apollo
2917         if (SvNVX(sv) == 0.0)
2918             my_strlcpy(s, "0", SvLEN(sv));
2919         else
2920 #endif /*apollo*/
2921         {
2922             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2923         }
2924         errno = olderrno;
2925 #ifdef FIXNEGATIVEZERO
2926         if (*s == '-' && s[1] == '0' && !s[2]) {
2927             s[0] = '0';
2928             s[1] = 0;
2929         }
2930 #endif
2931         while (*s) s++;
2932 #ifdef hcx
2933         if (s[-1] == '.')
2934             *--s = '\0';
2935 #endif
2936     }
2937     else {
2938         if (isGV_with_GP(sv))
2939             return glob_2pv((GV *)sv, lp);
2940
2941         if (lp)
2942             *lp = 0;
2943         if (flags & SV_UNDEF_RETURNS_NULL)
2944             return NULL;
2945         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2946             report_uninit(sv);
2947         if (SvTYPE(sv) < SVt_PV)
2948             /* Typically the caller expects that sv_any is not NULL now.  */
2949             sv_upgrade(sv, SVt_PV);
2950         return (char *)"";
2951     }
2952     {
2953         const STRLEN len = s - SvPVX_const(sv);
2954         if (lp) 
2955             *lp = len;
2956         SvCUR_set(sv, len);
2957     }
2958     SvPOK_on(sv);
2959     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2960                           PTR2UV(sv),SvPVX_const(sv)));
2961     if (flags & SV_CONST_RETURN)
2962         return (char *)SvPVX_const(sv);
2963     if (flags & SV_MUTABLE_RETURN)
2964         return SvPVX_mutable(sv);
2965     return SvPVX(sv);
2966 }
2967
2968 /*
2969 =for apidoc sv_copypv
2970
2971 Copies a stringified representation of the source SV into the
2972 destination SV.  Automatically performs any necessary mg_get and
2973 coercion of numeric values into strings.  Guaranteed to preserve
2974 UTF8 flag even from overloaded objects.  Similar in nature to
2975 sv_2pv[_flags] but operates directly on an SV instead of just the
2976 string.  Mostly uses sv_2pv_flags to do its work, except when that
2977 would lose the UTF-8'ness of the PV.
2978
2979 =cut
2980 */
2981
2982 void
2983 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
2984 {
2985     STRLEN len;
2986     const char * const s = SvPV_const(ssv,len);
2987
2988     PERL_ARGS_ASSERT_SV_COPYPV;
2989
2990     sv_setpvn(dsv,s,len);
2991     if (SvUTF8(ssv))
2992         SvUTF8_on(dsv);
2993     else
2994         SvUTF8_off(dsv);
2995 }
2996
2997 /*
2998 =for apidoc sv_2pvbyte
2999
3000 Return a pointer to the byte-encoded representation of the SV, and set *lp
3001 to its length.  May cause the SV to be downgraded from UTF-8 as a
3002 side-effect.
3003
3004 Usually accessed via the C<SvPVbyte> macro.
3005
3006 =cut
3007 */
3008
3009 char *
3010 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3011 {
3012     PERL_ARGS_ASSERT_SV_2PVBYTE;
3013
3014     sv_utf8_downgrade(sv,0);
3015     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3016 }
3017
3018 /*
3019 =for apidoc sv_2pvutf8
3020
3021 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3022 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3023
3024 Usually accessed via the C<SvPVutf8> macro.
3025
3026 =cut
3027 */
3028
3029 char *
3030 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3031 {
3032     PERL_ARGS_ASSERT_SV_2PVUTF8;
3033
3034     sv_utf8_upgrade(sv);
3035     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3036 }
3037
3038
3039 /*
3040 =for apidoc sv_2bool
3041
3042 This function is only called on magical items, and is only used by
3043 sv_true() or its macro equivalent.
3044
3045 =cut
3046 */
3047
3048 bool
3049 Perl_sv_2bool(pTHX_ register SV *sv)
3050 {
3051     dVAR;
3052
3053     PERL_ARGS_ASSERT_SV_2BOOL;
3054
3055     SvGETMAGIC(sv);
3056
3057     if (!SvOK(sv))
3058         return 0;
3059     if (SvROK(sv)) {
3060         if (SvAMAGIC(sv)) {
3061             SV * const tmpsv = AMG_CALLun(sv,bool_);
3062             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3063                 return (bool)SvTRUE(tmpsv);
3064         }
3065         return SvRV(sv) != 0;
3066     }
3067     if (SvPOKp(sv)) {
3068         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3069         if (Xpvtmp &&
3070                 (*sv->sv_u.svu_pv > '0' ||
3071                 Xpvtmp->xpv_cur > 1 ||
3072                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3073             return 1;
3074         else
3075             return 0;
3076     }
3077     else {
3078         if (SvIOKp(sv))
3079             return SvIVX(sv) != 0;
3080         else {
3081             if (SvNOKp(sv))
3082                 return SvNVX(sv) != 0.0;
3083             else {
3084                 if (isGV_with_GP(sv))
3085                     return TRUE;
3086                 else
3087                     return FALSE;
3088             }
3089         }
3090     }
3091 }
3092
3093 /*
3094 =for apidoc sv_utf8_upgrade
3095
3096 Converts the PV of an SV to its UTF-8-encoded form.
3097 Forces the SV to string form if it is not already.
3098 Always sets the SvUTF8 flag to avoid future validity checks even
3099 if all the bytes have hibit clear.
3100
3101 This is not as a general purpose byte encoding to Unicode interface:
3102 use the Encode extension for that.
3103
3104 =for apidoc sv_utf8_upgrade_flags
3105
3106 Converts the PV of an SV to its UTF-8-encoded form.
3107 Forces the SV to string form if it is not already.
3108 Always sets the SvUTF8 flag to avoid future validity checks even
3109 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3110 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3111 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3112
3113 This is not as a general purpose byte encoding to Unicode interface:
3114 use the Encode extension for that.
3115
3116 =cut
3117 */
3118
3119 STRLEN
3120 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3121 {
3122     dVAR;
3123
3124     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS;
3125
3126     if (sv == &PL_sv_undef)
3127         return 0;
3128     if (!SvPOK(sv)) {
3129         STRLEN len = 0;
3130         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3131             (void) sv_2pv_flags(sv,&len, flags);
3132             if (SvUTF8(sv))
3133                 return len;
3134         } else {
3135             (void) SvPV_force(sv,len);
3136         }
3137     }
3138
3139     if (SvUTF8(sv)) {
3140         return SvCUR(sv);
3141     }
3142
3143     if (SvIsCOW(sv)) {
3144         sv_force_normal_flags(sv, 0);
3145     }
3146
3147     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3148         sv_recode_to_utf8(sv, PL_encoding);
3149     else { /* Assume Latin-1/EBCDIC */
3150         /* This function could be much more efficient if we
3151          * had a FLAG in SVs to signal if there are any hibit
3152          * chars in the PV.  Given that there isn't such a flag
3153          * make the loop as fast as possible. */
3154         const U8 * const s = (U8 *) SvPVX_const(sv);
3155         const U8 * const e = (U8 *) SvEND(sv);
3156         const U8 *t = s;
3157         
3158         while (t < e) {
3159             const U8 ch = *t++;
3160             /* Check for hi bit */
3161             if (!NATIVE_IS_INVARIANT(ch)) {
3162                 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3163                 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3164
3165                 SvPV_free(sv); /* No longer using what was there before. */
3166                 SvPV_set(sv, (char*)recoded);
3167                 SvCUR_set(sv, len - 1);
3168                 SvLEN_set(sv, len); /* No longer know the real size. */
3169                 break;
3170             }
3171         }
3172         /* Mark as UTF-8 even if no hibit - saves scanning loop */
3173         SvUTF8_on(sv);
3174     }
3175     return SvCUR(sv);
3176 }
3177
3178 /*
3179 =for apidoc sv_utf8_downgrade
3180
3181 Attempts to convert the PV of an SV from characters to bytes.
3182 If the PV contains a character beyond byte, this conversion will fail;
3183 in this case, either returns false or, if C<fail_ok> is not
3184 true, croaks.
3185
3186 This is not as a general purpose Unicode to byte encoding interface:
3187 use the Encode extension for that.
3188
3189 =cut
3190 */
3191
3192 bool
3193 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3194 {
3195     dVAR;
3196
3197     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3198
3199     if (SvPOKp(sv) && SvUTF8(sv)) {
3200         if (SvCUR(sv)) {
3201             U8 *s;
3202             STRLEN len;
3203
3204             if (SvIsCOW(sv)) {
3205                 sv_force_normal_flags(sv, 0);
3206             }
3207             s = (U8 *) SvPV(sv, len);
3208             if (!utf8_to_bytes(s, &len)) {
3209                 if (fail_ok)
3210                     return FALSE;
3211                 else {
3212                     if (PL_op)
3213                         Perl_croak(aTHX_ "Wide character in %s",
3214                                    OP_DESC(PL_op));
3215                     else
3216                         Perl_croak(aTHX_ "Wide character");
3217                 }
3218             }
3219             SvCUR_set(sv, len);
3220         }
3221     }
3222     SvUTF8_off(sv);
3223     return TRUE;
3224 }
3225
3226 /*
3227 =for apidoc sv_utf8_encode
3228
3229 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3230 flag off so that it looks like octets again.
3231
3232 =cut
3233 */
3234
3235 void
3236 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3237 {
3238     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3239
3240     if (SvIsCOW(sv)) {
3241         sv_force_normal_flags(sv, 0);
3242     }
3243     if (SvREADONLY(sv)) {
3244         Perl_croak(aTHX_ PL_no_modify);
3245     }
3246     (void) sv_utf8_upgrade(sv);
3247     SvUTF8_off(sv);
3248 }
3249
3250 /*
3251 =for apidoc sv_utf8_decode
3252
3253 If the PV of the SV is an octet sequence in UTF-8
3254 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3255 so that it looks like a character. If the PV contains only single-byte
3256 characters, the C<SvUTF8> flag stays being off.
3257 Scans PV for validity and returns false if the PV is invalid UTF-8.
3258
3259 =cut
3260 */
3261
3262 bool
3263 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3264 {
3265     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3266
3267     if (SvPOKp(sv)) {
3268         const U8 *c;
3269         const U8 *e;
3270
3271         /* The octets may have got themselves encoded - get them back as
3272          * bytes
3273          */
3274         if (!sv_utf8_downgrade(sv, TRUE))
3275             return FALSE;
3276
3277         /* it is actually just a matter of turning the utf8 flag on, but
3278          * we want to make sure everything inside is valid utf8 first.
3279          */
3280         c = (const U8 *) SvPVX_const(sv);
3281         if (!is_utf8_string(c, SvCUR(sv)+1))
3282             return FALSE;
3283         e = (const U8 *) SvEND(sv);
3284         while (c < e) {
3285             const U8 ch = *c++;
3286             if (!UTF8_IS_INVARIANT(ch)) {
3287                 SvUTF8_on(sv);
3288                 break;
3289             }
3290         }
3291     }
3292     return TRUE;
3293 }
3294
3295 /*
3296 =for apidoc sv_setsv
3297
3298 Copies the contents of the source SV C<ssv> into the destination SV
3299 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3300 function if the source SV needs to be reused. Does not handle 'set' magic.
3301 Loosely speaking, it performs a copy-by-value, obliterating any previous
3302 content of the destination.
3303
3304 You probably want to use one of the assortment of wrappers, such as
3305 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3306 C<SvSetMagicSV_nosteal>.
3307
3308 =for apidoc sv_setsv_flags
3309
3310 Copies the contents of the source SV C<ssv> into the destination SV
3311 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3312 function if the source SV needs to be reused. Does not handle 'set' magic.
3313 Loosely speaking, it performs a copy-by-value, obliterating any previous
3314 content of the destination.
3315 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3316 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3317 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3318 and C<sv_setsv_nomg> are implemented in terms of this function.
3319
3320 You probably want to use one of the assortment of wrappers, such as
3321 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3322 C<SvSetMagicSV_nosteal>.
3323
3324 This is the primary function for copying scalars, and most other
3325 copy-ish functions and macros use this underneath.
3326
3327 =cut
3328 */
3329
3330 static void
3331 S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
3332 {
3333     I32 mro_changes = 0; /* 1 = method, 2 = isa */
3334
3335     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3336
3337     if (dtype != SVt_PVGV) {
3338         const char * const name = GvNAME(sstr);
3339         const STRLEN len = GvNAMELEN(sstr);
3340         {
3341             if (dtype >= SVt_PV) {
3342                 SvPV_free(dstr);
3343                 SvPV_set(dstr, 0);
3344                 SvLEN_set(dstr, 0);
3345                 SvCUR_set(dstr, 0);
3346             }
3347             SvUPGRADE(dstr, SVt_PVGV);
3348             (void)SvOK_off(dstr);
3349             /* FIXME - why are we doing this, then turning it off and on again
3350                below?  */
3351             isGV_with_GP_on(dstr);
3352         }
3353         GvSTASH(dstr) = GvSTASH(sstr);
3354         if (GvSTASH(dstr))
3355             Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3356         gv_name_set((GV *)dstr, name, len, GV_ADD);
3357         SvFAKE_on(dstr);        /* can coerce to non-glob */
3358     }
3359
3360 #ifdef GV_UNIQUE_CHECK
3361     if (GvUNIQUE((GV*)dstr)) {
3362         Perl_croak(aTHX_ PL_no_modify);
3363     }
3364 #endif
3365
3366     if(GvGP((GV*)sstr)) {
3367         /* If source has method cache entry, clear it */
3368         if(GvCVGEN(sstr)) {
3369             SvREFCNT_dec(GvCV(sstr));
3370             GvCV(sstr) = NULL;
3371             GvCVGEN(sstr) = 0;
3372         }
3373         /* If source has a real method, then a method is
3374            going to change */
3375         else if(GvCV((GV*)sstr)) {
3376             mro_changes = 1;
3377         }
3378     }
3379
3380     /* If dest already had a real method, that's a change as well */
3381     if(!mro_changes && GvGP((GV*)dstr) && GvCVu((GV*)dstr)) {
3382         mro_changes = 1;
3383     }
3384
3385     if(strEQ(GvNAME((GV*)dstr),"ISA"))
3386         mro_changes = 2;
3387
3388     gp_free((GV*)dstr);
3389     isGV_with_GP_off(dstr);
3390     (void)SvOK_off(dstr);
3391     isGV_with_GP_on(dstr);
3392     GvINTRO_off(dstr);          /* one-shot flag */
3393     GvGP(dstr) = gp_ref(GvGP(sstr));
3394     if (SvTAINTED(sstr))
3395         SvTAINT(dstr);
3396     if (GvIMPORTED(dstr) != GVf_IMPORTED
3397         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3398         {
3399             GvIMPORTED_on(dstr);
3400         }
3401     GvMULTI_on(dstr);
3402     if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3403     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3404     return;
3405 }
3406
3407 static void
3408 S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr)
3409 {
3410     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3411     SV *dref = NULL;
3412     const int intro = GvINTRO(dstr);
3413     SV **location;
3414     U8 import_flag = 0;
3415     const U32 stype = SvTYPE(sref);
3416
3417     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3418
3419 #ifdef GV_UNIQUE_CHECK
3420     if (GvUNIQUE((GV*)dstr)) {
3421         Perl_croak(aTHX_ PL_no_modify);
3422     }
3423 #endif
3424
3425     if (intro) {
3426         GvINTRO_off(dstr);      /* one-shot flag */
3427         GvLINE(dstr) = CopLINE(PL_curcop);
3428         GvEGV(dstr) = (GV*)dstr;
3429     }
3430     GvMULTI_on(dstr);
3431     switch (stype) {
3432     case SVt_PVCV:
3433         location = (SV **) &GvCV(dstr);
3434         import_flag = GVf_IMPORTED_CV;
3435         goto common;
3436     case SVt_PVHV:
3437         location = (SV **) &GvHV(dstr);
3438         import_flag = GVf_IMPORTED_HV;
3439         goto common;
3440     case SVt_PVAV:
3441         location = (SV **) &GvAV(dstr);
3442         import_flag = GVf_IMPORTED_AV;
3443         goto common;
3444     case SVt_PVIO:
3445         location = (SV **) &GvIOp(dstr);
3446         goto common;
3447     case SVt_PVFM:
3448         location = (SV **) &GvFORM(dstr);
3449     default:
3450         location = &GvSV(dstr);
3451         import_flag = GVf_IMPORTED_SV;
3452     common:
3453         if (intro) {
3454             if (stype == SVt_PVCV) {
3455                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (CV*)sref || GvCVGEN(dstr))) {*/
3456                 if (GvCVGEN(dstr)) {
3457                     SvREFCNT_dec(GvCV(dstr));
3458                     GvCV(dstr) = NULL;
3459                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3460                 }
3461             }
3462             SAVEGENERICSV(*location);
3463         }
3464         else
3465             dref = *location;
3466         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3467             CV* const cv = (CV*)*location;
3468             if (cv) {
3469                 if (!GvCVGEN((GV*)dstr) &&
3470                     (CvROOT(cv) || CvXSUB(cv)))
3471                     {
3472                         /* Redefining a sub - warning is mandatory if
3473                            it was a const and its value changed. */
3474                         if (CvCONST(cv) && CvCONST((CV*)sref)
3475                             && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3476                             NOOP;
3477                             /* They are 2 constant subroutines generated from
3478                                the same constant. This probably means that
3479                                they are really the "same" proxy subroutine
3480                                instantiated in 2 places. Most likely this is
3481                                when a constant is exported twice.  Don't warn.
3482                             */
3483                         }
3484                         else if (ckWARN(WARN_REDEFINE)
3485                                  || (CvCONST(cv)
3486                                      && (!CvCONST((CV*)sref)
3487                                          || sv_cmp(cv_const_sv(cv),
3488                                                    cv_const_sv((CV*)sref))))) {
3489                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3490                                         (const char *)
3491                                         (CvCONST(cv)
3492                                          ? "Constant subroutine %s::%s redefined"
3493                                          : "Subroutine %s::%s redefined"),
3494                                         HvNAME_get(GvSTASH((GV*)dstr)),
3495                                         GvENAME((GV*)dstr));
3496                         }
3497                     }
3498                 if (!intro)
3499                     cv_ckproto_len(cv, (GV*)dstr,
3500                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3501                                    SvPOK(sref) ? SvCUR(sref) : 0);
3502             }
3503             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3504             GvASSUMECV_on(dstr);
3505             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3506         }
3507         *location = sref;
3508         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3509             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3510             GvFLAGS(dstr) |= import_flag;
3511         }
3512         break;
3513     }
3514     SvREFCNT_dec(dref);
3515     if (SvTAINTED(sstr))
3516         SvTAINT(dstr);
3517     return;
3518 }
3519
3520 void
3521 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3522 {
3523     dVAR;
3524     register U32 sflags;
3525     register int dtype;
3526     register svtype stype;
3527
3528     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3529
3530     if (sstr == dstr)
3531         return;
3532
3533     if (SvIS_FREED(dstr)) {
3534         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3535                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3536     }
3537     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3538     if (!sstr)
3539         sstr = &PL_sv_undef;
3540     if (SvIS_FREED(sstr)) {
3541         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3542                    (void*)sstr, (void*)dstr);
3543     }
3544     stype = SvTYPE(sstr);
3545     dtype = SvTYPE(dstr);
3546
3547     (void)SvAMAGIC_off(dstr);
3548     if ( SvVOK(dstr) )
3549     {
3550         /* need to nuke the magic */
3551         mg_free(dstr);
3552         SvRMAGICAL_off(dstr);
3553     }
3554
3555     /* There's a lot of redundancy below but we're going for speed here */
3556
3557     switch (stype) {
3558     case SVt_NULL:
3559       undef_sstr:
3560         if (dtype != SVt_PVGV) {
3561             (void)SvOK_off(dstr);
3562             return;
3563         }
3564         break;
3565     case SVt_IV:
3566         if (SvIOK(sstr)) {
3567             switch (dtype) {
3568             case SVt_NULL:
3569                 sv_upgrade(dstr, SVt_IV);
3570                 break;
3571             case SVt_NV:
3572             case SVt_PV:
3573                 sv_upgrade(dstr, SVt_PVIV);
3574                 break;
3575             case SVt_PVGV:
3576                 goto end_of_first_switch;
3577             }
3578             (void)SvIOK_only(dstr);
3579             SvIV_set(dstr,  SvIVX(sstr));
3580             if (SvIsUV(sstr))
3581                 SvIsUV_on(dstr);
3582             /* SvTAINTED can only be true if the SV has taint magic, which in
3583                turn means that the SV type is PVMG (or greater). This is the
3584                case statement for SVt_IV, so this cannot be true (whatever gcov
3585                may say).  */
3586             assert(!SvTAINTED(sstr));
3587             return;
3588         }
3589         if (!SvROK(sstr))
3590             goto undef_sstr;
3591         if (dtype < SVt_PV && dtype != SVt_IV)
3592             sv_upgrade(dstr, SVt_IV);
3593         break;
3594
3595     case SVt_NV:
3596         if (SvNOK(sstr)) {
3597             switch (dtype) {
3598             case SVt_NULL:
3599             case SVt_IV:
3600                 sv_upgrade(dstr, SVt_NV);
3601                 break;
3602             case SVt_PV:
3603             case SVt_PVIV:
3604                 sv_upgrade(dstr, SVt_PVNV);
3605                 break;
3606             case SVt_PVGV:
3607                 goto end_of_first_switch;
3608             }
3609             SvNV_set(dstr, SvNVX(sstr));
3610             (void)SvNOK_only(dstr);
3611             /* SvTAINTED can only be true if the SV has taint magic, which in
3612                turn means that the SV type is PVMG (or greater). This is the
3613                case statement for SVt_NV, so this cannot be true (whatever gcov
3614                may say).  */
3615             assert(!SvTAINTED(sstr));
3616             return;
3617         }
3618         goto undef_sstr;
3619
3620     case SVt_PVFM:
3621 #ifdef PERL_OLD_COPY_ON_WRITE
3622         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3623             if (dtype < SVt_PVIV)
3624                 sv_upgrade(dstr, SVt_PVIV);
3625             break;
3626         }
3627         /* Fall through */
3628 #endif
3629     case SVt_REGEXP:
3630     case SVt_PV:
3631         if (dtype < SVt_PV)
3632             sv_upgrade(dstr, SVt_PV);
3633         break;
3634     case SVt_PVIV:
3635         if (dtype < SVt_PVIV)
3636             sv_upgrade(dstr, SVt_PVIV);
3637         break;
3638     case SVt_PVNV:
3639         if (dtype < SVt_PVNV)
3640             sv_upgrade(dstr, SVt_PVNV);
3641         break;
3642     default:
3643         {
3644         const char * const type = sv_reftype(sstr,0);
3645         if (PL_op)
3646             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3647         else
3648             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3649         }
3650         break;
3651
3652         /* case SVt_BIND: */
3653     case SVt_PVLV:
3654     case SVt_PVGV:
3655         if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3656             glob_assign_glob(dstr, sstr, dtype);
3657             return;
3658         }
3659         /* SvVALID means that this PVGV is playing at being an FBM.  */
3660         /*FALLTHROUGH*/
3661
3662     case SVt_PVMG:
3663         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3664             mg_get(sstr);
3665             if (SvTYPE(sstr) != stype) {
3666                 stype = SvTYPE(sstr);
3667                 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3668                     glob_assign_glob(dstr, sstr, dtype);
3669                     return;
3670                 }
3671             }
3672         }
3673         if (stype == SVt_PVLV)
3674             SvUPGRADE(dstr, SVt_PVNV);
3675         else
3676             SvUPGRADE(dstr, (svtype)stype);
3677     }
3678  end_of_first_switch:
3679
3680     /* dstr may have been upgraded.  */
3681     dtype = SvTYPE(dstr);
3682     sflags = SvFLAGS(sstr);
3683
3684     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3685         /* Assigning to a subroutine sets the prototype.  */
3686         if (SvOK(sstr)) {
3687             STRLEN len;
3688             const char *const ptr = SvPV_const(sstr, len);
3689
3690             SvGROW(dstr, len + 1);
3691             Copy(ptr, SvPVX(dstr), len + 1, char);
3692             SvCUR_set(dstr, len);
3693             SvPOK_only(dstr);
3694             SvFLAGS(dstr) |= sflags & SVf_UTF8;
3695         } else {
3696             SvOK_off(dstr);
3697         }
3698     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3699         const char * const type = sv_reftype(dstr,0);
3700         if (PL_op)
3701             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_NAME(PL_op));
3702         else
3703             Perl_croak(aTHX_ "Cannot copy to %s", type);
3704     } else if (sflags & SVf_ROK) {
3705         if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3706             && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3707             sstr = SvRV(sstr);
3708             if (sstr == dstr) {
3709                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3710                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3711                 {
3712                     GvIMPORTED_on(dstr);
3713                 }
3714                 GvMULTI_on(dstr);
3715                 return;
3716             }
3717             glob_assign_glob(dstr, sstr, dtype);
3718             return;
3719         }
3720
3721         if (dtype >= SVt_PV) {
3722             if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3723                 glob_assign_ref(dstr, sstr);
3724                 return;
3725             }
3726             if (SvPVX_const(dstr)) {
3727                 SvPV_free(dstr);
3728                 SvLEN_set(dstr, 0);
3729                 SvCUR_set(dstr, 0);
3730             }
3731         }
3732         (void)SvOK_off(dstr);
3733         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3734         SvFLAGS(dstr) |= sflags & SVf_ROK;
3735         assert(!(sflags & SVp_NOK));
3736         assert(!(sflags & SVp_IOK));
3737         assert(!(sflags & SVf_NOK));
3738         assert(!(sflags & SVf_IOK));
3739     }
3740     else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3741         if (!(sflags & SVf_OK)) {
3742             if (ckWARN(WARN_MISC))
3743                 Perl_warner(aTHX_ packWARN(WARN_MISC),
3744                             "Undefined value assigned to typeglob");
3745         }
3746         else {
3747             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3748             if (dstr != (SV*)gv) {
3749                 if (GvGP(dstr))
3750                     gp_free((GV*)dstr);
3751                 GvGP(dstr) = gp_ref(GvGP(gv));
3752             }
3753         }
3754     }
3755     else if (sflags & SVp_POK) {
3756         bool isSwipe = 0;
3757
3758         /*
3759          * Check to see if we can just swipe the string.  If so, it's a
3760          * possible small lose on short strings, but a big win on long ones.
3761          * It might even be a win on short strings if SvPVX_const(dstr)
3762          * has to be allocated and SvPVX_const(sstr) has to be freed.
3763          * Likewise if we can set up COW rather than doing an actual copy, we
3764          * drop to the else clause, as the swipe code and the COW setup code
3765          * have much in common.
3766          */
3767
3768         /* Whichever path we take through the next code, we want this true,
3769            and doing it now facilitates the COW check.  */
3770         (void)SvPOK_only(dstr);
3771
3772         if (
3773             /* If we're already COW then this clause is not true, and if COW
3774                is allowed then we drop down to the else and make dest COW 
3775                with us.  If caller hasn't said that we're allowed to COW
3776                shared hash keys then we don't do the COW setup, even if the
3777                source scalar is a shared hash key scalar.  */
3778             (((flags & SV_COW_SHARED_HASH_KEYS)
3779                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
3780                : 1 /* If making a COW copy is forbidden then the behaviour we
3781                        desire is as if the source SV isn't actually already
3782                        COW, even if it is.  So we act as if the source flags
3783                        are not COW, rather than actually testing them.  */
3784               )
3785 #ifndef PERL_OLD_COPY_ON_WRITE
3786              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
3787                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
3788                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
3789                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
3790                 but in turn, it's somewhat dead code, never expected to go
3791                 live, but more kept as a placeholder on how to do it better
3792                 in a newer implementation.  */
3793              /* If we are COW and dstr is a suitable target then we drop down
3794                 into the else and make dest a COW of us.  */
3795              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3796 #endif
3797              )
3798             &&
3799             !(isSwipe =
3800                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
3801                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
3802                  (!(flags & SV_NOSTEAL)) &&
3803                                         /* and we're allowed to steal temps */
3804                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
3805                  SvLEN(sstr)    &&        /* and really is a string */
3806                                 /* and won't be needed again, potentially */
3807               !(PL_op && PL_op->op_type == OP_AASSIGN))
3808 #ifdef PERL_OLD_COPY_ON_WRITE
3809             && ((flags & SV_COW_SHARED_HASH_KEYS)
3810                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3811                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3812                      && SvTYPE(sstr) >= SVt_PVIV))
3813                 : 1)
3814 #endif
3815             ) {
3816             /* Failed the swipe test, and it's not a shared hash key either.
3817                Have to copy the string.  */
3818             STRLEN len = SvCUR(sstr);
3819             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
3820             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3821             SvCUR_set(dstr, len);
3822             *SvEND(dstr) = '\0';
3823         } else {
3824             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3825                be true in here.  */
3826             /* Either it's a shared hash key, or it's suitable for
3827                copy-on-write or we can swipe the string.  */
3828             if (DEBUG_C_TEST) {
3829                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3830                 sv_dump(sstr);
3831                 sv_dump(dstr);
3832             }
3833 #ifdef PERL_OLD_COPY_ON_WRITE
3834             if (!isSwipe) {
3835                 /* I believe I should acquire a global SV mutex if
3836                    it's a COW sv (not a shared hash key) to stop
3837                    it going un copy-on-write.
3838                    If the source SV has gone un copy on write between up there
3839                    and down here, then (assert() that) it is of the correct
3840                    form to make it copy on write again */
3841                 if ((sflags & (SVf_FAKE | SVf_READONLY))
3842                     != (SVf_FAKE | SVf_READONLY)) {
3843                     SvREADONLY_on(sstr);
3844                     SvFAKE_on(sstr);
3845                     /* Make the source SV into a loop of 1.
3846                        (about to become 2) */
3847                     SV_COW_NEXT_SV_SET(sstr, sstr);
3848                 }
3849             }
3850 #endif
3851             /* Initial code is common.  */
3852             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
3853                 SvPV_free(dstr);
3854             }
3855
3856             if (!isSwipe) {
3857                 /* making another shared SV.  */
3858                 STRLEN cur = SvCUR(sstr);
3859                 STRLEN len = SvLEN(sstr);
3860 #ifdef PERL_OLD_COPY_ON_WRITE
3861                 if (len) {
3862                     assert (SvTYPE(dstr) >= SVt_PVIV);
3863                     /* SvIsCOW_normal */
3864                     /* splice us in between source and next-after-source.  */
3865                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3866                     SV_COW_NEXT_SV_SET(sstr, dstr);
3867                     SvPV_set(dstr, SvPVX_mutable(sstr));
3868                 } else
3869 #endif
3870                 {
3871                     /* SvIsCOW_shared_hash */
3872                     DEBUG_C(PerlIO_printf(Perl_debug_log,
3873                                           "Copy on write: Sharing hash\n"));
3874
3875                     assert (SvTYPE(dstr) >= SVt_PV);
3876                     SvPV_set(dstr,
3877                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3878                 }
3879                 SvLEN_set(dstr, len);
3880                 SvCUR_set(dstr, cur);
3881                 SvREADONLY_on(dstr);
3882                 SvFAKE_on(dstr);
3883                 /* Relesase a global SV mutex.  */
3884             }
3885             else
3886                 {       /* Passes the swipe test.  */
3887                 SvPV_set(dstr, SvPVX_mutable(sstr));
3888                 SvLEN_set(dstr, SvLEN(sstr));
3889                 SvCUR_set(dstr, SvCUR(sstr));
3890
3891                 SvTEMP_off(dstr);
3892                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
3893                 SvPV_set(sstr, NULL);
3894                 SvLEN_set(sstr, 0);
3895                 SvCUR_set(sstr, 0);
3896                 SvTEMP_off(sstr);
3897             }
3898         }
3899         if (sflags & SVp_NOK) {
3900             SvNV_set(dstr, SvNVX(sstr));
3901         }
3902         if (sflags & SVp_IOK) {
3903             SvIV_set(dstr, SvIVX(sstr));
3904             /* Must do this otherwise some other overloaded use of 0x80000000
3905                gets confused. I guess SVpbm_VALID */
3906             if (sflags & SVf_IVisUV)
3907                 SvIsUV_on(dstr);
3908         }
3909         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3910         {
3911             const MAGIC * const smg = SvVSTRING_mg(sstr);
3912             if (smg) {
3913                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3914                          smg->mg_ptr, smg->mg_len);
3915                 SvRMAGICAL_on(dstr);
3916             }
3917         }
3918     }
3919     else if (sflags & (SVp_IOK|SVp_NOK)) {
3920         (void)SvOK_off(dstr);
3921         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3922         if (sflags & SVp_IOK) {
3923             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
3924             SvIV_set(dstr, SvIVX(sstr));
3925         }
3926         if (sflags & SVp_NOK) {
3927             SvNV_set(dstr, SvNVX(sstr));
3928         }
3929     }
3930     else {
3931         if (isGV_with_GP(sstr)) {
3932             /* This stringification rule for globs is spread in 3 places.
3933                This feels bad. FIXME.  */
3934             const U32 wasfake = sflags & SVf_FAKE;
3935
3936             /* FAKE globs can get coerced, so need to turn this off
3937                temporarily if it is on.  */
3938             SvFAKE_off(sstr);
3939             gv_efullname3(dstr, (GV *)sstr, "*");
3940             SvFLAGS(sstr) |= wasfake;
3941         }
3942         else
3943             (void)SvOK_off(dstr);
3944     }
3945     if (SvTAINTED(sstr))
3946         SvTAINT(dstr);
3947 }
3948
3949 /*
3950 =for apidoc sv_setsv_mg
3951
3952 Like C<sv_setsv>, but also handles 'set' magic.
3953
3954 =cut
3955 */
3956
3957 void
3958 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3959 {
3960     PERL_ARGS_ASSERT_SV_SETSV_MG;
3961
3962     sv_setsv(dstr,sstr);
3963     SvSETMAGIC(dstr);
3964 }
3965
3966 #ifdef PERL_OLD_COPY_ON_WRITE
3967 SV *
3968 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3969 {
3970     STRLEN cur = SvCUR(sstr);
3971     STRLEN len = SvLEN(sstr);
3972     register char *new_pv;
3973
3974     PERL_ARGS_ASSERT_SV_SETSV_COW;
3975
3976     if (DEBUG_C_TEST) {
3977         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3978                       (void*)sstr, (void*)dstr);
3979         sv_dump(sstr);
3980         if (dstr)
3981                     sv_dump(dstr);
3982     }
3983
3984     if (dstr) {
3985         if (SvTHINKFIRST(dstr))
3986             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3987         else if (SvPVX_const(dstr))
3988             Safefree(SvPVX_const(dstr));
3989     }
3990     else
3991         new_SV(dstr);
3992     SvUPGRADE(dstr, SVt_PVIV);
3993
3994     assert (SvPOK(sstr));
3995     assert (SvPOKp(sstr));
3996     assert (!SvIOK(sstr));
3997     assert (!SvIOKp(sstr));
3998     assert (!SvNOK(sstr));
3999     assert (!SvNOKp(sstr));
4000
4001     if (SvIsCOW(sstr)) {
4002
4003         if (SvLEN(sstr) == 0) {
4004             /* source is a COW shared hash key.  */
4005             DEBUG_C(PerlIO_printf(Perl_debug_log,
4006                                   "Fast copy on write: Sharing hash\n"));
4007             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4008             goto common_exit;
4009         }
4010         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4011     } else {
4012         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4013         SvUPGRADE(sstr, SVt_PVIV);
4014         SvREADONLY_on(sstr);
4015         SvFAKE_on(sstr);
4016         DEBUG_C(PerlIO_printf(Perl_debug_log,
4017                               "Fast copy on write: Converting sstr to COW\n"));
4018         SV_COW_NEXT_SV_SET(dstr, sstr);
4019     }
4020     SV_COW_NEXT_SV_SET(sstr, dstr);
4021     new_pv = SvPVX_mutable(sstr);
4022
4023   common_exit:
4024     SvPV_set(dstr, new_pv);
4025     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4026     if (SvUTF8(sstr))
4027         SvUTF8_on(dstr);
4028     SvLEN_set(dstr, len);
4029     SvCUR_set(dstr, cur);
4030     if (DEBUG_C_TEST) {
4031         sv_dump(dstr);
4032     }
4033     return dstr;
4034 }
4035 #endif
4036
4037 /*
4038 =for apidoc sv_setpvn
4039
4040 Copies a string into an SV.  The C<len> parameter indicates the number of
4041 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4042 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4043
4044 =cut
4045 */
4046
4047 void
4048 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4049 {
4050     dVAR;
4051     register char *dptr;
4052
4053     PERL_ARGS_ASSERT_SV_SETPVN;
4054
4055     SV_CHECK_THINKFIRST_COW_DROP(sv);
4056     if (!ptr) {
4057         (void)SvOK_off(sv);
4058         return;
4059     }
4060     else {
4061         /* len is STRLEN which is unsigned, need to copy to signed */
4062         const IV iv = len;
4063         if (iv < 0)
4064             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4065     }
4066     SvUPGRADE(sv, SVt_PV);
4067
4068     dptr = SvGROW(sv, len + 1);
4069     Move(ptr,dptr,len,char);
4070     dptr[len] = '\0';
4071     SvCUR_set(sv, len);
4072     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4073     SvTAINT(sv);
4074 }
4075
4076 /*
4077 =for apidoc sv_setpvn_mg
4078
4079 Like C<sv_setpvn>, but also handles 'set' magic.
4080
4081 =cut
4082 */
4083
4084 void
4085 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4086 {
4087     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4088
4089     sv_setpvn(sv,ptr,len);
4090     SvSETMAGIC(sv);
4091 }
4092
4093 /*
4094 =for apidoc sv_setpv
4095
4096 Copies a string into an SV.  The string must be null-terminated.  Does not
4097 handle 'set' magic.  See C<sv_setpv_mg>.
4098
4099 =cut
4100 */
4101
4102 void
4103 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4104 {
4105     dVAR;
4106     register STRLEN len;
4107
4108     PERL_ARGS_ASSERT_SV_SETPV;
4109
4110     SV_CHECK_THINKFIRST_COW_DROP(sv);
4111     if (!ptr) {
4112         (void)SvOK_off(sv);
4113         return;
4114     }
4115     len = strlen(ptr);
4116     SvUPGRADE(sv, SVt_PV);
4117
4118     SvGROW(sv, len + 1);
4119     Move(ptr,SvPVX(sv),len+1,char);
4120     SvCUR_set(sv, len);
4121     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4122     SvTAINT(sv);
4123 }
4124
4125 /*
4126 =for apidoc sv_setpv_mg
4127
4128 Like C<sv_setpv>, but also handles 'set' magic.
4129
4130 =cut
4131 */
4132
4133 void
4134 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4135 {
4136     PERL_ARGS_ASSERT_SV_SETPV_MG;
4137
4138     sv_setpv(sv,ptr);
4139     SvSETMAGIC(sv);
4140 }
4141
4142 /*
4143 =for apidoc sv_usepvn_flags
4144
4145 Tells an SV to use C<ptr> to find its string value.  Normally the
4146 string is stored inside the SV but sv_usepvn allows the SV to use an
4147 outside string.  The C<ptr> should point to memory that was allocated
4148 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4149 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4150 so that pointer should not be freed or used by the programmer after
4151 giving it to sv_usepvn, and neither should any pointers from "behind"
4152 that pointer (e.g. ptr + 1) be used.
4153
4154 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4155 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4156 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4157 C<len>, and already meets the requirements for storing in C<SvPVX>)
4158
4159 =cut
4160 */
4161
4162 void
4163 Perl_sv_usepvn_flags(pTHX_ SV *sv, char *ptr, STRLEN len, U32 flags)
4164 {
4165     dVAR;
4166     STRLEN allocate;
4167
4168     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4169
4170     SV_CHECK_THINKFIRST_COW_DROP(sv);
4171     SvUPGRADE(sv, SVt_PV);
4172     if (!ptr) {
4173         (void)SvOK_off(sv);
4174         if (flags & SV_SMAGIC)
4175             SvSETMAGIC(sv);
4176         return;
4177     }
4178     if (SvPVX_const(sv))
4179         SvPV_free(sv);
4180
4181 #ifdef DEBUGGING
4182     if (flags & SV_HAS_TRAILING_NUL)
4183         assert(ptr[len] == '\0');
4184 #endif
4185
4186     allocate = (flags & SV_HAS_TRAILING_NUL)
4187         ? len + 1 :
4188 #ifdef Perl_safesysmalloc_size
4189         len + 1;
4190 #else 
4191         PERL_STRLEN_ROUNDUP(len + 1);
4192 #endif
4193     if (flags & SV_HAS_TRAILING_NUL) {
4194         /* It's long enough - do nothing.
4195            Specfically Perl_newCONSTSUB is relying on this.  */
4196     } else {
4197 #ifdef DEBUGGING
4198         /* Force a move to shake out bugs in callers.  */
4199         char *new_ptr = (char*)safemalloc(allocate);
4200         Copy(ptr, new_ptr, len, char);
4201         PoisonFree(ptr,len,char);
4202         Safefree(ptr);
4203         ptr = new_ptr;
4204 #else
4205         ptr = (char*) saferealloc (ptr, allocate);
4206 #endif
4207     }
4208 #ifdef Perl_safesysmalloc_size
4209     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4210 #else
4211     SvLEN_set(sv, allocate);
4212 #endif
4213     SvCUR_set(sv, len);
4214     SvPV_set(sv, ptr);
4215     if (!(flags & SV_HAS_TRAILING_NUL)) {
4216         ptr[len] = '\0';
4217     }
4218     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4219     SvTAINT(sv);
4220     if (flags & SV_SMAGIC)
4221         SvSETMAGIC(sv);
4222 }
4223
4224 #ifdef PERL_OLD_COPY_ON_WRITE
4225 /* Need to do this *after* making the SV normal, as we need the buffer
4226    pointer to remain valid until after we've copied it.  If we let go too early,
4227    another thread could invalidate it by unsharing last of the same hash key
4228    (which it can do by means other than releasing copy-on-write Svs)
4229    or by changing the other copy-on-write SVs in the loop.  */
4230 STATIC void
4231 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4232 {
4233     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4234
4235     { /* this SV was SvIsCOW_normal(sv) */
4236          /* we need to find the SV pointing to us.  */
4237         SV *current = SV_COW_NEXT_SV(after);
4238
4239         if (current == sv) {
4240             /* The SV we point to points back to us (there were only two of us
4241                in the loop.)
4242                Hence other SV is no longer copy on write either.  */
4243             SvFAKE_off(after);
4244             SvREADONLY_off(after);
4245         } else {
4246             /* We need to follow the pointers around the loop.  */
4247             SV *next;
4248             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4249                 assert (next);
4250                 current = next;
4251                  /* don't loop forever if the structure is bust, and we have
4252                     a pointer into a closed loop.  */
4253                 assert (current != after);
4254                 assert (SvPVX_const(current) == pvx);
4255             }
4256             /* Make the SV before us point to the SV after us.  */
4257             SV_COW_NEXT_SV_SET(current, after);
4258         }
4259     }
4260 }
4261 #endif
4262 /*
4263 =for apidoc sv_force_normal_flags
4264
4265 Undo various types of fakery on an SV: if the PV is a shared string, make
4266 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4267 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4268 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4269 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4270 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4271 set to some other value.) In addition, the C<flags> parameter gets passed to
4272 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4273 with flags set to 0.
4274
4275 =cut
4276 */
4277
4278 void
4279 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4280 {
4281     dVAR;
4282
4283     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4284
4285 #ifdef PERL_OLD_COPY_ON_WRITE
4286     if (SvREADONLY(sv)) {
4287         /* At this point I believe I should acquire a global SV mutex.  */
4288         if (SvFAKE(sv)) {
4289             const char * const pvx = SvPVX_const(sv);
4290             const STRLEN len = SvLEN(sv);
4291             const STRLEN cur = SvCUR(sv);
4292             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4293                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4294                we'll fail an assertion.  */
4295             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4296
4297             if (DEBUG_C_TEST) {
4298                 PerlIO_printf(Perl_debug_log,
4299                               "Copy on write: Force normal %ld\n",
4300                               (long) flags);
4301                 sv_dump(sv);
4302             }
4303             SvFAKE_off(sv);
4304             SvREADONLY_off(sv);
4305             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4306             SvPV_set(sv, NULL);
4307             SvLEN_set(sv, 0);
4308             if (flags & SV_COW_DROP_PV) {
4309                 /* OK, so we don't need to copy our buffer.  */
4310                 SvPOK_off(sv);
4311             } else {
4312                 SvGROW(sv, cur + 1);
4313                 Move(pvx,SvPVX(sv),cur,char);
4314                 SvCUR_set(sv, cur);
4315                 *SvEND(sv) = '\0';
4316             }
4317             if (len) {
4318                 sv_release_COW(sv, pvx, next);
4319             } else {
4320                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4321             }
4322             if (DEBUG_C_TEST) {
4323                 sv_dump(sv);
4324             }
4325         }
4326         else if (IN_PERL_RUNTIME)
4327             Perl_croak(aTHX_ PL_no_modify);
4328         /* At this point I believe that I can drop the global SV mutex.  */
4329     }
4330 #else
4331     if (SvREADONLY(sv)) {
4332         if (SvFAKE(sv)) {
4333             const char * const pvx = SvPVX_const(sv);
4334             const STRLEN len = SvCUR(sv);
4335             SvFAKE_off(sv);
4336             SvREADONLY_off(sv);
4337             SvPV_set(sv, NULL);
4338             SvLEN_set(sv, 0);
4339             SvGROW(sv, len + 1);
4340             Move(pvx,SvPVX(sv),len,char);
4341             *SvEND(sv) = '\0';
4342             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4343         }
4344         else if (IN_PERL_RUNTIME)
4345             Perl_croak(aTHX_ PL_no_modify);
4346     }
4347 #endif
4348     if (SvROK(sv))
4349         sv_unref_flags(sv, flags);
4350     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4351         sv_unglob(sv);
4352 }
4353
4354 /*
4355 =for apidoc sv_chop
4356
4357 Efficient removal of characters from the beginning of the string buffer.
4358 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4359 the string buffer.  The C<ptr> becomes the first character of the adjusted
4360 string. Uses the "OOK hack".
4361 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4362 refer to the same chunk of data.
4363
4364 =cut
4365 */
4366
4367 void
4368 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4369 {
4370     STRLEN delta;
4371     STRLEN old_delta;
4372     U8 *p;
4373 #ifdef DEBUGGING
4374     const U8 *real_start;
4375 #endif
4376
4377     PERL_ARGS_ASSERT_SV_CHOP;
4378
4379     if (!ptr || !SvPOKp(sv))
4380         return;
4381     delta = ptr - SvPVX_const(sv);
4382     if (!delta) {
4383         /* Nothing to do.  */
4384         return;
4385     }
4386     assert(ptr > SvPVX_const(sv));
4387     SV_CHECK_THINKFIRST(sv);
4388
4389     if (!SvOOK(sv)) {
4390         if (!SvLEN(sv)) { /* make copy of shared string */
4391             const char *pvx = SvPVX_const(sv);
4392             const STRLEN len = SvCUR(sv);
4393             SvGROW(sv, len + 1);
4394             Move(pvx,SvPVX(sv),len,char);
4395             *SvEND(sv) = '\0';
4396         }
4397         SvFLAGS(sv) |= SVf_OOK;
4398         old_delta = 0;
4399     } else {
4400         SvOOK_offset(sv, old_delta);
4401     }
4402     SvLEN_set(sv, SvLEN(sv) - delta);
4403     SvCUR_set(sv, SvCUR(sv) - delta);
4404     SvPV_set(sv, SvPVX(sv) + delta);
4405
4406     p = (U8 *)SvPVX_const(sv);
4407
4408     delta += old_delta;
4409
4410 #ifdef DEBUGGING
4411     real_start = p - delta;
4412 #endif
4413
4414     assert(delta);
4415     if (delta < 0x100) {
4416         *--p = (U8) delta;
4417     } else {
4418         *--p = 0;
4419         p -= sizeof(STRLEN);
4420         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4421     }
4422
4423 #ifdef DEBUGGING
4424     /* Fill the preceding buffer with sentinals to verify that no-one is
4425        using it.  */
4426     while (p > real_start) {
4427         --p;
4428         *p = (U8)PTR2UV(p);
4429     }
4430 #endif
4431 }
4432
4433 /*
4434 =for apidoc sv_catpvn
4435
4436 Concatenates the string onto the end of the string which is in the SV.  The
4437 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4438 status set, then the bytes appended should be valid UTF-8.
4439 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4440
4441 =for apidoc sv_catpvn_flags
4442
4443 Concatenates the string onto the end of the string which is in the SV.  The
4444 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4445 status set, then the bytes appended should be valid UTF-8.
4446 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4447 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4448 in terms of this function.
4449
4450 =cut
4451 */
4452
4453 void
4454 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4455 {
4456     dVAR;
4457     STRLEN dlen;
4458     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4459
4460     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4461
4462     SvGROW(dsv, dlen + slen + 1);
4463     if (sstr == dstr)
4464         sstr = SvPVX_const(dsv);
4465     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4466     SvCUR_set(dsv, SvCUR(dsv) + slen);
4467     *SvEND(dsv) = '\0';
4468     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4469     SvTAINT(dsv);
4470     if (flags & SV_SMAGIC)
4471         SvSETMAGIC(dsv);
4472 }
4473
4474 /*
4475 =for apidoc sv_catsv
4476
4477 Concatenates the string from SV C<ssv> onto the end of the string in
4478 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4479 not 'set' magic.  See C<sv_catsv_mg>.
4480
4481 =for apidoc sv_catsv_flags
4482
4483 Concatenates the string from SV C<ssv> onto the end of the string in
4484 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4485 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4486 and C<sv_catsv_nomg> are implemented in terms of this function.
4487
4488 =cut */
4489
4490 void
4491 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4492 {
4493     dVAR;
4494  
4495     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4496
4497    if (ssv) {
4498         STRLEN slen;
4499         const char *spv = SvPV_const(ssv, slen);
4500         if (spv) {
4501             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4502                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4503                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4504                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4505                 dsv->sv_flags doesn't have that bit set.
4506                 Andy Dougherty  12 Oct 2001
4507             */
4508             const I32 sutf8 = DO_UTF8(ssv);
4509             I32 dutf8;
4510
4511             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4512                 mg_get(dsv);
4513             dutf8 = DO_UTF8(dsv);
4514
4515             if (dutf8 != sutf8) {
4516                 if (dutf8) {
4517                     /* Not modifying source SV, so taking a temporary copy. */
4518                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4519
4520                     sv_utf8_upgrade(csv);
4521                     spv = SvPV_const(csv, slen);
4522                 }
4523                 else
4524                     sv_utf8_upgrade_nomg(dsv);
4525             }
4526             sv_catpvn_nomg(dsv, spv, slen);
4527         }
4528     }
4529     if (flags & SV_SMAGIC)
4530         SvSETMAGIC(dsv);
4531 }
4532
4533 /*
4534 =for apidoc sv_catpv
4535
4536 Concatenates the string onto the end of the string which is in the SV.
4537 If the SV has the UTF-8 status set, then the bytes appended should be
4538 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4539
4540 =cut */
4541
4542 void
4543 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4544 {
4545     dVAR;
4546     register STRLEN len;
4547     STRLEN tlen;
4548     char *junk;
4549
4550     PERL_ARGS_ASSERT_SV_CATPV;
4551
4552     if (!ptr)
4553         return;
4554     junk = SvPV_force(sv, tlen);
4555     len = strlen(ptr);
4556     SvGROW(sv, tlen + len + 1);
4557     if (ptr == junk)
4558         ptr = SvPVX_const(sv);
4559     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4560     SvCUR_set(sv, SvCUR(sv) + len);
4561     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4562     SvTAINT(sv);
4563 }
4564
4565 /*
4566 =for apidoc sv_catpv_mg
4567
4568 Like C<sv_catpv>, but also handles 'set' magic.
4569
4570 =cut
4571 */
4572
4573 void
4574 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4575 {
4576     PERL_ARGS_ASSERT_SV_CATPV_MG;
4577
4578     sv_catpv(sv,ptr);
4579     SvSETMAGIC(sv);
4580 }
4581
4582 /*
4583 =for apidoc newSV
4584
4585 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4586 bytes of preallocated string space the SV should have.  An extra byte for a
4587 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4588 space is allocated.)  The reference count for the new SV is set to 1.
4589
4590 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4591 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4592 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4593 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4594 modules supporting older perls.
4595
4596 =cut
4597 */
4598
4599 SV *
4600 Perl_newSV(pTHX_ STRLEN len)
4601 {
4602     dVAR;
4603     register SV *sv;
4604
4605     new_SV(sv);
4606     if (len) {
4607         sv_upgrade(sv, SVt_PV);
4608         SvGROW(sv, len + 1);
4609     }
4610     return sv;
4611 }
4612 /*
4613 =for apidoc sv_magicext
4614
4615 Adds magic to an SV, upgrading it if necessary. Applies the
4616 supplied vtable and returns a pointer to the magic added.
4617
4618 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4619 In particular, you can add magic to SvREADONLY SVs, and add more than
4620 one instance of the same 'how'.
4621
4622 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4623 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4624 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4625 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4626
4627 (This is now used as a subroutine by C<sv_magic>.)
4628
4629 =cut
4630 */
4631 MAGIC * 
4632 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, const MGVTBL *vtable,
4633                  const char* name, I32 namlen)
4634 {
4635     dVAR;
4636     MAGIC* mg;
4637
4638     PERL_ARGS_ASSERT_SV_MAGICEXT;
4639
4640     SvUPGRADE(sv, SVt_PVMG);
4641     Newxz(mg, 1, MAGIC);
4642     mg->mg_moremagic = SvMAGIC(sv);
4643     SvMAGIC_set(sv, mg);
4644
4645     /* Sometimes a magic contains a reference loop, where the sv and
4646        object refer to each other.  To prevent a reference loop that
4647        would prevent such objects being freed, we look for such loops
4648        and if we find one we avoid incrementing the object refcount.
4649
4650        Note we cannot do this to avoid self-tie loops as intervening RV must
4651        have its REFCNT incremented to keep it in existence.
4652
4653     */
4654     if (!obj || obj == sv ||
4655         how == PERL_MAGIC_arylen ||
4656         how == PERL_MAGIC_symtab ||
4657         (SvTYPE(obj) == SVt_PVGV &&
4658             (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4659             GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4660             GvFORM(obj) == (CV*)sv)))
4661     {
4662         mg->mg_obj = obj;
4663     }
4664     else {
4665         mg->mg_obj = SvREFCNT_inc_simple(obj);
4666         mg->mg_flags |= MGf_REFCOUNTED;
4667     }
4668
4669     /* Normal self-ties simply pass a null object, and instead of
4670        using mg_obj directly, use the SvTIED_obj macro to produce a
4671        new RV as needed.  For glob "self-ties", we are tieing the PVIO
4672        with an RV obj pointing to the glob containing the PVIO.  In
4673        this case, to avoid a reference loop, we need to weaken the
4674        reference.
4675     */
4676
4677     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4678         obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4679     {
4680       sv_rvweaken(obj);
4681     }
4682
4683     mg->mg_type = how;
4684     mg->mg_len = namlen;
4685     if (name) {
4686         if (namlen > 0)
4687             mg->mg_ptr = savepvn(name, namlen);
4688         else if (namlen == HEf_SVKEY)
4689             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV*)name);
4690         else
4691             mg->mg_ptr = (char *) name;
4692     }
4693     mg->mg_virtual = (MGVTBL *) vtable;
4694
4695     mg_magical(sv);
4696     if (SvGMAGICAL(sv))
4697         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4698     return mg;
4699 }
4700
4701 /*
4702 =for apidoc sv_magic
4703
4704 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4705 then adds a new magic item of type C<how> to the head of the magic list.
4706
4707 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4708 handling of the C<name> and C<namlen> arguments.
4709
4710 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4711 to add more than one instance of the same 'how'.
4712
4713 =cut
4714 */
4715
4716 void
4717 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4718 {
4719     dVAR;
4720     const MGVTBL *vtable;
4721     MAGIC* mg;
4722
4723     PERL_ARGS_ASSERT_SV_MAGIC;
4724
4725 #ifdef PERL_OLD_COPY_ON_WRITE
4726     if (SvIsCOW(sv))
4727         sv_force_normal_flags(sv, 0);
4728 #endif
4729     if (SvREADONLY(sv)) {
4730         if (
4731             /* its okay to attach magic to shared strings; the subsequent
4732              * upgrade to PVMG will unshare the string */
4733             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4734
4735             && IN_PERL_RUNTIME
4736             && how != PERL_MAGIC_regex_global
4737             && how != PERL_MAGIC_bm
4738             && how != PERL_MAGIC_fm
4739             && how != PERL_MAGIC_sv
4740             && how != PERL_MAGIC_backref
4741            )
4742         {
4743             Perl_croak(aTHX_ PL_no_modify);
4744         }
4745     }
4746     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4747         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4748             /* sv_magic() refuses to add a magic of the same 'how' as an
4749                existing one
4750              */
4751             if (how == PERL_MAGIC_taint) {
4752                 mg->mg_len |= 1;
4753                 /* Any scalar which already had taint magic on which someone
4754                    (erroneously?) did SvIOK_on() or similar will now be
4755                    incorrectly sporting public "OK" flags.  */
4756                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4757             }
4758             return;
4759         }
4760     }
4761
4762     switch (how) {
4763     case PERL_MAGIC_sv:
4764         vtable = &PL_vtbl_sv;
4765         break;
4766     case PERL_MAGIC_overload:
4767         vtable = &PL_vtbl_amagic;
4768         break;
4769     case PERL_MAGIC_overload_elem:
4770         vtable = &PL_vtbl_amagicelem;
4771         break;
4772     case PERL_MAGIC_overload_table:
4773         vtable = &PL_vtbl_ovrld;
4774         break;
4775     case PERL_MAGIC_bm:
4776         vtable = &PL_vtbl_bm;
4777         break;
4778     case PERL_MAGIC_regdata:
4779         vtable = &PL_vtbl_regdata;
4780         break;
4781     case PERL_MAGIC_regdatum:
4782         vtable = &PL_vtbl_regdatum;
4783         break;
4784     case PERL_MAGIC_env:
4785         vtable = &PL_vtbl_env;
4786         break;
4787     case PERL_MAGIC_fm:
4788         vtable = &PL_vtbl_fm;
4789         break;
4790     case PERL_MAGIC_envelem:
4791         vtable = &PL_vtbl_envelem;
4792         break;
4793     case PERL_MAGIC_regex_global:
4794         vtable = &PL_vtbl_mglob;
4795         break;
4796     case PERL_MAGIC_isa:
4797         vtable = &PL_vtbl_isa;
4798         break;
4799     case PERL_MAGIC_isaelem:
4800         vtable = &PL_vtbl_isaelem;
4801         break;
4802     case PERL_MAGIC_nkeys:
4803         vtable = &PL_vtbl_nkeys;
4804         break;
4805     case PERL_MAGIC_dbfile:
4806         vtable = NULL;
4807         break;
4808     case PERL_MAGIC_dbline:
4809         vtable = &PL_vtbl_dbline;
4810         break;
4811 #ifdef USE_LOCALE_COLLATE
4812     case PERL_MAGIC_collxfrm:
4813         vtable = &PL_vtbl_collxfrm;
4814         break;
4815 #endif /* USE_LOCALE_COLLATE */
4816     case PERL_MAGIC_tied:
4817         vtable = &PL_vtbl_pack;
4818         break;
4819     case PERL_MAGIC_tiedelem:
4820     case PERL_MAGIC_tiedscalar:
4821         vtable = &PL_vtbl_packelem;
4822         break;
4823     case PERL_MAGIC_qr:
4824         vtable = &PL_vtbl_regexp;
4825         break;
4826     case PERL_MAGIC_hints:
4827         /* As this vtable is all NULL, we can reuse it.  */
4828     case PERL_MAGIC_sig:
4829         vtable = &PL_vtbl_sig;
4830         break;
4831     case PERL_MAGIC_sigelem:
4832         vtable = &PL_vtbl_sigelem;
4833         break;
4834     case PERL_MAGIC_taint:
4835         vtable = &PL_vtbl_taint;
4836         break;
4837     case PERL_MAGIC_uvar:
4838         vtable = &PL_vtbl_uvar;
4839         break;
4840     case PERL_MAGIC_vec:
4841         vtable = &PL_vtbl_vec;
4842         break;
4843     case PERL_MAGIC_arylen_p:
4844     case PERL_MAGIC_rhash:
4845     case PERL_MAGIC_symtab:
4846     case PERL_MAGIC_vstring:
4847         vtable = NULL;
4848         break;
4849     case PERL_MAGIC_utf8:
4850         vtable = &PL_vtbl_utf8;
4851         break;
4852     case PERL_MAGIC_substr:
4853         vtable = &PL_vtbl_substr;
4854         break;
4855     case PERL_MAGIC_defelem:
4856         vtable = &PL_vtbl_defelem;
4857         break;
4858     case PERL_MAGIC_arylen:
4859         vtable = &PL_vtbl_arylen;
4860         break;
4861     case PERL_MAGIC_pos:
4862         vtable = &PL_vtbl_pos;
4863         break;
4864     case PERL_MAGIC_backref:
4865         vtable = &PL_vtbl_backref;
4866         break;
4867     case PERL_MAGIC_hintselem:
4868         vtable = &PL_vtbl_hintselem;
4869         break;
4870     case PERL_MAGIC_ext:
4871         /* Reserved for use by extensions not perl internals.           */
4872         /* Useful for attaching extension internal data to perl vars.   */
4873         /* Note that multiple extensions may clash if magical scalars   */
4874         /* etc holding private data from one are passed to another.     */
4875         vtable = NULL;
4876         break;
4877     default:
4878         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4879     }
4880
4881     /* Rest of work is done else where */
4882     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4883
4884     switch (how) {
4885     case PERL_MAGIC_taint:
4886         mg->mg_len = 1;
4887         break;
4888     case PERL_MAGIC_ext:
4889     case PERL_MAGIC_dbfile:
4890         SvRMAGICAL_on(sv);
4891         break;
4892     }
4893 }
4894
4895 /*
4896 =for apidoc sv_unmagic
4897
4898 Removes all magic of type C<type> from an SV.
4899
4900 =cut
4901 */
4902
4903 int
4904 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4905 {
4906     MAGIC* mg;
4907     MAGIC** mgp;
4908
4909     PERL_ARGS_ASSERT_SV_UNMAGIC;
4910
4911     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4912         return 0;
4913     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4914     for (mg = *mgp; mg; mg = *mgp) {
4915         if (mg->mg_type == type) {
4916             const MGVTBL* const vtbl = mg->mg_virtual;
4917             *mgp = mg->mg_moremagic;
4918             if (vtbl && vtbl->svt_free)
4919                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4920             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4921                 if (mg->mg_len > 0)
4922                     Safefree(mg->mg_ptr);
4923                 else if (mg->mg_len == HEf_SVKEY)
4924                     SvREFCNT_dec((SV*)mg->mg_ptr);
4925                 else if (mg->mg_type == PERL_MAGIC_utf8)
4926                     Safefree(mg->mg_ptr);
4927             }
4928             if (mg->mg_flags & MGf_REFCOUNTED)
4929                 SvREFCNT_dec(mg->mg_obj);
4930             Safefree(mg);
4931         }
4932         else
4933             mgp = &mg->mg_moremagic;
4934     }
4935     if (!SvMAGIC(sv)) {
4936         SvMAGICAL_off(sv);
4937         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4938         SvMAGIC_set(sv, NULL);
4939     }
4940
4941     return 0;
4942 }
4943
4944 /*
4945 =for apidoc sv_rvweaken
4946
4947 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4948 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4949 push a back-reference to this RV onto the array of backreferences
4950 associated with that magic. If the RV is magical, set magic will be
4951 called after the RV is cleared.
4952
4953 =cut
4954 */
4955
4956 SV *
4957 Perl_sv_rvweaken(pTHX_ SV *sv)
4958 {
4959     SV *tsv;
4960
4961     PERL_ARGS_ASSERT_SV_RVWEAKEN;
4962
4963     if (!SvOK(sv))  /* let undefs pass */
4964         return sv;
4965     if (!SvROK(sv))
4966         Perl_croak(aTHX_ "Can't weaken a nonreference");
4967     else if (SvWEAKREF(sv)) {
4968         if (ckWARN(WARN_MISC))
4969             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4970         return sv;
4971     }
4972     tsv = SvRV(sv);
4973     Perl_sv_add_backref(aTHX_ tsv, sv);
4974     SvWEAKREF_on(sv);
4975     SvREFCNT_dec(tsv);
4976     return sv;
4977 }
4978
4979 /* Give tsv backref magic if it hasn't already got it, then push a
4980  * back-reference to sv onto the array associated with the backref magic.
4981  */
4982
4983 void
4984 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4985 {
4986     dVAR;
4987     AV *av;
4988
4989     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
4990
4991     if (SvTYPE(tsv) == SVt_PVHV) {
4992         AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4993
4994         av = *avp;
4995         if (!av) {
4996             /* There is no AV in the offical place - try a fixup.  */
4997             MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4998
4999             if (mg) {
5000                 /* Aha. They've got it stowed in magic.  Bring it back.  */
5001                 av = (AV*)mg->mg_obj;
5002                 /* Stop mg_free decreasing the refernce count.  */
5003                 mg->mg_obj = NULL;
5004                 /* Stop mg_free even calling the destructor, given that
5005                    there's no AV to free up.  */
5006                 mg->mg_virtual = 0;
5007                 sv_unmagic(tsv, PERL_MAGIC_backref);
5008             } else {
5009                 av = newAV();
5010                 AvREAL_off(av);
5011                 SvREFCNT_inc_simple_void(av);
5012             }
5013             *avp = av;
5014         }
5015     } else {
5016         const MAGIC *const mg
5017             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5018         if (mg)
5019             av = (AV*)mg->mg_obj;
5020         else {
5021             av = newAV();
5022             AvREAL_off(av);
5023             sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
5024             /* av now has a refcnt of 2, which avoids it getting freed
5025              * before us during global cleanup. The extra ref is removed
5026              * by magic_killbackrefs() when tsv is being freed */
5027         }
5028     }
5029     if (AvFILLp(av) >= AvMAX(av)) {
5030         av_extend(av, AvFILLp(av)+1);
5031     }
5032     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5033 }
5034
5035 /* delete a back-reference to ourselves from the backref magic associated
5036  * with the SV we point to.
5037  */
5038
5039 STATIC void
5040 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
5041 {
5042     dVAR;
5043     AV *av = NULL;
5044     SV **svp;
5045     I32 i;
5046
5047     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5048
5049     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5050         av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
5051         /* We mustn't attempt to "fix up" the hash here by moving the
5052            backreference array back to the hv_aux structure, as that is stored
5053            in the main HvARRAY(), and hfreentries assumes that no-one
5054            reallocates HvARRAY() while it is running.  */
5055     }
5056     if (!av) {
5057         const MAGIC *const mg
5058             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5059         if (mg)
5060             av = (AV *)mg->mg_obj;
5061     }
5062     if (!av) {
5063         if (PL_in_clean_all)
5064             return;
5065         Perl_croak(aTHX_ "panic: del_backref");
5066     }
5067
5068     if (SvIS_FREED(av))
5069         return;
5070
5071     svp = AvARRAY(av);
5072     /* We shouldn't be in here more than once, but for paranoia reasons lets
5073        not assume this.  */
5074     for (i = AvFILLp(av); i >= 0; i--) {
5075         if (svp[i] == sv) {
5076             const SSize_t fill = AvFILLp(av);
5077             if (i != fill) {
5078                 /* We weren't the last entry.
5079                    An unordered list has this property that you can take the
5080                    last element off the end to fill the hole, and it's still
5081                    an unordered list :-)
5082                 */
5083                 svp[i] = svp[fill];
5084             }
5085             svp[fill] = NULL;
5086             AvFILLp(av) = fill - 1;
5087         }
5088     }
5089 }
5090
5091 int
5092 Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
5093 {
5094     SV **svp = AvARRAY(av);
5095
5096     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5097     PERL_UNUSED_ARG(sv);
5098
5099     /* Not sure why the av can get freed ahead of its sv, but somehow it does
5100        in ext/B/t/bytecode.t test 15 (involving print <DATA>)  */
5101     if (svp && !SvIS_FREED(av)) {
5102         SV *const *const last = svp + AvFILLp(av);
5103
5104         while (svp <= last) {
5105             if (*svp) {
5106                 SV *const referrer = *svp;
5107                 if (SvWEAKREF(referrer)) {
5108                     /* XXX Should we check that it hasn't changed? */
5109                     SvRV_set(referrer, 0);
5110                     SvOK_off(referrer);
5111                     SvWEAKREF_off(referrer);
5112                     SvSETMAGIC(referrer);
5113                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5114                            SvTYPE(referrer) == SVt_PVLV) {
5115                     /* You lookin' at me?  */
5116                     assert(GvSTASH(referrer));
5117                     assert(GvSTASH(referrer) == (HV*)sv);
5118                     GvSTASH(referrer) = 0;
5119                 } else {
5120                     Perl_croak(aTHX_
5121                                "panic: magic_killbackrefs (flags=%"UVxf")",
5122                                (UV)SvFLAGS(referrer));
5123                 }
5124
5125                 *svp = NULL;
5126             }
5127             svp++;
5128         }
5129     }
5130     SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5131     return 0;
5132 }
5133
5134 /*
5135 =for apidoc sv_insert
5136
5137 Inserts a string at the specified offset/length within the SV. Similar to
5138 the Perl substr() function.
5139
5140 =cut
5141 */
5142
5143 void
5144 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
5145 {
5146     dVAR;
5147     register char *big;
5148     register char *mid;
5149     register char *midend;
5150     register char *bigend;
5151     register I32 i;
5152     STRLEN curlen;
5153
5154     PERL_ARGS_ASSERT_SV_INSERT;
5155
5156     if (!bigstr)
5157         Perl_croak(aTHX_ "Can't modify non-existent substring");
5158     SvPV_force(bigstr, curlen);
5159     (void)SvPOK_only_UTF8(bigstr);
5160     if (offset + len > curlen) {
5161         SvGROW(bigstr, offset+len+1);
5162         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5163         SvCUR_set(bigstr, offset+len);
5164     }
5165
5166     SvTAINT(bigstr);
5167     i = littlelen - len;
5168     if (i > 0) {                        /* string might grow */
5169         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5170         mid = big + offset + len;
5171         midend = bigend = big + SvCUR(bigstr);
5172         bigend += i;
5173         *bigend = '\0';
5174         while (midend > mid)            /* shove everything down */
5175             *--bigend = *--midend;
5176         Move(little,big+offset,littlelen,char);
5177         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5178         SvSETMAGIC(bigstr);
5179         return;
5180     }
5181     else if (i == 0) {
5182         Move(little,SvPVX(bigstr)+offset,len,char);
5183         SvSETMAGIC(bigstr);
5184         return;
5185     }
5186
5187     big = SvPVX(bigstr);
5188     mid = big + offset;
5189     midend = mid + len;
5190     bigend = big + SvCUR(bigstr);
5191
5192     if (midend > bigend)
5193         Perl_croak(aTHX_ "panic: sv_insert");
5194
5195     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5196         if (littlelen) {
5197             Move(little, mid, littlelen,char);
5198             mid += littlelen;
5199         }
5200         i = bigend - midend;
5201         if (i > 0) {
5202             Move(midend, mid, i,char);
5203             mid += i;
5204         }
5205         *mid = '\0';
5206         SvCUR_set(bigstr, mid - big);
5207     }
5208     else if ((i = mid - big)) { /* faster from front */
5209         midend -= littlelen;
5210         mid = midend;
5211         Move(big, midend - i, i, char);
5212         sv_chop(bigstr,midend-i);
5213         if (littlelen)
5214             Move(little, mid, littlelen,char);
5215     }
5216     else if (littlelen) {
5217         midend -= littlelen;
5218         sv_chop(bigstr,midend);
5219         Move(little,midend,littlelen,char);
5220     }
5221     else {
5222         sv_chop(bigstr,midend);
5223     }
5224     SvSETMAGIC(bigstr);
5225 }
5226
5227 /*
5228 =for apidoc sv_replace
5229
5230 Make the first argument a copy of the second, then delete the original.
5231 The target SV physically takes over ownership of the body of the source SV
5232 and inherits its flags; however, the target keeps any magic it owns,
5233 and any magic in the source is discarded.
5234 Note that this is a rather specialist SV copying operation; most of the
5235 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5236
5237 =cut
5238 */
5239
5240 void
5241 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
5242 {
5243     dVAR;
5244     const U32 refcnt = SvREFCNT(sv);
5245
5246     PERL_ARGS_ASSERT_SV_REPLACE;
5247
5248     SV_CHECK_THINKFIRST_COW_DROP(sv);
5249     if (SvREFCNT(nsv) != 1) {
5250         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
5251                    UVuf " != 1)", (UV) SvREFCNT(nsv));
5252     }
5253     if (SvMAGICAL(sv)) {
5254         if (SvMAGICAL(nsv))
5255             mg_free(nsv);
5256         else
5257             sv_upgrade(nsv, SVt_PVMG);
5258         SvMAGIC_set(nsv, SvMAGIC(sv));
5259         SvFLAGS(nsv) |= SvMAGICAL(sv);
5260         SvMAGICAL_off(sv);
5261         SvMAGIC_set(sv, NULL);
5262     }
5263     SvREFCNT(sv) = 0;
5264     sv_clear(sv);
5265     assert(!SvREFCNT(sv));
5266 #ifdef DEBUG_LEAKING_SCALARS
5267     sv->sv_flags  = nsv->sv_flags;
5268     sv->sv_any    = nsv->sv_any;
5269     sv->sv_refcnt = nsv->sv_refcnt;
5270     sv->sv_u      = nsv->sv_u;
5271 #else
5272     StructCopy(nsv,sv,SV);
5273 #endif
5274     if(SvTYPE(sv) == SVt_IV) {
5275         SvANY(sv)
5276             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5277     }
5278         
5279
5280 #ifdef PERL_OLD_COPY_ON_WRITE
5281     if (SvIsCOW_normal(nsv)) {
5282         /* We need to follow the pointers around the loop to make the
5283            previous SV point to sv, rather than nsv.  */
5284         SV *next;
5285         SV *current = nsv;
5286         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5287             assert(next);
5288             current = next;
5289             assert(SvPVX_const(current) == SvPVX_const(nsv));
5290         }
5291         /* Make the SV before us point to the SV after us.  */
5292         if (DEBUG_C_TEST) {
5293             PerlIO_printf(Perl_debug_log, "previous is\n");
5294             sv_dump(current);
5295             PerlIO_printf(Perl_debug_log,
5296                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5297                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5298         }
5299         SV_COW_NEXT_SV_SET(current, sv);
5300     }
5301 #endif
5302     SvREFCNT(sv) = refcnt;
5303     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5304     SvREFCNT(nsv) = 0;
5305     del_SV(nsv);
5306 }
5307
5308 /*
5309 =for apidoc sv_clear
5310
5311 Clear an SV: call any destructors, free up any memory used by the body,
5312 and free the body itself. The SV's head is I<not> freed, although
5313 its type is set to all 1's so that it won't inadvertently be assumed
5314 to be live during global destruction etc.
5315 This function should only be called when REFCNT is zero. Most of the time
5316 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5317 instead.
5318
5319 =cut
5320 */
5321
5322 void
5323 Perl_sv_clear(pTHX_ register SV *sv)
5324 {
5325     dVAR;
5326     const U32 type = SvTYPE(sv);
5327     const struct body_details *const sv_type_details
5328         = bodies_by_type + type;
5329     HV *stash;
5330
5331     PERL_ARGS_ASSERT_SV_CLEAR;
5332     assert(SvREFCNT(sv) == 0);
5333     assert(SvTYPE(sv) != SVTYPEMASK);
5334
5335     if (type <= SVt_IV) {
5336         /* See the comment in sv.h about the collusion between this early
5337            return and the overloading of the NULL and IV slots in the size
5338            table.  */
5339         if (SvROK(sv)) {
5340             SV * const target = SvRV(sv);
5341             if (SvWEAKREF(sv))
5342                 sv_del_backref(target, sv);
5343             else
5344                 SvREFCNT_dec(target);
5345         }
5346         SvFLAGS(sv) &= SVf_BREAK;
5347         SvFLAGS(sv) |= SVTYPEMASK;
5348         return;
5349     }
5350
5351     if (SvOBJECT(sv)) {
5352         if (PL_defstash &&      /* Still have a symbol table? */
5353             SvDESTROYABLE(sv))
5354         {
5355             dSP;
5356             HV* stash;
5357             do {        
5358                 CV* destructor;
5359                 stash = SvSTASH(sv);
5360                 destructor = StashHANDLER(stash,DESTROY);
5361                 if (destructor) {
5362                     SV* const tmpref = newRV(sv);
5363                     SvREADONLY_on(tmpref);   /* DESTROY() could be naughty */
5364                     ENTER;
5365                     PUSHSTACKi(PERLSI_DESTROY);
5366                     EXTEND(SP, 2);
5367                     PUSHMARK(SP);
5368                     PUSHs(tmpref);
5369                     PUTBACK;
5370                     call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5371                 
5372                 
5373                     POPSTACK;
5374                     SPAGAIN;
5375                     LEAVE;
5376                     if(SvREFCNT(tmpref) < 2) {
5377                         /* tmpref is not kept alive! */
5378                         SvREFCNT(sv)--;
5379                         SvRV_set(tmpref, NULL);
5380                         SvROK_off(tmpref);
5381                     }
5382                     SvREFCNT_dec(tmpref);
5383                 }
5384             } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5385
5386
5387             if (SvREFCNT(sv)) {
5388                 if (PL_in_clean_objs)
5389                     Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5390                           HvNAME_get(stash));
5391                 /* DESTROY gave object new lease on life */
5392                 return;
5393             }
5394         }
5395
5396         if (SvOBJECT(sv)) {
5397             SvREFCNT_dec(SvSTASH(sv));  /* possibly of changed persuasion */
5398             SvOBJECT_off(sv);   /* Curse the object. */
5399             if (type != SVt_PVIO)
5400                 --PL_sv_objcount;       /* XXX Might want something more general */
5401         }
5402     }
5403     if (type >= SVt_PVMG) {
5404         if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5405             SvREFCNT_dec(SvOURSTASH(sv));
5406         } else if (SvMAGIC(sv))
5407             mg_free(sv);
5408         if (type == SVt_PVMG && SvPAD_TYPED(sv))
5409             SvREFCNT_dec(SvSTASH(sv));
5410     }
5411     switch (type) {
5412         /* case SVt_BIND: */
5413     case SVt_PVIO:
5414         if (IoIFP(sv) &&
5415             IoIFP(sv) != PerlIO_stdin() &&
5416             IoIFP(sv) != PerlIO_stdout() &&
5417             IoIFP(sv) != PerlIO_stderr())
5418         {
5419             io_close((IO*)sv, FALSE);
5420         }
5421         if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5422             PerlDir_close(IoDIRP(sv));
5423         IoDIRP(sv) = (DIR*)NULL;
5424         Safefree(IoTOP_NAME(sv));
5425         Safefree(IoFMT_NAME(sv));
5426         Safefree(IoBOTTOM_NAME(sv));
5427         goto freescalar;
5428     case SVt_REGEXP:
5429         /* FIXME for plugins */
5430         pregfree2((REGEXP*) sv);
5431         goto freescalar;
5432     case SVt_PVCV:
5433     case SVt_PVFM:
5434         cv_undef((CV*)sv);
5435         goto freescalar;
5436     case SVt_PVHV:
5437         Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
5438         hv_undef((HV*)sv);
5439         break;
5440     case SVt_PVAV:
5441         if (PL_comppad == (AV*)sv) {
5442             PL_comppad = NULL;
5443             PL_curpad = NULL;
5444         }
5445         av_undef((AV*)sv);
5446         break;
5447     case SVt_PVLV:
5448         if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5449             SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5450             HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5451             PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5452         }
5453         else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
5454             SvREFCNT_dec(LvTARG(sv));
5455     case SVt_PVGV:
5456         if (isGV_with_GP(sv)) {
5457             if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
5458                 mro_method_changed_in(stash);
5459             gp_free((GV*)sv);
5460             if (GvNAME_HEK(sv))
5461                 unshare_hek(GvNAME_HEK(sv));
5462             /* If we're in a stash, we don't own a reference to it. However it does
5463                have a back reference to us, which needs to be cleared.  */
5464             if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5465                     sv_del_backref((SV*)stash, sv);
5466         }
5467         /* FIXME. There are probably more unreferenced pointers to SVs in the
5468            interpreter struct that we should check and tidy in a similar
5469            fashion to this:  */
5470         if ((GV*)sv == PL_last_in_gv)
5471             PL_last_in_gv = NULL;
5472     case SVt_PVMG:
5473     case SVt_PVNV:
5474     case SVt_PVIV:
5475     case SVt_PV:
5476       freescalar:
5477         /* Don't bother with SvOOK_off(sv); as we're only going to free it.  */
5478         if (SvOOK(sv)) {
5479             STRLEN offset;
5480             SvOOK_offset(sv, offset);
5481             SvPV_set(sv, SvPVX_mutable(sv) - offset);
5482             /* Don't even bother with turning off the OOK flag.  */
5483         }
5484         if (SvROK(sv)) {
5485             SV * const target = SvRV(sv);
5486             if (SvWEAKREF(sv))
5487                 sv_del_backref(target, sv);
5488             else
5489                 SvREFCNT_dec(target);
5490         }
5491 #ifdef PERL_OLD_COPY_ON_WRITE
5492         else if (SvPVX_const(sv)) {
5493             if (SvIsCOW(sv)) {
5494                 /* I believe I need to grab the global SV mutex here and
5495                    then recheck the COW status.  */
5496                 if (DEBUG_C_TEST) {
5497                     PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5498                     sv_dump(sv);
5499                 }
5500                 if (SvLEN(sv)) {
5501                     sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5502                 } else {
5503                     unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5504                 }
5505
5506                 /* And drop it here.  */
5507                 SvFAKE_off(sv);
5508             } else if (SvLEN(sv)) {
5509                 Safefree(SvPVX_const(sv));
5510             }
5511         }
5512 #else
5513         else if (SvPVX_const(sv) && SvLEN(sv))
5514             Safefree(SvPVX_mutable(sv));
5515         else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5516             unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5517             SvFAKE_off(sv);
5518         }
5519 #endif
5520         break;
5521     case SVt_NV:
5522         break;
5523     }
5524
5525     SvFLAGS(sv) &= SVf_BREAK;
5526     SvFLAGS(sv) |= SVTYPEMASK;
5527
5528     if (sv_type_details->arena) {
5529         del_body(((char *)SvANY(sv) + sv_type_details->offset),
5530                  &PL_body_roots[type]);
5531     }
5532     else if (sv_type_details->body_size) {
5533         my_safefree(SvANY(sv));
5534     }
5535 }
5536
5537 /*
5538 =for apidoc sv_newref
5539
5540 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5541 instead.
5542
5543 =cut
5544 */
5545
5546 SV *
5547 Perl_sv_newref(pTHX_ SV *sv)
5548 {
5549     PERL_UNUSED_CONTEXT;
5550     if (sv)
5551         (SvREFCNT(sv))++;
5552     return sv;
5553 }
5554
5555 /*
5556 =for apidoc sv_free
5557
5558 Decrement an SV's reference count, and if it drops to zero, call
5559 C<sv_clear> to invoke destructors and free up any memory used by
5560 the body; finally, deallocate the SV's head itself.
5561 Normally called via a wrapper macro C<SvREFCNT_dec>.
5562
5563 =cut
5564 */
5565
5566 void
5567 Perl_sv_free(pTHX_ SV *sv)
5568 {
5569     dVAR;
5570     if (!sv)
5571         return;
5572     if (SvREFCNT(sv) == 0) {
5573         if (SvFLAGS(sv) & SVf_BREAK)
5574             /* this SV's refcnt has been artificially decremented to
5575              * trigger cleanup */
5576             return;
5577         if (PL_in_clean_all) /* All is fair */
5578             return;
5579         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5580             /* make sure SvREFCNT(sv)==0 happens very seldom */
5581             SvREFCNT(sv) = (~(U32)0)/2;
5582             return;
5583         }
5584         if (ckWARN_d(WARN_INTERNAL)) {
5585 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5586             Perl_dump_sv_child(aTHX_ sv);
5587 #else
5588   #ifdef DEBUG_LEAKING_SCALARS
5589             sv_dump(sv);
5590   #endif
5591 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5592             if (PL_warnhook == PERL_WARNHOOK_FATAL
5593                 || ckDEAD(packWARN(WARN_INTERNAL))) {
5594                 /* Don't let Perl_warner cause us to escape our fate:  */
5595                 abort();
5596             }
5597 #endif
5598             /* This may not return:  */
5599             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5600                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
5601                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5602 #endif
5603         }
5604 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5605         abort();
5606 #endif
5607         return;
5608     }
5609     if (--(SvREFCNT(sv)) > 0)
5610         return;
5611     Perl_sv_free2(aTHX_ sv);
5612 }
5613
5614 void
5615 Perl_sv_free2(pTHX_ SV *sv)
5616 {
5617     dVAR;
5618
5619     PERL_ARGS_ASSERT_SV_FREE2;
5620
5621 #ifdef DEBUGGING
5622     if (SvTEMP(sv)) {
5623         if (ckWARN_d(WARN_DEBUGGING))
5624             Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5625                         "Attempt to free temp prematurely: SV 0x%"UVxf
5626                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5627         return;
5628     }
5629 #endif
5630     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5631         /* make sure SvREFCNT(sv)==0 happens very seldom */
5632         SvREFCNT(sv) = (~(U32)0)/2;
5633         return;
5634     }
5635     sv_clear(sv);
5636     if (! SvREFCNT(sv))
5637         del_SV(sv);
5638 }
5639
5640 /*
5641 =for apidoc sv_len
5642
5643 Returns the length of the string in the SV. Handles magic and type
5644 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5645
5646 =cut
5647 */
5648
5649 STRLEN
5650 Perl_sv_len(pTHX_ register SV *sv)
5651 {
5652     STRLEN len;
5653
5654     if (!sv)
5655         return 0;
5656
5657     if (SvGMAGICAL(sv))
5658         len = mg_length(sv);
5659     else
5660         (void)SvPV_const(sv, len);
5661     return len;
5662 }
5663
5664 /*
5665 =for apidoc sv_len_utf8
5666
5667 Returns the number of characters in the string in an SV, counting wide
5668 UTF-8 bytes as a single character. Handles magic and type coercion.
5669
5670 =cut
5671 */
5672
5673 /*
5674  * The length is cached in PERL_UTF8_magic, in the mg_len field.  Also the
5675  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
5676  * (Note that the mg_len is not the length of the mg_ptr field.
5677  * This allows the cache to store the character length of the string without
5678  * needing to malloc() extra storage to attach to the mg_ptr.)
5679  *
5680  */
5681
5682 STRLEN
5683 Perl_sv_len_utf8(pTHX_ register SV *sv)
5684 {
5685     if (!sv)
5686         return 0;
5687
5688     if (SvGMAGICAL(sv))
5689         return mg_length(sv);
5690     else
5691     {
5692         STRLEN len;
5693         const U8 *s = (U8*)SvPV_const(sv, len);
5694
5695         if (PL_utf8cache) {
5696             STRLEN ulen;
5697             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
5698
5699             if (mg && mg->mg_len != -1) {
5700                 ulen = mg->mg_len;
5701                 if (PL_utf8cache < 0) {
5702                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
5703                     if (real != ulen) {
5704                         /* Need to turn the assertions off otherwise we may
5705                            recurse infinitely while printing error messages.
5706                         */
5707                         SAVEI8(PL_utf8cache);
5708                         PL_utf8cache = 0;
5709                         Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
5710                                    " real %"UVuf" for %"SVf,
5711                                    (UV) ulen, (UV) real, SVfARG(sv));
5712                     }
5713                 }
5714             }
5715             else {
5716                 ulen = Perl_utf8_length(aTHX_ s, s + len);
5717                 if (!SvREADONLY(sv)) {
5718                     if (!mg) {
5719                         mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
5720                                          &PL_vtbl_utf8, 0, 0);
5721                     }
5722                     assert(mg);
5723                     mg->mg_len = ulen;
5724                 }
5725             }
5726             return ulen;
5727         }
5728         return Perl_utf8_length(aTHX_ s, s + len);
5729     }
5730 }
5731
5732 /* Walk forwards to find the byte corresponding to the passed in UTF-8
5733    offset.  */
5734 static STRLEN
5735 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
5736                       STRLEN uoffset)
5737 {
5738     const U8 *s = start;
5739
5740     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
5741
5742     while (s < send && uoffset--)
5743         s += UTF8SKIP(s);
5744     if (s > send) {
5745         /* This is the existing behaviour. Possibly it should be a croak, as
5746            it's actually a bounds error  */
5747         s = send;
5748     }
5749     return s - start;
5750 }
5751
5752 /* Given the length of the string in both bytes and UTF-8 characters, decide
5753    whether to walk forwards or backwards to find the byte corresponding to
5754    the passed in UTF-8 offset.  */
5755 static STRLEN
5756 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
5757                       STRLEN uoffset, STRLEN uend)
5758 {
5759     STRLEN backw = uend - uoffset;
5760
5761     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
5762
5763     if (uoffset < 2 * backw) {
5764         /* The assumption is that going forwards is twice the speed of going
5765            forward (that's where the 2 * backw comes from).
5766            (The real figure of course depends on the UTF-8 data.)  */
5767         return sv_pos_u2b_forwards(start, send, uoffset);
5768     }
5769
5770     while (backw--) {
5771         send--;
5772         while (UTF8_IS_CONTINUATION(*send))
5773             send--;
5774     }
5775     return send - start;
5776 }
5777
5778 /* For the string representation of the given scalar, find the byte
5779    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
5780    give another position in the string, *before* the sought offset, which
5781    (which is always true, as 0, 0 is a valid pair of positions), which should
5782    help reduce the amount of linear searching.
5783    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
5784    will be used to reduce the amount of linear searching. The cache will be
5785    created if necessary, and the found value offered to it for update.  */
5786 static STRLEN
5787 S_sv_pos_u2b_cached(pTHX_ SV *sv, MAGIC **mgp, const U8 *const start,
5788                     const U8 *const send, STRLEN uoffset,
5789                     STRLEN uoffset0, STRLEN boffset0)
5790 {
5791     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
5792     bool found = FALSE;
5793
5794     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
5795
5796     assert (uoffset >= uoffset0);
5797
5798     if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
5799         && (*mgp || (*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
5800         if ((*mgp)->mg_ptr) {
5801             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
5802             if (cache[0] == uoffset) {
5803                 /* An exact match. */
5804                 return cache[1];
5805             }
5806             if (cache[2] == uoffset) {
5807                 /* An exact match. */
5808                 return cache[3];
5809             }
5810
5811             if (cache[0] < uoffset) {
5812                 /* The cache already knows part of the way.   */
5813                 if (cache[0] > uoffset0) {
5814                     /* The cache knows more than the passed in pair  */
5815                     uoffset0 = cache[0];
5816                     boffset0 = cache[1];
5817                 }
5818                 if ((*mgp)->mg_len != -1) {
5819                     /* And we know the end too.  */
5820                     boffset = boffset0
5821                         + sv_pos_u2b_midway(start + boffset0, send,
5822                                               uoffset - uoffset0,
5823                                               (*mgp)->mg_len - uoffset0);
5824                 } else {
5825                     boffset = boffset0
5826                         + sv_pos_u2b_forwards(start + boffset0,
5827                                                 send, uoffset - uoffset0);
5828                 }
5829             }
5830             else if (cache[2] < uoffset) {
5831                 /* We're between the two cache entries.  */
5832                 if (cache[2] > uoffset0) {
5833                     /* and the cache knows more than the passed in pair  */
5834                     uoffset0 = cache[2];
5835                     boffset0 = cache[3];
5836                 }
5837
5838                 boffset = boffset0
5839                     + sv_pos_u2b_midway(start + boffset0,
5840                                           start + cache[1],
5841                                           uoffset - uoffset0,
5842                                           cache[0] - uoffset0);
5843             } else {
5844                 boffset = boffset0
5845                     + sv_pos_u2b_midway(start + boffset0,
5846                                           start + cache[3],
5847                                           uoffset - uoffset0,
5848                                           cache[2] - uoffset0);
5849             }
5850             found = TRUE;
5851         }
5852         else if ((*mgp)->mg_len != -1) {
5853             /* If we can take advantage of a passed in offset, do so.  */
5854             /* In fact, offset0 is either 0, or less than offset, so don't
5855                need to worry about the other possibility.  */
5856             boffset = boffset0
5857                 + sv_pos_u2b_midway(start + boffset0, send,
5858                                       uoffset - uoffset0,
5859                                       (*mgp)->mg_len - uoffset0);
5860             found = TRUE;
5861         }
5862     }
5863
5864     if (!found || PL_utf8cache < 0) {
5865         const STRLEN real_boffset
5866             = boffset0 + sv_pos_u2b_forwards(start + boffset0,
5867                                                send, uoffset - uoffset0);
5868
5869         if (found && PL_utf8cache < 0) {
5870             if (real_boffset != boffset) {
5871                 /* Need to turn the assertions off otherwise we may recurse
5872                    infinitely while printing error messages.  */
5873                 SAVEI8(PL_utf8cache);
5874                 PL_utf8cache = 0;
5875                 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
5876                            " real %"UVuf" for %"SVf,
5877                            (UV) boffset, (UV) real_boffset, SVfARG(sv));
5878             }
5879         }
5880         boffset = real_boffset;
5881     }
5882
5883     S_utf8_mg_pos_cache_update(aTHX_ sv, mgp, boffset, uoffset, send - start);
5884     return boffset;
5885 }
5886
5887
5888 /*
5889 =for apidoc sv_pos_u2b
5890
5891 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5892 the start of the string, to a count of the equivalent number of bytes; if
5893 lenp is non-zero, it does the same to lenp, but this time starting from
5894 the offset, rather than from the start of the string. Handles magic and
5895 type coercion.
5896
5897 =cut
5898 */
5899
5900 /*
5901  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5902  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5903  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
5904  *
5905  */
5906
5907 void
5908 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5909 {
5910     const U8 *start;
5911     STRLEN len;
5912
5913     PERL_ARGS_ASSERT_SV_POS_U2B;
5914
5915     if (!sv)
5916         return;
5917
5918     start = (U8*)SvPV_const(sv, len);
5919     if (len) {
5920         STRLEN uoffset = (STRLEN) *offsetp;
5921         const U8 * const send = start + len;
5922         MAGIC *mg = NULL;
5923         const STRLEN boffset = sv_pos_u2b_cached(sv, &mg, start, send,
5924                                              uoffset, 0, 0);
5925
5926         *offsetp = (I32) boffset;
5927
5928         if (lenp) {
5929             /* Convert the relative offset to absolute.  */
5930             const STRLEN uoffset2 = uoffset + (STRLEN) *lenp;
5931             const STRLEN boffset2
5932                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
5933                                       uoffset, boffset) - boffset;
5934
5935             *lenp = boffset2;
5936         }
5937     }
5938     else {
5939          *offsetp = 0;
5940          if (lenp)
5941               *lenp = 0;
5942     }
5943
5944     return;
5945 }
5946
5947 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
5948    byte length pairing. The (byte) length of the total SV is passed in too,
5949    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
5950    may not have updated SvCUR, so we can't rely on reading it directly.
5951
5952    The proffered utf8/byte length pairing isn't used if the cache already has
5953    two pairs, and swapping either for the proffered pair would increase the
5954    RMS of the intervals between known byte offsets.
5955
5956    The cache itself consists of 4 STRLEN values
5957    0: larger UTF-8 offset
5958    1: corresponding byte offset
5959    2: smaller UTF-8 offset
5960    3: corresponding byte offset
5961
5962    Unused cache pairs have the value 0, 0.
5963    Keeping the cache "backwards" means that the invariant of
5964    cache[0] >= cache[2] is maintained even with empty slots, which means that
5965    the code that uses it doesn't need to worry if only 1 entry has actually
5966    been set to non-zero.  It also makes the "position beyond the end of the
5967    cache" logic much simpler, as the first slot is always the one to start
5968    from.   
5969 */
5970 static void
5971 S_utf8_mg_pos_cache_update(pTHX_ SV *sv, MAGIC **mgp, STRLEN byte, STRLEN utf8,
5972                            STRLEN blen)
5973 {
5974     STRLEN *cache;
5975
5976     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
5977
5978     if (SvREADONLY(sv))
5979         return;
5980
5981     if (!*mgp) {
5982         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
5983                            0);
5984         (*mgp)->mg_len = -1;
5985     }
5986     assert(*mgp);
5987
5988     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
5989         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5990         (*mgp)->mg_ptr = (char *) cache;
5991     }
5992     assert(cache);
5993
5994     if (PL_utf8cache < 0) {
5995         const U8 *start = (const U8 *) SvPVX_const(sv);
5996         const STRLEN realutf8 = utf8_length(start, start + byte);
5997
5998         if (realutf8 != utf8) {
5999             /* Need to turn the assertions off otherwise we may recurse
6000                infinitely while printing error messages.  */
6001             SAVEI8(PL_utf8cache);
6002             PL_utf8cache = 0;
6003             Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
6004                        " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
6005         }
6006     }
6007
6008     /* Cache is held with the later position first, to simplify the code
6009        that deals with unbounded ends.  */
6010        
6011     ASSERT_UTF8_CACHE(cache);
6012     if (cache[1] == 0) {
6013         /* Cache is totally empty  */
6014         cache[0] = utf8;
6015         cache[1] = byte;
6016     } else if (cache[3] == 0) {
6017         if (byte > cache[1]) {
6018             /* New one is larger, so goes first.  */
6019             cache[2] = cache[0];
6020             cache[3] = cache[1];
6021             cache[0] = utf8;
6022             cache[1] = byte;
6023         } else {
6024             cache[2] = utf8;
6025             cache[3] = byte;
6026         }
6027     } else {
6028 #define THREEWAY_SQUARE(a,b,c,d) \
6029             ((float)((d) - (c))) * ((float)((d) - (c))) \
6030             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6031                + ((float)((b) - (a))) * ((float)((b) - (a)))
6032
6033         /* Cache has 2 slots in use, and we know three potential pairs.
6034            Keep the two that give the lowest RMS distance. Do the
6035            calcualation in bytes simply because we always know the byte
6036            length.  squareroot has the same ordering as the positive value,
6037            so don't bother with the actual square root.  */
6038         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6039         if (byte > cache[1]) {
6040             /* New position is after the existing pair of pairs.  */
6041             const float keep_earlier
6042                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6043             const float keep_later
6044                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6045
6046             if (keep_later < keep_earlier) {
6047                 if (keep_later < existing) {
6048                     cache[2] = cache[0];
6049                     cache[3] = cache[1];
6050                     cache[0] = utf8;
6051                     cache[1] = byte;
6052                 }
6053             }
6054             else {
6055                 if (keep_earlier < existing) {
6056                     cache[0] = utf8;
6057                     cache[1] = byte;
6058                 }
6059             }
6060         }
6061         else if (byte > cache[3]) {
6062             /* New position is between the existing pair of pairs.  */
6063             const float keep_earlier
6064                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6065             const float keep_later
6066                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6067
6068             if (keep_later < keep_earlier) {
6069                 if (keep_later < existing) {
6070                     cache[2] = utf8;
6071                     cache[3] = byte;
6072                 }
6073             }
6074             else {
6075                 if (keep_earlier < existing) {
6076                     cache[0] = utf8;
6077                     cache[1] = byte;
6078                 }
6079             }
6080         }
6081         else {
6082             /* New position is before the existing pair of pairs.  */
6083             const float keep_earlier
6084                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6085             const float keep_later
6086                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6087
6088             if (keep_later < keep_earlier) {
6089                 if (keep_later < existing) {
6090                     cache[2] = utf8;
6091                     cache[3] = byte;
6092                 }
6093             }
6094             else {
6095                 if (keep_earlier < existing) {
6096                     cache[0] = cache[2];
6097                     cache[1] = cache[3];
6098                     cache[2] = utf8;
6099                     cache[3] = byte;
6100                 }
6101             }
6102         }
6103     }
6104     ASSERT_UTF8_CACHE(cache);
6105 }
6106
6107 /* We already know all of the way, now we may be able to walk back.  The same
6108    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6109    backward is half the speed of walking forward. */
6110 static STRLEN
6111 S_sv_pos_b2u_midway(pTHX_ const U8 *s, const U8 *const target, const U8 *end,
6112                     STRLEN endu)
6113 {
6114     const STRLEN forw = target - s;
6115     STRLEN backw = end - target;
6116
6117     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6118
6119     if (forw < 2 * backw) {
6120         return utf8_length(s, target);
6121     }
6122
6123     while (end > target) {
6124         end--;
6125         while (UTF8_IS_CONTINUATION(*end)) {
6126             end--;
6127         }
6128         endu--;
6129     }
6130     return endu;
6131 }
6132
6133 /*
6134 =for apidoc sv_pos_b2u
6135
6136 Converts the value pointed to by offsetp from a count of bytes from the
6137 start of the string, to a count of the equivalent number of UTF-8 chars.
6138 Handles magic and type coercion.
6139
6140 =cut
6141 */
6142
6143 /*
6144  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6145  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
6146  * byte offsets.
6147  *
6148  */
6149 void
6150 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
6151 {
6152     const U8* s;
6153     const STRLEN byte = *offsetp;
6154     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
6155     STRLEN blen;
6156     MAGIC* mg = NULL;
6157     const U8* send;
6158     bool found = FALSE;
6159
6160     PERL_ARGS_ASSERT_SV_POS_B2U;
6161
6162     if (!sv)
6163         return;
6164
6165     s = (const U8*)SvPV_const(sv, blen);
6166
6167     if (blen < byte)
6168         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6169
6170     send = s + byte;
6171
6172     if (SvMAGICAL(sv) && !SvREADONLY(sv) && PL_utf8cache
6173         && (mg = mg_find(sv, PERL_MAGIC_utf8))) {
6174         if (mg->mg_ptr) {
6175             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6176             if (cache[1] == byte) {
6177                 /* An exact match. */
6178                 *offsetp = cache[0];
6179                 return;
6180             }
6181             if (cache[3] == byte) {
6182                 /* An exact match. */
6183                 *offsetp = cache[2];
6184                 return;
6185             }
6186
6187             if (cache[1] < byte) {
6188                 /* We already know part of the way. */
6189                 if (mg->mg_len != -1) {
6190                     /* Actually, we know the end too.  */
6191                     len = cache[0]
6192                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6193                                               s + blen, mg->mg_len - cache[0]);
6194                 } else {
6195                     len = cache[0] + utf8_length(s + cache[1], send);
6196                 }
6197             }
6198             else if (cache[3] < byte) {
6199                 /* We're between the two cached pairs, so we do the calculation
6200                    offset by the byte/utf-8 positions for the earlier pair,
6201                    then add the utf-8 characters from the string start to
6202                    there.  */
6203                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6204                                           s + cache[1], cache[0] - cache[2])
6205                     + cache[2];
6206
6207             }
6208             else { /* cache[3] > byte */
6209                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6210                                           cache[2]);
6211
6212             }
6213             ASSERT_UTF8_CACHE(cache);
6214             found = TRUE;
6215         } else if (mg->mg_len != -1) {
6216             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6217             found = TRUE;
6218         }
6219     }
6220     if (!found || PL_utf8cache < 0) {
6221         const STRLEN real_len = utf8_length(s, send);
6222
6223         if (found && PL_utf8cache < 0) {
6224             if (len != real_len) {
6225                 /* Need to turn the assertions off otherwise we may recurse
6226                    infinitely while printing error messages.  */
6227                 SAVEI8(PL_utf8cache);
6228                 PL_utf8cache = 0;
6229                 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6230                            " real %"UVuf" for %"SVf,
6231                            (UV) len, (UV) real_len, SVfARG(sv));
6232             }
6233         }
6234         len = real_len;
6235     }
6236     *offsetp = len;
6237
6238     S_utf8_mg_pos_cache_update(aTHX_ sv, &mg, byte, len, blen);
6239 }
6240
6241 /*
6242 =for apidoc sv_eq
6243
6244 Returns a boolean indicating whether the strings in the two SVs are
6245 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6246 coerce its args to strings if necessary.
6247
6248 =cut
6249 */
6250
6251 I32
6252 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6253 {
6254     dVAR;
6255     const char *pv1;
6256     STRLEN cur1;
6257     const char *pv2;
6258     STRLEN cur2;
6259     I32  eq     = 0;
6260     char *tpv   = NULL;
6261     SV* svrecode = NULL;
6262
6263     if (!sv1) {
6264         pv1 = "";
6265         cur1 = 0;
6266     }
6267     else {
6268         /* if pv1 and pv2 are the same, second SvPV_const call may
6269          * invalidate pv1, so we may need to make a copy */
6270         if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6271             pv1 = SvPV_const(sv1, cur1);
6272             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6273         }
6274         pv1 = SvPV_const(sv1, cur1);
6275     }
6276
6277     if (!sv2){
6278         pv2 = "";
6279         cur2 = 0;
6280     }
6281     else
6282         pv2 = SvPV_const(sv2, cur2);
6283
6284     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6285         /* Differing utf8ness.
6286          * Do not UTF8size the comparands as a side-effect. */
6287          if (PL_encoding) {
6288               if (SvUTF8(sv1)) {
6289                    svrecode = newSVpvn(pv2, cur2);
6290                    sv_recode_to_utf8(svrecode, PL_encoding);
6291                    pv2 = SvPV_const(svrecode, cur2);
6292               }
6293               else {
6294                    svrecode = newSVpvn(pv1, cur1);
6295                    sv_recode_to_utf8(svrecode, PL_encoding);
6296                    pv1 = SvPV_const(svrecode, cur1);
6297               }
6298               /* Now both are in UTF-8. */
6299               if (cur1 != cur2) {
6300                    SvREFCNT_dec(svrecode);
6301                    return FALSE;
6302               }
6303          }
6304          else {
6305               bool is_utf8 = TRUE;
6306
6307               if (SvUTF8(sv1)) {
6308                    /* sv1 is the UTF-8 one,
6309                     * if is equal it must be downgrade-able */
6310                    char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6311                                                      &cur1, &is_utf8);
6312                    if (pv != pv1)
6313                         pv1 = tpv = pv;
6314               }
6315               else {
6316                    /* sv2 is the UTF-8 one,
6317                     * if is equal it must be downgrade-able */
6318                    char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6319                                                       &cur2, &is_utf8);
6320                    if (pv != pv2)
6321                         pv2 = tpv = pv;
6322               }
6323               if (is_utf8) {
6324                    /* Downgrade not possible - cannot be eq */
6325                    assert (tpv == 0);
6326                    return FALSE;
6327               }
6328          }
6329     }
6330
6331     if (cur1 == cur2)
6332         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6333         
6334     SvREFCNT_dec(svrecode);
6335     if (tpv)
6336         Safefree(tpv);
6337
6338     return eq;
6339 }
6340
6341 /*
6342 =for apidoc sv_cmp
6343
6344 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
6345 string in C<sv1> is less than, equal to, or greater than the string in
6346 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6347 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
6348
6349 =cut
6350 */
6351
6352 I32
6353 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
6354 {
6355     dVAR;
6356     STRLEN cur1, cur2;
6357     const char *pv1, *pv2;
6358     char *tpv = NULL;
6359     I32  cmp;
6360     SV *svrecode = NULL;
6361
6362     if (!sv1) {
6363         pv1 = "";
6364         cur1 = 0;
6365     }
6366     else
6367         pv1 = SvPV_const(sv1, cur1);
6368
6369     if (!sv2) {
6370         pv2 = "";
6371         cur2 = 0;
6372     }
6373     else
6374         pv2 = SvPV_const(sv2, cur2);
6375
6376     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6377         /* Differing utf8ness.
6378          * Do not UTF8size the comparands as a side-effect. */
6379         if (SvUTF8(sv1)) {
6380             if (PL_encoding) {
6381                  svrecode = newSVpvn(pv2, cur2);
6382                  sv_recode_to_utf8(svrecode, PL_encoding);
6383                  pv2 = SvPV_const(svrecode, cur2);
6384             }
6385             else {
6386                  pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6387             }
6388         }
6389         else {
6390             if (PL_encoding) {
6391                  svrecode = newSVpvn(pv1, cur1);
6392                  sv_recode_to_utf8(svrecode, PL_encoding);
6393                  pv1 = SvPV_const(svrecode, cur1);
6394             }
6395             else {
6396                  pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6397             }
6398         }
6399     }
6400
6401     if (!cur1) {
6402         cmp = cur2 ? -1 : 0;
6403     } else if (!cur2) {
6404         cmp = 1;
6405     } else {
6406         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6407
6408         if (retval) {
6409             cmp = retval < 0 ? -1 : 1;
6410         } else if (cur1 == cur2) {
6411             cmp = 0;
6412         } else {
6413             cmp = cur1 < cur2 ? -1 : 1;
6414         }
6415     }
6416
6417     SvREFCNT_dec(svrecode);
6418     if (tpv)
6419         Safefree(tpv);
6420
6421     return cmp;
6422 }
6423
6424 /*
6425 =for apidoc sv_cmp_locale
6426
6427 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6428 'use bytes' aware, handles get magic, and will coerce its args to strings
6429 if necessary.  See also C<sv_cmp>.
6430
6431 =cut
6432 */
6433
6434 I32
6435 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
6436 {
6437     dVAR;
6438 #ifdef USE_LOCALE_COLLATE
6439
6440     char *pv1, *pv2;
6441     STRLEN len1, len2;
6442     I32 retval;
6443
6444     if (PL_collation_standard)
6445         goto raw_compare;
6446
6447     len1 = 0;
6448     pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6449     len2 = 0;
6450     pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6451
6452     if (!pv1 || !len1) {
6453         if (pv2 && len2)
6454             return -1;
6455         else
6456             goto raw_compare;
6457     }
6458     else {
6459         if (!pv2 || !len2)
6460             return 1;
6461     }
6462
6463     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6464
6465     if (retval)
6466         return retval < 0 ? -1 : 1;
6467
6468     /*
6469      * When the result of collation is equality, that doesn't mean
6470      * that there are no differences -- some locales exclude some
6471      * characters from consideration.  So to avoid false equalities,
6472      * we use the raw string as a tiebreaker.
6473      */
6474
6475   raw_compare:
6476     /*FALLTHROUGH*/
6477
6478 #endif /* USE_LOCALE_COLLATE */
6479
6480     return sv_cmp(sv1, sv2);
6481 }
6482
6483
6484 #ifdef USE_LOCALE_COLLATE
6485
6486 /*
6487 =for apidoc sv_collxfrm
6488
6489 Add Collate Transform magic to an SV if it doesn't already have it.
6490
6491 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6492 scalar data of the variable, but transformed to such a format that a normal
6493 memory comparison can be used to compare the data according to the locale
6494 settings.
6495
6496 =cut
6497 */
6498
6499 char *
6500 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
6501 {
6502     dVAR;
6503     MAGIC *mg;
6504
6505     PERL_ARGS_ASSERT_SV_COLLXFRM;
6506
6507     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6508     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6509         const char *s;
6510         char *xf;
6511         STRLEN len, xlen;
6512
6513         if (mg)
6514             Safefree(mg->mg_ptr);
6515         s = SvPV_const(sv, len);
6516         if ((xf = mem_collxfrm(s, len, &xlen))) {
6517             if (! mg) {
6518 #ifdef PERL_OLD_COPY_ON_WRITE
6519                 if (SvIsCOW(sv))
6520                     sv_force_normal_flags(sv, 0);
6521 #endif
6522                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6523                                  0, 0);
6524                 assert(mg);
6525             }
6526             mg->mg_ptr = xf;
6527             mg->mg_len = xlen;
6528         }
6529         else {
6530             if (mg) {
6531                 mg->mg_ptr = NULL;
6532                 mg->mg_len = -1;
6533             }
6534         }
6535     }
6536     if (mg && mg->mg_ptr) {
6537         *nxp = mg->mg_len;
6538         return mg->mg_ptr + sizeof(PL_collation_ix);
6539     }
6540     else {
6541         *nxp = 0;
6542         return NULL;
6543     }
6544 }
6545
6546 #endif /* USE_LOCALE_COLLATE */
6547
6548 /*
6549 =for apidoc sv_gets
6550
6551 Get a line from the filehandle and store it into the SV, optionally
6552 appending to the currently-stored string.
6553
6554 =cut
6555 */
6556
6557 char *
6558 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
6559 {
6560     dVAR;
6561     const char *rsptr;
6562     STRLEN rslen;
6563     register STDCHAR rslast;
6564     register STDCHAR *bp;
6565     register I32 cnt;
6566     I32 i = 0;
6567     I32 rspara = 0;
6568
6569     PERL_ARGS_ASSERT_SV_GETS;
6570
6571     if (SvTHINKFIRST(sv))
6572         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6573     /* XXX. If you make this PVIV, then copy on write can copy scalars read
6574        from <>.
6575        However, perlbench says it's slower, because the existing swipe code
6576        is faster than copy on write.
6577        Swings and roundabouts.  */
6578     SvUPGRADE(sv, SVt_PV);
6579
6580     SvSCREAM_off(sv);
6581
6582     if (append) {
6583         if (PerlIO_isutf8(fp)) {
6584             if (!SvUTF8(sv)) {
6585                 sv_utf8_upgrade_nomg(sv);
6586                 sv_pos_u2b(sv,&append,0);
6587             }
6588         } else if (SvUTF8(sv)) {
6589             SV * const tsv = newSV(0);
6590             sv_gets(tsv, fp, 0);
6591             sv_utf8_upgrade_nomg(tsv);
6592             SvCUR_set(sv,append);
6593             sv_catsv(sv,tsv);
6594             sv_free(tsv);
6595             goto return_string_or_null;
6596         }
6597     }
6598
6599     SvPOK_only(sv);
6600     if (PerlIO_isutf8(fp))
6601         SvUTF8_on(sv);
6602
6603     if (IN_PERL_COMPILETIME) {
6604         /* we always read code in line mode */
6605         rsptr = "\n";
6606         rslen = 1;
6607     }
6608     else if (RsSNARF(PL_rs)) {
6609         /* If it is a regular disk file use size from stat() as estimate
6610            of amount we are going to read -- may result in mallocing
6611            more memory than we really need if the layers below reduce
6612            the size we read (e.g. CRLF or a gzip layer).
6613          */
6614         Stat_t st;
6615         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
6616             const Off_t offset = PerlIO_tell(fp);
6617             if (offset != (Off_t) -1 && st.st_size + append > offset) {
6618                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
6619             }
6620         }
6621         rsptr = NULL;
6622         rslen = 0;
6623     }
6624     else if (RsRECORD(PL_rs)) {
6625       I32 bytesread;
6626       char *buffer;
6627       U32 recsize;
6628
6629       /* Grab the size of the record we're getting */
6630       recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
6631       buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
6632       /* Go yank in */
6633 #ifdef VMS
6634       /* VMS wants read instead of fread, because fread doesn't respect */
6635       /* RMS record boundaries. This is not necessarily a good thing to be */
6636       /* doing, but we've got no other real choice - except avoid stdio
6637          as implementation - perhaps write a :vms layer ?
6638        */
6639       bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
6640 #else
6641       bytesread = PerlIO_read(fp, buffer, recsize);
6642 #endif
6643       if (bytesread < 0)
6644           bytesread = 0;
6645       SvCUR_set(sv, bytesread += append);
6646       buffer[bytesread] = '\0';
6647       goto return_string_or_null;
6648     }
6649     else if (RsPARA(PL_rs)) {
6650         rsptr = "\n\n";
6651         rslen = 2;
6652         rspara = 1;
6653     }
6654     else {
6655         /* Get $/ i.e. PL_rs into same encoding as stream wants */
6656         if (PerlIO_isutf8(fp)) {
6657             rsptr = SvPVutf8(PL_rs, rslen);
6658         }
6659         else {
6660             if (SvUTF8(PL_rs)) {
6661                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
6662                     Perl_croak(aTHX_ "Wide character in $/");
6663                 }
6664             }
6665             rsptr = SvPV_const(PL_rs, rslen);
6666         }
6667     }
6668
6669     rslast = rslen ? rsptr[rslen - 1] : '\0';
6670
6671     if (rspara) {               /* have to do this both before and after */
6672         do {                    /* to make sure file boundaries work right */
6673             if (PerlIO_eof(fp))
6674                 return 0;
6675             i = PerlIO_getc(fp);
6676             if (i != '\n') {
6677                 if (i == -1)
6678                     return 0;
6679                 PerlIO_ungetc(fp,i);
6680                 break;
6681             }
6682         } while (i != EOF);
6683     }
6684
6685     /* See if we know enough about I/O mechanism to cheat it ! */
6686
6687     /* This used to be #ifdef test - it is made run-time test for ease
6688        of abstracting out stdio interface. One call should be cheap
6689        enough here - and may even be a macro allowing compile
6690        time optimization.
6691      */
6692
6693     if (PerlIO_fast_gets(fp)) {
6694
6695     /*
6696      * We're going to steal some values from the stdio struct
6697      * and put EVERYTHING in the innermost loop into registers.
6698      */
6699     register STDCHAR *ptr;
6700     STRLEN bpx;
6701     I32 shortbuffered;
6702
6703 #if defined(VMS) && defined(PERLIO_IS_STDIO)
6704     /* An ungetc()d char is handled separately from the regular
6705      * buffer, so we getc() it back out and stuff it in the buffer.
6706      */
6707     i = PerlIO_getc(fp);
6708     if (i == EOF) return 0;
6709     *(--((*fp)->_ptr)) = (unsigned char) i;
6710     (*fp)->_cnt++;
6711 #endif
6712
6713     /* Here is some breathtakingly efficient cheating */
6714
6715     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
6716     /* make sure we have the room */
6717     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
6718         /* Not room for all of it
6719            if we are looking for a separator and room for some
6720          */
6721         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
6722             /* just process what we have room for */
6723             shortbuffered = cnt - SvLEN(sv) + append + 1;
6724             cnt -= shortbuffered;
6725         }
6726         else {
6727             shortbuffered = 0;
6728             /* remember that cnt can be negative */
6729             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6730         }
6731     }
6732     else
6733         shortbuffered = 0;
6734     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
6735     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6736     DEBUG_P(PerlIO_printf(Perl_debug_log,
6737         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6738     DEBUG_P(PerlIO_printf(Perl_debug_log,
6739         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6740                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6741                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6742     for (;;) {
6743       screamer:
6744         if (cnt > 0) {
6745             if (rslen) {
6746                 while (cnt > 0) {                    /* this     |  eat */
6747                     cnt--;
6748                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
6749                         goto thats_all_folks;        /* screams  |  sed :-) */
6750                 }
6751             }
6752             else {
6753                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
6754                 bp += cnt;                           /* screams  |  dust */
6755                 ptr += cnt;                          /* louder   |  sed :-) */
6756                 cnt = 0;
6757             }
6758         }
6759         
6760         if (shortbuffered) {            /* oh well, must extend */
6761             cnt = shortbuffered;
6762             shortbuffered = 0;
6763             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6764             SvCUR_set(sv, bpx);
6765             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6766             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6767             continue;
6768         }
6769
6770         DEBUG_P(PerlIO_printf(Perl_debug_log,
6771                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6772                               PTR2UV(ptr),(long)cnt));
6773         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6774 #if 0
6775         DEBUG_P(PerlIO_printf(Perl_debug_log,
6776             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6777             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6778             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6779 #endif
6780         /* This used to call 'filbuf' in stdio form, but as that behaves like
6781            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6782            another abstraction.  */
6783         i   = PerlIO_getc(fp);          /* get more characters */
6784 #if 0
6785         DEBUG_P(PerlIO_printf(Perl_debug_log,
6786             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6787             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6788             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6789 #endif
6790         cnt = PerlIO_get_cnt(fp);
6791         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
6792         DEBUG_P(PerlIO_printf(Perl_debug_log,
6793             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6794
6795         if (i == EOF)                   /* all done for ever? */
6796             goto thats_really_all_folks;
6797
6798         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
6799         SvCUR_set(sv, bpx);
6800         SvGROW(sv, bpx + cnt + 2);
6801         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
6802
6803         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
6804
6805         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
6806             goto thats_all_folks;
6807     }
6808
6809 thats_all_folks:
6810     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6811           memNE((char*)bp - rslen, rsptr, rslen))
6812         goto screamer;                          /* go back to the fray */
6813 thats_really_all_folks:
6814     if (shortbuffered)
6815         cnt += shortbuffered;
6816         DEBUG_P(PerlIO_printf(Perl_debug_log,
6817             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6818     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
6819     DEBUG_P(PerlIO_printf(Perl_debug_log,
6820         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6821         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6822         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6823     *bp = '\0';
6824     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
6825     DEBUG_P(PerlIO_printf(Perl_debug_log,
6826         "Screamer: done, len=%ld, string=|%.*s|\n",
6827         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6828     }
6829    else
6830     {
6831        /*The big, slow, and stupid way. */
6832 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
6833         STDCHAR *buf = NULL;
6834         Newx(buf, 8192, STDCHAR);
6835         assert(buf);
6836 #else
6837         STDCHAR buf[8192];
6838 #endif
6839
6840 screamer2:
6841         if (rslen) {
6842             register const STDCHAR * const bpe = buf + sizeof(buf);
6843             bp = buf;
6844             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6845                 ; /* keep reading */
6846             cnt = bp - buf;
6847         }
6848         else {
6849             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6850             /* Accomodate broken VAXC compiler, which applies U8 cast to
6851              * both args of ?: operator, causing EOF to change into 255
6852              */
6853             if (cnt > 0)
6854                  i = (U8)buf[cnt - 1];
6855             else
6856                  i = EOF;
6857         }
6858
6859         if (cnt < 0)
6860             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
6861         if (append)
6862              sv_catpvn(sv, (char *) buf, cnt);
6863         else
6864              sv_setpvn(sv, (char *) buf, cnt);
6865
6866         if (i != EOF &&                 /* joy */
6867             (!rslen ||
6868              SvCUR(sv) < rslen ||
6869              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6870         {
6871             append = -1;
6872             /*
6873              * If we're reading from a TTY and we get a short read,
6874              * indicating that the user hit his EOF character, we need
6875              * to notice it now, because if we try to read from the TTY
6876              * again, the EOF condition will disappear.
6877              *
6878              * The comparison of cnt to sizeof(buf) is an optimization
6879              * that prevents unnecessary calls to feof().
6880              *
6881              * - jik 9/25/96
6882              */
6883             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
6884                 goto screamer2;
6885         }
6886
6887 #ifdef USE_HEAP_INSTEAD_OF_STACK
6888         Safefree(buf);
6889 #endif
6890     }
6891
6892     if (rspara) {               /* have to do this both before and after */
6893         while (i != EOF) {      /* to make sure file boundaries work right */
6894             i = PerlIO_getc(fp);
6895             if (i != '\n') {
6896                 PerlIO_ungetc(fp,i);
6897                 break;
6898             }
6899         }
6900     }
6901
6902 return_string_or_null:
6903     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
6904 }
6905
6906 /*
6907 =for apidoc sv_inc
6908
6909 Auto-increment of the value in the SV, doing string to numeric conversion
6910 if necessary. Handles 'get' magic.
6911
6912 =cut
6913 */
6914
6915 void
6916 Perl_sv_inc(pTHX_ register SV *sv)
6917 {
6918     dVAR;
6919     register char *d;
6920     int flags;
6921
6922     if (!sv)
6923         return;
6924     SvGETMAGIC(sv);
6925     if (SvTHINKFIRST(sv)) {
6926         if (SvIsCOW(sv))
6927             sv_force_normal_flags(sv, 0);
6928         if (SvREADONLY(sv)) {
6929             if (IN_PERL_RUNTIME)
6930                 Perl_croak(aTHX_ PL_no_modify);
6931         }
6932         if (SvROK(sv)) {
6933             IV i;
6934             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6935                 return;
6936             i = PTR2IV(SvRV(sv));
6937             sv_unref(sv);
6938             sv_setiv(sv, i);
6939         }
6940     }
6941     flags = SvFLAGS(sv);
6942     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6943         /* It's (privately or publicly) a float, but not tested as an
6944            integer, so test it to see. */
6945         (void) SvIV(sv);
6946         flags = SvFLAGS(sv);
6947     }
6948     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6949         /* It's publicly an integer, or privately an integer-not-float */
6950 #ifdef PERL_PRESERVE_IVUV
6951       oops_its_int:
6952 #endif
6953         if (SvIsUV(sv)) {
6954             if (SvUVX(sv) == UV_MAX)
6955                 sv_setnv(sv, UV_MAX_P1);
6956             else
6957                 (void)SvIOK_only_UV(sv);
6958                 SvUV_set(sv, SvUVX(sv) + 1);
6959         } else {
6960             if (SvIVX(sv) == IV_MAX)
6961                 sv_setuv(sv, (UV)IV_MAX + 1);
6962             else {
6963                 (void)SvIOK_only(sv);
6964                 SvIV_set(sv, SvIVX(sv) + 1);
6965             }   
6966         }
6967         return;
6968     }
6969     if (flags & SVp_NOK) {
6970         const NV was = SvNVX(sv);
6971         if (NV_OVERFLOWS_INTEGERS_AT &&
6972             was >= NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
6973             Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
6974                         "Lost precision when incrementing %" NVff " by 1",
6975                         was);
6976         }
6977         (void)SvNOK_only(sv);
6978         SvNV_set(sv, was + 1.0);
6979         return;
6980     }
6981
6982     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6983         if ((flags & SVTYPEMASK) < SVt_PVIV)
6984             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
6985         (void)SvIOK_only(sv);
6986         SvIV_set(sv, 1);
6987         return;
6988     }
6989     d = SvPVX(sv);
6990     while (isALPHA(*d)) d++;
6991     while (isDIGIT(*d)) d++;
6992     if (*d) {
6993 #ifdef PERL_PRESERVE_IVUV
6994         /* Got to punt this as an integer if needs be, but we don't issue
6995            warnings. Probably ought to make the sv_iv_please() that does
6996            the conversion if possible, and silently.  */
6997         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6998         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6999             /* Need to try really hard to see if it's an integer.
7000                9.22337203685478e+18 is an integer.
7001                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7002                so $a="9.22337203685478e+18"; $a+0; $a++
7003                needs to be the same as $a="9.22337203685478e+18"; $a++
7004                or we go insane. */
7005         
7006             (void) sv_2iv(sv);
7007             if (SvIOK(sv))
7008                 goto oops_its_int;
7009
7010             /* sv_2iv *should* have made this an NV */
7011             if (flags & SVp_NOK) {
7012                 (void)SvNOK_only(sv);
7013                 SvNV_set(sv, SvNVX(sv) + 1.0);
7014                 return;
7015             }
7016             /* I don't think we can get here. Maybe I should assert this
7017                And if we do get here I suspect that sv_setnv will croak. NWC
7018                Fall through. */
7019 #if defined(USE_LONG_DOUBLE)
7020             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",
7021                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7022 #else
7023             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7024                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7025 #endif
7026         }
7027 #endif /* PERL_PRESERVE_IVUV */
7028         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7029         return;
7030     }
7031     d--;
7032     while (d >= SvPVX_const(sv)) {
7033         if (isDIGIT(*d)) {
7034             if (++*d <= '9')
7035                 return;
7036             *(d--) = '0';
7037         }
7038         else {
7039 #ifdef EBCDIC
7040             /* MKS: The original code here died if letters weren't consecutive.
7041              * at least it didn't have to worry about non-C locales.  The
7042              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7043              * arranged in order (although not consecutively) and that only
7044              * [A-Za-z] are accepted by isALPHA in the C locale.
7045              */
7046             if (*d != 'z' && *d != 'Z') {
7047                 do { ++*d; } while (!isALPHA(*d));
7048                 return;
7049             }
7050             *(d--) -= 'z' - 'a';
7051 #else
7052             ++*d;
7053             if (isALPHA(*d))
7054                 return;
7055             *(d--) -= 'z' - 'a' + 1;
7056 #endif
7057         }
7058     }
7059     /* oh,oh, the number grew */
7060     SvGROW(sv, SvCUR(sv) + 2);
7061     SvCUR_set(sv, SvCUR(sv) + 1);
7062     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7063         *d = d[-1];
7064     if (isDIGIT(d[1]))
7065         *d = '1';
7066     else
7067         *d = d[1];
7068 }
7069
7070 /*
7071 =for apidoc sv_dec
7072
7073 Auto-decrement of the value in the SV, doing string to numeric conversion
7074 if necessary. Handles 'get' magic.
7075
7076 =cut
7077 */
7078
7079 void
7080 Perl_sv_dec(pTHX_ register SV *sv)
7081 {
7082     dVAR;
7083     int flags;
7084
7085     if (!sv)
7086         return;
7087     SvGETMAGIC(sv);
7088     if (SvTHINKFIRST(sv)) {
7089         if (SvIsCOW(sv))
7090             sv_force_normal_flags(sv, 0);
7091         if (SvREADONLY(sv)) {
7092             if (IN_PERL_RUNTIME)
7093                 Perl_croak(aTHX_ PL_no_modify);
7094         }
7095         if (SvROK(sv)) {
7096             IV i;
7097             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7098                 return;
7099             i = PTR2IV(SvRV(sv));
7100             sv_unref(sv);
7101             sv_setiv(sv, i);
7102         }
7103     }
7104     /* Unlike sv_inc we don't have to worry about string-never-numbers
7105        and keeping them magic. But we mustn't warn on punting */
7106     flags = SvFLAGS(sv);
7107     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7108         /* It's publicly an integer, or privately an integer-not-float */
7109 #ifdef PERL_PRESERVE_IVUV
7110       oops_its_int:
7111 #endif
7112         if (SvIsUV(sv)) {
7113             if (SvUVX(sv) == 0) {
7114                 (void)SvIOK_only(sv);
7115                 SvIV_set(sv, -1);
7116             }
7117             else {
7118                 (void)SvIOK_only_UV(sv);
7119                 SvUV_set(sv, SvUVX(sv) - 1);
7120             }   
7121         } else {
7122             if (SvIVX(sv) == IV_MIN) {
7123                 sv_setnv(sv, (NV)IV_MIN);
7124                 goto oops_its_num;
7125             }
7126             else {
7127                 (void)SvIOK_only(sv);
7128                 SvIV_set(sv, SvIVX(sv) - 1);
7129             }   
7130         }
7131         return;
7132     }
7133     if (flags & SVp_NOK) {
7134     oops_its_num:
7135         {
7136             const NV was = SvNVX(sv);
7137             if (NV_OVERFLOWS_INTEGERS_AT &&
7138                 was <= -NV_OVERFLOWS_INTEGERS_AT && ckWARN(WARN_IMPRECISION)) {
7139                 Perl_warner(aTHX_ packWARN(WARN_IMPRECISION),
7140                             "Lost precision when decrementing %" NVff " by 1",
7141                             was);
7142             }
7143             (void)SvNOK_only(sv);
7144             SvNV_set(sv, was - 1.0);
7145             return;
7146         }
7147     }
7148     if (!(flags & SVp_POK)) {
7149         if ((flags & SVTYPEMASK) < SVt_PVIV)
7150             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7151         SvIV_set(sv, -1);
7152         (void)SvIOK_only(sv);
7153         return;
7154     }
7155 #ifdef PERL_PRESERVE_IVUV
7156     {
7157         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7158         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7159             /* Need to try really hard to see if it's an integer.
7160                9.22337203685478e+18 is an integer.
7161                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7162                so $a="9.22337203685478e+18"; $a+0; $a--
7163                needs to be the same as $a="9.22337203685478e+18"; $a--
7164                or we go insane. */
7165         
7166             (void) sv_2iv(sv);
7167             if (SvIOK(sv))
7168                 goto oops_its_int;
7169
7170             /* sv_2iv *should* have made this an NV */
7171             if (flags & SVp_NOK) {
7172                 (void)SvNOK_only(sv);
7173                 SvNV_set(sv, SvNVX(sv) - 1.0);
7174                 return;
7175             }
7176             /* I don't think we can get here. Maybe I should assert this
7177                And if we do get here I suspect that sv_setnv will croak. NWC
7178                Fall through. */
7179 #if defined(USE_LONG_DOUBLE)
7180             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",
7181                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7182 #else
7183             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7184                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7185 #endif
7186         }
7187     }
7188 #endif /* PERL_PRESERVE_IVUV */
7189     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
7190 }
7191
7192 /*
7193 =for apidoc sv_mortalcopy
7194
7195 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7196 The new SV is marked as mortal. It will be destroyed "soon", either by an
7197 explicit call to FREETMPS, or by an implicit call at places such as
7198 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
7199
7200 =cut
7201 */
7202
7203 /* Make a string that will exist for the duration of the expression
7204  * evaluation.  Actually, it may have to last longer than that, but
7205  * hopefully we won't free it until it has been assigned to a
7206  * permanent location. */
7207
7208 SV *
7209 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
7210 {
7211     dVAR;
7212     register SV *sv;
7213
7214     new_SV(sv);
7215     sv_setsv(sv,oldstr);
7216     EXTEND_MORTAL(1);
7217     PL_tmps_stack[++PL_tmps_ix] = sv;
7218     SvTEMP_on(sv);
7219     return sv;
7220 }
7221
7222 /*
7223 =for apidoc sv_newmortal
7224
7225 Creates a new null SV which is mortal.  The reference count of the SV is
7226 set to 1. It will be destroyed "soon", either by an explicit call to
7227 FREETMPS, or by an implicit call at places such as statement boundaries.
7228 See also C<sv_mortalcopy> and C<sv_2mortal>.
7229
7230 =cut
7231 */
7232
7233 SV *
7234 Perl_sv_newmortal(pTHX)
7235 {
7236     dVAR;
7237     register SV *sv;
7238
7239     new_SV(sv);
7240     SvFLAGS(sv) = SVs_TEMP;
7241     EXTEND_MORTAL(1);
7242     PL_tmps_stack[++PL_tmps_ix] = sv;
7243     return sv;
7244 }
7245
7246
7247 /*
7248 =for apidoc newSVpvn_flags
7249
7250 Creates a new SV and copies a string into it.  The reference count for the
7251 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
7252 string.  You are responsible for ensuring that the source string is at least
7253 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
7254 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7255 If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7256 returning. If C<SVf_UTF8> is set, then it will be set on the new SV.
7257 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7258
7259     #define newSVpvn_utf8(s, len, u)                    \
7260         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7261
7262 =cut
7263 */
7264
7265 SV *
7266 Perl_newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags)
7267 {
7268     dVAR;
7269     register SV *sv;
7270
7271     /* All the flags we don't support must be zero.
7272        And we're new code so I'm going to assert this from the start.  */
7273     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7274     new_SV(sv);
7275     sv_setpvn(sv,s,len);
7276     SvFLAGS(sv) |= (flags & SVf_UTF8);
7277     return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
7278 }
7279
7280 /*
7281 =for apidoc sv_2mortal
7282
7283 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
7284 by an explicit call to FREETMPS, or by an implicit call at places such as
7285 statement boundaries.  SvTEMP() is turned on which means that the SV's
7286 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7287 and C<sv_mortalcopy>.
7288
7289 =cut
7290 */
7291
7292 SV *
7293 Perl_sv_2mortal(pTHX_ register SV *sv)
7294 {
7295     dVAR;
7296     if (!sv)
7297         return NULL;
7298     if (SvREADONLY(sv) && SvIMMORTAL(sv))
7299         return sv;
7300     EXTEND_MORTAL(1);
7301     PL_tmps_stack[++PL_tmps_ix] = sv;
7302     SvTEMP_on(sv);
7303     return sv;
7304 }
7305
7306 /*
7307 =for apidoc newSVpv
7308
7309 Creates a new SV and copies a string into it.  The reference count for the
7310 SV is set to 1.  If C<len> is zero, Perl will compute the length using
7311 strlen().  For efficiency, consider using C<newSVpvn> instead.
7312
7313 =cut
7314 */
7315
7316 SV *
7317 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
7318 {
7319     dVAR;
7320     register SV *sv;
7321
7322     new_SV(sv);
7323     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
7324     return sv;
7325 }
7326
7327 /*
7328 =for apidoc newSVpvn
7329
7330 Creates a new SV and copies a string into it.  The reference count for the
7331 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
7332 string.  You are responsible for ensuring that the source string is at least
7333 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
7334
7335 =cut
7336 */
7337
7338 SV *
7339 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
7340 {
7341     dVAR;
7342     register SV *sv;
7343
7344     new_SV(sv);
7345     sv_setpvn(sv,s,len);
7346     return sv;
7347 }
7348
7349 /*
7350 =for apidoc newSVhek
7351
7352 Creates a new SV from the hash key structure.  It will generate scalars that
7353 point to the shared string table where possible. Returns a new (undefined)
7354 SV if the hek is NULL.
7355
7356 =cut
7357 */
7358
7359 SV *
7360 Perl_newSVhek(pTHX_ const HEK *hek)
7361 {
7362     dVAR;
7363     if (!hek) {
7364         SV *sv;
7365
7366         new_SV(sv);
7367         return sv;
7368     }
7369
7370     if (HEK_LEN(hek) == HEf_SVKEY) {
7371         return newSVsv(*(SV**)HEK_KEY(hek));
7372     } else {
7373         const int flags = HEK_FLAGS(hek);
7374         if (flags & HVhek_WASUTF8) {
7375             /* Trouble :-)
7376                Andreas would like keys he put in as utf8 to come back as utf8
7377             */
7378             STRLEN utf8_len = HEK_LEN(hek);
7379             const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7380             SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7381
7382             SvUTF8_on (sv);
7383             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7384             return sv;
7385         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7386             /* We don't have a pointer to the hv, so we have to replicate the
7387                flag into every HEK. This hv is using custom a hasing
7388                algorithm. Hence we can't return a shared string scalar, as
7389                that would contain the (wrong) hash value, and might get passed
7390                into an hv routine with a regular hash.
7391                Similarly, a hash that isn't using shared hash keys has to have
7392                the flag in every key so that we know not to try to call
7393                share_hek_kek on it.  */
7394
7395             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7396             if (HEK_UTF8(hek))
7397                 SvUTF8_on (sv);
7398             return sv;
7399         }
7400         /* This will be overwhelminly the most common case.  */
7401         {
7402             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7403                more efficient than sharepvn().  */
7404             SV *sv;
7405
7406             new_SV(sv);
7407             sv_upgrade(sv, SVt_PV);
7408             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7409             SvCUR_set(sv, HEK_LEN(hek));
7410             SvLEN_set(sv, 0);
7411             SvREADONLY_on(sv);
7412             SvFAKE_on(sv);
7413             SvPOK_on(sv);
7414             if (HEK_UTF8(hek))
7415                 SvUTF8_on(sv);
7416             return sv;
7417         }
7418     }
7419 }
7420
7421 /*
7422 =for apidoc newSVpvn_share
7423
7424 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7425 table. If the string does not already exist in the table, it is created
7426 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7427 value is used; otherwise the hash is computed. The string's hash can be later
7428 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7429 that as the string table is used for shared hash keys these strings will have
7430 SvPVX_const == HeKEY and hash lookup will avoid string compare.
7431
7432 =cut
7433 */
7434
7435 SV *
7436 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7437 {
7438     dVAR;
7439     register SV *sv;
7440     bool is_utf8 = FALSE;
7441     const char *const orig_src = src;
7442
7443     if (len < 0) {
7444         STRLEN tmplen = -len;
7445         is_utf8 = TRUE;
7446         /* See the note in hv.c:hv_fetch() --jhi */
7447         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7448         len = tmplen;
7449     }
7450     if (!hash)
7451         PERL_HASH(hash, src, len);
7452     new_SV(sv);
7453     sv_upgrade(sv, SVt_PV);
7454     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7455     SvCUR_set(sv, len);
7456     SvLEN_set(sv, 0);
7457     SvREADONLY_on(sv);
7458     SvFAKE_on(sv);
7459     SvPOK_on(sv);
7460     if (is_utf8)
7461         SvUTF8_on(sv);
7462     if (src != orig_src)
7463         Safefree(src);
7464     return sv;
7465 }
7466
7467
7468 #if defined(PERL_IMPLICIT_CONTEXT)
7469
7470 /* pTHX_ magic can't cope with varargs, so this is a no-context
7471  * version of the main function, (which may itself be aliased to us).
7472  * Don't access this version directly.
7473  */
7474
7475 SV *
7476 Perl_newSVpvf_nocontext(const char* pat, ...)
7477 {
7478     dTHX;
7479     register SV *sv;
7480     va_list args;
7481
7482     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7483
7484     va_start(args, pat);
7485     sv = vnewSVpvf(pat, &args);
7486     va_end(args);
7487     return sv;
7488 }
7489 #endif
7490
7491 /*
7492 =for apidoc newSVpvf
7493
7494 Creates a new SV and initializes it with the string formatted like
7495 C<sprintf>.
7496
7497 =cut
7498 */
7499
7500 SV *
7501 Perl_newSVpvf(pTHX_ const char* pat, ...)
7502 {
7503     register SV *sv;
7504     va_list args;
7505
7506     PERL_ARGS_ASSERT_NEWSVPVF;
7507
7508     va_start(args, pat);
7509     sv = vnewSVpvf(pat, &args);
7510     va_end(args);
7511     return sv;
7512 }
7513
7514 /* backend for newSVpvf() and newSVpvf_nocontext() */
7515
7516 SV *
7517 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
7518 {
7519     dVAR;
7520     register SV *sv;
7521
7522     PERL_ARGS_ASSERT_VNEWSVPVF;
7523
7524     new_SV(sv);
7525     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7526     return sv;
7527 }
7528
7529 /*
7530 =for apidoc newSVnv
7531
7532 Creates a new SV and copies a floating point value into it.
7533 The reference count for the SV is set to 1.
7534
7535 =cut
7536 */
7537
7538 SV *
7539 Perl_newSVnv(pTHX_ NV n)
7540 {
7541     dVAR;
7542     register SV *sv;
7543
7544     new_SV(sv);
7545     sv_setnv(sv,n);
7546     return sv;
7547 }
7548
7549 /*
7550 =for apidoc newSViv
7551
7552 Creates a new SV and copies an integer into it.  The reference count for the
7553 SV is set to 1.
7554
7555 =cut
7556 */
7557
7558 SV *
7559 Perl_newSViv(pTHX_ IV i)
7560 {
7561     dVAR;
7562     register SV *sv;
7563
7564     new_SV(sv);
7565     sv_setiv(sv,i);
7566     return sv;
7567 }
7568
7569 /*
7570 =for apidoc newSVuv
7571
7572 Creates a new SV and copies an unsigned integer into it.
7573 The reference count for the SV is set to 1.
7574
7575 =cut
7576 */
7577
7578 SV *
7579 Perl_newSVuv(pTHX_ UV u)
7580 {
7581     dVAR;
7582     register SV *sv;
7583
7584     new_SV(sv);
7585     sv_setuv(sv,u);
7586     return sv;
7587 }
7588
7589 /*
7590 =for apidoc newSV_type
7591
7592 Creates a new SV, of the type specified.  The reference count for the new SV
7593 is set to 1.
7594
7595 =cut
7596 */
7597
7598 SV *
7599 Perl_newSV_type(pTHX_ const svtype type)
7600 {
7601     register SV *sv;
7602
7603     new_SV(sv);
7604     sv_upgrade(sv, type);
7605     return sv;
7606 }
7607
7608 /*
7609 =for apidoc newRV_noinc
7610
7611 Creates an RV wrapper for an SV.  The reference count for the original
7612 SV is B<not> incremented.
7613
7614 =cut
7615 */
7616
7617 SV *
7618 Perl_newRV_noinc(pTHX_ SV *tmpRef)
7619 {
7620     dVAR;
7621     register SV *sv = newSV_type(SVt_IV);
7622
7623     PERL_ARGS_ASSERT_NEWRV_NOINC;
7624
7625     SvTEMP_off(tmpRef);
7626     SvRV_set(sv, tmpRef);
7627     SvROK_on(sv);
7628     return sv;
7629 }
7630
7631 /* newRV_inc is the official function name to use now.
7632  * newRV_inc is in fact #defined to newRV in sv.h
7633  */
7634
7635 SV *
7636 Perl_newRV(pTHX_ SV *sv)
7637 {
7638     dVAR;
7639
7640     PERL_ARGS_ASSERT_NEWRV;
7641
7642     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
7643 }
7644
7645 /*
7646 =for apidoc newSVsv
7647
7648 Creates a new SV which is an exact duplicate of the original SV.
7649 (Uses C<sv_setsv>).
7650
7651 =cut
7652 */
7653
7654 SV *
7655 Perl_newSVsv(pTHX_ register SV *old)
7656 {
7657     dVAR;
7658     register SV *sv;
7659
7660     if (!old)
7661         return NULL;
7662     if (SvTYPE(old) == SVTYPEMASK) {
7663         if (ckWARN_d(WARN_INTERNAL))
7664             Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
7665         return NULL;
7666     }
7667     new_SV(sv);
7668     /* SV_GMAGIC is the default for sv_setv()
7669        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
7670        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
7671     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
7672     return sv;
7673 }
7674
7675 /*
7676 =for apidoc sv_reset
7677
7678 Underlying implementation for the C<reset> Perl function.
7679 Note that the perl-level function is vaguely deprecated.
7680
7681 =cut
7682 */
7683
7684 void
7685 Perl_sv_reset(pTHX_ register const char *s, HV *stash)
7686 {
7687     dVAR;
7688     char todo[PERL_UCHAR_MAX+1];
7689
7690     PERL_ARGS_ASSERT_SV_RESET;
7691
7692     if (!stash)
7693         return;
7694
7695     if (!*s) {          /* reset ?? searches */
7696         MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
7697         if (mg) {
7698             const U32 count = mg->mg_len / sizeof(PMOP**);
7699             PMOP **pmp = (PMOP**) mg->mg_ptr;
7700             PMOP *const *const end = pmp + count;
7701
7702             while (pmp < end) {
7703 #ifdef USE_ITHREADS
7704                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
7705 #else
7706                 (*pmp)->op_pmflags &= ~PMf_USED;
7707 #endif
7708                 ++pmp;
7709             }
7710         }
7711         return;
7712     }
7713
7714     /* reset variables */
7715
7716     if (!HvARRAY(stash))
7717         return;
7718
7719     Zero(todo, 256, char);
7720     while (*s) {
7721         I32 max;
7722         I32 i = (unsigned char)*s;
7723         if (s[1] == '-') {
7724             s += 2;
7725         }
7726         max = (unsigned char)*s++;
7727         for ( ; i <= max; i++) {
7728             todo[i] = 1;
7729         }
7730         for (i = 0; i <= (I32) HvMAX(stash); i++) {
7731             HE *entry;
7732             for (entry = HvARRAY(stash)[i];
7733                  entry;
7734                  entry = HeNEXT(entry))
7735             {
7736                 register GV *gv;
7737                 register SV *sv;
7738
7739                 if (!todo[(U8)*HeKEY(entry)])
7740                     continue;
7741                 gv = (GV*)HeVAL(entry);
7742                 sv = GvSV(gv);
7743                 if (sv) {
7744                     if (SvTHINKFIRST(sv)) {
7745                         if (!SvREADONLY(sv) && SvROK(sv))
7746                             sv_unref(sv);
7747                         /* XXX Is this continue a bug? Why should THINKFIRST
7748                            exempt us from resetting arrays and hashes?  */
7749                         continue;
7750                     }
7751                     SvOK_off(sv);
7752                     if (SvTYPE(sv) >= SVt_PV) {
7753                         SvCUR_set(sv, 0);
7754                         if (SvPVX_const(sv) != NULL)
7755                             *SvPVX(sv) = '\0';
7756                         SvTAINT(sv);
7757                     }
7758                 }
7759                 if (GvAV(gv)) {
7760                     av_clear(GvAV(gv));
7761                 }
7762                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
7763 #if defined(VMS)
7764                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
7765 #else /* ! VMS */
7766                     hv_clear(GvHV(gv));
7767 #  if defined(USE_ENVIRON_ARRAY)
7768                     if (gv == PL_envgv)
7769                         my_clearenv();
7770 #  endif /* USE_ENVIRON_ARRAY */
7771 #endif /* VMS */
7772                 }
7773             }
7774         }
7775     }
7776 }
7777
7778 /*
7779 =for apidoc sv_2io
7780
7781 Using various gambits, try to get an IO from an SV: the IO slot if its a
7782 GV; or the recursive result if we're an RV; or the IO slot of the symbol
7783 named after the PV if we're a string.
7784
7785 =cut
7786 */
7787
7788 IO*
7789 Perl_sv_2io(pTHX_ SV *sv)
7790 {
7791     IO* io;
7792     GV* gv;
7793
7794     PERL_ARGS_ASSERT_SV_2IO;
7795
7796     switch (SvTYPE(sv)) {
7797     case SVt_PVIO:
7798         io = (IO*)sv;
7799         break;
7800     case SVt_PVGV:
7801         gv = (GV*)sv;
7802         io = GvIO(gv);
7803         if (!io)
7804             Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
7805         break;
7806     default:
7807         if (!SvOK(sv))
7808             Perl_croak(aTHX_ PL_no_usym, "filehandle");
7809         if (SvROK(sv))
7810             return sv_2io(SvRV(sv));
7811         gv = gv_fetchsv(sv, 0, SVt_PVIO);
7812         if (gv)
7813             io = GvIO(gv);
7814         else
7815             io = 0;
7816         if (!io)
7817             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
7818         break;
7819     }
7820     return io;
7821 }
7822
7823 /*
7824 =for apidoc sv_2cv
7825
7826 Using various gambits, try to get a CV from an SV; in addition, try if
7827 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
7828 The flags in C<lref> are passed to sv_fetchsv.
7829
7830 =cut
7831 */
7832
7833 CV *
7834 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
7835 {
7836     dVAR;
7837     GV *gv = NULL;
7838     CV *cv = NULL;
7839
7840     PERL_ARGS_ASSERT_SV_2CV;
7841
7842     if (!sv) {
7843         *st = NULL;
7844         *gvp = NULL;
7845         return NULL;
7846     }
7847     switch (SvTYPE(sv)) {
7848     case SVt_PVCV:
7849         *st = CvSTASH(sv);
7850         *gvp = NULL;
7851         return (CV*)sv;
7852     case SVt_PVHV:
7853     case SVt_PVAV:
7854         *st = NULL;
7855         *gvp = NULL;
7856         return NULL;
7857     case SVt_PVGV:
7858         gv = (GV*)sv;
7859         *gvp = gv;
7860         *st = GvESTASH(gv);
7861         goto fix_gv;
7862
7863     default:
7864         SvGETMAGIC(sv);
7865         if (SvROK(sv)) {
7866             SV * const *sp = &sv;       /* Used in tryAMAGICunDEREF macro. */
7867             tryAMAGICunDEREF(to_cv);
7868
7869             sv = SvRV(sv);
7870             if (SvTYPE(sv) == SVt_PVCV) {
7871                 cv = (CV*)sv;
7872                 *gvp = NULL;
7873                 *st = CvSTASH(cv);
7874                 return cv;
7875             }
7876             else if(isGV(sv))
7877                 gv = (GV*)sv;
7878             else
7879                 Perl_croak(aTHX_ "Not a subroutine reference");
7880         }
7881         else if (isGV(sv))
7882             gv = (GV*)sv;
7883         else
7884             gv = gv_fetchsv(sv, lref, SVt_PVCV);
7885         *gvp = gv;
7886         if (!gv) {
7887             *st = NULL;
7888             return NULL;
7889         }
7890         /* Some flags to gv_fetchsv mean don't really create the GV  */
7891         if (SvTYPE(gv) != SVt_PVGV) {
7892             *st = NULL;
7893             return NULL;
7894         }
7895         *st = GvESTASH(gv);
7896     fix_gv:
7897         if (lref && !GvCVu(gv)) {
7898             SV *tmpsv;
7899             ENTER;
7900             tmpsv = newSV(0);
7901             gv_efullname3(tmpsv, gv, NULL);
7902             /* XXX this is probably not what they think they're getting.
7903              * It has the same effect as "sub name;", i.e. just a forward
7904              * declaration! */
7905             newSUB(start_subparse(FALSE, 0),
7906                    newSVOP(OP_CONST, 0, tmpsv),
7907                    NULL, NULL);
7908             LEAVE;
7909             if (!GvCVu(gv))
7910                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7911                            SVfARG(sv));
7912         }
7913         return GvCVu(gv);
7914     }
7915 }
7916
7917 /*
7918 =for apidoc sv_true
7919
7920 Returns true if the SV has a true value by Perl's rules.
7921 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7922 instead use an in-line version.
7923
7924 =cut
7925 */
7926
7927 I32
7928 Perl_sv_true(pTHX_ register SV *sv)
7929 {
7930     if (!sv)
7931         return 0;
7932     if (SvPOK(sv)) {
7933         register const XPV* const tXpv = (XPV*)SvANY(sv);
7934         if (tXpv &&
7935                 (tXpv->xpv_cur > 1 ||
7936                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
7937             return 1;
7938         else
7939             return 0;
7940     }
7941     else {
7942         if (SvIOK(sv))
7943             return SvIVX(sv) != 0;
7944         else {
7945             if (SvNOK(sv))
7946                 return SvNVX(sv) != 0.0;
7947             else
7948                 return sv_2bool(sv);
7949         }
7950     }
7951 }
7952
7953 /*
7954 =for apidoc sv_pvn_force
7955
7956 Get a sensible string out of the SV somehow.
7957 A private implementation of the C<SvPV_force> macro for compilers which
7958 can't cope with complex macro expressions. Always use the macro instead.
7959
7960 =for apidoc sv_pvn_force_flags
7961
7962 Get a sensible string out of the SV somehow.
7963 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7964 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7965 implemented in terms of this function.
7966 You normally want to use the various wrapper macros instead: see
7967 C<SvPV_force> and C<SvPV_force_nomg>
7968
7969 =cut
7970 */
7971
7972 char *
7973 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7974 {
7975     dVAR;
7976
7977     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
7978
7979     if (SvTHINKFIRST(sv) && !SvROK(sv))
7980         sv_force_normal_flags(sv, 0);
7981
7982     if (SvPOK(sv)) {
7983         if (lp)
7984             *lp = SvCUR(sv);
7985     }
7986     else {
7987         char *s;
7988         STRLEN len;
7989  
7990         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
7991             const char * const ref = sv_reftype(sv,0);
7992             if (PL_op)
7993                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
7994                            ref, OP_NAME(PL_op));
7995             else
7996                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
7997         }
7998         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
7999             || isGV_with_GP(sv))
8000             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8001                 OP_NAME(PL_op));
8002         s = sv_2pv_flags(sv, &len, flags);
8003         if (lp)
8004             *lp = len;
8005
8006         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
8007             if (SvROK(sv))
8008                 sv_unref(sv);
8009             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
8010             SvGROW(sv, len + 1);
8011             Move(s,SvPVX(sv),len,char);
8012             SvCUR_set(sv, len);
8013             SvPVX(sv)[len] = '\0';
8014         }
8015         if (!SvPOK(sv)) {
8016             SvPOK_on(sv);               /* validate pointer */
8017             SvTAINT(sv);
8018             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8019                                   PTR2UV(sv),SvPVX_const(sv)));
8020         }
8021     }
8022     return SvPVX_mutable(sv);
8023 }
8024
8025 /*
8026 =for apidoc sv_pvbyten_force
8027
8028 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8029
8030 =cut
8031 */
8032
8033 char *
8034 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
8035 {
8036     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8037
8038     sv_pvn_force(sv,lp);
8039     sv_utf8_downgrade(sv,0);
8040     *lp = SvCUR(sv);
8041     return SvPVX(sv);
8042 }
8043
8044 /*
8045 =for apidoc sv_pvutf8n_force
8046
8047 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8048
8049 =cut
8050 */
8051
8052 char *
8053 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
8054 {
8055     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8056
8057     sv_pvn_force(sv,lp);
8058     sv_utf8_upgrade(sv);
8059     *lp = SvCUR(sv);
8060     return SvPVX(sv);
8061 }
8062
8063 /*
8064 =for apidoc sv_reftype
8065
8066 Returns a string describing what the SV is a reference to.
8067
8068 =cut
8069 */
8070
8071 const char *
8072 Perl_sv_reftype(pTHX_ const SV *sv, int ob)
8073 {
8074     PERL_ARGS_ASSERT_SV_REFTYPE;
8075
8076     /* The fact that I don't need to downcast to char * everywhere, only in ?:
8077        inside return suggests a const propagation bug in g++.  */
8078     if (ob && SvOBJECT(sv)) {
8079         char * const name = HvNAME_get(SvSTASH(sv));
8080         return name ? name : (char *) "__ANON__";
8081     }
8082     else {
8083         switch (SvTYPE(sv)) {
8084         case SVt_NULL:
8085         case SVt_IV:
8086         case SVt_NV:
8087         case SVt_PV:
8088         case SVt_PVIV:
8089         case SVt_PVNV:
8090         case SVt_PVMG:
8091                                 if (SvVOK(sv))
8092                                     return "VSTRING";
8093                                 if (SvROK(sv))
8094                                     return "REF";
8095                                 else
8096                                     return "SCALAR";
8097
8098         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
8099                                 /* tied lvalues should appear to be
8100                                  * scalars for backwards compatitbility */
8101                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8102                                     ? "SCALAR" : "LVALUE");
8103         case SVt_PVAV:          return "ARRAY";
8104         case SVt_PVHV:          return "HASH";
8105         case SVt_PVCV:          return "CODE";
8106         case SVt_PVGV:          return "GLOB";
8107         case SVt_PVFM:          return "FORMAT";
8108         case SVt_PVIO:          return "IO";
8109         case SVt_BIND:          return "BIND";
8110         case SVt_REGEXP:        return "REGEXP"; 
8111         default:                return "UNKNOWN";
8112         }
8113     }
8114 }
8115
8116 /*
8117 =for apidoc sv_isobject
8118
8119 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8120 object.  If the SV is not an RV, or if the object is not blessed, then this
8121 will return false.
8122
8123 =cut
8124 */
8125
8126 int
8127 Perl_sv_isobject(pTHX_ SV *sv)
8128 {
8129     if (!sv)
8130         return 0;
8131     SvGETMAGIC(sv);
8132     if (!SvROK(sv))
8133         return 0;
8134     sv = (SV*)SvRV(sv);
8135     if (!SvOBJECT(sv))
8136         return 0;
8137     return 1;
8138 }
8139
8140 /*
8141 =for apidoc sv_isa
8142
8143 Returns a boolean indicating whether the SV is blessed into the specified
8144 class.  This does not check for subtypes; use C<sv_derived_from> to verify
8145 an inheritance relationship.
8146
8147 =cut
8148 */
8149
8150 int
8151 Perl_sv_isa(pTHX_ SV *sv, const char *name)
8152 {
8153     const char *hvname;
8154
8155     PERL_ARGS_ASSERT_SV_ISA;
8156
8157     if (!sv)
8158         return 0;
8159     SvGETMAGIC(sv);
8160     if (!SvROK(sv))
8161         return 0;
8162     sv = (SV*)SvRV(sv);
8163     if (!SvOBJECT(sv))
8164         return 0;
8165     hvname = HvNAME_get(SvSTASH(sv));
8166     if (!hvname)
8167         return 0;
8168
8169     return strEQ(hvname, name);
8170 }
8171
8172 /*
8173 =for apidoc newSVrv
8174
8175 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
8176 it will be upgraded to one.  If C<classname> is non-null then the new SV will
8177 be blessed in the specified package.  The new SV is returned and its
8178 reference count is 1.
8179
8180 =cut
8181 */
8182
8183 SV*
8184 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
8185 {
8186     dVAR;
8187     SV *sv;
8188
8189     PERL_ARGS_ASSERT_NEWSVRV;
8190
8191     new_SV(sv);
8192
8193     SV_CHECK_THINKFIRST_COW_DROP(rv);
8194     (void)SvAMAGIC_off(rv);
8195
8196     if (SvTYPE(rv) >= SVt_PVMG) {
8197         const U32 refcnt = SvREFCNT(rv);
8198         SvREFCNT(rv) = 0;
8199         sv_clear(rv);
8200         SvFLAGS(rv) = 0;
8201         SvREFCNT(rv) = refcnt;
8202
8203         sv_upgrade(rv, SVt_IV);
8204     } else if (SvROK(rv)) {
8205         SvREFCNT_dec(SvRV(rv));
8206     } else {
8207         prepare_SV_for_RV(rv);
8208     }
8209
8210     SvOK_off(rv);
8211     SvRV_set(rv, sv);
8212     SvROK_on(rv);
8213
8214     if (classname) {
8215         HV* const stash = gv_stashpv(classname, GV_ADD);
8216         (void)sv_bless(rv, stash);
8217     }
8218     return sv;
8219 }
8220
8221 /*
8222 =for apidoc sv_setref_pv
8223
8224 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
8225 argument will be upgraded to an RV.  That RV will be modified to point to
8226 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8227 into the SV.  The C<classname> argument indicates the package for the
8228 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8229 will have a reference count of 1, and the RV will be returned.
8230
8231 Do not use with other Perl types such as HV, AV, SV, CV, because those
8232 objects will become corrupted by the pointer copy process.
8233
8234 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8235
8236 =cut
8237 */
8238
8239 SV*
8240 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
8241 {
8242     dVAR;
8243
8244     PERL_ARGS_ASSERT_SV_SETREF_PV;
8245
8246     if (!pv) {
8247         sv_setsv(rv, &PL_sv_undef);
8248         SvSETMAGIC(rv);
8249     }
8250     else
8251         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8252     return rv;
8253 }
8254
8255 /*
8256 =for apidoc sv_setref_iv
8257
8258 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
8259 argument will be upgraded to an RV.  That RV will be modified to point to
8260 the new SV.  The C<classname> argument indicates the package for the
8261 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8262 will have a reference count of 1, and the RV will be returned.
8263
8264 =cut
8265 */
8266
8267 SV*
8268 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
8269 {
8270     PERL_ARGS_ASSERT_SV_SETREF_IV;
8271
8272     sv_setiv(newSVrv(rv,classname), iv);
8273     return rv;
8274 }
8275
8276 /*
8277 =for apidoc sv_setref_uv
8278
8279 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
8280 argument will be upgraded to an RV.  That RV will be modified to point to
8281 the new SV.  The C<classname> argument indicates the package for the
8282 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8283 will have a reference count of 1, and the RV will be returned.
8284
8285 =cut
8286 */
8287
8288 SV*
8289 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
8290 {
8291     PERL_ARGS_ASSERT_SV_SETREF_UV;
8292
8293     sv_setuv(newSVrv(rv,classname), uv);
8294     return rv;
8295 }
8296
8297 /*
8298 =for apidoc sv_setref_nv
8299
8300 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
8301 argument will be upgraded to an RV.  That RV will be modified to point to
8302 the new SV.  The C<classname> argument indicates the package for the
8303 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8304 will have a reference count of 1, and the RV will be returned.
8305
8306 =cut
8307 */
8308
8309 SV*
8310 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
8311 {
8312     PERL_ARGS_ASSERT_SV_SETREF_NV;
8313
8314     sv_setnv(newSVrv(rv,classname), nv);
8315     return rv;
8316 }
8317
8318 /*
8319 =for apidoc sv_setref_pvn
8320
8321 Copies a string into a new SV, optionally blessing the SV.  The length of the
8322 string must be specified with C<n>.  The C<rv> argument will be upgraded to
8323 an RV.  That RV will be modified to point to the new SV.  The C<classname>
8324 argument indicates the package for the blessing.  Set C<classname> to
8325 C<NULL> to avoid the blessing.  The new SV will have a reference count
8326 of 1, and the RV will be returned.
8327
8328 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8329
8330 =cut
8331 */
8332
8333 SV*
8334 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
8335 {
8336     PERL_ARGS_ASSERT_SV_SETREF_PVN;
8337
8338     sv_setpvn(newSVrv(rv,classname), pv, n);
8339     return rv;
8340 }
8341
8342 /*
8343 =for apidoc sv_bless
8344
8345 Blesses an SV into a specified package.  The SV must be an RV.  The package
8346 must be designated by its stash (see C<gv_stashpv()>).  The reference count
8347 of the SV is unaffected.
8348
8349 =cut
8350 */
8351
8352 SV*
8353 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
8354 {
8355     dVAR;
8356     SV *tmpRef;
8357
8358     PERL_ARGS_ASSERT_SV_BLESS;
8359
8360     if (!SvROK(sv))
8361         Perl_croak(aTHX_ "Can't bless non-reference value");
8362     tmpRef = SvRV(sv);
8363     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8364         if (SvIsCOW(tmpRef))
8365             sv_force_normal_flags(tmpRef, 0);
8366         if (SvREADONLY(tmpRef))
8367             Perl_croak(aTHX_ PL_no_modify);
8368         if (SvOBJECT(tmpRef)) {
8369             if (SvTYPE(tmpRef) != SVt_PVIO)
8370                 --PL_sv_objcount;
8371             SvREFCNT_dec(SvSTASH(tmpRef));
8372         }
8373     }
8374     SvOBJECT_on(tmpRef);
8375     if (SvTYPE(tmpRef) != SVt_PVIO)
8376         ++PL_sv_objcount;
8377     SvUPGRADE(tmpRef, SVt_PVMG);
8378     SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc_simple(stash));
8379
8380     if (Gv_AMG(stash))
8381         SvAMAGIC_on(sv);
8382     else
8383         (void)SvAMAGIC_off(sv);
8384
8385     if(SvSMAGICAL(tmpRef))
8386         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8387             mg_set(tmpRef);
8388
8389
8390
8391     return sv;
8392 }
8393
8394 /* Downgrades a PVGV to a PVMG.
8395  */
8396
8397 STATIC void
8398 S_sv_unglob(pTHX_ SV *sv)
8399 {
8400     dVAR;
8401     void *xpvmg;
8402     HV *stash;
8403     SV * const temp = sv_newmortal();
8404
8405     PERL_ARGS_ASSERT_SV_UNGLOB;
8406
8407     assert(SvTYPE(sv) == SVt_PVGV);
8408     SvFAKE_off(sv);
8409     gv_efullname3(temp, (GV *) sv, "*");
8410
8411     if (GvGP(sv)) {
8412         if(GvCVu((GV*)sv) && (stash = GvSTASH((GV*)sv)) && HvNAME_get(stash))
8413             mro_method_changed_in(stash);
8414         gp_free((GV*)sv);
8415     }
8416     if (GvSTASH(sv)) {
8417         sv_del_backref((SV*)GvSTASH(sv), sv);
8418         GvSTASH(sv) = NULL;
8419     }
8420     GvMULTI_off(sv);
8421     if (GvNAME_HEK(sv)) {
8422         unshare_hek(GvNAME_HEK(sv));
8423     }
8424     isGV_with_GP_off(sv);
8425
8426     /* need to keep SvANY(sv) in the right arena */
8427     xpvmg = new_XPVMG();
8428     StructCopy(SvANY(sv), xpvmg, XPVMG);
8429     del_XPVGV(SvANY(sv));
8430     SvANY(sv) = xpvmg;
8431
8432     SvFLAGS(sv) &= ~SVTYPEMASK;
8433     SvFLAGS(sv) |= SVt_PVMG;
8434
8435     /* Intentionally not calling any local SET magic, as this isn't so much a
8436        set operation as merely an internal storage change.  */
8437     sv_setsv_flags(sv, temp, 0);
8438 }
8439
8440 /*
8441 =for apidoc sv_unref_flags
8442
8443 Unsets the RV status of the SV, and decrements the reference count of
8444 whatever was being referenced by the RV.  This can almost be thought of
8445 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
8446 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8447 (otherwise the decrementing is conditional on the reference count being
8448 different from one or the reference being a readonly SV).
8449 See C<SvROK_off>.
8450
8451 =cut
8452 */
8453
8454 void
8455 Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
8456 {
8457     SV* const target = SvRV(ref);
8458
8459     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8460
8461     if (SvWEAKREF(ref)) {
8462         sv_del_backref(target, ref);
8463         SvWEAKREF_off(ref);
8464         SvRV_set(ref, NULL);
8465         return;
8466     }
8467     SvRV_set(ref, NULL);
8468     SvROK_off(ref);
8469     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8470        assigned to as BEGIN {$a = \"Foo"} will fail.  */
8471     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8472         SvREFCNT_dec(target);
8473     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8474         sv_2mortal(target);     /* Schedule for freeing later */
8475 }
8476
8477 /*
8478 =for apidoc sv_untaint
8479
8480 Untaint an SV. Use C<SvTAINTED_off> instead.
8481 =cut
8482 */
8483
8484 void
8485 Perl_sv_untaint(pTHX_ SV *sv)
8486 {
8487     PERL_ARGS_ASSERT_SV_UNTAINT;
8488
8489     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8490         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8491         if (mg)
8492             mg->mg_len &= ~1;
8493     }
8494 }
8495
8496 /*
8497 =for apidoc sv_tainted
8498
8499 Test an SV for taintedness. Use C<SvTAINTED> instead.
8500 =cut
8501 */
8502
8503 bool
8504 Perl_sv_tainted(pTHX_ SV *sv)
8505 {
8506     PERL_ARGS_ASSERT_SV_TAINTED;
8507
8508     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8509         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8510         if (mg && (mg->mg_len & 1) )
8511             return TRUE;
8512     }
8513     return FALSE;
8514 }
8515
8516 /*
8517 =for apidoc sv_setpviv
8518
8519 Copies an integer into the given SV, also updating its string value.
8520 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
8521
8522 =cut
8523 */
8524
8525 void
8526 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
8527 {
8528     char buf[TYPE_CHARS(UV)];
8529     char *ebuf;
8530     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8531
8532     PERL_ARGS_ASSERT_SV_SETPVIV;
8533
8534     sv_setpvn(sv, ptr, ebuf - ptr);
8535 }
8536
8537 /*
8538 =for apidoc sv_setpviv_mg
8539
8540 Like C<sv_setpviv>, but also handles 'set' magic.
8541
8542 =cut
8543 */
8544
8545 void
8546 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
8547 {
8548     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
8549
8550     sv_setpviv(sv, iv);
8551     SvSETMAGIC(sv);
8552 }
8553
8554 #if defined(PERL_IMPLICIT_CONTEXT)
8555
8556 /* pTHX_ magic can't cope with varargs, so this is a no-context
8557  * version of the main function, (which may itself be aliased to us).
8558  * Don't access this version directly.
8559  */
8560
8561 void
8562 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
8563 {
8564     dTHX;
8565     va_list args;
8566
8567     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
8568
8569     va_start(args, pat);
8570     sv_vsetpvf(sv, pat, &args);
8571     va_end(args);
8572 }
8573
8574 /* pTHX_ magic can't cope with varargs, so this is a no-context
8575  * version of the main function, (which may itself be aliased to us).
8576  * Don't access this version directly.
8577  */
8578
8579 void
8580 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
8581 {
8582     dTHX;
8583     va_list args;
8584
8585     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
8586
8587     va_start(args, pat);
8588     sv_vsetpvf_mg(sv, pat, &args);
8589     va_end(args);
8590 }
8591 #endif
8592
8593 /*
8594 =for apidoc sv_setpvf
8595
8596 Works like C<sv_catpvf> but copies the text into the SV instead of
8597 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
8598
8599 =cut
8600 */
8601
8602 void
8603 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
8604 {
8605     va_list args;
8606
8607     PERL_ARGS_ASSERT_SV_SETPVF;
8608
8609     va_start(args, pat);
8610     sv_vsetpvf(sv, pat, &args);
8611     va_end(args);
8612 }
8613
8614 /*
8615 =for apidoc sv_vsetpvf
8616
8617 Works like C<sv_vcatpvf> but copies the text into the SV instead of
8618 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
8619
8620 Usually used via its frontend C<sv_setpvf>.
8621
8622 =cut
8623 */
8624
8625 void
8626 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8627 {
8628     PERL_ARGS_ASSERT_SV_VSETPVF;
8629
8630     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8631 }
8632
8633 /*
8634 =for apidoc sv_setpvf_mg
8635
8636 Like C<sv_setpvf>, but also handles 'set' magic.
8637
8638 =cut
8639 */
8640
8641 void
8642 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8643 {
8644     va_list args;
8645
8646     PERL_ARGS_ASSERT_SV_SETPVF_MG;
8647
8648     va_start(args, pat);
8649     sv_vsetpvf_mg(sv, pat, &args);
8650     va_end(args);
8651 }
8652
8653 /*
8654 =for apidoc sv_vsetpvf_mg
8655
8656 Like C<sv_vsetpvf>, but also handles 'set' magic.
8657
8658 Usually used via its frontend C<sv_setpvf_mg>.
8659
8660 =cut
8661 */
8662
8663 void
8664 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8665 {
8666     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
8667
8668     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8669     SvSETMAGIC(sv);
8670 }
8671
8672 #if defined(PERL_IMPLICIT_CONTEXT)
8673
8674 /* pTHX_ magic can't cope with varargs, so this is a no-context
8675  * version of the main function, (which may itself be aliased to us).
8676  * Don't access this version directly.
8677  */
8678
8679 void
8680 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
8681 {
8682     dTHX;
8683     va_list args;
8684
8685     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
8686
8687     va_start(args, pat);
8688     sv_vcatpvf(sv, pat, &args);
8689     va_end(args);
8690 }
8691
8692 /* pTHX_ magic can't cope with varargs, so this is a no-context
8693  * version of the main function, (which may itself be aliased to us).
8694  * Don't access this version directly.
8695  */
8696
8697 void
8698 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
8699 {
8700     dTHX;
8701     va_list args;
8702
8703     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
8704
8705     va_start(args, pat);
8706     sv_vcatpvf_mg(sv, pat, &args);
8707     va_end(args);
8708 }
8709 #endif
8710
8711 /*
8712 =for apidoc sv_catpvf
8713
8714 Processes its arguments like C<sprintf> and appends the formatted
8715 output to an SV.  If the appended data contains "wide" characters
8716 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
8717 and characters >255 formatted with %c), the original SV might get
8718 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
8719 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
8720 valid UTF-8; if the original SV was bytes, the pattern should be too.
8721
8722 =cut */
8723
8724 void
8725 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
8726 {
8727     va_list args;
8728
8729     PERL_ARGS_ASSERT_SV_CATPVF;
8730
8731     va_start(args, pat);
8732     sv_vcatpvf(sv, pat, &args);
8733     va_end(args);
8734 }
8735
8736 /*
8737 =for apidoc sv_vcatpvf
8738
8739 Processes its arguments like C<vsprintf> and appends the formatted output
8740 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
8741
8742 Usually used via its frontend C<sv_catpvf>.
8743
8744 =cut
8745 */
8746
8747 void
8748 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
8749 {
8750     PERL_ARGS_ASSERT_SV_VCATPVF;
8751
8752     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8753 }
8754
8755 /*
8756 =for apidoc sv_catpvf_mg
8757
8758 Like C<sv_catpvf>, but also handles 'set' magic.
8759
8760 =cut
8761 */
8762
8763 void
8764 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
8765 {
8766     va_list args;
8767
8768     PERL_ARGS_ASSERT_SV_CATPVF_MG;
8769
8770     va_start(args, pat);
8771     sv_vcatpvf_mg(sv, pat, &args);
8772     va_end(args);
8773 }
8774
8775 /*
8776 =for apidoc sv_vcatpvf_mg
8777
8778 Like C<sv_vcatpvf>, but also handles 'set' magic.
8779
8780 Usually used via its frontend C<sv_catpvf_mg>.
8781
8782 =cut
8783 */
8784
8785 void
8786 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
8787 {
8788     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
8789
8790     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
8791     SvSETMAGIC(sv);
8792 }
8793
8794 /*
8795 =for apidoc sv_vsetpvfn
8796
8797 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
8798 appending it.
8799
8800 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
8801
8802 =cut
8803 */
8804
8805 void
8806 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8807 {
8808     PERL_ARGS_ASSERT_SV_VSETPVFN;
8809
8810     sv_setpvn(sv, "", 0);
8811     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
8812 }
8813
8814 STATIC I32
8815 S_expect_number(pTHX_ char** pattern)
8816 {
8817     dVAR;
8818     I32 var = 0;
8819
8820     PERL_ARGS_ASSERT_EXPECT_NUMBER;
8821
8822     switch (**pattern) {
8823     case '1': case '2': case '3':
8824     case '4': case '5': case '6':
8825     case '7': case '8': case '9':
8826         var = *(*pattern)++ - '0';
8827         while (isDIGIT(**pattern)) {
8828             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
8829             if (tmp < var)
8830                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
8831             var = tmp;
8832         }
8833     }
8834     return var;
8835 }
8836
8837 STATIC char *
8838 S_F0convert(NV nv, char *endbuf, STRLEN *len)
8839 {
8840     const int neg = nv < 0;
8841     UV uv;
8842
8843     PERL_ARGS_ASSERT_F0CONVERT;
8844
8845     if (neg)
8846         nv = -nv;
8847     if (nv < UV_MAX) {
8848         char *p = endbuf;
8849         nv += 0.5;
8850         uv = (UV)nv;
8851         if (uv & 1 && uv == nv)
8852             uv--;                       /* Round to even */
8853         do {
8854             const unsigned dig = uv % 10;
8855             *--p = '0' + dig;
8856         } while (uv /= 10);
8857         if (neg)
8858             *--p = '-';
8859         *len = endbuf - p;
8860         return p;
8861     }
8862     return NULL;
8863 }
8864
8865
8866 /*
8867 =for apidoc sv_vcatpvfn
8868
8869 Processes its arguments like C<vsprintf> and appends the formatted output
8870 to an SV.  Uses an array of SVs if the C style variable argument list is
8871 missing (NULL).  When running with taint checks enabled, indicates via
8872 C<maybe_tainted> if results are untrustworthy (often due to the use of
8873 locales).
8874
8875 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
8876
8877 =cut
8878 */
8879
8880
8881 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
8882                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
8883                         vec_utf8 = DO_UTF8(vecsv);
8884
8885 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
8886
8887 void
8888 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
8889 {
8890     dVAR;
8891     char *p;
8892     char *q;
8893     const char *patend;
8894     STRLEN origlen;
8895     I32 svix = 0;
8896     static const char nullstr[] = "(null)";
8897     SV *argsv = NULL;
8898     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
8899     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
8900     SV *nsv = NULL;
8901     /* Times 4: a decimal digit takes more than 3 binary digits.
8902      * NV_DIG: mantissa takes than many decimal digits.
8903      * Plus 32: Playing safe. */
8904     char ebuf[IV_DIG * 4 + NV_DIG + 32];
8905     /* large enough for "%#.#f" --chip */
8906     /* what about long double NVs? --jhi */
8907
8908     PERL_ARGS_ASSERT_SV_VCATPVFN;
8909     PERL_UNUSED_ARG(maybe_tainted);
8910
8911     /* no matter what, this is a string now */
8912     (void)SvPV_force(sv, origlen);
8913
8914     /* special-case "", "%s", and "%-p" (SVf - see below) */
8915     if (patlen == 0)
8916         return;
8917     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
8918         if (args) {
8919             const char * const s = va_arg(*args, char*);
8920             sv_catpv(sv, s ? s : nullstr);
8921         }
8922         else if (svix < svmax) {
8923             sv_catsv(sv, *svargs);
8924         }
8925         return;
8926     }
8927     if (args && patlen == 3 && pat[0] == '%' &&
8928                 pat[1] == '-' && pat[2] == 'p') {
8929         argsv = (SV*)va_arg(*args, void*);
8930         sv_catsv(sv, argsv);
8931         return;
8932     }
8933
8934 #ifndef USE_LONG_DOUBLE
8935     /* special-case "%.<number>[gf]" */
8936     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8937          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8938         unsigned digits = 0;
8939         const char *pp;
8940
8941         pp = pat + 2;
8942         while (*pp >= '0' && *pp <= '9')
8943             digits = 10 * digits + (*pp++ - '0');
8944         if (pp - pat == (int)patlen - 1) {
8945             NV nv;
8946
8947             if (svix < svmax)
8948                 nv = SvNV(*svargs);
8949             else
8950                 return;
8951             if (*pp == 'g') {
8952                 /* Add check for digits != 0 because it seems that some
8953                    gconverts are buggy in this case, and we don't yet have
8954                    a Configure test for this.  */
8955                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8956                      /* 0, point, slack */
8957                     Gconvert(nv, (int)digits, 0, ebuf);
8958                     sv_catpv(sv, ebuf);
8959                     if (*ebuf)  /* May return an empty string for digits==0 */
8960                         return;
8961                 }
8962             } else if (!digits) {
8963                 STRLEN l;
8964
8965                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8966                     sv_catpvn(sv, p, l);
8967                     return;
8968                 }
8969             }
8970         }
8971     }
8972 #endif /* !USE_LONG_DOUBLE */
8973
8974     if (!args && svix < svmax && DO_UTF8(*svargs))
8975         has_utf8 = TRUE;
8976
8977     patend = (char*)pat + patlen;
8978     for (p = (char*)pat; p < patend; p = q) {
8979         bool alt = FALSE;
8980         bool left = FALSE;
8981         bool vectorize = FALSE;
8982         bool vectorarg = FALSE;
8983         bool vec_utf8 = FALSE;
8984         char fill = ' ';
8985         char plus = 0;
8986         char intsize = 0;
8987         STRLEN width = 0;
8988         STRLEN zeros = 0;
8989         bool has_precis = FALSE;
8990         STRLEN precis = 0;
8991         const I32 osvix = svix;
8992         bool is_utf8 = FALSE;  /* is this item utf8?   */
8993 #ifdef HAS_LDBL_SPRINTF_BUG
8994         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8995            with sfio - Allen <allens@cpan.org> */
8996         bool fix_ldbl_sprintf_bug = FALSE;
8997 #endif
8998
8999         char esignbuf[4];
9000         U8 utf8buf[UTF8_MAXBYTES+1];
9001         STRLEN esignlen = 0;
9002
9003         const char *eptr = NULL;
9004         STRLEN elen = 0;
9005         SV *vecsv = NULL;
9006         const U8 *vecstr = NULL;
9007         STRLEN veclen = 0;
9008         char c = 0;
9009         int i;
9010         unsigned base = 0;
9011         IV iv = 0;
9012         UV uv = 0;
9013         /* we need a long double target in case HAS_LONG_DOUBLE but
9014            not USE_LONG_DOUBLE
9015         */
9016 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9017         long double nv;
9018 #else
9019         NV nv;
9020 #endif
9021         STRLEN have;
9022         STRLEN need;
9023         STRLEN gap;
9024         const char *dotstr = ".";
9025         STRLEN dotstrlen = 1;
9026         I32 efix = 0; /* explicit format parameter index */
9027         I32 ewix = 0; /* explicit width index */
9028         I32 epix = 0; /* explicit precision index */
9029         I32 evix = 0; /* explicit vector index */
9030         bool asterisk = FALSE;
9031
9032         /* echo everything up to the next format specification */
9033         for (q = p; q < patend && *q != '%'; ++q) ;
9034         if (q > p) {
9035             if (has_utf8 && !pat_utf8)
9036                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9037             else
9038                 sv_catpvn(sv, p, q - p);
9039             p = q;
9040         }
9041         if (q++ >= patend)
9042             break;
9043
9044 /*
9045     We allow format specification elements in this order:
9046         \d+\$              explicit format parameter index
9047         [-+ 0#]+           flags
9048         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
9049         0                  flag (as above): repeated to allow "v02"     
9050         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
9051         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9052         [hlqLV]            size
9053     [%bcdefginopsuxDFOUX] format (mandatory)
9054 */
9055
9056         if (args) {
9057 /*  
9058         As of perl5.9.3, printf format checking is on by default.
9059         Internally, perl uses %p formats to provide an escape to
9060         some extended formatting.  This block deals with those
9061         extensions: if it does not match, (char*)q is reset and
9062         the normal format processing code is used.
9063
9064         Currently defined extensions are:
9065                 %p              include pointer address (standard)      
9066                 %-p     (SVf)   include an SV (previously %_)
9067                 %-<num>p        include an SV with precision <num>      
9068                 %<num>p         reserved for future extensions
9069
9070         Robin Barker 2005-07-14
9071
9072                 %1p     (VDf)   removed.  RMB 2007-10-19
9073 */
9074             char* r = q; 
9075             bool sv = FALSE;    
9076             STRLEN n = 0;
9077             if (*q == '-')
9078                 sv = *q++;
9079             n = expect_number(&q);
9080             if (*q++ == 'p') {
9081                 if (sv) {                       /* SVf */
9082                     if (n) {
9083                         precis = n;
9084                         has_precis = TRUE;
9085                     }
9086                     argsv = (SV*)va_arg(*args, void*);
9087                     eptr = SvPV_const(argsv, elen);
9088                     if (DO_UTF8(argsv))
9089                         is_utf8 = TRUE;
9090                     goto string;
9091                 }
9092                 else if (n) {
9093                     if (ckWARN_d(WARN_INTERNAL))
9094                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9095                         "internal %%<num>p might conflict with future printf extensions");
9096                 }
9097             }
9098             q = r; 
9099         }
9100
9101         if ( (width = expect_number(&q)) ) {
9102             if (*q == '$') {
9103                 ++q;
9104                 efix = width;
9105             } else {
9106                 goto gotwidth;
9107             }
9108         }
9109
9110         /* FLAGS */
9111
9112         while (*q) {
9113             switch (*q) {
9114             case ' ':
9115             case '+':
9116                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9117                     q++;
9118                 else
9119                     plus = *q++;
9120                 continue;
9121
9122             case '-':
9123                 left = TRUE;
9124                 q++;
9125                 continue;
9126
9127             case '0':
9128                 fill = *q++;
9129                 continue;
9130
9131             case '#':
9132                 alt = TRUE;
9133                 q++;
9134                 continue;
9135
9136             default:
9137                 break;
9138             }
9139             break;
9140         }
9141
9142       tryasterisk:
9143         if (*q == '*') {
9144             q++;
9145             if ( (ewix = expect_number(&q)) )
9146                 if (*q++ != '$')
9147                     goto unknown;
9148             asterisk = TRUE;
9149         }
9150         if (*q == 'v') {
9151             q++;
9152             if (vectorize)
9153                 goto unknown;
9154             if ((vectorarg = asterisk)) {
9155                 evix = ewix;
9156                 ewix = 0;
9157                 asterisk = FALSE;
9158             }
9159             vectorize = TRUE;
9160             goto tryasterisk;
9161         }
9162
9163         if (!asterisk)
9164         {
9165             if( *q == '0' )
9166                 fill = *q++;
9167             width = expect_number(&q);
9168         }
9169
9170         if (vectorize) {
9171             if (vectorarg) {
9172                 if (args)
9173                     vecsv = va_arg(*args, SV*);
9174                 else if (evix) {
9175                     vecsv = (evix > 0 && evix <= svmax)
9176                         ? svargs[evix-1] : &PL_sv_undef;
9177                 } else {
9178                     vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
9179                 }
9180                 dotstr = SvPV_const(vecsv, dotstrlen);
9181                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9182                    bad with tied or overloaded values that return UTF8.  */
9183                 if (DO_UTF8(vecsv))
9184                     is_utf8 = TRUE;
9185                 else if (has_utf8) {
9186                     vecsv = sv_mortalcopy(vecsv);
9187                     sv_utf8_upgrade(vecsv);
9188                     dotstr = SvPV_const(vecsv, dotstrlen);
9189                     is_utf8 = TRUE;
9190                 }                   
9191             }
9192             if (args) {
9193                 VECTORIZE_ARGS
9194             }
9195             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
9196                 vecsv = svargs[efix ? efix-1 : svix++];
9197                 vecstr = (U8*)SvPV_const(vecsv,veclen);
9198                 vec_utf8 = DO_UTF8(vecsv);
9199
9200                 /* if this is a version object, we need to convert
9201                  * back into v-string notation and then let the
9202                  * vectorize happen normally
9203                  */
9204                 if (sv_derived_from(vecsv, "version")) {
9205                     char *version = savesvpv(vecsv);
9206                     if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
9207                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9208                         "vector argument not supported with alpha versions");
9209                         goto unknown;
9210                     }
9211                     vecsv = sv_newmortal();
9212                     scan_vstring(version, version + veclen, vecsv);
9213                     vecstr = (U8*)SvPV_const(vecsv, veclen);
9214                     vec_utf8 = DO_UTF8(vecsv);
9215                     Safefree(version);
9216                 }
9217             }
9218             else {
9219                 vecstr = (U8*)"";
9220                 veclen = 0;
9221             }
9222         }
9223
9224         if (asterisk) {
9225             if (args)
9226                 i = va_arg(*args, int);
9227             else
9228                 i = (ewix ? ewix <= svmax : svix < svmax) ?
9229                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9230             left |= (i < 0);
9231             width = (i < 0) ? -i : i;
9232         }
9233       gotwidth:
9234
9235         /* PRECISION */
9236
9237         if (*q == '.') {
9238             q++;
9239             if (*q == '*') {
9240                 q++;
9241                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
9242                     goto unknown;
9243                 /* XXX: todo, support specified precision parameter */
9244                 if (epix)
9245                     goto unknown;
9246                 if (args)
9247                     i = va_arg(*args, int);
9248                 else
9249                     i = (ewix ? ewix <= svmax : svix < svmax)
9250                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9251                 precis = i;
9252                 has_precis = !(i < 0);
9253             }
9254             else {
9255                 precis = 0;
9256                 while (isDIGIT(*q))
9257                     precis = precis * 10 + (*q++ - '0');
9258                 has_precis = TRUE;
9259             }
9260         }
9261
9262         /* SIZE */
9263
9264         switch (*q) {
9265 #ifdef WIN32
9266         case 'I':                       /* Ix, I32x, and I64x */
9267 #  ifdef WIN64
9268             if (q[1] == '6' && q[2] == '4') {
9269                 q += 3;
9270                 intsize = 'q';
9271                 break;
9272             }
9273 #  endif
9274             if (q[1] == '3' && q[2] == '2') {
9275                 q += 3;
9276                 break;
9277             }
9278 #  ifdef WIN64
9279             intsize = 'q';
9280 #  endif
9281             q++;
9282             break;
9283 #endif
9284 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9285         case 'L':                       /* Ld */
9286             /*FALLTHROUGH*/
9287 #ifdef HAS_QUAD
9288         case 'q':                       /* qd */
9289 #endif
9290             intsize = 'q';
9291             q++;
9292             break;
9293 #endif
9294         case 'l':
9295 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9296             if (*(q + 1) == 'l') {      /* lld, llf */
9297                 intsize = 'q';
9298                 q += 2;
9299                 break;
9300              }
9301 #endif
9302             /*FALLTHROUGH*/
9303         case 'h':
9304             /*FALLTHROUGH*/
9305         case 'V':
9306             intsize = *q++;
9307             break;
9308         }
9309
9310         /* CONVERSION */
9311
9312         if (*q == '%') {
9313             eptr = q++;
9314             elen = 1;
9315             if (vectorize) {
9316                 c = '%';
9317                 goto unknown;
9318             }
9319             goto string;
9320         }
9321
9322         if (!vectorize && !args) {
9323             if (efix) {
9324                 const I32 i = efix-1;
9325                 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
9326             } else {
9327                 argsv = (svix >= 0 && svix < svmax)
9328                     ? svargs[svix++] : &PL_sv_undef;
9329             }
9330         }
9331
9332         switch (c = *q++) {
9333
9334             /* STRINGS */
9335
9336         case 'c':
9337             if (vectorize)
9338                 goto unknown;
9339             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
9340             if ((uv > 255 ||
9341                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9342                 && !IN_BYTES) {
9343                 eptr = (char*)utf8buf;
9344                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9345                 is_utf8 = TRUE;
9346             }
9347             else {
9348                 c = (char)uv;
9349                 eptr = &c;
9350                 elen = 1;
9351             }
9352             goto string;
9353
9354         case 's':
9355             if (vectorize)
9356                 goto unknown;
9357             if (args) {
9358                 eptr = va_arg(*args, char*);
9359                 if (eptr)
9360 #ifdef MACOS_TRADITIONAL
9361                   /* On MacOS, %#s format is used for Pascal strings */
9362                   if (alt)
9363                     elen = *eptr++;
9364                   else
9365 #endif
9366                     elen = strlen(eptr);
9367                 else {
9368                     eptr = (char *)nullstr;
9369                     elen = sizeof nullstr - 1;
9370                 }
9371             }
9372             else {
9373                 eptr = SvPV_const(argsv, elen);
9374                 if (DO_UTF8(argsv)) {
9375                     I32 old_precis = precis;
9376                     if (has_precis && precis < elen) {
9377                         I32 p = precis;
9378                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9379                         precis = p;
9380                     }
9381                     if (width) { /* fudge width (can't fudge elen) */
9382                         if (has_precis && precis < elen)
9383                             width += precis - old_precis;
9384                         else
9385                             width += elen - sv_len_utf8(argsv);
9386                     }
9387                     is_utf8 = TRUE;
9388                 }
9389             }
9390
9391         string:
9392             if (has_precis && elen > precis)
9393                 elen = precis;
9394             break;
9395
9396             /* INTEGERS */
9397
9398         case 'p':
9399             if (alt || vectorize)
9400                 goto unknown;
9401             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9402             base = 16;
9403             goto integer;
9404
9405         case 'D':
9406 #ifdef IV_IS_QUAD
9407             intsize = 'q';
9408 #else
9409             intsize = 'l';
9410 #endif
9411             /*FALLTHROUGH*/
9412         case 'd':
9413         case 'i':
9414 #if vdNUMBER
9415         format_vd:
9416 #endif
9417             if (vectorize) {
9418                 STRLEN ulen;
9419                 if (!veclen)
9420                     continue;
9421                 if (vec_utf8)
9422                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9423                                         UTF8_ALLOW_ANYUV);
9424                 else {
9425                     uv = *vecstr;
9426                     ulen = 1;
9427                 }
9428                 vecstr += ulen;
9429                 veclen -= ulen;
9430                 if (plus)
9431                      esignbuf[esignlen++] = plus;
9432             }
9433             else if (args) {
9434                 switch (intsize) {
9435                 case 'h':       iv = (short)va_arg(*args, int); break;
9436                 case 'l':       iv = va_arg(*args, long); break;
9437                 case 'V':       iv = va_arg(*args, IV); break;
9438                 default:        iv = va_arg(*args, int); break;
9439 #ifdef HAS_QUAD
9440                 case 'q':       iv = va_arg(*args, Quad_t); break;
9441 #endif
9442                 }
9443             }
9444             else {
9445                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
9446                 switch (intsize) {
9447                 case 'h':       iv = (short)tiv; break;
9448                 case 'l':       iv = (long)tiv; break;
9449                 case 'V':
9450                 default:        iv = tiv; break;
9451 #ifdef HAS_QUAD
9452                 case 'q':       iv = (Quad_t)tiv; break;
9453 #endif
9454                 }
9455             }
9456             if ( !vectorize )   /* we already set uv above */
9457             {
9458                 if (iv >= 0) {
9459                     uv = iv;
9460                     if (plus)
9461                         esignbuf[esignlen++] = plus;
9462                 }
9463                 else {
9464                     uv = -iv;
9465                     esignbuf[esignlen++] = '-';
9466                 }
9467             }
9468             base = 10;
9469             goto integer;
9470
9471         case 'U':
9472 #ifdef IV_IS_QUAD
9473             intsize = 'q';
9474 #else
9475             intsize = 'l';
9476 #endif
9477             /*FALLTHROUGH*/
9478         case 'u':
9479             base = 10;
9480             goto uns_integer;
9481
9482         case 'B':
9483         case 'b':
9484             base = 2;
9485             goto uns_integer;
9486
9487         case 'O':
9488 #ifdef IV_IS_QUAD
9489             intsize = 'q';
9490 #else
9491             intsize = 'l';
9492 #endif
9493             /*FALLTHROUGH*/
9494         case 'o':
9495             base = 8;
9496             goto uns_integer;
9497
9498         case 'X':
9499         case 'x':
9500             base = 16;
9501
9502         uns_integer:
9503             if (vectorize) {
9504                 STRLEN ulen;
9505         vector:
9506                 if (!veclen)
9507                     continue;
9508                 if (vec_utf8)
9509                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9510                                         UTF8_ALLOW_ANYUV);
9511                 else {
9512                     uv = *vecstr;
9513                     ulen = 1;
9514                 }
9515                 vecstr += ulen;
9516                 veclen -= ulen;
9517             }
9518             else if (args) {
9519                 switch (intsize) {
9520                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
9521                 case 'l':  uv = va_arg(*args, unsigned long); break;
9522                 case 'V':  uv = va_arg(*args, UV); break;
9523                 default:   uv = va_arg(*args, unsigned); break;
9524 #ifdef HAS_QUAD
9525                 case 'q':  uv = va_arg(*args, Uquad_t); break;
9526 #endif
9527                 }
9528             }
9529             else {
9530                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
9531                 switch (intsize) {
9532                 case 'h':       uv = (unsigned short)tuv; break;
9533                 case 'l':       uv = (unsigned long)tuv; break;
9534                 case 'V':
9535                 default:        uv = tuv; break;
9536 #ifdef HAS_QUAD
9537                 case 'q':       uv = (Uquad_t)tuv; break;
9538 #endif
9539                 }
9540             }
9541
9542         integer:
9543             {
9544                 char *ptr = ebuf + sizeof ebuf;
9545                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
9546                 zeros = 0;
9547
9548                 switch (base) {
9549                     unsigned dig;
9550                 case 16:
9551                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
9552                     do {
9553                         dig = uv & 15;
9554                         *--ptr = p[dig];
9555                     } while (uv >>= 4);
9556                     if (tempalt) {
9557                         esignbuf[esignlen++] = '0';
9558                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
9559                     }
9560                     break;
9561                 case 8:
9562                     do {
9563                         dig = uv & 7;
9564                         *--ptr = '0' + dig;
9565                     } while (uv >>= 3);
9566                     if (alt && *ptr != '0')
9567                         *--ptr = '0';
9568                     break;
9569                 case 2:
9570                     do {
9571                         dig = uv & 1;
9572                         *--ptr = '0' + dig;
9573                     } while (uv >>= 1);
9574                     if (tempalt) {
9575                         esignbuf[esignlen++] = '0';
9576                         esignbuf[esignlen++] = c;
9577                     }
9578                     break;
9579                 default:                /* it had better be ten or less */
9580                     do {
9581                         dig = uv % base;
9582                         *--ptr = '0' + dig;
9583                     } while (uv /= base);
9584                     break;
9585                 }
9586                 elen = (ebuf + sizeof ebuf) - ptr;
9587                 eptr = ptr;
9588                 if (has_precis) {
9589                     if (precis > elen)
9590                         zeros = precis - elen;
9591                     else if (precis == 0 && elen == 1 && *eptr == '0'
9592                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
9593                         elen = 0;
9594
9595                 /* a precision nullifies the 0 flag. */
9596                     if (fill == '0')
9597                         fill = ' ';
9598                 }
9599             }
9600             break;
9601
9602             /* FLOATING POINT */
9603
9604         case 'F':
9605             c = 'f';            /* maybe %F isn't supported here */
9606             /*FALLTHROUGH*/
9607         case 'e': case 'E':
9608         case 'f':
9609         case 'g': case 'G':
9610             if (vectorize)
9611                 goto unknown;
9612
9613             /* This is evil, but floating point is even more evil */
9614
9615             /* for SV-style calling, we can only get NV
9616                for C-style calling, we assume %f is double;
9617                for simplicity we allow any of %Lf, %llf, %qf for long double
9618             */
9619             switch (intsize) {
9620             case 'V':
9621 #if defined(USE_LONG_DOUBLE)
9622                 intsize = 'q';
9623 #endif
9624                 break;
9625 /* [perl #20339] - we should accept and ignore %lf rather than die */
9626             case 'l':
9627                 /*FALLTHROUGH*/
9628             default:
9629 #if defined(USE_LONG_DOUBLE)
9630                 intsize = args ? 0 : 'q';
9631 #endif
9632                 break;
9633             case 'q':
9634 #if defined(HAS_LONG_DOUBLE)
9635                 break;
9636 #else
9637                 /*FALLTHROUGH*/
9638 #endif
9639             case 'h':
9640                 goto unknown;
9641             }
9642
9643             /* now we need (long double) if intsize == 'q', else (double) */
9644             nv = (args) ?
9645 #if LONG_DOUBLESIZE > DOUBLESIZE
9646                 intsize == 'q' ?
9647                     va_arg(*args, long double) :
9648                     va_arg(*args, double)
9649 #else
9650                     va_arg(*args, double)
9651 #endif
9652                 : SvNV(argsv);
9653
9654             need = 0;
9655             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
9656                else. frexp() has some unspecified behaviour for those three */
9657             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
9658                 i = PERL_INT_MIN;
9659                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
9660                    will cast our (long double) to (double) */
9661                 (void)Perl_frexp(nv, &i);
9662                 if (i == PERL_INT_MIN)
9663                     Perl_die(aTHX_ "panic: frexp");
9664                 if (i > 0)
9665                     need = BIT_DIGITS(i);
9666             }
9667             need += has_precis ? precis : 6; /* known default */
9668
9669             if (need < width)
9670                 need = width;
9671
9672 #ifdef HAS_LDBL_SPRINTF_BUG
9673             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9674                with sfio - Allen <allens@cpan.org> */
9675
9676 #  ifdef DBL_MAX
9677 #    define MY_DBL_MAX DBL_MAX
9678 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
9679 #    if DOUBLESIZE >= 8
9680 #      define MY_DBL_MAX 1.7976931348623157E+308L
9681 #    else
9682 #      define MY_DBL_MAX 3.40282347E+38L
9683 #    endif
9684 #  endif
9685
9686 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
9687 #    define MY_DBL_MAX_BUG 1L
9688 #  else
9689 #    define MY_DBL_MAX_BUG MY_DBL_MAX
9690 #  endif
9691
9692 #  ifdef DBL_MIN
9693 #    define MY_DBL_MIN DBL_MIN
9694 #  else  /* XXX guessing! -Allen */
9695 #    if DOUBLESIZE >= 8
9696 #      define MY_DBL_MIN 2.2250738585072014E-308L
9697 #    else
9698 #      define MY_DBL_MIN 1.17549435E-38L
9699 #    endif
9700 #  endif
9701
9702             if ((intsize == 'q') && (c == 'f') &&
9703                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
9704                 (need < DBL_DIG)) {
9705                 /* it's going to be short enough that
9706                  * long double precision is not needed */
9707
9708                 if ((nv <= 0L) && (nv >= -0L))
9709                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
9710                 else {
9711                     /* would use Perl_fp_class as a double-check but not
9712                      * functional on IRIX - see perl.h comments */
9713
9714                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
9715                         /* It's within the range that a double can represent */
9716 #if defined(DBL_MAX) && !defined(DBL_MIN)
9717                         if ((nv >= ((long double)1/DBL_MAX)) ||
9718                             (nv <= (-(long double)1/DBL_MAX)))
9719 #endif
9720                         fix_ldbl_sprintf_bug = TRUE;
9721                     }
9722                 }
9723                 if (fix_ldbl_sprintf_bug == TRUE) {
9724                     double temp;
9725
9726                     intsize = 0;
9727                     temp = (double)nv;
9728                     nv = (NV)temp;
9729                 }
9730             }
9731
9732 #  undef MY_DBL_MAX
9733 #  undef MY_DBL_MAX_BUG
9734 #  undef MY_DBL_MIN
9735
9736 #endif /* HAS_LDBL_SPRINTF_BUG */
9737
9738             need += 20; /* fudge factor */
9739             if (PL_efloatsize < need) {
9740                 Safefree(PL_efloatbuf);
9741                 PL_efloatsize = need + 20; /* more fudge */
9742                 Newx(PL_efloatbuf, PL_efloatsize, char);
9743                 PL_efloatbuf[0] = '\0';
9744             }
9745
9746             if ( !(width || left || plus || alt) && fill != '0'
9747                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
9748                 /* See earlier comment about buggy Gconvert when digits,
9749                    aka precis is 0  */
9750                 if ( c == 'g' && precis) {
9751                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
9752                     /* May return an empty string for digits==0 */
9753                     if (*PL_efloatbuf) {
9754                         elen = strlen(PL_efloatbuf);
9755                         goto float_converted;
9756                     }
9757                 } else if ( c == 'f' && !precis) {
9758                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
9759                         break;
9760                 }
9761             }
9762             {
9763                 char *ptr = ebuf + sizeof ebuf;
9764                 *--ptr = '\0';
9765                 *--ptr = c;
9766                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
9767 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
9768                 if (intsize == 'q') {
9769                     /* Copy the one or more characters in a long double
9770                      * format before the 'base' ([efgEFG]) character to
9771                      * the format string. */
9772                     static char const prifldbl[] = PERL_PRIfldbl;
9773                     char const *p = prifldbl + sizeof(prifldbl) - 3;
9774                     while (p >= prifldbl) { *--ptr = *p--; }
9775                 }
9776 #endif
9777                 if (has_precis) {
9778                     base = precis;
9779                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
9780                     *--ptr = '.';
9781                 }
9782                 if (width) {
9783                     base = width;
9784                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
9785                 }
9786                 if (fill == '0')
9787                     *--ptr = fill;
9788                 if (left)
9789                     *--ptr = '-';
9790                 if (plus)
9791                     *--ptr = plus;
9792                 if (alt)
9793                     *--ptr = '#';
9794                 *--ptr = '%';
9795
9796                 /* No taint.  Otherwise we are in the strange situation
9797                  * where printf() taints but print($float) doesn't.
9798                  * --jhi */
9799 #if defined(HAS_LONG_DOUBLE)
9800                 elen = ((intsize == 'q')
9801                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
9802                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
9803 #else
9804                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
9805 #endif
9806             }
9807         float_converted:
9808             eptr = PL_efloatbuf;
9809             break;
9810
9811             /* SPECIAL */
9812
9813         case 'n':
9814             if (vectorize)
9815                 goto unknown;
9816             i = SvCUR(sv) - origlen;
9817             if (args) {
9818                 switch (intsize) {
9819                 case 'h':       *(va_arg(*args, short*)) = i; break;
9820                 default:        *(va_arg(*args, int*)) = i; break;
9821                 case 'l':       *(va_arg(*args, long*)) = i; break;
9822                 case 'V':       *(va_arg(*args, IV*)) = i; break;
9823 #ifdef HAS_QUAD
9824                 case 'q':       *(va_arg(*args, Quad_t*)) = i; break;
9825 #endif
9826                 }
9827             }
9828             else
9829                 sv_setuv_mg(argsv, (UV)i);
9830             continue;   /* not "break" */
9831
9832             /* UNKNOWN */
9833
9834         default:
9835       unknown:
9836             if (!args
9837                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
9838                 && ckWARN(WARN_PRINTF))
9839             {
9840                 SV * const msg = sv_newmortal();
9841                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
9842                           (PL_op->op_type == OP_PRTF) ? "" : "s");
9843                 if (c) {
9844                     if (isPRINT(c))
9845                         Perl_sv_catpvf(aTHX_ msg,
9846                                        "\"%%%c\"", c & 0xFF);
9847                     else
9848                         Perl_sv_catpvf(aTHX_ msg,
9849                                        "\"%%\\%03"UVof"\"",
9850                                        (UV)c & 0xFF);
9851                 } else
9852                     sv_catpvs(msg, "end of string");
9853                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
9854             }
9855
9856             /* output mangled stuff ... */
9857             if (c == '\0')
9858                 --q;
9859             eptr = p;
9860             elen = q - p;
9861
9862             /* ... right here, because formatting flags should not apply */
9863             SvGROW(sv, SvCUR(sv) + elen + 1);
9864             p = SvEND(sv);
9865             Copy(eptr, p, elen, char);
9866             p += elen;
9867             *p = '\0';
9868             SvCUR_set(sv, p - SvPVX_const(sv));
9869             svix = osvix;
9870             continue;   /* not "break" */
9871         }
9872
9873         if (is_utf8 != has_utf8) {
9874             if (is_utf8) {
9875                 if (SvCUR(sv))
9876                     sv_utf8_upgrade(sv);
9877             }
9878             else {
9879                 const STRLEN old_elen = elen;
9880                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
9881                 sv_utf8_upgrade(nsv);
9882                 eptr = SvPVX_const(nsv);
9883                 elen = SvCUR(nsv);
9884
9885                 if (width) { /* fudge width (can't fudge elen) */
9886                     width += elen - old_elen;
9887                 }
9888                 is_utf8 = TRUE;
9889             }
9890         }
9891
9892         have = esignlen + zeros + elen;
9893         if (have < zeros)
9894             Perl_croak_nocontext(PL_memory_wrap);
9895
9896         need = (have > width ? have : width);
9897         gap = need - have;
9898
9899         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
9900             Perl_croak_nocontext(PL_memory_wrap);
9901         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
9902         p = SvEND(sv);
9903         if (esignlen && fill == '0') {
9904             int i;
9905             for (i = 0; i < (int)esignlen; i++)
9906                 *p++ = esignbuf[i];
9907         }
9908         if (gap && !left) {
9909             memset(p, fill, gap);
9910             p += gap;
9911         }
9912         if (esignlen && fill != '0') {
9913             int i;
9914             for (i = 0; i < (int)esignlen; i++)
9915                 *p++ = esignbuf[i];
9916         }
9917         if (zeros) {
9918             int i;
9919             for (i = zeros; i; i--)
9920                 *p++ = '0';
9921         }
9922         if (elen) {
9923             Copy(eptr, p, elen, char);
9924             p += elen;
9925         }
9926         if (gap && left) {
9927             memset(p, ' ', gap);
9928             p += gap;
9929         }
9930         if (vectorize) {
9931             if (veclen) {
9932                 Copy(dotstr, p, dotstrlen, char);
9933                 p += dotstrlen;
9934             }
9935             else
9936                 vectorize = FALSE;              /* done iterating over vecstr */
9937         }
9938         if (is_utf8)
9939             has_utf8 = TRUE;
9940         if (has_utf8)
9941             SvUTF8_on(sv);
9942         *p = '\0';
9943         SvCUR_set(sv, p - SvPVX_const(sv));
9944         if (vectorize) {
9945             esignlen = 0;
9946             goto vector;
9947         }
9948     }
9949 }
9950
9951 /* =========================================================================
9952
9953 =head1 Cloning an interpreter
9954
9955 All the macros and functions in this section are for the private use of
9956 the main function, perl_clone().
9957
9958 The foo_dup() functions make an exact copy of an existing foo thingy.
9959 During the course of a cloning, a hash table is used to map old addresses
9960 to new addresses. The table is created and manipulated with the
9961 ptr_table_* functions.
9962
9963 =cut
9964
9965 ============================================================================*/
9966
9967
9968 #if defined(USE_ITHREADS)
9969
9970 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
9971 #ifndef GpREFCNT_inc
9972 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9973 #endif
9974
9975
9976 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
9977    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
9978    If this changes, please unmerge ss_dup.  */
9979 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9980 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup(s,t))
9981 #define av_dup(s,t)     (AV*)sv_dup((SV*)s,t)
9982 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9983 #define hv_dup(s,t)     (HV*)sv_dup((SV*)s,t)
9984 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9985 #define cv_dup(s,t)     (CV*)sv_dup((SV*)s,t)
9986 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9987 #define io_dup(s,t)     (IO*)sv_dup((SV*)s,t)
9988 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9989 #define gv_dup(s,t)     (GV*)sv_dup((SV*)s,t)
9990 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9991 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
9992 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
9993
9994 /* clone a parser */
9995
9996 yy_parser *
9997 Perl_parser_dup(pTHX_ const yy_parser *proto, CLONE_PARAMS* param)
9998 {
9999     yy_parser *parser;
10000
10001     PERL_ARGS_ASSERT_PARSER_DUP;
10002
10003     if (!proto)
10004         return NULL;
10005
10006     /* look for it in the table first */
10007     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10008     if (parser)
10009         return parser;
10010
10011     /* create anew and remember what it is */
10012     Newxz(parser, 1, yy_parser);
10013     ptr_table_store(PL_ptr_table, proto, parser);
10014
10015     parser->yyerrstatus = 0;
10016     parser->yychar = YYEMPTY;           /* Cause a token to be read.  */
10017
10018     /* XXX these not yet duped */
10019     parser->old_parser = NULL;
10020     parser->stack = NULL;
10021     parser->ps = NULL;
10022     parser->stack_size = 0;
10023     /* XXX parser->stack->state = 0; */
10024
10025     /* XXX eventually, just Copy() most of the parser struct ? */
10026
10027     parser->lex_brackets = proto->lex_brackets;
10028     parser->lex_casemods = proto->lex_casemods;
10029     parser->lex_brackstack = savepvn(proto->lex_brackstack,
10030                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10031     parser->lex_casestack = savepvn(proto->lex_casestack,
10032                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10033     parser->lex_defer   = proto->lex_defer;
10034     parser->lex_dojoin  = proto->lex_dojoin;
10035     parser->lex_expect  = proto->lex_expect;
10036     parser->lex_formbrack = proto->lex_formbrack;
10037     parser->lex_inpat   = proto->lex_inpat;
10038     parser->lex_inwhat  = proto->lex_inwhat;
10039     parser->lex_op      = proto->lex_op;
10040     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
10041     parser->lex_starts  = proto->lex_starts;
10042     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
10043     parser->multi_close = proto->multi_close;
10044     parser->multi_open  = proto->multi_open;
10045     parser->multi_start = proto->multi_start;
10046     parser->multi_end   = proto->multi_end;
10047     parser->pending_ident = proto->pending_ident;
10048     parser->preambled   = proto->preambled;
10049     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10050     parser->linestr     = sv_dup_inc(proto->linestr, param);
10051     parser->expect      = proto->expect;
10052     parser->copline     = proto->copline;
10053     parser->last_lop_op = proto->last_lop_op;
10054     parser->lex_state   = proto->lex_state;
10055     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
10056     /* rsfp_filters entries have fake IoDIRP() */
10057     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10058     parser->in_my       = proto->in_my;
10059     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10060     parser->error_count = proto->error_count;
10061
10062
10063     parser->linestr     = sv_dup_inc(proto->linestr, param);
10064
10065     {
10066         char * const ols = SvPVX(proto->linestr);
10067         char * const ls  = SvPVX(parser->linestr);
10068
10069         parser->bufptr      = ls + (proto->bufptr >= ols ?
10070                                     proto->bufptr -  ols : 0);
10071         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
10072                                     proto->oldbufptr -  ols : 0);
10073         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10074                                     proto->oldoldbufptr -  ols : 0);
10075         parser->linestart   = ls + (proto->linestart >= ols ?
10076                                     proto->linestart -  ols : 0);
10077         parser->last_uni    = ls + (proto->last_uni >= ols ?
10078                                     proto->last_uni -  ols : 0);
10079         parser->last_lop    = ls + (proto->last_lop >= ols ?
10080                                     proto->last_lop -  ols : 0);
10081
10082         parser->bufend      = ls + SvCUR(parser->linestr);
10083     }
10084
10085     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10086
10087
10088 #ifdef PERL_MAD
10089     parser->endwhite    = proto->endwhite;
10090     parser->faketokens  = proto->faketokens;
10091     parser->lasttoke    = proto->lasttoke;
10092     parser->nextwhite   = proto->nextwhite;
10093     parser->realtokenstart = proto->realtokenstart;
10094     parser->skipwhite   = proto->skipwhite;
10095     parser->thisclose   = proto->thisclose;
10096     parser->thismad     = proto->thismad;
10097     parser->thisopen    = proto->thisopen;
10098     parser->thisstuff   = proto->thisstuff;
10099     parser->thistoken   = proto->thistoken;
10100     parser->thiswhite   = proto->thiswhite;
10101
10102     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10103     parser->curforce    = proto->curforce;
10104 #else
10105     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10106     Copy(proto->nexttype, parser->nexttype, 5,  I32);
10107     parser->nexttoke    = proto->nexttoke;
10108 #endif
10109     return parser;
10110 }
10111
10112
10113 /* duplicate a file handle */
10114
10115 PerlIO *
10116 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
10117 {
10118     PerlIO *ret;
10119
10120     PERL_ARGS_ASSERT_FP_DUP;
10121     PERL_UNUSED_ARG(type);
10122
10123     if (!fp)
10124         return (PerlIO*)NULL;
10125
10126     /* look for it in the table first */
10127     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10128     if (ret)
10129         return ret;
10130
10131     /* create anew and remember what it is */
10132     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10133     ptr_table_store(PL_ptr_table, fp, ret);
10134     return ret;
10135 }
10136
10137 /* duplicate a directory handle */
10138
10139 DIR *
10140 Perl_dirp_dup(pTHX_ DIR *dp)
10141 {
10142     PERL_UNUSED_CONTEXT;
10143     if (!dp)
10144         return (DIR*)NULL;
10145     /* XXX TODO */
10146     return dp;
10147 }
10148
10149 /* duplicate a typeglob */
10150
10151 GP *
10152 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
10153 {
10154     GP *ret;
10155
10156     PERL_ARGS_ASSERT_GP_DUP;
10157
10158     if (!gp)
10159         return (GP*)NULL;
10160     /* look for it in the table first */
10161     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10162     if (ret)
10163         return ret;
10164
10165     /* create anew and remember what it is */
10166     Newxz(ret, 1, GP);
10167     ptr_table_store(PL_ptr_table, gp, ret);
10168
10169     /* clone */
10170     ret->gp_refcnt      = 0;                    /* must be before any other dups! */
10171     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
10172     ret->gp_io          = io_dup_inc(gp->gp_io, param);
10173     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
10174     ret->gp_av          = av_dup_inc(gp->gp_av, param);
10175     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
10176     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10177     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
10178     ret->gp_cvgen       = gp->gp_cvgen;
10179     ret->gp_line        = gp->gp_line;
10180     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
10181     return ret;
10182 }
10183
10184 /* duplicate a chain of magic */
10185
10186 MAGIC *
10187 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
10188 {
10189     MAGIC *mgprev = (MAGIC*)NULL;
10190     MAGIC *mgret;
10191
10192     PERL_ARGS_ASSERT_MG_DUP;
10193
10194     if (!mg)
10195         return (MAGIC*)NULL;
10196     /* look for it in the table first */
10197     mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
10198     if (mgret)
10199         return mgret;
10200
10201     for (; mg; mg = mg->mg_moremagic) {
10202         MAGIC *nmg;
10203         Newxz(nmg, 1, MAGIC);
10204         if (mgprev)
10205             mgprev->mg_moremagic = nmg;
10206         else
10207             mgret = nmg;
10208         nmg->mg_virtual = mg->mg_virtual;       /* XXX copy dynamic vtable? */
10209         nmg->mg_private = mg->mg_private;
10210         nmg->mg_type    = mg->mg_type;
10211         nmg->mg_flags   = mg->mg_flags;
10212         /* FIXME for plugins
10213         if (mg->mg_type == PERL_MAGIC_qr) {
10214             nmg->mg_obj = (SV*)CALLREGDUPE((REGEXP*)mg->mg_obj, param);
10215         }
10216         else
10217         */
10218         if(mg->mg_type == PERL_MAGIC_backref) {
10219             /* The backref AV has its reference count deliberately bumped by
10220                1.  */
10221             nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
10222         }
10223         else {
10224             nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
10225                               ? sv_dup_inc(mg->mg_obj, param)
10226                               : sv_dup(mg->mg_obj, param);
10227         }
10228         nmg->mg_len     = mg->mg_len;
10229         nmg->mg_ptr     = mg->mg_ptr;   /* XXX random ptr? */
10230         if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
10231             if (mg->mg_len > 0) {
10232                 nmg->mg_ptr     = SAVEPVN(mg->mg_ptr, mg->mg_len);
10233                 if (mg->mg_type == PERL_MAGIC_overload_table &&
10234                         AMT_AMAGIC((AMT*)mg->mg_ptr))
10235                 {
10236                     const AMT * const amtp = (AMT*)mg->mg_ptr;
10237                     AMT * const namtp = (AMT*)nmg->mg_ptr;
10238                     I32 i;
10239                     for (i = 1; i < NofAMmeth; i++) {
10240                         namtp->table[i] = cv_dup_inc(amtp->table[i], param);
10241                     }
10242                 }
10243             }
10244             else if (mg->mg_len == HEf_SVKEY)
10245                 nmg->mg_ptr     = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
10246         }
10247         if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
10248             CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10249         }
10250         mgprev = nmg;
10251     }
10252     return mgret;
10253 }
10254
10255 #endif /* USE_ITHREADS */
10256
10257 /* create a new pointer-mapping table */
10258
10259 PTR_TBL_t *
10260 Perl_ptr_table_new(pTHX)
10261 {
10262     PTR_TBL_t *tbl;
10263     PERL_UNUSED_CONTEXT;
10264
10265     Newxz(tbl, 1, PTR_TBL_t);
10266     tbl->tbl_max        = 511;
10267     tbl->tbl_items      = 0;
10268     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10269     return tbl;
10270 }
10271
10272 #define PTR_TABLE_HASH(ptr) \
10273   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
10274
10275 /* 
10276    we use the PTE_SVSLOT 'reservation' made above, both here (in the
10277    following define) and at call to new_body_inline made below in 
10278    Perl_ptr_table_store()
10279  */
10280
10281 #define del_pte(p)     del_body_type(p, PTE_SVSLOT)
10282
10283 /* map an existing pointer using a table */
10284
10285 STATIC PTR_TBL_ENT_t *
10286 S_ptr_table_find(PTR_TBL_t *tbl, const void *sv)
10287 {
10288     PTR_TBL_ENT_t *tblent;
10289     const UV hash = PTR_TABLE_HASH(sv);
10290
10291     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10292
10293     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10294     for (; tblent; tblent = tblent->next) {
10295         if (tblent->oldval == sv)
10296             return tblent;
10297     }
10298     return NULL;
10299 }
10300
10301 void *
10302 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
10303 {
10304     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
10305
10306     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
10307     PERL_UNUSED_CONTEXT;
10308
10309     return tblent ? tblent->newval : NULL;
10310 }
10311
10312 /* add a new entry to a pointer-mapping table */
10313
10314 void
10315 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
10316 {
10317     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
10318
10319     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
10320     PERL_UNUSED_CONTEXT;
10321
10322     if (tblent) {
10323         tblent->newval = newsv;
10324     } else {
10325         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10326
10327         new_body_inline(tblent, PTE_SVSLOT);
10328
10329         tblent->oldval = oldsv;
10330         tblent->newval = newsv;
10331         tblent->next = tbl->tbl_ary[entry];
10332         tbl->tbl_ary[entry] = tblent;
10333         tbl->tbl_items++;
10334         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10335             ptr_table_split(tbl);
10336     }
10337 }
10338
10339 /* double the hash bucket size of an existing ptr table */
10340
10341 void
10342 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
10343 {
10344     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10345     const UV oldsize = tbl->tbl_max + 1;
10346     UV newsize = oldsize * 2;
10347     UV i;
10348
10349     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
10350     PERL_UNUSED_CONTEXT;
10351
10352     Renew(ary, newsize, PTR_TBL_ENT_t*);
10353     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10354     tbl->tbl_max = --newsize;
10355     tbl->tbl_ary = ary;
10356     for (i=0; i < oldsize; i++, ary++) {
10357         PTR_TBL_ENT_t **curentp, **entp, *ent;
10358         if (!*ary)
10359             continue;
10360         curentp = ary + oldsize;
10361         for (entp = ary, ent = *ary; ent; ent = *entp) {
10362             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10363                 *entp = ent->next;
10364                 ent->next = *curentp;
10365                 *curentp = ent;
10366                 continue;
10367             }
10368             else
10369                 entp = &ent->next;
10370         }
10371     }
10372 }
10373
10374 /* remove all the entries from a ptr table */
10375
10376 void
10377 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
10378 {
10379     if (tbl && tbl->tbl_items) {
10380         register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
10381         UV riter = tbl->tbl_max;
10382
10383         do {
10384             PTR_TBL_ENT_t *entry = array[riter];
10385
10386             while (entry) {
10387                 PTR_TBL_ENT_t * const oentry = entry;
10388                 entry = entry->next;
10389                 del_pte(oentry);
10390             }
10391         } while (riter--);
10392
10393         tbl->tbl_items = 0;
10394     }
10395 }
10396
10397 /* clear and free a ptr table */
10398
10399 void
10400 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
10401 {
10402     if (!tbl) {
10403         return;
10404     }
10405     ptr_table_clear(tbl);
10406     Safefree(tbl->tbl_ary);
10407     Safefree(tbl);
10408 }
10409
10410 #if defined(USE_ITHREADS)
10411
10412 void
10413 Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
10414 {
10415     PERL_ARGS_ASSERT_RVPV_DUP;
10416
10417     if (SvROK(sstr)) {
10418         SvRV_set(dstr, SvWEAKREF(sstr)
10419                        ? sv_dup(SvRV(sstr), param)
10420                        : sv_dup_inc(SvRV(sstr), param));
10421
10422     }
10423     else if (SvPVX_const(sstr)) {
10424         /* Has something there */
10425         if (SvLEN(sstr)) {
10426             /* Normal PV - clone whole allocated space */
10427             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10428             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10429                 /* Not that normal - actually sstr is copy on write.
10430                    But we are a true, independant SV, so:  */
10431                 SvREADONLY_off(dstr);
10432                 SvFAKE_off(dstr);
10433             }
10434         }
10435         else {
10436             /* Special case - not normally malloced for some reason */
10437             if (isGV_with_GP(sstr)) {
10438                 /* Don't need to do anything here.  */
10439             }
10440             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10441                 /* A "shared" PV - clone it as "shared" PV */
10442                 SvPV_set(dstr,
10443                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10444                                          param)));
10445             }
10446             else {
10447                 /* Some other special case - random pointer */
10448                 SvPV_set(dstr, SvPVX(sstr));            
10449             }
10450         }
10451     }
10452     else {
10453         /* Copy the NULL */
10454         SvPV_set(dstr, NULL);
10455     }
10456 }
10457
10458 /* duplicate an SV of any type (including AV, HV etc) */
10459
10460 SV *
10461 Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
10462 {
10463     dVAR;
10464     SV *dstr;
10465
10466     PERL_ARGS_ASSERT_SV_DUP;
10467
10468     if (!sstr)
10469         return NULL;
10470     if (SvTYPE(sstr) == SVTYPEMASK) {
10471 #ifdef DEBUG_LEAKING_SCALARS_ABORT
10472         abort();
10473 #endif
10474         return NULL;
10475     }
10476     /* look for it in the table first */
10477     dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
10478     if (dstr)
10479         return dstr;
10480
10481     if(param->flags & CLONEf_JOIN_IN) {
10482         /** We are joining here so we don't want do clone
10483             something that is bad **/
10484         if (SvTYPE(sstr) == SVt_PVHV) {
10485             const HEK * const hvname = HvNAME_HEK(sstr);
10486             if (hvname)
10487                 /** don't clone stashes if they already exist **/
10488                 return (SV*)gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0);
10489         }
10490     }
10491
10492     /* create anew and remember what it is */
10493     new_SV(dstr);
10494
10495 #ifdef DEBUG_LEAKING_SCALARS
10496     dstr->sv_debug_optype = sstr->sv_debug_optype;
10497     dstr->sv_debug_line = sstr->sv_debug_line;
10498     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10499     dstr->sv_debug_cloned = 1;
10500     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
10501 #endif
10502
10503     ptr_table_store(PL_ptr_table, sstr, dstr);
10504
10505     /* clone */
10506     SvFLAGS(dstr)       = SvFLAGS(sstr);
10507     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
10508     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
10509
10510 #ifdef DEBUGGING
10511     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
10512         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
10513                       (void*)PL_watch_pvx, SvPVX_const(sstr));
10514 #endif
10515
10516     /* don't clone objects whose class has asked us not to */
10517     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
10518         SvFLAGS(dstr) = 0;
10519         return dstr;
10520     }
10521
10522     switch (SvTYPE(sstr)) {
10523     case SVt_NULL:
10524         SvANY(dstr)     = NULL;
10525         break;
10526     case SVt_IV:
10527         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
10528         if(SvROK(sstr)) {
10529             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10530         } else {
10531             SvIV_set(dstr, SvIVX(sstr));
10532         }
10533         break;
10534     case SVt_NV:
10535         SvANY(dstr)     = new_XNV();
10536         SvNV_set(dstr, SvNVX(sstr));
10537         break;
10538         /* case SVt_BIND: */
10539     default:
10540         {
10541             /* These are all the types that need complex bodies allocating.  */
10542             void *new_body;
10543             const svtype sv_type = SvTYPE(sstr);
10544             const struct body_details *const sv_type_details
10545                 = bodies_by_type + sv_type;
10546
10547             switch (sv_type) {
10548             default:
10549                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
10550                 break;
10551
10552             case SVt_PVGV:
10553                 if (GvUNIQUE((GV*)sstr)) {
10554                     NOOP;   /* Do sharing here, and fall through */
10555                 }
10556             case SVt_PVIO:
10557             case SVt_PVFM:
10558             case SVt_PVHV:
10559             case SVt_PVAV:
10560             case SVt_PVCV:
10561             case SVt_PVLV:
10562             case SVt_REGEXP:
10563             case SVt_PVMG:
10564             case SVt_PVNV:
10565             case SVt_PVIV:
10566             case SVt_PV:
10567                 assert(sv_type_details->body_size);
10568                 if (sv_type_details->arena) {
10569                     new_body_inline(new_body, sv_type);
10570                     new_body
10571                         = (void*)((char*)new_body - sv_type_details->offset);
10572                 } else {
10573                     new_body = new_NOARENA(sv_type_details);
10574                 }
10575             }
10576             assert(new_body);
10577             SvANY(dstr) = new_body;
10578
10579 #ifndef PURIFY
10580             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
10581                  ((char*)SvANY(dstr)) + sv_type_details->offset,
10582                  sv_type_details->copy, char);
10583 #else
10584             Copy(((char*)SvANY(sstr)),
10585                  ((char*)SvANY(dstr)),
10586                  sv_type_details->body_size + sv_type_details->offset, char);
10587 #endif
10588
10589             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
10590                 && !isGV_with_GP(dstr))
10591                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10592
10593             /* The Copy above means that all the source (unduplicated) pointers
10594                are now in the destination.  We can check the flags and the
10595                pointers in either, but it's possible that there's less cache
10596                missing by always going for the destination.
10597                FIXME - instrument and check that assumption  */
10598             if (sv_type >= SVt_PVMG) {
10599                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
10600                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
10601                 } else if (SvMAGIC(dstr))
10602                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
10603                 if (SvSTASH(dstr))
10604                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
10605             }
10606
10607             /* The cast silences a GCC warning about unhandled types.  */
10608             switch ((int)sv_type) {
10609             case SVt_PV:
10610                 break;
10611             case SVt_PVIV:
10612                 break;
10613             case SVt_PVNV:
10614                 break;
10615             case SVt_PVMG:
10616                 break;
10617             case SVt_REGEXP:
10618                 /* FIXME for plugins */
10619                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
10620                 break;
10621             case SVt_PVLV:
10622                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
10623                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
10624                     LvTARG(dstr) = dstr;
10625                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
10626                     LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
10627                 else
10628                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
10629             case SVt_PVGV:
10630                 if(isGV_with_GP(sstr)) {
10631                     if (GvNAME_HEK(dstr))
10632                         GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
10633                     /* Don't call sv_add_backref here as it's going to be
10634                        created as part of the magic cloning of the symbol
10635                        table.  */
10636                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
10637                        at the point of this comment.  */
10638                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
10639                     GvGP(dstr)  = gp_dup(GvGP(sstr), param);
10640                     (void)GpREFCNT_inc(GvGP(dstr));
10641                 } else
10642                     Perl_rvpv_dup(aTHX_ dstr, sstr, param);
10643                 break;
10644             case SVt_PVIO:
10645                 IoIFP(dstr)     = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
10646                 if (IoOFP(dstr) == IoIFP(sstr))
10647                     IoOFP(dstr) = IoIFP(dstr);
10648                 else
10649                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
10650                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
10651                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
10652                     /* I have no idea why fake dirp (rsfps)
10653                        should be treated differently but otherwise
10654                        we end up with leaks -- sky*/
10655                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
10656                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
10657                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
10658                 } else {
10659                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
10660                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
10661                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
10662                     if (IoDIRP(dstr)) {
10663                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr));
10664                     } else {
10665                         NOOP;
10666                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
10667                     }
10668                 }
10669                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
10670                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
10671                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
10672                 break;
10673             case SVt_PVAV:
10674                 if (AvARRAY((AV*)sstr)) {
10675                     SV **dst_ary, **src_ary;
10676                     SSize_t items = AvFILLp((AV*)sstr) + 1;
10677
10678                     src_ary = AvARRAY((AV*)sstr);
10679                     Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
10680                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
10681                     AvARRAY((AV*)dstr) = dst_ary;
10682                     AvALLOC((AV*)dstr) = dst_ary;
10683                     if (AvREAL((AV*)sstr)) {
10684                         while (items-- > 0)
10685                             *dst_ary++ = sv_dup_inc(*src_ary++, param);
10686                     }
10687                     else {
10688                         while (items-- > 0)
10689                             *dst_ary++ = sv_dup(*src_ary++, param);
10690                     }
10691                     items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
10692                     while (items-- > 0) {
10693                         *dst_ary++ = &PL_sv_undef;
10694                     }
10695                 }
10696                 else {
10697                     AvARRAY((AV*)dstr)  = NULL;
10698                     AvALLOC((AV*)dstr)  = (SV**)NULL;
10699                 }
10700                 break;
10701             case SVt_PVHV:
10702                 if (HvARRAY((HV*)sstr)) {
10703                     STRLEN i = 0;
10704                     const bool sharekeys = !!HvSHAREKEYS(sstr);
10705                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
10706                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
10707                     char *darray;
10708                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
10709                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
10710                         char);
10711                     HvARRAY(dstr) = (HE**)darray;
10712                     while (i <= sxhv->xhv_max) {
10713                         const HE * const source = HvARRAY(sstr)[i];
10714                         HvARRAY(dstr)[i] = source
10715                             ? he_dup(source, sharekeys, param) : 0;
10716                         ++i;
10717                     }
10718                     if (SvOOK(sstr)) {
10719                         HEK *hvname;
10720                         const struct xpvhv_aux * const saux = HvAUX(sstr);
10721                         struct xpvhv_aux * const daux = HvAUX(dstr);
10722                         /* This flag isn't copied.  */
10723                         /* SvOOK_on(hv) attacks the IV flags.  */
10724                         SvFLAGS(dstr) |= SVf_OOK;
10725
10726                         hvname = saux->xhv_name;
10727                         daux->xhv_name = hvname ? hek_dup(hvname, param) : hvname;
10728
10729                         daux->xhv_riter = saux->xhv_riter;
10730                         daux->xhv_eiter = saux->xhv_eiter
10731                             ? he_dup(saux->xhv_eiter,
10732                                         (bool)!!HvSHAREKEYS(sstr), param) : 0;
10733                         daux->xhv_backreferences =
10734                             saux->xhv_backreferences
10735                                 ? (AV*) SvREFCNT_inc(
10736                                         sv_dup((SV*)saux->xhv_backreferences, param))
10737                                 : 0;
10738
10739                         daux->xhv_mro_meta = saux->xhv_mro_meta
10740                             ? mro_meta_dup(saux->xhv_mro_meta, param)
10741                             : 0;
10742
10743                         /* Record stashes for possible cloning in Perl_clone(). */
10744                         if (hvname)
10745                             av_push(param->stashes, dstr);
10746                     }
10747                 }
10748                 else
10749                     HvARRAY((HV*)dstr) = NULL;
10750                 break;
10751             case SVt_PVCV:
10752                 if (!(param->flags & CLONEf_COPY_STACKS)) {
10753                     CvDEPTH(dstr) = 0;
10754                 }
10755             case SVt_PVFM:
10756                 /* NOTE: not refcounted */
10757                 CvSTASH(dstr)   = hv_dup(CvSTASH(dstr), param);
10758                 OP_REFCNT_LOCK;
10759                 if (!CvISXSUB(dstr))
10760                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
10761                 OP_REFCNT_UNLOCK;
10762                 if (CvCONST(dstr) && CvISXSUB(dstr)) {
10763                     CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
10764                         SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
10765                         sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
10766                 }
10767                 /* don't dup if copying back - CvGV isn't refcounted, so the
10768                  * duped GV may never be freed. A bit of a hack! DAPM */
10769                 CvGV(dstr)      = (param->flags & CLONEf_JOIN_IN) ?
10770                     NULL : gv_dup(CvGV(dstr), param) ;
10771                 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
10772                 CvOUTSIDE(dstr) =
10773                     CvWEAKOUTSIDE(sstr)
10774                     ? cv_dup(    CvOUTSIDE(dstr), param)
10775                     : cv_dup_inc(CvOUTSIDE(dstr), param);
10776                 if (!CvISXSUB(dstr))
10777                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
10778                 break;
10779             }
10780         }
10781     }
10782
10783     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
10784         ++PL_sv_objcount;
10785
10786     return dstr;
10787  }
10788
10789 /* duplicate a context */
10790
10791 PERL_CONTEXT *
10792 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
10793 {
10794     PERL_CONTEXT *ncxs;
10795
10796     PERL_ARGS_ASSERT_CX_DUP;
10797
10798     if (!cxs)
10799         return (PERL_CONTEXT*)NULL;
10800
10801     /* look for it in the table first */
10802     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
10803     if (ncxs)
10804         return ncxs;
10805
10806     /* create anew and remember what it is */
10807     Newx(ncxs, max + 1, PERL_CONTEXT);
10808     ptr_table_store(PL_ptr_table, cxs, ncxs);
10809     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
10810
10811     while (ix >= 0) {
10812         PERL_CONTEXT * const ncx = &ncxs[ix];
10813         if (CxTYPE(ncx) == CXt_SUBST) {
10814             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
10815         }
10816         else {
10817             switch (CxTYPE(ncx)) {
10818             case CXt_SUB:
10819                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
10820                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
10821                                            : cv_dup(ncx->blk_sub.cv,param));
10822                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
10823                                            ? av_dup_inc(ncx->blk_sub.argarray,
10824                                                         param)
10825                                            : NULL);
10826                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
10827                                                      param);
10828                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
10829                                            ncx->blk_sub.oldcomppad);
10830                 break;
10831             case CXt_EVAL:
10832                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
10833                                                       param);
10834                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
10835                 break;
10836             case CXt_LOOP_LAZYSV:
10837                 ncx->blk_loop.state_u.lazysv.end
10838                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
10839                 /* We are taking advantage of av_dup_inc and sv_dup_inc
10840                    actually being the same function, and order equivalance of
10841                    the two unions.
10842                    We can assert the later [but only at run time :-(]  */
10843                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
10844                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
10845             case CXt_LOOP_FOR:
10846                 ncx->blk_loop.state_u.ary.ary
10847                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
10848             case CXt_LOOP_LAZYIV:
10849             case CXt_LOOP_PLAIN:
10850                 if (CxPADLOOP(ncx)) {
10851                     ncx->blk_loop.oldcomppad
10852                         = (PAD*)ptr_table_fetch(PL_ptr_table,
10853                                                 ncx->blk_loop.oldcomppad);
10854                 } else {
10855                     ncx->blk_loop.oldcomppad
10856                         = (PAD*)gv_dup((GV*)ncx->blk_loop.oldcomppad, param);
10857                 }
10858                 break;
10859             case CXt_FORMAT:
10860                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
10861                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
10862                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
10863                                                      param);
10864                 break;
10865             case CXt_BLOCK:
10866             case CXt_NULL:
10867                 break;
10868             }
10869         }
10870         --ix;
10871     }
10872     return ncxs;
10873 }
10874
10875 /* duplicate a stack info structure */
10876
10877 PERL_SI *
10878 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
10879 {
10880     PERL_SI *nsi;
10881
10882     PERL_ARGS_ASSERT_SI_DUP;
10883
10884     if (!si)
10885         return (PERL_SI*)NULL;
10886
10887     /* look for it in the table first */
10888     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
10889     if (nsi)
10890         return nsi;
10891
10892     /* create anew and remember what it is */
10893     Newxz(nsi, 1, PERL_SI);
10894     ptr_table_store(PL_ptr_table, si, nsi);
10895
10896     nsi->si_stack       = av_dup_inc(si->si_stack, param);
10897     nsi->si_cxix        = si->si_cxix;
10898     nsi->si_cxmax       = si->si_cxmax;
10899     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
10900     nsi->si_type        = si->si_type;
10901     nsi->si_prev        = si_dup(si->si_prev, param);
10902     nsi->si_next        = si_dup(si->si_next, param);
10903     nsi->si_markoff     = si->si_markoff;
10904
10905     return nsi;
10906 }
10907
10908 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
10909 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
10910 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
10911 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
10912 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
10913 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
10914 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
10915 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
10916 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
10917 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
10918 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
10919 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
10920 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
10921 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
10922
10923 /* XXXXX todo */
10924 #define pv_dup_inc(p)   SAVEPV(p)
10925 #define pv_dup(p)       SAVEPV(p)
10926 #define svp_dup_inc(p,pp)       any_dup(p,pp)
10927
10928 /* map any object to the new equivent - either something in the
10929  * ptr table, or something in the interpreter structure
10930  */
10931
10932 void *
10933 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
10934 {
10935     void *ret;
10936
10937     PERL_ARGS_ASSERT_ANY_DUP;
10938
10939     if (!v)
10940         return (void*)NULL;
10941
10942     /* look for it in the table first */
10943     ret = ptr_table_fetch(PL_ptr_table, v);
10944     if (ret)
10945         return ret;
10946
10947     /* see if it is part of the interpreter structure */
10948     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
10949         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
10950     else {
10951         ret = v;
10952     }
10953
10954     return ret;
10955 }
10956
10957 /* duplicate the save stack */
10958
10959 ANY *
10960 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
10961 {
10962     dVAR;
10963     ANY * const ss      = proto_perl->Isavestack;
10964     const I32 max       = proto_perl->Isavestack_max;
10965     I32 ix              = proto_perl->Isavestack_ix;
10966     ANY *nss;
10967     SV *sv;
10968     GV *gv;
10969     AV *av;
10970     HV *hv;
10971     void* ptr;
10972     int intval;
10973     long longval;
10974     GP *gp;
10975     IV iv;
10976     I32 i;
10977     char *c = NULL;
10978     void (*dptr) (void*);
10979     void (*dxptr) (pTHX_ void*);
10980
10981     PERL_ARGS_ASSERT_SS_DUP;
10982
10983     Newxz(nss, max, ANY);
10984
10985     while (ix > 0) {
10986         const I32 type = POPINT(ss,ix);
10987         TOPINT(nss,ix) = type;
10988         switch (type) {
10989         case SAVEt_HELEM:               /* hash element */
10990             sv = (SV*)POPPTR(ss,ix);
10991             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10992             /* fall through */
10993         case SAVEt_ITEM:                        /* normal string */
10994         case SAVEt_SV:                          /* scalar reference */
10995             sv = (SV*)POPPTR(ss,ix);
10996             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10997             /* fall through */
10998         case SAVEt_FREESV:
10999         case SAVEt_MORTALIZESV:
11000             sv = (SV*)POPPTR(ss,ix);
11001             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11002             break;
11003         case SAVEt_SHARED_PVREF:                /* char* in shared space */
11004             c = (char*)POPPTR(ss,ix);
11005             TOPPTR(nss,ix) = savesharedpv(c);
11006             ptr = POPPTR(ss,ix);
11007             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11008             break;
11009         case SAVEt_GENERIC_SVREF:               /* generic sv */
11010         case SAVEt_SVREF:                       /* scalar reference */
11011             sv = (SV*)POPPTR(ss,ix);
11012             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11013             ptr = POPPTR(ss,ix);
11014             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11015             break;
11016         case SAVEt_HV:                          /* hash reference */
11017         case SAVEt_AV:                          /* array reference */
11018             sv = (SV*) POPPTR(ss,ix);
11019             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11020             /* fall through */
11021         case SAVEt_COMPPAD:
11022         case SAVEt_NSTAB:
11023             sv = (SV*) POPPTR(ss,ix);
11024             TOPPTR(nss,ix) = sv_dup(sv, param);
11025             break;
11026         case SAVEt_INT:                         /* int reference */
11027             ptr = POPPTR(ss,ix);
11028             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11029             intval = (int)POPINT(ss,ix);
11030             TOPINT(nss,ix) = intval;
11031             break;
11032         case SAVEt_LONG:                        /* long reference */
11033             ptr = POPPTR(ss,ix);
11034             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11035             /* fall through */
11036         case SAVEt_CLEARSV:
11037             longval = (long)POPLONG(ss,ix);
11038             TOPLONG(nss,ix) = longval;
11039             break;
11040         case SAVEt_I32:                         /* I32 reference */
11041         case SAVEt_I16:                         /* I16 reference */
11042         case SAVEt_I8:                          /* I8 reference */
11043         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
11044             ptr = POPPTR(ss,ix);
11045             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11046             i = POPINT(ss,ix);
11047             TOPINT(nss,ix) = i;
11048             break;
11049         case SAVEt_IV:                          /* IV reference */
11050             ptr = POPPTR(ss,ix);
11051             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11052             iv = POPIV(ss,ix);
11053             TOPIV(nss,ix) = iv;
11054             break;
11055         case SAVEt_HPTR:                        /* HV* reference */
11056         case SAVEt_APTR:                        /* AV* reference */
11057         case SAVEt_SPTR:                        /* SV* reference */
11058             ptr = POPPTR(ss,ix);
11059             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11060             sv = (SV*)POPPTR(ss,ix);
11061             TOPPTR(nss,ix) = sv_dup(sv, param);
11062             break;
11063         case SAVEt_VPTR:                        /* random* reference */
11064             ptr = POPPTR(ss,ix);
11065             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11066             ptr = POPPTR(ss,ix);
11067             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11068             break;
11069         case SAVEt_GENERIC_PVREF:               /* generic char* */
11070         case SAVEt_PPTR:                        /* char* reference */
11071             ptr = POPPTR(ss,ix);
11072             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11073             c = (char*)POPPTR(ss,ix);
11074             TOPPTR(nss,ix) = pv_dup(c);
11075             break;
11076         case SAVEt_GP:                          /* scalar reference */
11077             gp = (GP*)POPPTR(ss,ix);
11078             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11079             (void)GpREFCNT_inc(gp);
11080             gv = (GV*)POPPTR(ss,ix);
11081             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11082             break;
11083         case SAVEt_FREEOP:
11084             ptr = POPPTR(ss,ix);
11085             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11086                 /* these are assumed to be refcounted properly */
11087                 OP *o;
11088                 switch (((OP*)ptr)->op_type) {
11089                 case OP_LEAVESUB:
11090                 case OP_LEAVESUBLV:
11091                 case OP_LEAVEEVAL:
11092                 case OP_LEAVE:
11093                 case OP_SCOPE:
11094                 case OP_LEAVEWRITE:
11095                     TOPPTR(nss,ix) = ptr;
11096                     o = (OP*)ptr;
11097                     OP_REFCNT_LOCK;
11098                     (void) OpREFCNT_inc(o);
11099                     OP_REFCNT_UNLOCK;
11100                     break;
11101                 default:
11102                     TOPPTR(nss,ix) = NULL;
11103                     break;
11104                 }
11105             }
11106             else
11107                 TOPPTR(nss,ix) = NULL;
11108             break;
11109         case SAVEt_FREEPV:
11110             c = (char*)POPPTR(ss,ix);
11111             TOPPTR(nss,ix) = pv_dup_inc(c);
11112             break;
11113         case SAVEt_DELETE:
11114             hv = (HV*)POPPTR(ss,ix);
11115             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11116             c = (char*)POPPTR(ss,ix);
11117             TOPPTR(nss,ix) = pv_dup_inc(c);
11118             /* fall through */
11119         case SAVEt_STACK_POS:           /* Position on Perl stack */
11120             i = POPINT(ss,ix);
11121             TOPINT(nss,ix) = i;
11122             break;
11123         case SAVEt_DESTRUCTOR:
11124             ptr = POPPTR(ss,ix);
11125             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11126             dptr = POPDPTR(ss,ix);
11127             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11128                                         any_dup(FPTR2DPTR(void *, dptr),
11129                                                 proto_perl));
11130             break;
11131         case SAVEt_DESTRUCTOR_X:
11132             ptr = POPPTR(ss,ix);
11133             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11134             dxptr = POPDXPTR(ss,ix);
11135             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11136                                          any_dup(FPTR2DPTR(void *, dxptr),
11137                                                  proto_perl));
11138             break;
11139         case SAVEt_REGCONTEXT:
11140         case SAVEt_ALLOC:
11141             i = POPINT(ss,ix);
11142             TOPINT(nss,ix) = i;
11143             ix -= i;
11144             break;
11145         case SAVEt_AELEM:               /* array element */
11146             sv = (SV*)POPPTR(ss,ix);
11147             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11148             i = POPINT(ss,ix);
11149             TOPINT(nss,ix) = i;
11150             av = (AV*)POPPTR(ss,ix);
11151             TOPPTR(nss,ix) = av_dup_inc(av, param);
11152             break;
11153         case SAVEt_OP:
11154             ptr = POPPTR(ss,ix);
11155             TOPPTR(nss,ix) = ptr;
11156             break;
11157         case SAVEt_HINTS:
11158             i = POPINT(ss,ix);
11159             TOPINT(nss,ix) = i;
11160             ptr = POPPTR(ss,ix);
11161             if (ptr) {
11162                 HINTS_REFCNT_LOCK;
11163                 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
11164                 HINTS_REFCNT_UNLOCK;
11165             }
11166             TOPPTR(nss,ix) = ptr;
11167             if (i & HINT_LOCALIZE_HH) {
11168                 hv = (HV*)POPPTR(ss,ix);
11169                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11170             }
11171             break;
11172         case SAVEt_PADSV_AND_MORTALIZE:
11173             longval = (long)POPLONG(ss,ix);
11174             TOPLONG(nss,ix) = longval;
11175             ptr = POPPTR(ss,ix);
11176             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11177             sv = (SV*)POPPTR(ss,ix);
11178             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11179             break;
11180         case SAVEt_BOOL:
11181             ptr = POPPTR(ss,ix);
11182             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11183             longval = (long)POPBOOL(ss,ix);
11184             TOPBOOL(nss,ix) = (bool)longval;
11185             break;
11186         case SAVEt_SET_SVFLAGS:
11187             i = POPINT(ss,ix);
11188             TOPINT(nss,ix) = i;
11189             i = POPINT(ss,ix);
11190             TOPINT(nss,ix) = i;
11191             sv = (SV*)POPPTR(ss,ix);
11192             TOPPTR(nss,ix) = sv_dup(sv, param);
11193             break;
11194         case SAVEt_RE_STATE:
11195             {
11196                 const struct re_save_state *const old_state
11197                     = (struct re_save_state *)
11198                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11199                 struct re_save_state *const new_state
11200                     = (struct re_save_state *)
11201                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11202
11203                 Copy(old_state, new_state, 1, struct re_save_state);
11204                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11205
11206                 new_state->re_state_bostr
11207                     = pv_dup(old_state->re_state_bostr);
11208                 new_state->re_state_reginput
11209                     = pv_dup(old_state->re_state_reginput);
11210                 new_state->re_state_regeol
11211                     = pv_dup(old_state->re_state_regeol);
11212                 new_state->re_state_regoffs
11213                     = (regexp_paren_pair*)
11214                         any_dup(old_state->re_state_regoffs, proto_perl);
11215                 new_state->re_state_reglastparen
11216                     = (U32*) any_dup(old_state->re_state_reglastparen, 
11217                               proto_perl);
11218                 new_state->re_state_reglastcloseparen
11219                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
11220                               proto_perl);
11221                 /* XXX This just has to be broken. The old save_re_context
11222                    code did SAVEGENERICPV(PL_reg_start_tmp);
11223                    PL_reg_start_tmp is char **.
11224                    Look above to what the dup code does for
11225                    SAVEt_GENERIC_PVREF
11226                    It can never have worked.
11227                    So this is merely a faithful copy of the exiting bug:  */
11228                 new_state->re_state_reg_start_tmp
11229                     = (char **) pv_dup((char *)
11230                                       old_state->re_state_reg_start_tmp);
11231                 /* I assume that it only ever "worked" because no-one called
11232                    (pseudo)fork while the regexp engine had re-entered itself.
11233                 */
11234 #ifdef PERL_OLD_COPY_ON_WRITE
11235                 new_state->re_state_nrs
11236                     = sv_dup(old_state->re_state_nrs, param);
11237 #endif
11238                 new_state->re_state_reg_magic
11239                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
11240                                proto_perl);
11241                 new_state->re_state_reg_oldcurpm
11242                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
11243                               proto_perl);
11244                 new_state->re_state_reg_curpm
11245                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
11246                                proto_perl);
11247                 new_state->re_state_reg_oldsaved
11248                     = pv_dup(old_state->re_state_reg_oldsaved);
11249                 new_state->re_state_reg_poscache
11250                     = pv_dup(old_state->re_state_reg_poscache);
11251                 new_state->re_state_reg_starttry
11252                     = pv_dup(old_state->re_state_reg_starttry);
11253                 break;
11254             }
11255         case SAVEt_COMPILE_WARNINGS:
11256             ptr = POPPTR(ss,ix);
11257             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
11258             break;
11259         case SAVEt_PARSER:
11260             ptr = POPPTR(ss,ix);
11261             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
11262             break;
11263         default:
11264             Perl_croak(aTHX_
11265                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
11266         }
11267     }
11268
11269     return nss;
11270 }
11271
11272
11273 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11274  * flag to the result. This is done for each stash before cloning starts,
11275  * so we know which stashes want their objects cloned */
11276
11277 static void
11278 do_mark_cloneable_stash(pTHX_ SV *const sv)
11279 {
11280     const HEK * const hvname = HvNAME_HEK((HV*)sv);
11281     if (hvname) {
11282         GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
11283         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11284         if (cloner && GvCV(cloner)) {
11285             dSP;
11286             UV status;
11287
11288             ENTER;
11289             SAVETMPS;
11290             PUSHMARK(SP);
11291             mXPUSHs(newSVhek(hvname));
11292             PUTBACK;
11293             call_sv((SV*)GvCV(cloner), G_SCALAR);
11294             SPAGAIN;
11295             status = POPu;
11296             PUTBACK;
11297             FREETMPS;
11298             LEAVE;
11299             if (status)
11300                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11301         }
11302     }
11303 }
11304
11305
11306
11307 /*
11308 =for apidoc perl_clone
11309
11310 Create and return a new interpreter by cloning the current one.
11311
11312 perl_clone takes these flags as parameters:
11313
11314 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11315 without it we only clone the data and zero the stacks,
11316 with it we copy the stacks and the new perl interpreter is
11317 ready to run at the exact same point as the previous one.
11318 The pseudo-fork code uses COPY_STACKS while the
11319 threads->create doesn't.
11320
11321 CLONEf_KEEP_PTR_TABLE
11322 perl_clone keeps a ptr_table with the pointer of the old
11323 variable as a key and the new variable as a value,
11324 this allows it to check if something has been cloned and not
11325 clone it again but rather just use the value and increase the
11326 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11327 the ptr_table using the function
11328 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11329 reason to keep it around is if you want to dup some of your own
11330 variable who are outside the graph perl scans, example of this
11331 code is in threads.xs create
11332
11333 CLONEf_CLONE_HOST
11334 This is a win32 thing, it is ignored on unix, it tells perls
11335 win32host code (which is c++) to clone itself, this is needed on
11336 win32 if you want to run two threads at the same time,
11337 if you just want to do some stuff in a separate perl interpreter
11338 and then throw it away and return to the original one,
11339 you don't need to do anything.
11340
11341 =cut
11342 */
11343
11344 /* XXX the above needs expanding by someone who actually understands it ! */
11345 EXTERN_C PerlInterpreter *
11346 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11347
11348 PerlInterpreter *
11349 perl_clone(PerlInterpreter *proto_perl, UV flags)
11350 {
11351    dVAR;
11352 #ifdef PERL_IMPLICIT_SYS
11353
11354     PERL_ARGS_ASSERT_PERL_CLONE;
11355
11356    /* perlhost.h so we need to call into it
11357    to clone the host, CPerlHost should have a c interface, sky */
11358
11359    if (flags & CLONEf_CLONE_HOST) {
11360        return perl_clone_host(proto_perl,flags);
11361    }
11362    return perl_clone_using(proto_perl, flags,
11363                             proto_perl->IMem,
11364                             proto_perl->IMemShared,
11365                             proto_perl->IMemParse,
11366                             proto_perl->IEnv,
11367                             proto_perl->IStdIO,
11368                             proto_perl->ILIO,
11369                             proto_perl->IDir,
11370                             proto_perl->ISock,
11371                             proto_perl->IProc);
11372 }
11373
11374 PerlInterpreter *
11375 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11376                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
11377                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11378                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11379                  struct IPerlDir* ipD, struct IPerlSock* ipS,
11380                  struct IPerlProc* ipP)
11381 {
11382     /* XXX many of the string copies here can be optimized if they're
11383      * constants; they need to be allocated as common memory and just
11384      * their pointers copied. */
11385
11386     IV i;
11387     CLONE_PARAMS clone_params;
11388     CLONE_PARAMS* const param = &clone_params;
11389
11390     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11391
11392     PERL_ARGS_ASSERT_PERL_CLONE_USING;
11393
11394     /* for each stash, determine whether its objects should be cloned */
11395     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11396     PERL_SET_THX(my_perl);
11397
11398 #  ifdef DEBUGGING
11399     PoisonNew(my_perl, 1, PerlInterpreter);
11400     PL_op = NULL;
11401     PL_curcop = NULL;
11402     PL_markstack = 0;
11403     PL_scopestack = 0;
11404     PL_savestack = 0;
11405     PL_savestack_ix = 0;
11406     PL_savestack_max = -1;
11407     PL_sig_pending = 0;
11408     PL_parser = NULL;
11409     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11410 #  else /* !DEBUGGING */
11411     Zero(my_perl, 1, PerlInterpreter);
11412 #  endif        /* DEBUGGING */
11413
11414     /* host pointers */
11415     PL_Mem              = ipM;
11416     PL_MemShared        = ipMS;
11417     PL_MemParse         = ipMP;
11418     PL_Env              = ipE;
11419     PL_StdIO            = ipStd;
11420     PL_LIO              = ipLIO;
11421     PL_Dir              = ipD;
11422     PL_Sock             = ipS;
11423     PL_Proc             = ipP;
11424 #else           /* !PERL_IMPLICIT_SYS */
11425     IV i;
11426     CLONE_PARAMS clone_params;
11427     CLONE_PARAMS* param = &clone_params;
11428     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11429
11430     PERL_ARGS_ASSERT_PERL_CLONE;
11431
11432     /* for each stash, determine whether its objects should be cloned */
11433     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11434     PERL_SET_THX(my_perl);
11435
11436 #    ifdef DEBUGGING
11437     PoisonNew(my_perl, 1, PerlInterpreter);
11438     PL_op = NULL;
11439     PL_curcop = NULL;
11440     PL_markstack = 0;
11441     PL_scopestack = 0;
11442     PL_savestack = 0;
11443     PL_savestack_ix = 0;
11444     PL_savestack_max = -1;
11445     PL_sig_pending = 0;
11446     PL_parser = NULL;
11447     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11448 #    else       /* !DEBUGGING */
11449     Zero(my_perl, 1, PerlInterpreter);
11450 #    endif      /* DEBUGGING */
11451 #endif          /* PERL_IMPLICIT_SYS */
11452     param->flags = flags;
11453     param->proto_perl = proto_perl;
11454
11455     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11456
11457     PL_body_arenas = NULL;
11458     Zero(&PL_body_roots, 1, PL_body_roots);
11459     
11460     PL_nice_chunk       = NULL;
11461     PL_nice_chunk_size  = 0;
11462     PL_sv_count         = 0;
11463     PL_sv_objcount      = 0;
11464     PL_sv_root          = NULL;
11465     PL_sv_arenaroot     = NULL;
11466
11467     PL_debug            = proto_perl->Idebug;
11468
11469     PL_hash_seed        = proto_perl->Ihash_seed;
11470     PL_rehash_seed      = proto_perl->Irehash_seed;
11471
11472 #ifdef USE_REENTRANT_API
11473     /* XXX: things like -Dm will segfault here in perlio, but doing
11474      *  PERL_SET_CONTEXT(proto_perl);
11475      * breaks too many other things
11476      */
11477     Perl_reentrant_init(aTHX);
11478 #endif
11479
11480     /* create SV map for pointer relocation */
11481     PL_ptr_table = ptr_table_new();
11482
11483     /* initialize these special pointers as early as possible */
11484     SvANY(&PL_sv_undef)         = NULL;
11485     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
11486     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
11487     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11488
11489     SvANY(&PL_sv_no)            = new_XPVNV();
11490     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
11491     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11492                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11493     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
11494     SvCUR_set(&PL_sv_no, 0);
11495     SvLEN_set(&PL_sv_no, 1);
11496     SvIV_set(&PL_sv_no, 0);
11497     SvNV_set(&PL_sv_no, 0);
11498     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
11499
11500     SvANY(&PL_sv_yes)           = new_XPVNV();
11501     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
11502     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11503                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11504     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
11505     SvCUR_set(&PL_sv_yes, 1);
11506     SvLEN_set(&PL_sv_yes, 2);
11507     SvIV_set(&PL_sv_yes, 1);
11508     SvNV_set(&PL_sv_yes, 1);
11509     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
11510
11511     /* create (a non-shared!) shared string table */
11512     PL_strtab           = newHV();
11513     HvSHAREKEYS_off(PL_strtab);
11514     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
11515     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
11516
11517     PL_compiling = proto_perl->Icompiling;
11518
11519     /* These two PVs will be free'd special way so must set them same way op.c does */
11520     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
11521     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
11522
11523     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
11524     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
11525
11526     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
11527     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
11528     if (PL_compiling.cop_hints_hash) {
11529         HINTS_REFCNT_LOCK;
11530         PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
11531         HINTS_REFCNT_UNLOCK;
11532     }
11533     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
11534 #ifdef PERL_DEBUG_READONLY_OPS
11535     PL_slabs = NULL;
11536     PL_slab_count = 0;
11537 #endif
11538
11539     /* pseudo environmental stuff */
11540     PL_origargc         = proto_perl->Iorigargc;
11541     PL_origargv         = proto_perl->Iorigargv;
11542
11543     param->stashes      = newAV();  /* Setup array of objects to call clone on */
11544
11545     /* Set tainting stuff before PerlIO_debug can possibly get called */
11546     PL_tainting         = proto_perl->Itainting;
11547     PL_taint_warn       = proto_perl->Itaint_warn;
11548
11549 #ifdef PERLIO_LAYERS
11550     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
11551     PerlIO_clone(aTHX_ proto_perl, param);
11552 #endif
11553
11554     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
11555     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
11556     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
11557     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
11558     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
11559     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
11560
11561     /* switches */
11562     PL_minus_c          = proto_perl->Iminus_c;
11563     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
11564     PL_localpatches     = proto_perl->Ilocalpatches;
11565     PL_splitstr         = proto_perl->Isplitstr;
11566     PL_minus_n          = proto_perl->Iminus_n;
11567     PL_minus_p          = proto_perl->Iminus_p;
11568     PL_minus_l          = proto_perl->Iminus_l;
11569     PL_minus_a          = proto_perl->Iminus_a;
11570     PL_minus_E          = proto_perl->Iminus_E;
11571     PL_minus_F          = proto_perl->Iminus_F;
11572     PL_doswitches       = proto_perl->Idoswitches;
11573     PL_dowarn           = proto_perl->Idowarn;
11574     PL_doextract        = proto_perl->Idoextract;
11575     PL_sawampersand     = proto_perl->Isawampersand;
11576     PL_unsafe           = proto_perl->Iunsafe;
11577     PL_inplace          = SAVEPV(proto_perl->Iinplace);
11578     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
11579     PL_perldb           = proto_perl->Iperldb;
11580     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
11581     PL_exit_flags       = proto_perl->Iexit_flags;
11582
11583     /* magical thingies */
11584     /* XXX time(&PL_basetime) when asked for? */
11585     PL_basetime         = proto_perl->Ibasetime;
11586     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
11587
11588     PL_maxsysfd         = proto_perl->Imaxsysfd;
11589     PL_statusvalue      = proto_perl->Istatusvalue;
11590 #ifdef VMS
11591     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
11592 #else
11593     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
11594 #endif
11595     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
11596
11597     sv_setpvn(PERL_DEBUG_PAD(0), "", 0);        /* For regex debugging. */
11598     sv_setpvn(PERL_DEBUG_PAD(1), "", 0);        /* ext/re needs these */
11599     sv_setpvn(PERL_DEBUG_PAD(2), "", 0);        /* even without DEBUGGING. */
11600
11601    
11602     /* RE engine related */
11603     Zero(&PL_reg_state, 1, struct re_save_state);
11604     PL_reginterp_cnt    = 0;
11605     PL_regmatch_slab    = NULL;
11606     
11607     /* Clone the regex array */
11608     /* ORANGE FIXME for plugins, probably in the SV dup code.
11609        newSViv(PTR2IV(CALLREGDUPE(
11610        INT2PTR(REGEXP *, SvIVX(regex)), param))))
11611     */
11612     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
11613     PL_regex_pad = AvARRAY(PL_regex_padav);
11614
11615     /* shortcuts to various I/O objects */
11616     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
11617     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
11618     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
11619     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
11620     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
11621     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
11622
11623     /* shortcuts to regexp stuff */
11624     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
11625
11626     /* shortcuts to misc objects */
11627     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
11628
11629     /* shortcuts to debugging objects */
11630     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
11631     PL_DBline           = gv_dup(proto_perl->IDBline, param);
11632     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
11633     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
11634     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
11635     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
11636     PL_dbargs           = av_dup(proto_perl->Idbargs, param);
11637
11638     /* symbol tables */
11639     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
11640     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
11641     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
11642     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
11643     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
11644
11645     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
11646     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
11647     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
11648     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
11649     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
11650     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
11651     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
11652     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
11653
11654     PL_sub_generation   = proto_perl->Isub_generation;
11655     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
11656
11657     /* funky return mechanisms */
11658     PL_forkprocess      = proto_perl->Iforkprocess;
11659
11660     /* subprocess state */
11661     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
11662
11663     /* internal state */
11664     PL_maxo             = proto_perl->Imaxo;
11665     if (proto_perl->Iop_mask)
11666         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
11667     else
11668         PL_op_mask      = NULL;
11669     /* PL_asserting        = proto_perl->Iasserting; */
11670
11671     /* current interpreter roots */
11672     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
11673     OP_REFCNT_LOCK;
11674     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
11675     OP_REFCNT_UNLOCK;
11676     PL_main_start       = proto_perl->Imain_start;
11677     PL_eval_root        = proto_perl->Ieval_root;
11678     PL_eval_start       = proto_perl->Ieval_start;
11679
11680     /* runtime control stuff */
11681     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
11682
11683     PL_filemode         = proto_perl->Ifilemode;
11684     PL_lastfd           = proto_perl->Ilastfd;
11685     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
11686     PL_Argv             = NULL;
11687     PL_Cmd              = NULL;
11688     PL_gensym           = proto_perl->Igensym;
11689     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
11690     PL_laststatval      = proto_perl->Ilaststatval;
11691     PL_laststype        = proto_perl->Ilaststype;
11692     PL_mess_sv          = NULL;
11693
11694     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
11695
11696     /* interpreter atexit processing */
11697     PL_exitlistlen      = proto_perl->Iexitlistlen;
11698     if (PL_exitlistlen) {
11699         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11700         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
11701     }
11702     else
11703         PL_exitlist     = (PerlExitListEntry*)NULL;
11704
11705     PL_my_cxt_size = proto_perl->Imy_cxt_size;
11706     if (PL_my_cxt_size) {
11707         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
11708         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
11709 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11710         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
11711         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
11712 #endif
11713     }
11714     else {
11715         PL_my_cxt_list  = (void**)NULL;
11716 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
11717         PL_my_cxt_keys  = (const char**)NULL;
11718 #endif
11719     }
11720     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
11721     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
11722     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
11723
11724     PL_profiledata      = NULL;
11725
11726     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
11727
11728     PAD_CLONE_VARS(proto_perl, param);
11729
11730 #ifdef HAVE_INTERP_INTERN
11731     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
11732 #endif
11733
11734     /* more statics moved here */
11735     PL_generation       = proto_perl->Igeneration;
11736     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
11737
11738     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
11739     PL_in_clean_all     = proto_perl->Iin_clean_all;
11740
11741     PL_uid              = proto_perl->Iuid;
11742     PL_euid             = proto_perl->Ieuid;
11743     PL_gid              = proto_perl->Igid;
11744     PL_egid             = proto_perl->Iegid;
11745     PL_nomemok          = proto_perl->Inomemok;
11746     PL_an               = proto_perl->Ian;
11747     PL_evalseq          = proto_perl->Ievalseq;
11748     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
11749     PL_origalen         = proto_perl->Iorigalen;
11750 #ifdef PERL_USES_PL_PIDSTATUS
11751     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
11752 #endif
11753     PL_osname           = SAVEPV(proto_perl->Iosname);
11754     PL_sighandlerp      = proto_perl->Isighandlerp;
11755
11756     PL_runops           = proto_perl->Irunops;
11757
11758     PL_parser           = parser_dup(proto_perl->Iparser, param);
11759
11760     PL_subline          = proto_perl->Isubline;
11761     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
11762
11763 #ifdef FCRYPT
11764     PL_cryptseen        = proto_perl->Icryptseen;
11765 #endif
11766
11767     PL_hints            = proto_perl->Ihints;
11768
11769     PL_amagic_generation        = proto_perl->Iamagic_generation;
11770
11771 #ifdef USE_LOCALE_COLLATE
11772     PL_collation_ix     = proto_perl->Icollation_ix;
11773     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
11774     PL_collation_standard       = proto_perl->Icollation_standard;
11775     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
11776     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
11777 #endif /* USE_LOCALE_COLLATE */
11778
11779 #ifdef USE_LOCALE_NUMERIC
11780     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
11781     PL_numeric_standard = proto_perl->Inumeric_standard;
11782     PL_numeric_local    = proto_perl->Inumeric_local;
11783     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
11784 #endif /* !USE_LOCALE_NUMERIC */
11785
11786     /* utf8 character classes */
11787     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
11788     PL_utf8_alnumc      = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
11789     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
11790     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
11791     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
11792     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
11793     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
11794     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
11795     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
11796     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
11797     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
11798     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
11799     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
11800     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
11801     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
11802     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
11803     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
11804     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
11805     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
11806     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
11807
11808     /* Did the locale setup indicate UTF-8? */
11809     PL_utf8locale       = proto_perl->Iutf8locale;
11810     /* Unicode features (see perlrun/-C) */
11811     PL_unicode          = proto_perl->Iunicode;
11812
11813     /* Pre-5.8 signals control */
11814     PL_signals          = proto_perl->Isignals;
11815
11816     /* times() ticks per second */
11817     PL_clocktick        = proto_perl->Iclocktick;
11818
11819     /* Recursion stopper for PerlIO_find_layer */
11820     PL_in_load_module   = proto_perl->Iin_load_module;
11821
11822     /* sort() routine */
11823     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
11824
11825     /* Not really needed/useful since the reenrant_retint is "volatile",
11826      * but do it for consistency's sake. */
11827     PL_reentrant_retint = proto_perl->Ireentrant_retint;
11828
11829     /* Hooks to shared SVs and locks. */
11830     PL_sharehook        = proto_perl->Isharehook;
11831     PL_lockhook         = proto_perl->Ilockhook;
11832     PL_unlockhook       = proto_perl->Iunlockhook;
11833     PL_threadhook       = proto_perl->Ithreadhook;
11834     PL_destroyhook      = proto_perl->Idestroyhook;
11835
11836 #ifdef THREADS_HAVE_PIDS
11837     PL_ppid             = proto_perl->Ippid;
11838 #endif
11839
11840     /* swatch cache */
11841     PL_last_swash_hv    = NULL; /* reinits on demand */
11842     PL_last_swash_klen  = 0;
11843     PL_last_swash_key[0]= '\0';
11844     PL_last_swash_tmps  = (U8*)NULL;
11845     PL_last_swash_slen  = 0;
11846
11847     PL_glob_index       = proto_perl->Iglob_index;
11848     PL_srand_called     = proto_perl->Isrand_called;
11849     PL_bitcount         = NULL; /* reinits on demand */
11850
11851     if (proto_perl->Ipsig_pend) {
11852         Newxz(PL_psig_pend, SIG_SIZE, int);
11853     }
11854     else {
11855         PL_psig_pend    = (int*)NULL;
11856     }
11857
11858     if (proto_perl->Ipsig_ptr) {
11859         Newxz(PL_psig_ptr,  SIG_SIZE, SV*);
11860         Newxz(PL_psig_name, SIG_SIZE, SV*);
11861         for (i = 1; i < SIG_SIZE; i++) {
11862             PL_psig_ptr[i]  = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
11863             PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
11864         }
11865     }
11866     else {
11867         PL_psig_ptr     = (SV**)NULL;
11868         PL_psig_name    = (SV**)NULL;
11869     }
11870
11871     /* intrpvar.h stuff */
11872
11873     if (flags & CLONEf_COPY_STACKS) {
11874         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
11875         PL_tmps_ix              = proto_perl->Itmps_ix;
11876         PL_tmps_max             = proto_perl->Itmps_max;
11877         PL_tmps_floor           = proto_perl->Itmps_floor;
11878         Newxz(PL_tmps_stack, PL_tmps_max, SV*);
11879         i = 0;
11880         while (i <= PL_tmps_ix) {
11881             PL_tmps_stack[i]    = sv_dup_inc(proto_perl->Itmps_stack[i], param);
11882             ++i;
11883         }
11884
11885         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
11886         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
11887         Newxz(PL_markstack, i, I32);
11888         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
11889                                                   - proto_perl->Imarkstack);
11890         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
11891                                                   - proto_perl->Imarkstack);
11892         Copy(proto_perl->Imarkstack, PL_markstack,
11893              PL_markstack_ptr - PL_markstack + 1, I32);
11894
11895         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
11896          * NOTE: unlike the others! */
11897         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
11898         PL_scopestack_max       = proto_perl->Iscopestack_max;
11899         Newxz(PL_scopestack, PL_scopestack_max, I32);
11900         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
11901
11902         /* NOTE: si_dup() looks at PL_markstack */
11903         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
11904
11905         /* PL_curstack          = PL_curstackinfo->si_stack; */
11906         PL_curstack             = av_dup(proto_perl->Icurstack, param);
11907         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
11908
11909         /* next PUSHs() etc. set *(PL_stack_sp+1) */
11910         PL_stack_base           = AvARRAY(PL_curstack);
11911         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
11912                                                    - proto_perl->Istack_base);
11913         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
11914
11915         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
11916          * NOTE: unlike the others! */
11917         PL_savestack_ix         = proto_perl->Isavestack_ix;
11918         PL_savestack_max        = proto_perl->Isavestack_max;
11919         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
11920         PL_savestack            = ss_dup(proto_perl, param);
11921     }
11922     else {
11923         init_stacks();
11924         ENTER;                  /* perl_destruct() wants to LEAVE; */
11925
11926         /* although we're not duplicating the tmps stack, we should still
11927          * add entries for any SVs on the tmps stack that got cloned by a
11928          * non-refcount means (eg a temp in @_); otherwise they will be
11929          * orphaned
11930          */
11931         for (i = 0; i<= proto_perl->Itmps_ix; i++) {
11932             SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
11933                     proto_perl->Itmps_stack[i]);
11934             if (nsv && !SvREFCNT(nsv)) {
11935                 EXTEND_MORTAL(1);
11936                 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple(nsv);
11937             }
11938         }
11939     }
11940
11941     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
11942     PL_top_env          = &PL_start_env;
11943
11944     PL_op               = proto_perl->Iop;
11945
11946     PL_Sv               = NULL;
11947     PL_Xpv              = (XPV*)NULL;
11948     my_perl->Ina        = proto_perl->Ina;
11949
11950     PL_statbuf          = proto_perl->Istatbuf;
11951     PL_statcache        = proto_perl->Istatcache;
11952     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
11953     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
11954 #ifdef HAS_TIMES
11955     PL_timesbuf         = proto_perl->Itimesbuf;
11956 #endif
11957
11958     PL_tainted          = proto_perl->Itainted;
11959     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
11960     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
11961     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
11962     PL_ofs_sv           = sv_dup_inc(proto_perl->Iofs_sv, param);
11963     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
11964     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
11965     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
11966     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
11967     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
11968
11969     PL_restartop        = proto_perl->Irestartop;
11970     PL_in_eval          = proto_perl->Iin_eval;
11971     PL_delaymagic       = proto_perl->Idelaymagic;
11972     PL_dirty            = proto_perl->Idirty;
11973     PL_localizing       = proto_perl->Ilocalizing;
11974
11975     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
11976     PL_hv_fetch_ent_mh  = NULL;
11977     PL_modcount         = proto_perl->Imodcount;
11978     PL_lastgotoprobe    = NULL;
11979     PL_dumpindent       = proto_perl->Idumpindent;
11980
11981     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
11982     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
11983     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
11984     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
11985     PL_efloatbuf        = NULL;         /* reinits on demand */
11986     PL_efloatsize       = 0;                    /* reinits on demand */
11987
11988     /* regex stuff */
11989
11990     PL_screamfirst      = NULL;
11991     PL_screamnext       = NULL;
11992     PL_maxscream        = -1;                   /* reinits on demand */
11993     PL_lastscream       = NULL;
11994
11995
11996     PL_regdummy         = proto_perl->Iregdummy;
11997     PL_colorset         = 0;            /* reinits PL_colors[] */
11998     /*PL_colors[6]      = {0,0,0,0,0,0};*/
11999
12000
12001
12002     /* Pluggable optimizer */
12003     PL_peepp            = proto_perl->Ipeepp;
12004
12005     PL_stashcache       = newHV();
12006
12007     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
12008                                             proto_perl->Iwatchaddr);
12009     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
12010     if (PL_debug && PL_watchaddr) {
12011         PerlIO_printf(Perl_debug_log,
12012           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
12013           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
12014           PTR2UV(PL_watchok));
12015     }
12016
12017     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12018         ptr_table_free(PL_ptr_table);
12019         PL_ptr_table = NULL;
12020     }
12021
12022     /* Call the ->CLONE method, if it exists, for each of the stashes
12023        identified by sv_dup() above.
12024     */
12025     while(av_len(param->stashes) != -1) {
12026         HV* const stash = (HV*) av_shift(param->stashes);
12027         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12028         if (cloner && GvCV(cloner)) {
12029             dSP;
12030             ENTER;
12031             SAVETMPS;
12032             PUSHMARK(SP);
12033             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
12034             PUTBACK;
12035             call_sv((SV*)GvCV(cloner), G_DISCARD);
12036             FREETMPS;
12037             LEAVE;
12038         }
12039     }
12040
12041     SvREFCNT_dec(param->stashes);
12042
12043     /* orphaned? eg threads->new inside BEGIN or use */
12044     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12045         SvREFCNT_inc_simple_void(PL_compcv);
12046         SAVEFREESV(PL_compcv);
12047     }
12048
12049     return my_perl;
12050 }
12051
12052 #endif /* USE_ITHREADS */
12053
12054 /*
12055 =head1 Unicode Support
12056
12057 =for apidoc sv_recode_to_utf8
12058
12059 The encoding is assumed to be an Encode object, on entry the PV
12060 of the sv is assumed to be octets in that encoding, and the sv
12061 will be converted into Unicode (and UTF-8).
12062
12063 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12064 is not a reference, nothing is done to the sv.  If the encoding is not
12065 an C<Encode::XS> Encoding object, bad things will happen.
12066 (See F<lib/encoding.pm> and L<Encode>).
12067
12068 The PV of the sv is returned.
12069
12070 =cut */
12071
12072 char *
12073 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12074 {
12075     dVAR;
12076
12077     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12078
12079     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12080         SV *uni;
12081         STRLEN len;
12082         const char *s;
12083         dSP;
12084         ENTER;
12085         SAVETMPS;
12086         save_re_context();
12087         PUSHMARK(sp);
12088         EXTEND(SP, 3);
12089         XPUSHs(encoding);
12090         XPUSHs(sv);
12091 /*
12092   NI-S 2002/07/09
12093   Passing sv_yes is wrong - it needs to be or'ed set of constants
12094   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12095   remove converted chars from source.
12096
12097   Both will default the value - let them.
12098
12099         XPUSHs(&PL_sv_yes);
12100 */
12101         PUTBACK;
12102         call_method("decode", G_SCALAR);
12103         SPAGAIN;
12104         uni = POPs;
12105         PUTBACK;
12106         s = SvPV_const(uni, len);
12107         if (s != SvPVX_const(sv)) {
12108             SvGROW(sv, len + 1);
12109             Move(s, SvPVX(sv), len + 1, char);
12110             SvCUR_set(sv, len);
12111         }
12112         FREETMPS;
12113         LEAVE;
12114         SvUTF8_on(sv);
12115         return SvPVX(sv);
12116     }
12117     return SvPOKp(sv) ? SvPVX(sv) : NULL;
12118 }
12119
12120 /*
12121 =for apidoc sv_cat_decode
12122
12123 The encoding is assumed to be an Encode object, the PV of the ssv is
12124 assumed to be octets in that encoding and decoding the input starts
12125 from the position which (PV + *offset) pointed to.  The dsv will be
12126 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
12127 when the string tstr appears in decoding output or the input ends on
12128 the PV of the ssv. The value which the offset points will be modified
12129 to the last input position on the ssv.
12130
12131 Returns TRUE if the terminator was found, else returns FALSE.
12132
12133 =cut */
12134
12135 bool
12136 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12137                    SV *ssv, int *offset, char *tstr, int tlen)
12138 {
12139     dVAR;
12140     bool ret = FALSE;
12141
12142     PERL_ARGS_ASSERT_SV_CAT_DECODE;
12143
12144     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12145         SV *offsv;
12146         dSP;
12147         ENTER;
12148         SAVETMPS;
12149         save_re_context();
12150         PUSHMARK(sp);
12151         EXTEND(SP, 6);
12152         XPUSHs(encoding);
12153         XPUSHs(dsv);
12154         XPUSHs(ssv);
12155         offsv = newSViv(*offset);
12156         mXPUSHs(offsv);
12157         mXPUSHp(tstr, tlen);
12158         PUTBACK;
12159         call_method("cat_decode", G_SCALAR);
12160         SPAGAIN;
12161         ret = SvTRUE(TOPs);
12162         *offset = SvIV(offsv);
12163         PUTBACK;
12164         FREETMPS;
12165         LEAVE;
12166     }
12167     else
12168         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12169     return ret;
12170
12171 }
12172
12173 /* ---------------------------------------------------------------------
12174  *
12175  * support functions for report_uninit()
12176  */
12177
12178 /* the maxiumum size of array or hash where we will scan looking
12179  * for the undefined element that triggered the warning */
12180
12181 #define FUV_MAX_SEARCH_SIZE 1000
12182
12183 /* Look for an entry in the hash whose value has the same SV as val;
12184  * If so, return a mortal copy of the key. */
12185
12186 STATIC SV*
12187 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
12188 {
12189     dVAR;
12190     register HE **array;
12191     I32 i;
12192
12193     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12194
12195     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12196                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
12197         return NULL;
12198
12199     array = HvARRAY(hv);
12200
12201     for (i=HvMAX(hv); i>0; i--) {
12202         register HE *entry;
12203         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12204             if (HeVAL(entry) != val)
12205                 continue;
12206             if (    HeVAL(entry) == &PL_sv_undef ||
12207                     HeVAL(entry) == &PL_sv_placeholder)
12208                 continue;
12209             if (!HeKEY(entry))
12210                 return NULL;
12211             if (HeKLEN(entry) == HEf_SVKEY)
12212                 return sv_mortalcopy(HeKEY_sv(entry));
12213             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
12214         }
12215     }
12216     return NULL;
12217 }
12218
12219 /* Look for an entry in the array whose value has the same SV as val;
12220  * If so, return the index, otherwise return -1. */
12221
12222 STATIC I32
12223 S_find_array_subscript(pTHX_ AV *av, SV* val)
12224 {
12225     dVAR;
12226
12227     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12228
12229     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12230                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12231         return -1;
12232
12233     if (val != &PL_sv_undef) {
12234         SV ** const svp = AvARRAY(av);
12235         I32 i;
12236
12237         for (i=AvFILLp(av); i>=0; i--)
12238             if (svp[i] == val)
12239                 return i;
12240     }
12241     return -1;
12242 }
12243
12244 /* S_varname(): return the name of a variable, optionally with a subscript.
12245  * If gv is non-zero, use the name of that global, along with gvtype (one
12246  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12247  * targ.  Depending on the value of the subscript_type flag, return:
12248  */
12249
12250 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
12251 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
12252 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
12253 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
12254
12255 STATIC SV*
12256 S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
12257         SV* keyname, I32 aindex, int subscript_type)
12258 {
12259
12260     SV * const name = sv_newmortal();
12261     if (gv) {
12262         char buffer[2];
12263         buffer[0] = gvtype;
12264         buffer[1] = 0;
12265
12266         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
12267
12268         gv_fullname4(name, gv, buffer, 0);
12269
12270         if ((unsigned int)SvPVX(name)[1] <= 26) {
12271             buffer[0] = '^';
12272             buffer[1] = SvPVX(name)[1] + 'A' - 1;
12273
12274             /* Swap the 1 unprintable control character for the 2 byte pretty
12275                version - ie substr($name, 1, 1) = $buffer; */
12276             sv_insert(name, 1, 1, buffer, 2);
12277         }
12278     }
12279     else {
12280         CV * const cv = find_runcv(NULL);
12281         SV *sv;
12282         AV *av;
12283
12284         if (!cv || !CvPADLIST(cv))
12285             return NULL;
12286         av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
12287         sv = *av_fetch(av, targ, FALSE);
12288         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
12289     }
12290
12291     if (subscript_type == FUV_SUBSCRIPT_HASH) {
12292         SV * const sv = newSV(0);
12293         *SvPVX(name) = '$';
12294         Perl_sv_catpvf(aTHX_ name, "{%s}",
12295             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12296         SvREFCNT_dec(sv);
12297     }
12298     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12299         *SvPVX(name) = '$';
12300         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12301     }
12302     else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
12303         Perl_sv_insert(aTHX_ name, 0, 0,  STR_WITH_LEN("within "));
12304
12305     return name;
12306 }
12307
12308
12309 /*
12310 =for apidoc find_uninit_var
12311
12312 Find the name of the undefined variable (if any) that caused the operator o
12313 to issue a "Use of uninitialized value" warning.
12314 If match is true, only return a name if it's value matches uninit_sv.
12315 So roughly speaking, if a unary operator (such as OP_COS) generates a
12316 warning, then following the direct child of the op may yield an
12317 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12318 other hand, with OP_ADD there are two branches to follow, so we only print
12319 the variable name if we get an exact match.
12320
12321 The name is returned as a mortal SV.
12322
12323 Assumes that PL_op is the op that originally triggered the error, and that
12324 PL_comppad/PL_curpad points to the currently executing pad.
12325
12326 =cut
12327 */
12328
12329 STATIC SV *
12330 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
12331 {
12332     dVAR;
12333     SV *sv;
12334     AV *av;
12335     GV *gv;
12336     OP *o, *o2, *kid;
12337
12338     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12339                             uninit_sv == &PL_sv_placeholder)))
12340         return NULL;
12341
12342     switch (obase->op_type) {
12343
12344     case OP_RV2AV:
12345     case OP_RV2HV:
12346     case OP_PADAV:
12347     case OP_PADHV:
12348       {
12349         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12350         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12351         I32 index = 0;
12352         SV *keysv = NULL;
12353         int subscript_type = FUV_SUBSCRIPT_WITHIN;
12354
12355         if (pad) { /* @lex, %lex */
12356             sv = PAD_SVl(obase->op_targ);
12357             gv = NULL;
12358         }
12359         else {
12360             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12361             /* @global, %global */
12362                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12363                 if (!gv)
12364                     break;
12365                 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
12366             }
12367             else /* @{expr}, %{expr} */
12368                 return find_uninit_var(cUNOPx(obase)->op_first,
12369                                                     uninit_sv, match);
12370         }
12371
12372         /* attempt to find a match within the aggregate */
12373         if (hash) {
12374             keysv = find_hash_subscript((HV*)sv, uninit_sv);
12375             if (keysv)
12376                 subscript_type = FUV_SUBSCRIPT_HASH;
12377         }
12378         else {
12379             index = find_array_subscript((AV*)sv, uninit_sv);
12380             if (index >= 0)
12381                 subscript_type = FUV_SUBSCRIPT_ARRAY;
12382         }
12383
12384         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12385             break;
12386
12387         return varname(gv, hash ? '%' : '@', obase->op_targ,
12388                                     keysv, index, subscript_type);
12389       }
12390
12391     case OP_PADSV:
12392         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12393             break;
12394         return varname(NULL, '$', obase->op_targ,
12395                                     NULL, 0, FUV_SUBSCRIPT_NONE);
12396
12397     case OP_GVSV:
12398         gv = cGVOPx_gv(obase);
12399         if (!gv || (match && GvSV(gv) != uninit_sv))
12400             break;
12401         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
12402
12403     case OP_AELEMFAST:
12404         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12405             if (match) {
12406                 SV **svp;
12407                 av = (AV*)PAD_SV(obase->op_targ);
12408                 if (!av || SvRMAGICAL(av))
12409                     break;
12410                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12411                 if (!svp || *svp != uninit_sv)
12412                     break;
12413             }
12414             return varname(NULL, '$', obase->op_targ,
12415                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12416         }
12417         else {
12418             gv = cGVOPx_gv(obase);
12419             if (!gv)
12420                 break;
12421             if (match) {
12422                 SV **svp;
12423                 av = GvAV(gv);
12424                 if (!av || SvRMAGICAL(av))
12425                     break;
12426                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12427                 if (!svp || *svp != uninit_sv)
12428                     break;
12429             }
12430             return varname(gv, '$', 0,
12431                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12432         }
12433         break;
12434
12435     case OP_EXISTS:
12436         o = cUNOPx(obase)->op_first;
12437         if (!o || o->op_type != OP_NULL ||
12438                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12439             break;
12440         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
12441
12442     case OP_AELEM:
12443     case OP_HELEM:
12444         if (PL_op == obase)
12445             /* $a[uninit_expr] or $h{uninit_expr} */
12446             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
12447
12448         gv = NULL;
12449         o = cBINOPx(obase)->op_first;
12450         kid = cBINOPx(obase)->op_last;
12451
12452         /* get the av or hv, and optionally the gv */
12453         sv = NULL;
12454         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
12455             sv = PAD_SV(o->op_targ);
12456         }
12457         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
12458                 && cUNOPo->op_first->op_type == OP_GV)
12459         {
12460             gv = cGVOPx_gv(cUNOPo->op_first);
12461             if (!gv)
12462                 break;
12463             sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
12464         }
12465         if (!sv)
12466             break;
12467
12468         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
12469             /* index is constant */
12470             if (match) {
12471                 if (SvMAGICAL(sv))
12472                     break;
12473                 if (obase->op_type == OP_HELEM) {
12474                     HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
12475                     if (!he || HeVAL(he) != uninit_sv)
12476                         break;
12477                 }
12478                 else {
12479                     SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
12480                     if (!svp || *svp != uninit_sv)
12481                         break;
12482                 }
12483             }
12484             if (obase->op_type == OP_HELEM)
12485                 return varname(gv, '%', o->op_targ,
12486                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
12487             else
12488                 return varname(gv, '@', o->op_targ, NULL,
12489                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
12490         }
12491         else  {
12492             /* index is an expression;
12493              * attempt to find a match within the aggregate */
12494             if (obase->op_type == OP_HELEM) {
12495                 SV * const keysv = find_hash_subscript((HV*)sv, uninit_sv);
12496                 if (keysv)
12497                     return varname(gv, '%', o->op_targ,
12498                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
12499             }
12500             else {
12501                 const I32 index = find_array_subscript((AV*)sv, uninit_sv);
12502                 if (index >= 0)
12503                     return varname(gv, '@', o->op_targ,
12504                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
12505             }
12506             if (match)
12507                 break;
12508             return varname(gv,
12509                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
12510                 ? '@' : '%',
12511                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
12512         }
12513         break;
12514
12515     case OP_AASSIGN:
12516         /* only examine RHS */
12517         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
12518
12519     case OP_OPEN:
12520         o = cUNOPx(obase)->op_first;
12521         if (o->op_type == OP_PUSHMARK)
12522             o = o->op_sibling;
12523
12524         if (!o->op_sibling) {
12525             /* one-arg version of open is highly magical */
12526
12527             if (o->op_type == OP_GV) { /* open FOO; */
12528                 gv = cGVOPx_gv(o);
12529                 if (match && GvSV(gv) != uninit_sv)
12530                     break;
12531                 return varname(gv, '$', 0,
12532                             NULL, 0, FUV_SUBSCRIPT_NONE);
12533             }
12534             /* other possibilities not handled are:
12535              * open $x; or open my $x;  should return '${*$x}'
12536              * open expr;               should return '$'.expr ideally
12537              */
12538              break;
12539         }
12540         goto do_op;
12541
12542     /* ops where $_ may be an implicit arg */
12543     case OP_TRANS:
12544     case OP_SUBST:
12545     case OP_MATCH:
12546         if ( !(obase->op_flags & OPf_STACKED)) {
12547             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
12548                                  ? PAD_SVl(obase->op_targ)
12549                                  : DEFSV))
12550             {
12551                 sv = sv_newmortal();
12552                 sv_setpvn(sv, "$_", 2);
12553                 return sv;
12554             }
12555         }
12556         goto do_op;
12557
12558     case OP_PRTF:
12559     case OP_PRINT:
12560     case OP_SAY:
12561         /* skip filehandle as it can't produce 'undef' warning  */
12562         o = cUNOPx(obase)->op_first;
12563         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
12564             o = o->op_sibling->op_sibling;
12565         goto do_op2;
12566
12567
12568     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
12569     case OP_RV2SV:
12570     case OP_CUSTOM:
12571         match = 1; /* XS or custom code could trigger random warnings */
12572         goto do_op;
12573
12574     case OP_ENTERSUB:
12575     case OP_GOTO:
12576         /* XXX tmp hack: these two may call an XS sub, and currently
12577           XS subs don't have a SUB entry on the context stack, so CV and
12578           pad determination goes wrong, and BAD things happen. So, just
12579           don't try to determine the value under those circumstances.
12580           Need a better fix at dome point. DAPM 11/2007 */
12581         break;
12582
12583     case OP_POS:
12584         /* def-ness of rval pos() is independent of the def-ness of its arg */
12585         if ( !(obase->op_flags & OPf_MOD))
12586             break;
12587
12588     case OP_SCHOMP:
12589     case OP_CHOMP:
12590         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
12591             return newSVpvs_flags("${$/}", SVs_TEMP);
12592         /*FALLTHROUGH*/
12593
12594     default:
12595     do_op:
12596         if (!(obase->op_flags & OPf_KIDS))
12597             break;
12598         o = cUNOPx(obase)->op_first;
12599         
12600     do_op2:
12601         if (!o)
12602             break;
12603
12604         /* if all except one arg are constant, or have no side-effects,
12605          * or are optimized away, then it's unambiguous */
12606         o2 = NULL;
12607         for (kid=o; kid; kid = kid->op_sibling) {
12608             if (kid) {
12609                 const OPCODE type = kid->op_type;
12610                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
12611                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
12612                   || (type == OP_PUSHMARK)
12613                 )
12614                 continue;
12615             }
12616             if (o2) { /* more than one found */
12617                 o2 = NULL;
12618                 break;
12619             }
12620             o2 = kid;
12621         }
12622         if (o2)
12623             return find_uninit_var(o2, uninit_sv, match);
12624
12625         /* scan all args */
12626         while (o) {
12627             sv = find_uninit_var(o, uninit_sv, 1);
12628             if (sv)
12629                 return sv;
12630             o = o->op_sibling;
12631         }
12632         break;
12633     }
12634     return NULL;
12635 }
12636
12637
12638 /*
12639 =for apidoc report_uninit
12640
12641 Print appropriate "Use of uninitialized variable" warning
12642
12643 =cut
12644 */
12645
12646 void
12647 Perl_report_uninit(pTHX_ SV* uninit_sv)
12648 {
12649     dVAR;
12650     if (PL_op) {
12651         SV* varname = NULL;
12652         if (uninit_sv) {
12653             varname = find_uninit_var(PL_op, uninit_sv,0);
12654             if (varname)
12655                 sv_insert(varname, 0, 0, " ", 1);
12656         }
12657         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12658                 varname ? SvPV_nolen_const(varname) : "",
12659                 " in ", OP_DESC(PL_op));
12660     }
12661     else
12662         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
12663                     "", "", "");
12664 }
12665
12666 /*
12667  * Local variables:
12668  * c-indentation-style: bsd
12669  * c-basic-offset: 4
12670  * indent-tabs-mode: t
12671  * End:
12672  *
12673  * ex: set ts=8 sts=4 sw=4 noet:
12674  */