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