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