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