c0f7ee342bf1b31ab25a454b77abfcca522c1050
[p5sagit/p5-mst-13.2.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34
35 #define FCALL *f
36
37 #ifdef __Lynx__
38 /* Missing proto on LynxOS */
39   char *gconvert(double, int, int,  char *);
40 #endif
41
42 #ifdef PERL_UTF8_CACHE_ASSERT
43 /* if adding more checks watch out for the following tests:
44  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
45  *   lib/utf8.t lib/Unicode/Collate/t/index.t
46  * --jhi
47  */
48 #   define ASSERT_UTF8_CACHE(cache) \
49     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
50                               assert((cache)[2] <= (cache)[3]); \
51                               assert((cache)[3] <= (cache)[1]);} \
52                               } STMT_END
53 #else
54 #   define ASSERT_UTF8_CACHE(cache) NOOP
55 #endif
56
57 #ifdef PERL_OLD_COPY_ON_WRITE
58 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
59 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
60 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
61    on-write.  */
62 #endif
63
64 /* ============================================================================
65
66 =head1 Allocation and deallocation of SVs.
67
68 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
69 sv, av, hv...) contains type and reference count information, and for
70 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
71 contains fields specific to each type.  Some types store all they need
72 in the head, so don't have a body.
73
74 In all but the most memory-paranoid configuations (ex: PURIFY), heads
75 and bodies are allocated out of arenas, which by default are
76 approximately 4K chunks of memory parcelled up into N heads or bodies.
77 Sv-bodies are allocated by their sv-type, guaranteeing size
78 consistency needed to allocate safely from arrays.
79
80 For SV-heads, the first slot in each arena is reserved, and holds a
81 link to the next arena, some flags, and a note of the number of slots.
82 Snaked through each arena chain is a linked list of free items; when
83 this becomes empty, an extra arena is allocated and divided up into N
84 items which are threaded into the free list.
85
86 SV-bodies are similar, but they use arena-sets by default, which
87 separate the link and info from the arena itself, and reclaim the 1st
88 slot in the arena.  SV-bodies are further described later.
89
90 The following global variables are associated with arenas:
91
92     PL_sv_arenaroot     pointer to list of SV arenas
93     PL_sv_root          pointer to list of free SV structures
94
95     PL_body_arenas      head of linked-list of body arenas
96     PL_body_roots[]     array of pointers to list of free bodies of svtype
97                         arrays are indexed by the svtype needed
98
99 A few special SV heads are not allocated from an arena, but are
100 instead directly created in the interpreter structure, eg PL_sv_undef.
101 The size of arenas can be changed from the default by setting
102 PERL_ARENA_SIZE appropriately at compile time.
103
104 The SV arena serves the secondary purpose of allowing still-live SVs
105 to be located and destroyed during final cleanup.
106
107 At the lowest level, the macros new_SV() and del_SV() grab and free
108 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
109 to return the SV to the free list with error checking.) new_SV() calls
110 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
111 SVs in the free list have their SvTYPE field set to all ones.
112
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
116
117 The function visit() scans the SV arenas list, and calls a specified
118 function for each SV it finds which is still live - ie which has an SvTYPE
119 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
120 following functions (specified as [function that calls visit()] / [function
121 called by visit() for each SV]):
122
123     sv_report_used() / do_report_used()
124                         dump all remaining SVs (debugging aid)
125
126     sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
127                         Attempt to free all objects pointed to by RVs,
128                         and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
129                         try to do the same for all objects indirectly
130                         referenced by typeglobs too.  Called once from
131                         perl_destruct(), prior to calling sv_clean_all()
132                         below.
133
134     sv_clean_all() / do_clean_all()
135                         SvREFCNT_dec(sv) each remaining SV, possibly
136                         triggering an sv_free(). It also sets the
137                         SVf_BREAK flag on the SV to indicate that the
138                         refcnt has been artificially lowered, and thus
139                         stopping sv_free() from giving spurious warnings
140                         about SVs which unexpectedly have a refcnt
141                         of zero.  called repeatedly from perl_destruct()
142                         until there are no SVs left.
143
144 =head2 Arena allocator API Summary
145
146 Private API to rest of sv.c
147
148     new_SV(),  del_SV(),
149
150     new_XIV(), del_XIV(),
151     new_XNV(), del_XNV(),
152     etc
153
154 Public API:
155
156     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
157
158 =cut
159
160  * ========================================================================= */
161
162 /*
163  * "A time to plant, and a time to uproot what was planted..."
164  */
165
166 void
167 Perl_offer_nice_chunk(pTHX_ void *const chunk, const U32 chunk_size)
168 {
169     dVAR;
170     void *new_chunk;
171     U32 new_chunk_size;
172
173     PERL_ARGS_ASSERT_OFFER_NICE_CHUNK;
174
175     new_chunk = (void *)(chunk);
176     new_chunk_size = (chunk_size);
177     if (new_chunk_size > PL_nice_chunk_size) {
178         Safefree(PL_nice_chunk);
179         PL_nice_chunk = (char *) new_chunk;
180         PL_nice_chunk_size = new_chunk_size;
181     } else {
182         Safefree(chunk);
183     }
184 }
185
186 #ifdef PERL_MEM_LOG
187 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
188             Perl_mem_log_new_sv(sv, file, line, func)
189 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
190             Perl_mem_log_del_sv(sv, file, line, func)
191 #else
192 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
193 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
194 #endif
195
196 #ifdef DEBUG_LEAKING_SCALARS
197 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
198 #  define DEBUG_SV_SERIAL(sv)                                               \
199     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
200             PTR2UV(sv), (long)(sv)->sv_debug_serial))
201 #else
202 #  define FREE_SV_DEBUG_FILE(sv)
203 #  define DEBUG_SV_SERIAL(sv)   NOOP
204 #endif
205
206 #ifdef PERL_POISON
207 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
208 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
209 /* Whilst I'd love to do this, it seems that things like to check on
210    unreferenced scalars
211 #  define POSION_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
212 */
213 #  define POSION_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
214                                 PoisonNew(&SvREFCNT(sv), 1, U32)
215 #else
216 #  define SvARENA_CHAIN(sv)     SvANY(sv)
217 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
218 #  define POSION_SV_HEAD(sv)
219 #endif
220
221 /* Mark an SV head as unused, and add to free list.
222  *
223  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
224  * its refcount artificially decremented during global destruction, so
225  * there may be dangling pointers to it. The last thing we want in that
226  * case is for it to be reused. */
227
228 #define plant_SV(p) \
229     STMT_START {                                        \
230         const U32 old_flags = SvFLAGS(p);                       \
231         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
232         DEBUG_SV_SERIAL(p);                             \
233         FREE_SV_DEBUG_FILE(p);                          \
234         POSION_SV_HEAD(p);                              \
235         SvFLAGS(p) = SVTYPEMASK;                        \
236         if (!(old_flags & SVf_BREAK)) {         \
237             SvARENA_CHAIN_SET(p, PL_sv_root);   \
238             PL_sv_root = (p);                           \
239         }                                               \
240         --PL_sv_count;                                  \
241     } STMT_END
242
243 #define uproot_SV(p) \
244     STMT_START {                                        \
245         (p) = PL_sv_root;                               \
246         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
247         ++PL_sv_count;                                  \
248     } STMT_END
249
250
251 /* make some more SVs by adding another arena */
252
253 STATIC SV*
254 S_more_sv(pTHX)
255 {
256     dVAR;
257     SV* sv;
258
259     if (PL_nice_chunk) {
260         sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
261         PL_nice_chunk = NULL;
262         PL_nice_chunk_size = 0;
263     }
264     else {
265         char *chunk;                /* must use New here to match call to */
266         Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
267         sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
268     }
269     uproot_SV(sv);
270     return sv;
271 }
272
273 /* new_SV(): return a new, empty SV head */
274
275 #ifdef DEBUG_LEAKING_SCALARS
276 /* provide a real function for a debugger to play with */
277 STATIC SV*
278 S_new_SV(pTHX_ const char *file, int line, const char *func)
279 {
280     SV* sv;
281
282     if (PL_sv_root)
283         uproot_SV(sv);
284     else
285         sv = S_more_sv(aTHX);
286     SvANY(sv) = 0;
287     SvREFCNT(sv) = 1;
288     SvFLAGS(sv) = 0;
289     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
290     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
291                 ? PL_parser->copline
292                 :  PL_curcop
293                     ? CopLINE(PL_curcop)
294                     : 0
295             );
296     sv->sv_debug_inpad = 0;
297     sv->sv_debug_cloned = 0;
298     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
299
300     sv->sv_debug_serial = PL_sv_serial++;
301
302     MEM_LOG_NEW_SV(sv, file, line, func);
303     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
304             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
305
306     return sv;
307 }
308 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
309
310 #else
311 #  define new_SV(p) \
312     STMT_START {                                        \
313         if (PL_sv_root)                                 \
314             uproot_SV(p);                               \
315         else                                            \
316             (p) = S_more_sv(aTHX);                      \
317         SvANY(p) = 0;                                   \
318         SvREFCNT(p) = 1;                                \
319         SvFLAGS(p) = 0;                                 \
320         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
321     } STMT_END
322 #endif
323
324
325 /* del_SV(): return an empty SV head to the free list */
326
327 #ifdef DEBUGGING
328
329 #define del_SV(p) \
330     STMT_START {                                        \
331         if (DEBUG_D_TEST)                               \
332             del_sv(p);                                  \
333         else                                            \
334             plant_SV(p);                                \
335     } STMT_END
336
337 STATIC void
338 S_del_sv(pTHX_ SV *p)
339 {
340     dVAR;
341
342     PERL_ARGS_ASSERT_DEL_SV;
343
344     if (DEBUG_D_TEST) {
345         SV* sva;
346         bool ok = 0;
347         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
348             const SV * const sv = sva + 1;
349             const SV * const svend = &sva[SvREFCNT(sva)];
350             if (p >= sv && p < svend) {
351                 ok = 1;
352                 break;
353             }
354         }
355         if (!ok) {
356             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
357                              "Attempt to free non-arena SV: 0x%"UVxf
358                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
359             return;
360         }
361     }
362     plant_SV(p);
363 }
364
365 #else /* ! DEBUGGING */
366
367 #define del_SV(p)   plant_SV(p)
368
369 #endif /* DEBUGGING */
370
371
372 /*
373 =head1 SV Manipulation Functions
374
375 =for apidoc sv_add_arena
376
377 Given a chunk of memory, link it to the head of the list of arenas,
378 and split it into a list of free SVs.
379
380 =cut
381 */
382
383 static void
384 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
385 {
386     dVAR;
387     SV *const sva = MUTABLE_SV(ptr);
388     register SV* sv;
389     register SV* svend;
390
391     PERL_ARGS_ASSERT_SV_ADD_ARENA;
392
393     /* The first SV in an arena isn't an SV. */
394     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
395     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
396     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
397
398     PL_sv_arenaroot = sva;
399     PL_sv_root = sva + 1;
400
401     svend = &sva[SvREFCNT(sva) - 1];
402     sv = sva + 1;
403     while (sv < svend) {
404         SvARENA_CHAIN_SET(sv, (sv + 1));
405 #ifdef DEBUGGING
406         SvREFCNT(sv) = 0;
407 #endif
408         /* Must always set typemask because it's always checked in on cleanup
409            when the arenas are walked looking for objects.  */
410         SvFLAGS(sv) = SVTYPEMASK;
411         sv++;
412     }
413     SvARENA_CHAIN_SET(sv, 0);
414 #ifdef DEBUGGING
415     SvREFCNT(sv) = 0;
416 #endif
417     SvFLAGS(sv) = SVTYPEMASK;
418 }
419
420 /* visit(): call the named function for each non-free SV in the arenas
421  * whose flags field matches the flags/mask args. */
422
423 STATIC I32
424 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
425 {
426     dVAR;
427     SV* sva;
428     I32 visited = 0;
429
430     PERL_ARGS_ASSERT_VISIT;
431
432     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
433         register const SV * const svend = &sva[SvREFCNT(sva)];
434         register SV* sv;
435         for (sv = sva + 1; sv < svend; ++sv) {
436             if (SvTYPE(sv) != SVTYPEMASK
437                     && (sv->sv_flags & mask) == flags
438                     && SvREFCNT(sv))
439             {
440                 (FCALL)(aTHX_ sv);
441                 ++visited;
442             }
443         }
444     }
445     return visited;
446 }
447
448 #ifdef DEBUGGING
449
450 /* called by sv_report_used() for each live SV */
451
452 static void
453 do_report_used(pTHX_ SV *const sv)
454 {
455     if (SvTYPE(sv) != SVTYPEMASK) {
456         PerlIO_printf(Perl_debug_log, "****\n");
457         sv_dump(sv);
458     }
459 }
460 #endif
461
462 /*
463 =for apidoc sv_report_used
464
465 Dump the contents of all SVs not yet freed. (Debugging aid).
466
467 =cut
468 */
469
470 void
471 Perl_sv_report_used(pTHX)
472 {
473 #ifdef DEBUGGING
474     visit(do_report_used, 0, 0);
475 #else
476     PERL_UNUSED_CONTEXT;
477 #endif
478 }
479
480 /* called by sv_clean_objs() for each live SV */
481
482 static void
483 do_clean_objs(pTHX_ SV *const ref)
484 {
485     dVAR;
486     assert (SvROK(ref));
487     {
488         SV * const target = SvRV(ref);
489         if (SvOBJECT(target)) {
490             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
491             if (SvWEAKREF(ref)) {
492                 sv_del_backref(target, ref);
493                 SvWEAKREF_off(ref);
494                 SvRV_set(ref, NULL);
495             } else {
496                 SvROK_off(ref);
497                 SvRV_set(ref, NULL);
498                 SvREFCNT_dec(target);
499             }
500         }
501     }
502
503     /* XXX Might want to check arrays, etc. */
504 }
505
506 /* called by sv_clean_objs() for each live SV */
507
508 #ifndef DISABLE_DESTRUCTOR_KLUDGE
509 static void
510 do_clean_named_objs(pTHX_ SV *const sv)
511 {
512     dVAR;
513     assert(SvTYPE(sv) == SVt_PVGV);
514     assert(isGV_with_GP(sv));
515     if (GvGP(sv)) {
516         if ((
517 #ifdef PERL_DONT_CREATE_GVSV
518              GvSV(sv) &&
519 #endif
520              SvOBJECT(GvSV(sv))) ||
521              (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
522              (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
523              /* In certain rare cases GvIOp(sv) can be NULL, which would make SvOBJECT(GvIO(sv)) dereference NULL. */
524              (GvIO(sv) ? (SvFLAGS(GvIOp(sv)) & SVs_OBJECT) : 0) ||
525              (GvCV(sv) && SvOBJECT(GvCV(sv))) )
526         {
527             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
528             SvFLAGS(sv) |= SVf_BREAK;
529             SvREFCNT_dec(sv);
530         }
531     }
532 }
533 #endif
534
535 /*
536 =for apidoc sv_clean_objs
537
538 Attempt to destroy all objects not yet freed
539
540 =cut
541 */
542
543 void
544 Perl_sv_clean_objs(pTHX)
545 {
546     dVAR;
547     PL_in_clean_objs = TRUE;
548     visit(do_clean_objs, SVf_ROK, SVf_ROK);
549 #ifndef DISABLE_DESTRUCTOR_KLUDGE
550     /* some barnacles may yet remain, clinging to typeglobs */
551     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
552 #endif
553     PL_in_clean_objs = FALSE;
554 }
555
556 /* called by sv_clean_all() for each live SV */
557
558 static void
559 do_clean_all(pTHX_ SV *const sv)
560 {
561     dVAR;
562     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
563         /* don't clean pid table and strtab */
564         return;
565     }
566     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
567     SvFLAGS(sv) |= SVf_BREAK;
568     SvREFCNT_dec(sv);
569 }
570
571 /*
572 =for apidoc sv_clean_all
573
574 Decrement the refcnt of each remaining SV, possibly triggering a
575 cleanup. This function may have to be called multiple times to free
576 SVs which are in complex self-referential hierarchies.
577
578 =cut
579 */
580
581 I32
582 Perl_sv_clean_all(pTHX)
583 {
584     dVAR;
585     I32 cleaned;
586     PL_in_clean_all = TRUE;
587     cleaned = visit(do_clean_all, 0,0);
588     PL_in_clean_all = FALSE;
589     return cleaned;
590 }
591
592 /*
593   ARENASETS: a meta-arena implementation which separates arena-info
594   into struct arena_set, which contains an array of struct
595   arena_descs, each holding info for a single arena.  By separating
596   the meta-info from the arena, we recover the 1st slot, formerly
597   borrowed for list management.  The arena_set is about the size of an
598   arena, avoiding the needless malloc overhead of a naive linked-list.
599
600   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
601   memory in the last arena-set (1/2 on average).  In trade, we get
602   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
603   smaller types).  The recovery of the wasted space allows use of
604   small arenas for large, rare body types, by changing array* fields
605   in body_details_by_type[] below.
606 */
607 struct arena_desc {
608     char       *arena;          /* the raw storage, allocated aligned */
609     size_t      size;           /* its size ~4k typ */
610     svtype      utype;          /* bodytype stored in arena */
611 };
612
613 struct arena_set;
614
615 /* Get the maximum number of elements in set[] such that struct arena_set
616    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
617    therefore likely to be 1 aligned memory page.  */
618
619 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
620                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
621
622 struct arena_set {
623     struct arena_set* next;
624     unsigned int   set_size;    /* ie ARENAS_PER_SET */
625     unsigned int   curr;        /* index of next available arena-desc */
626     struct arena_desc set[ARENAS_PER_SET];
627 };
628
629 /*
630 =for apidoc sv_free_arenas
631
632 Deallocate the memory used by all arenas. Note that all the individual SV
633 heads and bodies within the arenas must already have been freed.
634
635 =cut
636 */
637 void
638 Perl_sv_free_arenas(pTHX)
639 {
640     dVAR;
641     SV* sva;
642     SV* svanext;
643     unsigned int i;
644
645     /* Free arenas here, but be careful about fake ones.  (We assume
646        contiguity of the fake ones with the corresponding real ones.) */
647
648     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
649         svanext = MUTABLE_SV(SvANY(sva));
650         while (svanext && SvFAKE(svanext))
651             svanext = MUTABLE_SV(SvANY(svanext));
652
653         if (!SvFAKE(sva))
654             Safefree(sva);
655     }
656
657     {
658         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
659
660         while (aroot) {
661             struct arena_set *current = aroot;
662             i = aroot->curr;
663             while (i--) {
664                 assert(aroot->set[i].arena);
665                 Safefree(aroot->set[i].arena);
666             }
667             aroot = aroot->next;
668             Safefree(current);
669         }
670     }
671     PL_body_arenas = 0;
672
673     i = PERL_ARENA_ROOTS_SIZE;
674     while (i--)
675         PL_body_roots[i] = 0;
676
677     Safefree(PL_nice_chunk);
678     PL_nice_chunk = NULL;
679     PL_nice_chunk_size = 0;
680     PL_sv_arenaroot = 0;
681     PL_sv_root = 0;
682 }
683
684 /*
685   Here are mid-level routines that manage the allocation of bodies out
686   of the various arenas.  There are 5 kinds of arenas:
687
688   1. SV-head arenas, which are discussed and handled above
689   2. regular body arenas
690   3. arenas for reduced-size bodies
691   4. Hash-Entry arenas
692
693   Arena types 2 & 3 are chained by body-type off an array of
694   arena-root pointers, which is indexed by svtype.  Some of the
695   larger/less used body types are malloced singly, since a large
696   unused block of them is wasteful.  Also, several svtypes dont have
697   bodies; the data fits into the sv-head itself.  The arena-root
698   pointer thus has a few unused root-pointers (which may be hijacked
699   later for arena types 4,5)
700
701   3 differs from 2 as an optimization; some body types have several
702   unused fields in the front of the structure (which are kept in-place
703   for consistency).  These bodies can be allocated in smaller chunks,
704   because the leading fields arent accessed.  Pointers to such bodies
705   are decremented to point at the unused 'ghost' memory, knowing that
706   the pointers are used with offsets to the real memory.
707
708   HE, HEK arenas are managed separately, with separate code, but may
709   be merge-able later..
710 */
711
712 /* get_arena(size): this creates custom-sized arenas
713    TBD: export properly for hv.c: S_more_he().
714 */
715 void*
716 Perl_get_arena(pTHX_ const size_t arena_size, const svtype bodytype)
717 {
718     dVAR;
719     struct arena_desc* adesc;
720     struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
721     unsigned int curr;
722
723     /* shouldnt need this
724     if (!arena_size)    arena_size = PERL_ARENA_SIZE;
725     */
726
727     /* may need new arena-set to hold new arena */
728     if (!aroot || aroot->curr >= aroot->set_size) {
729         struct arena_set *newroot;
730         Newxz(newroot, 1, struct arena_set);
731         newroot->set_size = ARENAS_PER_SET;
732         newroot->next = aroot;
733         aroot = newroot;
734         PL_body_arenas = (void *) newroot;
735         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
736     }
737
738     /* ok, now have arena-set with at least 1 empty/available arena-desc */
739     curr = aroot->curr++;
740     adesc = &(aroot->set[curr]);
741     assert(!adesc->arena);
742     
743     Newx(adesc->arena, arena_size, char);
744     adesc->size = arena_size;
745     adesc->utype = bodytype;
746     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
747                           curr, (void*)adesc->arena, (UV)arena_size));
748
749     return adesc->arena;
750 }
751
752
753 /* return a thing to the free list */
754
755 #define del_body(thing, root)                   \
756     STMT_START {                                \
757         void ** const thing_copy = (void **)thing;\
758         *thing_copy = *root;                    \
759         *root = (void*)thing_copy;              \
760     } STMT_END
761
762 /* 
763
764 =head1 SV-Body Allocation
765
766 Allocation of SV-bodies is similar to SV-heads, differing as follows;
767 the allocation mechanism is used for many body types, so is somewhat
768 more complicated, it uses arena-sets, and has no need for still-live
769 SV detection.
770
771 At the outermost level, (new|del)_X*V macros return bodies of the
772 appropriate type.  These macros call either (new|del)_body_type or
773 (new|del)_body_allocated macro pairs, depending on specifics of the
774 type.  Most body types use the former pair, the latter pair is used to
775 allocate body types with "ghost fields".
776
777 "ghost fields" are fields that are unused in certain types, and
778 consequently don't need to actually exist.  They are declared because
779 they're part of a "base type", which allows use of functions as
780 methods.  The simplest examples are AVs and HVs, 2 aggregate types
781 which don't use the fields which support SCALAR semantics.
782
783 For these types, the arenas are carved up into appropriately sized
784 chunks, we thus avoid wasted memory for those unaccessed members.
785 When bodies are allocated, we adjust the pointer back in memory by the
786 size of the part not allocated, so it's as if we allocated the full
787 structure.  (But things will all go boom if you write to the part that
788 is "not there", because you'll be overwriting the last members of the
789 preceding structure in memory.)
790
791 We calculate the correction using the STRUCT_OFFSET macro on the first
792 member present. If the allocated structure is smaller (no initial NV
793 actually allocated) then the net effect is to subtract the size of the NV
794 from the pointer, to return a new pointer as if an initial NV were actually
795 allocated. (We were using structures named *_allocated for this, but
796 this turned out to be a subtle bug, because a structure without an NV
797 could have a lower alignment constraint, but the compiler is allowed to
798 optimised accesses based on the alignment constraint of the actual pointer
799 to the full structure, for example, using a single 64 bit load instruction
800 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
801
802 This is the same trick as was used for NV and IV bodies. Ironically it
803 doesn't need to be used for NV bodies any more, because NV is now at
804 the start of the structure. IV bodies don't need it either, because
805 they are no longer allocated.
806
807 In turn, the new_body_* allocators call S_new_body(), which invokes
808 new_body_inline macro, which takes a lock, and takes a body off the
809 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
810 necessary to refresh an empty list.  Then the lock is released, and
811 the body is returned.
812
813 S_more_bodies calls get_arena(), and carves it up into an array of N
814 bodies, which it strings into a linked list.  It looks up arena-size
815 and body-size from the body_details table described below, thus
816 supporting the multiple body-types.
817
818 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
819 the (new|del)_X*V macros are mapped directly to malloc/free.
820
821 */
822
823 /* 
824
825 For each sv-type, struct body_details bodies_by_type[] carries
826 parameters which control these aspects of SV handling:
827
828 Arena_size determines whether arenas are used for this body type, and if
829 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
830 zero, forcing individual mallocs and frees.
831
832 Body_size determines how big a body is, and therefore how many fit into
833 each arena.  Offset carries the body-pointer adjustment needed for
834 "ghost fields", and is used in *_allocated macros.
835
836 But its main purpose is to parameterize info needed in
837 Perl_sv_upgrade().  The info here dramatically simplifies the function
838 vs the implementation in 5.8.8, making it table-driven.  All fields
839 are used for this, except for arena_size.
840
841 For the sv-types that have no bodies, arenas are not used, so those
842 PL_body_roots[sv_type] are unused, and can be overloaded.  In
843 something of a special case, SVt_NULL is borrowed for HE arenas;
844 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
845 bodies_by_type[SVt_NULL] slot is not used, as the table is not
846 available in hv.c.
847
848 */
849
850 struct body_details {
851     U8 body_size;       /* Size to allocate  */
852     U8 copy;            /* Size of structure to copy (may be shorter)  */
853     U8 offset;
854     unsigned int type : 4;          /* We have space for a sanity check.  */
855     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
856     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
857     unsigned int arena : 1;         /* Allocated from an arena */
858     size_t arena_size;              /* Size of arena to allocate */
859 };
860
861 #define HADNV FALSE
862 #define NONV TRUE
863
864
865 #ifdef PURIFY
866 /* With -DPURFIY we allocate everything directly, and don't use arenas.
867    This seems a rather elegant way to simplify some of the code below.  */
868 #define HASARENA FALSE
869 #else
870 #define HASARENA TRUE
871 #endif
872 #define NOARENA FALSE
873
874 /* Size the arenas to exactly fit a given number of bodies.  A count
875    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
876    simplifying the default.  If count > 0, the arena is sized to fit
877    only that many bodies, allowing arenas to be used for large, rare
878    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
879    limited by PERL_ARENA_SIZE, so we can safely oversize the
880    declarations.
881  */
882 #define FIT_ARENA0(body_size)                           \
883     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
884 #define FIT_ARENAn(count,body_size)                     \
885     ( count * body_size <= PERL_ARENA_SIZE)             \
886     ? count * body_size                                 \
887     : FIT_ARENA0 (body_size)
888 #define FIT_ARENA(count,body_size)                      \
889     count                                               \
890     ? FIT_ARENAn (count, body_size)                     \
891     : FIT_ARENA0 (body_size)
892
893 /* Calculate the length to copy. Specifically work out the length less any
894    final padding the compiler needed to add.  See the comment in sv_upgrade
895    for why copying the padding proved to be a bug.  */
896
897 #define copy_length(type, last_member) \
898         STRUCT_OFFSET(type, last_member) \
899         + sizeof (((type*)SvANY((const SV *)0))->last_member)
900
901 static const struct body_details bodies_by_type[] = {
902     { sizeof(HE), 0, 0, SVt_NULL,
903       FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
904
905     /* The bind placeholder pretends to be an RV for now.
906        Also it's marked as "can't upgrade" to stop anyone using it before it's
907        implemented.  */
908     { 0, 0, 0, SVt_BIND, TRUE, NONV, NOARENA, 0 },
909
910     /* IVs are in the head, so the allocation size is 0.  */
911     { 0,
912       sizeof(IV), /* This is used to copy out the IV body.  */
913       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
914       NOARENA /* IVS don't need an arena  */, 0
915     },
916
917     /* 8 bytes on most ILP32 with IEEE doubles */
918     { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
919       FIT_ARENA(0, sizeof(NV)) },
920
921     /* 8 bytes on most ILP32 with IEEE doubles */
922     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
923       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
924       + STRUCT_OFFSET(XPV, xpv_cur),
925       SVt_PV, FALSE, NONV, HASARENA,
926       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
927
928     /* 12 */
929     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
930       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
931       + STRUCT_OFFSET(XPVIV, xpv_cur),
932       SVt_PVIV, FALSE, NONV, HASARENA,
933       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
934
935     /* 20 */
936     { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
937       HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
938
939     /* 28 */
940     { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
941       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
942
943     /* something big */
944     { sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur),
945       sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur),
946       + STRUCT_OFFSET(regexp, xpv_cur),
947       SVt_REGEXP, FALSE, NONV, HASARENA,
948       FIT_ARENA(0, sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur))
949     },
950
951     /* 48 */
952     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
953       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
954     
955     /* 64 */
956     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
957       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
958
959     { sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill),
960       copy_length(XPVAV, xmg_stash) - STRUCT_OFFSET(XPVAV, xav_fill),
961       + STRUCT_OFFSET(XPVAV, xav_fill),
962       SVt_PVAV, TRUE, NONV, HASARENA,
963       FIT_ARENA(0, sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill)) },
964
965     { sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill),
966       copy_length(XPVHV, xmg_stash) - STRUCT_OFFSET(XPVHV, xhv_fill),
967       + STRUCT_OFFSET(XPVHV, xhv_fill),
968       SVt_PVHV, TRUE, NONV, HASARENA,
969       FIT_ARENA(0, sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill)) },
970
971     /* 56 */
972     { sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur),
973       sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur),
974       + STRUCT_OFFSET(XPVCV, xpv_cur),
975       SVt_PVCV, TRUE, NONV, HASARENA,
976       FIT_ARENA(0, sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur)) },
977
978     { sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur),
979       sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur),
980       + STRUCT_OFFSET(XPVFM, xpv_cur),
981       SVt_PVFM, TRUE, NONV, NOARENA,
982       FIT_ARENA(20, sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur)) },
983
984     /* XPVIO is 84 bytes, fits 48x */
985     { sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur),
986       sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur),
987       + STRUCT_OFFSET(XPVIO, xpv_cur),
988       SVt_PVIO, TRUE, NONV, HASARENA,
989       FIT_ARENA(24, sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur)) },
990 };
991
992 #define new_body_type(sv_type)          \
993     (void *)((char *)S_new_body(aTHX_ sv_type))
994
995 #define del_body_type(p, sv_type)       \
996     del_body(p, &PL_body_roots[sv_type])
997
998
999 #define new_body_allocated(sv_type)             \
1000     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1001              - bodies_by_type[sv_type].offset)
1002
1003 #define del_body_allocated(p, sv_type)          \
1004     del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
1005
1006
1007 #define my_safemalloc(s)        (void*)safemalloc(s)
1008 #define my_safecalloc(s)        (void*)safecalloc(s, 1)
1009 #define my_safefree(p)  safefree((char*)p)
1010
1011 #ifdef PURIFY
1012
1013 #define new_XNV()       my_safemalloc(sizeof(XPVNV))
1014 #define del_XNV(p)      my_safefree(p)
1015
1016 #define new_XPVNV()     my_safemalloc(sizeof(XPVNV))
1017 #define del_XPVNV(p)    my_safefree(p)
1018
1019 #define new_XPVAV()     my_safemalloc(sizeof(XPVAV))
1020 #define del_XPVAV(p)    my_safefree(p)
1021
1022 #define new_XPVHV()     my_safemalloc(sizeof(XPVHV))
1023 #define del_XPVHV(p)    my_safefree(p)
1024
1025 #define new_XPVMG()     my_safemalloc(sizeof(XPVMG))
1026 #define del_XPVMG(p)    my_safefree(p)
1027
1028 #define new_XPVGV()     my_safemalloc(sizeof(XPVGV))
1029 #define del_XPVGV(p)    my_safefree(p)
1030
1031 #else /* !PURIFY */
1032
1033 #define new_XNV()       new_body_type(SVt_NV)
1034 #define del_XNV(p)      del_body_type(p, SVt_NV)
1035
1036 #define new_XPVNV()     new_body_type(SVt_PVNV)
1037 #define del_XPVNV(p)    del_body_type(p, SVt_PVNV)
1038
1039 #define new_XPVAV()     new_body_allocated(SVt_PVAV)
1040 #define del_XPVAV(p)    del_body_allocated(p, SVt_PVAV)
1041
1042 #define new_XPVHV()     new_body_allocated(SVt_PVHV)
1043 #define del_XPVHV(p)    del_body_allocated(p, SVt_PVHV)
1044
1045 #define new_XPVMG()     new_body_type(SVt_PVMG)
1046 #define del_XPVMG(p)    del_body_type(p, SVt_PVMG)
1047
1048 #define new_XPVGV()     new_body_type(SVt_PVGV)
1049 #define del_XPVGV(p)    del_body_type(p, SVt_PVGV)
1050
1051 #endif /* PURIFY */
1052
1053 /* no arena for you! */
1054
1055 #define new_NOARENA(details) \
1056         my_safemalloc((details)->body_size + (details)->offset)
1057 #define new_NOARENAZ(details) \
1058         my_safecalloc((details)->body_size + (details)->offset)
1059
1060 STATIC void *
1061 S_more_bodies (pTHX_ const svtype sv_type)
1062 {
1063     dVAR;
1064     void ** const root = &PL_body_roots[sv_type];
1065     const struct body_details * const bdp = &bodies_by_type[sv_type];
1066     const size_t body_size = bdp->body_size;
1067     char *start;
1068     const char *end;
1069     const size_t arena_size = Perl_malloc_good_size(bdp->arena_size);
1070 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1071     static bool done_sanity_check;
1072
1073     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1074      * variables like done_sanity_check. */
1075     if (!done_sanity_check) {
1076         unsigned int i = SVt_LAST;
1077
1078         done_sanity_check = TRUE;
1079
1080         while (i--)
1081             assert (bodies_by_type[i].type == i);
1082     }
1083 #endif
1084
1085     assert(bdp->arena_size);
1086
1087     start = (char*) Perl_get_arena(aTHX_ arena_size, sv_type);
1088
1089     end = start + arena_size - 2 * body_size;
1090
1091     /* computed count doesnt reflect the 1st slot reservation */
1092 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1093     DEBUG_m(PerlIO_printf(Perl_debug_log,
1094                           "arena %p end %p arena-size %d (from %d) type %d "
1095                           "size %d ct %d\n",
1096                           (void*)start, (void*)end, (int)arena_size,
1097                           (int)bdp->arena_size, sv_type, (int)body_size,
1098                           (int)arena_size / (int)body_size));
1099 #else
1100     DEBUG_m(PerlIO_printf(Perl_debug_log,
1101                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1102                           (void*)start, (void*)end,
1103                           (int)bdp->arena_size, sv_type, (int)body_size,
1104                           (int)bdp->arena_size / (int)body_size));
1105 #endif
1106     *root = (void *)start;
1107
1108     while (start <= end) {
1109         char * const next = start + body_size;
1110         *(void**) start = (void *)next;
1111         start = next;
1112     }
1113     *(void **)start = 0;
1114
1115     return *root;
1116 }
1117
1118 /* grab a new thing from the free list, allocating more if necessary.
1119    The inline version is used for speed in hot routines, and the
1120    function using it serves the rest (unless PURIFY).
1121 */
1122 #define new_body_inline(xpv, sv_type) \
1123     STMT_START { \
1124         void ** const r3wt = &PL_body_roots[sv_type]; \
1125         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1126           ? *((void **)(r3wt)) : more_bodies(sv_type)); \
1127         *(r3wt) = *(void**)(xpv); \
1128     } STMT_END
1129
1130 #ifndef PURIFY
1131
1132 STATIC void *
1133 S_new_body(pTHX_ const svtype sv_type)
1134 {
1135     dVAR;
1136     void *xpv;
1137     new_body_inline(xpv, sv_type);
1138     return xpv;
1139 }
1140
1141 #endif
1142
1143 static const struct body_details fake_rv =
1144     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1145
1146 /*
1147 =for apidoc sv_upgrade
1148
1149 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1150 SV, then copies across as much information as possible from the old body.
1151 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1152
1153 =cut
1154 */
1155
1156 void
1157 Perl_sv_upgrade(pTHX_ register SV *const sv, svtype new_type)
1158 {
1159     dVAR;
1160     void*       old_body;
1161     void*       new_body;
1162     const svtype old_type = SvTYPE(sv);
1163     const struct body_details *new_type_details;
1164     const struct body_details *old_type_details
1165         = bodies_by_type + old_type;
1166     SV *referant = NULL;
1167
1168     PERL_ARGS_ASSERT_SV_UPGRADE;
1169
1170     if (old_type == new_type)
1171         return;
1172
1173     /* This clause was purposefully added ahead of the early return above to
1174        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1175        inference by Nick I-S that it would fix other troublesome cases. See
1176        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1177
1178        Given that shared hash key scalars are no longer PVIV, but PV, there is
1179        no longer need to unshare so as to free up the IVX slot for its proper
1180        purpose. So it's safe to move the early return earlier.  */
1181
1182     if (new_type != SVt_PV && SvIsCOW(sv)) {
1183         sv_force_normal_flags(sv, 0);
1184     }
1185
1186     old_body = SvANY(sv);
1187
1188     /* Copying structures onto other structures that have been neatly zeroed
1189        has a subtle gotcha. Consider XPVMG
1190
1191        +------+------+------+------+------+-------+-------+
1192        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1193        +------+------+------+------+------+-------+-------+
1194        0      4      8     12     16     20      24      28
1195
1196        where NVs are aligned to 8 bytes, so that sizeof that structure is
1197        actually 32 bytes long, with 4 bytes of padding at the end:
1198
1199        +------+------+------+------+------+-------+-------+------+
1200        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1201        +------+------+------+------+------+-------+-------+------+
1202        0      4      8     12     16     20      24      28     32
1203
1204        so what happens if you allocate memory for this structure:
1205
1206        +------+------+------+------+------+-------+-------+------+------+...
1207        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1208        +------+------+------+------+------+-------+-------+------+------+...
1209        0      4      8     12     16     20      24      28     32     36
1210
1211        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1212        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1213        started out as zero once, but it's quite possible that it isn't. So now,
1214        rather than a nicely zeroed GP, you have it pointing somewhere random.
1215        Bugs ensue.
1216
1217        (In fact, GP ends up pointing at a previous GP structure, because the
1218        principle cause of the padding in XPVMG getting garbage is a copy of
1219        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1220        this happens to be moot because XPVGV has been re-ordered, with GP
1221        no longer after STASH)
1222
1223        So we are careful and work out the size of used parts of all the
1224        structures.  */
1225
1226     switch (old_type) {
1227     case SVt_NULL:
1228         break;
1229     case SVt_IV:
1230         if (SvROK(sv)) {
1231             referant = SvRV(sv);
1232             old_type_details = &fake_rv;
1233             if (new_type == SVt_NV)
1234                 new_type = SVt_PVNV;
1235         } else {
1236             if (new_type < SVt_PVIV) {
1237                 new_type = (new_type == SVt_NV)
1238                     ? SVt_PVNV : SVt_PVIV;
1239             }
1240         }
1241         break;
1242     case SVt_NV:
1243         if (new_type < SVt_PVNV) {
1244             new_type = SVt_PVNV;
1245         }
1246         break;
1247     case SVt_PV:
1248         assert(new_type > SVt_PV);
1249         assert(SVt_IV < SVt_PV);
1250         assert(SVt_NV < SVt_PV);
1251         break;
1252     case SVt_PVIV:
1253         break;
1254     case SVt_PVNV:
1255         break;
1256     case SVt_PVMG:
1257         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1258            there's no way that it can be safely upgraded, because perl.c
1259            expects to Safefree(SvANY(PL_mess_sv))  */
1260         assert(sv != PL_mess_sv);
1261         /* This flag bit is used to mean other things in other scalar types.
1262            Given that it only has meaning inside the pad, it shouldn't be set
1263            on anything that can get upgraded.  */
1264         assert(!SvPAD_TYPED(sv));
1265         break;
1266     default:
1267         if (old_type_details->cant_upgrade)
1268             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1269                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1270     }
1271
1272     if (old_type > new_type)
1273         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1274                 (int)old_type, (int)new_type);
1275
1276     new_type_details = bodies_by_type + new_type;
1277
1278     SvFLAGS(sv) &= ~SVTYPEMASK;
1279     SvFLAGS(sv) |= new_type;
1280
1281     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1282        the return statements above will have triggered.  */
1283     assert (new_type != SVt_NULL);
1284     switch (new_type) {
1285     case SVt_IV:
1286         assert(old_type == SVt_NULL);
1287         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1288         SvIV_set(sv, 0);
1289         return;
1290     case SVt_NV:
1291         assert(old_type == SVt_NULL);
1292         SvANY(sv) = new_XNV();
1293         SvNV_set(sv, 0);
1294         return;
1295     case SVt_PVHV:
1296     case SVt_PVAV:
1297         assert(new_type_details->body_size);
1298
1299 #ifndef PURIFY  
1300         assert(new_type_details->arena);
1301         assert(new_type_details->arena_size);
1302         /* This points to the start of the allocated area.  */
1303         new_body_inline(new_body, new_type);
1304         Zero(new_body, new_type_details->body_size, char);
1305         new_body = ((char *)new_body) - new_type_details->offset;
1306 #else
1307         /* We always allocated the full length item with PURIFY. To do this
1308            we fake things so that arena is false for all 16 types..  */
1309         new_body = new_NOARENAZ(new_type_details);
1310 #endif
1311         SvANY(sv) = new_body;
1312         if (new_type == SVt_PVAV) {
1313             AvMAX(sv)   = -1;
1314             AvFILLp(sv) = -1;
1315             AvREAL_only(sv);
1316             if (old_type_details->body_size) {
1317                 AvALLOC(sv) = 0;
1318             } else {
1319                 /* It will have been zeroed when the new body was allocated.
1320                    Lets not write to it, in case it confuses a write-back
1321                    cache.  */
1322             }
1323         } else {
1324             assert(!SvOK(sv));
1325             SvOK_off(sv);
1326 #ifndef NODEFAULT_SHAREKEYS
1327             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1328 #endif
1329             HvMAX(sv) = 7; /* (start with 8 buckets) */
1330             if (old_type_details->body_size) {
1331                 HvFILL(sv) = 0;
1332             } else {
1333                 /* It will have been zeroed when the new body was allocated.
1334                    Lets not write to it, in case it confuses a write-back
1335                    cache.  */
1336             }
1337         }
1338
1339         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1340            The target created by newSVrv also is, and it can have magic.
1341            However, it never has SvPVX set.
1342         */
1343         if (old_type == SVt_IV) {
1344             assert(!SvROK(sv));
1345         } else if (old_type >= SVt_PV) {
1346             assert(SvPVX_const(sv) == 0);
1347         }
1348
1349         if (old_type >= SVt_PVMG) {
1350             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1351             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1352         } else {
1353             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1354         }
1355         break;
1356
1357
1358     case SVt_REGEXP:
1359         /* This ensures that SvTHINKFIRST(sv) is true, and hence that
1360            sv_force_normal_flags(sv) is called.  */
1361         SvFAKE_on(sv);
1362     case SVt_PVIV:
1363         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1364            no route from NV to PVIV, NOK can never be true  */
1365         assert(!SvNOKp(sv));
1366         assert(!SvNOK(sv));
1367     case SVt_PVIO:
1368     case SVt_PVFM:
1369     case SVt_PVGV:
1370     case SVt_PVCV:
1371     case SVt_PVLV:
1372     case SVt_PVMG:
1373     case SVt_PVNV:
1374     case SVt_PV:
1375
1376         assert(new_type_details->body_size);
1377         /* We always allocated the full length item with PURIFY. To do this
1378            we fake things so that arena is false for all 16 types..  */
1379         if(new_type_details->arena) {
1380             /* This points to the start of the allocated area.  */
1381             new_body_inline(new_body, new_type);
1382             Zero(new_body, new_type_details->body_size, char);
1383             new_body = ((char *)new_body) - new_type_details->offset;
1384         } else {
1385             new_body = new_NOARENAZ(new_type_details);
1386         }
1387         SvANY(sv) = new_body;
1388
1389         if (old_type_details->copy) {
1390             /* There is now the potential for an upgrade from something without
1391                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1392             int offset = old_type_details->offset;
1393             int length = old_type_details->copy;
1394
1395             if (new_type_details->offset > old_type_details->offset) {
1396                 const int difference
1397                     = new_type_details->offset - old_type_details->offset;
1398                 offset += difference;
1399                 length -= difference;
1400             }
1401             assert (length >= 0);
1402                 
1403             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1404                  char);
1405         }
1406
1407 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1408         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1409          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1410          * NV slot, but the new one does, then we need to initialise the
1411          * freshly created NV slot with whatever the correct bit pattern is
1412          * for 0.0  */
1413         if (old_type_details->zero_nv && !new_type_details->zero_nv
1414             && !isGV_with_GP(sv))
1415             SvNV_set(sv, 0);
1416 #endif
1417
1418         if (new_type == SVt_PVIO) {
1419             IO * const io = MUTABLE_IO(sv);
1420             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1421
1422             SvOBJECT_on(io);
1423             /* Clear the stashcache because a new IO could overrule a package
1424                name */
1425             hv_clear(PL_stashcache);
1426
1427             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1428             IoPAGE_LEN(sv) = 60;
1429         }
1430         if (old_type < SVt_PV) {
1431             /* referant will be NULL unless the old type was SVt_IV emulating
1432                SVt_RV */
1433             sv->sv_u.svu_rv = referant;
1434         }
1435         break;
1436     default:
1437         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1438                    (unsigned long)new_type);
1439     }
1440
1441     if (old_type > SVt_IV) {
1442 #ifdef PURIFY
1443         my_safefree(old_body);
1444 #else
1445         /* Note that there is an assumption that all bodies of types that
1446            can be upgraded came from arenas. Only the more complex non-
1447            upgradable types are allowed to be directly malloc()ed.  */
1448         assert(old_type_details->arena);
1449         del_body((void*)((char*)old_body + old_type_details->offset),
1450                  &PL_body_roots[old_type]);
1451 #endif
1452     }
1453 }
1454
1455 /*
1456 =for apidoc sv_backoff
1457
1458 Remove any string offset. You should normally use the C<SvOOK_off> macro
1459 wrapper instead.
1460
1461 =cut
1462 */
1463
1464 int
1465 Perl_sv_backoff(pTHX_ register SV *const sv)
1466 {
1467     STRLEN delta;
1468     const char * const s = SvPVX_const(sv);
1469
1470     PERL_ARGS_ASSERT_SV_BACKOFF;
1471     PERL_UNUSED_CONTEXT;
1472
1473     assert(SvOOK(sv));
1474     assert(SvTYPE(sv) != SVt_PVHV);
1475     assert(SvTYPE(sv) != SVt_PVAV);
1476
1477     SvOOK_offset(sv, delta);
1478     
1479     SvLEN_set(sv, SvLEN(sv) + delta);
1480     SvPV_set(sv, SvPVX(sv) - delta);
1481     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1482     SvFLAGS(sv) &= ~SVf_OOK;
1483     return 0;
1484 }
1485
1486 /*
1487 =for apidoc sv_grow
1488
1489 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1490 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1491 Use the C<SvGROW> wrapper instead.
1492
1493 =cut
1494 */
1495
1496 char *
1497 Perl_sv_grow(pTHX_ register SV *const sv, register STRLEN newlen)
1498 {
1499     register char *s;
1500
1501     PERL_ARGS_ASSERT_SV_GROW;
1502
1503     if (PL_madskills && newlen >= 0x100000) {
1504         PerlIO_printf(Perl_debug_log,
1505                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1506     }
1507 #ifdef HAS_64K_LIMIT
1508     if (newlen >= 0x10000) {
1509         PerlIO_printf(Perl_debug_log,
1510                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1511         my_exit(1);
1512     }
1513 #endif /* HAS_64K_LIMIT */
1514     if (SvROK(sv))
1515         sv_unref(sv);
1516     if (SvTYPE(sv) < SVt_PV) {
1517         sv_upgrade(sv, SVt_PV);
1518         s = SvPVX_mutable(sv);
1519     }
1520     else if (SvOOK(sv)) {       /* pv is offset? */
1521         sv_backoff(sv);
1522         s = SvPVX_mutable(sv);
1523         if (newlen > SvLEN(sv))
1524             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1525 #ifdef HAS_64K_LIMIT
1526         if (newlen >= 0x10000)
1527             newlen = 0xFFFF;
1528 #endif
1529     }
1530     else
1531         s = SvPVX_mutable(sv);
1532
1533     if (newlen > SvLEN(sv)) {           /* need more room? */
1534 #ifndef Perl_safesysmalloc_size
1535         newlen = PERL_STRLEN_ROUNDUP(newlen);
1536 #endif
1537         if (SvLEN(sv) && s) {
1538             s = (char*)saferealloc(s, newlen);
1539         }
1540         else {
1541             s = (char*)safemalloc(newlen);
1542             if (SvPVX_const(sv) && SvCUR(sv)) {
1543                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1544             }
1545         }
1546         SvPV_set(sv, s);
1547 #ifdef Perl_safesysmalloc_size
1548         /* Do this here, do it once, do it right, and then we will never get
1549            called back into sv_grow() unless there really is some growing
1550            needed.  */
1551         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1552 #else
1553         SvLEN_set(sv, newlen);
1554 #endif
1555     }
1556     return s;
1557 }
1558
1559 /*
1560 =for apidoc sv_setiv
1561
1562 Copies an integer into the given SV, upgrading first if necessary.
1563 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1564
1565 =cut
1566 */
1567
1568 void
1569 Perl_sv_setiv(pTHX_ register SV *const sv, const IV i)
1570 {
1571     dVAR;
1572
1573     PERL_ARGS_ASSERT_SV_SETIV;
1574
1575     SV_CHECK_THINKFIRST_COW_DROP(sv);
1576     switch (SvTYPE(sv)) {
1577     case SVt_NULL:
1578     case SVt_NV:
1579         sv_upgrade(sv, SVt_IV);
1580         break;
1581     case SVt_PV:
1582         sv_upgrade(sv, SVt_PVIV);
1583         break;
1584
1585     case SVt_PVGV:
1586         if (!isGV_with_GP(sv))
1587             break;
1588     case SVt_PVAV:
1589     case SVt_PVHV:
1590     case SVt_PVCV:
1591     case SVt_PVFM:
1592     case SVt_PVIO:
1593         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1594                    OP_DESC(PL_op));
1595     default: NOOP;
1596     }
1597     (void)SvIOK_only(sv);                       /* validate number */
1598     SvIV_set(sv, i);
1599     SvTAINT(sv);
1600 }
1601
1602 /*
1603 =for apidoc sv_setiv_mg
1604
1605 Like C<sv_setiv>, but also handles 'set' magic.
1606
1607 =cut
1608 */
1609
1610 void
1611 Perl_sv_setiv_mg(pTHX_ register SV *const sv, const IV i)
1612 {
1613     PERL_ARGS_ASSERT_SV_SETIV_MG;
1614
1615     sv_setiv(sv,i);
1616     SvSETMAGIC(sv);
1617 }
1618
1619 /*
1620 =for apidoc sv_setuv
1621
1622 Copies an unsigned integer into the given SV, upgrading first if necessary.
1623 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1624
1625 =cut
1626 */
1627
1628 void
1629 Perl_sv_setuv(pTHX_ register SV *const sv, const UV u)
1630 {
1631     PERL_ARGS_ASSERT_SV_SETUV;
1632
1633     /* With these two if statements:
1634        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1635
1636        without
1637        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1638
1639        If you wish to remove them, please benchmark to see what the effect is
1640     */
1641     if (u <= (UV)IV_MAX) {
1642        sv_setiv(sv, (IV)u);
1643        return;
1644     }
1645     sv_setiv(sv, 0);
1646     SvIsUV_on(sv);
1647     SvUV_set(sv, u);
1648 }
1649
1650 /*
1651 =for apidoc sv_setuv_mg
1652
1653 Like C<sv_setuv>, but also handles 'set' magic.
1654
1655 =cut
1656 */
1657
1658 void
1659 Perl_sv_setuv_mg(pTHX_ register SV *const sv, const UV u)
1660 {
1661     PERL_ARGS_ASSERT_SV_SETUV_MG;
1662
1663     sv_setuv(sv,u);
1664     SvSETMAGIC(sv);
1665 }
1666
1667 /*
1668 =for apidoc sv_setnv
1669
1670 Copies a double into the given SV, upgrading first if necessary.
1671 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1672
1673 =cut
1674 */
1675
1676 void
1677 Perl_sv_setnv(pTHX_ register SV *const sv, const NV num)
1678 {
1679     dVAR;
1680
1681     PERL_ARGS_ASSERT_SV_SETNV;
1682
1683     SV_CHECK_THINKFIRST_COW_DROP(sv);
1684     switch (SvTYPE(sv)) {
1685     case SVt_NULL:
1686     case SVt_IV:
1687         sv_upgrade(sv, SVt_NV);
1688         break;
1689     case SVt_PV:
1690     case SVt_PVIV:
1691         sv_upgrade(sv, SVt_PVNV);
1692         break;
1693
1694     case SVt_PVGV:
1695         if (!isGV_with_GP(sv))
1696             break;
1697     case SVt_PVAV:
1698     case SVt_PVHV:
1699     case SVt_PVCV:
1700     case SVt_PVFM:
1701     case SVt_PVIO:
1702         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1703                    OP_DESC(PL_op));
1704     default: NOOP;
1705     }
1706     SvNV_set(sv, num);
1707     (void)SvNOK_only(sv);                       /* validate number */
1708     SvTAINT(sv);
1709 }
1710
1711 /*
1712 =for apidoc sv_setnv_mg
1713
1714 Like C<sv_setnv>, but also handles 'set' magic.
1715
1716 =cut
1717 */
1718
1719 void
1720 Perl_sv_setnv_mg(pTHX_ register SV *const sv, const NV num)
1721 {
1722     PERL_ARGS_ASSERT_SV_SETNV_MG;
1723
1724     sv_setnv(sv,num);
1725     SvSETMAGIC(sv);
1726 }
1727
1728 /* Print an "isn't numeric" warning, using a cleaned-up,
1729  * printable version of the offending string
1730  */
1731
1732 STATIC void
1733 S_not_a_number(pTHX_ SV *const sv)
1734 {
1735      dVAR;
1736      SV *dsv;
1737      char tmpbuf[64];
1738      const char *pv;
1739
1740      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1741
1742      if (DO_UTF8(sv)) {
1743           dsv = newSVpvs_flags("", SVs_TEMP);
1744           pv = sv_uni_display(dsv, sv, 10, 0);
1745      } else {
1746           char *d = tmpbuf;
1747           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1748           /* each *s can expand to 4 chars + "...\0",
1749              i.e. need room for 8 chars */
1750         
1751           const char *s = SvPVX_const(sv);
1752           const char * const end = s + SvCUR(sv);
1753           for ( ; s < end && d < limit; s++ ) {
1754                int ch = *s & 0xFF;
1755                if (ch & 128 && !isPRINT_LC(ch)) {
1756                     *d++ = 'M';
1757                     *d++ = '-';
1758                     ch &= 127;
1759                }
1760                if (ch == '\n') {
1761                     *d++ = '\\';
1762                     *d++ = 'n';
1763                }
1764                else if (ch == '\r') {
1765                     *d++ = '\\';
1766                     *d++ = 'r';
1767                }
1768                else if (ch == '\f') {
1769                     *d++ = '\\';
1770                     *d++ = 'f';
1771                }
1772                else if (ch == '\\') {
1773                     *d++ = '\\';
1774                     *d++ = '\\';
1775                }
1776                else if (ch == '\0') {
1777                     *d++ = '\\';
1778                     *d++ = '0';
1779                }
1780                else if (isPRINT_LC(ch))
1781                     *d++ = ch;
1782                else {
1783                     *d++ = '^';
1784                     *d++ = toCTRL(ch);
1785                }
1786           }
1787           if (s < end) {
1788                *d++ = '.';
1789                *d++ = '.';
1790                *d++ = '.';
1791           }
1792           *d = '\0';
1793           pv = tmpbuf;
1794     }
1795
1796     if (PL_op)
1797         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1798                     "Argument \"%s\" isn't numeric in %s", pv,
1799                     OP_DESC(PL_op));
1800     else
1801         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1802                     "Argument \"%s\" isn't numeric", pv);
1803 }
1804
1805 /*
1806 =for apidoc looks_like_number
1807
1808 Test if the content of an SV looks like a number (or is a number).
1809 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1810 non-numeric warning), even if your atof() doesn't grok them.
1811
1812 =cut
1813 */
1814
1815 I32
1816 Perl_looks_like_number(pTHX_ SV *const sv)
1817 {
1818     register const char *sbegin;
1819     STRLEN len;
1820
1821     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1822
1823     if (SvPOK(sv)) {
1824         sbegin = SvPVX_const(sv);
1825         len = SvCUR(sv);
1826     }
1827     else if (SvPOKp(sv))
1828         sbegin = SvPV_const(sv, len);
1829     else
1830         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1831     return grok_number(sbegin, len, NULL);
1832 }
1833
1834 STATIC bool
1835 S_glob_2number(pTHX_ GV * const gv)
1836 {
1837     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1838     SV *const buffer = sv_newmortal();
1839
1840     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1841
1842     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1843        is on.  */
1844     SvFAKE_off(gv);
1845     gv_efullname3(buffer, gv, "*");
1846     SvFLAGS(gv) |= wasfake;
1847
1848     /* We know that all GVs stringify to something that is not-a-number,
1849         so no need to test that.  */
1850     if (ckWARN(WARN_NUMERIC))
1851         not_a_number(buffer);
1852     /* We just want something true to return, so that S_sv_2iuv_common
1853         can tail call us and return true.  */
1854     return TRUE;
1855 }
1856
1857 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1858    until proven guilty, assume that things are not that bad... */
1859
1860 /*
1861    NV_PRESERVES_UV:
1862
1863    As 64 bit platforms often have an NV that doesn't preserve all bits of
1864    an IV (an assumption perl has been based on to date) it becomes necessary
1865    to remove the assumption that the NV always carries enough precision to
1866    recreate the IV whenever needed, and that the NV is the canonical form.
1867    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1868    precision as a side effect of conversion (which would lead to insanity
1869    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1870    1) to distinguish between IV/UV/NV slots that have cached a valid
1871       conversion where precision was lost and IV/UV/NV slots that have a
1872       valid conversion which has lost no precision
1873    2) to ensure that if a numeric conversion to one form is requested that
1874       would lose precision, the precise conversion (or differently
1875       imprecise conversion) is also performed and cached, to prevent
1876       requests for different numeric formats on the same SV causing
1877       lossy conversion chains. (lossless conversion chains are perfectly
1878       acceptable (still))
1879
1880
1881    flags are used:
1882    SvIOKp is true if the IV slot contains a valid value
1883    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1884    SvNOKp is true if the NV slot contains a valid value
1885    SvNOK  is true only if the NV value is accurate
1886
1887    so
1888    while converting from PV to NV, check to see if converting that NV to an
1889    IV(or UV) would lose accuracy over a direct conversion from PV to
1890    IV(or UV). If it would, cache both conversions, return NV, but mark
1891    SV as IOK NOKp (ie not NOK).
1892
1893    While converting from PV to IV, check to see if converting that IV to an
1894    NV would lose accuracy over a direct conversion from PV to NV. If it
1895    would, cache both conversions, flag similarly.
1896
1897    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1898    correctly because if IV & NV were set NV *always* overruled.
1899    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1900    changes - now IV and NV together means that the two are interchangeable:
1901    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1902
1903    The benefit of this is that operations such as pp_add know that if
1904    SvIOK is true for both left and right operands, then integer addition
1905    can be used instead of floating point (for cases where the result won't
1906    overflow). Before, floating point was always used, which could lead to
1907    loss of precision compared with integer addition.
1908
1909    * making IV and NV equal status should make maths accurate on 64 bit
1910      platforms
1911    * may speed up maths somewhat if pp_add and friends start to use
1912      integers when possible instead of fp. (Hopefully the overhead in
1913      looking for SvIOK and checking for overflow will not outweigh the
1914      fp to integer speedup)
1915    * will slow down integer operations (callers of SvIV) on "inaccurate"
1916      values, as the change from SvIOK to SvIOKp will cause a call into
1917      sv_2iv each time rather than a macro access direct to the IV slot
1918    * should speed up number->string conversion on integers as IV is
1919      favoured when IV and NV are equally accurate
1920
1921    ####################################################################
1922    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1923    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1924    On the other hand, SvUOK is true iff UV.
1925    ####################################################################
1926
1927    Your mileage will vary depending your CPU's relative fp to integer
1928    performance ratio.
1929 */
1930
1931 #ifndef NV_PRESERVES_UV
1932 #  define IS_NUMBER_UNDERFLOW_IV 1
1933 #  define IS_NUMBER_UNDERFLOW_UV 2
1934 #  define IS_NUMBER_IV_AND_UV    2
1935 #  define IS_NUMBER_OVERFLOW_IV  4
1936 #  define IS_NUMBER_OVERFLOW_UV  5
1937
1938 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1939
1940 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1941 STATIC int
1942 S_sv_2iuv_non_preserve(pTHX_ register SV *const sv
1943 #  ifdef DEBUGGING
1944                        , I32 numtype
1945 #  endif
1946                        )
1947 {
1948     dVAR;
1949
1950     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
1951
1952     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));
1953     if (SvNVX(sv) < (NV)IV_MIN) {
1954         (void)SvIOKp_on(sv);
1955         (void)SvNOK_on(sv);
1956         SvIV_set(sv, IV_MIN);
1957         return IS_NUMBER_UNDERFLOW_IV;
1958     }
1959     if (SvNVX(sv) > (NV)UV_MAX) {
1960         (void)SvIOKp_on(sv);
1961         (void)SvNOK_on(sv);
1962         SvIsUV_on(sv);
1963         SvUV_set(sv, UV_MAX);
1964         return IS_NUMBER_OVERFLOW_UV;
1965     }
1966     (void)SvIOKp_on(sv);
1967     (void)SvNOK_on(sv);
1968     /* Can't use strtol etc to convert this string.  (See truth table in
1969        sv_2iv  */
1970     if (SvNVX(sv) <= (UV)IV_MAX) {
1971         SvIV_set(sv, I_V(SvNVX(sv)));
1972         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1973             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1974         } else {
1975             /* Integer is imprecise. NOK, IOKp */
1976         }
1977         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1978     }
1979     SvIsUV_on(sv);
1980     SvUV_set(sv, U_V(SvNVX(sv)));
1981     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1982         if (SvUVX(sv) == UV_MAX) {
1983             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1984                possibly be preserved by NV. Hence, it must be overflow.
1985                NOK, IOKp */
1986             return IS_NUMBER_OVERFLOW_UV;
1987         }
1988         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1989     } else {
1990         /* Integer is imprecise. NOK, IOKp */
1991     }
1992     return IS_NUMBER_OVERFLOW_IV;
1993 }
1994 #endif /* !NV_PRESERVES_UV*/
1995
1996 STATIC bool
1997 S_sv_2iuv_common(pTHX_ SV *const sv)
1998 {
1999     dVAR;
2000
2001     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2002
2003     if (SvNOKp(sv)) {
2004         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2005          * without also getting a cached IV/UV from it at the same time
2006          * (ie PV->NV conversion should detect loss of accuracy and cache
2007          * IV or UV at same time to avoid this. */
2008         /* IV-over-UV optimisation - choose to cache IV if possible */
2009
2010         if (SvTYPE(sv) == SVt_NV)
2011             sv_upgrade(sv, SVt_PVNV);
2012
2013         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2014         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2015            certainly cast into the IV range at IV_MAX, whereas the correct
2016            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2017            cases go to UV */
2018 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2019         if (Perl_isnan(SvNVX(sv))) {
2020             SvUV_set(sv, 0);
2021             SvIsUV_on(sv);
2022             return FALSE;
2023         }
2024 #endif
2025         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2026             SvIV_set(sv, I_V(SvNVX(sv)));
2027             if (SvNVX(sv) == (NV) SvIVX(sv)
2028 #ifndef NV_PRESERVES_UV
2029                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2030                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2031                 /* Don't flag it as "accurately an integer" if the number
2032                    came from a (by definition imprecise) NV operation, and
2033                    we're outside the range of NV integer precision */
2034 #endif
2035                 ) {
2036                 if (SvNOK(sv))
2037                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2038                 else {
2039                     /* scalar has trailing garbage, eg "42a" */
2040                 }
2041                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2042                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2043                                       PTR2UV(sv),
2044                                       SvNVX(sv),
2045                                       SvIVX(sv)));
2046
2047             } else {
2048                 /* IV not precise.  No need to convert from PV, as NV
2049                    conversion would already have cached IV if it detected
2050                    that PV->IV would be better than PV->NV->IV
2051                    flags already correct - don't set public IOK.  */
2052                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2053                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2054                                       PTR2UV(sv),
2055                                       SvNVX(sv),
2056                                       SvIVX(sv)));
2057             }
2058             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2059                but the cast (NV)IV_MIN rounds to a the value less (more
2060                negative) than IV_MIN which happens to be equal to SvNVX ??
2061                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2062                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2063                (NV)UVX == NVX are both true, but the values differ. :-(
2064                Hopefully for 2s complement IV_MIN is something like
2065                0x8000000000000000 which will be exact. NWC */
2066         }
2067         else {
2068             SvUV_set(sv, U_V(SvNVX(sv)));
2069             if (
2070                 (SvNVX(sv) == (NV) SvUVX(sv))
2071 #ifndef  NV_PRESERVES_UV
2072                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2073                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2074                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2075                 /* Don't flag it as "accurately an integer" if the number
2076                    came from a (by definition imprecise) NV operation, and
2077                    we're outside the range of NV integer precision */
2078 #endif
2079                 && SvNOK(sv)
2080                 )
2081                 SvIOK_on(sv);
2082             SvIsUV_on(sv);
2083             DEBUG_c(PerlIO_printf(Perl_debug_log,
2084                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2085                                   PTR2UV(sv),
2086                                   SvUVX(sv),
2087                                   SvUVX(sv)));
2088         }
2089     }
2090     else if (SvPOKp(sv) && SvLEN(sv)) {
2091         UV value;
2092         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2093         /* We want to avoid a possible problem when we cache an IV/ a UV which
2094            may be later translated to an NV, and the resulting NV is not
2095            the same as the direct translation of the initial string
2096            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2097            be careful to ensure that the value with the .456 is around if the
2098            NV value is requested in the future).
2099         
2100            This means that if we cache such an IV/a UV, we need to cache the
2101            NV as well.  Moreover, we trade speed for space, and do not
2102            cache the NV if we are sure it's not needed.
2103          */
2104
2105         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2106         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2107              == IS_NUMBER_IN_UV) {
2108             /* It's definitely an integer, only upgrade to PVIV */
2109             if (SvTYPE(sv) < SVt_PVIV)
2110                 sv_upgrade(sv, SVt_PVIV);
2111             (void)SvIOK_on(sv);
2112         } else if (SvTYPE(sv) < SVt_PVNV)
2113             sv_upgrade(sv, SVt_PVNV);
2114
2115         /* If NVs preserve UVs then we only use the UV value if we know that
2116            we aren't going to call atof() below. If NVs don't preserve UVs
2117            then the value returned may have more precision than atof() will
2118            return, even though value isn't perfectly accurate.  */
2119         if ((numtype & (IS_NUMBER_IN_UV
2120 #ifdef NV_PRESERVES_UV
2121                         | IS_NUMBER_NOT_INT
2122 #endif
2123             )) == IS_NUMBER_IN_UV) {
2124             /* This won't turn off the public IOK flag if it was set above  */
2125             (void)SvIOKp_on(sv);
2126
2127             if (!(numtype & IS_NUMBER_NEG)) {
2128                 /* positive */;
2129                 if (value <= (UV)IV_MAX) {
2130                     SvIV_set(sv, (IV)value);
2131                 } else {
2132                     /* it didn't overflow, and it was positive. */
2133                     SvUV_set(sv, value);
2134                     SvIsUV_on(sv);
2135                 }
2136             } else {
2137                 /* 2s complement assumption  */
2138                 if (value <= (UV)IV_MIN) {
2139                     SvIV_set(sv, -(IV)value);
2140                 } else {
2141                     /* Too negative for an IV.  This is a double upgrade, but
2142                        I'm assuming it will be rare.  */
2143                     if (SvTYPE(sv) < SVt_PVNV)
2144                         sv_upgrade(sv, SVt_PVNV);
2145                     SvNOK_on(sv);
2146                     SvIOK_off(sv);
2147                     SvIOKp_on(sv);
2148                     SvNV_set(sv, -(NV)value);
2149                     SvIV_set(sv, IV_MIN);
2150                 }
2151             }
2152         }
2153         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2154            will be in the previous block to set the IV slot, and the next
2155            block to set the NV slot.  So no else here.  */
2156         
2157         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2158             != IS_NUMBER_IN_UV) {
2159             /* It wasn't an (integer that doesn't overflow the UV). */
2160             SvNV_set(sv, Atof(SvPVX_const(sv)));
2161
2162             if (! numtype && ckWARN(WARN_NUMERIC))
2163                 not_a_number(sv);
2164
2165 #if defined(USE_LONG_DOUBLE)
2166             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2167                                   PTR2UV(sv), SvNVX(sv)));
2168 #else
2169             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2170                                   PTR2UV(sv), SvNVX(sv)));
2171 #endif
2172
2173 #ifdef NV_PRESERVES_UV
2174             (void)SvIOKp_on(sv);
2175             (void)SvNOK_on(sv);
2176             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2177                 SvIV_set(sv, I_V(SvNVX(sv)));
2178                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2179                     SvIOK_on(sv);
2180                 } else {
2181                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2182                 }
2183                 /* UV will not work better than IV */
2184             } else {
2185                 if (SvNVX(sv) > (NV)UV_MAX) {
2186                     SvIsUV_on(sv);
2187                     /* Integer is inaccurate. NOK, IOKp, is UV */
2188                     SvUV_set(sv, UV_MAX);
2189                 } else {
2190                     SvUV_set(sv, U_V(SvNVX(sv)));
2191                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2192                        NV preservse UV so can do correct comparison.  */
2193                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2194                         SvIOK_on(sv);
2195                     } else {
2196                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2197                     }
2198                 }
2199                 SvIsUV_on(sv);
2200             }
2201 #else /* NV_PRESERVES_UV */
2202             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2203                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2204                 /* The IV/UV slot will have been set from value returned by
2205                    grok_number above.  The NV slot has just been set using
2206                    Atof.  */
2207                 SvNOK_on(sv);
2208                 assert (SvIOKp(sv));
2209             } else {
2210                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2211                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2212                     /* Small enough to preserve all bits. */
2213                     (void)SvIOKp_on(sv);
2214                     SvNOK_on(sv);
2215                     SvIV_set(sv, I_V(SvNVX(sv)));
2216                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2217                         SvIOK_on(sv);
2218                     /* Assumption: first non-preserved integer is < IV_MAX,
2219                        this NV is in the preserved range, therefore: */
2220                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2221                           < (UV)IV_MAX)) {
2222                         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);
2223                     }
2224                 } else {
2225                     /* IN_UV NOT_INT
2226                          0      0       already failed to read UV.
2227                          0      1       already failed to read UV.
2228                          1      0       you won't get here in this case. IV/UV
2229                                         slot set, public IOK, Atof() unneeded.
2230                          1      1       already read UV.
2231                        so there's no point in sv_2iuv_non_preserve() attempting
2232                        to use atol, strtol, strtoul etc.  */
2233 #  ifdef DEBUGGING
2234                     sv_2iuv_non_preserve (sv, numtype);
2235 #  else
2236                     sv_2iuv_non_preserve (sv);
2237 #  endif
2238                 }
2239             }
2240 #endif /* NV_PRESERVES_UV */
2241         /* It might be more code efficient to go through the entire logic above
2242            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2243            gets complex and potentially buggy, so more programmer efficient
2244            to do it this way, by turning off the public flags:  */
2245         if (!numtype)
2246             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2247         }
2248     }
2249     else  {
2250         if (isGV_with_GP(sv))
2251             return glob_2number(MUTABLE_GV(sv));
2252
2253         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2254             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2255                 report_uninit(sv);
2256         }
2257         if (SvTYPE(sv) < SVt_IV)
2258             /* Typically the caller expects that sv_any is not NULL now.  */
2259             sv_upgrade(sv, SVt_IV);
2260         /* Return 0 from the caller.  */
2261         return TRUE;
2262     }
2263     return FALSE;
2264 }
2265
2266 /*
2267 =for apidoc sv_2iv_flags
2268
2269 Return the integer value of an SV, doing any necessary string
2270 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2271 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2272
2273 =cut
2274 */
2275
2276 IV
2277 Perl_sv_2iv_flags(pTHX_ register SV *const sv, const I32 flags)
2278 {
2279     dVAR;
2280     if (!sv)
2281         return 0;
2282     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2283         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2284            cache IVs just in case. In practice it seems that they never
2285            actually anywhere accessible by user Perl code, let alone get used
2286            in anything other than a string context.  */
2287         if (flags & SV_GMAGIC)
2288             mg_get(sv);
2289         if (SvIOKp(sv))
2290             return SvIVX(sv);
2291         if (SvNOKp(sv)) {
2292             return I_V(SvNVX(sv));
2293         }
2294         if (SvPOKp(sv) && SvLEN(sv)) {
2295             UV value;
2296             const int numtype
2297                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2298
2299             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2300                 == IS_NUMBER_IN_UV) {
2301                 /* It's definitely an integer */
2302                 if (numtype & IS_NUMBER_NEG) {
2303                     if (value < (UV)IV_MIN)
2304                         return -(IV)value;
2305                 } else {
2306                     if (value < (UV)IV_MAX)
2307                         return (IV)value;
2308                 }
2309             }
2310             if (!numtype) {
2311                 if (ckWARN(WARN_NUMERIC))
2312                     not_a_number(sv);
2313             }
2314             return I_V(Atof(SvPVX_const(sv)));
2315         }
2316         if (SvROK(sv)) {
2317             goto return_rok;
2318         }
2319         assert(SvTYPE(sv) >= SVt_PVMG);
2320         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2321     } else if (SvTHINKFIRST(sv)) {
2322         if (SvROK(sv)) {
2323         return_rok:
2324             if (SvAMAGIC(sv)) {
2325                 SV * const tmpstr=AMG_CALLun(sv,numer);
2326                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2327                     return SvIV(tmpstr);
2328                 }
2329             }
2330             return PTR2IV(SvRV(sv));
2331         }
2332         if (SvIsCOW(sv)) {
2333             sv_force_normal_flags(sv, 0);
2334         }
2335         if (SvREADONLY(sv) && !SvOK(sv)) {
2336             if (ckWARN(WARN_UNINITIALIZED))
2337                 report_uninit(sv);
2338             return 0;
2339         }
2340     }
2341     if (!SvIOKp(sv)) {
2342         if (S_sv_2iuv_common(aTHX_ sv))
2343             return 0;
2344     }
2345     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2346         PTR2UV(sv),SvIVX(sv)));
2347     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2348 }
2349
2350 /*
2351 =for apidoc sv_2uv_flags
2352
2353 Return the unsigned integer value of an SV, doing any necessary string
2354 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2355 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2356
2357 =cut
2358 */
2359
2360 UV
2361 Perl_sv_2uv_flags(pTHX_ register SV *const sv, const I32 flags)
2362 {
2363     dVAR;
2364     if (!sv)
2365         return 0;
2366     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2367         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2368            cache IVs just in case.  */
2369         if (flags & SV_GMAGIC)
2370             mg_get(sv);
2371         if (SvIOKp(sv))
2372             return SvUVX(sv);
2373         if (SvNOKp(sv))
2374             return U_V(SvNVX(sv));
2375         if (SvPOKp(sv) && SvLEN(sv)) {
2376             UV value;
2377             const int numtype
2378                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2379
2380             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2381                 == IS_NUMBER_IN_UV) {
2382                 /* It's definitely an integer */
2383                 if (!(numtype & IS_NUMBER_NEG))
2384                     return value;
2385             }
2386             if (!numtype) {
2387                 if (ckWARN(WARN_NUMERIC))
2388                     not_a_number(sv);
2389             }
2390             return U_V(Atof(SvPVX_const(sv)));
2391         }
2392         if (SvROK(sv)) {
2393             goto return_rok;
2394         }
2395         assert(SvTYPE(sv) >= SVt_PVMG);
2396         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2397     } else if (SvTHINKFIRST(sv)) {
2398         if (SvROK(sv)) {
2399         return_rok:
2400             if (SvAMAGIC(sv)) {
2401                 SV *const tmpstr = AMG_CALLun(sv,numer);
2402                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2403                     return SvUV(tmpstr);
2404                 }
2405             }
2406             return PTR2UV(SvRV(sv));
2407         }
2408         if (SvIsCOW(sv)) {
2409             sv_force_normal_flags(sv, 0);
2410         }
2411         if (SvREADONLY(sv) && !SvOK(sv)) {
2412             if (ckWARN(WARN_UNINITIALIZED))
2413                 report_uninit(sv);
2414             return 0;
2415         }
2416     }
2417     if (!SvIOKp(sv)) {
2418         if (S_sv_2iuv_common(aTHX_ sv))
2419             return 0;
2420     }
2421
2422     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2423                           PTR2UV(sv),SvUVX(sv)));
2424     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2425 }
2426
2427 /*
2428 =for apidoc sv_2nv
2429
2430 Return the num value of an SV, doing any necessary string or integer
2431 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2432 macros.
2433
2434 =cut
2435 */
2436
2437 NV
2438 Perl_sv_2nv(pTHX_ register SV *const sv)
2439 {
2440     dVAR;
2441     if (!sv)
2442         return 0.0;
2443     if (SvGMAGICAL(sv) || (SvTYPE(sv) == SVt_PVGV && SvVALID(sv))) {
2444         /* FBMs use the same flag bit as SVf_IVisUV, so must let them
2445            cache IVs just in case.  */
2446         mg_get(sv);
2447         if (SvNOKp(sv))
2448             return SvNVX(sv);
2449         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2450             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2451                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2452                 not_a_number(sv);
2453             return Atof(SvPVX_const(sv));
2454         }
2455         if (SvIOKp(sv)) {
2456             if (SvIsUV(sv))
2457                 return (NV)SvUVX(sv);
2458             else
2459                 return (NV)SvIVX(sv);
2460         }
2461         if (SvROK(sv)) {
2462             goto return_rok;
2463         }
2464         assert(SvTYPE(sv) >= SVt_PVMG);
2465         /* This falls through to the report_uninit near the end of the
2466            function. */
2467     } else if (SvTHINKFIRST(sv)) {
2468         if (SvROK(sv)) {
2469         return_rok:
2470             if (SvAMAGIC(sv)) {
2471                 SV *const tmpstr = AMG_CALLun(sv,numer);
2472                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2473                     return SvNV(tmpstr);
2474                 }
2475             }
2476             return PTR2NV(SvRV(sv));
2477         }
2478         if (SvIsCOW(sv)) {
2479             sv_force_normal_flags(sv, 0);
2480         }
2481         if (SvREADONLY(sv) && !SvOK(sv)) {
2482             if (ckWARN(WARN_UNINITIALIZED))
2483                 report_uninit(sv);
2484             return 0.0;
2485         }
2486     }
2487     if (SvTYPE(sv) < SVt_NV) {
2488         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2489         sv_upgrade(sv, SVt_NV);
2490 #ifdef USE_LONG_DOUBLE
2491         DEBUG_c({
2492             STORE_NUMERIC_LOCAL_SET_STANDARD();
2493             PerlIO_printf(Perl_debug_log,
2494                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2495                           PTR2UV(sv), SvNVX(sv));
2496             RESTORE_NUMERIC_LOCAL();
2497         });
2498 #else
2499         DEBUG_c({
2500             STORE_NUMERIC_LOCAL_SET_STANDARD();
2501             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2502                           PTR2UV(sv), SvNVX(sv));
2503             RESTORE_NUMERIC_LOCAL();
2504         });
2505 #endif
2506     }
2507     else if (SvTYPE(sv) < SVt_PVNV)
2508         sv_upgrade(sv, SVt_PVNV);
2509     if (SvNOKp(sv)) {
2510         return SvNVX(sv);
2511     }
2512     if (SvIOKp(sv)) {
2513         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2514 #ifdef NV_PRESERVES_UV
2515         if (SvIOK(sv))
2516             SvNOK_on(sv);
2517         else
2518             SvNOKp_on(sv);
2519 #else
2520         /* Only set the public NV OK flag if this NV preserves the IV  */
2521         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2522         if (SvIOK(sv) &&
2523             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2524                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2525             SvNOK_on(sv);
2526         else
2527             SvNOKp_on(sv);
2528 #endif
2529     }
2530     else if (SvPOKp(sv) && SvLEN(sv)) {
2531         UV value;
2532         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2533         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2534             not_a_number(sv);
2535 #ifdef NV_PRESERVES_UV
2536         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2537             == IS_NUMBER_IN_UV) {
2538             /* It's definitely an integer */
2539             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2540         } else
2541             SvNV_set(sv, Atof(SvPVX_const(sv)));
2542         if (numtype)
2543             SvNOK_on(sv);
2544         else
2545             SvNOKp_on(sv);
2546 #else
2547         SvNV_set(sv, Atof(SvPVX_const(sv)));
2548         /* Only set the public NV OK flag if this NV preserves the value in
2549            the PV at least as well as an IV/UV would.
2550            Not sure how to do this 100% reliably. */
2551         /* if that shift count is out of range then Configure's test is
2552            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2553            UV_BITS */
2554         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2555             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2556             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2557         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2558             /* Can't use strtol etc to convert this string, so don't try.
2559                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2560             SvNOK_on(sv);
2561         } else {
2562             /* value has been set.  It may not be precise.  */
2563             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2564                 /* 2s complement assumption for (UV)IV_MIN  */
2565                 SvNOK_on(sv); /* Integer is too negative.  */
2566             } else {
2567                 SvNOKp_on(sv);
2568                 SvIOKp_on(sv);
2569
2570                 if (numtype & IS_NUMBER_NEG) {
2571                     SvIV_set(sv, -(IV)value);
2572                 } else if (value <= (UV)IV_MAX) {
2573                     SvIV_set(sv, (IV)value);
2574                 } else {
2575                     SvUV_set(sv, value);
2576                     SvIsUV_on(sv);
2577                 }
2578
2579                 if (numtype & IS_NUMBER_NOT_INT) {
2580                     /* I believe that even if the original PV had decimals,
2581                        they are lost beyond the limit of the FP precision.
2582                        However, neither is canonical, so both only get p
2583                        flags.  NWC, 2000/11/25 */
2584                     /* Both already have p flags, so do nothing */
2585                 } else {
2586                     const NV nv = SvNVX(sv);
2587                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2588                         if (SvIVX(sv) == I_V(nv)) {
2589                             SvNOK_on(sv);
2590                         } else {
2591                             /* It had no "." so it must be integer.  */
2592                         }
2593                         SvIOK_on(sv);
2594                     } else {
2595                         /* between IV_MAX and NV(UV_MAX).
2596                            Could be slightly > UV_MAX */
2597
2598                         if (numtype & IS_NUMBER_NOT_INT) {
2599                             /* UV and NV both imprecise.  */
2600                         } else {
2601                             const UV nv_as_uv = U_V(nv);
2602
2603                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2604                                 SvNOK_on(sv);
2605                             }
2606                             SvIOK_on(sv);
2607                         }
2608                     }
2609                 }
2610             }
2611         }
2612         /* It might be more code efficient to go through the entire logic above
2613            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2614            gets complex and potentially buggy, so more programmer efficient
2615            to do it this way, by turning off the public flags:  */
2616         if (!numtype)
2617             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2618 #endif /* NV_PRESERVES_UV */
2619     }
2620     else  {
2621         if (isGV_with_GP(sv)) {
2622             glob_2number(MUTABLE_GV(sv));
2623             return 0.0;
2624         }
2625
2626         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2627             report_uninit(sv);
2628         assert (SvTYPE(sv) >= SVt_NV);
2629         /* Typically the caller expects that sv_any is not NULL now.  */
2630         /* XXX Ilya implies that this is a bug in callers that assume this
2631            and ideally should be fixed.  */
2632         return 0.0;
2633     }
2634 #if defined(USE_LONG_DOUBLE)
2635     DEBUG_c({
2636         STORE_NUMERIC_LOCAL_SET_STANDARD();
2637         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2638                       PTR2UV(sv), SvNVX(sv));
2639         RESTORE_NUMERIC_LOCAL();
2640     });
2641 #else
2642     DEBUG_c({
2643         STORE_NUMERIC_LOCAL_SET_STANDARD();
2644         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2645                       PTR2UV(sv), SvNVX(sv));
2646         RESTORE_NUMERIC_LOCAL();
2647     });
2648 #endif
2649     return SvNVX(sv);
2650 }
2651
2652 /*
2653 =for apidoc sv_2num
2654
2655 Return an SV with the numeric value of the source SV, doing any necessary
2656 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2657 access this function.
2658
2659 =cut
2660 */
2661
2662 SV *
2663 Perl_sv_2num(pTHX_ register SV *const sv)
2664 {
2665     PERL_ARGS_ASSERT_SV_2NUM;
2666
2667     if (!SvROK(sv))
2668         return sv;
2669     if (SvAMAGIC(sv)) {
2670         SV * const tmpsv = AMG_CALLun(sv,numer);
2671         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2672             return sv_2num(tmpsv);
2673     }
2674     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2675 }
2676
2677 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2678  * UV as a string towards the end of buf, and return pointers to start and
2679  * end of it.
2680  *
2681  * We assume that buf is at least TYPE_CHARS(UV) long.
2682  */
2683
2684 static char *
2685 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2686 {
2687     char *ptr = buf + TYPE_CHARS(UV);
2688     char * const ebuf = ptr;
2689     int sign;
2690
2691     PERL_ARGS_ASSERT_UIV_2BUF;
2692
2693     if (is_uv)
2694         sign = 0;
2695     else if (iv >= 0) {
2696         uv = iv;
2697         sign = 0;
2698     } else {
2699         uv = -iv;
2700         sign = 1;
2701     }
2702     do {
2703         *--ptr = '0' + (char)(uv % 10);
2704     } while (uv /= 10);
2705     if (sign)
2706         *--ptr = '-';
2707     *peob = ebuf;
2708     return ptr;
2709 }
2710
2711 /*
2712 =for apidoc sv_2pv_flags
2713
2714 Returns a pointer to the string value of an SV, and sets *lp to its length.
2715 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2716 if necessary.
2717 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2718 usually end up here too.
2719
2720 =cut
2721 */
2722
2723 char *
2724 Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN *const lp, const I32 flags)
2725 {
2726     dVAR;
2727     register char *s;
2728
2729     if (!sv) {
2730         if (lp)
2731             *lp = 0;
2732         return (char *)"";
2733     }
2734     if (SvGMAGICAL(sv)) {
2735         if (flags & SV_GMAGIC)
2736             mg_get(sv);
2737         if (SvPOKp(sv)) {
2738             if (lp)
2739                 *lp = SvCUR(sv);
2740             if (flags & SV_MUTABLE_RETURN)
2741                 return SvPVX_mutable(sv);
2742             if (flags & SV_CONST_RETURN)
2743                 return (char *)SvPVX_const(sv);
2744             return SvPVX(sv);
2745         }
2746         if (SvIOKp(sv) || SvNOKp(sv)) {
2747             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2748             STRLEN len;
2749
2750             if (SvIOKp(sv)) {
2751                 len = SvIsUV(sv)
2752                     ? my_snprintf(tbuf, sizeof(tbuf), "%"UVuf, (UV)SvUVX(sv))
2753                     : my_snprintf(tbuf, sizeof(tbuf), "%"IVdf, (IV)SvIVX(sv));
2754             } else {
2755                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2756                 len = strlen(tbuf);
2757             }
2758             assert(!SvROK(sv));
2759             {
2760                 dVAR;
2761
2762 #ifdef FIXNEGATIVEZERO
2763                 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2764                     tbuf[0] = '0';
2765                     tbuf[1] = 0;
2766                     len = 1;
2767                 }
2768 #endif
2769                 SvUPGRADE(sv, SVt_PV);
2770                 if (lp)
2771                     *lp = len;
2772                 s = SvGROW_mutable(sv, len + 1);
2773                 SvCUR_set(sv, len);
2774                 SvPOKp_on(sv);
2775                 return (char*)memcpy(s, tbuf, len + 1);
2776             }
2777         }
2778         if (SvROK(sv)) {
2779             goto return_rok;
2780         }
2781         assert(SvTYPE(sv) >= SVt_PVMG);
2782         /* This falls through to the report_uninit near the end of the
2783            function. */
2784     } else if (SvTHINKFIRST(sv)) {
2785         if (SvROK(sv)) {
2786         return_rok:
2787             if (SvAMAGIC(sv)) {
2788                 SV *const tmpstr = AMG_CALLun(sv,string);
2789                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2790                     /* Unwrap this:  */
2791                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2792                      */
2793
2794                     char *pv;
2795                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2796                         if (flags & SV_CONST_RETURN) {
2797                             pv = (char *) SvPVX_const(tmpstr);
2798                         } else {
2799                             pv = (flags & SV_MUTABLE_RETURN)
2800                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2801                         }
2802                         if (lp)
2803                             *lp = SvCUR(tmpstr);
2804                     } else {
2805                         pv = sv_2pv_flags(tmpstr, lp, flags);
2806                     }
2807                     if (SvUTF8(tmpstr))
2808                         SvUTF8_on(sv);
2809                     else
2810                         SvUTF8_off(sv);
2811                     return pv;
2812                 }
2813             }
2814             {
2815                 STRLEN len;
2816                 char *retval;
2817                 char *buffer;
2818                 SV *const referent = SvRV(sv);
2819
2820                 if (!referent) {
2821                     len = 7;
2822                     retval = buffer = savepvn("NULLREF", len);
2823                 } else if (SvTYPE(referent) == SVt_REGEXP) {
2824                     REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2825                     I32 seen_evals = 0;
2826
2827                     assert(re);
2828                         
2829                     /* If the regex is UTF-8 we want the containing scalar to
2830                        have an UTF-8 flag too */
2831                     if (RX_UTF8(re))
2832                         SvUTF8_on(sv);
2833                     else
2834                         SvUTF8_off(sv); 
2835
2836                     if ((seen_evals = RX_SEEN_EVALS(re)))
2837                         PL_reginterp_cnt += seen_evals;
2838
2839                     if (lp)
2840                         *lp = RX_WRAPLEN(re);
2841  
2842                     return RX_WRAPPED(re);
2843                 } else {
2844                     const char *const typestr = sv_reftype(referent, 0);
2845                     const STRLEN typelen = strlen(typestr);
2846                     UV addr = PTR2UV(referent);
2847                     const char *stashname = NULL;
2848                     STRLEN stashnamelen = 0; /* hush, gcc */
2849                     const char *buffer_end;
2850
2851                     if (SvOBJECT(referent)) {
2852                         const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2853
2854                         if (name) {
2855                             stashname = HEK_KEY(name);
2856                             stashnamelen = HEK_LEN(name);
2857
2858                             if (HEK_UTF8(name)) {
2859                                 SvUTF8_on(sv);
2860                             } else {
2861                                 SvUTF8_off(sv);
2862                             }
2863                         } else {
2864                             stashname = "__ANON__";
2865                             stashnamelen = 8;
2866                         }
2867                         len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2868                             + 2 * sizeof(UV) + 2 /* )\0 */;
2869                     } else {
2870                         len = typelen + 3 /* (0x */
2871                             + 2 * sizeof(UV) + 2 /* )\0 */;
2872                     }
2873
2874                     Newx(buffer, len, char);
2875                     buffer_end = retval = buffer + len;
2876
2877                     /* Working backwards  */
2878                     *--retval = '\0';
2879                     *--retval = ')';
2880                     do {
2881                         *--retval = PL_hexdigit[addr & 15];
2882                     } while (addr >>= 4);
2883                     *--retval = 'x';
2884                     *--retval = '0';
2885                     *--retval = '(';
2886
2887                     retval -= typelen;
2888                     memcpy(retval, typestr, typelen);
2889
2890                     if (stashname) {
2891                         *--retval = '=';
2892                         retval -= stashnamelen;
2893                         memcpy(retval, stashname, stashnamelen);
2894                     }
2895                     /* retval may not neccesarily have reached the start of the
2896                        buffer here.  */
2897                     assert (retval >= buffer);
2898
2899                     len = buffer_end - retval - 1; /* -1 for that \0  */
2900                 }
2901                 if (lp)
2902                     *lp = len;
2903                 SAVEFREEPV(buffer);
2904                 return retval;
2905             }
2906         }
2907         if (SvREADONLY(sv) && !SvOK(sv)) {
2908             if (lp)
2909                 *lp = 0;
2910             if (flags & SV_UNDEF_RETURNS_NULL)
2911                 return NULL;
2912             if (ckWARN(WARN_UNINITIALIZED))
2913                 report_uninit(sv);
2914             return (char *)"";
2915         }
2916     }
2917     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2918         /* I'm assuming that if both IV and NV are equally valid then
2919            converting the IV is going to be more efficient */
2920         const U32 isUIOK = SvIsUV(sv);
2921         char buf[TYPE_CHARS(UV)];
2922         char *ebuf, *ptr;
2923         STRLEN len;
2924
2925         if (SvTYPE(sv) < SVt_PVIV)
2926             sv_upgrade(sv, SVt_PVIV);
2927         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2928         len = ebuf - ptr;
2929         /* inlined from sv_setpvn */
2930         s = SvGROW_mutable(sv, len + 1);
2931         Move(ptr, s, len, char);
2932         s += len;
2933         *s = '\0';
2934     }
2935     else if (SvNOKp(sv)) {
2936         dSAVE_ERRNO;
2937         if (SvTYPE(sv) < SVt_PVNV)
2938             sv_upgrade(sv, SVt_PVNV);
2939         /* The +20 is pure guesswork.  Configure test needed. --jhi */
2940         s = SvGROW_mutable(sv, NV_DIG + 20);
2941         /* some Xenix systems wipe out errno here */
2942 #ifdef apollo
2943         if (SvNVX(sv) == 0.0)
2944             my_strlcpy(s, "0", SvLEN(sv));
2945         else
2946 #endif /*apollo*/
2947         {
2948             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2949         }
2950         RESTORE_ERRNO;
2951 #ifdef FIXNEGATIVEZERO
2952         if (*s == '-' && s[1] == '0' && !s[2]) {
2953             s[0] = '0';
2954             s[1] = 0;
2955         }
2956 #endif
2957         while (*s) s++;
2958 #ifdef hcx
2959         if (s[-1] == '.')
2960             *--s = '\0';
2961 #endif
2962     }
2963     else {
2964         if (isGV_with_GP(sv)) {
2965             GV *const gv = MUTABLE_GV(sv);
2966             const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
2967             SV *const buffer = sv_newmortal();
2968
2969             /* FAKE globs can get coerced, so need to turn this off temporarily
2970                if it is on.  */
2971             SvFAKE_off(gv);
2972             gv_efullname3(buffer, gv, "*");
2973             SvFLAGS(gv) |= wasfake;
2974
2975             if (SvPOK(buffer)) {
2976                 if (lp) {
2977                     *lp = SvCUR(buffer);
2978                 }
2979                 return SvPVX(buffer);
2980             }
2981             else {
2982                 if (lp)
2983                     *lp = 0;
2984                 return (char *)"";
2985             }
2986         }
2987
2988         if (lp)
2989             *lp = 0;
2990         if (flags & SV_UNDEF_RETURNS_NULL)
2991             return NULL;
2992         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2993             report_uninit(sv);
2994         if (SvTYPE(sv) < SVt_PV)
2995             /* Typically the caller expects that sv_any is not NULL now.  */
2996             sv_upgrade(sv, SVt_PV);
2997         return (char *)"";
2998     }
2999     {
3000         const STRLEN len = s - SvPVX_const(sv);
3001         if (lp) 
3002             *lp = len;
3003         SvCUR_set(sv, len);
3004     }
3005     SvPOK_on(sv);
3006     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3007                           PTR2UV(sv),SvPVX_const(sv)));
3008     if (flags & SV_CONST_RETURN)
3009         return (char *)SvPVX_const(sv);
3010     if (flags & SV_MUTABLE_RETURN)
3011         return SvPVX_mutable(sv);
3012     return SvPVX(sv);
3013 }
3014
3015 /*
3016 =for apidoc sv_copypv
3017
3018 Copies a stringified representation of the source SV into the
3019 destination SV.  Automatically performs any necessary mg_get and
3020 coercion of numeric values into strings.  Guaranteed to preserve
3021 UTF8 flag even from overloaded objects.  Similar in nature to
3022 sv_2pv[_flags] but operates directly on an SV instead of just the
3023 string.  Mostly uses sv_2pv_flags to do its work, except when that
3024 would lose the UTF-8'ness of the PV.
3025
3026 =cut
3027 */
3028
3029 void
3030 Perl_sv_copypv(pTHX_ SV *const dsv, register SV *const ssv)
3031 {
3032     STRLEN len;
3033     const char * const s = SvPV_const(ssv,len);
3034
3035     PERL_ARGS_ASSERT_SV_COPYPV;
3036
3037     sv_setpvn(dsv,s,len);
3038     if (SvUTF8(ssv))
3039         SvUTF8_on(dsv);
3040     else
3041         SvUTF8_off(dsv);
3042 }
3043
3044 /*
3045 =for apidoc sv_2pvbyte
3046
3047 Return a pointer to the byte-encoded representation of the SV, and set *lp
3048 to its length.  May cause the SV to be downgraded from UTF-8 as a
3049 side-effect.
3050
3051 Usually accessed via the C<SvPVbyte> macro.
3052
3053 =cut
3054 */
3055
3056 char *
3057 Perl_sv_2pvbyte(pTHX_ register SV *const sv, STRLEN *const lp)
3058 {
3059     PERL_ARGS_ASSERT_SV_2PVBYTE;
3060
3061     sv_utf8_downgrade(sv,0);
3062     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3063 }
3064
3065 /*
3066 =for apidoc sv_2pvutf8
3067
3068 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3069 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3070
3071 Usually accessed via the C<SvPVutf8> macro.
3072
3073 =cut
3074 */
3075
3076 char *
3077 Perl_sv_2pvutf8(pTHX_ register SV *const sv, STRLEN *const lp)
3078 {
3079     PERL_ARGS_ASSERT_SV_2PVUTF8;
3080
3081     sv_utf8_upgrade(sv);
3082     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
3083 }
3084
3085
3086 /*
3087 =for apidoc sv_2bool
3088
3089 This function is only called on magical items, and is only used by
3090 sv_true() or its macro equivalent.
3091
3092 =cut
3093 */
3094
3095 bool
3096 Perl_sv_2bool(pTHX_ register SV *const sv)
3097 {
3098     dVAR;
3099
3100     PERL_ARGS_ASSERT_SV_2BOOL;
3101
3102     SvGETMAGIC(sv);
3103
3104     if (!SvOK(sv))
3105         return 0;
3106     if (SvROK(sv)) {
3107         if (SvAMAGIC(sv)) {
3108             SV * const tmpsv = AMG_CALLun(sv,bool_);
3109             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3110                 return cBOOL(SvTRUE(tmpsv));
3111         }
3112         return SvRV(sv) != 0;
3113     }
3114     if (SvPOKp(sv)) {
3115         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
3116         if (Xpvtmp &&
3117                 (*sv->sv_u.svu_pv > '0' ||
3118                 Xpvtmp->xpv_cur > 1 ||
3119                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
3120             return 1;
3121         else
3122             return 0;
3123     }
3124     else {
3125         if (SvIOKp(sv))
3126             return SvIVX(sv) != 0;
3127         else {
3128             if (SvNOKp(sv))
3129                 return SvNVX(sv) != 0.0;
3130             else {
3131                 if (isGV_with_GP(sv))
3132                     return TRUE;
3133                 else
3134                     return FALSE;
3135             }
3136         }
3137     }
3138 }
3139
3140 /*
3141 =for apidoc sv_utf8_upgrade
3142
3143 Converts the PV of an SV to its UTF-8-encoded form.
3144 Forces the SV to string form if it is not already.
3145 Will C<mg_get> on C<sv> if appropriate.
3146 Always sets the SvUTF8 flag to avoid future validity checks even
3147 if the whole string is the same in UTF-8 as not.
3148 Returns the number of bytes in the converted string
3149
3150 This is not as a general purpose byte encoding to Unicode interface:
3151 use the Encode extension for that.
3152
3153 =for apidoc sv_utf8_upgrade_nomg
3154
3155 Like sv_utf8_upgrade, but doesn't do magic on C<sv>
3156
3157 =for apidoc sv_utf8_upgrade_flags
3158
3159 Converts the PV of an SV to its UTF-8-encoded form.
3160 Forces the SV to string form if it is not already.
3161 Always sets the SvUTF8 flag to avoid future validity checks even
3162 if all the bytes are invariant in UTF-8. If C<flags> has C<SV_GMAGIC> bit set,
3163 will C<mg_get> on C<sv> if appropriate, else not.
3164 Returns the number of bytes in the converted string
3165 C<sv_utf8_upgrade> and
3166 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3167
3168 This is not as a general purpose byte encoding to Unicode interface:
3169 use the Encode extension for that.
3170
3171 =cut
3172
3173 The grow version is currently not externally documented.  It adds a parameter,
3174 extra, which is the number of unused bytes the string of 'sv' is guaranteed to
3175 have free after it upon return.  This allows the caller to reserve extra space
3176 that it intends to fill, to avoid extra grows.
3177
3178 Also externally undocumented for the moment is the flag SV_FORCE_UTF8_UPGRADE,
3179 which can be used to tell this function to not first check to see if there are
3180 any characters that are different in UTF-8 (variant characters) which would
3181 force it to allocate a new string to sv, but to assume there are.  Typically
3182 this flag is used by a routine that has already parsed the string to find that
3183 there are such characters, and passes this information on so that the work
3184 doesn't have to be repeated.
3185
3186 (One might think that the calling routine could pass in the position of the
3187 first such variant, so it wouldn't have to be found again.  But that is not the
3188 case, because typically when the caller is likely to use this flag, it won't be
3189 calling this routine unless it finds something that won't fit into a byte.
3190 Otherwise it tries to not upgrade and just use bytes.  But some things that
3191 do fit into a byte are variants in utf8, and the caller may not have been
3192 keeping track of these.)
3193
3194 If the routine itself changes the string, it adds a trailing NUL.  Such a NUL
3195 isn't guaranteed due to having other routines do the work in some input cases,
3196 or if the input is already flagged as being in utf8.
3197
3198 The speed of this could perhaps be improved for many cases if someone wanted to
3199 write a fast function that counts the number of variant characters in a string,
3200 especially if it could return the position of the first one.
3201
3202 */
3203
3204 STRLEN
3205 Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags, STRLEN extra)
3206 {
3207     dVAR;
3208
3209     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3210
3211     if (sv == &PL_sv_undef)
3212         return 0;
3213     if (!SvPOK(sv)) {
3214         STRLEN len = 0;
3215         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3216             (void) sv_2pv_flags(sv,&len, flags);
3217             if (SvUTF8(sv)) {
3218                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3219                 return len;
3220             }
3221         } else {
3222             (void) SvPV_force(sv,len);
3223         }
3224     }
3225
3226     if (SvUTF8(sv)) {
3227         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3228         return SvCUR(sv);
3229     }
3230
3231     if (SvIsCOW(sv)) {
3232         sv_force_normal_flags(sv, 0);
3233     }
3234
3235     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3236         sv_recode_to_utf8(sv, PL_encoding);
3237         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3238         return SvCUR(sv);
3239     }
3240
3241     if (SvCUR(sv) == 0) {
3242         if (extra) SvGROW(sv, extra);
3243     } else { /* Assume Latin-1/EBCDIC */
3244         /* This function could be much more efficient if we
3245          * had a FLAG in SVs to signal if there are any variant
3246          * chars in the PV.  Given that there isn't such a flag
3247          * make the loop as fast as possible (although there are certainly ways
3248          * to speed this up, eg. through vectorization) */
3249         U8 * s = (U8 *) SvPVX_const(sv);
3250         U8 * e = (U8 *) SvEND(sv);
3251         U8 *t = s;
3252         STRLEN two_byte_count = 0;
3253         
3254         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3255
3256         /* See if really will need to convert to utf8.  We mustn't rely on our
3257          * incoming SV being well formed and having a trailing '\0', as certain
3258          * code in pp_formline can send us partially built SVs. */
3259
3260         while (t < e) {
3261             const U8 ch = *t++;
3262             if (NATIVE_IS_INVARIANT(ch)) continue;
3263
3264             t--;    /* t already incremented; re-point to first variant */
3265             two_byte_count = 1;
3266             goto must_be_utf8;
3267         }
3268
3269         /* utf8 conversion not needed because all are invariants.  Mark as
3270          * UTF-8 even if no variant - saves scanning loop */
3271         SvUTF8_on(sv);
3272         return SvCUR(sv);
3273
3274 must_be_utf8:
3275
3276         /* Here, the string should be converted to utf8, either because of an
3277          * input flag (two_byte_count = 0), or because a character that
3278          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3279          * the beginning of the string (if we didn't examine anything), or to
3280          * the first variant.  In either case, everything from s to t - 1 will
3281          * occupy only 1 byte each on output.
3282          *
3283          * There are two main ways to convert.  One is to create a new string
3284          * and go through the input starting from the beginning, appending each
3285          * converted value onto the new string as we go along.  It's probably
3286          * best to allocate enough space in the string for the worst possible
3287          * case rather than possibly running out of space and having to
3288          * reallocate and then copy what we've done so far.  Since everything
3289          * from s to t - 1 is invariant, the destination can be initialized
3290          * with these using a fast memory copy
3291          *
3292          * The other way is to figure out exactly how big the string should be
3293          * by parsing the entire input.  Then you don't have to make it big
3294          * enough to handle the worst possible case, and more importantly, if
3295          * the string you already have is large enough, you don't have to
3296          * allocate a new string, you can copy the last character in the input
3297          * string to the final position(s) that will be occupied by the
3298          * converted string and go backwards, stopping at t, since everything
3299          * before that is invariant.
3300          *
3301          * There are advantages and disadvantages to each method.
3302          *
3303          * In the first method, we can allocate a new string, do the memory
3304          * copy from the s to t - 1, and then proceed through the rest of the
3305          * string byte-by-byte.
3306          *
3307          * In the second method, we proceed through the rest of the input
3308          * string just calculating how big the converted string will be.  Then
3309          * there are two cases:
3310          *  1)  if the string has enough extra space to handle the converted
3311          *      value.  We go backwards through the string, converting until we
3312          *      get to the position we are at now, and then stop.  If this
3313          *      position is far enough along in the string, this method is
3314          *      faster than the other method.  If the memory copy were the same
3315          *      speed as the byte-by-byte loop, that position would be about
3316          *      half-way, as at the half-way mark, parsing to the end and back
3317          *      is one complete string's parse, the same amount as starting
3318          *      over and going all the way through.  Actually, it would be
3319          *      somewhat less than half-way, as it's faster to just count bytes
3320          *      than to also copy, and we don't have the overhead of allocating
3321          *      a new string, changing the scalar to use it, and freeing the
3322          *      existing one.  But if the memory copy is fast, the break-even
3323          *      point is somewhere after half way.  The counting loop could be
3324          *      sped up by vectorization, etc, to move the break-even point
3325          *      further towards the beginning.
3326          *  2)  if the string doesn't have enough space to handle the converted
3327          *      value.  A new string will have to be allocated, and one might
3328          *      as well, given that, start from the beginning doing the first
3329          *      method.  We've spent extra time parsing the string and in
3330          *      exchange all we've gotten is that we know precisely how big to
3331          *      make the new one.  Perl is more optimized for time than space,
3332          *      so this case is a loser.
3333          * So what I've decided to do is not use the 2nd method unless it is
3334          * guaranteed that a new string won't have to be allocated, assuming
3335          * the worst case.  I also decided not to put any more conditions on it
3336          * than this, for now.  It seems likely that, since the worst case is
3337          * twice as big as the unknown portion of the string (plus 1), we won't
3338          * be guaranteed enough space, causing us to go to the first method,
3339          * unless the string is short, or the first variant character is near
3340          * the end of it.  In either of these cases, it seems best to use the
3341          * 2nd method.  The only circumstance I can think of where this would
3342          * be really slower is if the string had once had much more data in it
3343          * than it does now, but there is still a substantial amount in it  */
3344
3345         {
3346             STRLEN invariant_head = t - s;
3347             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3348             if (SvLEN(sv) < size) {
3349
3350                 /* Here, have decided to allocate a new string */
3351
3352                 U8 *dst;
3353                 U8 *d;
3354
3355                 Newx(dst, size, U8);
3356
3357                 /* If no known invariants at the beginning of the input string,
3358                  * set so starts from there.  Otherwise, can use memory copy to
3359                  * get up to where we are now, and then start from here */
3360
3361                 if (invariant_head <= 0) {
3362                     d = dst;
3363                 } else {
3364                     Copy(s, dst, invariant_head, char);
3365                     d = dst + invariant_head;
3366                 }
3367
3368                 while (t < e) {
3369                     const UV uv = NATIVE8_TO_UNI(*t++);
3370                     if (UNI_IS_INVARIANT(uv))
3371                         *d++ = (U8)UNI_TO_NATIVE(uv);
3372                     else {
3373                         *d++ = (U8)UTF8_EIGHT_BIT_HI(uv);
3374                         *d++ = (U8)UTF8_EIGHT_BIT_LO(uv);
3375                     }
3376                 }
3377                 *d = '\0';
3378                 SvPV_free(sv); /* No longer using pre-existing string */
3379                 SvPV_set(sv, (char*)dst);
3380                 SvCUR_set(sv, d - dst);
3381                 SvLEN_set(sv, size);
3382             } else {
3383
3384                 /* Here, have decided to get the exact size of the string.
3385                  * Currently this happens only when we know that there is
3386                  * guaranteed enough space to fit the converted string, so
3387                  * don't have to worry about growing.  If two_byte_count is 0,
3388                  * then t points to the first byte of the string which hasn't
3389                  * been examined yet.  Otherwise two_byte_count is 1, and t
3390                  * points to the first byte in the string that will expand to
3391                  * two.  Depending on this, start examining at t or 1 after t.
3392                  * */
3393
3394                 U8 *d = t + two_byte_count;
3395
3396
3397                 /* Count up the remaining bytes that expand to two */
3398
3399                 while (d < e) {
3400                     const U8 chr = *d++;
3401                     if (! NATIVE_IS_INVARIANT(chr)) two_byte_count++;
3402                 }
3403
3404                 /* The string will expand by just the number of bytes that
3405                  * occupy two positions.  But we are one afterwards because of
3406                  * the increment just above.  This is the place to put the
3407                  * trailing NUL, and to set the length before we decrement */
3408
3409                 d += two_byte_count;
3410                 SvCUR_set(sv, d - s);
3411                 *d-- = '\0';
3412
3413
3414                 /* Having decremented d, it points to the position to put the
3415                  * very last byte of the expanded string.  Go backwards through
3416                  * the string, copying and expanding as we go, stopping when we
3417                  * get to the part that is invariant the rest of the way down */
3418
3419                 e--;
3420                 while (e >= t) {
3421                     const U8 ch = NATIVE8_TO_UNI(*e--);
3422                     if (UNI_IS_INVARIANT(ch)) {
3423                         *d-- = UNI_TO_NATIVE(ch);
3424                     } else {
3425                         *d-- = (U8)UTF8_EIGHT_BIT_LO(ch);
3426                         *d-- = (U8)UTF8_EIGHT_BIT_HI(ch);
3427                     }
3428                 }
3429             }
3430         }
3431     }
3432
3433     /* Mark as UTF-8 even if no variant - saves scanning loop */
3434     SvUTF8_on(sv);
3435     return SvCUR(sv);
3436 }
3437
3438 /*
3439 =for apidoc sv_utf8_downgrade
3440
3441 Attempts to convert the PV of an SV from characters to bytes.
3442 If the PV contains a character that cannot fit
3443 in a byte, this conversion will fail;
3444 in this case, either returns false or, if C<fail_ok> is not
3445 true, croaks.
3446
3447 This is not as a general purpose Unicode to byte encoding interface:
3448 use the Encode extension for that.
3449
3450 =cut
3451 */
3452
3453 bool
3454 Perl_sv_utf8_downgrade(pTHX_ register SV *const sv, const bool fail_ok)
3455 {
3456     dVAR;
3457
3458     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3459
3460     if (SvPOKp(sv) && SvUTF8(sv)) {
3461         if (SvCUR(sv)) {
3462             U8 *s;
3463             STRLEN len;
3464
3465             if (SvIsCOW(sv)) {
3466                 sv_force_normal_flags(sv, 0);
3467             }
3468             s = (U8 *) SvPV(sv, len);
3469             if (!utf8_to_bytes(s, &len)) {
3470                 if (fail_ok)
3471                     return FALSE;
3472                 else {
3473                     if (PL_op)
3474                         Perl_croak(aTHX_ "Wide character in %s",
3475                                    OP_DESC(PL_op));
3476                     else
3477                         Perl_croak(aTHX_ "Wide character");
3478                 }
3479             }
3480             SvCUR_set(sv, len);
3481         }
3482     }
3483     SvUTF8_off(sv);
3484     return TRUE;
3485 }
3486
3487 /*
3488 =for apidoc sv_utf8_encode
3489
3490 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3491 flag off so that it looks like octets again.
3492
3493 =cut
3494 */
3495
3496 void
3497 Perl_sv_utf8_encode(pTHX_ register SV *const sv)
3498 {
3499     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3500
3501     if (SvIsCOW(sv)) {
3502         sv_force_normal_flags(sv, 0);
3503     }
3504     if (SvREADONLY(sv)) {
3505         Perl_croak(aTHX_ "%s", PL_no_modify);
3506     }
3507     (void) sv_utf8_upgrade(sv);
3508     SvUTF8_off(sv);
3509 }
3510
3511 /*
3512 =for apidoc sv_utf8_decode
3513
3514 If the PV of the SV is an octet sequence in UTF-8
3515 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3516 so that it looks like a character. If the PV contains only single-byte
3517 characters, the C<SvUTF8> flag stays being off.
3518 Scans PV for validity and returns false if the PV is invalid UTF-8.
3519
3520 =cut
3521 */
3522
3523 bool
3524 Perl_sv_utf8_decode(pTHX_ register SV *const sv)
3525 {
3526     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3527
3528     if (SvPOKp(sv)) {
3529         const U8 *c;
3530         const U8 *e;
3531
3532         /* The octets may have got themselves encoded - get them back as
3533          * bytes
3534          */
3535         if (!sv_utf8_downgrade(sv, TRUE))
3536             return FALSE;
3537
3538         /* it is actually just a matter of turning the utf8 flag on, but
3539          * we want to make sure everything inside is valid utf8 first.
3540          */
3541         c = (const U8 *) SvPVX_const(sv);
3542         if (!is_utf8_string(c, SvCUR(sv)+1))
3543             return FALSE;
3544         e = (const U8 *) SvEND(sv);
3545         while (c < e) {
3546             const U8 ch = *c++;
3547             if (!UTF8_IS_INVARIANT(ch)) {
3548                 SvUTF8_on(sv);
3549                 break;
3550             }
3551         }
3552     }
3553     return TRUE;
3554 }
3555
3556 /*
3557 =for apidoc sv_setsv
3558
3559 Copies the contents of the source SV C<ssv> into the destination SV
3560 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3561 function if the source SV needs to be reused. Does not handle 'set' magic.
3562 Loosely speaking, it performs a copy-by-value, obliterating any previous
3563 content of the destination.
3564
3565 You probably want to use one of the assortment of wrappers, such as
3566 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3567 C<SvSetMagicSV_nosteal>.
3568
3569 =for apidoc sv_setsv_flags
3570
3571 Copies the contents of the source SV C<ssv> into the destination SV
3572 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3573 function if the source SV needs to be reused. Does not handle 'set' magic.
3574 Loosely speaking, it performs a copy-by-value, obliterating any previous
3575 content of the destination.
3576 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3577 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3578 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3579 and C<sv_setsv_nomg> are implemented in terms of this function.
3580
3581 You probably want to use one of the assortment of wrappers, such as
3582 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3583 C<SvSetMagicSV_nosteal>.
3584
3585 This is the primary function for copying scalars, and most other
3586 copy-ish functions and macros use this underneath.
3587
3588 =cut
3589 */
3590
3591 static void
3592 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3593 {
3594     I32 mro_changes = 0; /* 1 = method, 2 = isa */
3595
3596     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3597
3598     if (dtype != SVt_PVGV) {
3599         const char * const name = GvNAME(sstr);
3600         const STRLEN len = GvNAMELEN(sstr);
3601         {
3602             if (dtype >= SVt_PV) {
3603                 SvPV_free(dstr);
3604                 SvPV_set(dstr, 0);
3605                 SvLEN_set(dstr, 0);
3606                 SvCUR_set(dstr, 0);
3607             }
3608             SvUPGRADE(dstr, SVt_PVGV);
3609             (void)SvOK_off(dstr);
3610             /* FIXME - why are we doing this, then turning it off and on again
3611                below?  */
3612             isGV_with_GP_on(dstr);
3613         }
3614         GvSTASH(dstr) = GvSTASH(sstr);
3615         if (GvSTASH(dstr))
3616             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3617         gv_name_set(MUTABLE_GV(dstr), name, len, GV_ADD);
3618         SvFAKE_on(dstr);        /* can coerce to non-glob */
3619     }
3620
3621     if(GvGP(MUTABLE_GV(sstr))) {
3622         /* If source has method cache entry, clear it */
3623         if(GvCVGEN(sstr)) {
3624             SvREFCNT_dec(GvCV(sstr));
3625             GvCV(sstr) = NULL;
3626             GvCVGEN(sstr) = 0;
3627         }
3628         /* If source has a real method, then a method is
3629            going to change */
3630         else if(GvCV((const GV *)sstr)) {
3631             mro_changes = 1;
3632         }
3633     }
3634
3635     /* If dest already had a real method, that's a change as well */
3636     if(!mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)) {
3637         mro_changes = 1;
3638     }
3639
3640     if(strEQ(GvNAME((const GV *)dstr),"ISA"))
3641         mro_changes = 2;
3642
3643     gp_free(MUTABLE_GV(dstr));
3644     isGV_with_GP_off(dstr);
3645     (void)SvOK_off(dstr);
3646     isGV_with_GP_on(dstr);
3647     GvINTRO_off(dstr);          /* one-shot flag */
3648     GvGP(dstr) = gp_ref(GvGP(sstr));
3649     if (SvTAINTED(sstr))
3650         SvTAINT(dstr);
3651     if (GvIMPORTED(dstr) != GVf_IMPORTED
3652         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3653         {
3654             GvIMPORTED_on(dstr);
3655         }
3656     GvMULTI_on(dstr);
3657     if(mro_changes == 2) mro_isa_changed_in(GvSTASH(dstr));
3658     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3659     return;
3660 }
3661
3662 static void
3663 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3664 {
3665     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3666     SV *dref = NULL;
3667     const int intro = GvINTRO(dstr);
3668     SV **location;
3669     U8 import_flag = 0;
3670     const U32 stype = SvTYPE(sref);
3671
3672     PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3673
3674     if (intro) {
3675         GvINTRO_off(dstr);      /* one-shot flag */
3676         GvLINE(dstr) = CopLINE(PL_curcop);
3677         GvEGV(dstr) = MUTABLE_GV(dstr);
3678     }
3679     GvMULTI_on(dstr);
3680     switch (stype) {
3681     case SVt_PVCV:
3682         location = (SV **) &GvCV(dstr);
3683         import_flag = GVf_IMPORTED_CV;
3684         goto common;
3685     case SVt_PVHV:
3686         location = (SV **) &GvHV(dstr);
3687         import_flag = GVf_IMPORTED_HV;
3688         goto common;
3689     case SVt_PVAV:
3690         location = (SV **) &GvAV(dstr);
3691         import_flag = GVf_IMPORTED_AV;
3692         goto common;
3693     case SVt_PVIO:
3694         location = (SV **) &GvIOp(dstr);
3695         goto common;
3696     case SVt_PVFM:
3697         location = (SV **) &GvFORM(dstr);
3698         goto common;
3699     default:
3700         location = &GvSV(dstr);
3701         import_flag = GVf_IMPORTED_SV;
3702     common:
3703         if (intro) {
3704             if (stype == SVt_PVCV) {
3705                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3706                 if (GvCVGEN(dstr)) {
3707                     SvREFCNT_dec(GvCV(dstr));
3708                     GvCV(dstr) = NULL;
3709                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3710                 }
3711             }
3712             SAVEGENERICSV(*location);
3713         }
3714         else
3715             dref = *location;
3716         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3717             CV* const cv = MUTABLE_CV(*location);
3718             if (cv) {
3719                 if (!GvCVGEN((const GV *)dstr) &&
3720                     (CvROOT(cv) || CvXSUB(cv)))
3721                     {
3722                         /* Redefining a sub - warning is mandatory if
3723                            it was a const and its value changed. */
3724                         if (CvCONST(cv) && CvCONST((const CV *)sref)
3725                             && cv_const_sv(cv)
3726                             == cv_const_sv((const CV *)sref)) {
3727                             NOOP;
3728                             /* They are 2 constant subroutines generated from
3729                                the same constant. This probably means that
3730                                they are really the "same" proxy subroutine
3731                                instantiated in 2 places. Most likely this is
3732                                when a constant is exported twice.  Don't warn.
3733                             */
3734                         }
3735                         else if (ckWARN(WARN_REDEFINE)
3736                                  || (CvCONST(cv)
3737                                      && (!CvCONST((const CV *)sref)
3738                                          || sv_cmp(cv_const_sv(cv),
3739                                                    cv_const_sv((const CV *)
3740                                                                sref))))) {
3741                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3742                                         (const char *)
3743                                         (CvCONST(cv)
3744                                          ? "Constant subroutine %s::%s redefined"
3745                                          : "Subroutine %s::%s redefined"),
3746                                         HvNAME_get(GvSTASH((const GV *)dstr)),
3747                                         GvENAME(MUTABLE_GV(dstr)));
3748                         }
3749                     }
3750                 if (!intro)
3751                     cv_ckproto_len(cv, (const GV *)dstr,
3752                                    SvPOK(sref) ? SvPVX_const(sref) : NULL,
3753                                    SvPOK(sref) ? SvCUR(sref) : 0);
3754             }
3755             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3756             GvASSUMECV_on(dstr);
3757             if(GvSTASH(dstr)) mro_method_changed_in(GvSTASH(dstr)); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3758         }
3759         *location = sref;
3760         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3761             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3762             GvFLAGS(dstr) |= import_flag;
3763         }
3764         if (stype == SVt_PVAV && strEQ(GvNAME((GV*)dstr), "ISA")) {
3765             sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3766             mro_isa_changed_in(GvSTASH(dstr));
3767         }
3768         break;
3769     }
3770     SvREFCNT_dec(dref);
3771     if (SvTAINTED(sstr))
3772         SvTAINT(dstr);
3773     return;
3774 }
3775
3776 void
3777 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags)
3778 {
3779     dVAR;
3780     register U32 sflags;
3781     register int dtype;
3782     register svtype stype;
3783
3784     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
3785
3786     if (sstr == dstr)
3787         return;
3788
3789     if (SvIS_FREED(dstr)) {
3790         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
3791                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
3792     }
3793     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3794     if (!sstr)
3795         sstr = &PL_sv_undef;
3796     if (SvIS_FREED(sstr)) {
3797         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
3798                    (void*)sstr, (void*)dstr);
3799     }
3800     stype = SvTYPE(sstr);
3801     dtype = SvTYPE(dstr);
3802
3803     (void)SvAMAGIC_off(dstr);
3804     if ( SvVOK(dstr) )
3805     {
3806         /* need to nuke the magic */
3807         mg_free(dstr);
3808     }
3809
3810     /* There's a lot of redundancy below but we're going for speed here */
3811
3812     switch (stype) {
3813     case SVt_NULL:
3814       undef_sstr:
3815         if (dtype != SVt_PVGV) {
3816             (void)SvOK_off(dstr);
3817             return;
3818         }
3819         break;
3820     case SVt_IV:
3821         if (SvIOK(sstr)) {
3822             switch (dtype) {
3823             case SVt_NULL:
3824                 sv_upgrade(dstr, SVt_IV);
3825                 break;
3826             case SVt_NV:
3827             case SVt_PV:
3828                 sv_upgrade(dstr, SVt_PVIV);
3829                 break;
3830             case SVt_PVGV:
3831                 goto end_of_first_switch;
3832             }
3833             (void)SvIOK_only(dstr);
3834             SvIV_set(dstr,  SvIVX(sstr));
3835             if (SvIsUV(sstr))
3836                 SvIsUV_on(dstr);
3837             /* SvTAINTED can only be true if the SV has taint magic, which in
3838                turn means that the SV type is PVMG (or greater). This is the
3839                case statement for SVt_IV, so this cannot be true (whatever gcov
3840                may say).  */
3841             assert(!SvTAINTED(sstr));
3842             return;
3843         }
3844         if (!SvROK(sstr))
3845             goto undef_sstr;
3846         if (dtype < SVt_PV && dtype != SVt_IV)
3847             sv_upgrade(dstr, SVt_IV);
3848         break;
3849
3850     case SVt_NV:
3851         if (SvNOK(sstr)) {
3852             switch (dtype) {
3853             case SVt_NULL:
3854             case SVt_IV:
3855                 sv_upgrade(dstr, SVt_NV);
3856                 break;
3857             case SVt_PV:
3858             case SVt_PVIV:
3859                 sv_upgrade(dstr, SVt_PVNV);
3860                 break;
3861             case SVt_PVGV:
3862                 goto end_of_first_switch;
3863             }
3864             SvNV_set(dstr, SvNVX(sstr));
3865             (void)SvNOK_only(dstr);
3866             /* SvTAINTED can only be true if the SV has taint magic, which in
3867                turn means that the SV type is PVMG (or greater). This is the
3868                case statement for SVt_NV, so this cannot be true (whatever gcov
3869                may say).  */
3870             assert(!SvTAINTED(sstr));
3871             return;
3872         }
3873         goto undef_sstr;
3874
3875     case SVt_PVFM:
3876 #ifdef PERL_OLD_COPY_ON_WRITE
3877         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3878             if (dtype < SVt_PVIV)
3879                 sv_upgrade(dstr, SVt_PVIV);
3880             break;
3881         }
3882         /* Fall through */
3883 #endif
3884     case SVt_PV:
3885         if (dtype < SVt_PV)
3886             sv_upgrade(dstr, SVt_PV);
3887         break;
3888     case SVt_PVIV:
3889         if (dtype < SVt_PVIV)
3890             sv_upgrade(dstr, SVt_PVIV);
3891         break;
3892     case SVt_PVNV:
3893         if (dtype < SVt_PVNV)
3894             sv_upgrade(dstr, SVt_PVNV);
3895         break;
3896     default:
3897         {
3898         const char * const type = sv_reftype(sstr,0);
3899         if (PL_op)
3900             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
3901         else
3902             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3903         }
3904         break;
3905
3906     case SVt_REGEXP:
3907         if (dtype < SVt_REGEXP)
3908             sv_upgrade(dstr, SVt_REGEXP);
3909         break;
3910
3911         /* case SVt_BIND: */
3912     case SVt_PVLV:
3913     case SVt_PVGV:
3914         if (isGV_with_GP(sstr) && dtype <= SVt_PVGV) {
3915             glob_assign_glob(dstr, sstr, dtype);
3916             return;
3917         }
3918         /* SvVALID means that this PVGV is playing at being an FBM.  */
3919         /*FALLTHROUGH*/
3920
3921     case SVt_PVMG:
3922         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3923             mg_get(sstr);
3924             if (SvTYPE(sstr) != stype) {
3925                 stype = SvTYPE(sstr);
3926                 if (isGV_with_GP(sstr) && stype == SVt_PVGV && dtype <= SVt_PVGV) {
3927                     glob_assign_glob(dstr, sstr, dtype);
3928                     return;
3929                 }
3930             }
3931         }
3932         if (stype == SVt_PVLV)
3933             SvUPGRADE(dstr, SVt_PVNV);
3934         else
3935             SvUPGRADE(dstr, (svtype)stype);
3936     }
3937  end_of_first_switch:
3938
3939     /* dstr may have been upgraded.  */
3940     dtype = SvTYPE(dstr);
3941     sflags = SvFLAGS(sstr);
3942
3943     if (dtype == SVt_PVCV || dtype == SVt_PVFM) {
3944         /* Assigning to a subroutine sets the prototype.  */
3945         if (SvOK(sstr)) {
3946             STRLEN len;
3947             const char *const ptr = SvPV_const(sstr, len);
3948
3949             SvGROW(dstr, len + 1);
3950             Copy(ptr, SvPVX(dstr), len + 1, char);
3951             SvCUR_set(dstr, len);
3952             SvPOK_only(dstr);
3953             SvFLAGS(dstr) |= sflags & SVf_UTF8;
3954         } else {
3955             SvOK_off(dstr);
3956         }
3957     } else if (dtype == SVt_PVAV || dtype == SVt_PVHV) {
3958         const char * const type = sv_reftype(dstr,0);
3959         if (PL_op)
3960             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
3961         else
3962             Perl_croak(aTHX_ "Cannot copy to %s", type);
3963     } else if (sflags & SVf_ROK) {
3964         if (isGV_with_GP(dstr) && dtype == SVt_PVGV
3965             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
3966             sstr = SvRV(sstr);
3967             if (sstr == dstr) {
3968                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3969                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3970                 {
3971                     GvIMPORTED_on(dstr);
3972                 }
3973                 GvMULTI_on(dstr);
3974                 return;
3975             }
3976             glob_assign_glob(dstr, sstr, dtype);
3977             return;
3978         }
3979
3980         if (dtype >= SVt_PV) {
3981             if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
3982                 glob_assign_ref(dstr, sstr);
3983                 return;
3984             }
3985             if (SvPVX_const(dstr)) {
3986                 SvPV_free(dstr);
3987                 SvLEN_set(dstr, 0);
3988                 SvCUR_set(dstr, 0);
3989             }
3990         }
3991         (void)SvOK_off(dstr);
3992         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3993         SvFLAGS(dstr) |= sflags & SVf_ROK;
3994         assert(!(sflags & SVp_NOK));
3995         assert(!(sflags & SVp_IOK));
3996         assert(!(sflags & SVf_NOK));
3997         assert(!(sflags & SVf_IOK));
3998     }
3999     else if (dtype == SVt_PVGV && isGV_with_GP(dstr)) {
4000         if (!(sflags & SVf_OK)) {
4001             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4002                            "Undefined value assigned to typeglob");
4003         }
4004         else {
4005             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
4006             if (dstr != (const SV *)gv) {
4007                 if (GvGP(dstr))
4008                     gp_free(MUTABLE_GV(dstr));
4009                 GvGP(dstr) = gp_ref(GvGP(gv));
4010             }
4011         }
4012     }
4013     else if (dtype == SVt_REGEXP && stype == SVt_REGEXP) {
4014         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4015     }
4016     else if (sflags & SVp_POK) {
4017         bool isSwipe = 0;
4018
4019         /*
4020          * Check to see if we can just swipe the string.  If so, it's a
4021          * possible small lose on short strings, but a big win on long ones.
4022          * It might even be a win on short strings if SvPVX_const(dstr)
4023          * has to be allocated and SvPVX_const(sstr) has to be freed.
4024          * Likewise if we can set up COW rather than doing an actual copy, we
4025          * drop to the else clause, as the swipe code and the COW setup code
4026          * have much in common.
4027          */
4028
4029         /* Whichever path we take through the next code, we want this true,
4030            and doing it now facilitates the COW check.  */
4031         (void)SvPOK_only(dstr);
4032
4033         if (
4034             /* If we're already COW then this clause is not true, and if COW
4035                is allowed then we drop down to the else and make dest COW 
4036                with us.  If caller hasn't said that we're allowed to COW
4037                shared hash keys then we don't do the COW setup, even if the
4038                source scalar is a shared hash key scalar.  */
4039             (((flags & SV_COW_SHARED_HASH_KEYS)
4040                ? (sflags & (SVf_FAKE|SVf_READONLY)) != (SVf_FAKE|SVf_READONLY)
4041                : 1 /* If making a COW copy is forbidden then the behaviour we
4042                        desire is as if the source SV isn't actually already
4043                        COW, even if it is.  So we act as if the source flags
4044                        are not COW, rather than actually testing them.  */
4045               )
4046 #ifndef PERL_OLD_COPY_ON_WRITE
4047              /* The change that added SV_COW_SHARED_HASH_KEYS makes the logic
4048                 when PERL_OLD_COPY_ON_WRITE is defined a little wrong.
4049                 Conceptually PERL_OLD_COPY_ON_WRITE being defined should
4050                 override SV_COW_SHARED_HASH_KEYS, because it means "always COW"
4051                 but in turn, it's somewhat dead code, never expected to go
4052                 live, but more kept as a placeholder on how to do it better
4053                 in a newer implementation.  */
4054              /* If we are COW and dstr is a suitable target then we drop down
4055                 into the else and make dest a COW of us.  */
4056              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
4057 #endif
4058              )
4059             &&
4060             !(isSwipe =
4061                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
4062                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4063                  (!(flags & SV_NOSTEAL)) &&
4064                                         /* and we're allowed to steal temps */
4065                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4066                  SvLEN(sstr))             /* and really is a string */
4067 #ifdef PERL_OLD_COPY_ON_WRITE
4068             && ((flags & SV_COW_SHARED_HASH_KEYS)
4069                 ? (!((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4070                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4071                      && SvTYPE(sstr) >= SVt_PVIV && SvTYPE(sstr) != SVt_PVFM))
4072                 : 1)
4073 #endif
4074             ) {
4075             /* Failed the swipe test, and it's not a shared hash key either.
4076                Have to copy the string.  */
4077             STRLEN len = SvCUR(sstr);
4078             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
4079             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
4080             SvCUR_set(dstr, len);
4081             *SvEND(dstr) = '\0';
4082         } else {
4083             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
4084                be true in here.  */
4085             /* Either it's a shared hash key, or it's suitable for
4086                copy-on-write or we can swipe the string.  */
4087             if (DEBUG_C_TEST) {
4088                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4089                 sv_dump(sstr);
4090                 sv_dump(dstr);
4091             }
4092 #ifdef PERL_OLD_COPY_ON_WRITE
4093             if (!isSwipe) {
4094                 if ((sflags & (SVf_FAKE | SVf_READONLY))
4095                     != (SVf_FAKE | SVf_READONLY)) {
4096                     SvREADONLY_on(sstr);
4097                     SvFAKE_on(sstr);
4098                     /* Make the source SV into a loop of 1.
4099                        (about to become 2) */
4100                     SV_COW_NEXT_SV_SET(sstr, sstr);
4101                 }
4102             }
4103 #endif
4104             /* Initial code is common.  */
4105             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4106                 SvPV_free(dstr);
4107             }
4108
4109             if (!isSwipe) {
4110                 /* making another shared SV.  */
4111                 STRLEN cur = SvCUR(sstr);
4112                 STRLEN len = SvLEN(sstr);
4113 #ifdef PERL_OLD_COPY_ON_WRITE
4114                 if (len) {
4115                     assert (SvTYPE(dstr) >= SVt_PVIV);
4116                     /* SvIsCOW_normal */
4117                     /* splice us in between source and next-after-source.  */
4118                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4119                     SV_COW_NEXT_SV_SET(sstr, dstr);
4120                     SvPV_set(dstr, SvPVX_mutable(sstr));
4121                 } else
4122 #endif
4123                 {
4124                     /* SvIsCOW_shared_hash */
4125                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4126                                           "Copy on write: Sharing hash\n"));
4127
4128                     assert (SvTYPE(dstr) >= SVt_PV);
4129                     SvPV_set(dstr,
4130                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4131                 }
4132                 SvLEN_set(dstr, len);
4133                 SvCUR_set(dstr, cur);
4134                 SvREADONLY_on(dstr);
4135                 SvFAKE_on(dstr);
4136             }
4137             else
4138                 {       /* Passes the swipe test.  */
4139                 SvPV_set(dstr, SvPVX_mutable(sstr));
4140                 SvLEN_set(dstr, SvLEN(sstr));
4141                 SvCUR_set(dstr, SvCUR(sstr));
4142
4143                 SvTEMP_off(dstr);
4144                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
4145                 SvPV_set(sstr, NULL);
4146                 SvLEN_set(sstr, 0);
4147                 SvCUR_set(sstr, 0);
4148                 SvTEMP_off(sstr);
4149             }
4150         }
4151         if (sflags & SVp_NOK) {
4152             SvNV_set(dstr, SvNVX(sstr));
4153         }
4154         if (sflags & SVp_IOK) {
4155             SvIV_set(dstr, SvIVX(sstr));
4156             /* Must do this otherwise some other overloaded use of 0x80000000
4157                gets confused. I guess SVpbm_VALID */
4158             if (sflags & SVf_IVisUV)
4159                 SvIsUV_on(dstr);
4160         }
4161         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4162         {
4163             const MAGIC * const smg = SvVSTRING_mg(sstr);
4164             if (smg) {
4165                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4166                          smg->mg_ptr, smg->mg_len);
4167                 SvRMAGICAL_on(dstr);
4168             }
4169         }
4170     }
4171     else if (sflags & (SVp_IOK|SVp_NOK)) {
4172         (void)SvOK_off(dstr);
4173         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4174         if (sflags & SVp_IOK) {
4175             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4176             SvIV_set(dstr, SvIVX(sstr));
4177         }
4178         if (sflags & SVp_NOK) {
4179             SvNV_set(dstr, SvNVX(sstr));
4180         }
4181     }
4182     else {
4183         if (isGV_with_GP(sstr)) {
4184             /* This stringification rule for globs is spread in 3 places.
4185                This feels bad. FIXME.  */
4186             const U32 wasfake = sflags & SVf_FAKE;
4187
4188             /* FAKE globs can get coerced, so need to turn this off
4189                temporarily if it is on.  */
4190             SvFAKE_off(sstr);
4191             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4192             SvFLAGS(sstr) |= wasfake;
4193         }
4194         else
4195             (void)SvOK_off(dstr);
4196     }
4197     if (SvTAINTED(sstr))
4198         SvTAINT(dstr);
4199 }
4200
4201 /*
4202 =for apidoc sv_setsv_mg
4203
4204 Like C<sv_setsv>, but also handles 'set' magic.
4205
4206 =cut
4207 */
4208
4209 void
4210 Perl_sv_setsv_mg(pTHX_ SV *const dstr, register SV *const sstr)
4211 {
4212     PERL_ARGS_ASSERT_SV_SETSV_MG;
4213
4214     sv_setsv(dstr,sstr);
4215     SvSETMAGIC(dstr);
4216 }
4217
4218 #ifdef PERL_OLD_COPY_ON_WRITE
4219 SV *
4220 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4221 {
4222     STRLEN cur = SvCUR(sstr);
4223     STRLEN len = SvLEN(sstr);
4224     register char *new_pv;
4225
4226     PERL_ARGS_ASSERT_SV_SETSV_COW;
4227
4228     if (DEBUG_C_TEST) {
4229         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4230                       (void*)sstr, (void*)dstr);
4231         sv_dump(sstr);
4232         if (dstr)
4233                     sv_dump(dstr);
4234     }
4235
4236     if (dstr) {
4237         if (SvTHINKFIRST(dstr))
4238             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4239         else if (SvPVX_const(dstr))
4240             Safefree(SvPVX_const(dstr));
4241     }
4242     else
4243         new_SV(dstr);
4244     SvUPGRADE(dstr, SVt_PVIV);
4245
4246     assert (SvPOK(sstr));
4247     assert (SvPOKp(sstr));
4248     assert (!SvIOK(sstr));
4249     assert (!SvIOKp(sstr));
4250     assert (!SvNOK(sstr));
4251     assert (!SvNOKp(sstr));
4252
4253     if (SvIsCOW(sstr)) {
4254
4255         if (SvLEN(sstr) == 0) {
4256             /* source is a COW shared hash key.  */
4257             DEBUG_C(PerlIO_printf(Perl_debug_log,
4258                                   "Fast copy on write: Sharing hash\n"));
4259             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4260             goto common_exit;
4261         }
4262         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4263     } else {
4264         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4265         SvUPGRADE(sstr, SVt_PVIV);
4266         SvREADONLY_on(sstr);
4267         SvFAKE_on(sstr);
4268         DEBUG_C(PerlIO_printf(Perl_debug_log,
4269                               "Fast copy on write: Converting sstr to COW\n"));
4270         SV_COW_NEXT_SV_SET(dstr, sstr);
4271     }
4272     SV_COW_NEXT_SV_SET(sstr, dstr);
4273     new_pv = SvPVX_mutable(sstr);
4274
4275   common_exit:
4276     SvPV_set(dstr, new_pv);
4277     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4278     if (SvUTF8(sstr))
4279         SvUTF8_on(dstr);
4280     SvLEN_set(dstr, len);
4281     SvCUR_set(dstr, cur);
4282     if (DEBUG_C_TEST) {
4283         sv_dump(dstr);
4284     }
4285     return dstr;
4286 }
4287 #endif
4288
4289 /*
4290 =for apidoc sv_setpvn
4291
4292 Copies a string into an SV.  The C<len> parameter indicates the number of
4293 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4294 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4295
4296 =cut
4297 */
4298
4299 void
4300 Perl_sv_setpvn(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4301 {
4302     dVAR;
4303     register char *dptr;
4304
4305     PERL_ARGS_ASSERT_SV_SETPVN;
4306
4307     SV_CHECK_THINKFIRST_COW_DROP(sv);
4308     if (!ptr) {
4309         (void)SvOK_off(sv);
4310         return;
4311     }
4312     else {
4313         /* len is STRLEN which is unsigned, need to copy to signed */
4314         const IV iv = len;
4315         if (iv < 0)
4316             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4317     }
4318     SvUPGRADE(sv, SVt_PV);
4319
4320     dptr = SvGROW(sv, len + 1);
4321     Move(ptr,dptr,len,char);
4322     dptr[len] = '\0';
4323     SvCUR_set(sv, len);
4324     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4325     SvTAINT(sv);
4326 }
4327
4328 /*
4329 =for apidoc sv_setpvn_mg
4330
4331 Like C<sv_setpvn>, but also handles 'set' magic.
4332
4333 =cut
4334 */
4335
4336 void
4337 Perl_sv_setpvn_mg(pTHX_ register SV *const sv, register const char *const ptr, register const STRLEN len)
4338 {
4339     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4340
4341     sv_setpvn(sv,ptr,len);
4342     SvSETMAGIC(sv);
4343 }
4344
4345 /*
4346 =for apidoc sv_setpv
4347
4348 Copies a string into an SV.  The string must be null-terminated.  Does not
4349 handle 'set' magic.  See C<sv_setpv_mg>.
4350
4351 =cut
4352 */
4353
4354 void
4355 Perl_sv_setpv(pTHX_ register SV *const sv, register const char *const ptr)
4356 {
4357     dVAR;
4358     register STRLEN len;
4359
4360     PERL_ARGS_ASSERT_SV_SETPV;
4361
4362     SV_CHECK_THINKFIRST_COW_DROP(sv);
4363     if (!ptr) {
4364         (void)SvOK_off(sv);
4365         return;
4366     }
4367     len = strlen(ptr);
4368     SvUPGRADE(sv, SVt_PV);
4369
4370     SvGROW(sv, len + 1);
4371     Move(ptr,SvPVX(sv),len+1,char);
4372     SvCUR_set(sv, len);
4373     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4374     SvTAINT(sv);
4375 }
4376
4377 /*
4378 =for apidoc sv_setpv_mg
4379
4380 Like C<sv_setpv>, but also handles 'set' magic.
4381
4382 =cut
4383 */
4384
4385 void
4386 Perl_sv_setpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4387 {
4388     PERL_ARGS_ASSERT_SV_SETPV_MG;
4389
4390     sv_setpv(sv,ptr);
4391     SvSETMAGIC(sv);
4392 }
4393
4394 /*
4395 =for apidoc sv_usepvn_flags
4396
4397 Tells an SV to use C<ptr> to find its string value.  Normally the
4398 string is stored inside the SV but sv_usepvn allows the SV to use an
4399 outside string.  The C<ptr> should point to memory that was allocated
4400 by C<malloc>.  The string length, C<len>, must be supplied.  By default
4401 this function will realloc (i.e. move) the memory pointed to by C<ptr>,
4402 so that pointer should not be freed or used by the programmer after
4403 giving it to sv_usepvn, and neither should any pointers from "behind"
4404 that pointer (e.g. ptr + 1) be used.
4405
4406 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
4407 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
4408 will be skipped. (i.e. the buffer is actually at least 1 byte longer than
4409 C<len>, and already meets the requirements for storing in C<SvPVX>)
4410
4411 =cut
4412 */
4413
4414 void
4415 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4416 {
4417     dVAR;
4418     STRLEN allocate;
4419
4420     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
4421
4422     SV_CHECK_THINKFIRST_COW_DROP(sv);
4423     SvUPGRADE(sv, SVt_PV);
4424     if (!ptr) {
4425         (void)SvOK_off(sv);
4426         if (flags & SV_SMAGIC)
4427             SvSETMAGIC(sv);
4428         return;
4429     }
4430     if (SvPVX_const(sv))
4431         SvPV_free(sv);
4432
4433 #ifdef DEBUGGING
4434     if (flags & SV_HAS_TRAILING_NUL)
4435         assert(ptr[len] == '\0');
4436 #endif
4437
4438     allocate = (flags & SV_HAS_TRAILING_NUL)
4439         ? len + 1 :
4440 #ifdef Perl_safesysmalloc_size
4441         len + 1;
4442 #else 
4443         PERL_STRLEN_ROUNDUP(len + 1);
4444 #endif
4445     if (flags & SV_HAS_TRAILING_NUL) {
4446         /* It's long enough - do nothing.
4447            Specfically Perl_newCONSTSUB is relying on this.  */
4448     } else {
4449 #ifdef DEBUGGING
4450         /* Force a move to shake out bugs in callers.  */
4451         char *new_ptr = (char*)safemalloc(allocate);
4452         Copy(ptr, new_ptr, len, char);
4453         PoisonFree(ptr,len,char);
4454         Safefree(ptr);
4455         ptr = new_ptr;
4456 #else
4457         ptr = (char*) saferealloc (ptr, allocate);
4458 #endif
4459     }
4460 #ifdef Perl_safesysmalloc_size
4461     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
4462 #else
4463     SvLEN_set(sv, allocate);
4464 #endif
4465     SvCUR_set(sv, len);
4466     SvPV_set(sv, ptr);
4467     if (!(flags & SV_HAS_TRAILING_NUL)) {
4468         ptr[len] = '\0';
4469     }
4470     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4471     SvTAINT(sv);
4472     if (flags & SV_SMAGIC)
4473         SvSETMAGIC(sv);
4474 }
4475
4476 #ifdef PERL_OLD_COPY_ON_WRITE
4477 /* Need to do this *after* making the SV normal, as we need the buffer
4478    pointer to remain valid until after we've copied it.  If we let go too early,
4479    another thread could invalidate it by unsharing last of the same hash key
4480    (which it can do by means other than releasing copy-on-write Svs)
4481    or by changing the other copy-on-write SVs in the loop.  */
4482 STATIC void
4483 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, SV *after)
4484 {
4485     PERL_ARGS_ASSERT_SV_RELEASE_COW;
4486
4487     { /* this SV was SvIsCOW_normal(sv) */
4488          /* we need to find the SV pointing to us.  */
4489         SV *current = SV_COW_NEXT_SV(after);
4490
4491         if (current == sv) {
4492             /* The SV we point to points back to us (there were only two of us
4493                in the loop.)
4494                Hence other SV is no longer copy on write either.  */
4495             SvFAKE_off(after);
4496             SvREADONLY_off(after);
4497         } else {
4498             /* We need to follow the pointers around the loop.  */
4499             SV *next;
4500             while ((next = SV_COW_NEXT_SV(current)) != sv) {
4501                 assert (next);
4502                 current = next;
4503                  /* don't loop forever if the structure is bust, and we have
4504                     a pointer into a closed loop.  */
4505                 assert (current != after);
4506                 assert (SvPVX_const(current) == pvx);
4507             }
4508             /* Make the SV before us point to the SV after us.  */
4509             SV_COW_NEXT_SV_SET(current, after);
4510         }
4511     }
4512 }
4513 #endif
4514 /*
4515 =for apidoc sv_force_normal_flags
4516
4517 Undo various types of fakery on an SV: if the PV is a shared string, make
4518 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4519 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4520 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4521 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4522 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4523 set to some other value.) In addition, the C<flags> parameter gets passed to
4524 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4525 with flags set to 0.
4526
4527 =cut
4528 */
4529
4530 void
4531 Perl_sv_force_normal_flags(pTHX_ register SV *const sv, const U32 flags)
4532 {
4533     dVAR;
4534
4535     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
4536
4537 #ifdef PERL_OLD_COPY_ON_WRITE
4538     if (SvREADONLY(sv)) {
4539         if (SvFAKE(sv)) {
4540             const char * const pvx = SvPVX_const(sv);
4541             const STRLEN len = SvLEN(sv);
4542             const STRLEN cur = SvCUR(sv);
4543             /* next COW sv in the loop.  If len is 0 then this is a shared-hash
4544                key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
4545                we'll fail an assertion.  */
4546             SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
4547
4548             if (DEBUG_C_TEST) {
4549                 PerlIO_printf(Perl_debug_log,
4550                               "Copy on write: Force normal %ld\n",
4551                               (long) flags);
4552                 sv_dump(sv);
4553             }
4554             SvFAKE_off(sv);
4555             SvREADONLY_off(sv);
4556             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4557             SvPV_set(sv, NULL);
4558             SvLEN_set(sv, 0);
4559             if (flags & SV_COW_DROP_PV) {
4560                 /* OK, so we don't need to copy our buffer.  */
4561                 SvPOK_off(sv);
4562             } else {
4563                 SvGROW(sv, cur + 1);
4564                 Move(pvx,SvPVX(sv),cur,char);
4565                 SvCUR_set(sv, cur);
4566                 *SvEND(sv) = '\0';
4567             }
4568             if (len) {
4569                 sv_release_COW(sv, pvx, next);
4570             } else {
4571                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4572             }
4573             if (DEBUG_C_TEST) {
4574                 sv_dump(sv);
4575             }
4576         }
4577         else if (IN_PERL_RUNTIME)
4578             Perl_croak(aTHX_ "%s", PL_no_modify);
4579     }
4580 #else
4581     if (SvREADONLY(sv)) {
4582         if (SvFAKE(sv)) {
4583             const char * const pvx = SvPVX_const(sv);
4584             const STRLEN len = SvCUR(sv);
4585             SvFAKE_off(sv);
4586             SvREADONLY_off(sv);
4587             SvPV_set(sv, NULL);
4588             SvLEN_set(sv, 0);
4589             SvGROW(sv, len + 1);
4590             Move(pvx,SvPVX(sv),len,char);
4591             *SvEND(sv) = '\0';
4592             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4593         }
4594         else if (IN_PERL_RUNTIME)
4595             Perl_croak(aTHX_ "%s", PL_no_modify);
4596     }
4597 #endif
4598     if (SvROK(sv))
4599         sv_unref_flags(sv, flags);
4600     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4601         sv_unglob(sv);
4602     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_REGEXP) {
4603         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analagous
4604            to sv_unglob. We only need it here, so inline it.  */
4605         const svtype new_type = SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
4606         SV *const temp = newSV_type(new_type);
4607         void *const temp_p = SvANY(sv);
4608
4609         if (new_type == SVt_PVMG) {
4610             SvMAGIC_set(temp, SvMAGIC(sv));
4611             SvMAGIC_set(sv, NULL);
4612             SvSTASH_set(temp, SvSTASH(sv));
4613             SvSTASH_set(sv, NULL);
4614         }
4615         SvCUR_set(temp, SvCUR(sv));
4616         /* Remember that SvPVX is in the head, not the body. */
4617         if (SvLEN(temp)) {
4618             SvLEN_set(temp, SvLEN(sv));
4619             /* This signals "buffer is owned by someone else" in sv_clear,
4620                which is the least effort way to stop it freeing the buffer.
4621             */
4622             SvLEN_set(sv, SvLEN(sv)+1);
4623         } else {
4624             /* Their buffer is already owned by someone else. */
4625             SvPVX(sv) = savepvn(SvPVX(sv), SvCUR(sv));
4626             SvLEN_set(temp, SvCUR(sv)+1);
4627         }
4628
4629         /* Now swap the rest of the bodies. */
4630
4631         SvFLAGS(sv) &= ~(SVf_FAKE|SVTYPEMASK);
4632         SvFLAGS(sv) |= new_type;
4633         SvANY(sv) = SvANY(temp);
4634
4635         SvFLAGS(temp) &= ~(SVTYPEMASK);
4636         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
4637         SvANY(temp) = temp_p;
4638
4639         SvREFCNT_dec(temp);
4640     }
4641 }
4642
4643 /*
4644 =for apidoc sv_chop
4645
4646 Efficient removal of characters from the beginning of the string buffer.
4647 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4648 the string buffer.  The C<ptr> becomes the first character of the adjusted
4649 string. Uses the "OOK hack".
4650 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4651 refer to the same chunk of data.
4652
4653 =cut
4654 */
4655
4656 void
4657 Perl_sv_chop(pTHX_ register SV *const sv, register const char *const ptr)
4658 {
4659     STRLEN delta;
4660     STRLEN old_delta;
4661     U8 *p;
4662 #ifdef DEBUGGING
4663     const U8 *real_start;
4664 #endif
4665     STRLEN max_delta;
4666
4667     PERL_ARGS_ASSERT_SV_CHOP;
4668
4669     if (!ptr || !SvPOKp(sv))
4670         return;
4671     delta = ptr - SvPVX_const(sv);
4672     if (!delta) {
4673         /* Nothing to do.  */
4674         return;
4675     }
4676     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), but after this line,
4677        nothing uses the value of ptr any more.  */
4678     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
4679     if (ptr <= SvPVX_const(sv))
4680         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
4681                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
4682     SV_CHECK_THINKFIRST(sv);
4683     if (delta > max_delta)
4684         Perl_croak(aTHX_ "panic: sv_chop ptr=%p (was %p), start=%p, end=%p",
4685                    SvPVX_const(sv) + delta, ptr, SvPVX_const(sv),
4686                    SvPVX_const(sv) + max_delta);
4687
4688     if (!SvOOK(sv)) {
4689         if (!SvLEN(sv)) { /* make copy of shared string */
4690             const char *pvx = SvPVX_const(sv);
4691             const STRLEN len = SvCUR(sv);
4692             SvGROW(sv, len + 1);
4693             Move(pvx,SvPVX(sv),len,char);
4694             *SvEND(sv) = '\0';
4695         }
4696         SvFLAGS(sv) |= SVf_OOK;
4697         old_delta = 0;
4698     } else {
4699         SvOOK_offset(sv, old_delta);
4700     }
4701     SvLEN_set(sv, SvLEN(sv) - delta);
4702     SvCUR_set(sv, SvCUR(sv) - delta);
4703     SvPV_set(sv, SvPVX(sv) + delta);
4704
4705     p = (U8 *)SvPVX_const(sv);
4706
4707     delta += old_delta;
4708
4709 #ifdef DEBUGGING
4710     real_start = p - delta;
4711 #endif
4712
4713     assert(delta);
4714     if (delta < 0x100) {
4715         *--p = (U8) delta;
4716     } else {
4717         *--p = 0;
4718         p -= sizeof(STRLEN);
4719         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
4720     }
4721
4722 #ifdef DEBUGGING
4723     /* Fill the preceding buffer with sentinals to verify that no-one is
4724        using it.  */
4725     while (p > real_start) {
4726         --p;
4727         *p = (U8)PTR2UV(p);
4728     }
4729 #endif
4730 }
4731
4732 /*
4733 =for apidoc sv_catpvn
4734
4735 Concatenates the string onto the end of the string which is in the SV.  The
4736 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4737 status set, then the bytes appended should be valid UTF-8.
4738 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4739
4740 =for apidoc sv_catpvn_flags
4741
4742 Concatenates the string onto the end of the string which is in the SV.  The
4743 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4744 status set, then the bytes appended should be valid UTF-8.
4745 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4746 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4747 in terms of this function.
4748
4749 =cut
4750 */
4751
4752 void
4753 Perl_sv_catpvn_flags(pTHX_ register SV *const dsv, register const char *sstr, register const STRLEN slen, const I32 flags)
4754 {
4755     dVAR;
4756     STRLEN dlen;
4757     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4758
4759     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
4760
4761     SvGROW(dsv, dlen + slen + 1);
4762     if (sstr == dstr)
4763         sstr = SvPVX_const(dsv);
4764     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4765     SvCUR_set(dsv, SvCUR(dsv) + slen);
4766     *SvEND(dsv) = '\0';
4767     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4768     SvTAINT(dsv);
4769     if (flags & SV_SMAGIC)
4770         SvSETMAGIC(dsv);
4771 }
4772
4773 /*
4774 =for apidoc sv_catsv
4775
4776 Concatenates the string from SV C<ssv> onto the end of the string in
4777 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4778 not 'set' magic.  See C<sv_catsv_mg>.
4779
4780 =for apidoc sv_catsv_flags
4781
4782 Concatenates the string from SV C<ssv> onto the end of the string in
4783 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4784 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4785 and C<sv_catsv_nomg> are implemented in terms of this function.
4786
4787 =cut */
4788
4789 void
4790 Perl_sv_catsv_flags(pTHX_ SV *const dsv, register SV *const ssv, const I32 flags)
4791 {
4792     dVAR;
4793  
4794     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
4795
4796    if (ssv) {
4797         STRLEN slen;
4798         const char *spv = SvPV_const(ssv, slen);
4799         if (spv) {
4800             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4801                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4802                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4803                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4804                 dsv->sv_flags doesn't have that bit set.
4805                 Andy Dougherty  12 Oct 2001
4806             */
4807             const I32 sutf8 = DO_UTF8(ssv);
4808             I32 dutf8;
4809
4810             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4811                 mg_get(dsv);
4812             dutf8 = DO_UTF8(dsv);
4813
4814             if (dutf8 != sutf8) {
4815                 if (dutf8) {
4816                     /* Not modifying source SV, so taking a temporary copy. */
4817                     SV* const csv = newSVpvn_flags(spv, slen, SVs_TEMP);
4818
4819                     sv_utf8_upgrade(csv);
4820                     spv = SvPV_const(csv, slen);
4821                 }
4822                 else
4823                     /* Leave enough space for the cat that's about to happen */
4824                     sv_utf8_upgrade_flags_grow(dsv, 0, slen);
4825             }
4826             sv_catpvn_nomg(dsv, spv, slen);
4827         }
4828     }
4829     if (flags & SV_SMAGIC)
4830         SvSETMAGIC(dsv);
4831 }
4832
4833 /*
4834 =for apidoc sv_catpv
4835
4836 Concatenates the string onto the end of the string which is in the SV.
4837 If the SV has the UTF-8 status set, then the bytes appended should be
4838 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4839
4840 =cut */
4841
4842 void
4843 Perl_sv_catpv(pTHX_ register SV *const sv, register const char *ptr)
4844 {
4845     dVAR;
4846     register STRLEN len;
4847     STRLEN tlen;
4848     char *junk;
4849
4850     PERL_ARGS_ASSERT_SV_CATPV;
4851
4852     if (!ptr)
4853         return;
4854     junk = SvPV_force(sv, tlen);
4855     len = strlen(ptr);
4856     SvGROW(sv, tlen + len + 1);
4857     if (ptr == junk)
4858         ptr = SvPVX_const(sv);
4859     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4860     SvCUR_set(sv, SvCUR(sv) + len);
4861     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4862     SvTAINT(sv);
4863 }
4864
4865 /*
4866 =for apidoc sv_catpv_mg
4867
4868 Like C<sv_catpv>, but also handles 'set' magic.
4869
4870 =cut
4871 */
4872
4873 void
4874 Perl_sv_catpv_mg(pTHX_ register SV *const sv, register const char *const ptr)
4875 {
4876     PERL_ARGS_ASSERT_SV_CATPV_MG;
4877
4878     sv_catpv(sv,ptr);
4879     SvSETMAGIC(sv);
4880 }
4881
4882 /*
4883 =for apidoc newSV
4884
4885 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4886 bytes of preallocated string space the SV should have.  An extra byte for a
4887 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4888 space is allocated.)  The reference count for the new SV is set to 1.
4889
4890 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4891 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4892 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4893 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4894 modules supporting older perls.
4895
4896 =cut
4897 */
4898
4899 SV *
4900 Perl_newSV(pTHX_ const STRLEN len)
4901 {
4902     dVAR;
4903     register SV *sv;
4904
4905     new_SV(sv);
4906     if (len) {
4907         sv_upgrade(sv, SVt_PV);
4908         SvGROW(sv, len + 1);
4909     }
4910     return sv;
4911 }
4912 /*
4913 =for apidoc sv_magicext
4914
4915 Adds magic to an SV, upgrading it if necessary. Applies the
4916 supplied vtable and returns a pointer to the magic added.
4917
4918 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4919 In particular, you can add magic to SvREADONLY SVs, and add more than
4920 one instance of the same 'how'.
4921
4922 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4923 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4924 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4925 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4926
4927 (This is now used as a subroutine by C<sv_magic>.)
4928
4929 =cut
4930 */
4931 MAGIC * 
4932 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
4933                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
4934 {
4935     dVAR;
4936     MAGIC* mg;
4937
4938     PERL_ARGS_ASSERT_SV_MAGICEXT;
4939
4940     SvUPGRADE(sv, SVt_PVMG);
4941     Newxz(mg, 1, MAGIC);
4942     mg->mg_moremagic = SvMAGIC(sv);
4943     SvMAGIC_set(sv, mg);
4944
4945     /* Sometimes a magic contains a reference loop, where the sv and
4946        object refer to each other.  To prevent a reference loop that
4947        would prevent such objects being freed, we look for such loops
4948        and if we find one we avoid incrementing the object refcount.
4949
4950        Note we cannot do this to avoid self-tie loops as intervening RV must
4951        have its REFCNT incremented to keep it in existence.
4952
4953     */
4954     if (!obj || obj == sv ||
4955         how == PERL_MAGIC_arylen ||
4956         how == PERL_MAGIC_symtab ||
4957         (SvTYPE(obj) == SVt_PVGV &&
4958             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
4959              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
4960              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
4961     {
4962         mg->mg_obj = obj;
4963     }
4964     else {
4965         mg->mg_obj = SvREFCNT_inc_simple(obj);
4966         mg->mg_flags |= MGf_REFCOUNTED;
4967     }
4968
4969     /* Normal self-ties simply pass a null object, and instead of
4970        using mg_obj directly, use the SvTIED_obj macro to produce a
4971        new RV as needed.  For glob "self-ties", we are tieing the PVIO
4972        with an RV obj pointing to the glob containing the PVIO.  In
4973        this case, to avoid a reference loop, we need to weaken the
4974        reference.
4975     */
4976
4977     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4978         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
4979     {
4980       sv_rvweaken(obj);
4981     }
4982
4983     mg->mg_type = how;
4984     mg->mg_len = namlen;
4985     if (name) {
4986         if (namlen > 0)
4987             mg->mg_ptr = savepvn(name, namlen);
4988         else if (namlen == HEf_SVKEY) {
4989             /* Yes, this is casting away const. This is only for the case of
4990                HEf_SVKEY. I think we need to document this abberation of the
4991                constness of the API, rather than making name non-const, as
4992                that change propagating outwards a long way.  */
4993             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
4994         } else
4995             mg->mg_ptr = (char *) name;
4996     }
4997     mg->mg_virtual = (MGVTBL *) vtable;
4998
4999     mg_magical(sv);
5000     if (SvGMAGICAL(sv))
5001         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5002     return mg;
5003 }
5004
5005 /*
5006 =for apidoc sv_magic
5007
5008 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
5009 then adds a new magic item of type C<how> to the head of the magic list.
5010
5011 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5012 handling of the C<name> and C<namlen> arguments.
5013
5014 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5015 to add more than one instance of the same 'how'.
5016
5017 =cut
5018 */
5019
5020 void
5021 Perl_sv_magic(pTHX_ register SV *const sv, SV *const obj, const int how, 
5022              const char *const name, const I32 namlen)
5023 {
5024     dVAR;
5025     const MGVTBL *vtable;
5026     MAGIC* mg;
5027
5028     PERL_ARGS_ASSERT_SV_MAGIC;
5029
5030 #ifdef PERL_OLD_COPY_ON_WRITE
5031     if (SvIsCOW(sv))
5032         sv_force_normal_flags(sv, 0);
5033 #endif
5034     if (SvREADONLY(sv)) {
5035         if (
5036             /* its okay to attach magic to shared strings; the subsequent
5037              * upgrade to PVMG will unshare the string */
5038             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
5039
5040             && IN_PERL_RUNTIME
5041             && how != PERL_MAGIC_regex_global
5042             && how != PERL_MAGIC_bm
5043             && how != PERL_MAGIC_fm
5044             && how != PERL_MAGIC_sv
5045             && how != PERL_MAGIC_backref
5046            )
5047         {
5048             Perl_croak(aTHX_ "%s", PL_no_modify);
5049         }
5050     }
5051     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5052         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5053             /* sv_magic() refuses to add a magic of the same 'how' as an
5054                existing one
5055              */
5056             if (how == PERL_MAGIC_taint) {
5057                 mg->mg_len |= 1;
5058                 /* Any scalar which already had taint magic on which someone
5059                    (erroneously?) did SvIOK_on() or similar will now be
5060                    incorrectly sporting public "OK" flags.  */
5061                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
5062             }
5063             return;
5064         }
5065     }
5066
5067     switch (how) {
5068     case PERL_MAGIC_sv:
5069         vtable = &PL_vtbl_sv;
5070         break;
5071     case PERL_MAGIC_overload:
5072         vtable = &PL_vtbl_amagic;
5073         break;
5074     case PERL_MAGIC_overload_elem:
5075         vtable = &PL_vtbl_amagicelem;
5076         break;
5077     case PERL_MAGIC_overload_table:
5078         vtable = &PL_vtbl_ovrld;
5079         break;
5080     case PERL_MAGIC_bm:
5081         vtable = &PL_vtbl_bm;
5082         break;
5083     case PERL_MAGIC_regdata:
5084         vtable = &PL_vtbl_regdata;
5085         break;
5086     case PERL_MAGIC_regdatum:
5087         vtable = &PL_vtbl_regdatum;
5088         break;
5089     case PERL_MAGIC_env:
5090         vtable = &PL_vtbl_env;
5091         break;
5092     case PERL_MAGIC_fm:
5093         vtable = &PL_vtbl_fm;
5094         break;
5095     case PERL_MAGIC_envelem:
5096         vtable = &PL_vtbl_envelem;
5097         break;
5098     case PERL_MAGIC_regex_global:
5099         vtable = &PL_vtbl_mglob;
5100         break;
5101     case PERL_MAGIC_isa:
5102         vtable = &PL_vtbl_isa;
5103         break;
5104     case PERL_MAGIC_isaelem:
5105         vtable = &PL_vtbl_isaelem;
5106         break;
5107     case PERL_MAGIC_nkeys:
5108         vtable = &PL_vtbl_nkeys;
5109         break;
5110     case PERL_MAGIC_dbfile:
5111         vtable = NULL;
5112         break;
5113     case PERL_MAGIC_dbline:
5114         vtable = &PL_vtbl_dbline;
5115         break;
5116 #ifdef USE_LOCALE_COLLATE
5117     case PERL_MAGIC_collxfrm:
5118         vtable = &PL_vtbl_collxfrm;
5119         break;
5120 #endif /* USE_LOCALE_COLLATE */
5121     case PERL_MAGIC_tied:
5122         vtable = &PL_vtbl_pack;
5123         break;
5124     case PERL_MAGIC_tiedelem:
5125     case PERL_MAGIC_tiedscalar:
5126         vtable = &PL_vtbl_packelem;
5127         break;
5128     case PERL_MAGIC_qr:
5129         vtable = &PL_vtbl_regexp;
5130         break;
5131     case PERL_MAGIC_sig:
5132         vtable = &PL_vtbl_sig;
5133         break;
5134     case PERL_MAGIC_sigelem:
5135         vtable = &PL_vtbl_sigelem;
5136         break;
5137     case PERL_MAGIC_taint:
5138         vtable = &PL_vtbl_taint;
5139         break;
5140     case PERL_MAGIC_uvar:
5141         vtable = &PL_vtbl_uvar;
5142         break;
5143     case PERL_MAGIC_vec:
5144         vtable = &PL_vtbl_vec;
5145         break;
5146     case PERL_MAGIC_arylen_p:
5147     case PERL_MAGIC_rhash:
5148     case PERL_MAGIC_symtab:
5149     case PERL_MAGIC_vstring:
5150         vtable = NULL;
5151         break;
5152     case PERL_MAGIC_utf8:
5153         vtable = &PL_vtbl_utf8;
5154         break;
5155     case PERL_MAGIC_substr:
5156         vtable = &PL_vtbl_substr;
5157         break;
5158     case PERL_MAGIC_defelem:
5159         vtable = &PL_vtbl_defelem;
5160         break;
5161     case PERL_MAGIC_arylen:
5162         vtable = &PL_vtbl_arylen;
5163         break;
5164     case PERL_MAGIC_pos:
5165         vtable = &PL_vtbl_pos;
5166         break;
5167     case PERL_MAGIC_backref:
5168         vtable = &PL_vtbl_backref;
5169         break;
5170     case PERL_MAGIC_hintselem:
5171         vtable = &PL_vtbl_hintselem;
5172         break;
5173     case PERL_MAGIC_hints:
5174         vtable = &PL_vtbl_hints;
5175         break;
5176     case PERL_MAGIC_ext:
5177         /* Reserved for use by extensions not perl internals.           */
5178         /* Useful for attaching extension internal data to perl vars.   */
5179         /* Note that multiple extensions may clash if magical scalars   */
5180         /* etc holding private data from one are passed to another.     */
5181         vtable = NULL;
5182         break;
5183     default:
5184         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5185     }
5186
5187     /* Rest of work is done else where */
5188     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5189
5190     switch (how) {
5191     case PERL_MAGIC_taint:
5192         mg->mg_len = 1;
5193         break;
5194     case PERL_MAGIC_ext:
5195     case PERL_MAGIC_dbfile:
5196         SvRMAGICAL_on(sv);
5197         break;
5198     }
5199 }
5200
5201 /*
5202 =for apidoc sv_unmagic
5203
5204 Removes all magic of type C<type> from an SV.
5205
5206 =cut
5207 */
5208
5209 int
5210 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5211 {
5212     MAGIC* mg;
5213     MAGIC** mgp;
5214
5215     PERL_ARGS_ASSERT_SV_UNMAGIC;
5216
5217     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5218         return 0;
5219     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5220     for (mg = *mgp; mg; mg = *mgp) {
5221         if (mg->mg_type == type) {
5222             const MGVTBL* const vtbl = mg->mg_virtual;
5223             *mgp = mg->mg_moremagic;
5224             if (vtbl && vtbl->svt_free)
5225                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
5226             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5227                 if (mg->mg_len > 0)
5228                     Safefree(mg->mg_ptr);
5229                 else if (mg->mg_len == HEf_SVKEY)
5230                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5231                 else if (mg->mg_type == PERL_MAGIC_utf8)
5232                     Safefree(mg->mg_ptr);
5233             }
5234             if (mg->mg_flags & MGf_REFCOUNTED)
5235                 SvREFCNT_dec(mg->mg_obj);
5236             Safefree(mg);
5237         }
5238         else
5239             mgp = &mg->mg_moremagic;
5240     }
5241     if (SvMAGIC(sv)) {
5242         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5243             mg_magical(sv);     /*    else fix the flags now */
5244     }
5245     else {
5246         SvMAGICAL_off(sv);
5247         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5248     }
5249     return 0;
5250 }
5251
5252 /*
5253 =for apidoc sv_rvweaken
5254
5255 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5256 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5257 push a back-reference to this RV onto the array of backreferences
5258 associated with that magic. If the RV is magical, set magic will be
5259 called after the RV is cleared.
5260
5261 =cut
5262 */
5263
5264 SV *
5265 Perl_sv_rvweaken(pTHX_ SV *const sv)
5266 {
5267     SV *tsv;
5268
5269     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5270
5271     if (!SvOK(sv))  /* let undefs pass */
5272         return sv;
5273     if (!SvROK(sv))
5274         Perl_croak(aTHX_ "Can't weaken a nonreference");
5275     else if (SvWEAKREF(sv)) {
5276         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5277         return sv;
5278     }
5279     tsv = SvRV(sv);
5280     Perl_sv_add_backref(aTHX_ tsv, sv);
5281     SvWEAKREF_on(sv);
5282     SvREFCNT_dec(tsv);
5283     return sv;
5284 }
5285
5286 /* Give tsv backref magic if it hasn't already got it, then push a
5287  * back-reference to sv onto the array associated with the backref magic.
5288  */
5289
5290 /* A discussion about the backreferences array and its refcount:
5291  *
5292  * The AV holding the backreferences is pointed to either as the mg_obj of
5293  * PERL_MAGIC_backref, or in the specific case of a HV that has the hv_aux
5294  * structure, from the xhv_backreferences field. (A HV without hv_aux will
5295  * have the standard magic instead.) The array is created with a refcount
5296  * of 2. This means that if during global destruction the array gets
5297  * picked on first to have its refcount decremented by the random zapper,
5298  * it won't actually be freed, meaning it's still theere for when its
5299  * parent gets freed.
5300  * When the parent SV is freed, in the case of magic, the magic is freed,
5301  * Perl_magic_killbackrefs is called which decrements one refcount, then
5302  * mg_obj is freed which kills the second count.
5303  * In the vase of a HV being freed, one ref is removed by
5304  * Perl_hv_kill_backrefs, the other by Perl_sv_kill_backrefs, which it
5305  * calls.
5306  */
5307
5308 void
5309 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5310 {
5311     dVAR;
5312     AV *av;
5313
5314     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5315
5316     if (SvTYPE(tsv) == SVt_PVHV) {
5317         AV **const avp = Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5318
5319         av = *avp;
5320         if (!av) {
5321             /* There is no AV in the offical place - try a fixup.  */
5322             MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
5323
5324             if (mg) {
5325                 /* Aha. They've got it stowed in magic.  Bring it back.  */
5326                 av = MUTABLE_AV(mg->mg_obj);
5327                 /* Stop mg_free decreasing the refernce count.  */
5328                 mg->mg_obj = NULL;
5329                 /* Stop mg_free even calling the destructor, given that
5330                    there's no AV to free up.  */
5331                 mg->mg_virtual = 0;
5332                 sv_unmagic(tsv, PERL_MAGIC_backref);
5333             } else {
5334                 av = newAV();
5335                 AvREAL_off(av);
5336                 SvREFCNT_inc_simple_void(av); /* see discussion above */
5337             }
5338             *avp = av;
5339         }
5340     } else {
5341         const MAGIC *const mg
5342             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5343         if (mg)
5344             av = MUTABLE_AV(mg->mg_obj);
5345         else {
5346             av = newAV();
5347             AvREAL_off(av);
5348             sv_magic(tsv, MUTABLE_SV(av), PERL_MAGIC_backref, NULL, 0);
5349             /* av now has a refcnt of 2; see discussion above */
5350         }
5351     }
5352     if (AvFILLp(av) >= AvMAX(av)) {
5353         av_extend(av, AvFILLp(av)+1);
5354     }
5355     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5356 }
5357
5358 /* delete a back-reference to ourselves from the backref magic associated
5359  * with the SV we point to.
5360  */
5361
5362 STATIC void
5363 S_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5364 {
5365     dVAR;
5366     AV *av = NULL;
5367     SV **svp;
5368     I32 i;
5369
5370     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5371
5372     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
5373         av = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5374         /* We mustn't attempt to "fix up" the hash here by moving the
5375            backreference array back to the hv_aux structure, as that is stored
5376            in the main HvARRAY(), and hfreentries assumes that no-one
5377            reallocates HvARRAY() while it is running.  */
5378     }
5379     if (!av) {
5380         const MAGIC *const mg
5381             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5382         if (mg)
5383             av = MUTABLE_AV(mg->mg_obj);
5384     }
5385
5386     if (!av)
5387         Perl_croak(aTHX_ "panic: del_backref");
5388
5389     assert(!SvIS_FREED(av));
5390
5391     svp = AvARRAY(av);
5392     /* We shouldn't be in here more than once, but for paranoia reasons lets
5393        not assume this.  */
5394     for (i = AvFILLp(av); i >= 0; i--) {
5395         if (svp[i] == sv) {
5396             const SSize_t fill = AvFILLp(av);
5397             if (i != fill) {
5398                 /* We weren't the last entry.
5399                    An unordered list has this property that you can take the
5400                    last element off the end to fill the hole, and it's still
5401                    an unordered list :-)
5402                 */
5403                 svp[i] = svp[fill];
5404             }
5405             svp[fill] = NULL;
5406             AvFILLp(av) = fill - 1;
5407         }
5408     }
5409 }
5410
5411 int
5412 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
5413 {
5414     SV **svp = AvARRAY(av);
5415
5416     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
5417     PERL_UNUSED_ARG(sv);
5418
5419     assert(!svp || !SvIS_FREED(av));
5420     if (svp) {
5421         SV *const *const last = svp + AvFILLp(av);
5422
5423         while (svp <= last) {
5424             if (*svp) {
5425                 SV *const referrer = *svp;
5426                 if (SvWEAKREF(referrer)) {
5427                     /* XXX Should we check that it hasn't changed? */
5428                     SvRV_set(referrer, 0);
5429                     SvOK_off(referrer);
5430                     SvWEAKREF_off(referrer);
5431                     SvSETMAGIC(referrer);
5432                 } else if (SvTYPE(referrer) == SVt_PVGV ||
5433                            SvTYPE(referrer) == SVt_PVLV) {
5434                     /* You lookin' at me?  */
5435                     assert(GvSTASH(referrer));
5436                     assert(GvSTASH(referrer) == (const HV *)sv);
5437                     GvSTASH(referrer) = 0;
5438                 } else {
5439                     Perl_croak(aTHX_
5440                                "panic: magic_killbackrefs (flags=%"UVxf")",
5441                                (UV)SvFLAGS(referrer));
5442                 }
5443
5444                 *svp = NULL;
5445             }
5446             svp++;
5447         }
5448     }
5449     SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
5450     return 0;
5451 }
5452
5453 /*
5454 =for apidoc sv_insert
5455
5456 Inserts a string at the specified offset/length within the SV. Similar to
5457 the Perl substr() function. Handles get magic.
5458
5459 =for apidoc sv_insert_flags
5460
5461 Same as C<sv_insert>, but the extra C<flags> are passed the C<SvPV_force_flags> that applies to C<bigstr>.
5462
5463 =cut
5464 */
5465
5466 void
5467 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
5468 {
5469     dVAR;
5470     register char *big;
5471     register char *mid;
5472     register char *midend;
5473     register char *bigend;
5474     register I32 i;
5475     STRLEN curlen;
5476
5477     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
5478
5479     if (!bigstr)
5480         Perl_croak(aTHX_ "Can't modify non-existent substring");
5481     SvPV_force_flags(bigstr, curlen, flags);
5482     (void)SvPOK_only_UTF8(bigstr);
5483     if (offset + len > curlen) {
5484         SvGROW(bigstr, offset+len+1);
5485         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
5486         SvCUR_set(bigstr, offset+len);
5487     }
5488
5489     SvTAINT(bigstr);
5490     i = littlelen - len;
5491     if (i > 0) {                        /* string might grow */
5492         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
5493         mid = big + offset + len;
5494         midend = bigend = big + SvCUR(bigstr);
5495         bigend += i;
5496         *bigend = '\0';
5497         while (midend > mid)            /* shove everything down */
5498             *--bigend = *--midend;
5499         Move(little,big+offset,littlelen,char);
5500         SvCUR_set(bigstr, SvCUR(bigstr) + i);
5501         SvSETMAGIC(bigstr);
5502         return;
5503     }
5504     else if (i == 0) {
5505         Move(little,SvPVX(bigstr)+offset,len,char);
5506         SvSETMAGIC(bigstr);
5507         return;
5508     }
5509
5510     big = SvPVX(bigstr);
5511     mid = big + offset;
5512     midend = mid + len;
5513     bigend = big + SvCUR(bigstr);
5514
5515     if (midend > bigend)
5516         Perl_croak(aTHX_ "panic: sv_insert");
5517
5518     if (mid - big > bigend - midend) {  /* faster to shorten from end */
5519         if (littlelen) {
5520             Move(little, mid, littlelen,char);
5521             mid += littlelen;
5522         }
5523         i = bigend - midend;
5524         if (i > 0) {
5525             Move(midend, mid, i,char);
5526             mid += i;
5527         }
5528         *mid = '\0';
5529         SvCUR_set(bigstr, mid - big);
5530     }
5531     else if ((i = mid - big)) { /* faster from front */
5532         midend -= littlelen;
5533         mid = midend;
5534         Move(big, midend - i, i, char);
5535         sv_chop(bigstr,midend-i);
5536         if (littlelen)
5537             Move(little, mid, littlelen,char);
5538     }
5539     else if (littlelen) {
5540         midend -= littlelen;
5541         sv_chop(bigstr,midend);
5542         Move(little,midend,littlelen,char);
5543     }
5544     else {
5545         sv_chop(bigstr,midend);
5546     }
5547     SvSETMAGIC(bigstr);
5548 }
5549
5550 /*
5551 =for apidoc sv_replace
5552
5553 Make the first argument a copy of the second, then delete the original.
5554 The target SV physically takes over ownership of the body of the source SV
5555 and inherits its flags; however, the target keeps any magic it owns,
5556 and any magic in the source is discarded.
5557 Note that this is a rather specialist SV copying operation; most of the
5558 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
5559
5560 =cut
5561 */
5562
5563 void
5564 Perl_sv_replace(pTHX_ register SV *const sv, register SV *const nsv)
5565 {
5566     dVAR;
5567     const U32 refcnt = SvREFCNT(sv);
5568
5569     PERL_ARGS_ASSERT_SV_REPLACE;
5570
5571     SV_CHECK_THINKFIRST_COW_DROP(sv);
5572     if (SvREFCNT(nsv) != 1) {
5573         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
5574                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
5575     }
5576     if (SvMAGICAL(sv)) {
5577         if (SvMAGICAL(nsv))
5578             mg_free(nsv);
5579         else
5580             sv_upgrade(nsv, SVt_PVMG);
5581         SvMAGIC_set(nsv, SvMAGIC(sv));
5582         SvFLAGS(nsv) |= SvMAGICAL(sv);
5583         SvMAGICAL_off(sv);
5584         SvMAGIC_set(sv, NULL);
5585     }
5586     SvREFCNT(sv) = 0;
5587     sv_clear(sv);
5588     assert(!SvREFCNT(sv));
5589 #ifdef DEBUG_LEAKING_SCALARS
5590     sv->sv_flags  = nsv->sv_flags;
5591     sv->sv_any    = nsv->sv_any;
5592     sv->sv_refcnt = nsv->sv_refcnt;
5593     sv->sv_u      = nsv->sv_u;
5594 #else
5595     StructCopy(nsv,sv,SV);
5596 #endif
5597     if(SvTYPE(sv) == SVt_IV) {
5598         SvANY(sv)
5599             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
5600     }
5601         
5602
5603 #ifdef PERL_OLD_COPY_ON_WRITE
5604     if (SvIsCOW_normal(nsv)) {
5605         /* We need to follow the pointers around the loop to make the
5606            previous SV point to sv, rather than nsv.  */
5607         SV *next;
5608         SV *current = nsv;
5609         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
5610             assert(next);
5611             current = next;
5612             assert(SvPVX_const(current) == SvPVX_const(nsv));
5613         }
5614         /* Make the SV before us point to the SV after us.  */
5615         if (DEBUG_C_TEST) {
5616             PerlIO_printf(Perl_debug_log, "previous is\n");
5617             sv_dump(current);
5618             PerlIO_printf(Perl_debug_log,
5619                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
5620                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
5621         }
5622         SV_COW_NEXT_SV_SET(current, sv);
5623     }
5624 #endif
5625     SvREFCNT(sv) = refcnt;
5626     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
5627     SvREFCNT(nsv) = 0;
5628     del_SV(nsv);
5629 }
5630
5631 /*
5632 =for apidoc sv_clear
5633
5634 Clear an SV: call any destructors, free up any memory used by the body,
5635 and free the body itself. The SV's head is I<not> freed, although
5636 its type is set to all 1's so that it won't inadvertently be assumed
5637 to be live during global destruction etc.
5638 This function should only be called when REFCNT is zero. Most of the time
5639 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
5640 instead.
5641
5642 =cut
5643 */
5644
5645 void
5646 Perl_sv_clear(pTHX_ register SV *const sv)
5647 {
5648     dVAR;
5649     const U32 type = SvTYPE(sv);
5650     const struct body_details *const sv_type_details
5651         = bodies_by_type + type;
5652     HV *stash;
5653
5654     PERL_ARGS_ASSERT_SV_CLEAR;
5655     assert(SvREFCNT(sv) == 0);
5656     assert(SvTYPE(sv) != SVTYPEMASK);
5657
5658     if (type <= SVt_IV) {
5659         /* See the comment in sv.h about the collusion between this early
5660            return and the overloading of the NULL slots in the size table.  */
5661         if (SvROK(sv))
5662             goto free_rv;
5663         SvFLAGS(sv) &= SVf_BREAK;
5664         SvFLAGS(sv) |= SVTYPEMASK;
5665         return;
5666     }
5667
5668     if (SvOBJECT(sv)) {
5669         if (PL_defstash &&      /* Still have a symbol table? */
5670             SvDESTROYABLE(sv))
5671         {
5672             dSP;
5673             HV* stash;
5674             do {        
5675                 CV* destructor;
5676                 stash = SvSTASH(sv);
5677                 destructor = StashHANDLER(stash,DESTROY);
5678                 if (destructor
5679                         /* A constant subroutine can have no side effects, so
5680                            don't bother calling it.  */
5681                         && !CvCONST(destructor)
5682                         /* Don't bother calling an empty destructor */
5683                         && (CvISXSUB(destructor)
5684                         || (CvSTART(destructor)
5685                             && (CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))))
5686                 {
5687                     SV* const tmpref = newRV(sv);
5688                     SvREADONLY_on(tmpref);   /* DESTROY() could be naughty */
5689                     ENTER;
5690                     PUSHSTACKi(PERLSI_DESTROY);
5691                     EXTEND(SP, 2);
5692                     PUSHMARK(SP);
5693                     PUSHs(tmpref);
5694                     PUTBACK;
5695                     call_sv(MUTABLE_SV(destructor), G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
5696                 
5697                 
5698                     POPSTACK;
5699                     SPAGAIN;
5700                     LEAVE;
5701                     if(SvREFCNT(tmpref) < 2) {
5702                         /* tmpref is not kept alive! */
5703                         SvREFCNT(sv)--;
5704                         SvRV_set(tmpref, NULL);
5705                         SvROK_off(tmpref);
5706                     }
5707                     SvREFCNT_dec(tmpref);
5708                 }
5709             } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
5710
5711
5712             if (SvREFCNT(sv)) {
5713                 if (PL_in_clean_objs)
5714                     Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
5715                           HvNAME_get(stash));
5716                 /* DESTROY gave object new lease on life */
5717                 return;
5718             }
5719         }
5720
5721         if (SvOBJECT(sv)) {
5722             SvREFCNT_dec(SvSTASH(sv));  /* possibly of changed persuasion */
5723             SvOBJECT_off(sv);   /* Curse the object. */
5724             if (type != SVt_PVIO)
5725                 --PL_sv_objcount;       /* XXX Might want something more general */
5726         }
5727     }
5728     if (type >= SVt_PVMG) {
5729         if (type == SVt_PVMG && SvPAD_OUR(sv)) {
5730             SvREFCNT_dec(SvOURSTASH(sv));
5731         } else if (SvMAGIC(sv))
5732             mg_free(sv);
5733         if (type == SVt_PVMG && SvPAD_TYPED(sv))
5734             SvREFCNT_dec(SvSTASH(sv));
5735     }
5736     switch (type) {
5737         /* case SVt_BIND: */
5738     case SVt_PVIO:
5739         if (IoIFP(sv) &&
5740             IoIFP(sv) != PerlIO_stdin() &&
5741             IoIFP(sv) != PerlIO_stdout() &&
5742             IoIFP(sv) != PerlIO_stderr())
5743         {
5744             io_close(MUTABLE_IO(sv), FALSE);
5745         }
5746         if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
5747             PerlDir_close(IoDIRP(sv));
5748         IoDIRP(sv) = (DIR*)NULL;
5749         Safefree(IoTOP_NAME(sv));
5750         Safefree(IoFMT_NAME(sv));
5751         Safefree(IoBOTTOM_NAME(sv));
5752         goto freescalar;
5753     case SVt_REGEXP:
5754         /* FIXME for plugins */
5755         pregfree2((REGEXP*) sv);
5756         goto freescalar;
5757     case SVt_PVCV:
5758     case SVt_PVFM:
5759         cv_undef(MUTABLE_CV(sv));
5760         goto freescalar;
5761     case SVt_PVHV:
5762         if (PL_last_swash_hv == (const HV *)sv) {
5763             PL_last_swash_hv = NULL;
5764         }
5765         Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
5766         hv_undef(MUTABLE_HV(sv));
5767         break;
5768     case SVt_PVAV:
5769         if (PL_comppad == MUTABLE_AV(sv)) {
5770             PL_comppad = NULL;
5771             PL_curpad = NULL;
5772         }
5773         av_undef(MUTABLE_AV(sv));
5774         break;
5775     case SVt_PVLV:
5776         if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
5777             SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
5778             HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
5779             PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
5780         }
5781         else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
5782             SvREFCNT_dec(LvTARG(sv));
5783     case SVt_PVGV:
5784         if (isGV_with_GP(sv)) {
5785             if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
5786                && HvNAME_get(stash))
5787                 mro_method_changed_in(stash);
5788             gp_free(MUTABLE_GV(sv));
5789             if (GvNAME_HEK(sv))
5790                 unshare_hek(GvNAME_HEK(sv));
5791             /* If we're in a stash, we don't own a reference to it. However it does
5792                have a back reference to us, which needs to be cleared.  */
5793             if (!SvVALID(sv) && (stash = GvSTASH(sv)))
5794                     sv_del_backref(MUTABLE_SV(stash), sv);
5795         }
5796         /* FIXME. There are probably more unreferenced pointers to SVs in the
5797            interpreter struct that we should check and tidy in a similar
5798            fashion to this:  */
5799         if ((const GV *)sv == PL_last_in_gv)
5800             PL_last_in_gv = NULL;
5801     case SVt_PVMG:
5802     case SVt_PVNV:
5803     case SVt_PVIV:
5804     case SVt_PV:
5805       freescalar:
5806         /* Don't bother with SvOOK_off(sv); as we're only going to free it.  */
5807         if (SvOOK(sv)) {
5808             STRLEN offset;
5809             SvOOK_offset(sv, offset);
5810             SvPV_set(sv, SvPVX_mutable(sv) - offset);
5811             /* Don't even bother with turning off the OOK flag.  */
5812         }
5813         if (SvROK(sv)) {
5814         free_rv:
5815             {
5816                 SV * const target = SvRV(sv);
5817                 if (SvWEAKREF(sv))
5818                     sv_del_backref(target, sv);
5819                 else
5820                     SvREFCNT_dec(target);
5821             }
5822         }
5823 #ifdef PERL_OLD_COPY_ON_WRITE
5824         else if (SvPVX_const(sv)) {
5825             if (SvIsCOW(sv)) {
5826                 if (DEBUG_C_TEST) {
5827                     PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
5828                     sv_dump(sv);
5829                 }
5830                 if (SvLEN(sv)) {
5831                     sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
5832                 } else {
5833                     unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5834                 }
5835
5836                 SvFAKE_off(sv);
5837             } else if (SvLEN(sv)) {
5838                 Safefree(SvPVX_const(sv));
5839             }
5840         }
5841 #else
5842         else if (SvPVX_const(sv) && SvLEN(sv))
5843             Safefree(SvPVX_mutable(sv));
5844         else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
5845             unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
5846             SvFAKE_off(sv);
5847         }
5848 #endif
5849         break;
5850     case SVt_NV:
5851         break;
5852     }
5853
5854     SvFLAGS(sv) &= SVf_BREAK;
5855     SvFLAGS(sv) |= SVTYPEMASK;
5856
5857     if (sv_type_details->arena) {
5858         del_body(((char *)SvANY(sv) + sv_type_details->offset),
5859                  &PL_body_roots[type]);
5860     }
5861     else if (sv_type_details->body_size) {
5862         my_safefree(SvANY(sv));
5863     }
5864 }
5865
5866 /*
5867 =for apidoc sv_newref
5868
5869 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5870 instead.
5871
5872 =cut
5873 */
5874
5875 SV *
5876 Perl_sv_newref(pTHX_ SV *const sv)
5877 {
5878     PERL_UNUSED_CONTEXT;
5879     if (sv)
5880         (SvREFCNT(sv))++;
5881     return sv;
5882 }
5883
5884 /*
5885 =for apidoc sv_free
5886
5887 Decrement an SV's reference count, and if it drops to zero, call
5888 C<sv_clear> to invoke destructors and free up any memory used by
5889 the body; finally, deallocate the SV's head itself.
5890 Normally called via a wrapper macro C<SvREFCNT_dec>.
5891
5892 =cut
5893 */
5894
5895 void
5896 Perl_sv_free(pTHX_ SV *const sv)
5897 {
5898     dVAR;
5899     if (!sv)
5900         return;
5901     if (SvREFCNT(sv) == 0) {
5902         if (SvFLAGS(sv) & SVf_BREAK)
5903             /* this SV's refcnt has been artificially decremented to
5904              * trigger cleanup */
5905             return;
5906         if (PL_in_clean_all) /* All is fair */
5907             return;
5908         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5909             /* make sure SvREFCNT(sv)==0 happens very seldom */
5910             SvREFCNT(sv) = (~(U32)0)/2;
5911             return;
5912         }
5913         if (ckWARN_d(WARN_INTERNAL)) {
5914 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5915             Perl_dump_sv_child(aTHX_ sv);
5916 #else
5917   #ifdef DEBUG_LEAKING_SCALARS
5918             sv_dump(sv);
5919   #endif
5920 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5921             if (PL_warnhook == PERL_WARNHOOK_FATAL
5922                 || ckDEAD(packWARN(WARN_INTERNAL))) {
5923                 /* Don't let Perl_warner cause us to escape our fate:  */
5924                 abort();
5925             }
5926 #endif
5927             /* This may not return:  */
5928             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5929                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
5930                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5931 #endif
5932         }
5933 #ifdef DEBUG_LEAKING_SCALARS_ABORT
5934         abort();
5935 #endif
5936         return;
5937     }
5938     if (--(SvREFCNT(sv)) > 0)
5939         return;
5940     Perl_sv_free2(aTHX_ sv);
5941 }
5942
5943 void
5944 Perl_sv_free2(pTHX_ SV *const sv)
5945 {
5946     dVAR;
5947
5948     PERL_ARGS_ASSERT_SV_FREE2;
5949
5950 #ifdef DEBUGGING
5951     if (SvTEMP(sv)) {
5952         Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
5953                          "Attempt to free temp prematurely: SV 0x%"UVxf
5954                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5955         return;
5956     }
5957 #endif
5958     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5959         /* make sure SvREFCNT(sv)==0 happens very seldom */
5960         SvREFCNT(sv) = (~(U32)0)/2;
5961         return;
5962     }
5963     sv_clear(sv);
5964     if (! SvREFCNT(sv))
5965         del_SV(sv);
5966 }
5967
5968 /*
5969 =for apidoc sv_len
5970
5971 Returns the length of the string in the SV. Handles magic and type
5972 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5973
5974 =cut
5975 */
5976
5977 STRLEN
5978 Perl_sv_len(pTHX_ register SV *const sv)
5979 {
5980     STRLEN len;
5981
5982     if (!sv)
5983         return 0;
5984
5985     if (SvGMAGICAL(sv))
5986         len = mg_length(sv);
5987     else
5988         (void)SvPV_const(sv, len);
5989     return len;
5990 }
5991
5992 /*
5993 =for apidoc sv_len_utf8
5994
5995 Returns the number of characters in the string in an SV, counting wide
5996 UTF-8 bytes as a single character. Handles magic and type coercion.
5997
5998 =cut
5999 */
6000
6001 /*
6002  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6003  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6004  * (Note that the mg_len is not the length of the mg_ptr field.
6005  * This allows the cache to store the character length of the string without
6006  * needing to malloc() extra storage to attach to the mg_ptr.)
6007  *
6008  */
6009
6010 STRLEN
6011 Perl_sv_len_utf8(pTHX_ register SV *const sv)
6012 {
6013     if (!sv)
6014         return 0;
6015
6016     if (SvGMAGICAL(sv))
6017         return mg_length(sv);
6018     else
6019     {
6020         STRLEN len;
6021         const U8 *s = (U8*)SvPV_const(sv, len);
6022
6023         if (PL_utf8cache) {
6024             STRLEN ulen;
6025             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6026
6027             if (mg && mg->mg_len != -1) {
6028                 ulen = mg->mg_len;
6029                 if (PL_utf8cache < 0) {
6030                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
6031                     if (real != ulen) {
6032                         /* Need to turn the assertions off otherwise we may
6033                            recurse infinitely while printing error messages.
6034                         */
6035                         SAVEI8(PL_utf8cache);
6036                         PL_utf8cache = 0;
6037                         Perl_croak(aTHX_ "panic: sv_len_utf8 cache %"UVuf
6038                                    " real %"UVuf" for %"SVf,
6039                                    (UV) ulen, (UV) real, SVfARG(sv));
6040                     }
6041                 }
6042             }
6043             else {
6044                 ulen = Perl_utf8_length(aTHX_ s, s + len);
6045                 if (!SvREADONLY(sv)) {
6046                     if (!mg && (SvTYPE(sv) < SVt_PVMG ||
6047                                 !(mg = mg_find(sv, PERL_MAGIC_utf8)))) {
6048                         mg = sv_magicext(sv, 0, PERL_MAGIC_utf8,
6049                                          &PL_vtbl_utf8, 0, 0);
6050                     }
6051                     assert(mg);
6052                     mg->mg_len = ulen;
6053                     /* For now, treat "overflowed" as "still unknown".
6054                        See RT #72924.  */
6055                     if (ulen != (STRLEN) mg->mg_len)
6056                         mg->mg_len = -1;
6057                 }
6058             }
6059             return ulen;
6060         }
6061         return Perl_utf8_length(aTHX_ s, s + len);
6062     }
6063 }
6064
6065 /* Walk forwards to find the byte corresponding to the passed in UTF-8
6066    offset.  */
6067 static STRLEN
6068 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
6069                       STRLEN uoffset)
6070 {
6071     const U8 *s = start;
6072
6073     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
6074
6075     while (s < send && uoffset--)
6076         s += UTF8SKIP(s);
6077     if (s > send) {
6078         /* This is the existing behaviour. Possibly it should be a croak, as
6079            it's actually a bounds error  */
6080         s = send;
6081     }
6082     return s - start;
6083 }
6084
6085 /* Given the length of the string in both bytes and UTF-8 characters, decide
6086    whether to walk forwards or backwards to find the byte corresponding to
6087    the passed in UTF-8 offset.  */
6088 static STRLEN
6089 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
6090                       const STRLEN uoffset, const STRLEN uend)
6091 {
6092     STRLEN backw = uend - uoffset;
6093
6094     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
6095
6096     if (uoffset < 2 * backw) {
6097         /* The assumption is that going forwards is twice the speed of going
6098            forward (that's where the 2 * backw comes from).
6099            (The real figure of course depends on the UTF-8 data.)  */
6100         return sv_pos_u2b_forwards(start, send, uoffset);
6101     }
6102
6103     while (backw--) {
6104         send--;
6105         while (UTF8_IS_CONTINUATION(*send))
6106             send--;
6107     }
6108     return send - start;
6109 }
6110
6111 /* For the string representation of the given scalar, find the byte
6112    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
6113    give another position in the string, *before* the sought offset, which
6114    (which is always true, as 0, 0 is a valid pair of positions), which should
6115    help reduce the amount of linear searching.
6116    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
6117    will be used to reduce the amount of linear searching. The cache will be
6118    created if necessary, and the found value offered to it for update.  */
6119 static STRLEN
6120 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
6121                     const U8 *const send, const STRLEN uoffset,
6122                     STRLEN uoffset0, STRLEN boffset0)
6123 {
6124     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
6125     bool found = FALSE;
6126
6127     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
6128
6129     assert (uoffset >= uoffset0);
6130
6131     if (!SvREADONLY(sv)
6132         && PL_utf8cache
6133         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
6134                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
6135         if ((*mgp)->mg_ptr) {
6136             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
6137             if (cache[0] == uoffset) {
6138                 /* An exact match. */
6139                 return cache[1];
6140             }
6141             if (cache[2] == uoffset) {
6142                 /* An exact match. */
6143                 return cache[3];
6144             }
6145
6146             if (cache[0] < uoffset) {
6147                 /* The cache already knows part of the way.   */
6148                 if (cache[0] > uoffset0) {
6149                     /* The cache knows more than the passed in pair  */
6150                     uoffset0 = cache[0];
6151                     boffset0 = cache[1];
6152                 }
6153                 if ((*mgp)->mg_len != -1) {
6154                     /* And we know the end too.  */
6155                     boffset = boffset0
6156                         + sv_pos_u2b_midway(start + boffset0, send,
6157                                               uoffset - uoffset0,
6158                                               (*mgp)->mg_len - uoffset0);
6159                 } else {
6160                     boffset = boffset0
6161                         + sv_pos_u2b_forwards(start + boffset0,
6162                                                 send, uoffset - uoffset0);
6163                 }
6164             }
6165             else if (cache[2] < uoffset) {
6166                 /* We're between the two cache entries.  */
6167                 if (cache[2] > uoffset0) {
6168                     /* and the cache knows more than the passed in pair  */
6169                     uoffset0 = cache[2];
6170                     boffset0 = cache[3];
6171                 }
6172
6173                 boffset = boffset0
6174                     + sv_pos_u2b_midway(start + boffset0,
6175                                           start + cache[1],
6176                                           uoffset - uoffset0,
6177                                           cache[0] - uoffset0);
6178             } else {
6179                 boffset = boffset0
6180                     + sv_pos_u2b_midway(start + boffset0,
6181                                           start + cache[3],
6182                                           uoffset - uoffset0,
6183                                           cache[2] - uoffset0);
6184             }
6185             found = TRUE;
6186         }
6187         else if ((*mgp)->mg_len != -1) {
6188             /* If we can take advantage of a passed in offset, do so.  */
6189             /* In fact, offset0 is either 0, or less than offset, so don't
6190                need to worry about the other possibility.  */
6191             boffset = boffset0
6192                 + sv_pos_u2b_midway(start + boffset0, send,
6193                                       uoffset - uoffset0,
6194                                       (*mgp)->mg_len - uoffset0);
6195             found = TRUE;
6196         }
6197     }
6198
6199     if (!found || PL_utf8cache < 0) {
6200         const STRLEN real_boffset
6201             = boffset0 + sv_pos_u2b_forwards(start + boffset0,
6202                                                send, uoffset - uoffset0);
6203
6204         if (found && PL_utf8cache < 0) {
6205             if (real_boffset != boffset) {
6206                 /* Need to turn the assertions off otherwise we may recurse
6207                    infinitely while printing error messages.  */
6208                 SAVEI8(PL_utf8cache);
6209                 PL_utf8cache = 0;
6210                 Perl_croak(aTHX_ "panic: sv_pos_u2b_cache cache %"UVuf
6211                            " real %"UVuf" for %"SVf,
6212                            (UV) boffset, (UV) real_boffset, SVfARG(sv));
6213             }
6214         }
6215         boffset = real_boffset;
6216     }
6217
6218     if (PL_utf8cache)
6219         utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
6220     return boffset;
6221 }
6222
6223
6224 /*
6225 =for apidoc sv_pos_u2b_flags
6226
6227 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6228 the start of the string, to a count of the equivalent number of bytes; if
6229 lenp is non-zero, it does the same to lenp, but this time starting from
6230 the offset, rather than from the start of the string. Handles type coercion.
6231 I<flags> is passed to C<SvPV_flags>, and usually should be
6232 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
6233
6234 =cut
6235 */
6236
6237 /*
6238  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
6239  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6240  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6241  *
6242  */
6243
6244 STRLEN
6245 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
6246                       U32 flags)
6247 {
6248     const U8 *start;
6249     STRLEN len;
6250     STRLEN boffset;
6251
6252     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
6253
6254     start = (U8*)SvPV_flags(sv, len, flags);
6255     if (len) {
6256         const U8 * const send = start + len;
6257         MAGIC *mg = NULL;
6258         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
6259
6260         if (lenp) {
6261             /* Convert the relative offset to absolute.  */
6262             const STRLEN uoffset2 = uoffset + *lenp;
6263             const STRLEN boffset2
6264                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
6265                                       uoffset, boffset) - boffset;
6266
6267             *lenp = boffset2;
6268         }
6269     } else {
6270         if (lenp)
6271             *lenp = 0;
6272         boffset = 0;
6273     }
6274
6275     return boffset;
6276 }
6277
6278 /*
6279 =for apidoc sv_pos_u2b
6280
6281 Converts the value pointed to by offsetp from a count of UTF-8 chars from
6282 the start of the string, to a count of the equivalent number of bytes; if
6283 lenp is non-zero, it does the same to lenp, but this time starting from
6284 the offset, rather than from the start of the string. Handles magic and
6285 type coercion.
6286
6287 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
6288 than 2Gb.
6289
6290 =cut
6291 */
6292
6293 /*
6294  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
6295  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6296  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
6297  *
6298  */
6299
6300 /* This function is subject to size and sign problems */
6301
6302 void
6303 Perl_sv_pos_u2b(pTHX_ register SV *const sv, I32 *const offsetp, I32 *const lenp)
6304 {
6305     PERL_ARGS_ASSERT_SV_POS_U2B;
6306
6307     if (lenp) {
6308         STRLEN ulen = (STRLEN)*lenp;
6309         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
6310                                          SV_GMAGIC|SV_CONST_RETURN);
6311         *lenp = (I32)ulen;
6312     } else {
6313         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
6314                                          SV_GMAGIC|SV_CONST_RETURN);
6315     }
6316 }
6317
6318 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
6319    byte length pairing. The (byte) length of the total SV is passed in too,
6320    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
6321    may not have updated SvCUR, so we can't rely on reading it directly.
6322
6323    The proffered utf8/byte length pairing isn't used if the cache already has
6324    two pairs, and swapping either for the proffered pair would increase the
6325    RMS of the intervals between known byte offsets.
6326
6327    The cache itself consists of 4 STRLEN values
6328    0: larger UTF-8 offset
6329    1: corresponding byte offset
6330    2: smaller UTF-8 offset
6331    3: corresponding byte offset
6332
6333    Unused cache pairs have the value 0, 0.
6334    Keeping the cache "backwards" means that the invariant of
6335    cache[0] >= cache[2] is maintained even with empty slots, which means that
6336    the code that uses it doesn't need to worry if only 1 entry has actually
6337    been set to non-zero.  It also makes the "position beyond the end of the
6338    cache" logic much simpler, as the first slot is always the one to start
6339    from.   
6340 */
6341 static void
6342 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
6343                            const STRLEN utf8, const STRLEN blen)
6344 {
6345     STRLEN *cache;
6346
6347     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
6348
6349     if (SvREADONLY(sv))
6350         return;
6351
6352     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
6353                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
6354         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
6355                            0);
6356         (*mgp)->mg_len = -1;
6357     }
6358     assert(*mgp);
6359
6360     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
6361         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
6362         (*mgp)->mg_ptr = (char *) cache;
6363     }
6364     assert(cache);
6365
6366     if (PL_utf8cache < 0 && SvPOKp(sv)) {
6367         /* SvPOKp() because it's possible that sv has string overloading, and
6368            therefore is a reference, hence SvPVX() is actually a pointer.
6369            This cures the (very real) symptoms of RT 69422, but I'm not actually
6370            sure whether we should even be caching the results of UTF-8
6371            operations on overloading, given that nothing stops overloading
6372            returning a different value every time it's called.  */
6373         const U8 *start = (const U8 *) SvPVX_const(sv);
6374         const STRLEN realutf8 = utf8_length(start, start + byte);
6375
6376         if (realutf8 != utf8) {
6377             /* Need to turn the assertions off otherwise we may recurse
6378                infinitely while printing error messages.  */
6379             SAVEI8(PL_utf8cache);
6380             PL_utf8cache = 0;
6381             Perl_croak(aTHX_ "panic: utf8_mg_pos_cache_update cache %"UVuf
6382                        " real %"UVuf" for %"SVf, (UV) utf8, (UV) realutf8, SVfARG(sv));
6383         }
6384     }
6385
6386     /* Cache is held with the later position first, to simplify the code
6387        that deals with unbounded ends.  */
6388        
6389     ASSERT_UTF8_CACHE(cache);
6390     if (cache[1] == 0) {
6391         /* Cache is totally empty  */
6392         cache[0] = utf8;
6393         cache[1] = byte;
6394     } else if (cache[3] == 0) {
6395         if (byte > cache[1]) {
6396             /* New one is larger, so goes first.  */
6397             cache[2] = cache[0];
6398             cache[3] = cache[1];
6399             cache[0] = utf8;
6400             cache[1] = byte;
6401         } else {
6402             cache[2] = utf8;
6403             cache[3] = byte;
6404         }
6405     } else {
6406 #define THREEWAY_SQUARE(a,b,c,d) \
6407             ((float)((d) - (c))) * ((float)((d) - (c))) \
6408             + ((float)((c) - (b))) * ((float)((c) - (b))) \
6409                + ((float)((b) - (a))) * ((float)((b) - (a)))
6410
6411         /* Cache has 2 slots in use, and we know three potential pairs.
6412            Keep the two that give the lowest RMS distance. Do the
6413            calcualation in bytes simply because we always know the byte
6414            length.  squareroot has the same ordering as the positive value,
6415            so don't bother with the actual square root.  */
6416         const float existing = THREEWAY_SQUARE(0, cache[3], cache[1], blen);
6417         if (byte > cache[1]) {
6418             /* New position is after the existing pair of pairs.  */
6419             const float keep_earlier
6420                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6421             const float keep_later
6422                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
6423
6424             if (keep_later < keep_earlier) {
6425                 if (keep_later < existing) {
6426                     cache[2] = cache[0];
6427                     cache[3] = cache[1];
6428                     cache[0] = utf8;
6429                     cache[1] = byte;
6430                 }
6431             }
6432             else {
6433                 if (keep_earlier < existing) {
6434                     cache[0] = utf8;
6435                     cache[1] = byte;
6436                 }
6437             }
6438         }
6439         else if (byte > cache[3]) {
6440             /* New position is between the existing pair of pairs.  */
6441             const float keep_earlier
6442                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
6443             const float keep_later
6444                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6445
6446             if (keep_later < keep_earlier) {
6447                 if (keep_later < existing) {
6448                     cache[2] = utf8;
6449                     cache[3] = byte;
6450                 }
6451             }
6452             else {
6453                 if (keep_earlier < existing) {
6454                     cache[0] = utf8;
6455                     cache[1] = byte;
6456                 }
6457             }
6458         }
6459         else {
6460             /* New position is before the existing pair of pairs.  */
6461             const float keep_earlier
6462                 = THREEWAY_SQUARE(0, byte, cache[3], blen);
6463             const float keep_later
6464                 = THREEWAY_SQUARE(0, byte, cache[1], blen);
6465
6466             if (keep_later < keep_earlier) {
6467                 if (keep_later < existing) {
6468                     cache[2] = utf8;
6469                     cache[3] = byte;
6470                 }
6471             }
6472             else {
6473                 if (keep_earlier < existing) {
6474                     cache[0] = cache[2];
6475                     cache[1] = cache[3];
6476                     cache[2] = utf8;
6477                     cache[3] = byte;
6478                 }
6479             }
6480         }
6481     }
6482     ASSERT_UTF8_CACHE(cache);
6483 }
6484
6485 /* We already know all of the way, now we may be able to walk back.  The same
6486    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
6487    backward is half the speed of walking forward. */
6488 static STRLEN
6489 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
6490                     const U8 *end, STRLEN endu)
6491 {
6492     const STRLEN forw = target - s;
6493     STRLEN backw = end - target;
6494
6495     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
6496
6497     if (forw < 2 * backw) {
6498         return utf8_length(s, target);
6499     }
6500
6501     while (end > target) {
6502         end--;
6503         while (UTF8_IS_CONTINUATION(*end)) {
6504             end--;
6505         }
6506         endu--;
6507     }
6508     return endu;
6509 }
6510
6511 /*
6512 =for apidoc sv_pos_b2u
6513
6514 Converts the value pointed to by offsetp from a count of bytes from the
6515 start of the string, to a count of the equivalent number of UTF-8 chars.
6516 Handles magic and type coercion.
6517
6518 =cut
6519 */
6520
6521 /*
6522  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
6523  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
6524  * byte offsets.
6525  *
6526  */
6527 void
6528 Perl_sv_pos_b2u(pTHX_ register SV *const sv, I32 *const offsetp)
6529 {
6530     const U8* s;
6531     const STRLEN byte = *offsetp;
6532     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
6533     STRLEN blen;
6534     MAGIC* mg = NULL;
6535     const U8* send;
6536     bool found = FALSE;
6537
6538     PERL_ARGS_ASSERT_SV_POS_B2U;
6539
6540     if (!sv)
6541         return;
6542
6543     s = (const U8*)SvPV_const(sv, blen);
6544
6545     if (blen < byte)
6546         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
6547
6548     send = s + byte;
6549
6550     if (!SvREADONLY(sv)
6551         && PL_utf8cache
6552         && SvTYPE(sv) >= SVt_PVMG
6553         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
6554     {
6555         if (mg->mg_ptr) {
6556             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
6557             if (cache[1] == byte) {
6558                 /* An exact match. */
6559                 *offsetp = cache[0];
6560                 return;
6561             }
6562             if (cache[3] == byte) {
6563                 /* An exact match. */
6564                 *offsetp = cache[2];
6565                 return;
6566             }
6567
6568             if (cache[1] < byte) {
6569                 /* We already know part of the way. */
6570                 if (mg->mg_len != -1) {
6571                     /* Actually, we know the end too.  */
6572                     len = cache[0]
6573                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
6574                                               s + blen, mg->mg_len - cache[0]);
6575                 } else {
6576                     len = cache[0] + utf8_length(s + cache[1], send);
6577                 }
6578             }
6579             else if (cache[3] < byte) {
6580                 /* We're between the two cached pairs, so we do the calculation
6581                    offset by the byte/utf-8 positions for the earlier pair,
6582                    then add the utf-8 characters from the string start to
6583                    there.  */
6584                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
6585                                           s + cache[1], cache[0] - cache[2])
6586                     + cache[2];
6587
6588             }
6589             else { /* cache[3] > byte */
6590                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
6591                                           cache[2]);
6592
6593             }
6594             ASSERT_UTF8_CACHE(cache);
6595             found = TRUE;
6596         } else if (mg->mg_len != -1) {
6597             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
6598             found = TRUE;
6599         }
6600     }
6601     if (!found || PL_utf8cache < 0) {
6602         const STRLEN real_len = utf8_length(s, send);
6603
6604         if (found && PL_utf8cache < 0) {
6605             if (len != real_len) {
6606                 /* Need to turn the assertions off otherwise we may recurse
6607                    infinitely while printing error messages.  */
6608                 SAVEI8(PL_utf8cache);
6609                 PL_utf8cache = 0;
6610                 Perl_croak(aTHX_ "panic: sv_pos_b2u cache %"UVuf
6611                            " real %"UVuf" for %"SVf,
6612                            (UV) len, (UV) real_len, SVfARG(sv));
6613             }
6614         }
6615         len = real_len;
6616     }
6617     *offsetp = len;
6618
6619     if (PL_utf8cache)
6620         utf8_mg_pos_cache_update(sv, &mg, byte, len, blen);
6621 }
6622
6623 /*
6624 =for apidoc sv_eq
6625
6626 Returns a boolean indicating whether the strings in the two SVs are
6627 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6628 coerce its args to strings if necessary.
6629
6630 =cut
6631 */
6632
6633 I32
6634 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
6635 {
6636     dVAR;
6637     const char *pv1;
6638     STRLEN cur1;
6639     const char *pv2;
6640     STRLEN cur2;
6641     I32  eq     = 0;
6642     char *tpv   = NULL;
6643     SV* svrecode = NULL;
6644
6645     if (!sv1) {
6646         pv1 = "";
6647         cur1 = 0;
6648     }
6649     else {
6650         /* if pv1 and pv2 are the same, second SvPV_const call may
6651          * invalidate pv1, so we may need to make a copy */
6652         if (sv1 == sv2 && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
6653             pv1 = SvPV_const(sv1, cur1);
6654             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
6655         }
6656         pv1 = SvPV_const(sv1, cur1);
6657     }
6658
6659     if (!sv2){
6660         pv2 = "";
6661         cur2 = 0;
6662     }
6663     else
6664         pv2 = SvPV_const(sv2, cur2);
6665
6666     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6667         /* Differing utf8ness.
6668          * Do not UTF8size the comparands as a side-effect. */
6669          if (PL_encoding) {
6670               if (SvUTF8(sv1)) {
6671                    svrecode = newSVpvn(pv2, cur2);
6672                    sv_recode_to_utf8(svrecode, PL_encoding);
6673                    pv2 = SvPV_const(svrecode, cur2);
6674               }
6675               else {
6676                    svrecode = newSVpvn(pv1, cur1);
6677                    sv_recode_to_utf8(svrecode, PL_encoding);
6678                    pv1 = SvPV_const(svrecode, cur1);
6679               }
6680               /* Now both are in UTF-8. */
6681               if (cur1 != cur2) {
6682                    SvREFCNT_dec(svrecode);
6683                    return FALSE;
6684               }
6685          }
6686          else {
6687               bool is_utf8 = TRUE;
6688
6689               if (SvUTF8(sv1)) {
6690                    /* sv1 is the UTF-8 one,
6691                     * if is equal it must be downgrade-able */
6692                    char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
6693                                                      &cur1, &is_utf8);
6694                    if (pv != pv1)
6695                         pv1 = tpv = pv;
6696               }
6697               else {
6698                    /* sv2 is the UTF-8 one,
6699                     * if is equal it must be downgrade-able */
6700                    char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
6701                                                       &cur2, &is_utf8);
6702                    if (pv != pv2)
6703                         pv2 = tpv = pv;
6704               }
6705               if (is_utf8) {
6706                    /* Downgrade not possible - cannot be eq */
6707                    assert (tpv == 0);
6708                    return FALSE;
6709               }
6710          }
6711     }
6712
6713     if (cur1 == cur2)
6714         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
6715         
6716     SvREFCNT_dec(svrecode);
6717     if (tpv)
6718         Safefree(tpv);
6719
6720     return eq;
6721 }
6722
6723 /*
6724 =for apidoc sv_cmp
6725
6726 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
6727 string in C<sv1> is less than, equal to, or greater than the string in
6728 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
6729 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
6730
6731 =cut
6732 */
6733
6734 I32
6735 Perl_sv_cmp(pTHX_ register SV *const sv1, register SV *const sv2)
6736 {
6737     dVAR;
6738     STRLEN cur1, cur2;
6739     const char *pv1, *pv2;
6740     char *tpv = NULL;
6741     I32  cmp;
6742     SV *svrecode = NULL;
6743
6744     if (!sv1) {
6745         pv1 = "";
6746         cur1 = 0;
6747     }
6748     else
6749         pv1 = SvPV_const(sv1, cur1);
6750
6751     if (!sv2) {
6752         pv2 = "";
6753         cur2 = 0;
6754     }
6755     else
6756         pv2 = SvPV_const(sv2, cur2);
6757
6758     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
6759         /* Differing utf8ness.
6760          * Do not UTF8size the comparands as a side-effect. */
6761         if (SvUTF8(sv1)) {
6762             if (PL_encoding) {
6763                  svrecode = newSVpvn(pv2, cur2);
6764                  sv_recode_to_utf8(svrecode, PL_encoding);
6765                  pv2 = SvPV_const(svrecode, cur2);
6766             }
6767             else {
6768                  pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
6769             }
6770         }
6771         else {
6772             if (PL_encoding) {
6773                  svrecode = newSVpvn(pv1, cur1);
6774                  sv_recode_to_utf8(svrecode, PL_encoding);
6775                  pv1 = SvPV_const(svrecode, cur1);
6776             }
6777             else {
6778                  pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
6779             }
6780         }
6781     }
6782
6783     if (!cur1) {
6784         cmp = cur2 ? -1 : 0;
6785     } else if (!cur2) {
6786         cmp = 1;
6787     } else {
6788         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
6789
6790         if (retval) {
6791             cmp = retval < 0 ? -1 : 1;
6792         } else if (cur1 == cur2) {
6793             cmp = 0;
6794         } else {
6795             cmp = cur1 < cur2 ? -1 : 1;
6796         }
6797     }
6798
6799     SvREFCNT_dec(svrecode);
6800     if (tpv)
6801         Safefree(tpv);
6802
6803     return cmp;
6804 }
6805
6806 /*
6807 =for apidoc sv_cmp_locale
6808
6809 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
6810 'use bytes' aware, handles get magic, and will coerce its args to strings
6811 if necessary.  See also C<sv_cmp>.
6812
6813 =cut
6814 */
6815
6816 I32
6817 Perl_sv_cmp_locale(pTHX_ register SV *const sv1, register SV *const sv2)
6818 {
6819     dVAR;
6820 #ifdef USE_LOCALE_COLLATE
6821
6822     char *pv1, *pv2;
6823     STRLEN len1, len2;
6824     I32 retval;
6825
6826     if (PL_collation_standard)
6827         goto raw_compare;
6828
6829     len1 = 0;
6830     pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
6831     len2 = 0;
6832     pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
6833
6834     if (!pv1 || !len1) {
6835         if (pv2 && len2)
6836             return -1;
6837         else
6838             goto raw_compare;
6839     }
6840     else {
6841         if (!pv2 || !len2)
6842             return 1;
6843     }
6844
6845     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
6846
6847     if (retval)
6848         return retval < 0 ? -1 : 1;
6849
6850     /*
6851      * When the result of collation is equality, that doesn't mean
6852      * that there are no differences -- some locales exclude some
6853      * characters from consideration.  So to avoid false equalities,
6854      * we use the raw string as a tiebreaker.
6855      */
6856
6857   raw_compare:
6858     /*FALLTHROUGH*/
6859
6860 #endif /* USE_LOCALE_COLLATE */
6861
6862     return sv_cmp(sv1, sv2);
6863 }
6864
6865
6866 #ifdef USE_LOCALE_COLLATE
6867
6868 /*
6869 =for apidoc sv_collxfrm
6870
6871 Add Collate Transform magic to an SV if it doesn't already have it.
6872
6873 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
6874 scalar data of the variable, but transformed to such a format that a normal
6875 memory comparison can be used to compare the data according to the locale
6876 settings.
6877
6878 =cut
6879 */
6880
6881 char *
6882 Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp)
6883 {
6884     dVAR;
6885     MAGIC *mg;
6886
6887     PERL_ARGS_ASSERT_SV_COLLXFRM;
6888
6889     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
6890     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
6891         const char *s;
6892         char *xf;
6893         STRLEN len, xlen;
6894
6895         if (mg)
6896             Safefree(mg->mg_ptr);
6897         s = SvPV_const(sv, len);
6898         if ((xf = mem_collxfrm(s, len, &xlen))) {
6899             if (! mg) {
6900 #ifdef PERL_OLD_COPY_ON_WRITE
6901                 if (SvIsCOW(sv))
6902                     sv_force_normal_flags(sv, 0);
6903 #endif
6904                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
6905                                  0, 0);
6906                 assert(mg);
6907             }
6908             mg->mg_ptr = xf;
6909             mg->mg_len = xlen;
6910         }
6911         else {
6912             if (mg) {
6913                 mg->mg_ptr = NULL;
6914                 mg->mg_len = -1;
6915             }
6916         }
6917     }
6918     if (mg && mg->mg_ptr) {
6919         *nxp = mg->mg_len;
6920         return mg->mg_ptr + sizeof(PL_collation_ix);
6921     }
6922     else {
6923         *nxp = 0;
6924         return NULL;
6925     }
6926 }
6927
6928 #endif /* USE_LOCALE_COLLATE */
6929
6930 /*
6931 =for apidoc sv_gets
6932
6933 Get a line from the filehandle and store it into the SV, optionally
6934 appending to the currently-stored string.
6935
6936 =cut
6937 */
6938
6939 char *
6940 Perl_sv_gets(pTHX_ register SV *const sv, register PerlIO *const fp, I32 append)
6941 {
6942     dVAR;
6943     const char *rsptr;
6944     STRLEN rslen;
6945     register STDCHAR rslast;
6946     register STDCHAR *bp;
6947     register I32 cnt;
6948     I32 i = 0;
6949     I32 rspara = 0;
6950
6951     PERL_ARGS_ASSERT_SV_GETS;
6952
6953     if (SvTHINKFIRST(sv))
6954         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
6955     /* XXX. If you make this PVIV, then copy on write can copy scalars read
6956        from <>.
6957        However, perlbench says it's slower, because the existing swipe code
6958        is faster than copy on write.
6959        Swings and roundabouts.  */
6960     SvUPGRADE(sv, SVt_PV);
6961
6962     SvSCREAM_off(sv);
6963
6964     if (append) {
6965         if (PerlIO_isutf8(fp)) {
6966             if (!SvUTF8(sv)) {
6967                 sv_utf8_upgrade_nomg(sv);
6968                 sv_pos_u2b(sv,&append,0);
6969             }
6970         } else if (SvUTF8(sv)) {
6971             SV * const tsv = newSV(0);
6972             sv_gets(tsv, fp, 0);
6973             sv_utf8_upgrade_nomg(tsv);
6974             SvCUR_set(sv,append);
6975             sv_catsv(sv,tsv);
6976             sv_free(tsv);
6977             goto return_string_or_null;
6978         }
6979     }
6980
6981     SvPOK_only(sv);
6982     if (PerlIO_isutf8(fp))
6983         SvUTF8_on(sv);
6984
6985     if (IN_PERL_COMPILETIME) {
6986         /* we always read code in line mode */
6987         rsptr = "\n";
6988         rslen = 1;
6989     }
6990     else if (RsSNARF(PL_rs)) {
6991         /* If it is a regular disk file use size from stat() as estimate
6992            of amount we are going to read -- may result in mallocing
6993            more memory than we really need if the layers below reduce
6994            the size we read (e.g. CRLF or a gzip layer).
6995          */
6996         Stat_t st;
6997         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
6998             const Off_t offset = PerlIO_tell(fp);
6999             if (offset != (Off_t) -1 && st.st_size + append > offset) {
7000                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
7001             }
7002         }
7003         rsptr = NULL;
7004         rslen = 0;
7005     }
7006     else if (RsRECORD(PL_rs)) {
7007       I32 bytesread;
7008       char *buffer;
7009       U32 recsize;
7010 #ifdef VMS
7011       int fd;
7012 #endif
7013
7014       /* Grab the size of the record we're getting */
7015       recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7016       buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7017       /* Go yank in */
7018 #ifdef VMS
7019       /* VMS wants read instead of fread, because fread doesn't respect */
7020       /* RMS record boundaries. This is not necessarily a good thing to be */
7021       /* doing, but we've got no other real choice - except avoid stdio
7022          as implementation - perhaps write a :vms layer ?
7023        */
7024       fd = PerlIO_fileno(fp);
7025       if (fd == -1) { /* in-memory file from PerlIO::Scalar */
7026           bytesread = PerlIO_read(fp, buffer, recsize);
7027       }
7028       else {
7029           bytesread = PerlLIO_read(fd, buffer, recsize);
7030       }
7031 #else
7032       bytesread = PerlIO_read(fp, buffer, recsize);
7033 #endif
7034       if (bytesread < 0)
7035           bytesread = 0;
7036       SvCUR_set(sv, bytesread + append);
7037       buffer[bytesread] = '\0';
7038       goto return_string_or_null;
7039     }
7040     else if (RsPARA(PL_rs)) {
7041         rsptr = "\n\n";
7042         rslen = 2;
7043         rspara = 1;
7044     }
7045     else {
7046         /* Get $/ i.e. PL_rs into same encoding as stream wants */
7047         if (PerlIO_isutf8(fp)) {
7048             rsptr = SvPVutf8(PL_rs, rslen);
7049         }
7050         else {
7051             if (SvUTF8(PL_rs)) {
7052                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
7053                     Perl_croak(aTHX_ "Wide character in $/");
7054                 }
7055             }
7056             rsptr = SvPV_const(PL_rs, rslen);
7057         }
7058     }
7059
7060     rslast = rslen ? rsptr[rslen - 1] : '\0';
7061
7062     if (rspara) {               /* have to do this both before and after */
7063         do {                    /* to make sure file boundaries work right */
7064             if (PerlIO_eof(fp))
7065                 return 0;
7066             i = PerlIO_getc(fp);
7067             if (i != '\n') {
7068                 if (i == -1)
7069                     return 0;
7070                 PerlIO_ungetc(fp,i);
7071                 break;
7072             }
7073         } while (i != EOF);
7074     }
7075
7076     /* See if we know enough about I/O mechanism to cheat it ! */
7077
7078     /* This used to be #ifdef test - it is made run-time test for ease
7079        of abstracting out stdio interface. One call should be cheap
7080        enough here - and may even be a macro allowing compile
7081        time optimization.
7082      */
7083
7084     if (PerlIO_fast_gets(fp)) {
7085
7086     /*
7087      * We're going to steal some values from the stdio struct
7088      * and put EVERYTHING in the innermost loop into registers.
7089      */
7090     register STDCHAR *ptr;
7091     STRLEN bpx;
7092     I32 shortbuffered;
7093
7094 #if defined(VMS) && defined(PERLIO_IS_STDIO)
7095     /* An ungetc()d char is handled separately from the regular
7096      * buffer, so we getc() it back out and stuff it in the buffer.
7097      */
7098     i = PerlIO_getc(fp);
7099     if (i == EOF) return 0;
7100     *(--((*fp)->_ptr)) = (unsigned char) i;
7101     (*fp)->_cnt++;
7102 #endif
7103
7104     /* Here is some breathtakingly efficient cheating */
7105
7106     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
7107     /* make sure we have the room */
7108     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
7109         /* Not room for all of it
7110            if we are looking for a separator and room for some
7111          */
7112         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
7113             /* just process what we have room for */
7114             shortbuffered = cnt - SvLEN(sv) + append + 1;
7115             cnt -= shortbuffered;
7116         }
7117         else {
7118             shortbuffered = 0;
7119             /* remember that cnt can be negative */
7120             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
7121         }
7122     }
7123     else
7124         shortbuffered = 0;
7125     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
7126     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
7127     DEBUG_P(PerlIO_printf(Perl_debug_log,
7128         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7129     DEBUG_P(PerlIO_printf(Perl_debug_log,
7130         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7131                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7132                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
7133     for (;;) {
7134       screamer:
7135         if (cnt > 0) {
7136             if (rslen) {
7137                 while (cnt > 0) {                    /* this     |  eat */
7138                     cnt--;
7139                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
7140                         goto thats_all_folks;        /* screams  |  sed :-) */
7141                 }
7142             }
7143             else {
7144                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
7145                 bp += cnt;                           /* screams  |  dust */
7146                 ptr += cnt;                          /* louder   |  sed :-) */
7147                 cnt = 0;
7148             }
7149         }
7150         
7151         if (shortbuffered) {            /* oh well, must extend */
7152             cnt = shortbuffered;
7153             shortbuffered = 0;
7154             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
7155             SvCUR_set(sv, bpx);
7156             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
7157             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
7158             continue;
7159         }
7160
7161         DEBUG_P(PerlIO_printf(Perl_debug_log,
7162                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
7163                               PTR2UV(ptr),(long)cnt));
7164         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
7165 #if 0
7166         DEBUG_P(PerlIO_printf(Perl_debug_log,
7167             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7168             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7169             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7170 #endif
7171         /* This used to call 'filbuf' in stdio form, but as that behaves like
7172            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
7173            another abstraction.  */
7174         i   = PerlIO_getc(fp);          /* get more characters */
7175 #if 0
7176         DEBUG_P(PerlIO_printf(Perl_debug_log,
7177             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7178             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7179             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7180 #endif
7181         cnt = PerlIO_get_cnt(fp);
7182         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
7183         DEBUG_P(PerlIO_printf(Perl_debug_log,
7184             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7185
7186         if (i == EOF)                   /* all done for ever? */
7187             goto thats_really_all_folks;
7188
7189         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
7190         SvCUR_set(sv, bpx);
7191         SvGROW(sv, bpx + cnt + 2);
7192         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
7193
7194         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
7195
7196         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
7197             goto thats_all_folks;
7198     }
7199
7200 thats_all_folks:
7201     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
7202           memNE((char*)bp - rslen, rsptr, rslen))
7203         goto screamer;                          /* go back to the fray */
7204 thats_really_all_folks:
7205     if (shortbuffered)
7206         cnt += shortbuffered;
7207         DEBUG_P(PerlIO_printf(Perl_debug_log,
7208             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
7209     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
7210     DEBUG_P(PerlIO_printf(Perl_debug_log,
7211         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
7212         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
7213         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
7214     *bp = '\0';
7215     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
7216     DEBUG_P(PerlIO_printf(Perl_debug_log,
7217         "Screamer: done, len=%ld, string=|%.*s|\n",
7218         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
7219     }
7220    else
7221     {
7222        /*The big, slow, and stupid way. */
7223 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
7224         STDCHAR *buf = NULL;
7225         Newx(buf, 8192, STDCHAR);
7226         assert(buf);
7227 #else
7228         STDCHAR buf[8192];
7229 #endif
7230
7231 screamer2:
7232         if (rslen) {
7233             register const STDCHAR * const bpe = buf + sizeof(buf);
7234             bp = buf;
7235             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
7236                 ; /* keep reading */
7237             cnt = bp - buf;
7238         }
7239         else {
7240             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
7241             /* Accomodate broken VAXC compiler, which applies U8 cast to
7242              * both args of ?: operator, causing EOF to change into 255
7243              */
7244             if (cnt > 0)
7245                  i = (U8)buf[cnt - 1];
7246             else
7247                  i = EOF;
7248         }
7249
7250         if (cnt < 0)
7251             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
7252         if (append)
7253              sv_catpvn(sv, (char *) buf, cnt);
7254         else
7255              sv_setpvn(sv, (char *) buf, cnt);
7256
7257         if (i != EOF &&                 /* joy */
7258             (!rslen ||
7259              SvCUR(sv) < rslen ||
7260              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
7261         {
7262             append = -1;
7263             /*
7264              * If we're reading from a TTY and we get a short read,
7265              * indicating that the user hit his EOF character, we need
7266              * to notice it now, because if we try to read from the TTY
7267              * again, the EOF condition will disappear.
7268              *
7269              * The comparison of cnt to sizeof(buf) is an optimization
7270              * that prevents unnecessary calls to feof().
7271              *
7272              * - jik 9/25/96
7273              */
7274             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
7275                 goto screamer2;
7276         }
7277
7278 #ifdef USE_HEAP_INSTEAD_OF_STACK
7279         Safefree(buf);
7280 #endif
7281     }
7282
7283     if (rspara) {               /* have to do this both before and after */
7284         while (i != EOF) {      /* to make sure file boundaries work right */
7285             i = PerlIO_getc(fp);
7286             if (i != '\n') {
7287                 PerlIO_ungetc(fp,i);
7288                 break;
7289             }
7290         }
7291     }
7292
7293 return_string_or_null:
7294     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7295 }
7296
7297 /*
7298 =for apidoc sv_inc
7299
7300 Auto-increment of the value in the SV, doing string to numeric conversion
7301 if necessary. Handles 'get' magic.
7302
7303 =cut
7304 */
7305
7306 void
7307 Perl_sv_inc(pTHX_ register SV *const sv)
7308 {
7309     dVAR;
7310     register char *d;
7311     int flags;
7312
7313     if (!sv)
7314         return;
7315     SvGETMAGIC(sv);
7316     if (SvTHINKFIRST(sv)) {
7317         if (SvIsCOW(sv))
7318             sv_force_normal_flags(sv, 0);
7319         if (SvREADONLY(sv)) {
7320             if (IN_PERL_RUNTIME)
7321                 Perl_croak(aTHX_ "%s", PL_no_modify);
7322         }
7323         if (SvROK(sv)) {
7324             IV i;
7325             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
7326                 return;
7327             i = PTR2IV(SvRV(sv));
7328             sv_unref(sv);
7329             sv_setiv(sv, i);
7330         }
7331     }
7332     flags = SvFLAGS(sv);
7333     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
7334         /* It's (privately or publicly) a float, but not tested as an
7335            integer, so test it to see. */
7336         (void) SvIV(sv);
7337         flags = SvFLAGS(sv);
7338     }
7339     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7340         /* It's publicly an integer, or privately an integer-not-float */
7341 #ifdef PERL_PRESERVE_IVUV
7342       oops_its_int:
7343 #endif
7344         if (SvIsUV(sv)) {
7345             if (SvUVX(sv) == UV_MAX)
7346                 sv_setnv(sv, UV_MAX_P1);
7347             else
7348                 (void)SvIOK_only_UV(sv);
7349                 SvUV_set(sv, SvUVX(sv) + 1);
7350         } else {
7351             if (SvIVX(sv) == IV_MAX)
7352                 sv_setuv(sv, (UV)IV_MAX + 1);
7353             else {
7354                 (void)SvIOK_only(sv);
7355                 SvIV_set(sv, SvIVX(sv) + 1);
7356             }   
7357         }
7358         return;
7359     }
7360     if (flags & SVp_NOK) {
7361         const NV was = SvNVX(sv);
7362         if (NV_OVERFLOWS_INTEGERS_AT &&
7363             was >= NV_OVERFLOWS_INTEGERS_AT) {
7364             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7365                            "Lost precision when incrementing %" NVff " by 1",
7366                            was);
7367         }
7368         (void)SvNOK_only(sv);
7369         SvNV_set(sv, was + 1.0);
7370         return;
7371     }
7372
7373     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
7374         if ((flags & SVTYPEMASK) < SVt_PVIV)
7375             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
7376         (void)SvIOK_only(sv);
7377         SvIV_set(sv, 1);
7378         return;
7379     }
7380     d = SvPVX(sv);
7381     while (isALPHA(*d)) d++;
7382     while (isDIGIT(*d)) d++;
7383     if (d < SvEND(sv)) {
7384 #ifdef PERL_PRESERVE_IVUV
7385         /* Got to punt this as an integer if needs be, but we don't issue
7386            warnings. Probably ought to make the sv_iv_please() that does
7387            the conversion if possible, and silently.  */
7388         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7389         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7390             /* Need to try really hard to see if it's an integer.
7391                9.22337203685478e+18 is an integer.
7392                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7393                so $a="9.22337203685478e+18"; $a+0; $a++
7394                needs to be the same as $a="9.22337203685478e+18"; $a++
7395                or we go insane. */
7396         
7397             (void) sv_2iv(sv);
7398             if (SvIOK(sv))
7399                 goto oops_its_int;
7400
7401             /* sv_2iv *should* have made this an NV */
7402             if (flags & SVp_NOK) {
7403                 (void)SvNOK_only(sv);
7404                 SvNV_set(sv, SvNVX(sv) + 1.0);
7405                 return;
7406             }
7407             /* I don't think we can get here. Maybe I should assert this
7408                And if we do get here I suspect that sv_setnv will croak. NWC
7409                Fall through. */
7410 #if defined(USE_LONG_DOUBLE)
7411             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",
7412                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7413 #else
7414             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7415                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7416 #endif
7417         }
7418 #endif /* PERL_PRESERVE_IVUV */
7419         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
7420         return;
7421     }
7422     d--;
7423     while (d >= SvPVX_const(sv)) {
7424         if (isDIGIT(*d)) {
7425             if (++*d <= '9')
7426                 return;
7427             *(d--) = '0';
7428         }
7429         else {
7430 #ifdef EBCDIC
7431             /* MKS: The original code here died if letters weren't consecutive.
7432              * at least it didn't have to worry about non-C locales.  The
7433              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
7434              * arranged in order (although not consecutively) and that only
7435              * [A-Za-z] are accepted by isALPHA in the C locale.
7436              */
7437             if (*d != 'z' && *d != 'Z') {
7438                 do { ++*d; } while (!isALPHA(*d));
7439                 return;
7440             }
7441             *(d--) -= 'z' - 'a';
7442 #else
7443             ++*d;
7444             if (isALPHA(*d))
7445                 return;
7446             *(d--) -= 'z' - 'a' + 1;
7447 #endif
7448         }
7449     }
7450     /* oh,oh, the number grew */
7451     SvGROW(sv, SvCUR(sv) + 2);
7452     SvCUR_set(sv, SvCUR(sv) + 1);
7453     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
7454         *d = d[-1];
7455     if (isDIGIT(d[1]))
7456         *d = '1';
7457     else
7458         *d = d[1];
7459 }
7460
7461 /*
7462 =for apidoc sv_dec
7463
7464 Auto-decrement of the value in the SV, doing string to numeric conversion
7465 if necessary. Handles 'get' magic.
7466
7467 =cut
7468 */
7469
7470 void
7471 Perl_sv_dec(pTHX_ register SV *const sv)
7472 {
7473     dVAR;
7474     int flags;
7475
7476     if (!sv)
7477         return;
7478     SvGETMAGIC(sv);
7479     if (SvTHINKFIRST(sv)) {
7480         if (SvIsCOW(sv))
7481             sv_force_normal_flags(sv, 0);
7482         if (SvREADONLY(sv)) {
7483             if (IN_PERL_RUNTIME)
7484                 Perl_croak(aTHX_ "%s", PL_no_modify);
7485         }
7486         if (SvROK(sv)) {
7487             IV i;
7488             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
7489                 return;
7490             i = PTR2IV(SvRV(sv));
7491             sv_unref(sv);
7492             sv_setiv(sv, i);
7493         }
7494     }
7495     /* Unlike sv_inc we don't have to worry about string-never-numbers
7496        and keeping them magic. But we mustn't warn on punting */
7497     flags = SvFLAGS(sv);
7498     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
7499         /* It's publicly an integer, or privately an integer-not-float */
7500 #ifdef PERL_PRESERVE_IVUV
7501       oops_its_int:
7502 #endif
7503         if (SvIsUV(sv)) {
7504             if (SvUVX(sv) == 0) {
7505                 (void)SvIOK_only(sv);
7506                 SvIV_set(sv, -1);
7507             }
7508             else {
7509                 (void)SvIOK_only_UV(sv);
7510                 SvUV_set(sv, SvUVX(sv) - 1);
7511             }   
7512         } else {
7513             if (SvIVX(sv) == IV_MIN) {
7514                 sv_setnv(sv, (NV)IV_MIN);
7515                 goto oops_its_num;
7516             }
7517             else {
7518                 (void)SvIOK_only(sv);
7519                 SvIV_set(sv, SvIVX(sv) - 1);
7520             }   
7521         }
7522         return;
7523     }
7524     if (flags & SVp_NOK) {
7525     oops_its_num:
7526         {
7527             const NV was = SvNVX(sv);
7528             if (NV_OVERFLOWS_INTEGERS_AT &&
7529                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
7530                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
7531                                "Lost precision when decrementing %" NVff " by 1",
7532                                was);
7533             }
7534             (void)SvNOK_only(sv);
7535             SvNV_set(sv, was - 1.0);
7536             return;
7537         }
7538     }
7539     if (!(flags & SVp_POK)) {
7540         if ((flags & SVTYPEMASK) < SVt_PVIV)
7541             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
7542         SvIV_set(sv, -1);
7543         (void)SvIOK_only(sv);
7544         return;
7545     }
7546 #ifdef PERL_PRESERVE_IVUV
7547     {
7548         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
7549         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
7550             /* Need to try really hard to see if it's an integer.
7551                9.22337203685478e+18 is an integer.
7552                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
7553                so $a="9.22337203685478e+18"; $a+0; $a--
7554                needs to be the same as $a="9.22337203685478e+18"; $a--
7555                or we go insane. */
7556         
7557             (void) sv_2iv(sv);
7558             if (SvIOK(sv))
7559                 goto oops_its_int;
7560
7561             /* sv_2iv *should* have made this an NV */
7562             if (flags & SVp_NOK) {
7563                 (void)SvNOK_only(sv);
7564                 SvNV_set(sv, SvNVX(sv) - 1.0);
7565                 return;
7566             }
7567             /* I don't think we can get here. Maybe I should assert this
7568                And if we do get here I suspect that sv_setnv will croak. NWC
7569                Fall through. */
7570 #if defined(USE_LONG_DOUBLE)
7571             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",
7572                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7573 #else
7574             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
7575                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
7576 #endif
7577         }
7578     }
7579 #endif /* PERL_PRESERVE_IVUV */
7580     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
7581 }
7582
7583 /* this define is used to eliminate a chunk of duplicated but shared logic
7584  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
7585  * used anywhere but here - yves
7586  */
7587 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
7588     STMT_START {      \
7589         EXTEND_MORTAL(1); \
7590         PL_tmps_stack[++PL_tmps_ix] = (AnSv); \
7591     } STMT_END
7592
7593 /*
7594 =for apidoc sv_mortalcopy
7595
7596 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
7597 The new SV is marked as mortal. It will be destroyed "soon", either by an
7598 explicit call to FREETMPS, or by an implicit call at places such as
7599 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
7600
7601 =cut
7602 */
7603
7604 /* Make a string that will exist for the duration of the expression
7605  * evaluation.  Actually, it may have to last longer than that, but
7606  * hopefully we won't free it until it has been assigned to a
7607  * permanent location. */
7608
7609 SV *
7610 Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
7611 {
7612     dVAR;
7613     register SV *sv;
7614
7615     new_SV(sv);
7616     sv_setsv(sv,oldstr);
7617     PUSH_EXTEND_MORTAL__SV_C(sv);
7618     SvTEMP_on(sv);
7619     return sv;
7620 }
7621
7622 /*
7623 =for apidoc sv_newmortal
7624
7625 Creates a new null SV which is mortal.  The reference count of the SV is
7626 set to 1. It will be destroyed "soon", either by an explicit call to
7627 FREETMPS, or by an implicit call at places such as statement boundaries.
7628 See also C<sv_mortalcopy> and C<sv_2mortal>.
7629
7630 =cut
7631 */
7632
7633 SV *
7634 Perl_sv_newmortal(pTHX)
7635 {
7636     dVAR;
7637     register SV *sv;
7638
7639     new_SV(sv);
7640     SvFLAGS(sv) = SVs_TEMP;
7641     PUSH_EXTEND_MORTAL__SV_C(sv);
7642     return sv;
7643 }
7644
7645
7646 /*
7647 =for apidoc newSVpvn_flags
7648
7649 Creates a new SV and copies a string into it.  The reference count for the
7650 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
7651 string.  You are responsible for ensuring that the source string is at least
7652 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
7653 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
7654 If C<SVs_TEMP> is set, then C<sv2mortal()> is called on the result before
7655 returning. If C<SVf_UTF8> is set, C<s> is considered to be in UTF-8 and the
7656 C<SVf_UTF8> flag will be set on the new SV.
7657 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
7658
7659     #define newSVpvn_utf8(s, len, u)                    \
7660         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7661
7662 =cut
7663 */
7664
7665 SV *
7666 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
7667 {
7668     dVAR;
7669     register SV *sv;
7670
7671     /* All the flags we don't support must be zero.
7672        And we're new code so I'm going to assert this from the start.  */
7673     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
7674     new_SV(sv);
7675     sv_setpvn(sv,s,len);
7676
7677     /* This code used to a sv_2mortal(), however we now unroll the call to sv_2mortal()
7678      * and do what it does outselves here.
7679      * Since we have asserted that flags can only have the SVf_UTF8 and/or SVs_TEMP flags
7680      * set above we can use it to enable the sv flags directly (bypassing SvTEMP_on), which
7681      * in turn means we dont need to mask out the SVf_UTF8 flag below, which means that we
7682      * eleminate quite a few steps than it looks - Yves (explaining patch by gfx)
7683      */
7684
7685     SvFLAGS(sv) |= flags;
7686
7687     if(flags & SVs_TEMP){
7688         PUSH_EXTEND_MORTAL__SV_C(sv);
7689     }
7690
7691     return sv;
7692 }
7693
7694 /*
7695 =for apidoc sv_2mortal
7696
7697 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
7698 by an explicit call to FREETMPS, or by an implicit call at places such as
7699 statement boundaries.  SvTEMP() is turned on which means that the SV's
7700 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
7701 and C<sv_mortalcopy>.
7702
7703 =cut
7704 */
7705
7706 SV *
7707 Perl_sv_2mortal(pTHX_ register SV *const sv)
7708 {
7709     dVAR;
7710     if (!sv)
7711         return NULL;
7712     if (SvREADONLY(sv) && SvIMMORTAL(sv))
7713         return sv;
7714     PUSH_EXTEND_MORTAL__SV_C(sv);
7715     SvTEMP_on(sv);
7716     return sv;
7717 }
7718
7719 /*
7720 =for apidoc newSVpv
7721
7722 Creates a new SV and copies a string into it.  The reference count for the
7723 SV is set to 1.  If C<len> is zero, Perl will compute the length using
7724 strlen().  For efficiency, consider using C<newSVpvn> instead.
7725
7726 =cut
7727 */
7728
7729 SV *
7730 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
7731 {
7732     dVAR;
7733     register SV *sv;
7734
7735     new_SV(sv);
7736     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
7737     return sv;
7738 }
7739
7740 /*
7741 =for apidoc newSVpvn
7742
7743 Creates a new SV and copies a string into it.  The reference count for the
7744 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
7745 string.  You are responsible for ensuring that the source string is at least
7746 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
7747
7748 =cut
7749 */
7750
7751 SV *
7752 Perl_newSVpvn(pTHX_ const char *const s, const STRLEN len)
7753 {
7754     dVAR;
7755     register SV *sv;
7756
7757     new_SV(sv);
7758     sv_setpvn(sv,s,len);
7759     return sv;
7760 }
7761
7762 /*
7763 =for apidoc newSVhek
7764
7765 Creates a new SV from the hash key structure.  It will generate scalars that
7766 point to the shared string table where possible. Returns a new (undefined)
7767 SV if the hek is NULL.
7768
7769 =cut
7770 */
7771
7772 SV *
7773 Perl_newSVhek(pTHX_ const HEK *const hek)
7774 {
7775     dVAR;
7776     if (!hek) {
7777         SV *sv;
7778
7779         new_SV(sv);
7780         return sv;
7781     }
7782
7783     if (HEK_LEN(hek) == HEf_SVKEY) {
7784         return newSVsv(*(SV**)HEK_KEY(hek));
7785     } else {
7786         const int flags = HEK_FLAGS(hek);
7787         if (flags & HVhek_WASUTF8) {
7788             /* Trouble :-)
7789                Andreas would like keys he put in as utf8 to come back as utf8
7790             */
7791             STRLEN utf8_len = HEK_LEN(hek);
7792             const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
7793             SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
7794
7795             SvUTF8_on (sv);
7796             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
7797             return sv;
7798         } else if (flags & (HVhek_REHASH|HVhek_UNSHARED)) {
7799             /* We don't have a pointer to the hv, so we have to replicate the
7800                flag into every HEK. This hv is using custom a hasing
7801                algorithm. Hence we can't return a shared string scalar, as
7802                that would contain the (wrong) hash value, and might get passed
7803                into an hv routine with a regular hash.
7804                Similarly, a hash that isn't using shared hash keys has to have
7805                the flag in every key so that we know not to try to call
7806                share_hek_kek on it.  */
7807
7808             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
7809             if (HEK_UTF8(hek))
7810                 SvUTF8_on (sv);
7811             return sv;
7812         }
7813         /* This will be overwhelminly the most common case.  */
7814         {
7815             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
7816                more efficient than sharepvn().  */
7817             SV *sv;
7818
7819             new_SV(sv);
7820             sv_upgrade(sv, SVt_PV);
7821             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
7822             SvCUR_set(sv, HEK_LEN(hek));
7823             SvLEN_set(sv, 0);
7824             SvREADONLY_on(sv);
7825             SvFAKE_on(sv);
7826             SvPOK_on(sv);
7827             if (HEK_UTF8(hek))
7828                 SvUTF8_on(sv);
7829             return sv;
7830         }
7831     }
7832 }
7833
7834 /*
7835 =for apidoc newSVpvn_share
7836
7837 Creates a new SV with its SvPVX_const pointing to a shared string in the string
7838 table. If the string does not already exist in the table, it is created
7839 first.  Turns on READONLY and FAKE. If the C<hash> parameter is non-zero, that
7840 value is used; otherwise the hash is computed. The string's hash can be later
7841 be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
7842 that as the string table is used for shared hash keys these strings will have
7843 SvPVX_const == HeKEY and hash lookup will avoid string compare.
7844
7845 =cut
7846 */
7847
7848 SV *
7849 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
7850 {
7851     dVAR;
7852     register SV *sv;
7853     bool is_utf8 = FALSE;
7854     const char *const orig_src = src;
7855
7856     if (len < 0) {
7857         STRLEN tmplen = -len;
7858         is_utf8 = TRUE;
7859         /* See the note in hv.c:hv_fetch() --jhi */
7860         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
7861         len = tmplen;
7862     }
7863     if (!hash)
7864         PERL_HASH(hash, src, len);
7865     new_SV(sv);
7866     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
7867        changes here, update it there too.  */
7868     sv_upgrade(sv, SVt_PV);
7869     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
7870     SvCUR_set(sv, len);
7871     SvLEN_set(sv, 0);
7872     SvREADONLY_on(sv);
7873     SvFAKE_on(sv);
7874     SvPOK_on(sv);
7875     if (is_utf8)
7876         SvUTF8_on(sv);
7877     if (src != orig_src)
7878         Safefree(src);
7879     return sv;
7880 }
7881
7882
7883 #if defined(PERL_IMPLICIT_CONTEXT)
7884
7885 /* pTHX_ magic can't cope with varargs, so this is a no-context
7886  * version of the main function, (which may itself be aliased to us).
7887  * Don't access this version directly.
7888  */
7889
7890 SV *
7891 Perl_newSVpvf_nocontext(const char *const pat, ...)
7892 {
7893     dTHX;
7894     register SV *sv;
7895     va_list args;
7896
7897     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
7898
7899     va_start(args, pat);
7900     sv = vnewSVpvf(pat, &args);
7901     va_end(args);
7902     return sv;
7903 }
7904 #endif
7905
7906 /*
7907 =for apidoc newSVpvf
7908
7909 Creates a new SV and initializes it with the string formatted like
7910 C<sprintf>.
7911
7912 =cut
7913 */
7914
7915 SV *
7916 Perl_newSVpvf(pTHX_ const char *const pat, ...)
7917 {
7918     register SV *sv;
7919     va_list args;
7920
7921     PERL_ARGS_ASSERT_NEWSVPVF;
7922
7923     va_start(args, pat);
7924     sv = vnewSVpvf(pat, &args);
7925     va_end(args);
7926     return sv;
7927 }
7928
7929 /* backend for newSVpvf() and newSVpvf_nocontext() */
7930
7931 SV *
7932 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
7933 {
7934     dVAR;
7935     register SV *sv;
7936
7937     PERL_ARGS_ASSERT_VNEWSVPVF;
7938
7939     new_SV(sv);
7940     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
7941     return sv;
7942 }
7943
7944 /*
7945 =for apidoc newSVnv
7946
7947 Creates a new SV and copies a floating point value into it.
7948 The reference count for the SV is set to 1.
7949
7950 =cut
7951 */
7952
7953 SV *
7954 Perl_newSVnv(pTHX_ const NV n)
7955 {
7956     dVAR;
7957     register SV *sv;
7958
7959     new_SV(sv);
7960     sv_setnv(sv,n);
7961     return sv;
7962 }
7963
7964 /*
7965 =for apidoc newSViv
7966
7967 Creates a new SV and copies an integer into it.  The reference count for the
7968 SV is set to 1.
7969
7970 =cut
7971 */
7972
7973 SV *
7974 Perl_newSViv(pTHX_ const IV i)
7975 {
7976     dVAR;
7977     register SV *sv;
7978
7979     new_SV(sv);
7980     sv_setiv(sv,i);
7981     return sv;
7982 }
7983
7984 /*
7985 =for apidoc newSVuv
7986
7987 Creates a new SV and copies an unsigned integer into it.
7988 The reference count for the SV is set to 1.
7989
7990 =cut
7991 */
7992
7993 SV *
7994 Perl_newSVuv(pTHX_ const UV u)
7995 {
7996     dVAR;
7997     register SV *sv;
7998
7999     new_SV(sv);
8000     sv_setuv(sv,u);
8001     return sv;
8002 }
8003
8004 /*
8005 =for apidoc newSV_type
8006
8007 Creates a new SV, of the type specified.  The reference count for the new SV
8008 is set to 1.
8009
8010 =cut
8011 */
8012
8013 SV *
8014 Perl_newSV_type(pTHX_ const svtype type)
8015 {
8016     register SV *sv;
8017
8018     new_SV(sv);
8019     sv_upgrade(sv, type);
8020     return sv;
8021 }
8022
8023 /*
8024 =for apidoc newRV_noinc
8025
8026 Creates an RV wrapper for an SV.  The reference count for the original
8027 SV is B<not> incremented.
8028
8029 =cut
8030 */
8031
8032 SV *
8033 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
8034 {
8035     dVAR;
8036     register SV *sv = newSV_type(SVt_IV);
8037
8038     PERL_ARGS_ASSERT_NEWRV_NOINC;
8039
8040     SvTEMP_off(tmpRef);
8041     SvRV_set(sv, tmpRef);
8042     SvROK_on(sv);
8043     return sv;
8044 }
8045
8046 /* newRV_inc is the official function name to use now.
8047  * newRV_inc is in fact #defined to newRV in sv.h
8048  */
8049
8050 SV *
8051 Perl_newRV(pTHX_ SV *const sv)
8052 {
8053     dVAR;
8054
8055     PERL_ARGS_ASSERT_NEWRV;
8056
8057     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
8058 }
8059
8060 /*
8061 =for apidoc newSVsv
8062
8063 Creates a new SV which is an exact duplicate of the original SV.
8064 (Uses C<sv_setsv>).
8065
8066 =cut
8067 */
8068
8069 SV *
8070 Perl_newSVsv(pTHX_ register SV *const old)
8071 {
8072     dVAR;
8073     register SV *sv;
8074
8075     if (!old)
8076         return NULL;
8077     if (SvTYPE(old) == SVTYPEMASK) {
8078         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
8079         return NULL;
8080     }
8081     new_SV(sv);
8082     /* SV_GMAGIC is the default for sv_setv()
8083        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
8084        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
8085     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
8086     return sv;
8087 }
8088
8089 /*
8090 =for apidoc sv_reset
8091
8092 Underlying implementation for the C<reset> Perl function.
8093 Note that the perl-level function is vaguely deprecated.
8094
8095 =cut
8096 */
8097
8098 void
8099 Perl_sv_reset(pTHX_ register const char *s, HV *const stash)
8100 {
8101     dVAR;
8102     char todo[PERL_UCHAR_MAX+1];
8103
8104     PERL_ARGS_ASSERT_SV_RESET;
8105
8106     if (!stash)
8107         return;
8108
8109     if (!*s) {          /* reset ?? searches */
8110         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
8111         if (mg) {
8112             const U32 count = mg->mg_len / sizeof(PMOP**);
8113             PMOP **pmp = (PMOP**) mg->mg_ptr;
8114             PMOP *const *const end = pmp + count;
8115
8116             while (pmp < end) {
8117 #ifdef USE_ITHREADS
8118                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
8119 #else
8120                 (*pmp)->op_pmflags &= ~PMf_USED;
8121 #endif
8122                 ++pmp;
8123             }
8124         }
8125         return;
8126     }
8127
8128     /* reset variables */
8129
8130     if (!HvARRAY(stash))
8131         return;
8132
8133     Zero(todo, 256, char);
8134     while (*s) {
8135         I32 max;
8136         I32 i = (unsigned char)*s;
8137         if (s[1] == '-') {
8138             s += 2;
8139         }
8140         max = (unsigned char)*s++;
8141         for ( ; i <= max; i++) {
8142             todo[i] = 1;
8143         }
8144         for (i = 0; i <= (I32) HvMAX(stash); i++) {
8145             HE *entry;
8146             for (entry = HvARRAY(stash)[i];
8147                  entry;
8148                  entry = HeNEXT(entry))
8149             {
8150                 register GV *gv;
8151                 register SV *sv;
8152
8153                 if (!todo[(U8)*HeKEY(entry)])
8154                     continue;
8155                 gv = MUTABLE_GV(HeVAL(entry));
8156                 sv = GvSV(gv);
8157                 if (sv) {
8158                     if (SvTHINKFIRST(sv)) {
8159                         if (!SvREADONLY(sv) && SvROK(sv))
8160                             sv_unref(sv);
8161                         /* XXX Is this continue a bug? Why should THINKFIRST
8162                            exempt us from resetting arrays and hashes?  */
8163                         continue;
8164                     }
8165                     SvOK_off(sv);
8166                     if (SvTYPE(sv) >= SVt_PV) {
8167                         SvCUR_set(sv, 0);
8168                         if (SvPVX_const(sv) != NULL)
8169                             *SvPVX(sv) = '\0';
8170                         SvTAINT(sv);
8171                     }
8172                 }
8173                 if (GvAV(gv)) {
8174                     av_clear(GvAV(gv));
8175                 }
8176                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
8177 #if defined(VMS)
8178                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
8179 #else /* ! VMS */
8180                     hv_clear(GvHV(gv));
8181 #  if defined(USE_ENVIRON_ARRAY)
8182                     if (gv == PL_envgv)
8183                         my_clearenv();
8184 #  endif /* USE_ENVIRON_ARRAY */
8185 #endif /* VMS */
8186                 }
8187             }
8188         }
8189     }
8190 }
8191
8192 /*
8193 =for apidoc sv_2io
8194
8195 Using various gambits, try to get an IO from an SV: the IO slot if its a
8196 GV; or the recursive result if we're an RV; or the IO slot of the symbol
8197 named after the PV if we're a string.
8198
8199 =cut
8200 */
8201
8202 IO*
8203 Perl_sv_2io(pTHX_ SV *const sv)
8204 {
8205     IO* io;
8206     GV* gv;
8207
8208     PERL_ARGS_ASSERT_SV_2IO;
8209
8210     switch (SvTYPE(sv)) {
8211     case SVt_PVIO:
8212         io = MUTABLE_IO(sv);
8213         break;
8214     case SVt_PVGV:
8215         if (isGV_with_GP(sv)) {
8216             gv = MUTABLE_GV(sv);
8217             io = GvIO(gv);
8218             if (!io)
8219                 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
8220             break;
8221         }
8222         /* FALL THROUGH */
8223     default:
8224         if (!SvOK(sv))
8225             Perl_croak(aTHX_ PL_no_usym, "filehandle");
8226         if (SvROK(sv))
8227             return sv_2io(SvRV(sv));
8228         gv = gv_fetchsv(sv, 0, SVt_PVIO);
8229         if (gv)
8230             io = GvIO(gv);
8231         else
8232             io = 0;
8233         if (!io)
8234             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(sv));
8235         break;
8236     }
8237     return io;
8238 }
8239
8240 /*
8241 =for apidoc sv_2cv
8242
8243 Using various gambits, try to get a CV from an SV; in addition, try if
8244 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
8245 The flags in C<lref> are passed to gv_fetchsv.
8246
8247 =cut
8248 */
8249
8250 CV *
8251 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
8252 {
8253     dVAR;
8254     GV *gv = NULL;
8255     CV *cv = NULL;
8256
8257     PERL_ARGS_ASSERT_SV_2CV;
8258
8259     if (!sv) {
8260         *st = NULL;
8261         *gvp = NULL;
8262         return NULL;
8263     }
8264     switch (SvTYPE(sv)) {
8265     case SVt_PVCV:
8266         *st = CvSTASH(sv);
8267         *gvp = NULL;
8268         return MUTABLE_CV(sv);
8269     case SVt_PVHV:
8270     case SVt_PVAV:
8271         *st = NULL;
8272         *gvp = NULL;
8273         return NULL;
8274     case SVt_PVGV:
8275         if (isGV_with_GP(sv)) {
8276             gv = MUTABLE_GV(sv);
8277             *gvp = gv;
8278             *st = GvESTASH(gv);
8279             goto fix_gv;
8280         }
8281         /* FALL THROUGH */
8282
8283     default:
8284         if (SvROK(sv)) {
8285             SV * const *sp = &sv;       /* Used in tryAMAGICunDEREF macro. */
8286             SvGETMAGIC(sv);
8287             tryAMAGICunDEREF(to_cv);
8288
8289             sv = SvRV(sv);
8290             if (SvTYPE(sv) == SVt_PVCV) {
8291                 cv = MUTABLE_CV(sv);
8292                 *gvp = NULL;
8293                 *st = CvSTASH(cv);
8294                 return cv;
8295             }
8296             else if(isGV_with_GP(sv))
8297                 gv = MUTABLE_GV(sv);
8298             else
8299                 Perl_croak(aTHX_ "Not a subroutine reference");
8300         }
8301         else if (isGV_with_GP(sv)) {
8302             SvGETMAGIC(sv);
8303             gv = MUTABLE_GV(sv);
8304         }
8305         else
8306             gv = gv_fetchsv(sv, lref, SVt_PVCV); /* Calls get magic */
8307         *gvp = gv;
8308         if (!gv) {
8309             *st = NULL;
8310             return NULL;
8311         }
8312         /* Some flags to gv_fetchsv mean don't really create the GV  */
8313         if (!isGV_with_GP(gv)) {
8314             *st = NULL;
8315             return NULL;
8316         }
8317         *st = GvESTASH(gv);
8318     fix_gv:
8319         if (lref && !GvCVu(gv)) {
8320             SV *tmpsv;
8321             ENTER;
8322             tmpsv = newSV(0);
8323             gv_efullname3(tmpsv, gv, NULL);
8324             /* XXX this is probably not what they think they're getting.
8325              * It has the same effect as "sub name;", i.e. just a forward
8326              * declaration! */
8327             newSUB(start_subparse(FALSE, 0),
8328                    newSVOP(OP_CONST, 0, tmpsv),
8329                    NULL, NULL);
8330             LEAVE;
8331             if (!GvCVu(gv))
8332                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
8333                            SVfARG(SvOK(sv) ? sv : &PL_sv_no));
8334         }
8335         return GvCVu(gv);
8336     }
8337 }
8338
8339 /*
8340 =for apidoc sv_true
8341
8342 Returns true if the SV has a true value by Perl's rules.
8343 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
8344 instead use an in-line version.
8345
8346 =cut
8347 */
8348
8349 I32
8350 Perl_sv_true(pTHX_ register SV *const sv)
8351 {
8352     if (!sv)
8353         return 0;
8354     if (SvPOK(sv)) {
8355         register const XPV* const tXpv = (XPV*)SvANY(sv);
8356         if (tXpv &&
8357                 (tXpv->xpv_cur > 1 ||
8358                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
8359             return 1;
8360         else
8361             return 0;
8362     }
8363     else {
8364         if (SvIOK(sv))
8365             return SvIVX(sv) != 0;
8366         else {
8367             if (SvNOK(sv))
8368                 return SvNVX(sv) != 0.0;
8369             else
8370                 return sv_2bool(sv);
8371         }
8372     }
8373 }
8374
8375 /*
8376 =for apidoc sv_pvn_force
8377
8378 Get a sensible string out of the SV somehow.
8379 A private implementation of the C<SvPV_force> macro for compilers which
8380 can't cope with complex macro expressions. Always use the macro instead.
8381
8382 =for apidoc sv_pvn_force_flags
8383
8384 Get a sensible string out of the SV somehow.
8385 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
8386 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
8387 implemented in terms of this function.
8388 You normally want to use the various wrapper macros instead: see
8389 C<SvPV_force> and C<SvPV_force_nomg>
8390
8391 =cut
8392 */
8393
8394 char *
8395 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
8396 {
8397     dVAR;
8398
8399     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
8400
8401     if (SvTHINKFIRST(sv) && !SvROK(sv))
8402         sv_force_normal_flags(sv, 0);
8403
8404     if (SvPOK(sv)) {
8405         if (lp)
8406             *lp = SvCUR(sv);
8407     }
8408     else {
8409         char *s;
8410         STRLEN len;
8411  
8412         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
8413             const char * const ref = sv_reftype(sv,0);
8414             if (PL_op)
8415                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
8416                            ref, OP_DESC(PL_op));
8417             else
8418                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
8419         }
8420         if ((SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
8421             || isGV_with_GP(sv))
8422             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
8423                 OP_DESC(PL_op));
8424         s = sv_2pv_flags(sv, &len, flags);
8425         if (lp)
8426             *lp = len;
8427
8428         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
8429             if (SvROK(sv))
8430                 sv_unref(sv);
8431             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
8432             SvGROW(sv, len + 1);
8433             Move(s,SvPVX(sv),len,char);
8434             SvCUR_set(sv, len);
8435             SvPVX(sv)[len] = '\0';
8436         }
8437         if (!SvPOK(sv)) {
8438             SvPOK_on(sv);               /* validate pointer */
8439             SvTAINT(sv);
8440             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
8441                                   PTR2UV(sv),SvPVX_const(sv)));
8442         }
8443     }
8444     return SvPVX_mutable(sv);
8445 }
8446
8447 /*
8448 =for apidoc sv_pvbyten_force
8449
8450 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
8451
8452 =cut
8453 */
8454
8455 char *
8456 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
8457 {
8458     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
8459
8460     sv_pvn_force(sv,lp);
8461     sv_utf8_downgrade(sv,0);
8462     *lp = SvCUR(sv);
8463     return SvPVX(sv);
8464 }
8465
8466 /*
8467 =for apidoc sv_pvutf8n_force
8468
8469 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
8470
8471 =cut
8472 */
8473
8474 char *
8475 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
8476 {
8477     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
8478
8479     sv_pvn_force(sv,lp);
8480     sv_utf8_upgrade(sv);
8481     *lp = SvCUR(sv);
8482     return SvPVX(sv);
8483 }
8484
8485 /*
8486 =for apidoc sv_reftype
8487
8488 Returns a string describing what the SV is a reference to.
8489
8490 =cut
8491 */
8492
8493 const char *
8494 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
8495 {
8496     PERL_ARGS_ASSERT_SV_REFTYPE;
8497
8498     /* The fact that I don't need to downcast to char * everywhere, only in ?:
8499        inside return suggests a const propagation bug in g++.  */
8500     if (ob && SvOBJECT(sv)) {
8501         char * const name = HvNAME_get(SvSTASH(sv));
8502         return name ? name : (char *) "__ANON__";
8503     }
8504     else {
8505         switch (SvTYPE(sv)) {
8506         case SVt_NULL:
8507         case SVt_IV:
8508         case SVt_NV:
8509         case SVt_PV:
8510         case SVt_PVIV:
8511         case SVt_PVNV:
8512         case SVt_PVMG:
8513                                 if (SvVOK(sv))
8514                                     return "VSTRING";
8515                                 if (SvROK(sv))
8516                                     return "REF";
8517                                 else
8518                                     return "SCALAR";
8519
8520         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
8521                                 /* tied lvalues should appear to be
8522                                  * scalars for backwards compatitbility */
8523                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
8524                                     ? "SCALAR" : "LVALUE");
8525         case SVt_PVAV:          return "ARRAY";
8526         case SVt_PVHV:          return "HASH";
8527         case SVt_PVCV:          return "CODE";
8528         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
8529                                     ? "GLOB" : "SCALAR");
8530         case SVt_PVFM:          return "FORMAT";
8531         case SVt_PVIO:          return "IO";
8532         case SVt_BIND:          return "BIND";
8533         case SVt_REGEXP:        return "REGEXP"; 
8534         default:                return "UNKNOWN";
8535         }
8536     }
8537 }
8538
8539 /*
8540 =for apidoc sv_isobject
8541
8542 Returns a boolean indicating whether the SV is an RV pointing to a blessed
8543 object.  If the SV is not an RV, or if the object is not blessed, then this
8544 will return false.
8545
8546 =cut
8547 */
8548
8549 int
8550 Perl_sv_isobject(pTHX_ SV *sv)
8551 {
8552     if (!sv)
8553         return 0;
8554     SvGETMAGIC(sv);
8555     if (!SvROK(sv))
8556         return 0;
8557     sv = SvRV(sv);
8558     if (!SvOBJECT(sv))
8559         return 0;
8560     return 1;
8561 }
8562
8563 /*
8564 =for apidoc sv_isa
8565
8566 Returns a boolean indicating whether the SV is blessed into the specified
8567 class.  This does not check for subtypes; use C<sv_derived_from> to verify
8568 an inheritance relationship.
8569
8570 =cut
8571 */
8572
8573 int
8574 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
8575 {
8576     const char *hvname;
8577
8578     PERL_ARGS_ASSERT_SV_ISA;
8579
8580     if (!sv)
8581         return 0;
8582     SvGETMAGIC(sv);
8583     if (!SvROK(sv))
8584         return 0;
8585     sv = SvRV(sv);
8586     if (!SvOBJECT(sv))
8587         return 0;
8588     hvname = HvNAME_get(SvSTASH(sv));
8589     if (!hvname)
8590         return 0;
8591
8592     return strEQ(hvname, name);
8593 }
8594
8595 /*
8596 =for apidoc newSVrv
8597
8598 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
8599 it will be upgraded to one.  If C<classname> is non-null then the new SV will
8600 be blessed in the specified package.  The new SV is returned and its
8601 reference count is 1.
8602
8603 =cut
8604 */
8605
8606 SV*
8607 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
8608 {
8609     dVAR;
8610     SV *sv;
8611
8612     PERL_ARGS_ASSERT_NEWSVRV;
8613
8614     new_SV(sv);
8615
8616     SV_CHECK_THINKFIRST_COW_DROP(rv);
8617     (void)SvAMAGIC_off(rv);
8618
8619     if (SvTYPE(rv) >= SVt_PVMG) {
8620         const U32 refcnt = SvREFCNT(rv);
8621         SvREFCNT(rv) = 0;
8622         sv_clear(rv);
8623         SvFLAGS(rv) = 0;
8624         SvREFCNT(rv) = refcnt;
8625
8626         sv_upgrade(rv, SVt_IV);
8627     } else if (SvROK(rv)) {
8628         SvREFCNT_dec(SvRV(rv));
8629     } else {
8630         prepare_SV_for_RV(rv);
8631     }
8632
8633     SvOK_off(rv);
8634     SvRV_set(rv, sv);
8635     SvROK_on(rv);
8636
8637     if (classname) {
8638         HV* const stash = gv_stashpv(classname, GV_ADD);
8639         (void)sv_bless(rv, stash);
8640     }
8641     return sv;
8642 }
8643
8644 /*
8645 =for apidoc sv_setref_pv
8646
8647 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
8648 argument will be upgraded to an RV.  That RV will be modified to point to
8649 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
8650 into the SV.  The C<classname> argument indicates the package for the
8651 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8652 will have a reference count of 1, and the RV will be returned.
8653
8654 Do not use with other Perl types such as HV, AV, SV, CV, because those
8655 objects will become corrupted by the pointer copy process.
8656
8657 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
8658
8659 =cut
8660 */
8661
8662 SV*
8663 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
8664 {
8665     dVAR;
8666
8667     PERL_ARGS_ASSERT_SV_SETREF_PV;
8668
8669     if (!pv) {
8670         sv_setsv(rv, &PL_sv_undef);
8671         SvSETMAGIC(rv);
8672     }
8673     else
8674         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
8675     return rv;
8676 }
8677
8678 /*
8679 =for apidoc sv_setref_iv
8680
8681 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
8682 argument will be upgraded to an RV.  That RV will be modified to point to
8683 the new SV.  The C<classname> argument indicates the package for the
8684 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8685 will have a reference count of 1, and the RV will be returned.
8686
8687 =cut
8688 */
8689
8690 SV*
8691 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
8692 {
8693     PERL_ARGS_ASSERT_SV_SETREF_IV;
8694
8695     sv_setiv(newSVrv(rv,classname), iv);
8696     return rv;
8697 }
8698
8699 /*
8700 =for apidoc sv_setref_uv
8701
8702 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
8703 argument will be upgraded to an RV.  That RV will be modified to point to
8704 the new SV.  The C<classname> argument indicates the package for the
8705 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8706 will have a reference count of 1, and the RV will be returned.
8707
8708 =cut
8709 */
8710
8711 SV*
8712 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
8713 {
8714     PERL_ARGS_ASSERT_SV_SETREF_UV;
8715
8716     sv_setuv(newSVrv(rv,classname), uv);
8717     return rv;
8718 }
8719
8720 /*
8721 =for apidoc sv_setref_nv
8722
8723 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
8724 argument will be upgraded to an RV.  That RV will be modified to point to
8725 the new SV.  The C<classname> argument indicates the package for the
8726 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
8727 will have a reference count of 1, and the RV will be returned.
8728
8729 =cut
8730 */
8731
8732 SV*
8733 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
8734 {
8735     PERL_ARGS_ASSERT_SV_SETREF_NV;
8736
8737     sv_setnv(newSVrv(rv,classname), nv);
8738     return rv;
8739 }
8740
8741 /*
8742 =for apidoc sv_setref_pvn
8743
8744 Copies a string into a new SV, optionally blessing the SV.  The length of the
8745 string must be specified with C<n>.  The C<rv> argument will be upgraded to
8746 an RV.  That RV will be modified to point to the new SV.  The C<classname>
8747 argument indicates the package for the blessing.  Set C<classname> to
8748 C<NULL> to avoid the blessing.  The new SV will have a reference count
8749 of 1, and the RV will be returned.
8750
8751 Note that C<sv_setref_pv> copies the pointer while this copies the string.
8752
8753 =cut
8754 */
8755
8756 SV*
8757 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
8758                    const char *const pv, const STRLEN n)
8759 {
8760     PERL_ARGS_ASSERT_SV_SETREF_PVN;
8761
8762     sv_setpvn(newSVrv(rv,classname), pv, n);
8763     return rv;
8764 }
8765
8766 /*
8767 =for apidoc sv_bless
8768
8769 Blesses an SV into a specified package.  The SV must be an RV.  The package
8770 must be designated by its stash (see C<gv_stashpv()>).  The reference count
8771 of the SV is unaffected.
8772
8773 =cut
8774 */
8775
8776 SV*
8777 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
8778 {
8779     dVAR;
8780     SV *tmpRef;
8781
8782     PERL_ARGS_ASSERT_SV_BLESS;
8783
8784     if (!SvROK(sv))
8785         Perl_croak(aTHX_ "Can't bless non-reference value");
8786     tmpRef = SvRV(sv);
8787     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
8788         if (SvIsCOW(tmpRef))
8789             sv_force_normal_flags(tmpRef, 0);
8790         if (SvREADONLY(tmpRef))
8791             Perl_croak(aTHX_ "%s", PL_no_modify);
8792         if (SvOBJECT(tmpRef)) {
8793             if (SvTYPE(tmpRef) != SVt_PVIO)
8794                 --PL_sv_objcount;
8795             SvREFCNT_dec(SvSTASH(tmpRef));
8796         }
8797     }
8798     SvOBJECT_on(tmpRef);
8799     if (SvTYPE(tmpRef) != SVt_PVIO)
8800         ++PL_sv_objcount;
8801     SvUPGRADE(tmpRef, SVt_PVMG);
8802     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
8803
8804     if (Gv_AMG(stash))
8805         SvAMAGIC_on(sv);
8806     else
8807         (void)SvAMAGIC_off(sv);
8808
8809     if(SvSMAGICAL(tmpRef))
8810         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
8811             mg_set(tmpRef);
8812
8813
8814
8815     return sv;
8816 }
8817
8818 /* Downgrades a PVGV to a PVMG.
8819  */
8820
8821 STATIC void
8822 S_sv_unglob(pTHX_ SV *const sv)
8823 {
8824     dVAR;
8825     void *xpvmg;
8826     HV *stash;
8827     SV * const temp = sv_newmortal();
8828
8829     PERL_ARGS_ASSERT_SV_UNGLOB;
8830
8831     assert(SvTYPE(sv) == SVt_PVGV);
8832     SvFAKE_off(sv);
8833     gv_efullname3(temp, MUTABLE_GV(sv), "*");
8834
8835     if (GvGP(sv)) {
8836         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
8837            && HvNAME_get(stash))
8838             mro_method_changed_in(stash);
8839         gp_free(MUTABLE_GV(sv));
8840     }
8841     if (GvSTASH(sv)) {
8842         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
8843         GvSTASH(sv) = NULL;
8844     }
8845     GvMULTI_off(sv);
8846     if (GvNAME_HEK(sv)) {
8847         unshare_hek(GvNAME_HEK(sv));
8848     }
8849     isGV_with_GP_off(sv);
8850
8851     /* need to keep SvANY(sv) in the right arena */
8852     xpvmg = new_XPVMG();
8853     StructCopy(SvANY(sv), xpvmg, XPVMG);
8854     del_XPVGV(SvANY(sv));
8855     SvANY(sv) = xpvmg;
8856
8857     SvFLAGS(sv) &= ~SVTYPEMASK;
8858     SvFLAGS(sv) |= SVt_PVMG;
8859
8860     /* Intentionally not calling any local SET magic, as this isn't so much a
8861        set operation as merely an internal storage change.  */
8862     sv_setsv_flags(sv, temp, 0);
8863 }
8864
8865 /*
8866 =for apidoc sv_unref_flags
8867
8868 Unsets the RV status of the SV, and decrements the reference count of
8869 whatever was being referenced by the RV.  This can almost be thought of
8870 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
8871 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
8872 (otherwise the decrementing is conditional on the reference count being
8873 different from one or the reference being a readonly SV).
8874 See C<SvROK_off>.
8875
8876 =cut
8877 */
8878
8879 void
8880 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
8881 {
8882     SV* const target = SvRV(ref);
8883
8884     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
8885
8886     if (SvWEAKREF(ref)) {
8887         sv_del_backref(target, ref);
8888         SvWEAKREF_off(ref);
8889         SvRV_set(ref, NULL);
8890         return;
8891     }
8892     SvRV_set(ref, NULL);
8893     SvROK_off(ref);
8894     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
8895        assigned to as BEGIN {$a = \"Foo"} will fail.  */
8896     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
8897         SvREFCNT_dec(target);
8898     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
8899         sv_2mortal(target);     /* Schedule for freeing later */
8900 }
8901
8902 /*
8903 =for apidoc sv_untaint
8904
8905 Untaint an SV. Use C<SvTAINTED_off> instead.
8906 =cut
8907 */
8908
8909 void
8910 Perl_sv_untaint(pTHX_ SV *const sv)
8911 {
8912     PERL_ARGS_ASSERT_SV_UNTAINT;
8913
8914     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8915         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8916         if (mg)
8917             mg->mg_len &= ~1;
8918     }
8919 }
8920
8921 /*
8922 =for apidoc sv_tainted
8923
8924 Test an SV for taintedness. Use C<SvTAINTED> instead.
8925 =cut
8926 */
8927
8928 bool
8929 Perl_sv_tainted(pTHX_ SV *const sv)
8930 {
8931     PERL_ARGS_ASSERT_SV_TAINTED;
8932
8933     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
8934         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
8935         if (mg && (mg->mg_len & 1) )
8936             return TRUE;
8937     }
8938     return FALSE;
8939 }
8940
8941 /*
8942 =for apidoc sv_setpviv
8943
8944 Copies an integer into the given SV, also updating its string value.
8945 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
8946
8947 =cut
8948 */
8949
8950 void
8951 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
8952 {
8953     char buf[TYPE_CHARS(UV)];
8954     char *ebuf;
8955     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
8956
8957     PERL_ARGS_ASSERT_SV_SETPVIV;
8958
8959     sv_setpvn(sv, ptr, ebuf - ptr);
8960 }
8961
8962 /*
8963 =for apidoc sv_setpviv_mg
8964
8965 Like C<sv_setpviv>, but also handles 'set' magic.
8966
8967 =cut
8968 */
8969
8970 void
8971 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
8972 {
8973     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
8974
8975     sv_setpviv(sv, iv);
8976     SvSETMAGIC(sv);
8977 }
8978
8979 #if defined(PERL_IMPLICIT_CONTEXT)
8980
8981 /* pTHX_ magic can't cope with varargs, so this is a no-context
8982  * version of the main function, (which may itself be aliased to us).
8983  * Don't access this version directly.
8984  */
8985
8986 void
8987 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
8988 {
8989     dTHX;
8990     va_list args;
8991
8992     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
8993
8994     va_start(args, pat);
8995     sv_vsetpvf(sv, pat, &args);
8996     va_end(args);
8997 }
8998
8999 /* pTHX_ magic can't cope with varargs, so this is a no-context
9000  * version of the main function, (which may itself be aliased to us).
9001  * Don't access this version directly.
9002  */
9003
9004 void
9005 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9006 {
9007     dTHX;
9008     va_list args;
9009
9010     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
9011
9012     va_start(args, pat);
9013     sv_vsetpvf_mg(sv, pat, &args);
9014     va_end(args);
9015 }
9016 #endif
9017
9018 /*
9019 =for apidoc sv_setpvf
9020
9021 Works like C<sv_catpvf> but copies the text into the SV instead of
9022 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
9023
9024 =cut
9025 */
9026
9027 void
9028 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
9029 {
9030     va_list args;
9031
9032     PERL_ARGS_ASSERT_SV_SETPVF;
9033
9034     va_start(args, pat);
9035     sv_vsetpvf(sv, pat, &args);
9036     va_end(args);
9037 }
9038
9039 /*
9040 =for apidoc sv_vsetpvf
9041
9042 Works like C<sv_vcatpvf> but copies the text into the SV instead of
9043 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
9044
9045 Usually used via its frontend C<sv_setpvf>.
9046
9047 =cut
9048 */
9049
9050 void
9051 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9052 {
9053     PERL_ARGS_ASSERT_SV_VSETPVF;
9054
9055     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9056 }
9057
9058 /*
9059 =for apidoc sv_setpvf_mg
9060
9061 Like C<sv_setpvf>, but also handles 'set' magic.
9062
9063 =cut
9064 */
9065
9066 void
9067 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9068 {
9069     va_list args;
9070
9071     PERL_ARGS_ASSERT_SV_SETPVF_MG;
9072
9073     va_start(args, pat);
9074     sv_vsetpvf_mg(sv, pat, &args);
9075     va_end(args);
9076 }
9077
9078 /*
9079 =for apidoc sv_vsetpvf_mg
9080
9081 Like C<sv_vsetpvf>, but also handles 'set' magic.
9082
9083 Usually used via its frontend C<sv_setpvf_mg>.
9084
9085 =cut
9086 */
9087
9088 void
9089 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9090 {
9091     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
9092
9093     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9094     SvSETMAGIC(sv);
9095 }
9096
9097 #if defined(PERL_IMPLICIT_CONTEXT)
9098
9099 /* pTHX_ magic can't cope with varargs, so this is a no-context
9100  * version of the main function, (which may itself be aliased to us).
9101  * Don't access this version directly.
9102  */
9103
9104 void
9105 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
9106 {
9107     dTHX;
9108     va_list args;
9109
9110     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
9111
9112     va_start(args, pat);
9113     sv_vcatpvf(sv, pat, &args);
9114     va_end(args);
9115 }
9116
9117 /* pTHX_ magic can't cope with varargs, so this is a no-context
9118  * version of the main function, (which may itself be aliased to us).
9119  * Don't access this version directly.
9120  */
9121
9122 void
9123 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
9124 {
9125     dTHX;
9126     va_list args;
9127
9128     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
9129
9130     va_start(args, pat);
9131     sv_vcatpvf_mg(sv, pat, &args);
9132     va_end(args);
9133 }
9134 #endif
9135
9136 /*
9137 =for apidoc sv_catpvf
9138
9139 Processes its arguments like C<sprintf> and appends the formatted
9140 output to an SV.  If the appended data contains "wide" characters
9141 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
9142 and characters >255 formatted with %c), the original SV might get
9143 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
9144 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
9145 valid UTF-8; if the original SV was bytes, the pattern should be too.
9146
9147 =cut */
9148
9149 void
9150 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
9151 {
9152     va_list args;
9153
9154     PERL_ARGS_ASSERT_SV_CATPVF;
9155
9156     va_start(args, pat);
9157     sv_vcatpvf(sv, pat, &args);
9158     va_end(args);
9159 }
9160
9161 /*
9162 =for apidoc sv_vcatpvf
9163
9164 Processes its arguments like C<vsprintf> and appends the formatted output
9165 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
9166
9167 Usually used via its frontend C<sv_catpvf>.
9168
9169 =cut
9170 */
9171
9172 void
9173 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9174 {
9175     PERL_ARGS_ASSERT_SV_VCATPVF;
9176
9177     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9178 }
9179
9180 /*
9181 =for apidoc sv_catpvf_mg
9182
9183 Like C<sv_catpvf>, but also handles 'set' magic.
9184
9185 =cut
9186 */
9187
9188 void
9189 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
9190 {
9191     va_list args;
9192
9193     PERL_ARGS_ASSERT_SV_CATPVF_MG;
9194
9195     va_start(args, pat);
9196     sv_vcatpvf_mg(sv, pat, &args);
9197     va_end(args);
9198 }
9199
9200 /*
9201 =for apidoc sv_vcatpvf_mg
9202
9203 Like C<sv_vcatpvf>, but also handles 'set' magic.
9204
9205 Usually used via its frontend C<sv_catpvf_mg>.
9206
9207 =cut
9208 */
9209
9210 void
9211 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
9212 {
9213     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
9214
9215     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9216     SvSETMAGIC(sv);
9217 }
9218
9219 /*
9220 =for apidoc sv_vsetpvfn
9221
9222 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
9223 appending it.
9224
9225 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
9226
9227 =cut
9228 */
9229
9230 void
9231 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9232                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9233 {
9234     PERL_ARGS_ASSERT_SV_VSETPVFN;
9235
9236     sv_setpvs(sv, "");
9237     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
9238 }
9239
9240
9241 /*
9242  * Warn of missing argument to sprintf, and then return a defined value
9243  * to avoid inappropriate "use of uninit" warnings [perl #71000].
9244  */
9245 #define WARN_MISSING WARN_UNINITIALIZED /* Not sure we want a new category */
9246 STATIC SV*
9247 S_vcatpvfn_missing_argument(pTHX) {
9248     if (ckWARN(WARN_MISSING)) {
9249         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
9250                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
9251     }
9252     return &PL_sv_no;
9253 }
9254
9255
9256 STATIC I32
9257 S_expect_number(pTHX_ char **const pattern)
9258 {
9259     dVAR;
9260     I32 var = 0;
9261
9262     PERL_ARGS_ASSERT_EXPECT_NUMBER;
9263
9264     switch (**pattern) {
9265     case '1': case '2': case '3':
9266     case '4': case '5': case '6':
9267     case '7': case '8': case '9':
9268         var = *(*pattern)++ - '0';
9269         while (isDIGIT(**pattern)) {
9270             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
9271             if (tmp < var)
9272                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
9273             var = tmp;
9274         }
9275     }
9276     return var;
9277 }
9278
9279 STATIC char *
9280 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
9281 {
9282     const int neg = nv < 0;
9283     UV uv;
9284
9285     PERL_ARGS_ASSERT_F0CONVERT;
9286
9287     if (neg)
9288         nv = -nv;
9289     if (nv < UV_MAX) {
9290         char *p = endbuf;
9291         nv += 0.5;
9292         uv = (UV)nv;
9293         if (uv & 1 && uv == nv)
9294             uv--;                       /* Round to even */
9295         do {
9296             const unsigned dig = uv % 10;
9297             *--p = '0' + dig;
9298         } while (uv /= 10);
9299         if (neg)
9300             *--p = '-';
9301         *len = endbuf - p;
9302         return p;
9303     }
9304     return NULL;
9305 }
9306
9307
9308 /*
9309 =for apidoc sv_vcatpvfn
9310
9311 Processes its arguments like C<vsprintf> and appends the formatted output
9312 to an SV.  Uses an array of SVs if the C style variable argument list is
9313 missing (NULL).  When running with taint checks enabled, indicates via
9314 C<maybe_tainted> if results are untrustworthy (often due to the use of
9315 locales).
9316
9317 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
9318
9319 =cut
9320 */
9321
9322
9323 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
9324                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
9325                         vec_utf8 = DO_UTF8(vecsv);
9326
9327 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
9328
9329 void
9330 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
9331                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
9332 {
9333     dVAR;
9334     char *p;
9335     char *q;
9336     const char *patend;
9337     STRLEN origlen;
9338     I32 svix = 0;
9339     static const char nullstr[] = "(null)";
9340     SV *argsv = NULL;
9341     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
9342     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
9343     SV *nsv = NULL;
9344     /* Times 4: a decimal digit takes more than 3 binary digits.
9345      * NV_DIG: mantissa takes than many decimal digits.
9346      * Plus 32: Playing safe. */
9347     char ebuf[IV_DIG * 4 + NV_DIG + 32];
9348     /* large enough for "%#.#f" --chip */
9349     /* what about long double NVs? --jhi */
9350
9351     PERL_ARGS_ASSERT_SV_VCATPVFN;
9352     PERL_UNUSED_ARG(maybe_tainted);
9353
9354     /* no matter what, this is a string now */
9355     (void)SvPV_force(sv, origlen);
9356
9357     /* special-case "", "%s", and "%-p" (SVf - see below) */
9358     if (patlen == 0)
9359         return;
9360     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
9361         if (args) {
9362             const char * const s = va_arg(*args, char*);
9363             sv_catpv(sv, s ? s : nullstr);
9364         }
9365         else if (svix < svmax) {
9366             sv_catsv(sv, *svargs);
9367         }
9368         return;
9369     }
9370     if (args && patlen == 3 && pat[0] == '%' &&
9371                 pat[1] == '-' && pat[2] == 'p') {
9372         argsv = MUTABLE_SV(va_arg(*args, void*));
9373         sv_catsv(sv, argsv);
9374         return;
9375     }
9376
9377 #ifndef USE_LONG_DOUBLE
9378     /* special-case "%.<number>[gf]" */
9379     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
9380          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
9381         unsigned digits = 0;
9382         const char *pp;
9383
9384         pp = pat + 2;
9385         while (*pp >= '0' && *pp <= '9')
9386             digits = 10 * digits + (*pp++ - '0');
9387         if (pp - pat == (int)patlen - 1) {
9388             NV nv;
9389
9390             if (svix < svmax)
9391                 nv = SvNV(*svargs);
9392             else
9393                 return;
9394             if (*pp == 'g') {
9395                 /* Add check for digits != 0 because it seems that some
9396                    gconverts are buggy in this case, and we don't yet have
9397                    a Configure test for this.  */
9398                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
9399                      /* 0, point, slack */
9400                     Gconvert(nv, (int)digits, 0, ebuf);
9401                     sv_catpv(sv, ebuf);
9402                     if (*ebuf)  /* May return an empty string for digits==0 */
9403                         return;
9404                 }
9405             } else if (!digits) {
9406                 STRLEN l;
9407
9408                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
9409                     sv_catpvn(sv, p, l);
9410                     return;
9411                 }
9412             }
9413         }
9414     }
9415 #endif /* !USE_LONG_DOUBLE */
9416
9417     if (!args && svix < svmax && DO_UTF8(*svargs))
9418         has_utf8 = TRUE;
9419
9420     patend = (char*)pat + patlen;
9421     for (p = (char*)pat; p < patend; p = q) {
9422         bool alt = FALSE;
9423         bool left = FALSE;
9424         bool vectorize = FALSE;
9425         bool vectorarg = FALSE;
9426         bool vec_utf8 = FALSE;
9427         char fill = ' ';
9428         char plus = 0;
9429         char intsize = 0;
9430         STRLEN width = 0;
9431         STRLEN zeros = 0;
9432         bool has_precis = FALSE;
9433         STRLEN precis = 0;
9434         const I32 osvix = svix;
9435         bool is_utf8 = FALSE;  /* is this item utf8?   */
9436 #ifdef HAS_LDBL_SPRINTF_BUG
9437         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
9438            with sfio - Allen <allens@cpan.org> */
9439         bool fix_ldbl_sprintf_bug = FALSE;
9440 #endif
9441
9442         char esignbuf[4];
9443         U8 utf8buf[UTF8_MAXBYTES+1];
9444         STRLEN esignlen = 0;
9445
9446         const char *eptr = NULL;
9447         const char *fmtstart;
9448         STRLEN elen = 0;
9449         SV *vecsv = NULL;
9450         const U8 *vecstr = NULL;
9451         STRLEN veclen = 0;
9452         char c = 0;
9453         int i;
9454         unsigned base = 0;
9455         IV iv = 0;
9456         UV uv = 0;
9457         /* we need a long double target in case HAS_LONG_DOUBLE but
9458            not USE_LONG_DOUBLE
9459         */
9460 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
9461         long double nv;
9462 #else
9463         NV nv;
9464 #endif
9465         STRLEN have;
9466         STRLEN need;
9467         STRLEN gap;
9468         const char *dotstr = ".";
9469         STRLEN dotstrlen = 1;
9470         I32 efix = 0; /* explicit format parameter index */
9471         I32 ewix = 0; /* explicit width index */
9472         I32 epix = 0; /* explicit precision index */
9473         I32 evix = 0; /* explicit vector index */
9474         bool asterisk = FALSE;
9475
9476         /* echo everything up to the next format specification */
9477         for (q = p; q < patend && *q != '%'; ++q) ;
9478         if (q > p) {
9479             if (has_utf8 && !pat_utf8)
9480                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
9481             else
9482                 sv_catpvn(sv, p, q - p);
9483             p = q;
9484         }
9485         if (q++ >= patend)
9486             break;
9487
9488         fmtstart = q;
9489
9490 /*
9491     We allow format specification elements in this order:
9492         \d+\$              explicit format parameter index
9493         [-+ 0#]+           flags
9494         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
9495         0                  flag (as above): repeated to allow "v02"     
9496         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
9497         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
9498         [hlqLV]            size
9499     [%bcdefginopsuxDFOUX] format (mandatory)
9500 */
9501
9502         if (args) {
9503 /*  
9504         As of perl5.9.3, printf format checking is on by default.
9505         Internally, perl uses %p formats to provide an escape to
9506         some extended formatting.  This block deals with those
9507         extensions: if it does not match, (char*)q is reset and
9508         the normal format processing code is used.
9509
9510         Currently defined extensions are:
9511                 %p              include pointer address (standard)      
9512                 %-p     (SVf)   include an SV (previously %_)
9513                 %-<num>p        include an SV with precision <num>      
9514                 %<num>p         reserved for future extensions
9515
9516         Robin Barker 2005-07-14
9517
9518                 %1p     (VDf)   removed.  RMB 2007-10-19
9519 */
9520             char* r = q; 
9521             bool sv = FALSE;    
9522             STRLEN n = 0;
9523             if (*q == '-')
9524                 sv = *q++;
9525             n = expect_number(&q);
9526             if (*q++ == 'p') {
9527                 if (sv) {                       /* SVf */
9528                     if (n) {
9529                         precis = n;
9530                         has_precis = TRUE;
9531                     }
9532                     argsv = MUTABLE_SV(va_arg(*args, void*));
9533                     eptr = SvPV_const(argsv, elen);
9534                     if (DO_UTF8(argsv))
9535                         is_utf8 = TRUE;
9536                     goto string;
9537                 }
9538                 else if (n) {
9539                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
9540                                      "internal %%<num>p might conflict with future printf extensions");
9541                 }
9542             }
9543             q = r; 
9544         }
9545
9546         if ( (width = expect_number(&q)) ) {
9547             if (*q == '$') {
9548                 ++q;
9549                 efix = width;
9550             } else {
9551                 goto gotwidth;
9552             }
9553         }
9554
9555         /* FLAGS */
9556
9557         while (*q) {
9558             switch (*q) {
9559             case ' ':
9560             case '+':
9561                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
9562                     q++;
9563                 else
9564                     plus = *q++;
9565                 continue;
9566
9567             case '-':
9568                 left = TRUE;
9569                 q++;
9570                 continue;
9571
9572             case '0':
9573                 fill = *q++;
9574                 continue;
9575
9576             case '#':
9577                 alt = TRUE;
9578                 q++;
9579                 continue;
9580
9581             default:
9582                 break;
9583             }
9584             break;
9585         }
9586
9587       tryasterisk:
9588         if (*q == '*') {
9589             q++;
9590             if ( (ewix = expect_number(&q)) )
9591                 if (*q++ != '$')
9592                     goto unknown;
9593             asterisk = TRUE;
9594         }
9595         if (*q == 'v') {
9596             q++;
9597             if (vectorize)
9598                 goto unknown;
9599             if ((vectorarg = asterisk)) {
9600                 evix = ewix;
9601                 ewix = 0;
9602                 asterisk = FALSE;
9603             }
9604             vectorize = TRUE;
9605             goto tryasterisk;
9606         }
9607
9608         if (!asterisk)
9609         {
9610             if( *q == '0' )
9611                 fill = *q++;
9612             width = expect_number(&q);
9613         }
9614
9615         if (vectorize) {
9616             if (vectorarg) {
9617                 if (args)
9618                     vecsv = va_arg(*args, SV*);
9619                 else if (evix) {
9620                     vecsv = (evix > 0 && evix <= svmax)
9621                         ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
9622                 } else {
9623                     vecsv = svix < svmax
9624                         ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
9625                 }
9626                 dotstr = SvPV_const(vecsv, dotstrlen);
9627                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
9628                    bad with tied or overloaded values that return UTF8.  */
9629                 if (DO_UTF8(vecsv))
9630                     is_utf8 = TRUE;
9631                 else if (has_utf8) {
9632                     vecsv = sv_mortalcopy(vecsv);
9633                     sv_utf8_upgrade(vecsv);
9634                     dotstr = SvPV_const(vecsv, dotstrlen);
9635                     is_utf8 = TRUE;
9636                 }                   
9637             }
9638             if (args) {
9639                 VECTORIZE_ARGS
9640             }
9641             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
9642                 vecsv = svargs[efix ? efix-1 : svix++];
9643                 vecstr = (U8*)SvPV_const(vecsv,veclen);
9644                 vec_utf8 = DO_UTF8(vecsv);
9645
9646                 /* if this is a version object, we need to convert
9647                  * back into v-string notation and then let the
9648                  * vectorize happen normally
9649                  */
9650                 if (sv_derived_from(vecsv, "version")) {
9651                     char *version = savesvpv(vecsv);
9652                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
9653                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
9654                         "vector argument not supported with alpha versions");
9655                         goto unknown;
9656                     }
9657                     vecsv = sv_newmortal();
9658                     scan_vstring(version, version + veclen, vecsv);
9659                     vecstr = (U8*)SvPV_const(vecsv, veclen);
9660                     vec_utf8 = DO_UTF8(vecsv);
9661                     Safefree(version);
9662                 }
9663             }
9664             else {
9665                 vecstr = (U8*)"";
9666                 veclen = 0;
9667             }
9668         }
9669
9670         if (asterisk) {
9671             if (args)
9672                 i = va_arg(*args, int);
9673             else
9674                 i = (ewix ? ewix <= svmax : svix < svmax) ?
9675                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9676             left |= (i < 0);
9677             width = (i < 0) ? -i : i;
9678         }
9679       gotwidth:
9680
9681         /* PRECISION */
9682
9683         if (*q == '.') {
9684             q++;
9685             if (*q == '*') {
9686                 q++;
9687                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
9688                     goto unknown;
9689                 /* XXX: todo, support specified precision parameter */
9690                 if (epix)
9691                     goto unknown;
9692                 if (args)
9693                     i = va_arg(*args, int);
9694                 else
9695                     i = (ewix ? ewix <= svmax : svix < svmax)
9696                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
9697                 precis = i;
9698                 has_precis = !(i < 0);
9699             }
9700             else {
9701                 precis = 0;
9702                 while (isDIGIT(*q))
9703                     precis = precis * 10 + (*q++ - '0');
9704                 has_precis = TRUE;
9705             }
9706         }
9707
9708         /* SIZE */
9709
9710         switch (*q) {
9711 #ifdef WIN32
9712         case 'I':                       /* Ix, I32x, and I64x */
9713 #  ifdef WIN64
9714             if (q[1] == '6' && q[2] == '4') {
9715                 q += 3;
9716                 intsize = 'q';
9717                 break;
9718             }
9719 #  endif
9720             if (q[1] == '3' && q[2] == '2') {
9721                 q += 3;
9722                 break;
9723             }
9724 #  ifdef WIN64
9725             intsize = 'q';
9726 #  endif
9727             q++;
9728             break;
9729 #endif
9730 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9731         case 'L':                       /* Ld */
9732             /*FALLTHROUGH*/
9733 #ifdef HAS_QUAD
9734         case 'q':                       /* qd */
9735 #endif
9736             intsize = 'q';
9737             q++;
9738             break;
9739 #endif
9740         case 'l':
9741 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
9742             if (*(q + 1) == 'l') {      /* lld, llf */
9743                 intsize = 'q';
9744                 q += 2;
9745                 break;
9746              }
9747 #endif
9748             /*FALLTHROUGH*/
9749         case 'h':
9750             /*FALLTHROUGH*/
9751         case 'V':
9752             intsize = *q++;
9753             break;
9754         }
9755
9756         /* CONVERSION */
9757
9758         if (*q == '%') {
9759             eptr = q++;
9760             elen = 1;
9761             if (vectorize) {
9762                 c = '%';
9763                 goto unknown;
9764             }
9765             goto string;
9766         }
9767
9768         if (!vectorize && !args) {
9769             if (efix) {
9770                 const I32 i = efix-1;
9771                 argsv = (i >= 0 && i < svmax)
9772                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
9773             } else {
9774                 argsv = (svix >= 0 && svix < svmax)
9775                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
9776             }
9777         }
9778
9779         switch (c = *q++) {
9780
9781             /* STRINGS */
9782
9783         case 'c':
9784             if (vectorize)
9785                 goto unknown;
9786             uv = (args) ? va_arg(*args, int) : SvIV(argsv);
9787             if ((uv > 255 ||
9788                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
9789                 && !IN_BYTES) {
9790                 eptr = (char*)utf8buf;
9791                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
9792                 is_utf8 = TRUE;
9793             }
9794             else {
9795                 c = (char)uv;
9796                 eptr = &c;
9797                 elen = 1;
9798             }
9799             goto string;
9800
9801         case 's':
9802             if (vectorize)
9803                 goto unknown;
9804             if (args) {
9805                 eptr = va_arg(*args, char*);
9806                 if (eptr)
9807                     elen = strlen(eptr);
9808                 else {
9809                     eptr = (char *)nullstr;
9810                     elen = sizeof nullstr - 1;
9811                 }
9812             }
9813             else {
9814                 eptr = SvPV_const(argsv, elen);
9815                 if (DO_UTF8(argsv)) {
9816                     STRLEN old_precis = precis;
9817                     if (has_precis && precis < elen) {
9818                         STRLEN ulen = sv_len_utf8(argsv);
9819                         I32 p = precis > ulen ? ulen : precis;
9820                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
9821                         precis = p;
9822                     }
9823                     if (width) { /* fudge width (can't fudge elen) */
9824                         if (has_precis && precis < elen)
9825                             width += precis - old_precis;
9826                         else
9827                             width += elen - sv_len_utf8(argsv);
9828                     }
9829                     is_utf8 = TRUE;
9830                 }
9831             }
9832
9833         string:
9834             if (has_precis && precis < elen)
9835                 elen = precis;
9836             break;
9837
9838             /* INTEGERS */
9839
9840         case 'p':
9841             if (alt || vectorize)
9842                 goto unknown;
9843             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
9844             base = 16;
9845             goto integer;
9846
9847         case 'D':
9848 #ifdef IV_IS_QUAD
9849             intsize = 'q';
9850 #else
9851             intsize = 'l';
9852 #endif
9853             /*FALLTHROUGH*/
9854         case 'd':
9855         case 'i':
9856 #if vdNUMBER
9857         format_vd:
9858 #endif
9859             if (vectorize) {
9860                 STRLEN ulen;
9861                 if (!veclen)
9862                     continue;
9863                 if (vec_utf8)
9864                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9865                                         UTF8_ALLOW_ANYUV);
9866                 else {
9867                     uv = *vecstr;
9868                     ulen = 1;
9869                 }
9870                 vecstr += ulen;
9871                 veclen -= ulen;
9872                 if (plus)
9873                      esignbuf[esignlen++] = plus;
9874             }
9875             else if (args) {
9876                 switch (intsize) {
9877                 case 'h':       iv = (short)va_arg(*args, int); break;
9878                 case 'l':       iv = va_arg(*args, long); break;
9879                 case 'V':       iv = va_arg(*args, IV); break;
9880                 default:        iv = va_arg(*args, int); break;
9881                 case 'q':
9882 #ifdef HAS_QUAD
9883                                 iv = va_arg(*args, Quad_t); break;
9884 #else
9885                                 goto unknown;
9886 #endif
9887                 }
9888             }
9889             else {
9890                 IV tiv = SvIV(argsv); /* work around GCC bug #13488 */
9891                 switch (intsize) {
9892                 case 'h':       iv = (short)tiv; break;
9893                 case 'l':       iv = (long)tiv; break;
9894                 case 'V':
9895                 default:        iv = tiv; break;
9896                 case 'q':
9897 #ifdef HAS_QUAD
9898                                 iv = (Quad_t)tiv; break;
9899 #else
9900                                 goto unknown;
9901 #endif
9902                 }
9903             }
9904             if ( !vectorize )   /* we already set uv above */
9905             {
9906                 if (iv >= 0) {
9907                     uv = iv;
9908                     if (plus)
9909                         esignbuf[esignlen++] = plus;
9910                 }
9911                 else {
9912                     uv = -iv;
9913                     esignbuf[esignlen++] = '-';
9914                 }
9915             }
9916             base = 10;
9917             goto integer;
9918
9919         case 'U':
9920 #ifdef IV_IS_QUAD
9921             intsize = 'q';
9922 #else
9923             intsize = 'l';
9924 #endif
9925             /*FALLTHROUGH*/
9926         case 'u':
9927             base = 10;
9928             goto uns_integer;
9929
9930         case 'B':
9931         case 'b':
9932             base = 2;
9933             goto uns_integer;
9934
9935         case 'O':
9936 #ifdef IV_IS_QUAD
9937             intsize = 'q';
9938 #else
9939             intsize = 'l';
9940 #endif
9941             /*FALLTHROUGH*/
9942         case 'o':
9943             base = 8;
9944             goto uns_integer;
9945
9946         case 'X':
9947         case 'x':
9948             base = 16;
9949
9950         uns_integer:
9951             if (vectorize) {
9952                 STRLEN ulen;
9953         vector:
9954                 if (!veclen)
9955                     continue;
9956                 if (vec_utf8)
9957                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
9958                                         UTF8_ALLOW_ANYUV);
9959                 else {
9960                     uv = *vecstr;
9961                     ulen = 1;
9962                 }
9963                 vecstr += ulen;
9964                 veclen -= ulen;
9965             }
9966             else if (args) {
9967                 switch (intsize) {
9968                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
9969                 case 'l':  uv = va_arg(*args, unsigned long); break;
9970                 case 'V':  uv = va_arg(*args, UV); break;
9971                 default:   uv = va_arg(*args, unsigned); break;
9972                 case 'q':
9973 #ifdef HAS_QUAD
9974                            uv = va_arg(*args, Uquad_t); break;
9975 #else
9976                            goto unknown;
9977 #endif
9978                 }
9979             }
9980             else {
9981                 UV tuv = SvUV(argsv); /* work around GCC bug #13488 */
9982                 switch (intsize) {
9983                 case 'h':       uv = (unsigned short)tuv; break;
9984                 case 'l':       uv = (unsigned long)tuv; break;
9985                 case 'V':
9986                 default:        uv = tuv; break;
9987                 case 'q':
9988 #ifdef HAS_QUAD
9989                                 uv = (Uquad_t)tuv; break;
9990 #else
9991                                 goto unknown;
9992 #endif
9993                 }
9994             }
9995
9996         integer:
9997             {
9998                 char *ptr = ebuf + sizeof ebuf;
9999                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
10000                 zeros = 0;
10001
10002                 switch (base) {
10003                     unsigned dig;
10004                 case 16:
10005                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
10006                     do {
10007                         dig = uv & 15;
10008                         *--ptr = p[dig];
10009                     } while (uv >>= 4);
10010                     if (tempalt) {
10011                         esignbuf[esignlen++] = '0';
10012                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
10013                     }
10014                     break;
10015                 case 8:
10016                     do {
10017                         dig = uv & 7;
10018                         *--ptr = '0' + dig;
10019                     } while (uv >>= 3);
10020                     if (alt && *ptr != '0')
10021                         *--ptr = '0';
10022                     break;
10023                 case 2:
10024                     do {
10025                         dig = uv & 1;
10026                         *--ptr = '0' + dig;
10027                     } while (uv >>= 1);
10028                     if (tempalt) {
10029                         esignbuf[esignlen++] = '0';
10030                         esignbuf[esignlen++] = c;
10031                     }
10032                     break;
10033                 default:                /* it had better be ten or less */
10034                     do {
10035                         dig = uv % base;
10036                         *--ptr = '0' + dig;
10037                     } while (uv /= base);
10038                     break;
10039                 }
10040                 elen = (ebuf + sizeof ebuf) - ptr;
10041                 eptr = ptr;
10042                 if (has_precis) {
10043                     if (precis > elen)
10044                         zeros = precis - elen;
10045                     else if (precis == 0 && elen == 1 && *eptr == '0'
10046                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
10047                         elen = 0;
10048
10049                 /* a precision nullifies the 0 flag. */
10050                     if (fill == '0')
10051                         fill = ' ';
10052                 }
10053             }
10054             break;
10055
10056             /* FLOATING POINT */
10057
10058         case 'F':
10059             c = 'f';            /* maybe %F isn't supported here */
10060             /*FALLTHROUGH*/
10061         case 'e': case 'E':
10062         case 'f':
10063         case 'g': case 'G':
10064             if (vectorize)
10065                 goto unknown;
10066
10067             /* This is evil, but floating point is even more evil */
10068
10069             /* for SV-style calling, we can only get NV
10070                for C-style calling, we assume %f is double;
10071                for simplicity we allow any of %Lf, %llf, %qf for long double
10072             */
10073             switch (intsize) {
10074             case 'V':
10075 #if defined(USE_LONG_DOUBLE)
10076                 intsize = 'q';
10077 #endif
10078                 break;
10079 /* [perl #20339] - we should accept and ignore %lf rather than die */
10080             case 'l':
10081                 /*FALLTHROUGH*/
10082             default:
10083 #if defined(USE_LONG_DOUBLE)
10084                 intsize = args ? 0 : 'q';
10085 #endif
10086                 break;
10087             case 'q':
10088 #if defined(HAS_LONG_DOUBLE)
10089                 break;
10090 #else
10091                 /*FALLTHROUGH*/
10092 #endif
10093             case 'h':
10094                 goto unknown;
10095             }
10096
10097             /* now we need (long double) if intsize == 'q', else (double) */
10098             nv = (args) ?
10099 #if LONG_DOUBLESIZE > DOUBLESIZE
10100                 intsize == 'q' ?
10101                     va_arg(*args, long double) :
10102                     va_arg(*args, double)
10103 #else
10104                     va_arg(*args, double)
10105 #endif
10106                 : SvNV(argsv);
10107
10108             need = 0;
10109             /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything
10110                else. frexp() has some unspecified behaviour for those three */
10111             if (c != 'e' && c != 'E' && (nv * 0) == 0) {
10112                 i = PERL_INT_MIN;
10113                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
10114                    will cast our (long double) to (double) */
10115                 (void)Perl_frexp(nv, &i);
10116                 if (i == PERL_INT_MIN)
10117                     Perl_die(aTHX_ "panic: frexp");
10118                 if (i > 0)
10119                     need = BIT_DIGITS(i);
10120             }
10121             need += has_precis ? precis : 6; /* known default */
10122
10123             if (need < width)
10124                 need = width;
10125
10126 #ifdef HAS_LDBL_SPRINTF_BUG
10127             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
10128                with sfio - Allen <allens@cpan.org> */
10129
10130 #  ifdef DBL_MAX
10131 #    define MY_DBL_MAX DBL_MAX
10132 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
10133 #    if DOUBLESIZE >= 8
10134 #      define MY_DBL_MAX 1.7976931348623157E+308L
10135 #    else
10136 #      define MY_DBL_MAX 3.40282347E+38L
10137 #    endif
10138 #  endif
10139
10140 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
10141 #    define MY_DBL_MAX_BUG 1L
10142 #  else
10143 #    define MY_DBL_MAX_BUG MY_DBL_MAX
10144 #  endif
10145
10146 #  ifdef DBL_MIN
10147 #    define MY_DBL_MIN DBL_MIN
10148 #  else  /* XXX guessing! -Allen */
10149 #    if DOUBLESIZE >= 8
10150 #      define MY_DBL_MIN 2.2250738585072014E-308L
10151 #    else
10152 #      define MY_DBL_MIN 1.17549435E-38L
10153 #    endif
10154 #  endif
10155
10156             if ((intsize == 'q') && (c == 'f') &&
10157                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
10158                 (need < DBL_DIG)) {
10159                 /* it's going to be short enough that
10160                  * long double precision is not needed */
10161
10162                 if ((nv <= 0L) && (nv >= -0L))
10163                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
10164                 else {
10165                     /* would use Perl_fp_class as a double-check but not
10166                      * functional on IRIX - see perl.h comments */
10167
10168                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
10169                         /* It's within the range that a double can represent */
10170 #if defined(DBL_MAX) && !defined(DBL_MIN)
10171                         if ((nv >= ((long double)1/DBL_MAX)) ||
10172                             (nv <= (-(long double)1/DBL_MAX)))
10173 #endif
10174                         fix_ldbl_sprintf_bug = TRUE;
10175                     }
10176                 }
10177                 if (fix_ldbl_sprintf_bug == TRUE) {
10178                     double temp;
10179
10180                     intsize = 0;
10181                     temp = (double)nv;
10182                     nv = (NV)temp;
10183                 }
10184             }
10185
10186 #  undef MY_DBL_MAX
10187 #  undef MY_DBL_MAX_BUG
10188 #  undef MY_DBL_MIN
10189
10190 #endif /* HAS_LDBL_SPRINTF_BUG */
10191
10192             need += 20; /* fudge factor */
10193             if (PL_efloatsize < need) {
10194                 Safefree(PL_efloatbuf);
10195                 PL_efloatsize = need + 20; /* more fudge */
10196                 Newx(PL_efloatbuf, PL_efloatsize, char);
10197                 PL_efloatbuf[0] = '\0';
10198             }
10199
10200             if ( !(width || left || plus || alt) && fill != '0'
10201                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
10202                 /* See earlier comment about buggy Gconvert when digits,
10203                    aka precis is 0  */
10204                 if ( c == 'g' && precis) {
10205                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
10206                     /* May return an empty string for digits==0 */
10207                     if (*PL_efloatbuf) {
10208                         elen = strlen(PL_efloatbuf);
10209                         goto float_converted;
10210                     }
10211                 } else if ( c == 'f' && !precis) {
10212                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
10213                         break;
10214                 }
10215             }
10216             {
10217                 char *ptr = ebuf + sizeof ebuf;
10218                 *--ptr = '\0';
10219                 *--ptr = c;
10220                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
10221 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
10222                 if (intsize == 'q') {
10223                     /* Copy the one or more characters in a long double
10224                      * format before the 'base' ([efgEFG]) character to
10225                      * the format string. */
10226                     static char const prifldbl[] = PERL_PRIfldbl;
10227                     char const *p = prifldbl + sizeof(prifldbl) - 3;
10228                     while (p >= prifldbl) { *--ptr = *p--; }
10229                 }
10230 #endif
10231                 if (has_precis) {
10232                     base = precis;
10233                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10234                     *--ptr = '.';
10235                 }
10236                 if (width) {
10237                     base = width;
10238                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
10239                 }
10240                 if (fill == '0')
10241                     *--ptr = fill;
10242                 if (left)
10243                     *--ptr = '-';
10244                 if (plus)
10245                     *--ptr = plus;
10246                 if (alt)
10247                     *--ptr = '#';
10248                 *--ptr = '%';
10249
10250                 /* No taint.  Otherwise we are in the strange situation
10251                  * where printf() taints but print($float) doesn't.
10252                  * --jhi */
10253 #if defined(HAS_LONG_DOUBLE)
10254                 elen = ((intsize == 'q')
10255                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, nv)
10256                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)nv));
10257 #else
10258                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
10259 #endif
10260             }
10261         float_converted:
10262             eptr = PL_efloatbuf;
10263             break;
10264
10265             /* SPECIAL */
10266
10267         case 'n':
10268             if (vectorize)
10269                 goto unknown;
10270             i = SvCUR(sv) - origlen;
10271             if (args) {
10272                 switch (intsize) {
10273                 case 'h':       *(va_arg(*args, short*)) = i; break;
10274                 default:        *(va_arg(*args, int*)) = i; break;
10275                 case 'l':       *(va_arg(*args, long*)) = i; break;
10276                 case 'V':       *(va_arg(*args, IV*)) = i; break;
10277                 case 'q':
10278 #ifdef HAS_QUAD
10279                                 *(va_arg(*args, Quad_t*)) = i; break;
10280 #else
10281                                 goto unknown;
10282 #endif
10283                 }
10284             }
10285             else
10286                 sv_setuv_mg(argsv, (UV)i);
10287             continue;   /* not "break" */
10288
10289             /* UNKNOWN */
10290
10291         default:
10292       unknown:
10293             if (!args
10294                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
10295                 && ckWARN(WARN_PRINTF))
10296             {
10297                 SV * const msg = sv_newmortal();
10298                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
10299                           (PL_op->op_type == OP_PRTF) ? "" : "s");
10300                 if (fmtstart < patend) {
10301                     const char * const fmtend = q < patend ? q : patend;
10302                     const char * f;
10303                     sv_catpvs(msg, "\"%");
10304                     for (f = fmtstart; f < fmtend; f++) {
10305                         if (isPRINT(*f)) {
10306                             sv_catpvn(msg, f, 1);
10307                         } else {
10308                             Perl_sv_catpvf(aTHX_ msg,
10309                                            "\\%03"UVof, (UV)*f & 0xFF);
10310                         }
10311                     }
10312                     sv_catpvs(msg, "\"");
10313                 } else {
10314                     sv_catpvs(msg, "end of string");
10315                 }
10316                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
10317             }
10318
10319             /* output mangled stuff ... */
10320             if (c == '\0')
10321                 --q;
10322             eptr = p;
10323             elen = q - p;
10324
10325             /* ... right here, because formatting flags should not apply */
10326             SvGROW(sv, SvCUR(sv) + elen + 1);
10327             p = SvEND(sv);
10328             Copy(eptr, p, elen, char);
10329             p += elen;
10330             *p = '\0';
10331             SvCUR_set(sv, p - SvPVX_const(sv));
10332             svix = osvix;
10333             continue;   /* not "break" */
10334         }
10335
10336         if (is_utf8 != has_utf8) {
10337             if (is_utf8) {
10338                 if (SvCUR(sv))
10339                     sv_utf8_upgrade(sv);
10340             }
10341             else {
10342                 const STRLEN old_elen = elen;
10343                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
10344                 sv_utf8_upgrade(nsv);
10345                 eptr = SvPVX_const(nsv);
10346                 elen = SvCUR(nsv);
10347
10348                 if (width) { /* fudge width (can't fudge elen) */
10349                     width += elen - old_elen;
10350                 }
10351                 is_utf8 = TRUE;
10352             }
10353         }
10354
10355         have = esignlen + zeros + elen;
10356         if (have < zeros)
10357             Perl_croak_nocontext("%s", PL_memory_wrap);
10358
10359         need = (have > width ? have : width);
10360         gap = need - have;
10361
10362         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
10363             Perl_croak_nocontext("%s", PL_memory_wrap);
10364         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
10365         p = SvEND(sv);
10366         if (esignlen && fill == '0') {
10367             int i;
10368             for (i = 0; i < (int)esignlen; i++)
10369                 *p++ = esignbuf[i];
10370         }
10371         if (gap && !left) {
10372             memset(p, fill, gap);
10373             p += gap;
10374         }
10375         if (esignlen && fill != '0') {
10376             int i;
10377             for (i = 0; i < (int)esignlen; i++)
10378                 *p++ = esignbuf[i];
10379         }
10380         if (zeros) {
10381             int i;
10382             for (i = zeros; i; i--)
10383                 *p++ = '0';
10384         }
10385         if (elen) {
10386             Copy(eptr, p, elen, char);
10387             p += elen;
10388         }
10389         if (gap && left) {
10390             memset(p, ' ', gap);
10391             p += gap;
10392         }
10393         if (vectorize) {
10394             if (veclen) {
10395                 Copy(dotstr, p, dotstrlen, char);
10396                 p += dotstrlen;
10397             }
10398             else
10399                 vectorize = FALSE;              /* done iterating over vecstr */
10400         }
10401         if (is_utf8)
10402             has_utf8 = TRUE;
10403         if (has_utf8)
10404             SvUTF8_on(sv);
10405         *p = '\0';
10406         SvCUR_set(sv, p - SvPVX_const(sv));
10407         if (vectorize) {
10408             esignlen = 0;
10409             goto vector;
10410         }
10411     }
10412     SvTAINT(sv);
10413 }
10414
10415 /* =========================================================================
10416
10417 =head1 Cloning an interpreter
10418
10419 All the macros and functions in this section are for the private use of
10420 the main function, perl_clone().
10421
10422 The foo_dup() functions make an exact copy of an existing foo thingy.
10423 During the course of a cloning, a hash table is used to map old addresses
10424 to new addresses. The table is created and manipulated with the
10425 ptr_table_* functions.
10426
10427 =cut
10428
10429  * =========================================================================*/
10430
10431
10432 #if defined(USE_ITHREADS)
10433
10434 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
10435 #ifndef GpREFCNT_inc
10436 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
10437 #endif
10438
10439
10440 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
10441    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
10442    If this changes, please unmerge ss_dup.
10443    Likewise, sv_dup_inc_multiple() relies on this fact.  */
10444 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
10445 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup(s,t))
10446 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
10447 #define av_dup_inc(s,t) MUTABLE_AV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10448 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
10449 #define hv_dup_inc(s,t) MUTABLE_HV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10450 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
10451 #define cv_dup_inc(s,t) MUTABLE_CV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10452 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
10453 #define io_dup_inc(s,t) MUTABLE_IO(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10454 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
10455 #define gv_dup_inc(s,t) MUTABLE_GV(SvREFCNT_inc(sv_dup((const SV *)s,t)))
10456 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
10457 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
10458
10459 /* clone a parser */
10460
10461 yy_parser *
10462 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
10463 {
10464     yy_parser *parser;
10465
10466     PERL_ARGS_ASSERT_PARSER_DUP;
10467
10468     if (!proto)
10469         return NULL;
10470
10471     /* look for it in the table first */
10472     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
10473     if (parser)
10474         return parser;
10475
10476     /* create anew and remember what it is */
10477     Newxz(parser, 1, yy_parser);
10478     ptr_table_store(PL_ptr_table, proto, parser);
10479
10480     parser->yyerrstatus = 0;
10481     parser->yychar = YYEMPTY;           /* Cause a token to be read.  */
10482
10483     /* XXX these not yet duped */
10484     parser->old_parser = NULL;
10485     parser->stack = NULL;
10486     parser->ps = NULL;
10487     parser->stack_size = 0;
10488     /* XXX parser->stack->state = 0; */
10489
10490     /* XXX eventually, just Copy() most of the parser struct ? */
10491
10492     parser->lex_brackets = proto->lex_brackets;
10493     parser->lex_casemods = proto->lex_casemods;
10494     parser->lex_brackstack = savepvn(proto->lex_brackstack,
10495                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
10496     parser->lex_casestack = savepvn(proto->lex_casestack,
10497                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
10498     parser->lex_defer   = proto->lex_defer;
10499     parser->lex_dojoin  = proto->lex_dojoin;
10500     parser->lex_expect  = proto->lex_expect;
10501     parser->lex_formbrack = proto->lex_formbrack;
10502     parser->lex_inpat   = proto->lex_inpat;
10503     parser->lex_inwhat  = proto->lex_inwhat;
10504     parser->lex_op      = proto->lex_op;
10505     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
10506     parser->lex_starts  = proto->lex_starts;
10507     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
10508     parser->multi_close = proto->multi_close;
10509     parser->multi_open  = proto->multi_open;
10510     parser->multi_start = proto->multi_start;
10511     parser->multi_end   = proto->multi_end;
10512     parser->pending_ident = proto->pending_ident;
10513     parser->preambled   = proto->preambled;
10514     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
10515     parser->linestr     = sv_dup_inc(proto->linestr, param);
10516     parser->expect      = proto->expect;
10517     parser->copline     = proto->copline;
10518     parser->last_lop_op = proto->last_lop_op;
10519     parser->lex_state   = proto->lex_state;
10520     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
10521     /* rsfp_filters entries have fake IoDIRP() */
10522     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
10523     parser->in_my       = proto->in_my;
10524     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
10525     parser->error_count = proto->error_count;
10526
10527
10528     parser->linestr     = sv_dup_inc(proto->linestr, param);
10529
10530     {
10531         char * const ols = SvPVX(proto->linestr);
10532         char * const ls  = SvPVX(parser->linestr);
10533
10534         parser->bufptr      = ls + (proto->bufptr >= ols ?
10535                                     proto->bufptr -  ols : 0);
10536         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
10537                                     proto->oldbufptr -  ols : 0);
10538         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
10539                                     proto->oldoldbufptr -  ols : 0);
10540         parser->linestart   = ls + (proto->linestart >= ols ?
10541                                     proto->linestart -  ols : 0);
10542         parser->last_uni    = ls + (proto->last_uni >= ols ?
10543                                     proto->last_uni -  ols : 0);
10544         parser->last_lop    = ls + (proto->last_lop >= ols ?
10545                                     proto->last_lop -  ols : 0);
10546
10547         parser->bufend      = ls + SvCUR(parser->linestr);
10548     }
10549
10550     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
10551
10552
10553 #ifdef PERL_MAD
10554     parser->endwhite    = proto->endwhite;
10555     parser->faketokens  = proto->faketokens;
10556     parser->lasttoke    = proto->lasttoke;
10557     parser->nextwhite   = proto->nextwhite;
10558     parser->realtokenstart = proto->realtokenstart;
10559     parser->skipwhite   = proto->skipwhite;
10560     parser->thisclose   = proto->thisclose;
10561     parser->thismad     = proto->thismad;
10562     parser->thisopen    = proto->thisopen;
10563     parser->thisstuff   = proto->thisstuff;
10564     parser->thistoken   = proto->thistoken;
10565     parser->thiswhite   = proto->thiswhite;
10566
10567     Copy(proto->nexttoke, parser->nexttoke, 5, NEXTTOKE);
10568     parser->curforce    = proto->curforce;
10569 #else
10570     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
10571     Copy(proto->nexttype, parser->nexttype, 5,  I32);
10572     parser->nexttoke    = proto->nexttoke;
10573 #endif
10574
10575     /* XXX should clone saved_curcop here, but we aren't passed
10576      * proto_perl; so do it in perl_clone_using instead */
10577
10578     return parser;
10579 }
10580
10581
10582 /* duplicate a file handle */
10583
10584 PerlIO *
10585 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
10586 {
10587     PerlIO *ret;
10588
10589     PERL_ARGS_ASSERT_FP_DUP;
10590     PERL_UNUSED_ARG(type);
10591
10592     if (!fp)
10593         return (PerlIO*)NULL;
10594
10595     /* look for it in the table first */
10596     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
10597     if (ret)
10598         return ret;
10599
10600     /* create anew and remember what it is */
10601     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
10602     ptr_table_store(PL_ptr_table, fp, ret);
10603     return ret;
10604 }
10605
10606 /* duplicate a directory handle */
10607
10608 DIR *
10609 Perl_dirp_dup(pTHX_ DIR *const dp)
10610 {
10611     PERL_UNUSED_CONTEXT;
10612     if (!dp)
10613         return (DIR*)NULL;
10614     /* XXX TODO */
10615     return dp;
10616 }
10617
10618 /* duplicate a typeglob */
10619
10620 GP *
10621 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
10622 {
10623     GP *ret;
10624
10625     PERL_ARGS_ASSERT_GP_DUP;
10626
10627     if (!gp)
10628         return (GP*)NULL;
10629     /* look for it in the table first */
10630     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
10631     if (ret)
10632         return ret;
10633
10634     /* create anew and remember what it is */
10635     Newxz(ret, 1, GP);
10636     ptr_table_store(PL_ptr_table, gp, ret);
10637
10638     /* clone */
10639     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
10640        on Newxz() to do this for us.  */
10641     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
10642     ret->gp_io          = io_dup_inc(gp->gp_io, param);
10643     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
10644     ret->gp_av          = av_dup_inc(gp->gp_av, param);
10645     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
10646     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
10647     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
10648     ret->gp_cvgen       = gp->gp_cvgen;
10649     ret->gp_line        = gp->gp_line;
10650     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
10651     return ret;
10652 }
10653
10654 /* duplicate a chain of magic */
10655
10656 MAGIC *
10657 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
10658 {
10659     MAGIC *mgret = NULL;
10660     MAGIC **mgprev_p = &mgret;
10661
10662     PERL_ARGS_ASSERT_MG_DUP;
10663
10664     for (; mg; mg = mg->mg_moremagic) {
10665         MAGIC *nmg;
10666         Newx(nmg, 1, MAGIC);
10667         *mgprev_p = nmg;
10668         mgprev_p = &(nmg->mg_moremagic);
10669
10670         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
10671            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
10672            from the original commit adding Perl_mg_dup() - revision 4538.
10673            Similarly there is the annotation "XXX random ptr?" next to the
10674            assignment to nmg->mg_ptr.  */
10675         *nmg = *mg;
10676
10677         /* FIXME for plugins
10678         if (nmg->mg_type == PERL_MAGIC_qr) {
10679             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
10680         }
10681         else
10682         */
10683         if(nmg->mg_type == PERL_MAGIC_backref) {
10684             /* The backref AV has its reference count deliberately bumped by
10685                1.  */
10686             nmg->mg_obj
10687                 = SvREFCNT_inc(av_dup_inc((const AV *) nmg->mg_obj, param));
10688         }
10689         else {
10690             nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
10691                               ? sv_dup_inc(nmg->mg_obj, param)
10692                               : sv_dup(nmg->mg_obj, param);
10693         }
10694
10695         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
10696             if (nmg->mg_len > 0) {
10697                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
10698                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
10699                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
10700                 {
10701                     AMT * const namtp = (AMT*)nmg->mg_ptr;
10702                     sv_dup_inc_multiple((SV**)(namtp->table),
10703                                         (SV**)(namtp->table), NofAMmeth, param);
10704                 }
10705             }
10706             else if (nmg->mg_len == HEf_SVKEY)
10707                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
10708         }
10709         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
10710             CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
10711         }
10712     }
10713     return mgret;
10714 }
10715
10716 #endif /* USE_ITHREADS */
10717
10718 struct ptr_tbl_arena {
10719     struct ptr_tbl_arena *next;
10720     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
10721 };
10722
10723 /* create a new pointer-mapping table */
10724
10725 PTR_TBL_t *
10726 Perl_ptr_table_new(pTHX)
10727 {
10728     PTR_TBL_t *tbl;
10729     PERL_UNUSED_CONTEXT;
10730
10731     Newx(tbl, 1, PTR_TBL_t);
10732     tbl->tbl_max        = 511;
10733     tbl->tbl_items      = 0;
10734     tbl->tbl_arena      = NULL;
10735     tbl->tbl_arena_next = NULL;
10736     tbl->tbl_arena_end  = NULL;
10737     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
10738     return tbl;
10739 }
10740
10741 #define PTR_TABLE_HASH(ptr) \
10742   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
10743
10744 /* map an existing pointer using a table */
10745
10746 STATIC PTR_TBL_ENT_t *
10747 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
10748 {
10749     PTR_TBL_ENT_t *tblent;
10750     const UV hash = PTR_TABLE_HASH(sv);
10751
10752     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
10753
10754     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
10755     for (; tblent; tblent = tblent->next) {
10756         if (tblent->oldval == sv)
10757             return tblent;
10758     }
10759     return NULL;
10760 }
10761
10762 void *
10763 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
10764 {
10765     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
10766
10767     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
10768     PERL_UNUSED_CONTEXT;
10769
10770     return tblent ? tblent->newval : NULL;
10771 }
10772
10773 /* add a new entry to a pointer-mapping table */
10774
10775 void
10776 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
10777 {
10778     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
10779
10780     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
10781     PERL_UNUSED_CONTEXT;
10782
10783     if (tblent) {
10784         tblent->newval = newsv;
10785     } else {
10786         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
10787
10788         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
10789             struct ptr_tbl_arena *new_arena;
10790
10791             Newx(new_arena, 1, struct ptr_tbl_arena);
10792             new_arena->next = tbl->tbl_arena;
10793             tbl->tbl_arena = new_arena;
10794             tbl->tbl_arena_next = new_arena->array;
10795             tbl->tbl_arena_end = new_arena->array
10796                 + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
10797         }
10798
10799         tblent = tbl->tbl_arena_next++;
10800
10801         tblent->oldval = oldsv;
10802         tblent->newval = newsv;
10803         tblent->next = tbl->tbl_ary[entry];
10804         tbl->tbl_ary[entry] = tblent;
10805         tbl->tbl_items++;
10806         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
10807             ptr_table_split(tbl);
10808     }
10809 }
10810
10811 /* double the hash bucket size of an existing ptr table */
10812
10813 void
10814 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
10815 {
10816     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
10817     const UV oldsize = tbl->tbl_max + 1;
10818     UV newsize = oldsize * 2;
10819     UV i;
10820
10821     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
10822     PERL_UNUSED_CONTEXT;
10823
10824     Renew(ary, newsize, PTR_TBL_ENT_t*);
10825     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
10826     tbl->tbl_max = --newsize;
10827     tbl->tbl_ary = ary;
10828     for (i=0; i < oldsize; i++, ary++) {
10829         PTR_TBL_ENT_t **curentp, **entp, *ent;
10830         if (!*ary)
10831             continue;
10832         curentp = ary + oldsize;
10833         for (entp = ary, ent = *ary; ent; ent = *entp) {
10834             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
10835                 *entp = ent->next;
10836                 ent->next = *curentp;
10837                 *curentp = ent;
10838                 continue;
10839             }
10840             else
10841                 entp = &ent->next;
10842         }
10843     }
10844 }
10845
10846 /* remove all the entries from a ptr table */
10847 /* Deprecated - will be removed post 5.14 */
10848
10849 void
10850 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
10851 {
10852     if (tbl && tbl->tbl_items) {
10853         struct ptr_tbl_arena *arena = tbl->tbl_arena;
10854
10855         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
10856
10857         while (arena) {
10858             struct ptr_tbl_arena *next = arena->next;
10859
10860             Safefree(arena);
10861             arena = next;
10862         };
10863
10864         tbl->tbl_items = 0;
10865         tbl->tbl_arena = NULL;
10866         tbl->tbl_arena_next = NULL;
10867         tbl->tbl_arena_end = NULL;
10868     }
10869 }
10870
10871 /* clear and free a ptr table */
10872
10873 void
10874 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
10875 {
10876     struct ptr_tbl_arena *arena;
10877
10878     if (!tbl) {
10879         return;
10880     }
10881
10882     arena = tbl->tbl_arena;
10883
10884     while (arena) {
10885         struct ptr_tbl_arena *next = arena->next;
10886
10887         Safefree(arena);
10888         arena = next;
10889     }
10890
10891     Safefree(tbl->tbl_ary);
10892     Safefree(tbl);
10893 }
10894
10895 #if defined(USE_ITHREADS)
10896
10897 void
10898 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
10899 {
10900     PERL_ARGS_ASSERT_RVPV_DUP;
10901
10902     if (SvROK(sstr)) {
10903         SvRV_set(dstr, SvWEAKREF(sstr)
10904                        ? sv_dup(SvRV_const(sstr), param)
10905                        : sv_dup_inc(SvRV_const(sstr), param));
10906
10907     }
10908     else if (SvPVX_const(sstr)) {
10909         /* Has something there */
10910         if (SvLEN(sstr)) {
10911             /* Normal PV - clone whole allocated space */
10912             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
10913             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
10914                 /* Not that normal - actually sstr is copy on write.
10915                    But we are a true, independant SV, so:  */
10916                 SvREADONLY_off(dstr);
10917                 SvFAKE_off(dstr);
10918             }
10919         }
10920         else {
10921             /* Special case - not normally malloced for some reason */
10922             if (isGV_with_GP(sstr)) {
10923                 /* Don't need to do anything here.  */
10924             }
10925             else if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
10926                 /* A "shared" PV - clone it as "shared" PV */
10927                 SvPV_set(dstr,
10928                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
10929                                          param)));
10930             }
10931             else {
10932                 /* Some other special case - random pointer */
10933                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
10934             }
10935         }
10936     }
10937     else {
10938         /* Copy the NULL */
10939         SvPV_set(dstr, NULL);
10940     }
10941 }
10942
10943 /* duplicate a list of SVs. source and dest may point to the same memory.  */
10944 static SV **
10945 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
10946                       SSize_t items, CLONE_PARAMS *const param)
10947 {
10948     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
10949
10950     while (items-- > 0) {
10951         *dest++ = sv_dup_inc(*source++, param);
10952     }
10953
10954     return dest;
10955 }
10956
10957 /* duplicate an SV of any type (including AV, HV etc) */
10958
10959 SV *
10960 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
10961 {
10962     dVAR;
10963     SV *dstr;
10964
10965     PERL_ARGS_ASSERT_SV_DUP;
10966
10967     if (!sstr)
10968         return NULL;
10969     if (SvTYPE(sstr) == SVTYPEMASK) {
10970 #ifdef DEBUG_LEAKING_SCALARS_ABORT
10971         abort();
10972 #endif
10973         return NULL;
10974     }
10975     /* look for it in the table first */
10976     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
10977     if (dstr)
10978         return dstr;
10979
10980     if(param->flags & CLONEf_JOIN_IN) {
10981         /** We are joining here so we don't want do clone
10982             something that is bad **/
10983         if (SvTYPE(sstr) == SVt_PVHV) {
10984             const HEK * const hvname = HvNAME_HEK(sstr);
10985             if (hvname)
10986                 /** don't clone stashes if they already exist **/
10987                 return MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname), 0));
10988         }
10989     }
10990
10991     /* create anew and remember what it is */
10992     new_SV(dstr);
10993
10994 #ifdef DEBUG_LEAKING_SCALARS
10995     dstr->sv_debug_optype = sstr->sv_debug_optype;
10996     dstr->sv_debug_line = sstr->sv_debug_line;
10997     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
10998     dstr->sv_debug_cloned = 1;
10999     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
11000 #endif
11001
11002     ptr_table_store(PL_ptr_table, sstr, dstr);
11003
11004     /* clone */
11005     SvFLAGS(dstr)       = SvFLAGS(sstr);
11006     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
11007     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
11008
11009 #ifdef DEBUGGING
11010     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
11011         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
11012                       (void*)PL_watch_pvx, SvPVX_const(sstr));
11013 #endif
11014
11015     /* don't clone objects whose class has asked us not to */
11016     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
11017         SvFLAGS(dstr) = 0;
11018         return dstr;
11019     }
11020
11021     switch (SvTYPE(sstr)) {
11022     case SVt_NULL:
11023         SvANY(dstr)     = NULL;
11024         break;
11025     case SVt_IV:
11026         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
11027         if(SvROK(sstr)) {
11028             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11029         } else {
11030             SvIV_set(dstr, SvIVX(sstr));
11031         }
11032         break;
11033     case SVt_NV:
11034         SvANY(dstr)     = new_XNV();
11035         SvNV_set(dstr, SvNVX(sstr));
11036         break;
11037         /* case SVt_BIND: */
11038     default:
11039         {
11040             /* These are all the types that need complex bodies allocating.  */
11041             void *new_body;
11042             const svtype sv_type = SvTYPE(sstr);
11043             const struct body_details *const sv_type_details
11044                 = bodies_by_type + sv_type;
11045
11046             switch (sv_type) {
11047             default:
11048                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
11049                 break;
11050
11051             case SVt_PVGV:
11052             case SVt_PVIO:
11053             case SVt_PVFM:
11054             case SVt_PVHV:
11055             case SVt_PVAV:
11056             case SVt_PVCV:
11057             case SVt_PVLV:
11058             case SVt_REGEXP:
11059             case SVt_PVMG:
11060             case SVt_PVNV:
11061             case SVt_PVIV:
11062             case SVt_PV:
11063                 assert(sv_type_details->body_size);
11064                 if (sv_type_details->arena) {
11065                     new_body_inline(new_body, sv_type);
11066                     new_body
11067                         = (void*)((char*)new_body - sv_type_details->offset);
11068                 } else {
11069                     new_body = new_NOARENA(sv_type_details);
11070                 }
11071             }
11072             assert(new_body);
11073             SvANY(dstr) = new_body;
11074
11075 #ifndef PURIFY
11076             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
11077                  ((char*)SvANY(dstr)) + sv_type_details->offset,
11078                  sv_type_details->copy, char);
11079 #else
11080             Copy(((char*)SvANY(sstr)),
11081                  ((char*)SvANY(dstr)),
11082                  sv_type_details->body_size + sv_type_details->offset, char);
11083 #endif
11084
11085             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
11086                 && !isGV_with_GP(dstr))
11087                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11088
11089             /* The Copy above means that all the source (unduplicated) pointers
11090                are now in the destination.  We can check the flags and the
11091                pointers in either, but it's possible that there's less cache
11092                missing by always going for the destination.
11093                FIXME - instrument and check that assumption  */
11094             if (sv_type >= SVt_PVMG) {
11095                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
11096                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
11097                 } else if (SvMAGIC(dstr))
11098                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
11099                 if (SvSTASH(dstr))
11100                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
11101             }
11102
11103             /* The cast silences a GCC warning about unhandled types.  */
11104             switch ((int)sv_type) {
11105             case SVt_PV:
11106                 break;
11107             case SVt_PVIV:
11108                 break;
11109             case SVt_PVNV:
11110                 break;
11111             case SVt_PVMG:
11112                 break;
11113             case SVt_REGEXP:
11114                 /* FIXME for plugins */
11115                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
11116                 break;
11117             case SVt_PVLV:
11118                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
11119                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
11120                     LvTARG(dstr) = dstr;
11121                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
11122                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
11123                 else
11124                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
11125             case SVt_PVGV:
11126                 if(isGV_with_GP(sstr)) {
11127                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
11128                     /* Don't call sv_add_backref here as it's going to be
11129                        created as part of the magic cloning of the symbol
11130                        table--unless this is during a join and the stash
11131                        is not actually being cloned.  */
11132                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
11133                        at the point of this comment.  */
11134                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
11135                     if(param->flags & CLONEf_JOIN_IN) {
11136                         const HEK * const hvname
11137                          = HvNAME_HEK(GvSTASH(dstr));
11138                         if( hvname
11139                          && GvSTASH(dstr) == gv_stashpvn(
11140                              HEK_KEY(hvname), HEK_LEN(hvname), 0
11141                             )
11142                           )
11143                             Perl_sv_add_backref(
11144                              aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr
11145                             );
11146                     }
11147                     GvGP(dstr)  = gp_dup(GvGP(sstr), param);
11148                     (void)GpREFCNT_inc(GvGP(dstr));
11149                 } else
11150                     Perl_rvpv_dup(aTHX_ dstr, sstr, param);
11151                 break;
11152             case SVt_PVIO:
11153                 IoIFP(dstr)     = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
11154                 if (IoOFP(dstr) == IoIFP(sstr))
11155                     IoOFP(dstr) = IoIFP(dstr);
11156                 else
11157                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
11158                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
11159                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
11160                     /* I have no idea why fake dirp (rsfps)
11161                        should be treated differently but otherwise
11162                        we end up with leaks -- sky*/
11163                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
11164                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
11165                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
11166                 } else {
11167                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
11168                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
11169                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
11170                     if (IoDIRP(dstr)) {
11171                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr));
11172                     } else {
11173                         NOOP;
11174                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
11175                     }
11176                 }
11177                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
11178                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
11179                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
11180                 break;
11181             case SVt_PVAV:
11182                 /* avoid cloning an empty array */
11183                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
11184                     SV **dst_ary, **src_ary;
11185                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
11186
11187                     src_ary = AvARRAY((const AV *)sstr);
11188                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
11189                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
11190                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
11191                     AvALLOC((const AV *)dstr) = dst_ary;
11192                     if (AvREAL((const AV *)sstr)) {
11193                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
11194                                                       param);
11195                     }
11196                     else {
11197                         while (items-- > 0)
11198                             *dst_ary++ = sv_dup(*src_ary++, param);
11199                         if (!(param->flags & CLONEf_COPY_STACKS)
11200                              && AvREIFY(sstr))
11201                         {
11202                             av_reify(MUTABLE_AV(dstr)); /* #41138 */
11203                         }
11204                     }
11205                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
11206                     while (items-- > 0) {
11207                         *dst_ary++ = &PL_sv_undef;
11208                     }
11209                 }
11210                 else {
11211                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
11212                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
11213                     AvMAX(  (const AV *)dstr)   = -1;
11214                     AvFILLp((const AV *)dstr)   = -1;
11215                 }
11216                 break;
11217             case SVt_PVHV:
11218                 if (HvARRAY((const HV *)sstr)) {
11219                     STRLEN i = 0;
11220                     const bool sharekeys = !!HvSHAREKEYS(sstr);
11221                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
11222                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
11223                     char *darray;
11224                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
11225                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
11226                         char);
11227                     HvARRAY(dstr) = (HE**)darray;
11228                     while (i <= sxhv->xhv_max) {
11229                         const HE * const source = HvARRAY(sstr)[i];
11230                         HvARRAY(dstr)[i] = source
11231                             ? he_dup(source, sharekeys, param) : 0;
11232                         ++i;
11233                     }
11234                     if (SvOOK(sstr)) {
11235                         HEK *hvname;
11236                         const struct xpvhv_aux * const saux = HvAUX(sstr);
11237                         struct xpvhv_aux * const daux = HvAUX(dstr);
11238                         /* This flag isn't copied.  */
11239                         /* SvOOK_on(hv) attacks the IV flags.  */
11240                         SvFLAGS(dstr) |= SVf_OOK;
11241
11242                         hvname = saux->xhv_name;
11243                         daux->xhv_name = hek_dup(hvname, param);
11244
11245                         daux->xhv_riter = saux->xhv_riter;
11246                         daux->xhv_eiter = saux->xhv_eiter
11247                             ? he_dup(saux->xhv_eiter,
11248                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
11249                         /* backref array needs refcnt=2; see sv_add_backref */
11250                         daux->xhv_backreferences =
11251                             saux->xhv_backreferences
11252                             ? MUTABLE_AV(SvREFCNT_inc(
11253                                                       sv_dup_inc((const SV *)saux->xhv_backreferences, param)))
11254                                 : 0;
11255
11256                         daux->xhv_mro_meta = saux->xhv_mro_meta
11257                             ? mro_meta_dup(saux->xhv_mro_meta, param)
11258                             : 0;
11259
11260                         /* Record stashes for possible cloning in Perl_clone(). */
11261                         if (hvname)
11262                             av_push(param->stashes, dstr);
11263                     }
11264                 }
11265                 else
11266                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
11267                 break;
11268             case SVt_PVCV:
11269                 if (!(param->flags & CLONEf_COPY_STACKS)) {
11270                     CvDEPTH(dstr) = 0;
11271                 }
11272             case SVt_PVFM:
11273                 /* NOTE: not refcounted */
11274                 CvSTASH(dstr)   = hv_dup(CvSTASH(dstr), param);
11275                 OP_REFCNT_LOCK;
11276                 if (!CvISXSUB(dstr))
11277                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
11278                 OP_REFCNT_UNLOCK;
11279                 if (CvCONST(dstr) && CvISXSUB(dstr)) {
11280                     CvXSUBANY(dstr).any_ptr =
11281                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
11282                 }
11283                 /* don't dup if copying back - CvGV isn't refcounted, so the
11284                  * duped GV may never be freed. A bit of a hack! DAPM */
11285                 CvGV(dstr)      = (param->flags & CLONEf_JOIN_IN) ?
11286                     NULL : gv_dup(CvGV(dstr), param) ;
11287                 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
11288                 CvOUTSIDE(dstr) =
11289                     CvWEAKOUTSIDE(sstr)
11290                     ? cv_dup(    CvOUTSIDE(dstr), param)
11291                     : cv_dup_inc(CvOUTSIDE(dstr), param);
11292                 if (!CvISXSUB(dstr))
11293                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
11294                 break;
11295             }
11296         }
11297     }
11298
11299     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
11300         ++PL_sv_objcount;
11301
11302     return dstr;
11303  }
11304
11305 /* duplicate a context */
11306
11307 PERL_CONTEXT *
11308 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
11309 {
11310     PERL_CONTEXT *ncxs;
11311
11312     PERL_ARGS_ASSERT_CX_DUP;
11313
11314     if (!cxs)
11315         return (PERL_CONTEXT*)NULL;
11316
11317     /* look for it in the table first */
11318     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
11319     if (ncxs)
11320         return ncxs;
11321
11322     /* create anew and remember what it is */
11323     Newx(ncxs, max + 1, PERL_CONTEXT);
11324     ptr_table_store(PL_ptr_table, cxs, ncxs);
11325     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
11326
11327     while (ix >= 0) {
11328         PERL_CONTEXT * const ncx = &ncxs[ix];
11329         if (CxTYPE(ncx) == CXt_SUBST) {
11330             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
11331         }
11332         else {
11333             switch (CxTYPE(ncx)) {
11334             case CXt_SUB:
11335                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
11336                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
11337                                            : cv_dup(ncx->blk_sub.cv,param));
11338                 ncx->blk_sub.argarray   = (CxHASARGS(ncx)
11339                                            ? av_dup_inc(ncx->blk_sub.argarray,
11340                                                         param)
11341                                            : NULL);
11342                 ncx->blk_sub.savearray  = av_dup_inc(ncx->blk_sub.savearray,
11343                                                      param);
11344                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
11345                                            ncx->blk_sub.oldcomppad);
11346                 break;
11347             case CXt_EVAL:
11348                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
11349                                                       param);
11350                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
11351                 break;
11352             case CXt_LOOP_LAZYSV:
11353                 ncx->blk_loop.state_u.lazysv.end
11354                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
11355                 /* We are taking advantage of av_dup_inc and sv_dup_inc
11356                    actually being the same function, and order equivalance of
11357                    the two unions.
11358                    We can assert the later [but only at run time :-(]  */
11359                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
11360                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
11361             case CXt_LOOP_FOR:
11362                 ncx->blk_loop.state_u.ary.ary
11363                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
11364             case CXt_LOOP_LAZYIV:
11365             case CXt_LOOP_PLAIN:
11366                 if (CxPADLOOP(ncx)) {
11367                     ncx->blk_loop.oldcomppad
11368                         = (PAD*)ptr_table_fetch(PL_ptr_table,
11369                                                 ncx->blk_loop.oldcomppad);
11370                 } else {
11371                     ncx->blk_loop.oldcomppad
11372                         = (PAD*)gv_dup((const GV *)ncx->blk_loop.oldcomppad,
11373                                        param);
11374                 }
11375                 break;
11376             case CXt_FORMAT:
11377                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
11378                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
11379                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
11380                                                      param);
11381                 break;
11382             case CXt_BLOCK:
11383             case CXt_NULL:
11384                 break;
11385             }
11386         }
11387         --ix;
11388     }
11389     return ncxs;
11390 }
11391
11392 /* duplicate a stack info structure */
11393
11394 PERL_SI *
11395 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
11396 {
11397     PERL_SI *nsi;
11398
11399     PERL_ARGS_ASSERT_SI_DUP;
11400
11401     if (!si)
11402         return (PERL_SI*)NULL;
11403
11404     /* look for it in the table first */
11405     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
11406     if (nsi)
11407         return nsi;
11408
11409     /* create anew and remember what it is */
11410     Newxz(nsi, 1, PERL_SI);
11411     ptr_table_store(PL_ptr_table, si, nsi);
11412
11413     nsi->si_stack       = av_dup_inc(si->si_stack, param);
11414     nsi->si_cxix        = si->si_cxix;
11415     nsi->si_cxmax       = si->si_cxmax;
11416     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
11417     nsi->si_type        = si->si_type;
11418     nsi->si_prev        = si_dup(si->si_prev, param);
11419     nsi->si_next        = si_dup(si->si_next, param);
11420     nsi->si_markoff     = si->si_markoff;
11421
11422     return nsi;
11423 }
11424
11425 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
11426 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
11427 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
11428 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
11429 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
11430 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
11431 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
11432 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
11433 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
11434 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
11435 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
11436 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
11437 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
11438 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
11439 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
11440 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
11441
11442 /* XXXXX todo */
11443 #define pv_dup_inc(p)   SAVEPV(p)
11444 #define pv_dup(p)       SAVEPV(p)
11445 #define svp_dup_inc(p,pp)       any_dup(p,pp)
11446
11447 /* map any object to the new equivent - either something in the
11448  * ptr table, or something in the interpreter structure
11449  */
11450
11451 void *
11452 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
11453 {
11454     void *ret;
11455
11456     PERL_ARGS_ASSERT_ANY_DUP;
11457
11458     if (!v)
11459         return (void*)NULL;
11460
11461     /* look for it in the table first */
11462     ret = ptr_table_fetch(PL_ptr_table, v);
11463     if (ret)
11464         return ret;
11465
11466     /* see if it is part of the interpreter structure */
11467     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
11468         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
11469     else {
11470         ret = v;
11471     }
11472
11473     return ret;
11474 }
11475
11476 /* duplicate the save stack */
11477
11478 ANY *
11479 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
11480 {
11481     dVAR;
11482     ANY * const ss      = proto_perl->Isavestack;
11483     const I32 max       = proto_perl->Isavestack_max;
11484     I32 ix              = proto_perl->Isavestack_ix;
11485     ANY *nss;
11486     const SV *sv;
11487     const GV *gv;
11488     const AV *av;
11489     const HV *hv;
11490     void* ptr;
11491     int intval;
11492     long longval;
11493     GP *gp;
11494     IV iv;
11495     I32 i;
11496     char *c = NULL;
11497     void (*dptr) (void*);
11498     void (*dxptr) (pTHX_ void*);
11499
11500     PERL_ARGS_ASSERT_SS_DUP;
11501
11502     Newxz(nss, max, ANY);
11503
11504     while (ix > 0) {
11505         const UV uv = POPUV(ss,ix);
11506         const U8 type = (U8)uv & SAVE_MASK;
11507
11508         TOPUV(nss,ix) = uv;
11509         switch (type) {
11510         case SAVEt_CLEARSV:
11511             break;
11512         case SAVEt_HELEM:               /* hash element */
11513             sv = (const SV *)POPPTR(ss,ix);
11514             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11515             /* fall through */
11516         case SAVEt_ITEM:                        /* normal string */
11517         case SAVEt_SV:                          /* scalar reference */
11518             sv = (const SV *)POPPTR(ss,ix);
11519             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11520             /* fall through */
11521         case SAVEt_FREESV:
11522         case SAVEt_MORTALIZESV:
11523             sv = (const SV *)POPPTR(ss,ix);
11524             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11525             break;
11526         case SAVEt_SHARED_PVREF:                /* char* in shared space */
11527             c = (char*)POPPTR(ss,ix);
11528             TOPPTR(nss,ix) = savesharedpv(c);
11529             ptr = POPPTR(ss,ix);
11530             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11531             break;
11532         case SAVEt_GENERIC_SVREF:               /* generic sv */
11533         case SAVEt_SVREF:                       /* scalar reference */
11534             sv = (const SV *)POPPTR(ss,ix);
11535             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11536             ptr = POPPTR(ss,ix);
11537             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
11538             break;
11539         case SAVEt_HV:                          /* hash reference */
11540         case SAVEt_AV:                          /* array reference */
11541             sv = (const SV *) POPPTR(ss,ix);
11542             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11543             /* fall through */
11544         case SAVEt_COMPPAD:
11545         case SAVEt_NSTAB:
11546             sv = (const SV *) POPPTR(ss,ix);
11547             TOPPTR(nss,ix) = sv_dup(sv, param);
11548             break;
11549         case SAVEt_INT:                         /* int reference */
11550             ptr = POPPTR(ss,ix);
11551             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11552             intval = (int)POPINT(ss,ix);
11553             TOPINT(nss,ix) = intval;
11554             break;
11555         case SAVEt_LONG:                        /* long reference */
11556             ptr = POPPTR(ss,ix);
11557             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11558             longval = (long)POPLONG(ss,ix);
11559             TOPLONG(nss,ix) = longval;
11560             break;
11561         case SAVEt_I32:                         /* I32 reference */
11562         case SAVEt_I16:                         /* I16 reference */
11563         case SAVEt_COP_ARYBASE:                 /* call CopARYBASE_set */
11564             ptr = POPPTR(ss,ix);
11565             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11566             i = POPINT(ss,ix);
11567             TOPINT(nss,ix) = i;
11568             break;
11569         case SAVEt_IV:                          /* IV reference */
11570             ptr = POPPTR(ss,ix);
11571             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11572             iv = POPIV(ss,ix);
11573             TOPIV(nss,ix) = iv;
11574             break;
11575         case SAVEt_HPTR:                        /* HV* reference */
11576         case SAVEt_APTR:                        /* AV* reference */
11577         case SAVEt_SPTR:                        /* SV* reference */
11578             ptr = POPPTR(ss,ix);
11579             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11580             sv = (const SV *)POPPTR(ss,ix);
11581             TOPPTR(nss,ix) = sv_dup(sv, param);
11582             break;
11583         case SAVEt_VPTR:                        /* random* reference */
11584             ptr = POPPTR(ss,ix);
11585             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11586             /* Fall through */
11587         case SAVEt_I8:                          /* I8 reference */
11588         case SAVEt_BOOL:
11589             ptr = POPPTR(ss,ix);
11590             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11591             break;
11592         case SAVEt_GENERIC_PVREF:               /* generic char* */
11593         case SAVEt_PPTR:                        /* char* reference */
11594             ptr = POPPTR(ss,ix);
11595             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11596             c = (char*)POPPTR(ss,ix);
11597             TOPPTR(nss,ix) = pv_dup(c);
11598             break;
11599         case SAVEt_GP:                          /* scalar reference */
11600             gv = (const GV *)POPPTR(ss,ix);
11601             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
11602             gp = (GP*)POPPTR(ss,ix);
11603             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
11604             (void)GpREFCNT_inc(gp);
11605             i = POPINT(ss,ix);
11606             TOPINT(nss,ix) = i;
11607             break;
11608         case SAVEt_FREEOP:
11609             ptr = POPPTR(ss,ix);
11610             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
11611                 /* these are assumed to be refcounted properly */
11612                 OP *o;
11613                 switch (((OP*)ptr)->op_type) {
11614                 case OP_LEAVESUB:
11615                 case OP_LEAVESUBLV:
11616                 case OP_LEAVEEVAL:
11617                 case OP_LEAVE:
11618                 case OP_SCOPE:
11619                 case OP_LEAVEWRITE:
11620                     TOPPTR(nss,ix) = ptr;
11621                     o = (OP*)ptr;
11622                     OP_REFCNT_LOCK;
11623                     (void) OpREFCNT_inc(o);
11624                     OP_REFCNT_UNLOCK;
11625                     break;
11626                 default:
11627                     TOPPTR(nss,ix) = NULL;
11628                     break;
11629                 }
11630             }
11631             else
11632                 TOPPTR(nss,ix) = NULL;
11633             break;
11634         case SAVEt_DELETE:
11635             hv = (const HV *)POPPTR(ss,ix);
11636             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11637             i = POPINT(ss,ix);
11638             TOPINT(nss,ix) = i;
11639             /* Fall through */
11640         case SAVEt_FREEPV:
11641             c = (char*)POPPTR(ss,ix);
11642             TOPPTR(nss,ix) = pv_dup_inc(c);
11643             break;
11644         case SAVEt_STACK_POS:           /* Position on Perl stack */
11645             i = POPINT(ss,ix);
11646             TOPINT(nss,ix) = i;
11647             break;
11648         case SAVEt_DESTRUCTOR:
11649             ptr = POPPTR(ss,ix);
11650             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11651             dptr = POPDPTR(ss,ix);
11652             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
11653                                         any_dup(FPTR2DPTR(void *, dptr),
11654                                                 proto_perl));
11655             break;
11656         case SAVEt_DESTRUCTOR_X:
11657             ptr = POPPTR(ss,ix);
11658             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
11659             dxptr = POPDXPTR(ss,ix);
11660             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
11661                                          any_dup(FPTR2DPTR(void *, dxptr),
11662                                                  proto_perl));
11663             break;
11664         case SAVEt_REGCONTEXT:
11665         case SAVEt_ALLOC:
11666             ix -= uv >> SAVE_TIGHT_SHIFT;
11667             break;
11668         case SAVEt_AELEM:               /* array element */
11669             sv = (const SV *)POPPTR(ss,ix);
11670             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11671             i = POPINT(ss,ix);
11672             TOPINT(nss,ix) = i;
11673             av = (const AV *)POPPTR(ss,ix);
11674             TOPPTR(nss,ix) = av_dup_inc(av, param);
11675             break;
11676         case SAVEt_OP:
11677             ptr = POPPTR(ss,ix);
11678             TOPPTR(nss,ix) = ptr;
11679             break;
11680         case SAVEt_HINTS:
11681             ptr = POPPTR(ss,ix);
11682             if (ptr) {
11683                 HINTS_REFCNT_LOCK;
11684                 ((struct refcounted_he *)ptr)->refcounted_he_refcnt++;
11685                 HINTS_REFCNT_UNLOCK;
11686             }
11687             TOPPTR(nss,ix) = ptr;
11688             i = POPINT(ss,ix);
11689             TOPINT(nss,ix) = i;
11690             if (i & HINT_LOCALIZE_HH) {
11691                 hv = (const HV *)POPPTR(ss,ix);
11692                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
11693             }
11694             break;
11695         case SAVEt_PADSV_AND_MORTALIZE:
11696             longval = (long)POPLONG(ss,ix);
11697             TOPLONG(nss,ix) = longval;
11698             ptr = POPPTR(ss,ix);
11699             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
11700             sv = (const SV *)POPPTR(ss,ix);
11701             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
11702             break;
11703         case SAVEt_SET_SVFLAGS:
11704             i = POPINT(ss,ix);
11705             TOPINT(nss,ix) = i;
11706             i = POPINT(ss,ix);
11707             TOPINT(nss,ix) = i;
11708             sv = (const SV *)POPPTR(ss,ix);
11709             TOPPTR(nss,ix) = sv_dup(sv, param);
11710             break;
11711         case SAVEt_RE_STATE:
11712             {
11713                 const struct re_save_state *const old_state
11714                     = (struct re_save_state *)
11715                     (ss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11716                 struct re_save_state *const new_state
11717                     = (struct re_save_state *)
11718                     (nss + ix - SAVESTACK_ALLOC_FOR_RE_SAVE_STATE);
11719
11720                 Copy(old_state, new_state, 1, struct re_save_state);
11721                 ix -= SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
11722
11723                 new_state->re_state_bostr
11724                     = pv_dup(old_state->re_state_bostr);
11725                 new_state->re_state_reginput
11726                     = pv_dup(old_state->re_state_reginput);
11727                 new_state->re_state_regeol
11728                     = pv_dup(old_state->re_state_regeol);
11729                 new_state->re_state_regoffs
11730                     = (regexp_paren_pair*)
11731                         any_dup(old_state->re_state_regoffs, proto_perl);
11732                 new_state->re_state_reglastparen
11733                     = (U32*) any_dup(old_state->re_state_reglastparen, 
11734                               proto_perl);
11735                 new_state->re_state_reglastcloseparen
11736                     = (U32*)any_dup(old_state->re_state_reglastcloseparen,
11737                               proto_perl);
11738                 /* XXX This just has to be broken. The old save_re_context
11739                    code did SAVEGENERICPV(PL_reg_start_tmp);
11740                    PL_reg_start_tmp is char **.
11741                    Look above to what the dup code does for
11742                    SAVEt_GENERIC_PVREF
11743                    It can never have worked.
11744                    So this is merely a faithful copy of the exiting bug:  */
11745                 new_state->re_state_reg_start_tmp
11746                     = (char **) pv_dup((char *)
11747                                       old_state->re_state_reg_start_tmp);
11748                 /* I assume that it only ever "worked" because no-one called
11749                    (pseudo)fork while the regexp engine had re-entered itself.
11750                 */
11751 #ifdef PERL_OLD_COPY_ON_WRITE
11752                 new_state->re_state_nrs
11753                     = sv_dup(old_state->re_state_nrs, param);
11754 #endif
11755                 new_state->re_state_reg_magic
11756                     = (MAGIC*) any_dup(old_state->re_state_reg_magic, 
11757                                proto_perl);
11758                 new_state->re_state_reg_oldcurpm
11759                     = (PMOP*) any_dup(old_state->re_state_reg_oldcurpm, 
11760                               proto_perl);
11761                 new_state->re_state_reg_curpm
11762                     = (PMOP*)  any_dup(old_state->re_state_reg_curpm, 
11763                                proto_perl);
11764                 new_state->re_state_reg_oldsaved
11765                     = pv_dup(old_state->re_state_reg_oldsaved);
11766                 new_state->re_state_reg_poscache
11767                     = pv_dup(old_state->re_state_reg_poscache);
11768                 new_state->re_state_reg_starttry
11769                     = pv_dup(old_state->re_state_reg_starttry);
11770                 break;
11771             }
11772         case SAVEt_COMPILE_WARNINGS:
11773             ptr = POPPTR(ss,ix);
11774             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
11775             break;
11776         case SAVEt_PARSER:
11777             ptr = POPPTR(ss,ix);
11778             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
11779             break;
11780         default:
11781             Perl_croak(aTHX_
11782                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
11783         }
11784     }
11785
11786     return nss;
11787 }
11788
11789
11790 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
11791  * flag to the result. This is done for each stash before cloning starts,
11792  * so we know which stashes want their objects cloned */
11793
11794 static void
11795 do_mark_cloneable_stash(pTHX_ SV *const sv)
11796 {
11797     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
11798     if (hvname) {
11799         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
11800         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
11801         if (cloner && GvCV(cloner)) {
11802             dSP;
11803             UV status;
11804
11805             ENTER;
11806             SAVETMPS;
11807             PUSHMARK(SP);
11808             mXPUSHs(newSVhek(hvname));
11809             PUTBACK;
11810             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
11811             SPAGAIN;
11812             status = POPu;
11813             PUTBACK;
11814             FREETMPS;
11815             LEAVE;
11816             if (status)
11817                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
11818         }
11819     }
11820 }
11821
11822
11823
11824 /*
11825 =for apidoc perl_clone
11826
11827 Create and return a new interpreter by cloning the current one.
11828
11829 perl_clone takes these flags as parameters:
11830
11831 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
11832 without it we only clone the data and zero the stacks,
11833 with it we copy the stacks and the new perl interpreter is
11834 ready to run at the exact same point as the previous one.
11835 The pseudo-fork code uses COPY_STACKS while the
11836 threads->create doesn't.
11837
11838 CLONEf_KEEP_PTR_TABLE
11839 perl_clone keeps a ptr_table with the pointer of the old
11840 variable as a key and the new variable as a value,
11841 this allows it to check if something has been cloned and not
11842 clone it again but rather just use the value and increase the
11843 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
11844 the ptr_table using the function
11845 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
11846 reason to keep it around is if you want to dup some of your own
11847 variable who are outside the graph perl scans, example of this
11848 code is in threads.xs create
11849
11850 CLONEf_CLONE_HOST
11851 This is a win32 thing, it is ignored on unix, it tells perls
11852 win32host code (which is c++) to clone itself, this is needed on
11853 win32 if you want to run two threads at the same time,
11854 if you just want to do some stuff in a separate perl interpreter
11855 and then throw it away and return to the original one,
11856 you don't need to do anything.
11857
11858 =cut
11859 */
11860
11861 /* XXX the above needs expanding by someone who actually understands it ! */
11862 EXTERN_C PerlInterpreter *
11863 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
11864
11865 PerlInterpreter *
11866 perl_clone(PerlInterpreter *proto_perl, UV flags)
11867 {
11868    dVAR;
11869 #ifdef PERL_IMPLICIT_SYS
11870
11871     PERL_ARGS_ASSERT_PERL_CLONE;
11872
11873    /* perlhost.h so we need to call into it
11874    to clone the host, CPerlHost should have a c interface, sky */
11875
11876    if (flags & CLONEf_CLONE_HOST) {
11877        return perl_clone_host(proto_perl,flags);
11878    }
11879    return perl_clone_using(proto_perl, flags,
11880                             proto_perl->IMem,
11881                             proto_perl->IMemShared,
11882                             proto_perl->IMemParse,
11883                             proto_perl->IEnv,
11884                             proto_perl->IStdIO,
11885                             proto_perl->ILIO,
11886                             proto_perl->IDir,
11887                             proto_perl->ISock,
11888                             proto_perl->IProc);
11889 }
11890
11891 PerlInterpreter *
11892 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
11893                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
11894                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
11895                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
11896                  struct IPerlDir* ipD, struct IPerlSock* ipS,
11897                  struct IPerlProc* ipP)
11898 {
11899     /* XXX many of the string copies here can be optimized if they're
11900      * constants; they need to be allocated as common memory and just
11901      * their pointers copied. */
11902
11903     IV i;
11904     CLONE_PARAMS clone_params;
11905     CLONE_PARAMS* const param = &clone_params;
11906
11907     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
11908
11909     PERL_ARGS_ASSERT_PERL_CLONE_USING;
11910 #else           /* !PERL_IMPLICIT_SYS */
11911     IV i;
11912     CLONE_PARAMS clone_params;
11913     CLONE_PARAMS* param = &clone_params;
11914     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
11915
11916     PERL_ARGS_ASSERT_PERL_CLONE;
11917 #endif          /* PERL_IMPLICIT_SYS */
11918
11919     /* for each stash, determine whether its objects should be cloned */
11920     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
11921     PERL_SET_THX(my_perl);
11922
11923 #ifdef DEBUGGING
11924     PoisonNew(my_perl, 1, PerlInterpreter);
11925     PL_op = NULL;
11926     PL_curcop = NULL;
11927     PL_markstack = 0;
11928     PL_scopestack = 0;
11929     PL_scopestack_name = 0;
11930     PL_savestack = 0;
11931     PL_savestack_ix = 0;
11932     PL_savestack_max = -1;
11933     PL_sig_pending = 0;
11934     PL_parser = NULL;
11935     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
11936 #  ifdef DEBUG_LEAKING_SCALARS
11937     PL_sv_serial = (((U32)my_perl >> 2) & 0xfff) * 1000000;
11938 #  endif
11939 #else   /* !DEBUGGING */
11940     Zero(my_perl, 1, PerlInterpreter);
11941 #endif  /* DEBUGGING */
11942
11943 #ifdef PERL_IMPLICIT_SYS
11944     /* host pointers */
11945     PL_Mem              = ipM;
11946     PL_MemShared        = ipMS;
11947     PL_MemParse         = ipMP;
11948     PL_Env              = ipE;
11949     PL_StdIO            = ipStd;
11950     PL_LIO              = ipLIO;
11951     PL_Dir              = ipD;
11952     PL_Sock             = ipS;
11953     PL_Proc             = ipP;
11954 #endif          /* PERL_IMPLICIT_SYS */
11955
11956     param->flags = flags;
11957     param->proto_perl = proto_perl;
11958
11959     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
11960
11961     PL_body_arenas = NULL;
11962     Zero(&PL_body_roots, 1, PL_body_roots);
11963     
11964     PL_nice_chunk       = NULL;
11965     PL_nice_chunk_size  = 0;
11966     PL_sv_count         = 0;
11967     PL_sv_objcount      = 0;
11968     PL_sv_root          = NULL;
11969     PL_sv_arenaroot     = NULL;
11970
11971     PL_debug            = proto_perl->Idebug;
11972
11973     PL_hash_seed        = proto_perl->Ihash_seed;
11974     PL_rehash_seed      = proto_perl->Irehash_seed;
11975
11976 #ifdef USE_REENTRANT_API
11977     /* XXX: things like -Dm will segfault here in perlio, but doing
11978      *  PERL_SET_CONTEXT(proto_perl);
11979      * breaks too many other things
11980      */
11981     Perl_reentrant_init(aTHX);
11982 #endif
11983
11984     /* create SV map for pointer relocation */
11985     PL_ptr_table = ptr_table_new();
11986
11987     /* initialize these special pointers as early as possible */
11988     SvANY(&PL_sv_undef)         = NULL;
11989     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
11990     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
11991     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
11992
11993     SvANY(&PL_sv_no)            = new_XPVNV();
11994     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
11995     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
11996                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
11997     SvPV_set(&PL_sv_no, savepvn(PL_No, 0));
11998     SvCUR_set(&PL_sv_no, 0);
11999     SvLEN_set(&PL_sv_no, 1);
12000     SvIV_set(&PL_sv_no, 0);
12001     SvNV_set(&PL_sv_no, 0);
12002     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
12003
12004     SvANY(&PL_sv_yes)           = new_XPVNV();
12005     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
12006     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
12007                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
12008     SvPV_set(&PL_sv_yes, savepvn(PL_Yes, 1));
12009     SvCUR_set(&PL_sv_yes, 1);
12010     SvLEN_set(&PL_sv_yes, 2);
12011     SvIV_set(&PL_sv_yes, 1);
12012     SvNV_set(&PL_sv_yes, 1);
12013     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
12014
12015     /* dbargs array probably holds garbage */
12016     PL_dbargs           = NULL;
12017
12018     /* create (a non-shared!) shared string table */
12019     PL_strtab           = newHV();
12020     HvSHAREKEYS_off(PL_strtab);
12021     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
12022     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
12023
12024     PL_compiling = proto_perl->Icompiling;
12025
12026     /* These two PVs will be free'd special way so must set them same way op.c does */
12027     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
12028     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
12029
12030     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
12031     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
12032
12033     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
12034     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
12035     if (PL_compiling.cop_hints_hash) {
12036         HINTS_REFCNT_LOCK;
12037         PL_compiling.cop_hints_hash->refcounted_he_refcnt++;
12038         HINTS_REFCNT_UNLOCK;
12039     }
12040     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
12041 #ifdef PERL_DEBUG_READONLY_OPS
12042     PL_slabs = NULL;
12043     PL_slab_count = 0;
12044 #endif
12045
12046     /* pseudo environmental stuff */
12047     PL_origargc         = proto_perl->Iorigargc;
12048     PL_origargv         = proto_perl->Iorigargv;
12049
12050     param->stashes      = newAV();  /* Setup array of objects to call clone on */
12051
12052     /* Set tainting stuff before PerlIO_debug can possibly get called */
12053     PL_tainting         = proto_perl->Itainting;
12054     PL_taint_warn       = proto_perl->Itaint_warn;
12055
12056 #ifdef PERLIO_LAYERS
12057     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
12058     PerlIO_clone(aTHX_ proto_perl, param);
12059 #endif
12060
12061     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
12062     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
12063     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
12064     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
12065     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
12066     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
12067
12068     /* switches */
12069     PL_minus_c          = proto_perl->Iminus_c;
12070     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
12071     PL_localpatches     = proto_perl->Ilocalpatches;
12072     PL_splitstr         = proto_perl->Isplitstr;
12073     PL_minus_n          = proto_perl->Iminus_n;
12074     PL_minus_p          = proto_perl->Iminus_p;
12075     PL_minus_l          = proto_perl->Iminus_l;
12076     PL_minus_a          = proto_perl->Iminus_a;
12077     PL_minus_E          = proto_perl->Iminus_E;
12078     PL_minus_F          = proto_perl->Iminus_F;
12079     PL_doswitches       = proto_perl->Idoswitches;
12080     PL_dowarn           = proto_perl->Idowarn;
12081     PL_doextract        = proto_perl->Idoextract;
12082     PL_sawampersand     = proto_perl->Isawampersand;
12083     PL_unsafe           = proto_perl->Iunsafe;
12084     PL_inplace          = SAVEPV(proto_perl->Iinplace);
12085     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
12086     PL_perldb           = proto_perl->Iperldb;
12087     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
12088     PL_exit_flags       = proto_perl->Iexit_flags;
12089
12090     /* magical thingies */
12091     /* XXX time(&PL_basetime) when asked for? */
12092     PL_basetime         = proto_perl->Ibasetime;
12093     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
12094
12095     PL_maxsysfd         = proto_perl->Imaxsysfd;
12096     PL_statusvalue      = proto_perl->Istatusvalue;
12097 #ifdef VMS
12098     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
12099 #else
12100     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
12101 #endif
12102     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
12103
12104     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
12105     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
12106     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
12107
12108    
12109     /* RE engine related */
12110     Zero(&PL_reg_state, 1, struct re_save_state);
12111     PL_reginterp_cnt    = 0;
12112     PL_regmatch_slab    = NULL;
12113     
12114     /* Clone the regex array */
12115     /* ORANGE FIXME for plugins, probably in the SV dup code.
12116        newSViv(PTR2IV(CALLREGDUPE(
12117        INT2PTR(REGEXP *, SvIVX(regex)), param))))
12118     */
12119     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
12120     PL_regex_pad = AvARRAY(PL_regex_padav);
12121
12122     /* shortcuts to various I/O objects */
12123     PL_ofsgv            = gv_dup(proto_perl->Iofsgv, param);
12124     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
12125     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
12126     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
12127     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
12128     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
12129     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
12130
12131     /* shortcuts to regexp stuff */
12132     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
12133
12134     /* shortcuts to misc objects */
12135     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
12136
12137     /* shortcuts to debugging objects */
12138     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
12139     PL_DBline           = gv_dup(proto_perl->IDBline, param);
12140     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
12141     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
12142     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
12143     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
12144
12145     /* symbol tables */
12146     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
12147     PL_curstash         = hv_dup(proto_perl->Icurstash, param);
12148     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
12149     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
12150     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
12151
12152     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
12153     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
12154     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
12155     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
12156     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
12157     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
12158     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
12159     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
12160
12161     PL_sub_generation   = proto_perl->Isub_generation;
12162     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
12163
12164     /* funky return mechanisms */
12165     PL_forkprocess      = proto_perl->Iforkprocess;
12166
12167     /* subprocess state */
12168     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
12169
12170     /* internal state */
12171     PL_maxo             = proto_perl->Imaxo;
12172     if (proto_perl->Iop_mask)
12173         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
12174     else
12175         PL_op_mask      = NULL;
12176     /* PL_asserting        = proto_perl->Iasserting; */
12177
12178     /* current interpreter roots */
12179     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
12180     OP_REFCNT_LOCK;
12181     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
12182     OP_REFCNT_UNLOCK;
12183     PL_main_start       = proto_perl->Imain_start;
12184     PL_eval_root        = proto_perl->Ieval_root;
12185     PL_eval_start       = proto_perl->Ieval_start;
12186
12187     /* runtime control stuff */
12188     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
12189
12190     PL_filemode         = proto_perl->Ifilemode;
12191     PL_lastfd           = proto_perl->Ilastfd;
12192     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
12193     PL_Argv             = NULL;
12194     PL_Cmd              = NULL;
12195     PL_gensym           = proto_perl->Igensym;
12196     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
12197     PL_laststatval      = proto_perl->Ilaststatval;
12198     PL_laststype        = proto_perl->Ilaststype;
12199     PL_mess_sv          = NULL;
12200
12201     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
12202
12203     /* interpreter atexit processing */
12204     PL_exitlistlen      = proto_perl->Iexitlistlen;
12205     if (PL_exitlistlen) {
12206         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12207         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
12208     }
12209     else
12210         PL_exitlist     = (PerlExitListEntry*)NULL;
12211
12212     PL_my_cxt_size = proto_perl->Imy_cxt_size;
12213     if (PL_my_cxt_size) {
12214         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
12215         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
12216 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12217         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
12218         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
12219 #endif
12220     }
12221     else {
12222         PL_my_cxt_list  = (void**)NULL;
12223 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
12224         PL_my_cxt_keys  = (const char**)NULL;
12225 #endif
12226     }
12227     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
12228     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
12229     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
12230
12231     PL_profiledata      = NULL;
12232
12233     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
12234
12235     PAD_CLONE_VARS(proto_perl, param);
12236
12237 #ifdef HAVE_INTERP_INTERN
12238     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
12239 #endif
12240
12241     /* more statics moved here */
12242     PL_generation       = proto_perl->Igeneration;
12243     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
12244
12245     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
12246     PL_in_clean_all     = proto_perl->Iin_clean_all;
12247
12248     PL_uid              = proto_perl->Iuid;
12249     PL_euid             = proto_perl->Ieuid;
12250     PL_gid              = proto_perl->Igid;
12251     PL_egid             = proto_perl->Iegid;
12252     PL_nomemok          = proto_perl->Inomemok;
12253     PL_an               = proto_perl->Ian;
12254     PL_evalseq          = proto_perl->Ievalseq;
12255     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
12256     PL_origalen         = proto_perl->Iorigalen;
12257 #ifdef PERL_USES_PL_PIDSTATUS
12258     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
12259 #endif
12260     PL_osname           = SAVEPV(proto_perl->Iosname);
12261     PL_sighandlerp      = proto_perl->Isighandlerp;
12262
12263     PL_runops           = proto_perl->Irunops;
12264
12265     PL_parser           = parser_dup(proto_perl->Iparser, param);
12266
12267     /* XXX this only works if the saved cop has already been cloned */
12268     if (proto_perl->Iparser) {
12269         PL_parser->saved_curcop = (COP*)any_dup(
12270                                     proto_perl->Iparser->saved_curcop,
12271                                     proto_perl);
12272     }
12273
12274     PL_subline          = proto_perl->Isubline;
12275     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
12276
12277 #ifdef FCRYPT
12278     PL_cryptseen        = proto_perl->Icryptseen;
12279 #endif
12280
12281     PL_hints            = proto_perl->Ihints;
12282
12283     PL_amagic_generation        = proto_perl->Iamagic_generation;
12284
12285 #ifdef USE_LOCALE_COLLATE
12286     PL_collation_ix     = proto_perl->Icollation_ix;
12287     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
12288     PL_collation_standard       = proto_perl->Icollation_standard;
12289     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
12290     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
12291 #endif /* USE_LOCALE_COLLATE */
12292
12293 #ifdef USE_LOCALE_NUMERIC
12294     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
12295     PL_numeric_standard = proto_perl->Inumeric_standard;
12296     PL_numeric_local    = proto_perl->Inumeric_local;
12297     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
12298 #endif /* !USE_LOCALE_NUMERIC */
12299
12300     /* utf8 character classes */
12301     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
12302     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
12303     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
12304     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
12305     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
12306     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
12307     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
12308     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
12309     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
12310     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
12311     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
12312     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
12313     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
12314     PL_utf8_X_begin     = sv_dup_inc(proto_perl->Iutf8_X_begin, param);
12315     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
12316     PL_utf8_X_prepend   = sv_dup_inc(proto_perl->Iutf8_X_prepend, param);
12317     PL_utf8_X_non_hangul        = sv_dup_inc(proto_perl->Iutf8_X_non_hangul, param);
12318     PL_utf8_X_L = sv_dup_inc(proto_perl->Iutf8_X_L, param);
12319     PL_utf8_X_LV        = sv_dup_inc(proto_perl->Iutf8_X_LV, param);
12320     PL_utf8_X_LVT       = sv_dup_inc(proto_perl->Iutf8_X_LVT, param);
12321     PL_utf8_X_T = sv_dup_inc(proto_perl->Iutf8_X_T, param);
12322     PL_utf8_X_V = sv_dup_inc(proto_perl->Iutf8_X_V, param);
12323     PL_utf8_X_LV_LVT_V  = sv_dup_inc(proto_perl->Iutf8_X_LV_LVT_V, param);
12324     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
12325     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
12326     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
12327     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
12328     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
12329     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
12330
12331     /* Did the locale setup indicate UTF-8? */
12332     PL_utf8locale       = proto_perl->Iutf8locale;
12333     /* Unicode features (see perlrun/-C) */
12334     PL_unicode          = proto_perl->Iunicode;
12335
12336     /* Pre-5.8 signals control */
12337     PL_signals          = proto_perl->Isignals;
12338
12339     /* times() ticks per second */
12340     PL_clocktick        = proto_perl->Iclocktick;
12341
12342     /* Recursion stopper for PerlIO_find_layer */
12343     PL_in_load_module   = proto_perl->Iin_load_module;
12344
12345     /* sort() routine */
12346     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
12347
12348     /* Not really needed/useful since the reenrant_retint is "volatile",
12349      * but do it for consistency's sake. */
12350     PL_reentrant_retint = proto_perl->Ireentrant_retint;
12351
12352     /* Hooks to shared SVs and locks. */
12353     PL_sharehook        = proto_perl->Isharehook;
12354     PL_lockhook         = proto_perl->Ilockhook;
12355     PL_unlockhook       = proto_perl->Iunlockhook;
12356     PL_threadhook       = proto_perl->Ithreadhook;
12357     PL_destroyhook      = proto_perl->Idestroyhook;
12358
12359 #ifdef THREADS_HAVE_PIDS
12360     PL_ppid             = proto_perl->Ippid;
12361 #endif
12362
12363     /* swatch cache */
12364     PL_last_swash_hv    = NULL; /* reinits on demand */
12365     PL_last_swash_klen  = 0;
12366     PL_last_swash_key[0]= '\0';
12367     PL_last_swash_tmps  = (U8*)NULL;
12368     PL_last_swash_slen  = 0;
12369
12370     PL_glob_index       = proto_perl->Iglob_index;
12371     PL_srand_called     = proto_perl->Isrand_called;
12372
12373     if (proto_perl->Ipsig_pend) {
12374         Newxz(PL_psig_pend, SIG_SIZE, int);
12375     }
12376     else {
12377         PL_psig_pend    = (int*)NULL;
12378     }
12379
12380     if (proto_perl->Ipsig_name) {
12381         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
12382         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
12383                             param);
12384         PL_psig_ptr = PL_psig_name + SIG_SIZE;
12385     }
12386     else {
12387         PL_psig_ptr     = (SV**)NULL;
12388         PL_psig_name    = (SV**)NULL;
12389     }
12390
12391     /* intrpvar.h stuff */
12392
12393     if (flags & CLONEf_COPY_STACKS) {
12394         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
12395         PL_tmps_ix              = proto_perl->Itmps_ix;
12396         PL_tmps_max             = proto_perl->Itmps_max;
12397         PL_tmps_floor           = proto_perl->Itmps_floor;
12398         Newx(PL_tmps_stack, PL_tmps_max, SV*);
12399         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
12400                             PL_tmps_ix+1, param);
12401
12402         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
12403         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
12404         Newxz(PL_markstack, i, I32);
12405         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
12406                                                   - proto_perl->Imarkstack);
12407         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
12408                                                   - proto_perl->Imarkstack);
12409         Copy(proto_perl->Imarkstack, PL_markstack,
12410              PL_markstack_ptr - PL_markstack + 1, I32);
12411
12412         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
12413          * NOTE: unlike the others! */
12414         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
12415         PL_scopestack_max       = proto_perl->Iscopestack_max;
12416         Newxz(PL_scopestack, PL_scopestack_max, I32);
12417         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
12418
12419 #ifdef DEBUGGING
12420         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
12421         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
12422 #endif
12423         /* NOTE: si_dup() looks at PL_markstack */
12424         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
12425
12426         /* PL_curstack          = PL_curstackinfo->si_stack; */
12427         PL_curstack             = av_dup(proto_perl->Icurstack, param);
12428         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
12429
12430         /* next PUSHs() etc. set *(PL_stack_sp+1) */
12431         PL_stack_base           = AvARRAY(PL_curstack);
12432         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
12433                                                    - proto_perl->Istack_base);
12434         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
12435
12436         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
12437          * NOTE: unlike the others! */
12438         PL_savestack_ix         = proto_perl->Isavestack_ix;
12439         PL_savestack_max        = proto_perl->Isavestack_max;
12440         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
12441         PL_savestack            = ss_dup(proto_perl, param);
12442     }
12443     else {
12444         init_stacks();
12445         ENTER;                  /* perl_destruct() wants to LEAVE; */
12446
12447         /* although we're not duplicating the tmps stack, we should still
12448          * add entries for any SVs on the tmps stack that got cloned by a
12449          * non-refcount means (eg a temp in @_); otherwise they will be
12450          * orphaned
12451          */
12452         for (i = 0; i<= proto_perl->Itmps_ix; i++) {
12453             SV * const nsv = MUTABLE_SV(ptr_table_fetch(PL_ptr_table,
12454                     proto_perl->Itmps_stack[i]));
12455             if (nsv && !SvREFCNT(nsv)) {
12456                 PUSH_EXTEND_MORTAL__SV_C(SvREFCNT_inc_simple(nsv));
12457             }
12458         }
12459     }
12460
12461     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
12462     PL_top_env          = &PL_start_env;
12463
12464     PL_op               = proto_perl->Iop;
12465
12466     PL_Sv               = NULL;
12467     PL_Xpv              = (XPV*)NULL;
12468     my_perl->Ina        = proto_perl->Ina;
12469
12470     PL_statbuf          = proto_perl->Istatbuf;
12471     PL_statcache        = proto_perl->Istatcache;
12472     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
12473     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
12474 #ifdef HAS_TIMES
12475     PL_timesbuf         = proto_perl->Itimesbuf;
12476 #endif
12477
12478     PL_tainted          = proto_perl->Itainted;
12479     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
12480     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
12481     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
12482     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
12483     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
12484     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
12485     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
12486     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
12487
12488     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
12489     PL_restartop        = proto_perl->Irestartop;
12490     PL_in_eval          = proto_perl->Iin_eval;
12491     PL_delaymagic       = proto_perl->Idelaymagic;
12492     PL_dirty            = proto_perl->Idirty;
12493     PL_localizing       = proto_perl->Ilocalizing;
12494
12495     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
12496     PL_hv_fetch_ent_mh  = NULL;
12497     PL_modcount         = proto_perl->Imodcount;
12498     PL_lastgotoprobe    = NULL;
12499     PL_dumpindent       = proto_perl->Idumpindent;
12500
12501     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
12502     PL_sortstash        = hv_dup(proto_perl->Isortstash, param);
12503     PL_firstgv          = gv_dup(proto_perl->Ifirstgv, param);
12504     PL_secondgv         = gv_dup(proto_perl->Isecondgv, param);
12505     PL_efloatbuf        = NULL;         /* reinits on demand */
12506     PL_efloatsize       = 0;                    /* reinits on demand */
12507
12508     /* regex stuff */
12509
12510     PL_screamfirst      = NULL;
12511     PL_screamnext       = NULL;
12512     PL_maxscream        = -1;                   /* reinits on demand */
12513     PL_lastscream       = NULL;
12514
12515
12516     PL_regdummy         = proto_perl->Iregdummy;
12517     PL_colorset         = 0;            /* reinits PL_colors[] */
12518     /*PL_colors[6]      = {0,0,0,0,0,0};*/
12519
12520
12521
12522     /* Pluggable optimizer */
12523     PL_peepp            = proto_perl->Ipeepp;
12524     /* op_free() hook */
12525     PL_opfreehook       = proto_perl->Iopfreehook;
12526
12527     PL_stashcache       = newHV();
12528
12529     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
12530                                             proto_perl->Iwatchaddr);
12531     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
12532     if (PL_debug && PL_watchaddr) {
12533         PerlIO_printf(Perl_debug_log,
12534           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
12535           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
12536           PTR2UV(PL_watchok));
12537     }
12538
12539     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
12540
12541     /* Call the ->CLONE method, if it exists, for each of the stashes
12542        identified by sv_dup() above.
12543     */
12544     while(av_len(param->stashes) != -1) {
12545         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
12546         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
12547         if (cloner && GvCV(cloner)) {
12548             dSP;
12549             ENTER;
12550             SAVETMPS;
12551             PUSHMARK(SP);
12552             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
12553             PUTBACK;
12554             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
12555             FREETMPS;
12556             LEAVE;
12557         }
12558     }
12559
12560     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
12561         ptr_table_free(PL_ptr_table);
12562         PL_ptr_table = NULL;
12563     }
12564
12565
12566     SvREFCNT_dec(param->stashes);
12567
12568     /* orphaned? eg threads->new inside BEGIN or use */
12569     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
12570         SvREFCNT_inc_simple_void(PL_compcv);
12571         SAVEFREESV(PL_compcv);
12572     }
12573
12574     return my_perl;
12575 }
12576
12577 #endif /* USE_ITHREADS */
12578
12579 /*
12580 =head1 Unicode Support
12581
12582 =for apidoc sv_recode_to_utf8
12583
12584 The encoding is assumed to be an Encode object, on entry the PV
12585 of the sv is assumed to be octets in that encoding, and the sv
12586 will be converted into Unicode (and UTF-8).
12587
12588 If the sv already is UTF-8 (or if it is not POK), or if the encoding
12589 is not a reference, nothing is done to the sv.  If the encoding is not
12590 an C<Encode::XS> Encoding object, bad things will happen.
12591 (See F<lib/encoding.pm> and L<Encode>).
12592
12593 The PV of the sv is returned.
12594
12595 =cut */
12596
12597 char *
12598 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
12599 {
12600     dVAR;
12601
12602     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
12603
12604     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
12605         SV *uni;
12606         STRLEN len;
12607         const char *s;
12608         dSP;
12609         ENTER;
12610         SAVETMPS;
12611         save_re_context();
12612         PUSHMARK(sp);
12613         EXTEND(SP, 3);
12614         XPUSHs(encoding);
12615         XPUSHs(sv);
12616 /*
12617   NI-S 2002/07/09
12618   Passing sv_yes is wrong - it needs to be or'ed set of constants
12619   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
12620   remove converted chars from source.
12621
12622   Both will default the value - let them.
12623
12624         XPUSHs(&PL_sv_yes);
12625 */
12626         PUTBACK;
12627         call_method("decode", G_SCALAR);
12628         SPAGAIN;
12629         uni = POPs;
12630         PUTBACK;
12631         s = SvPV_const(uni, len);
12632         if (s != SvPVX_const(sv)) {
12633             SvGROW(sv, len + 1);
12634             Move(s, SvPVX(sv), len + 1, char);
12635             SvCUR_set(sv, len);
12636         }
12637         FREETMPS;
12638         LEAVE;
12639         SvUTF8_on(sv);
12640         return SvPVX(sv);
12641     }
12642     return SvPOKp(sv) ? SvPVX(sv) : NULL;
12643 }
12644
12645 /*
12646 =for apidoc sv_cat_decode
12647
12648 The encoding is assumed to be an Encode object, the PV of the ssv is
12649 assumed to be octets in that encoding and decoding the input starts
12650 from the position which (PV + *offset) pointed to.  The dsv will be
12651 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
12652 when the string tstr appears in decoding output or the input ends on
12653 the PV of the ssv. The value which the offset points will be modified
12654 to the last input position on the ssv.
12655
12656 Returns TRUE if the terminator was found, else returns FALSE.
12657
12658 =cut */
12659
12660 bool
12661 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
12662                    SV *ssv, int *offset, char *tstr, int tlen)
12663 {
12664     dVAR;
12665     bool ret = FALSE;
12666
12667     PERL_ARGS_ASSERT_SV_CAT_DECODE;
12668
12669     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
12670         SV *offsv;
12671         dSP;
12672         ENTER;
12673         SAVETMPS;
12674         save_re_context();
12675         PUSHMARK(sp);
12676         EXTEND(SP, 6);
12677         XPUSHs(encoding);
12678         XPUSHs(dsv);
12679         XPUSHs(ssv);
12680         offsv = newSViv(*offset);
12681         mXPUSHs(offsv);
12682         mXPUSHp(tstr, tlen);
12683         PUTBACK;
12684         call_method("cat_decode", G_SCALAR);
12685         SPAGAIN;
12686         ret = SvTRUE(TOPs);
12687         *offset = SvIV(offsv);
12688         PUTBACK;
12689         FREETMPS;
12690         LEAVE;
12691     }
12692     else
12693         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
12694     return ret;
12695
12696 }
12697
12698 /* ---------------------------------------------------------------------
12699  *
12700  * support functions for report_uninit()
12701  */
12702
12703 /* the maxiumum size of array or hash where we will scan looking
12704  * for the undefined element that triggered the warning */
12705
12706 #define FUV_MAX_SEARCH_SIZE 1000
12707
12708 /* Look for an entry in the hash whose value has the same SV as val;
12709  * If so, return a mortal copy of the key. */
12710
12711 STATIC SV*
12712 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
12713 {
12714     dVAR;
12715     register HE **array;
12716     I32 i;
12717
12718     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
12719
12720     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
12721                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
12722         return NULL;
12723
12724     array = HvARRAY(hv);
12725
12726     for (i=HvMAX(hv); i>0; i--) {
12727         register HE *entry;
12728         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
12729             if (HeVAL(entry) != val)
12730                 continue;
12731             if (    HeVAL(entry) == &PL_sv_undef ||
12732                     HeVAL(entry) == &PL_sv_placeholder)
12733                 continue;
12734             if (!HeKEY(entry))
12735                 return NULL;
12736             if (HeKLEN(entry) == HEf_SVKEY)
12737                 return sv_mortalcopy(HeKEY_sv(entry));
12738             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
12739         }
12740     }
12741     return NULL;
12742 }
12743
12744 /* Look for an entry in the array whose value has the same SV as val;
12745  * If so, return the index, otherwise return -1. */
12746
12747 STATIC I32
12748 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
12749 {
12750     dVAR;
12751
12752     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
12753
12754     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
12755                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
12756         return -1;
12757
12758     if (val != &PL_sv_undef) {
12759         SV ** const svp = AvARRAY(av);
12760         I32 i;
12761
12762         for (i=AvFILLp(av); i>=0; i--)
12763             if (svp[i] == val)
12764                 return i;
12765     }
12766     return -1;
12767 }
12768
12769 /* S_varname(): return the name of a variable, optionally with a subscript.
12770  * If gv is non-zero, use the name of that global, along with gvtype (one
12771  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
12772  * targ.  Depending on the value of the subscript_type flag, return:
12773  */
12774
12775 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
12776 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
12777 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
12778 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
12779
12780 STATIC SV*
12781 S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
12782         const SV *const keyname, I32 aindex, int subscript_type)
12783 {
12784
12785     SV * const name = sv_newmortal();
12786     if (gv) {
12787         char buffer[2];
12788         buffer[0] = gvtype;
12789         buffer[1] = 0;
12790
12791         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
12792
12793         gv_fullname4(name, gv, buffer, 0);
12794
12795         if ((unsigned int)SvPVX(name)[1] <= 26) {
12796             buffer[0] = '^';
12797             buffer[1] = SvPVX(name)[1] + 'A' - 1;
12798
12799             /* Swap the 1 unprintable control character for the 2 byte pretty
12800                version - ie substr($name, 1, 1) = $buffer; */
12801             sv_insert(name, 1, 1, buffer, 2);
12802         }
12803     }
12804     else {
12805         CV * const cv = find_runcv(NULL);
12806         SV *sv;
12807         AV *av;
12808
12809         if (!cv || !CvPADLIST(cv))
12810             return NULL;
12811         av = MUTABLE_AV((*av_fetch(CvPADLIST(cv), 0, FALSE)));
12812         sv = *av_fetch(av, targ, FALSE);
12813         sv_setpvn(name, SvPV_nolen_const(sv), SvCUR(sv));
12814     }
12815
12816     if (subscript_type == FUV_SUBSCRIPT_HASH) {
12817         SV * const sv = newSV(0);
12818         *SvPVX(name) = '$';
12819         Perl_sv_catpvf(aTHX_ name, "{%s}",
12820             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
12821         SvREFCNT_dec(sv);
12822     }
12823     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
12824         *SvPVX(name) = '$';
12825         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
12826     }
12827     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
12828         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
12829         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
12830     }
12831
12832     return name;
12833 }
12834
12835
12836 /*
12837 =for apidoc find_uninit_var
12838
12839 Find the name of the undefined variable (if any) that caused the operator o
12840 to issue a "Use of uninitialized value" warning.
12841 If match is true, only return a name if it's value matches uninit_sv.
12842 So roughly speaking, if a unary operator (such as OP_COS) generates a
12843 warning, then following the direct child of the op may yield an
12844 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
12845 other hand, with OP_ADD there are two branches to follow, so we only print
12846 the variable name if we get an exact match.
12847
12848 The name is returned as a mortal SV.
12849
12850 Assumes that PL_op is the op that originally triggered the error, and that
12851 PL_comppad/PL_curpad points to the currently executing pad.
12852
12853 =cut
12854 */
12855
12856 STATIC SV *
12857 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
12858                   bool match)
12859 {
12860     dVAR;
12861     SV *sv;
12862     const GV *gv;
12863     const OP *o, *o2, *kid;
12864
12865     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
12866                             uninit_sv == &PL_sv_placeholder)))
12867         return NULL;
12868
12869     switch (obase->op_type) {
12870
12871     case OP_RV2AV:
12872     case OP_RV2HV:
12873     case OP_PADAV:
12874     case OP_PADHV:
12875       {
12876         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
12877         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
12878         I32 index = 0;
12879         SV *keysv = NULL;
12880         int subscript_type = FUV_SUBSCRIPT_WITHIN;
12881
12882         if (pad) { /* @lex, %lex */
12883             sv = PAD_SVl(obase->op_targ);
12884             gv = NULL;
12885         }
12886         else {
12887             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
12888             /* @global, %global */
12889                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
12890                 if (!gv)
12891                     break;
12892                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
12893             }
12894             else /* @{expr}, %{expr} */
12895                 return find_uninit_var(cUNOPx(obase)->op_first,
12896                                                     uninit_sv, match);
12897         }
12898
12899         /* attempt to find a match within the aggregate */
12900         if (hash) {
12901             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
12902             if (keysv)
12903                 subscript_type = FUV_SUBSCRIPT_HASH;
12904         }
12905         else {
12906             index = find_array_subscript((const AV *)sv, uninit_sv);
12907             if (index >= 0)
12908                 subscript_type = FUV_SUBSCRIPT_ARRAY;
12909         }
12910
12911         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
12912             break;
12913
12914         return varname(gv, hash ? '%' : '@', obase->op_targ,
12915                                     keysv, index, subscript_type);
12916       }
12917
12918     case OP_PADSV:
12919         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
12920             break;
12921         return varname(NULL, '$', obase->op_targ,
12922                                     NULL, 0, FUV_SUBSCRIPT_NONE);
12923
12924     case OP_GVSV:
12925         gv = cGVOPx_gv(obase);
12926         if (!gv || (match && GvSV(gv) != uninit_sv))
12927             break;
12928         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
12929
12930     case OP_AELEMFAST:
12931         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
12932             if (match) {
12933                 SV **svp;
12934                 AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
12935                 if (!av || SvRMAGICAL(av))
12936                     break;
12937                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12938                 if (!svp || *svp != uninit_sv)
12939                     break;
12940             }
12941             return varname(NULL, '$', obase->op_targ,
12942                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12943         }
12944         else {
12945             gv = cGVOPx_gv(obase);
12946             if (!gv)
12947                 break;
12948             if (match) {
12949                 SV **svp;
12950                 AV *const av = GvAV(gv);
12951                 if (!av || SvRMAGICAL(av))
12952                     break;
12953                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
12954                 if (!svp || *svp != uninit_sv)
12955                     break;
12956             }
12957             return varname(gv, '$', 0,
12958                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
12959         }
12960         break;
12961
12962     case OP_EXISTS:
12963         o = cUNOPx(obase)->op_first;
12964         if (!o || o->op_type != OP_NULL ||
12965                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
12966             break;
12967         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
12968
12969     case OP_AELEM:
12970     case OP_HELEM:
12971         if (PL_op == obase)
12972             /* $a[uninit_expr] or $h{uninit_expr} */
12973             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
12974
12975         gv = NULL;
12976         o = cBINOPx(obase)->op_first;
12977         kid = cBINOPx(obase)->op_last;
12978
12979         /* get the av or hv, and optionally the gv */
12980         sv = NULL;
12981         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
12982             sv = PAD_SV(o->op_targ);
12983         }
12984         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
12985                 && cUNOPo->op_first->op_type == OP_GV)
12986         {
12987             gv = cGVOPx_gv(cUNOPo->op_first);
12988             if (!gv)
12989                 break;
12990             sv = o->op_type
12991                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
12992         }
12993         if (!sv)
12994             break;
12995
12996         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
12997             /* index is constant */
12998             if (match) {
12999                 if (SvMAGICAL(sv))
13000                     break;
13001                 if (obase->op_type == OP_HELEM) {
13002                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), cSVOPx_sv(kid), 0, 0);
13003                     if (!he || HeVAL(he) != uninit_sv)
13004                         break;
13005                 }
13006                 else {
13007                     SV * const * const svp = av_fetch(MUTABLE_AV(sv), SvIV(cSVOPx_sv(kid)), FALSE);
13008                     if (!svp || *svp != uninit_sv)
13009                         break;
13010                 }
13011             }
13012             if (obase->op_type == OP_HELEM)
13013                 return varname(gv, '%', o->op_targ,
13014                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
13015             else
13016                 return varname(gv, '@', o->op_targ, NULL,
13017                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
13018         }
13019         else  {
13020             /* index is an expression;
13021              * attempt to find a match within the aggregate */
13022             if (obase->op_type == OP_HELEM) {
13023                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
13024                 if (keysv)
13025                     return varname(gv, '%', o->op_targ,
13026                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
13027             }
13028             else {
13029                 const I32 index
13030                     = find_array_subscript((const AV *)sv, uninit_sv);
13031                 if (index >= 0)
13032                     return varname(gv, '@', o->op_targ,
13033                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
13034             }
13035             if (match)
13036                 break;
13037             return varname(gv,
13038                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
13039                 ? '@' : '%',
13040                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
13041         }
13042         break;
13043
13044     case OP_AASSIGN:
13045         /* only examine RHS */
13046         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
13047
13048     case OP_OPEN:
13049         o = cUNOPx(obase)->op_first;
13050         if (o->op_type == OP_PUSHMARK)
13051             o = o->op_sibling;
13052
13053         if (!o->op_sibling) {
13054             /* one-arg version of open is highly magical */
13055
13056             if (o->op_type == OP_GV) { /* open FOO; */
13057                 gv = cGVOPx_gv(o);
13058                 if (match && GvSV(gv) != uninit_sv)
13059                     break;
13060                 return varname(gv, '$', 0,
13061                             NULL, 0, FUV_SUBSCRIPT_NONE);
13062             }
13063             /* other possibilities not handled are:
13064              * open $x; or open my $x;  should return '${*$x}'
13065              * open expr;               should return '$'.expr ideally
13066              */
13067              break;
13068         }
13069         goto do_op;
13070
13071     /* ops where $_ may be an implicit arg */
13072     case OP_TRANS:
13073     case OP_SUBST:
13074     case OP_MATCH:
13075         if ( !(obase->op_flags & OPf_STACKED)) {
13076             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
13077                                  ? PAD_SVl(obase->op_targ)
13078                                  : DEFSV))
13079             {
13080                 sv = sv_newmortal();
13081                 sv_setpvs(sv, "$_");
13082                 return sv;
13083             }
13084         }
13085         goto do_op;
13086
13087     case OP_PRTF:
13088     case OP_PRINT:
13089     case OP_SAY:
13090         match = 1; /* print etc can return undef on defined args */
13091         /* skip filehandle as it can't produce 'undef' warning  */
13092         o = cUNOPx(obase)->op_first;
13093         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
13094             o = o->op_sibling->op_sibling;
13095         goto do_op2;
13096
13097
13098     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
13099     case OP_RV2SV:
13100     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
13101
13102         /* the following ops are capable of returning PL_sv_undef even for
13103          * defined arg(s) */
13104
13105     case OP_BACKTICK:
13106     case OP_PIPE_OP:
13107     case OP_FILENO:
13108     case OP_BINMODE:
13109     case OP_TIED:
13110     case OP_GETC:
13111     case OP_SYSREAD:
13112     case OP_SEND:
13113     case OP_IOCTL:
13114     case OP_SOCKET:
13115     case OP_SOCKPAIR:
13116     case OP_BIND:
13117     case OP_CONNECT:
13118     case OP_LISTEN:
13119     case OP_ACCEPT:
13120     case OP_SHUTDOWN:
13121     case OP_SSOCKOPT:
13122     case OP_GETPEERNAME:
13123     case OP_FTRREAD:
13124     case OP_FTRWRITE:
13125     case OP_FTREXEC:
13126     case OP_FTROWNED:
13127     case OP_FTEREAD:
13128     case OP_FTEWRITE:
13129     case OP_FTEEXEC:
13130     case OP_FTEOWNED:
13131     case OP_FTIS:
13132     case OP_FTZERO:
13133     case OP_FTSIZE:
13134     case OP_FTFILE:
13135     case OP_FTDIR:
13136     case OP_FTLINK:
13137     case OP_FTPIPE:
13138     case OP_FTSOCK:
13139     case OP_FTBLK:
13140     case OP_FTCHR:
13141     case OP_FTTTY:
13142     case OP_FTSUID:
13143     case OP_FTSGID:
13144     case OP_FTSVTX:
13145     case OP_FTTEXT:
13146     case OP_FTBINARY:
13147     case OP_FTMTIME:
13148     case OP_FTATIME:
13149     case OP_FTCTIME:
13150     case OP_READLINK:
13151     case OP_OPEN_DIR:
13152     case OP_READDIR:
13153     case OP_TELLDIR:
13154     case OP_SEEKDIR:
13155     case OP_REWINDDIR:
13156     case OP_CLOSEDIR:
13157     case OP_GMTIME:
13158     case OP_ALARM:
13159     case OP_SEMGET:
13160     case OP_GETLOGIN:
13161     case OP_UNDEF:
13162     case OP_SUBSTR:
13163     case OP_AEACH:
13164     case OP_EACH:
13165     case OP_SORT:
13166     case OP_CALLER:
13167     case OP_DOFILE:
13168     case OP_PROTOTYPE:
13169     case OP_NCMP:
13170     case OP_SMARTMATCH:
13171     case OP_UNPACK:
13172     case OP_SYSOPEN:
13173     case OP_SYSSEEK:
13174         match = 1;
13175         goto do_op;
13176
13177     case OP_ENTERSUB:
13178     case OP_GOTO:
13179         /* XXX tmp hack: these two may call an XS sub, and currently
13180           XS subs don't have a SUB entry on the context stack, so CV and
13181           pad determination goes wrong, and BAD things happen. So, just
13182           don't try to determine the value under those circumstances.
13183           Need a better fix at dome point. DAPM 11/2007 */
13184         break;
13185
13186     case OP_FLIP:
13187     case OP_FLOP:
13188     {
13189         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
13190         if (gv && GvSV(gv) == uninit_sv)
13191             return newSVpvs_flags("$.", SVs_TEMP);
13192         goto do_op;
13193     }
13194
13195     case OP_POS:
13196         /* def-ness of rval pos() is independent of the def-ness of its arg */
13197         if ( !(obase->op_flags & OPf_MOD))
13198             break;
13199
13200     case OP_SCHOMP:
13201     case OP_CHOMP:
13202         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
13203             return newSVpvs_flags("${$/}", SVs_TEMP);
13204         /*FALLTHROUGH*/
13205
13206     default:
13207     do_op:
13208         if (!(obase->op_flags & OPf_KIDS))
13209             break;
13210         o = cUNOPx(obase)->op_first;
13211         
13212     do_op2:
13213         if (!o)
13214             break;
13215
13216         /* if all except one arg are constant, or have no side-effects,
13217          * or are optimized away, then it's unambiguous */
13218         o2 = NULL;
13219         for (kid=o; kid; kid = kid->op_sibling) {
13220             if (kid) {
13221                 const OPCODE type = kid->op_type;
13222                 if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
13223                   || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
13224                   || (type == OP_PUSHMARK)
13225                 )
13226                 continue;
13227             }
13228             if (o2) { /* more than one found */
13229                 o2 = NULL;
13230                 break;
13231             }
13232             o2 = kid;
13233         }
13234         if (o2)
13235             return find_uninit_var(o2, uninit_sv, match);
13236
13237         /* scan all args */
13238         while (o) {
13239             sv = find_uninit_var(o, uninit_sv, 1);
13240             if (sv)
13241                 return sv;
13242             o = o->op_sibling;
13243         }
13244         break;
13245     }
13246     return NULL;
13247 }
13248
13249
13250 /*
13251 =for apidoc report_uninit
13252
13253 Print appropriate "Use of uninitialized variable" warning
13254
13255 =cut
13256 */
13257
13258 void
13259 Perl_report_uninit(pTHX_ const SV *uninit_sv)
13260 {
13261     dVAR;
13262     if (PL_op) {
13263         SV* varname = NULL;
13264         if (uninit_sv) {
13265             varname = find_uninit_var(PL_op, uninit_sv,0);
13266             if (varname)
13267                 sv_insert(varname, 0, 0, " ", 1);
13268         }
13269         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13270                 varname ? SvPV_nolen_const(varname) : "",
13271                 " in ", OP_DESC(PL_op));
13272     }
13273     else
13274         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
13275                     "", "", "");
13276 }
13277
13278 /*
13279  * Local variables:
13280  * c-indentation-style: bsd
13281  * c-basic-offset: 4
13282  * indent-tabs-mode: t
13283  * End:
13284  *
13285  * ex: set ts=8 sts=4 sw=4 noet:
13286  */